<?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>Joe Lennon</title>
	
	<link>http://www.joelennon.ie</link>
	<description>Rants, Raves &amp; Recommendations</description>
	<lastBuildDate>Mon, 02 Apr 2012 20:13:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/joelennonie" /><feedburner:info uri="joelennonie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Set and get the full HTML content of an iframe</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/dqNStV4Cu74/</link>
		<comments>http://www.joelennon.ie/2012/04/02/iframe-innerhtml/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 20:10:36 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[contenteditable]]></category>
		<category><![CDATA[designmode]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 in action]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[innerhtml]]></category>
		<category><![CDATA[xmlserializer]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=769</guid>
		<description><![CDATA[I&#8217;m currently working on a chapter for HTML5 in Action that covers rich-text editing using the contentEditable and designMode features of HTML5. The sample application for this chapter is a web-based HTML editor app, and it allows you to quickly switch between a WYSIWYG (What You See Is What You Get) rich-text editing view and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently working on a chapter for HTML5 in Action that covers rich-text editing using the contentEditable and designMode features of HTML5. The sample application for this chapter is a web-based HTML editor app, and it allows you to quickly switch between a WYSIWYG (What You See Is What You Get) rich-text editing view and a HTML syntax editing view. In building the sample app, I ran into a few problems along the way.</p>
<p>Firstly, I tried using a standard &lt;div&gt; element, making it editable by setting contentEditable=&#8221;true&#8221; on it. While this worked fine for HTML snippets, it completely destroyed any full HTML documents that I loaded into the application. So if you loaded a HTML document with a root &lt;html&gt; element, all of this would be removed anytime you edited the document in the rich text editor.</p>
<p>To fix this, I changed the element from a &lt;div&gt; to an &lt;iframe&gt;. This immediately raised a few new challenges. Firstly, changing the content of an iframe using JavaScript isn&#8217;t as simple as using document.getElementById and innerHTML, like it was with the regular &lt;div&gt;. Instead, we need to get the contentDocument of the iframe as follows:</p>
<pre style="margin-bottom:16px">var iframeDoc = document.getElementById('iframeEl').contentDocument;</pre>
<p>Of course, this doesn&#8217;t work in IE, so to provide a workaround for that:</p>
<pre style="margin-bottom:16px">var iframeEl = document.getElementById('iframeEl'),
    iframeDoc = iframeEl.contentWindow || document.frames['iframeEl'].document;</pre>
<p>The next issue is that this does not have an innerHTML property that we can set to update the content. You could use DOM API methods to manually create the document programmatically, but in my case I needed to simply set it to the value of a big string of HTML. To do this, you can use the following code:</p>
<pre style="margin-bottom:16px">var content = 'HTML content goes here';
iframeDoc.open();
iframeDoc.write(content);
iframeDoc.close();</pre>
<p>That wasn&#8217;t so bad. But what about getting the contents of the iframe? Well, I&#8217;ve seen plenty of sites tell you to use something like:</p>
<pre style="margin-bottom:16px">var html = iframeDoc.body.innerHTML;</pre>
<p>This is fine for snippets, but if you are working with HTML documents that have a doctype and root &lt;html&gt; elements and &lt;head&gt; sections, these will all be missing. After rummaging through the DOM inspector to try and find a property that included the entire HTML markup, I eventually gave up and took my search to the Web. Before too long, I found the <a title="http://stackoverflow.com/a/1666064" href="http://stackoverflow.com/a/1666064" target="_blank">answer on Stack Overflow</a>. It&#8217;s hardly an obvious solution, as I&#8217;m sure you&#8217;ll agree:</p>
<pre style="margin-bottom:16px">var html = XMLSerializer().serializeToString(iframeDoc);</pre>
<p>This preserves everything in the document, including any doctype declaration and the head section of the HTML markup.</p>
<p>I haven&#8217;t tested this in older browsers, but it worked for me on Chrome 17, Firefox 11, Safari 5.1, Opera 11.51 and IE 9. In fact, I&#8217;m pretty sure XMLSerializer was newly introduced in IE9, so if you have a workaround for older versions of IE or any other browsers, please leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2012/04/02/iframe-innerhtml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2012/04/02/iframe-innerhtml/</feedburner:origLink></item>
		<item>
		<title>iOS Scroll To Top in Sencha Touch 2 Lists</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/GLVL6VSBtcc/</link>
		<comments>http://www.joelennon.ie/2012/03/16/ios-scroll-to-top-in-sencha-touch-2-lists/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 18:37:22 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Sencha Touch]]></category>
		<category><![CDATA[getscroller]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[scroll to top]]></category>
		<category><![CDATA[sencha touch]]></category>
		<category><![CDATA[sencha touch 2]]></category>
		<category><![CDATA[tap clock]]></category>
		<category><![CDATA[titlebar]]></category>
		<category><![CDATA[titlecomponent]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=760</guid>
		<description><![CDATA[Ever wish you could scroll to the top of a Sencha Touch list by tapping on the clock in iOS, like you can with native applications? Me too. Unfortunately, I haven&#8217;t found a way to get around this limitation (if you know of one, please let me know!), but I have come up with an [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wish you could scroll to the top of a Sencha Touch list by tapping on the clock in iOS, like you can with native applications? Me too. Unfortunately, I haven&#8217;t found a way to get around this limitation (if you know of one, please let me know!), but I have come up with an alternative solution you can use if your app has a titlebar. Basically it attaches an event to the text element in the titlebar which will scroll your view to the top. This is a nice workaround, as often when a user taps the clock in iOS, they also tap the titlebar due to the size of their thumbs.</p>
<p>The following code requires Sencha Touch 2.</p>
<pre>
<pre>listeners: {
    initialize: function(c, o) {
        c.titleComponent.innerElement.on('tap', function() {
            Ext.ComponentQuery.query('#myList')[0].getScrollable().getScroller().scrollTo(0,0,true);
        });
    }
}</pre>
</pre>
<p>The above code should be added to your titlebar component, and you should give the list (or other container) you want to scroll an ID &#8211; in the example above I&#8217;ve used the ID <strong>myList</strong>. The third argument in the scrollTo function specifies whether the scrolling should be animated or not &#8211; it is false by default</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2012/03/16/ios-scroll-to-top-in-sencha-touch-2-lists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2012/03/16/ios-scroll-to-top-in-sencha-touch-2-lists/</feedburner:origLink></item>
		<item>
		<title>Announcing HTML5 in Action</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/ml4fIWRLS2M/</link>
		<comments>http://www.joelennon.ie/2011/09/28/announcing-html5-in-action/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 15:27:37 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5 in action]]></category>
		<category><![CDATA[indexeddb]]></category>
		<category><![CDATA[localstorage]]></category>
		<category><![CDATA[manning]]></category>
		<category><![CDATA[web forms]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=731</guid>
		<description><![CDATA[I am currently co-authoring my second book, HTML5 in Action, due to be published early 2012 by Manning Publications. The book is currently available on the Manning Early Access Program, which allows you to download chapters as they become available, and receive the final edition of the book when it is published in either e-Book or [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>I am currently co-authoring my second book, <em>HTML5 in Action</em>, due to be published early 2012 by Manning Publications. The book is currently available on the Manning Early Access Program, which allows you to download chapters as they become available, and receive the final edition of the book when it is published in either e-Book or printed formats (if you buy the printed version directly from Manning, you get the e-Book for free). For more information on the book, see the book&#8217;s web page at<a title="HTML5 in Action" href="http://manning.com/crowther2/" target="_blank">http://manning.com/crowther2/</a>.</p>
<p>The other authors on this title are Rob Crowther, a UK-based developer who is also the writer of Manning&#8217;s <em>Quick &amp; Easy HTML5 and CSS3</em> book; and Ash Blue, from Chicago, IL, who is a HTML5 games development guru. There are currently three chapters available for download (you can get Chapter 1 for free), and four more should follow in the next few weeks. You can discuss the book with other readers (as well as myself, Rob and Ash) on the <a title="HTML5 in Action forum" href="http://www.manning-sandbox.com/forum.jspa?forumID=792" target="_blank">Manning Sandbox Forums</a>.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2011/09/28/announcing-html5-in-action/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2011/09/28/announcing-html5-in-action/</feedburner:origLink></item>
		<item>
		<title>Get started with Dojo Mobile 1.7</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/Jh1EL_7HJ5A/</link>
		<comments>http://www.joelennon.ie/2011/09/13/get-started-with-dojo-mobile-1-7/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 10:15:42 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[developerWorks]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[dojo 1.6]]></category>
		<category><![CDATA[dojo 1.7]]></category>
		<category><![CDATA[dojo mobile]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[phonegap]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=713</guid>
		<description><![CDATA[Learn about Dojo Mobile 1.7, the latest version of the mobile web development framework that&#8217;s an extension of the Dojo toolkit. See how to download Dojo 1.7 from trunk and how to use Dojo Mobile in your applications. Explore the various widgets and components it offers, and learn how to wrap your web application up [...]]]></description>
			<content:encoded><![CDATA[<p>Learn about Dojo Mobile 1.7, the latest version of the mobile web development framework that&#8217;s an extension of the Dojo toolkit. See how to download Dojo 1.7 from trunk and how to use Dojo Mobile in your applications. Explore the various widgets and components it offers, and learn how to wrap your web application up in a native application using PhoneGap.</p>
<p>Read the article in full at <a title="Get started with Dojo Mobile 1.7" href="http://www.ibm.com/developerworks/library/wa-getstarteddojo/" target="_blank">http://www.ibm.com/developerworks/library/wa-getstarteddojo/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2011/09/13/get-started-with-dojo-mobile-1-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2011/09/13/get-started-with-dojo-mobile-1-7/</feedburner:origLink></item>
		<item>
		<title>Explore MongoDB</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/NX36I8WJDHU/</link>
		<comments>http://www.joelennon.ie/2011/06/22/explore-mongodb/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 08:47:41 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[developerWorks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[bson]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dbms]]></category>
		<category><![CDATA[document-oriented]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=697</guid>
		<description><![CDATA[In this article, you will learn about MongoDB, the open source, document-oriented database management system written in C++ that provides features for scaling your databases in a production environment. Discover what benefits document-oriented databases have over traditional relational database management systems (RDBMS). Install MongoDB and start creating databases, collections, and documents. Examine Mongo&#8217;s dynamic querying [...]]]></description>
			<content:encoded><![CDATA[<p>In this article, you will learn about MongoDB, the open source, document-oriented database management system written in C++ that provides features for scaling your databases in a production environment. Discover what benefits document-oriented databases have over traditional relational database management systems (RDBMS). Install MongoDB and start creating databases, collections, and documents. Examine Mongo&#8217;s dynamic querying features, which provide key/value store efficiency in a way familiar to RDBMS database administrators and developers.</p>
<p><em>In recent years, we have seen a growing interest in database management systems that differ from the traditional relational model. At the heart of this is the concept of NoSQL, a term used collectively to denote database software that does not use the Structured Query Language (SQL) to interact with the database. One of the more notable NoSQL projects out there is MongoDB, an open source document-oriented database that stores data in collections of JSON-like documents. What sets MongoDB apart from other NoSQL databases is its powerful document-based query language, which makes the transition from a relational database to MongoDB easy because the queries translate quite easily.</em></p>
<p>Read the full article on IBM developerWorks at <a title="Explore MongoDB" href="http://www.ibm.com/developerworks/opensource/library/os-mongodb4/index.html" target="_blank">http://www.ibm.com/developerworks/opensource/library/os-mongodb4/index.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2011/06/22/explore-mongodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2011/06/22/explore-mongodb/</feedburner:origLink></item>
		<item>
		<title>Get started with Dojo Mobile 1.6</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/ARbJFJi1q4g/</link>
		<comments>http://www.joelennon.ie/2011/06/22/get-started-with-dojo-mobile-1-6/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 08:45:01 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[developerWorks]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[dojo 1.6]]></category>
		<category><![CDATA[dojo 1.7]]></category>
		<category><![CDATA[dojo mobile]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[phonegap]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=695</guid>
		<description><![CDATA[Learn about Dojo Mobile, the mobile web development framework that&#8217;s an extension of the Dojo toolkit. Using a practical example, learn how to include and use Dojo Mobile widgets and components in your applications. You&#8217;ll see how to wrap your web application in a native application using PhoneGap. This article also offers a preview of [...]]]></description>
			<content:encoded><![CDATA[<p>Learn about Dojo Mobile, the mobile web development framework that&#8217;s an extension of the Dojo toolkit. Using a practical example, learn how to include and use Dojo Mobile widgets and components in your applications. You&#8217;ll see how to wrap your web application in a native application using PhoneGap. This article also offers a preview of some of the new features in the next version of the framework.</p>
<p><em>In this article, learn about Dojo Mobile, which is an extension of the Dojo Toolkit. After exploring the differences between mobile web and native applications, follow an example that shows you how to include and use Dojo Mobile widgets in your applications. You&#8217;ll also learn about building native applications with PhoneGap.</em></p>
<p>Read the full article on IBM developerWorks at <a title="Get started with Dojo Mobile 1.6" href="http://www.ibm.com/developerworks/library/wa-dojomobile/index.html" target="_blank">http://www.ibm.com/developerworks/library/wa-dojomobile/index.html</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2011/06/22/get-started-with-dojo-mobile-1-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2011/06/22/get-started-with-dojo-mobile-1-6/</feedburner:origLink></item>
		<item>
		<title>Source Sencha Developer Conference – Day 2</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/6ODgsg3Prb8/</link>
		<comments>http://www.joelennon.ie/2011/05/06/source-dev-con-day-2/#comments</comments>
		<pubDate>Fri, 06 May 2011 15:42:22 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[SourceDevCon]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[ext.direct]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jay garcia]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[prototypal inheritance]]></category>
		<category><![CDATA[sencha]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=680</guid>
		<description><![CDATA[Day 2 of the Source Dev Sencha conference picked up right where the first day left off. I must credit the organizers on a fantastic choice of location and venue. The weather here in Split, Croatia has been consistently glorious since I arrived here. The hotel (Le Meridien Lav) is both an excellent place to [...]]]></description>
			<content:encoded><![CDATA[<p>Day 2 of the Source Dev Sencha conference picked up right where the first day left off. I must credit the organizers on a fantastic choice of location and venue. The weather here in Split, Croatia has been consistently glorious since I arrived here. The hotel (<a href="http://www.starwoodhotels.com/lemeridien/property/overview/index.html?propertyID=1956" target="_blank">Le Meridien Lav</a>) is both an excellent place to stay and a great conference venue. Myself, <a title="@darraghduffy" href="http://twitter.com/#!/darraghduffy" target="_blank">Darragh Duffy</a>, Jonathan Reardon and <a title="@martharotter" href="http://twitter.com/#!/martharotter" target="_blank">Martha Rotter</a> enjoyed a really great meal last night in <a href="http://www.bota-sare.hr/split_bacvice.html" target="_blank">Taverna Bota Šare</a> near the center of Split. We were promised by the concierge that it had the best seafood in Croatia and it really lived up to the high praise.</p>
<p>Before diving into my thoughts on day 2, I had better mention the party last night. My thoughts on conferences are that the best networking is done over a beer, and last night was no exception to that rule. Everything kicked off in a bar right next to the hotel with a steady flow of beer going strong for the night. There were some camera guys around so I&#8217;m sure some footage of our antics will surface before too long. I had the pleasure of enjoying some late night beers with <a title="@nilsdehl" href="http://twitter.com/#!/nilsdehl" target="_blank">Nils Dehl</a>, <a title="@Steffen_Kamper" href="http://twitter.com/#!/Steffen_Kamper" target="_blank">Steffen Kamper</a>, <a title="@hyperionab" href="http://twitter.com/#!/hyperionab" target="_blank">Aditya Bansod</a>, <a title="@donnchadhOC" href="http://twitter.com/#!/donnchadhOC" target="_blank">Denis</a> and Ian from EMC (sorry guys didn&#8217;t catch your surnames) and <a title="@edspencer" href="http://twitter.com/#!/edspencer" target="_blank">Ed Spencer</a>. Kudos to the Sencha guys for resisting the urge to accept our random pleas for various features and products, they must have been well trained in advance of this event! <img src='http://www.joelennon.ie/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  I heard Ed respond with &#8220;No comment&#8221; on more than one occasion &#8211; he&#8217;d make a great politician!</p>
<p>A little hungover and very tired, today&#8217;s agenda was a great remedy for any headache. Things kicked off bright and early with <a title="@bmoeskau" href="http://twitter.com/#!/bmoeskau" target="_blank">Brian Moeskau</a> giving an overview of how to migrate applications to ExtJS 4. Brian also held a practical workshop on the same topic later in the morning. Sencha deserve a lot of credit for their work on making this process as painless as possible. The compatibility layer is going to be hugely important for a lot of existing ExtJS developers, and the fact that both versions can play nice with each other means that companies like the one I work for can start using ExtJS 4 pretty much straight away. Brian&#8217;s excellent blog post on migration is well worth looking at. You can find it at <a title="ExtJS 3 to 4 Migration" href="http://www.sencha.com/blog/ext-js-3-to-4-migration/" target="_blank">http://www.sencha.com/blog/ext-js-3-to-4-migration/</a>.</p>
<p>Next up was another presentation from <a title="@jamespearce" href="http://twitter.com/#!/jamespearce" target="_blank">James Pearce</a>, this time on working with PhoneGap. Up until now our company has deployed our applications solely over the Web, but it looks like we will inevitably need to deploy to devices natively. Thankfully Sencha Touch and PhoneGap are a match made in heaven, and the process is pretty painless when you consider just how difficult it would be to create separate applications for each target device/operating system. James posted a screencast showing the final demo from his presentation, which can be found at <a title="Sencha Touch &amp; PhoneGap Demo" href="http://vimeo.com/23358554" target="_blank">http://vimeo.com/23358554</a>.</p>
<p>Before lunch there was a schedule change, with <a title="@_jdg" href="http://twitter.com/#!/_jdg" target="_blank">Jay Garcia</a>&#8216;s workshop on JavaScript classes and scoping being moved forward. I have read articles, blog posts and even books that try to explain JavaScript&#8217;s prototypal inheritance and scope, none of which compare to Jay&#8217;s coverage this morning. I think many developers in the room had an &#8220;A-ha&#8221; moment when Jay explained just how the &#8220;this&#8221; keyword really works in JavaScript. Watching Jay at work today has given me the urge to really dig deep and gain a stronger understanding of just how ExtJS hangs together.</p>
<p>After lunch, <a title="@ExtAnimal" href="http://twitter.com/#!/ExtAnimal" target="_blank">George White</a> (aka Animal) gave a great workshop session on using JavaScript debugging tools such as Firebug for Firefox, WebKit Developer Tools, JSLint and so on. <a title="@ggrgur" href="http://twitter.com/#!/ggrgur" target="_blank">Grgur Grisogono</a>, who organized the conference, corrected a missing semi-colon in a code example, resulting in George nicknaming him &#8220;Mr. Lint&#8221; (Edit: Damian pointed out that it was actually Jay Garcia who gave Grgur this title in his earlier workshop, thanks Damian!). What I found best about this session was the numerous tips and common issues to look out for when developing ExtJS or Sencha Touch applications. At the end of the session I got the chance to meet James Pearce, and enjoyed briefly talking to him about how we&#8217;re using Sencha&#8217;s products in our company.</p>
<p>Unfortunately I didn&#8217;t make it to Steffen Kamper&#8217;s talk on Ext.Direct, but returned in time for Grgur&#8217;s closing keynote, which uniquely featured him jumping around and cheering on stage, much to the delight of the audience. Grgur thanked a lot of people in the keynote, but I think he deserves thanks for his hard work and effort into organizing such a successful event.</p>
<p>I wish I could tell you that that&#8217;s it for today and I&#8217;ll be back to wrap up the boat trip tomorrow, but alas I must return to Cork tomorrow, which involves an early flight to London Gatwick in the morning. It&#8217;s been a great conference, I&#8217;ve learned a lot and I&#8217;ve met many great people. Hopefully I&#8217;ll get to meet you all again in Austin, TX in October at SenchaCon.</p>
<p>For more coverage on the conference, see Darragh Duffy&#8217;s blog post which covers the entire two days. The URL is <a title="http://www.darraghduffy.ie/?p=294" href="http://www.darraghduffy.ie/?p=294" target="_blank">http://www.darraghduffy.ie/?p=294</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2011/05/06/source-dev-con-day-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2011/05/06/source-dev-con-day-2/</feedburner:origLink></item>
		<item>
		<title>Source Sencha Developer Conference – Day 1</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/d4sOdgGYtTY/</link>
		<comments>http://www.joelennon.ie/2011/05/05/source-dev-con-day-1/#comments</comments>
		<pubDate>Thu, 05 May 2011 15:28:01 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[SourceDevCon]]></category>
		<category><![CDATA[compass]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[croatia]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[sass]]></category>
		<category><![CDATA[sencha]]></category>
		<category><![CDATA[sencha touch]]></category>
		<category><![CDATA[sencha.io]]></category>
		<category><![CDATA[source dev]]></category>
		<category><![CDATA[split]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=673</guid>
		<description><![CDATA[Day one of the Source Dev conference has been great &#8211; things kicked off bright and early this morning with an 8am keynote from Sencha&#8217;s James Pearce and an announcement from Aditya Bansod of Sencha&#8217;s new cloud services product line, Sencha.io. Some interesting points on the roadmap included: ExtJS 4.1 will be released at some point [...]]]></description>
			<content:encoded><![CDATA[<p>Day one of the Source Dev conference has been great &#8211; things kicked off bright and early this morning with an 8am keynote from Sencha&#8217;s <a title="@jamespearce" href="http://twitter.com/#!/jamespearce" target="_blank">James Pearce</a> and an announcement from <a title="@hyperionab" href="http://twitter.com/#!/hyperionab" target="_blank">Aditya Bansod</a> of Sencha&#8217;s new cloud services product line, Sencha.io. Some interesting points on the roadmap included:</p>
<ul>
<li>ExtJS 4.1 will be released at some point this summer, with another 4.x release later this year</li>
<li>Sencha Touch 2 preview will be available at some point in the summer, with a final release targeted for Q3 2011</li>
</ul>
<p>I get the impression that work has not started yet on Sencha Touch 2, but Sencha are gathering some ideas for changes and new features. It should be exciting to see what they come up with, especially given how amazing the first version of the product is!</p>
<p>The next session I attended was <a title="@edspencer" href="http://twitter.com/#!/edspencer" target="_blank">Ed Spencer</a>&#8216;s &#8220;Introducing ExtJS 4&#8243; presentation. I have been following closely the progress with ExtJS 4, but this talk really cleared up some clear benefits of using the new version. Ed even went as far as to do some live coding in the session, illustrating how the new dynamic loading and MVC features make organizing and structuring an ExtJS application much more manageable. It was also great to see some Sencha SDK tools in action &#8211; these are going to make a huge difference when it comes to deployable high-performance production applications.</p>
<p>Following on from the Sencha.io announcement in the keynote, I had to attend Aditya&#8217;s session on the same topic to find out more. Right now, Sencha have made a commercial product from the tinySrc labs project, enabling developers to serve up much smaller image files to devices, without needing to create multiple versions of an image manually. More exciting was the announcement that freemium services for doing similar things with JavaScript and CSS files is on the way. This covers Sencha.io Src, but there is also the concept of Sencha.io Sync, which is in invite-only beta right now. It&#8217;ll be interesting to see how this evolves, but it seems to offer a means of storing data locally in an application to eradicate latency issues, sync&#8217;ing the data back to a central Sencha server when possible, and then replicating this data across devices. There was a cool demo of a crossword application, with changes made in a browser session updating immediately in a separate browser. Definitely one to watch, this!</p>
<p>The next session I attended was <a title="@jsakalos" href="http://twitter.com/#!/jsakalos" target="_blank">Jozek Sakalos</a> (Saki from Sencha forums) speaking about how to write large applications. He had some good advice for developers regarding planning and organizing your projects before you start coding. I would have liked to see more ExtJS-specific and practical examples, but unfortunately time was pressing.</p>
<p>James Pearce was up again next for a talk on Theming and Sass. As someone who has done quite a bit of work with Sencha Touch recently, I am very familiar with Sencha&#8217;s use of Sass and Compass, and James&#8217; presentation was very interesting. I learned some good tips about where to go to find all the different variables available for Sencha Touch theming, and it was great to find out about how theming works in ExtJS 4 and in the new ExtJS charts. I have to say James is a great speaker, very clear and to the point. At one point, James said that HTML5 is &#8220;a badge for the way the Web is changing&#8221;. With his permission, I might have to use that quote in HTML5 In Action, as I think it sums it up perfectly for me.</p>
<p>Went for lunch with my colleagues <a title="@darraghduffy" href="http://twitter.com/#!/darraghduffy" target="_blank">Darragh Duffy</a> and Jonathan Reardon, and got to meet <a title="@martharotter" href="http://twitter.com/#!/martharotter" target="_blank">Martha Rotter</a>, a developer from Dublin. Later at a coffee break I also got to meet <a title="@donnchadhOC" href="http://twitter.com/#!/donnchadhOC" target="_blank">Denis</a> and Ian from EMC in Cork &#8211; great to see some Irish developers working with Sencha products. We&#8217;ll have to start a user group or something! Lunch was great, some really nice food &#8211; strangely enough coffee was not included though. Martha kindly sorted us out on that front though, so our caffeine needs were soon fulfilled!</p>
<p>After lunch, I attended <a title="@nilsdehl" href="http://twitter.com/#!/nilsdehl" target="_blank">Nils Dehl</a>&#8216;s talk on Ext.data and Ext.Direct. Nils uses <a href="http://prezi.com/" target="_blank">Prezi</a> for his presentations, and it really works well when showing large blocks of code samples.</p>
<p>The day wrapped up with <a title="@_jdg" href="http://twitter.com/#!/_jdg" target="_blank">Jay Garcia</a>&#8216;s presentation on creating extensions, plugins and components. I had an idea that Jay knew a lot about ExtJS (he wrote <em>the</em> book on it, after all) but I had really no appreciation for just how much knowledge of the underpinnings this guy has. He really cleared up a lot of things for me in relation to the differences between ExtJS 3 and 4 class systems and how loading works. I&#8217;m really looking forward to reading ExtJS 4 In Action and Sencha Touch In Action when they are published.</p>
<p>Looking forward to meeting more Sencha developers at tonight&#8217;s party, and hopefully day 2 of this conference will be as good as today was! If you&#8217;re at the conference and want to have a chat, send me a tweet or DM &#8211; I&#8217;m <a title="@joelennon" href="http://twitter.com/#!/joelennon" target="_blank">@joelennon</a> on Twitter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2011/05/05/source-dev-con-day-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2011/05/05/source-dev-con-day-1/</feedburner:origLink></item>
		<item>
		<title>Using Pydev for Google App Engine development on a Mac</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/3EMDnvizxFE/</link>
		<comments>http://www.joelennon.ie/2011/03/25/using-pydev-for-google-app-engine-development-on-a-mac/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 13:25:57 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[aptana studio 3.0]]></category>
		<category><![CDATA[aptana studio 3.0 beta]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[django_0_96]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[pydev]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=623</guid>
		<description><![CDATA[I&#8217;ve been experimenting with Google App Engine a bit recently and although it&#8217;s not without its problems, it fits really well with a couple of small projects I&#8217;m working on at the moment. Up until now, I&#8217;ve been mainly working with TextMate and the Google App Engine launcher, which is fine, but hardly an ideal [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been experimenting with Google App Engine a bit recently and although it&#8217;s not without its problems, it fits really well with a couple of small projects I&#8217;m working on at the moment. Up until now, I&#8217;ve been mainly working with TextMate and the Google App Engine launcher, which is fine, but hardly an ideal development environment. That&#8217;s where Aptana Pydev comes in.</p>
<p>Pydev is an Eclipse/Aptana plugin for developing Python applications. It has great support for Django and other Python frameworks, and is a great all-round Python development tool. The feature that caught my eye the most was built-in support for Google App Engine development, but I ran into a few problems when I tried to get up and running with it on my Mac. In this post, I will walk through how I got it all working in the end.</p>
<p>There are several options for downloading Pydev. Eclipse developers can download it as a plugin, or if you don&#8217;t use Eclipse, Pydev comes bundled in Aptana Studio (an Eclipse-based IDE that is geared towards Web development). In this post I will cover the Aptana method, but it should be simple to extract the relevant parts if you are going down the plugin path.</p>
<p>Head to the <a title="http://aptana.org/products/studio3/download" href="http://aptana.org/products/studio3/download" target="_blank">Aptana Studio 3 download page</a> (product in beta at time of writing) and download the disk image to your Mac. When you mount this image and open it, you should see a Finder window like the one in Figure 1.</p>
<div id="attachment_625" class="wp-caption alignnone" style="width: 690px"><img class="size-full wp-image-625 " title="Figure 1. Aptana Studio disk image" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.00.23.png" alt="Figure 1. Aptana Studio disk image" width="680" height="746" /><p class="wp-caption-text">Figure 1. Aptana Studio disk image</p></div>
<p>Follow the simple instructions and drag the Aptana Studio 3 folder into the Applications directory shortcut. This will install Aptana in your Applications directory. You will see the files being copied from the image as shown in Figure 2.</p>
<div id="attachment_626" class="wp-caption alignnone" style="width: 489px"><img class="size-full wp-image-626 " title="Figure 2. Copying files" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.02.41.png" alt="Figure 2. Copying files" width="479" height="170" /><p class="wp-caption-text">Figure 2. Copying files</p></div>
<p>When this is completed, you can open the Aptana Studio 3 folder in your Applications directory and launch Aptana by opening the AptanaStudio3.app file, as seen in Figure 3.</p>
<div id="attachment_627" class="wp-caption alignnone" style="width: 630px"><img class="size-full wp-image-627 " title="Figure 3. Finding AptanaStudio3.app" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.04.17.png" alt="Figure 3. Finding AptanaStudio3.app" width="620" height="550" /><p class="wp-caption-text">Figure 3. Finding AptanaStudio3.app</p></div>
<p>When you first launch Aptana Studio, you will see a blank workspace, as shown in Figure 4.</p>
<div id="attachment_630" class="wp-caption alignnone" style="width: 655px"><img class="size-large wp-image-630    " title="Figure 4. Blank Aptana Studio Workspace" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.14.43-1024x816.png" alt="Figure 4. Blank Aptana Studio Workspace" width="645" height="514" /><p class="wp-caption-text">Figure 4. Blank Aptana Studio Workspace</p></div>
<p>Now it&#8217;s time for the fun stuff. First, you need to create a new project. Press <strong>[Cmd] + N</strong> to open the New Project wizard. In the list of Wizards, you should see a folder named &#8220;Pydev&#8221;. Expand this folder and you will find an option &#8220;Pydev Google App Engine Project&#8221;, as shown in Figure 5.</p>
<div id="attachment_634" class="wp-caption alignnone" style="width: 615px"><img class="size-full wp-image-634" title="Figure 5. New Project Wizard" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.20.15.png" alt="Figure 5. New Project Wizard" width="605" height="586" /><p class="wp-caption-text">Figure 5. New Project Wizard</p></div>
<p>Make sure you&#8217;ve selected the correct option, and hit the <strong>Next &gt;</strong> button to continue. On the next screen, you will need to enter details about the project, including the name of the project, the type of project (Python, Jython or Iron Python), the grammar version to use and the interpreter. Before you fill out this form, you&#8217;ll notice that there&#8217;s a link &#8220;Please configure an interpreter&#8221; in the related preferences before proceeding. This is shown in Figure 6.</p>
<div id="attachment_635" class="wp-caption alignnone" style="width: 615px"><img class="size-full wp-image-635" title="Figure 6. PyDev Project Wizard" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.22.57.png" alt="Figure 6. PyDev Project Wizard" width="605" height="627" /><p class="wp-caption-text">Figure 6. PyDev Project Wizard</p></div>
<p>Click on this link and the main Aptana Preferences window will open, and you will be brought straight to the &#8220;Interpreter &#8211; Python&#8221; page of the Pydev preferences section. On the right-hand-side, there&#8217;s a list (currently empty) of Python interpreters, with two enabled buttons to the right of the list, <strong>New</strong> and <strong>Auto Config</strong>, as can be seen in Figure 7.</p>
<p><em><strong>Warning: Don&#8217;t use Auto Config, on my system it found Python 2.6, and for Google App Engine development you&#8217;ll want to use Python 2.5.</strong></em></p>
<div id="attachment_636" class="wp-caption alignnone" style="width: 653px"><img class="size-full wp-image-636  " title="Figure 7. PyDev Python Interpreter Preferences" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.26.22.png" alt="Figure 7. PyDev Python Interpreter Preferences" width="643" height="534" /><p class="wp-caption-text">Figure 7. PyDev Python Interpreter Preferences</p></div>
<p>Click the &#8220;New&#8221; button and Aptana will open the Select interpreter dialog. Enter the following values into the relevant fields:</p>
<ul>
<li>Interpreter Name: Python 2.5</li>
<li>Interpreter Executable: /System/Library/Frameworks/Python.framework/Versions/2.5/bin/python2.5</li>
</ul>
<p>If you prefer, browse to the location of the executable and select it. The dialog should look like Figure 8.</p>
<div id="attachment_637" class="wp-caption alignnone" style="width: 642px"><img class="size-full wp-image-637" title="Figure 8. Select interpretor" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.30.39.png" alt="Figure 8. Select interpretor" width="632" height="303" /><p class="wp-caption-text">Figure 8. Select interpretor</p></div>
<p>Press the <strong>OK</strong> button to add this interpreter. Aptana will do some preparation, and before long you&#8217;ll be presented with another dialog that needs your attention. This one looks like the screen grab in Figure 9.</p>
<div id="attachment_638" class="wp-caption alignnone" style="width: 681px"><img class="size-full wp-image-638" title="Figure 9. Adding folders to the SYSTEM pythonpath" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.32.23.png" alt="Figure 9. Adding folders to the SYSTEM pythonpath" width="671" height="567" /><p class="wp-caption-text">Figure 9. Adding folders to the SYSTEM pythonpath</p></div>
<p>In my case I simply accepted the default selections and pressed <strong>OK</strong>, but if you need to, you can select the other options. When you press <strong>OK</strong>, you should be back in the Aptana Preferences window, which should now look more like Figure 10.</p>
<div id="attachment_639" class="wp-caption alignnone" style="width: 653px"><img class="size-full wp-image-639  " title="Figure 10. Updated PyDev Preferences" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.34.58.png" alt="Figure 10. Updated PyDev Preferences" width="643" height="534" /><p class="wp-caption-text">Figure 10. Updated PyDev Preferences</p></div>
<p>You can now close this screen by pressing <strong>OK</strong> in the bottom right of the window. After you do this, Aptana will go off and do some work, and you&#8217;ll see a window like the one shown in Figure 11. This might take a minute or two to complete so be patient.</p>
<div id="attachment_640" class="wp-caption alignnone" style="width: 606px"><img class="size-full wp-image-640" title="Figure 12. Aptana background work" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.36.25.png" alt="Figure 12. Aptana background work" width="596" height="256" /><p class="wp-caption-text">Figure 12. Aptana background work</p></div>
<p>When this progress window closes, you&#8217;ll be back at the Pydev Project setup screen. Enter whatever project name you like, I&#8217;ve called mine &#8220;game-planner&#8221; which is the same as the application ID for my Google App Engine application. Make sure &#8220;Python&#8221; is selected as the Project Type, and change the Grammar Version to 2.5. If you only set up the Python 2.5 interpreter, you can leave the Intepreter set to &#8220;Default&#8221;, or alternatively you can change this to &#8220;Python 2.5&#8243; if you are unsure. The completed project screen should look something like Figure 13.</p>
<div id="attachment_641" class="wp-caption alignnone" style="width: 615px"><img class="size-full wp-image-641" title="Figure 13. Project dialog, filled out" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.41.26.png" alt="Figure 13. Project dialog, filled out" width="605" height="627" /><p class="wp-caption-text">Figure 13. Project dialog, filled out</p></div>
<p>Press the <strong>Next &gt;</strong> button to move on to the next step of the Project Wizard. This step asks you to select the Google App Engine Directory. It is shown in Figure 14.</p>
<div id="attachment_642" class="wp-caption alignnone" style="width: 615px"><img class="size-full wp-image-642" title="Figure 14. Google App Engine Directory" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.48.40.png" alt="Figure 14. Google App Engine Directory" width="605" height="627" /><p class="wp-caption-text">Figure 14. Google App Engine Directory</p></div>
<p>You can use the <strong>Browse</strong> button, but unless you downloaded the zip archive of the App Engine Python SDK, you will not be able to find the directory in Finder. This is because the SDK package that comes in the form of the &#8220;Google App Engine Launcher&#8221; is wrapped up in a .app archive, which can&#8217;t be explored in Finder. See Figure 15 for an example of this.</p>
<div id="attachment_643" class="wp-caption alignnone" style="width: 627px"><img class="size-full wp-image-643" title="Figure 15. Cannot browse GoogleAppEngineLauncher.app" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.50.06.png" alt="Figure 15. Cannot browse GoogleAppEngineLauncher.app" width="617" height="480" /><p class="wp-caption-text">Figure 15. Cannot browse GoogleAppEngineLauncher.app</p></div>
<p>The location it is looking for is the location where the Google App Engine files <strong>dev_appserver.py</strong>, <strong>appcfg.py</strong>, the <strong>lib</strong> directory and so on are located. If you are using the launcher version of the SDK, this is usually in the following location:</p>
<pre style="width: 620px; overflow: auto;">/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine</pre>
<p>&nbsp;</p>
<p>If you paste this into the Google App Engine Directory field, however, you&#8217;ll notice that it results in an error. This error is shown in Figure 16.</p>
<div id="attachment_652" class="wp-caption alignnone" style="width: 615px"><img class="size-full wp-image-652" title="Figure 16. Error finding django lib directory" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-12.57.27.png" alt="Figure 16. Error finding django lib directory" width="605" height="627" /><p class="wp-caption-text">Figure 16. Error finding django lib directory</p></div>
<p>The reason for this error is relatively straightforward &#8211; Google App Engine doesn&#8217;t have a directory named django at that path. Apparently this issue will be fixed in the next release of Pydev. However, as seen in Figure 17, there are two other directories that are very similar, django_0_96 and django_1_2.</p>
<div id="attachment_653" class="wp-caption alignnone" style="width: 622px"><img class="size-full wp-image-653  " title="Figure 17. django directories that are available" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-13.00.48.png" alt="Figure 17. django directories that are available" width="612" height="373" /><p class="wp-caption-text">Figure 17. django directories that are available</p></div>
<p>To solve the problem, we can simply create a symbolic link named django, which will point to the django_0_96 directory. To do this, open Terminal (Applications &gt; Utilities &gt; Terminal) and issue the following commands:</p>
<pre style="width: 620px; overflow: auto;">$ cd /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/
$ ln -s django_0_96 django</pre>
<p>&nbsp;</p>
<p>If you issue the <strong>ls</strong> command after doing this, you should see that there is now what looks like a <strong>django</strong> directory. This is a soft link to the <strong>django_0_96</strong> directory, and if any changes are made in <strong>django_0_96</strong>, they will automatically be reflected in the <strong>django</strong> directory. Sample Terminal output is shown in Figure 18.</p>
<div id="attachment_655" class="wp-caption alignnone" style="width: 654px"><img class="size-full wp-image-655 " title="Figure 18. Mac OS X Terminal Output" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-13.09.47.png" alt="Figure 18. Mac OS X Terminal Output" width="644" height="424" /><p class="wp-caption-text">Figure 18. Mac OS X Terminal Output</p></div>
<p>Next, go back to Aptana and enter the directory path again (cut it and re-paste it back) to refresh the wizard. This time, you should see a much friendlier result, like the one shown in Figure 19.</p>
<div id="attachment_656" class="wp-caption alignnone" style="width: 615px"><img class="size-full wp-image-656" title="Figure 19. No errors this time around" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-13.12.23.png" alt="Figure 19. No errors this time around" width="605" height="627" /><p class="wp-caption-text">Figure 19. No errors this time around</p></div>
<p>Click <strong>Finish</strong> and the project will be created. You might be asked to switch to the Pydev perspective, as shown in Figure 20. It&#8217;s up to you whether you do this, I personally checked the <strong>Remember my decision</strong> field and pressed the <strong>Yes</strong> button.</p>
<div id="attachment_657" class="wp-caption alignnone" style="width: 606px"><img class="size-full wp-image-657" title="Figure 20. Pydev Perspective" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-13.15.03.png" alt="Figure 20. Pydev Perspective" width="596" height="237" /><p class="wp-caption-text">Figure 20. Pydev Perspective</p></div>
<p>You should now be in your Pydev Google App Engine project. From here you can create, run and debug your Google App Engine applications. The default Pydev workspace is shown in Figure 21.</p>
<div id="attachment_658" class="wp-caption alignnone" style="width: 624px"><img class="size-large wp-image-658 " title="Figure 21. Pydev Eclipse Perspective" src="http://www.joelennon.ie/wp-content/uploads/2011/03/Screen-shot-2011-03-25-at-13.18.55-1024x816.png" alt="Figure 21. Pydev Eclipse Perspective" width="614" height="490" /><p class="wp-caption-text">Figure 21. Pydev Eclipse Perspective</p></div>
<p>If you have any questions about this post, or have comments, suggestions or improvements, please leave a comment. Thanks for reading!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2011/03/25/using-pydev-for-google-app-engine-development-on-a-mac/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2011/03/25/using-pydev-for-google-app-engine-development-on-a-mac/</feedburner:origLink></item>
		<item>
		<title>Beating Odin in Final Fantasy XIII</title>
		<link>http://feedproxy.google.com/~r/joelennonie/~3/zeVdbD985gY/</link>
		<comments>http://www.joelennon.ie/2011/03/21/beating-odin-in-final-fantasy-xiii/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 18:42:15 +0000</pubDate>
		<dc:creator>Joe Lennon</dc:creator>
				<category><![CDATA[Final Fantasy XIII]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[boss]]></category>
		<category><![CDATA[eidolon]]></category>
		<category><![CDATA[ff13]]></category>
		<category><![CDATA[ffxiii]]></category>
		<category><![CDATA[final fantasy 13]]></category>
		<category><![CDATA[final fantasy xiii]]></category>
		<category><![CDATA[gestalt]]></category>
		<category><![CDATA[odin]]></category>
		<category><![CDATA[ps3]]></category>
		<category><![CDATA[xbox 360]]></category>

		<guid isPermaLink="false">http://www.joelennon.ie/?p=617</guid>
		<description><![CDATA[I&#8217;m playing Final Fantasy XIII at the moment and this evening I was playing and came up against the Odin Eidolon boss battle. The first time I started the battle, he killed me with about 2 moves. It was like the time I tried to fight the Midgar Zolom in Final Fantasy VII early in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m playing Final Fantasy XIII at the moment and this evening I was playing and came up against the Odin Eidolon boss battle. The first time I started the battle, he killed me with about 2 moves. It was like the time I tried to fight the Midgar Zolom in Final Fantasy VII early in the game, I thought there must be a way to skip this battle. The next time I went in, I used Fortisol and Aegisol before the start and found it much more bearable. I kept swapping between the Dual Casting and Double Dose paradigms and the Gestalt meter filled up pretty quickly. But no matter what I did, I could never finish the battle, with Lightning being killed by the Doom counter over her head each and every time.</p>
<p>At this point I was getting frustrated so I went online for guidance, and the majority of people were suggesting strategies that were more or less what I was already doing, saying it was easy and they didn&#8217;t know why people had so much trouble with it. At this point I figured I must have made a mistake with my character leveling (of which there is very little really) up to this stage. Fortunately, before I decided to give up completely, I came across a blog post where a comment had the magical solution: when the Gestalt bar fills, you must press X (360) or Square (PS3) to &#8220;claim&#8221; the Eidolon. I had done this with the Shiva battle because the tutorial reminded me, but I completely forgot about this bit when it came to Odin.</p>
<p>Some people probably think I&#8217;m a blithering idiot (no worries, so did I), but hopefully someone who is having the same trouble as I did will find this and have the same &#8220;Duh!&#8221; moment when they realise what they&#8217;re doing wrong. When you know what you&#8217;re doing, this battle really should only take a minute or so and you should easily get the 5 star rating for it.</p>
<p>Some battle tips:</p>
<ul>
<li>If you have them, use both a Fortisol and Aegisol shroud (press LB on 360, L1 on PS3, to bring up the shroud menu when you are in roaming mode, <strong>before</strong> you enter the battle. This will pre-protect your characters, so you don&#8217;t have to use the next tip.</li>
<li>If you don&#8217;t have any of these left, go into the battle with the Archmage paradigm applied and allow the Synergist character use the protective magic. It is absolutely essential that you do this at the start, Odin is vicious and will kill you very quickly if you don&#8217;t</li>
<li>Equip both characters with Spark Ring accessories if you have them (you should)</li>
<li>Make sure you&#8217;ve applied all the available Crystarium for both Lightning and Hope, to max out their HP, Strength and Magic stats as much as possible before the battle</li>
<li>Set the Battle Speed to &#8220;Slow&#8221; in Settings to give yourself some more time (you can change it back after the battle if you like)</li>
<li>When your characters&#8217; health is near full, switch to Dual Casting and fire as much as you can at Odin to fill up his Gestalt bar</li>
<li>When your characters&#8217; health dips into the yellow, switch to Double Dose to heal up</li>
<li>Keep an eye on the Gestalt bar at all times during the battle, as soon as it fills up, tap X (360) or Square (PS3) to finish the battle and claim Odin</li>
</ul>
<p>Much thanks to the jkl, the person who left the comment on this post <a title="Final Fantasy XIII: How to Beat Odin" href="http://www.etftw.co.uk/blog/posts/183" target="_blank">http://www.etftw.co.uk/blog/posts/183</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joelennon.ie/2011/03/21/beating-odin-in-final-fantasy-xiii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.joelennon.ie/2011/03/21/beating-odin-in-final-fantasy-xiii/</feedburner:origLink></item>
	</channel>
</rss>

