<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/templates/wow/atom.css" type="text/css" ?>
<feed
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://blog.odynia.org/feeds/atom.xml" rel="self" title="Odynia.org Blog" type="application/x.atom+xml" />
    <link href="http://blog.odynia.org/"                        rel="alternate"    title="Odynia.org Blog" type="text/html" />
    <link href="http://blog.odynia.org/rss.php?version=2.0"     rel="alternate"    title="Odynia.org Blog" type="application/rss+xml" />
    <title type="html">Odynia.org Blog</title>
    <subtitle type="html">..</subtitle>
    <icon>http://blog.odynia.org/templates/wow/img/s9y_banner_small.png</icon>
    <id>http://blog.odynia.org/</id>
    <updated>2009-12-08T17:15:31Z</updated>
    <generator uri="http://www.s9y.org/" version="0.9.1">Serendipity 0.9.1 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>
    
<entry>
    <link href="http://blog.odynia.org/archives/41-tramTRACKER-in-AFR.html" rel="alternate" title="tramTRACKER in AFR" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2009-12-08T17:12:18Z</published>
    <updated>2009-12-08T17:15:31Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=41</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=41</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/1-Apple-Mac-iPhone" label="Apple / Mac / iPhone" term="Apple / Mac / iPhone" />
    <id>http://blog.odynia.org/archives/41-guid.html</id>
    <title type="html">tramTRACKER in AFR</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Looks like a review of the tramTRACKER iPhone app was posted in the AFR today in amongst a review of a bunch of other iPhone apps.<br /><br /><br />

<blockquote>"In metropolitan Melbourne the king of the localised apps is TramTracker, a way of hooking an iPhone into the real time transport information the system has been able to generate for years.<br /><br />
Recently ousted tram operator Yarra Trams must be cursing the timing of its failed contract renewal bid. If TramTracker for iPhone had run a couple of years before Judgement Day, they might have held onto the contract. The beauty of
TramTracker is not during the peak, when transport is regular - if unpleasantly overfull. It's that more people will be prepared to travel at off-peak times. When you can reliably arrive at a stop a couple of minutes before a tram instead of risking a cold and wet or warm and windy 20-minute wait going in and coming home, a tram seems a fine way of getting to the CBD late on a Saturday afternoon.<br /><br />
It feels rather luxurious to sip a sparkler in the bar after the show at the Victorian Arts Centre until the iPhone announces that one's personal transport is about to arrive, and step on the carriage a minute or two later."</blockquote>        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/40-Underlined-UILabel.html" rel="alternate" title="Underlined UILabel" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2009-10-14T16:44:13Z</published>
    <updated>2009-10-14T16:55:28Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=40</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=40</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/1-Apple-Mac-iPhone" label="Apple / Mac / iPhone" term="Apple / Mac / iPhone" />
    <id>http://blog.odynia.org/archives/40-guid.html</id>
    <title type="html">Underlined UILabel</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
<p>Whoa, it's been a while since posting!</p>
<br />
<p>Anyway, for a particular iPhone project I've been working on I've come across a requirement to be able to draw an underline underneath text on a UILabel. Google pointed me to a couple of <a href="http://forums.macrumors.com/showthread.php?t=561572">tips</a>, but lacked a complete solution.</p><br />
<p>Posted below is what I ended up with.</p><br />
<h4>UnderLineLabel.h</h4>
<div style="color: #bbb; font-size: 10px;">Click on a comment to hide it. Click <a href="javascript:;" onClick="show_comments_header()">here</a> to show all comments.</div>
<div style="padding: 5px; border: 1px solid #aaaaaa; background: #bbbbbb;"><code><span style="color: #000000">
<span name="header" id="header" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">#import&#160;&lt;UIKit/UIKit.h&gt;<br /><br />/**<br />&#160;*&#160;UnderLineLabel&#160;class<br />**/<br /></span><span style="color: #007700">@interface&#160;</span><span style="color: #0000BB">UnderLineLabel&#160;</span><span style="color: #007700">:&#160;</span><span style="color: #0000BB">UILabel&#160;</span><span style="color: #007700">{<br />&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">BOOL&#160;underline</span><span style="color: #007700">;<br />}<br /><br /></span><span name="header" id="header" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;call&#160;setUnderline&#160;to&#160;YES/NO&#160;to&#160;show/hide&#160;the&#160;underline,&#160;this&#160;doesn't&#160;force&#160;a&#160;redraw<br /></span><span style="color: #007700">@</span><span style="color: #0000BB">property&#160;</span><span style="color: #007700">(</span><span style="color: #0000BB">nonatomic</span><span style="color: #007700">,</span><span style="color: #0000BB">getter</span><span style="color: #007700">=</span><span style="color: #0000BB">isUnderlined</span><span style="color: #007700">)&#160;</span><span style="color: #0000BB">BOOL&#160;underline</span><span style="color: #007700">;<br /><br />@</span><span style="color: #0000BB">end</span>
</span>
</code></div><br />
<script language="Javascript"> function show_comments_header () { var el = document.getElementsByName('header'); for (var i=0; i < el.length; i++) { el[i].style.display = 'inline'; el[i].style.visibility = 'visible'; } }</script><br />
<h4>UnderLineLabel.m</h4>
<div style="color: #bbb; font-size: 10px;">Click on a comment to hide it. Click <a href="javascript:;" onClick="show_comments_body()">here</a> to show all comments.</div>
<div style="padding: 5px; border: 1px solid #aaaaaa; background: #bbbbbb;"><code><span style="color: #000000">
<span name="body" id="body" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">#import&#160;"UnderLineLabel.h"<br /><br /></span><span style="color: #007700">@</span><span style="color: #0000BB">implementation&#160;UnderLineLabel<br /><br /></span><span style="color: #007700">@</span><span style="color: #0000BB">synthesize&#160;underline</span><span style="color: #007700">;<br /><br />-&#160;(</span><span style="color: #0000BB">void</span><span style="color: #007700">)</span><span style="color: #0000BB">drawTextInRect</span><span style="color: #007700">:(</span><span style="color: #0000BB">CGRect</span><span style="color: #007700">)</span><span style="color: #0000BB">rect<br /></span><span style="color: #007700">{<br />&#160;&#160;&#160;&#160;[</span><span style="color: #0000BB">super&#160;drawTextInRect</span><span style="color: #007700">:</span><span style="color: #0000BB">rect</span><span style="color: #007700">];<br /><br />&#160;&#160;&#160;&#160;if&#160;([</span><span style="color: #0000BB">self&#160;isUnderlined</span><span style="color: #007700">])<br />&#160;&#160;&#160;&#160;{<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="body" id="body" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;Get&#160;the&#160;size&#160;of&#160;the&#160;label<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">CGSize&#160;dynamicSize&#160;</span><span style="color: #007700">=&#160;[</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">text&#160;sizeWithFont</span><span style="color: #007700">:</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">font&#160;constrainedToSize</span><span style="color: #007700">:</span><span style="color: #0000BB">CGSizeMake</span><span style="color: #007700">(</span><span style="color: #0000BB">99999</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">99999</span><span style="color: #007700">)<br /></span><span style="color: #0000BB">lineBreakMode</span><span style="color: #007700">:</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">lineBreakMode</span><span style="color: #007700">];<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="body" id="body" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;Get&#160;the&#160;current&#160;graphics&#160;context<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">CGContextRef&#160;context&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">UIGraphicsGetCurrentContext</span><span style="color: #007700">();<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="body" id="body" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;Make&#160;it&#160;a&#160;while&#160;line&#160;1.0&#160;pixels&#160;wide<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">CGContextSetStrokeColorWithColor</span><span style="color: #007700">(</span><span style="color: #0000BB">context</span><span style="color: #007700">,&#160;[</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">textColor&#160;CGColor</span><span style="color: #007700">]);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">CGContextSetLineWidth</span><span style="color: #007700">(</span><span style="color: #0000BB">context</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">1.5</span><span style="color: #007700">);<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="body" id="body" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;find&#160;the&#160;origin&#160;point<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">CGPoint&#160;origin&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">CGPointMake</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">0</span><span style="color: #007700">);<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="body" id="body" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;horizontal&#160;alignment&#160;depends&#160;on&#160;the&#160;alignment&#160;of&#160;the&#160;text<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">if&#160;(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">textAlignment&#160;</span><span style="color: #007700">==&#160;</span><span style="color: #0000BB">UITextAlignmentCenter</span><span style="color: #007700">)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">origin</span><span style="color: #007700">.</span><span style="color: #0000BB">x&#160;</span><span style="color: #007700">=&#160;(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">frame</span><span style="color: #007700">.</span><span style="color: #0000BB">size</span><span style="color: #007700">.</span><span style="color: #0000BB">width&#160;</span><span style="color: #007700">/&#160;</span><span style="color: #0000BB">2</span><span style="color: #007700">)&#160;-&#160;(</span><span style="color: #0000BB">dynamicSize</span><span style="color: #007700">.</span><span style="color: #0000BB">width&#160;</span><span style="color: #007700">/&#160;</span><span style="color: #0000BB">2</span><span style="color: #007700">);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else&#160;if&#160;(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">textAlignment&#160;</span><span style="color: #007700">==&#160;</span><span style="color: #0000BB">UITextAlignmentRight</span><span style="color: #007700">)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">origin</span><span style="color: #007700">.</span><span style="color: #0000BB">x&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">frame</span><span style="color: #007700">.</span><span style="color: #0000BB">size</span><span style="color: #007700">.</span><span style="color: #0000BB">width&#160;</span><span style="color: #007700">-&#160;</span><span style="color: #0000BB">dynamicSize</span><span style="color: #007700">.</span><span style="color: #0000BB">width</span><span style="color: #007700">;<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="body" id="body" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;vertical&#160;alignment&#160;is&#160;always&#160;middle/centre&#160;plus&#160;half&#160;the&#160;height&#160;of&#160;the&#160;text<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">origin</span><span style="color: #007700">.</span><span style="color: #0000BB">y&#160;</span><span style="color: #007700">=&#160;(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">frame</span><span style="color: #007700">.</span><span style="color: #0000BB">size</span><span style="color: #007700">.</span><span style="color: #0000BB">height&#160;</span><span style="color: #007700">/&#160;</span><span style="color: #0000BB">2</span><span style="color: #007700">)&#160;+&#160;(</span><span style="color: #0000BB">dynamicSize</span><span style="color: #007700">.</span><span style="color: #0000BB">height&#160;</span><span style="color: #007700">/&#160;</span><span style="color: #0000BB">2</span><span style="color: #007700">);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="body" id="body" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;Draw&#160;the&#160;line<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">CGContextMoveToPoint</span><span style="color: #007700">(</span><span style="color: #0000BB">context</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">origin</span><span style="color: #007700">.</span><span style="color: #0000BB">x</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">origin</span><span style="color: #007700">.</span><span style="color: #0000BB">y</span><span style="color: #007700">);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">CGContextAddLineToPoint</span><span style="color: #007700">(</span><span style="color: #0000BB">context</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">origin</span><span style="color: #007700">.</span><span style="color: #0000BB">x&#160;</span><span style="color: #007700">+&#160;</span><span style="color: #0000BB">dynamicSize</span><span style="color: #007700">.</span><span style="color: #0000BB">width</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">origin</span><span style="color: #007700">.</span><span style="color: #0000BB">y</span><span style="color: #007700">);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">CGContextStrokePath</span><span style="color: #007700">(</span><span style="color: #0000BB">context</span><span style="color: #007700">);<br />&#160;&#160;&#160;&#160;}<br />}<br /><br />-&#160;(</span><span style="color: #0000BB">void</span><span style="color: #007700">)</span><span style="color: #0000BB">dealloc&#160;</span><span style="color: #007700">{<br />&#160;&#160;&#160;&#160;[</span><span style="color: #0000BB">super&#160;dealloc</span><span style="color: #007700">];<br />}<br /><br /><br />@</span><span style="color: #0000BB">end<br /></span>
</span>
</code></div><br />
<script language="Javascript"> function show_comments_body () { var el = document.getElementsByName('body'); for (var i=0; i < el.length; i++) { el[i].style.display = 'inline'; el[i].style.visibility = 'visible'; } }</script><br /><br />
<p>All done!</p>
<br />
<p>-bok</p>        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/39-iTransit-Blog.html" rel="alternate" title="iTransit Blog" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2009-01-28T05:04:51Z</published>
    <updated>2009-01-28T05:06:19Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=39</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=39</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
    <id>http://blog.odynia.org/archives/39-guid.html</id>
    <title type="html">iTransit Blog</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Hi all!<br />
<br />
I've decided to separate the iTransit blog from what is essentially my personal blog.<br />
<br />
You can find the new iTransit blog over at <a href="http://www.itransit.com.au/blog/">http://www.itransit.com.au/blog/</a><br />
<br />
Thanks for reading!<br />
<br />
-bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/38-Brumby-Government-Drinking-Game.html" rel="alternate" title="Brumby Government Drinking Game" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-10-17T15:10:10Z</published>
    <updated>2008-10-17T15:11:18Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=38</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=38</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/2-General" label="General" term="General" />
    <id>http://blog.odynia.org/archives/38-guid.html</id>
    <title type="html">Brumby Government Drinking Game</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Lets start a new drinking game!<br /><br />

Every time the Brumby government announces a new major road project, take a shot. If you're still alive come Christmas, you win <img src="http://blog.odynia.org/templates/wow/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br /><br />

bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/37-iTransit-Native-Application.html" rel="alternate" title="iTransit Native Application" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-09-26T07:53:47Z</published>
    <updated>2008-10-01T01:16:22Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=37</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=37</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
    <id>http://blog.odynia.org/archives/37-guid.html</id>
    <title type="html">iTransit Native Application</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Hi all,<br />
<br />
Thought I'd post an update on where we're up to and whats coming up, we've had a surge in users recently and have just crossed 2000 home screen additions.<br />
<br />
<b>tramTRACKER</b><br />
<br />
We're now using the mobile tramTRACKER site for the real time data after discussions with Yarra Trams. This doesn't include the destination data so we're matching that against the schedule - it looks more consistent now with the scheduled data, but occasionally results in blank rows with route numbers only. If you see one of these let us know so we can repair it. They're also going to be incorporating some of the ideas in iTransit back into their own offerings.<br />
<br />
<b>Native Application</b><br />
<br />
The Native app is continuing development with two versions planned - a free version and a paid for version.<br />
<br />
Both versions will feature selective caching and will be able to sync timetable changes over the air - you can control if/when to check for updates. You can also choose which lines/routes you want to use regularly and so save space/bandwidth and get only the data that applies to you - the app will grab missing data from the website as needed, or you can grab everything for complete offline usage.<br />
<br />
The free native application will support pretty much everything the current web app does with a few extra goodies. The paid for "pro" version will contain a lot of bonus features, which I'll keep to myself for now <br />
<br />
<b>Other things</b><br />
<br />
I've redeveloped the backend recently to allow integration with other services out there, such as Melbourne Transport Updates and more, there is also an API in development that powers this if you have your own services you might like to build. The bus data has been redesigned and the remaining routes will be filled in in the next week or so, similarly the inter-city for Sydney.<br />
<br />
Also: faux real time data for Trains <img src="http://blog.odynia.org/templates/wow/img/emoticons/laugh.png" alt=":-D" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
<br />
Remeber, vote in the poll!<br />
<br />
-bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/36-iTransit-Editions-Pricing-Native-App.html" rel="alternate" title="iTransit Editions Pricing (Native App)" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-09-25T18:30:29Z</published>
    <updated>2008-09-26T07:47:21Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=36</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=36</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
    <id>http://blog.odynia.org/archives/36-guid.html</id>
    <title type="html">iTransit Editions Pricing (Native App)</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Hi all,<br /><br />
Work is well underway for the Native iTransit application, but there are still a few things undecided.<br /><br />
We know that there will be two versions of the application released:<br /><br />
<b>Free Version</b><br /><br />
There will be a free or "lite" version, which will contain pretty much all of the existing functionality of the web application. (Still undecided about the traffic conditions until I talk to VicRoads)<br /><br />
<b>"Pro" Version</b><br /><br />
There will also be a "pro" version, for want of a better name. It will be the same as the free version but with additional bonus features. Several of which we know already, some more that we're still considering.<br /><br />

The "pro" version is also a way of supporting additional development - we do this because we love it and we use the software too, but covering development costs is always a plus <img src="http://blog.odynia.org/templates/wow/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br /><br />

So, what would people be willing to pay for a "pro" version? Vote in the poll to the right, leave a comment, or hit us up via <a href="http://twitter.com/itransit_au">twitter</a>.<br /><br />

bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/35-iTransit-Twitter-Feed.html" rel="alternate" title="iTransit Twitter Feed" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-09-24T18:56:16Z</published>
    <updated>2008-09-24T19:11:11Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=35</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=35</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
    <id>http://blog.odynia.org/archives/35-guid.html</id>
    <title type="html">iTransit Twitter Feed</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
For those wanting to keep up with the latest updates for iTransit you can follow the twitter feed at <a href="http://twitter.com/itransit_au">htp://twitter.com/itransit_au</a> or the RSS updates of said feed at <a href="http://twitter.com/statuses/user_timeline/16022820.rss">http://twitter.com/statuses/user_timeline/16022820.rss</a>.<br /><br  />
bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/34-Google-releases-Chrome.html" rel="alternate" title="Google releases Chrome" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-09-03T17:18:09Z</published>
    <updated>2008-09-03T17:51:02Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=34</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=34</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/7-Web-Development" label="Web Development" term="Web Development" />
    <id>http://blog.odynia.org/archives/34-guid.html</id>
    <title type="html">Google releases Chrome</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
So! Google has finally made its entry into the browser market, and its filled with lies!<Br /><br />
Specifically:<br />
<blockquote style="font-style: italic;">Google's new browser software is designed to work "invisibly" and will run any application that runs on Apple's Safari web browser, company officials said.</blockquote>
<br />
and<br />
<blockquote style="font-style: italic;">"If you are webmaster, and your site works in Apple Safari then it will work very well in Google Chrome," Pichai said.</blockquote>
<br /><br />
So then, fire up Chrome and point it at <a href="http://iphone.itransit.com.au/">http://iphone.itransit.com.au/</a>.<br /><br />
So, it seems that not all sites that work in Safari will work under Chrome. Its a fair assumption that most sites don't make heavy use of window.openDatabase (<a href="http://www.w3.org/html/wg/html5/#sql">HTML 5 spec</a>) but its still inaccurate to say that all sites that work in Safari will work under Chrome.<br /><br />
Wonder if thats just time/laziness on Google's part not to pull across a more recent version of WebKit or because they wrote their own JS engine (that should be outside the JS engine though..), or because its a competing feature against Google Gears?<br /><br />
Hopefully not the latter. It would be nice to see where Google takes Chrome though as the beta progresses.<br /><br />
Otherwise though, not bad <img src="http://blog.odynia.org/templates/wow/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><Br /><br />
<b>Update:</b> Looks like they're using the "Safari 3.1" branch of Webkit for the beta, which does support window.openDatabase just fine. Seems to be a compile time option and they're choosing to disable it. More info/source over at <a href="http://dev.chromium.org/">http://dev.chromium.org/</a>.<br /><br />
bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/33-iTransit-Going-Forward.html" rel="alternate" title="iTransit: Going Forward" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-08-18T20:52:49Z</published>
    <updated>2008-08-18T20:54:47Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=33</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=33</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
    <id>http://blog.odynia.org/archives/33-guid.html</id>
    <title type="html">iTransit: Going Forward</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Time to press forward with additional data for iTransit.<br /><br />
Ultimately, I'd like it to be useful to everyone in Australia, to that end we're working on adding data for additional cities. Sydney is first up on the radar, and should be completed shortly.<br /><br />
And after that? Well I'll leave that to you.. check the poll on the right hand side of the screen and vote - I'll work down the list based on your votes.<br /><br />

bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/32-iTransit-Revisions.html" rel="alternate" title="iTransit Revisions" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-08-18T20:50:00Z</published>
    <updated>2008-08-18T20:51:56Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=32</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=32</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
    <id>http://blog.odynia.org/archives/32-guid.html</id>
    <title type="html">iTransit Revisions</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Hi all,<br/ ><br />
I've decided that it's somewhat painful trying to group fixes up into a version release for iTransit. Since it is a web app presently, its pretty straight forward to roll smaller revisions out with bug fixes and new features, so that's what I'll be doing.<br /><br />
There is a changelog inside <a href="http://iphone.itransit.com.au/">iTransit</a> (under More..) that will list the changes.<br /><br />
bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/31-New-iTransit-version-released.html" rel="alternate" title="New iTransit version released" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-08-14T18:17:47Z</published>
    <updated>2008-08-18T20:52:05Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=31</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=31</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
    <id>http://blog.odynia.org/archives/31-guid.html</id>
    <title type="html">New iTransit version released</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Hi!<br /><br />

I've released a new version of iTransit with the following features:<br /><br />
<ul>
<li><b>Melbourne Trains:</b> Scheduled Times</li>
<li><b>Melbourne Trams:</b> Live Times (courtesy Yarra Trams)</li>
<li><b>Melbourne Buses:</b> Scheduled Times</li>
<li><b>Melbourne Traffic:</b> Live Travel Times (courtesy VicRoads)</li>
</ul>
<Br />
<h4>Browsing/Searching</h4>
<br />
Browse lines and routes, or search for your station/stop name directly. No more remembering stop IDs! If you know the stop IDs though you can search on those too.<br />
<br />
<h4>Filtering</h4>
<br />
View only the selected line/route, view all lines/routes through a stop, or select from a list which routes you'd like to see. You find your way, your way!<br />
<br />
<h4>Smaller Stops</h4>
<br />
We have data for all stops, but for brevity (and so you don't have to scroll through a hundred stops!) we only show the major stops by default. They're still there though, hit the Minor Stops button to show or hide them.
<br /><br />
<h4>Scheduled/Live Times</h4>
<br />
Where possible we try to show you the live data, but if thats not available we'll go off the timetables, keep and eye on the Live indicator in the toolbar.
<br /><br />
<h4>Maps</h4>
<br />
Not sure where that station is? Click the map button to be taken to the Google Maps application, where you'll be shown where it is! You can then use Google to find you and give you directions.
<br /><br />
<h4>The iTransit Application</h4>
<br />
The iTransit web application has undergone intensive development in order to deliver these features:
<br />
<ul>
<li><b>Small Footprint:</b> The app lives mostly inside Safari's database, so the initial loading of iTransit takes only 2.5KB of data</li>
<li><b>Data Caching:</b> Where possible, we use the internal database to cache stop names and lists, so you only ever need to load them once.</li>
<li><b>Hardware Acceleration:</b> We use the CSS transitions built into WebKit to do the animations, so its hardware accelerated and smoother.</li>
</ul>
<br />
That's the about blerb anyway.<br />
<br />
A native version is in development, and more features are on the way. I'll post more about those sometime in the near future.<br /><br />
bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/30-Channel-7s-Olympic-Coverage.html" rel="alternate" title="Channel 7's Olympic Coverage" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-08-09T06:17:25Z</published>
    <updated>2008-08-09T06:21:10Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=30</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=30</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/2-General" label="General" term="General" />
    <id>http://blog.odynia.org/archives/30-guid.html</id>
    <title type="html">Channel 7's Olympic Coverage</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Well I must say, this has far and away been the worst opening ceremony in the history of the Olympics for viewers from Australia, and this has nothing at all to do with the Chinese.<br /><br />
I'm sure the opening ceremony was spectacular, but we really didn't see any of it!<Br /><br />
Ads cut in everywhere and hid the fireworks and broke any form of continuity there was, and it came back from the ads already into the next portion of the show.<br /><br />
How exactly was anyone meant to enjoy watching that? I know several people are writing letters to complain, how long until a petition appears on the net to get Seven banned from doing the coverage for London?<br /><br />
Thanks anyway Seven for ruining a night that had been hyped for months, I'm sure the Chinese will be equally appalled as to how you've portrayed the start of their games.<br /><br />
bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/29-iPhone-+-Safari-+-Gestures.html" rel="alternate" title="iPhone + Safari + Gestures" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-07-22T22:54:22Z</published>
    <updated>2009-01-27T08:10:51Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=29</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=29</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/1-Apple-Mac-iPhone" label="Apple / Mac / iPhone" term="Apple / Mac / iPhone" />
                        <category scheme="http://blog.odynia.org/categories/7-Web-Development" label="Web Development" term="Web Development" />
    <id>http://blog.odynia.org/archives/29-guid.html</id>
    <title type="html">iPhone + Safari + Gestures</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
Looking for <b>iTransit</b>? Check <a href="http://blog.odynia.org/archives/27-iTransit.html">two posts down</a>.<br />
<br />
--
<br />
<br />
Been playing with touches in Safari, specifically trying to track certain gestures.<br />
<br />
If you haven't read it, a good primer on touches/gestures in Mobile Safari can be found <a href="http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/">here.</a> Its a great starting point.<br />
<br />
So now that the its been established as to how to do Drag and Drop and rotating/scaling what about the other one finger gestures that apple employs?<br />
<br />
Specifically, I'm trying to replicate the swipe left and right functionality of the photo browser (show previous/next photos), and I've been able to do so.<br /><br />
The trick here is to catch the initial touch event, and the ending touch event and work out where our finger has gone. A key thing to remember is that the touches are passed around and updated by reference, so your original copy of the touch will be updated with a new position.<br /><br />
What I've ended up with is a small class that watches the <b>touchstart</b> and <b>touchend</b> events on the document level, and when it detects a swipe it fires a <b>gesture:swipe</b> event.<br />
<br />
<b>How?</b><br />
<br />
The following is the code that I used, you'll need <a href="http://www.prototypejs.org/">Prototype</a> to make this work.<br />
<br />
<div style="color: #bbb; font-size: 10px;">Click on a comment to hide it. Click <a href="javascript:;" onClick="show_comments_gestures.js()">here</a> to show all comments.</div>
<div style="padding: 5px; border: 1px solid #aaaaaa; background: #bbbbbb;"><code><span style="color: #000000">
<span style="color: #007700">var&#160;</span><span style="color: #0000BB">GestureClass&#160;</span><span style="color: #007700">=&#160;Class.</span><span style="color: #0000BB">create<br /></span><span style="color: #007700">({<br />&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;Fired&#160;when&#160;a&#160;new&#160;instance&#160;of&#160;this&#160;object&#160;is&#160;made<br />&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">initialize</span><span style="color: #007700">:&#160;function&#160;()&#160;{<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;listen&#160;for&#160;start/stop&#160;events<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">observe</span><span style="color: #007700">(</span><span style="color: #DD0000">'touchstart'</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">this</span><span style="color: #007700">.</span><span style="color: #0000BB">start</span><span style="color: #007700">.</span><span style="color: #0000BB">bind</span><span style="color: #007700">(</span><span style="color: #0000BB">this</span><span style="color: #007700">));<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">observe</span><span style="color: #007700">(</span><span style="color: #DD0000">'touchend'</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">this</span><span style="color: #007700">.</span><span style="color: #0000BB">end</span><span style="color: #007700">.</span><span style="color: #0000BB">bind</span><span style="color: #007700">(</span><span style="color: #0000BB">this</span><span style="color: #007700">));<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;touch&#160;storage<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">this</span><span style="color: #007700">.</span><span style="color: #0000BB">gestures&#160;</span><span style="color: #007700">=&#160;[];<br />&#160;&#160;&#160;&#160;},<br /><br />&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">start</span><span style="color: #007700">:&#160;function&#160;(</span><span style="color: #0000BB">e</span><span style="color: #007700">)&#160;{<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;currently&#160;only&#160;support&#160;one&#160;finger&#160;on&#160;the&#160;viewport<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">if&#160;(</span><span style="color: #0000BB">e</span><span style="color: #007700">.</span><span style="color: #0000BB">touches</span><span style="color: #007700">.</span><span style="color: #0000BB">length&#160;</span><span style="color: #007700">==&#160;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&#160;{<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;</span><span style="color: #0000BB">touch&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">e</span><span style="color: #007700">.</span><span style="color: #0000BB">touches</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;store&#160;the&#160;touch&#160;for&#160;later<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">this</span><span style="color: #007700">.</span><span style="color: #0000BB">gestures</span><span style="color: #007700">[</span><span style="color: #0000BB">touch</span><span style="color: #007700">.</span><span style="color: #0000BB">identifier</span><span style="color: #007700">]&#160;=&#160;</span><span style="color: #0000BB">Object</span><span style="color: #007700">.clone(</span><span style="color: #0000BB">touch</span><span style="color: #007700">);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">this</span><span style="color: #007700">.</span><span style="color: #0000BB">gestures</span><span style="color: #007700">[</span><span style="color: #0000BB">touch</span><span style="color: #007700">.</span><span style="color: #0000BB">identifier</span><span style="color: #007700">].</span><span style="color: #0000BB">date&#160;</span><span style="color: #007700">=&#160;new&#160;</span><span style="color: #0000BB">Date</span><span style="color: #007700">();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />&#160;&#160;&#160;&#160;},<br />&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">end</span><span style="color: #007700">:&#160;function&#160;(</span><span style="color: #0000BB">e</span><span style="color: #007700">)&#160;{<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;still&#160;only&#160;one&#160;finger<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">if&#160;(</span><span style="color: #0000BB">e</span><span style="color: #007700">.</span><span style="color: #0000BB">changedTouches</span><span style="color: #007700">.</span><span style="color: #0000BB">length&#160;</span><span style="color: #007700">==&#160;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&#160;{<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;get&#160;the&#160;most&#160;recent&#160;touch<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">var&#160;</span><span style="color: #0000BB">end&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">e</span><span style="color: #007700">.</span><span style="color: #0000BB">changedTouches</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">end</span><span style="color: #007700">.</span><span style="color: #0000BB">date&#160;</span><span style="color: #007700">=&#160;new&#160;</span><span style="color: #0000BB">Date</span><span style="color: #007700">();<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;get&#160;the&#160;position&#160;that&#160;we&#160;started&#160;at<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">var&#160;</span><span style="color: #0000BB">start&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">this</span><span style="color: #007700">.</span><span style="color: #0000BB">gestures</span><span style="color: #007700">[</span><span style="color: #0000BB">end</span><span style="color: #007700">.</span><span style="color: #0000BB">identifier</span><span style="color: #007700">];<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;and&#160;the&#160;duration&#160;of&#160;our&#160;swipe?&#160;number&#160;of&#160;milliseconds&#160;the&#160;gesture&#160;took<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">var&#160;</span><span style="color: #0000BB">duration&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">end</span><span style="color: #007700">.</span><span style="color: #0000BB">date</span><span style="color: #007700">.</span><span style="color: #0000BB">getTime</span><span style="color: #007700">()&#160;-&#160;</span><span style="color: #0000BB">start</span><span style="color: #007700">.</span><span style="color: #0000BB">date</span><span style="color: #007700">.</span><span style="color: #0000BB">getTime</span><span style="color: #007700">();<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;calculate&#160;offsets<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">var&#160;</span><span style="color: #0000BB">horizontalMovement&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">start</span><span style="color: #007700">.</span><span style="color: #0000BB">clientX&#160;</span><span style="color: #007700">-&#160;</span><span style="color: #0000BB">end</span><span style="color: #007700">.</span><span style="color: #0000BB">clientX</span><span style="color: #007700">;<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;</span><span style="color: #0000BB">verticalMovement&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">start</span><span style="color: #007700">.</span><span style="color: #0000BB">clientY&#160;</span><span style="color: #007700">-&#160;</span><span style="color: #0000BB">end</span><span style="color: #007700">.</span><span style="color: #0000BB">clientY</span><span style="color: #007700">;<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;big&#160;enoug&#160;to&#160;count&#160;as&#160;a&#160;swipe?&#160;and&#160;quick&#160;enough<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">var&#160;</span><span style="color: #0000BB">viewport&#160;</span><span style="color: #007700">=&#160;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">viewport</span><span style="color: #007700">.</span><span style="color: #0000BB">getDimensions</span><span style="color: #007700">();<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(</span><span style="color: #0000BB">Math</span><span style="color: #007700">.</span><span style="color: #0000BB">abs</span><span style="color: #007700">(</span><span style="color: #0000BB">horizontalMovement</span><span style="color: #007700">)&#160;&gt;=&#160;(</span><span style="color: #0000BB">viewport</span><span style="color: #007700">.</span><span style="color: #0000BB">width</span><span style="color: #007700">/</span><span style="color: #0000BB">2</span><span style="color: #007700">)&#160;&amp;&amp;&#160;</span><span style="color: #0000BB">duration&#160;</span><span style="color: #007700">&lt;=&#160;</span><span style="color: #0000BB">800</span><span style="color: #007700">)&#160;{<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;this&#160;object&#160;is&#160;passed&#160;to&#160;the&#160;new&#160;event&#160;under&#160;the&#160;'memo'&#160;property<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #007700">var&#160;</span><span style="color: #0000BB">gesture&#160;</span><span style="color: #007700">=&#160;{<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">start</span><span style="color: #007700">:&#160;</span><span style="color: #0000BB">start</span><span style="color: #007700">,<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">end</span><span style="color: #007700">:&#160;</span><span style="color: #0000BB">end</span><span style="color: #007700">,<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">gesture</span><span style="color: #007700">:&#160;</span><span style="color: #DD0000">'swipe'</span><span style="color: #007700">,<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">direction</span><span style="color: #007700">:&#160;(</span><span style="color: #0000BB">horizontalMovement&#160;</span><span style="color: #007700">&gt;=&#160;</span><span style="color: #0000BB">0&#160;</span><span style="color: #007700">?&#160;</span><span style="color: #DD0000">'left'&#160;</span><span style="color: #007700">:&#160;</span><span style="color: #DD0000">'right'</span><span style="color: #007700">)<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;};<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span name="gestures.js" id="gestures.js" style="color: #FF8000" onClick="this.style.visibility = 'hidden'; this.style.display = 'none';">//&#160;Fire&#160;the&#160;gesture,&#160;listen&#160;with&#160;document.observe('gesture:swipe',&#160;&lt;function&gt;);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">fire</span><span style="color: #007700">(</span><span style="color: #DD0000">'gesture:swipe'</span><span style="color: #007700">,&#160;</span><span style="color: #0000BB">gesture</span><span style="color: #007700">);<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />&#160;&#160;&#160;&#160;},<br />});<br />var&#160;</span><span style="color: #0000BB">Gestures&#160;</span><span style="color: #007700">=&#160;new&#160;</span><span style="color: #0000BB">GestureClass</span><span style="color: #007700">();</span>
</span>
</code></div><br />
<script language="Javascript"> function show_comments_gestures.js () { var el = document.getElementsByName('gestures.js'); for (var i=0; i < el.length; i++) { el[i].style.display = 'inline'; el[i].style.visibility = 'visible'; } }</script><br /><br />
Is that documented enough to make sense? Drop me a line in the comments if not and I'll see what I can do to explain better <img src="http://blog.odynia.org/templates/wow/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br /><br />
You'll see this gesture used in the new version of iTransit, naturally - and there's more gestures to come!<br /><br />
Cheers,<br />
-bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/28-iTransit-Features-Poll.html" rel="alternate" title="iTransit Features Poll" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-07-17T19:27:33Z</published>
    <updated>2008-08-18T20:52:14Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=28</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=28</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
    <id>http://blog.odynia.org/archives/28-guid.html</id>
    <title type="html">iTransit Features Poll</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
I've posted a poll to try and add some sort of prioritisation to my upcoming feature/nice to have list for iTransit.<br />
<br />
You'll see it to the right of your screen. Vote for the feature that you would most like to see added, but keep in mind its not an absolute list.<br />
<br />
It does allow you guys to have a say in what you think is important though.<br />
<br />
For more information about what iTransit it, please see the <a href="http://blog.odynia.org/archives/27-iTransit.html">previous post</a>.<br />
<br />
bok        </div>
    </content>
</entry>
<entry>
    <link href="http://blog.odynia.org/archives/27-iTransit.html" rel="alternate" title="iTransit" />
    <author>
        <name>Robert Amos</name>
        <email>nospam@example.com</email>
    </author>

    <published>2008-07-16T22:11:14Z</published>
    <updated>2008-08-18T20:52:23Z</updated>
    <wfw:comment>http://blog.odynia.org/wfwcomment.php?cid=27</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>http://blog.odynia.org/rss.php?version=atom1.0&amp;type=comments&amp;cid=27</wfw:commentRss>
                        <category scheme="http://blog.odynia.org/categories/1-Apple-Mac-iPhone" label="Apple / Mac / iPhone" term="Apple / Mac / iPhone" />
                        <category scheme="http://blog.odynia.org/categories/12-iTransit" label="iTransit" term="iTransit" />
                        <category scheme="http://blog.odynia.org/categories/7-Web-Development" label="Web Development" term="Web Development" />
    <id>http://blog.odynia.org/archives/27-guid.html</id>
    <title type="html">iTransit</title>
    <content type="xhtml" xml:base="http://blog.odynia.org/">
        <div xmlns="http://www.w3.org/1999/xhtml">
<div>Hi all,</div><br />
<br />
<div>While I'm quietly working on a new version of iTransit (iui is a bit bloated...) you're invited to continue to check out the current version @ <a href="http://iphone.itransit.com.au/">http://iphone.itransit.com.au/</a>.</div><br />
<br />
<div>Presently it is for Melbourne only, other cities are on my medium-range radar.</div><br />
<br />
<b>Here's whats coming:</b>
<ul>
<li>Smaller, sleeker, faster!</li>
<li>Favourites</li>
<li>Searching via station/stop name</li>
<li>Bus data</li>
<li>Traffic Information</li>
<li>VLine Train/Bus data</li>
<li>Swipe to view next/previous services</li>
<li>Other cities...</li>
<li>Investigate LocationService (GPS) integration <img src="http://blog.odynia.org/templates/wow/img/emoticons/wink.png" alt=";-)" style="display: inline; vertical-align: bottom;" class="emoticon" /></li>
</ul>
<br />
<br />
<div>The current aim for iTransit is to be something that you can whip out on the go to find out info live - as such browsing timetables won't be a focus. </div><br />
<br />
<div>Comments, suggestions and other feedback is very valued. Feel free to leave a comment below or via the app.</div><br />
<br />
<div>Cheers,<br />bok</div>        </div>
    </content>
</entry>
</feed>