<?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>johngirvin.com</title>
	
	<link>http://www.johngirvin.com/blog</link>
	<description />
	<lastBuildDate>Tue, 26 Jan 2010 12:46:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/johngirvin" /><feedburner:info uri="johngirvin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><image><link>http://www.johngirvin.com</link><url>http://www.johngirvin.com/johngirvin-feedburner.png</url><title>johngirvin.com</title></image><item>
		<title>refresh belfast – blaine cook and webfinger</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/wxE4vv7zYQQ/refresh-belfast-blaine-cook-and-webfinger.html</link>
		<comments>http://www.johngirvin.com/blog/archives/refresh-belfast-blaine-cook-and-webfinger.html#comments</comments>
		<pubDate>Mon, 11 Jan 2010 12:05:01 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[belfast]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=409</guid>
		<description><![CDATA[For one reason and another I hadn't attended a Refresh Belfast event for a number of months, but last night I managed to make it to the Black Box again for this regular but informal get-together for local developers and creatives. Speaking this month was Blaine Cook, principal co-author of the OAuth specification and former lead developer of Twitter, on the subject of "Putting a Finger on Web Logins".<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/refresh-belfast-blaine-cook-and-webfinger.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p>For one reason and another I hadn&#8217;t attended a <a href="http://refreshbelfast.org" target="_blank">Refresh Belfast</a> event for a number of months, but last night I managed to make it to the Black Box again for this regular but informal get-together for local developers and creatives. Speaking this month was <a href="http://romeda.org/" target="_blank">Blaine Cook</a>, principal co-author of the <a title="OAuth" href="http://en.wikipedia.org/wiki/OAuth">OAuth</a> specification and former lead developer of <a href="http://twitter.com">Twitter</a>, on the subject of &#8220;Putting a Finger on Web Logins&#8221;.</p>
<p>Blaine talked the audience through a brief history of naming, showing how the idea of individual identity and addressing had developed and refined from animals, through to ancient human civilisations and on into more recent and then modern times. Nowadays we may have many different physical and electronic identities by which we can be contacted. How many email addresses or usernames do you have, for example?</p>
<p>We then moved on to <a href="http://code.google.com/p/webfinger/" target="_blank">WebFinger</a>, a project that Blaine is working on that aims to provide a simple and unified way to identify yourself across various websites, using email address like identifiers. The <a href="http://code.google.com/p/webfinger/wiki/WebFingerProtocol" target="_blank">WebFinger protocol</a> allows metadata such as profile information to be retrieved given only one of these identifiers (that may well be a real email address you own) and subsequently used as login credentials, or whatever.</p>
<p>Much like OpenID, WebFinger would allow single sign-on across sites that were modified to support it, without the user having to create accounts at each of those individual sites. But the the intention is to surpass the uptake of OpenID, based on the realisation that most people already think of their <a href="http://hueniverse.com/2009/08/introducing-webfinger/" target="_blank">email address as an identity</a> but think of URLs (such as OpenID identifiers) as places or locations. For example, I might say to you &#8220;I&#8217;m <a href="/contact">it @ johngirvin . com</a>&#8220;, but I&#8217;m unlikely to say &#8220;I&#8217;m <a href="http://www.johngirvin.com/blog">http://www.johngirvin.com/blog</a>&#8220;.</p>
<p>There are possibly <a href="http://bitworking.org/news/2010/01/webfinger" target="_blank">simpler ways to implement</a> such a scheme, but <a href="http://www.techcrunch.com/2009/08/14/google-points-at-webfinger-your-gmail-address-could-soon-be-your-id/" target="_blank">WebFinger now has Google</a> throwing its weight behind it and could catch on.</p>
<p>We saw some examples of how a WebFinger (or, to be fair, OpenID) enabled site could simplify it&#8217;s log in and registration procedures for users. I found these very interesting as I&#8217;d been struggling with how best to implement the user interface of these parts of a <a href="http://www.johngirvin.com/blog/archives/whats-happening-200912.html">personal project</a> I had been working on. After watching Blaine&#8217;s talk, I think I need to go back to the drawing board with it.</p>
<p>Refresh Belfast continues to be popular, with a crowd over around 120 attending January&#8217;s event.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/refresh-belfast-blaine-cook-and-webfinger.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/cxt7sx3tiRozsynAF-fe7nimRfg/0/da"><img src="http://feedads.g.doubleclick.net/~a/cxt7sx3tiRozsynAF-fe7nimRfg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cxt7sx3tiRozsynAF-fe7nimRfg/1/da"><img src="http://feedads.g.doubleclick.net/~a/cxt7sx3tiRozsynAF-fe7nimRfg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=wxE4vv7zYQQ:nplH9Ci2z0E:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=wxE4vv7zYQQ:nplH9Ci2z0E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=wxE4vv7zYQQ:nplH9Ci2z0E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/wxE4vv7zYQQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/refresh-belfast-blaine-cook-and-webfinger.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/refresh-belfast-blaine-cook-and-webfinger.html</feedburner:origLink></item>
		<item>
		<title>what’s happening 2009/12</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/cY2uiM4D7rM/whats-happening-200912.html</link>
		<comments>http://www.johngirvin.com/blog/archives/whats-happening-200912.html#comments</comments>
		<pubDate>Mon, 21 Dec 2009 11:18:31 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[sites]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=404</guid>
		<description><![CDATA[I have a notional goal for this blog to post at least one update per month, but sometimes I'll be working away on projects in the background and not really have anything specific finished and / or worth writing a post about. Enter what I've decided to call the "Hi, John. What's Happening?" post.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/whats-happening-200912.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I have a notional goal for this blog to post at least one update per month, but sometimes I&#8217;ll be working away on projects in the background and not really have anything specific finished and / or worth writing a post about. Enter what I&#8217;ve decided to call the &#8220;Hi, John. What&#8217;s Happening?&#8221; post.</p>
<p>So what&#8217;s happening? Mostly, it&#8217;s that I&#8217;ve started a(nother) personal web project with the intention of learning about Google&#8217;s cloud hosting service, <a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a>, and the <a href="http://www.springsource.org/" target="_blank">Spring MVC</a> web application framework.</p>
<p>App Engine is an interesting technology and one I&#8217;ve been meaning to dig into for some time. Essentially it allows Python or Java applications to be hosted on Google&#8217;s server infrastructure with all the availability and scalability that it brings, provided that the applications adhere to certain patterns and restrictions that allow the system to distribute them effectively across the Google cloud.</p>
<p>Hosting on Google App Engine is free if the load placed on the system by your application stays within quotas set by Google, so it would seem a great way to build highly available applications with minimum initial investment of time and money. If your application grows beyond the free quotas &#8211; roughly equivalent to five million pageviews per day the the time of writing &#8211; the odds are you&#8217;re making enough money from it anyway to cover your costs.</p>
<p>Spring MVC is one of the more popular Java web application frameworks, but it&#8217;s not one that I&#8217;ve had a chance to use in my day job. <a href="http://blog.springsource.com/2009/12/16/spring-framework-3-0-goes-ga/" target="_blank">Version 3.0 has recently been released</a> and it promises even easier, annotation based configuration for many more typical web application tasks. It&#8217;s very different from the Struts and WebObjects frameworks that I&#8217;ve used in the past.</p>
<p>As if learning App Engine and Spring MVC weren&#8217;t enough, I also decided to build this project with a slightly unusual user interface that makes heavy use of <a href="http://jquery.com/" target="_blank">jQuery</a> and <a href="http://colorpowered.com/colorbox/" target="_blank">modal forms</a> and presents some unique challenges of its own. I drew the line at learning Groovy and Grails or Python and Django too though. Maybe next time.</p>
<p>I find I learn best when I have a specific project in mind, and for now this site is just such a tool to learn about App Engine and Spring MVC. I don&#8217;t want to say much more about it at this point as, like a lot of these &#8220;classroom projects&#8221; that I start, I&#8217;m not sure if it&#8217;ll ever see the light of day!</p>
<p>That&#8217;s what&#8217;s happening.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/whats-happening-200912.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/7qYIxXV0mgGknDTcUIYujDxpnCs/0/da"><img src="http://feedads.g.doubleclick.net/~a/7qYIxXV0mgGknDTcUIYujDxpnCs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7qYIxXV0mgGknDTcUIYujDxpnCs/1/da"><img src="http://feedads.g.doubleclick.net/~a/7qYIxXV0mgGknDTcUIYujDxpnCs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=cY2uiM4D7rM:7JZg-pjoPcc:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=cY2uiM4D7rM:7JZg-pjoPcc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=cY2uiM4D7rM:7JZg-pjoPcc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/cY2uiM4D7rM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/whats-happening-200912.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/whats-happening-200912.html</feedburner:origLink></item>
		<item>
		<title>book review: codeigniter 1.7</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/IBUw97BLS2E/book-review-codeigniter-1-7.html</link>
		<comments>http://www.johngirvin.com/blog/archives/book-review-codeigniter-1-7.html#comments</comments>
		<pubDate>Fri, 04 Dec 2009 18:15:05 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=376</guid>
		<description><![CDATA[I wrote recently about a new book from Packt Publishing covering the CodeIgniter PHP framework that I’ve used in a number of my personal projects. I've now had time to read through the book, and this is what I found.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/book-review-codeigniter-1-7.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://www.johngirvin.com/blog/archives/codeigniter-1-7-book.html">wrote recently</a> about a new book from <a href="http://www.packtpub.com/" target="_blank">Packt Publishing</a> covering the <a href="http://www.codeigniter.com/" target="_blank">CodeIgniter</a> PHP framework that I’ve used in a number of my <a href="http://www.johngirvin.com/blog/tags/sites">personal projects</a>. I&#8217;ve now had time to read through the book, and this is what I found.</p>
<p><img class="aligncenter size-medium wp-image-387" title="CodeIgniter 1.7" src="/blog-content/uploads/2009/11/codeigniter-17-packt-publishing-202x250.jpg" alt="CodeIgniter 1.7" width="202" height="250" /></p>
<p><a href="http://www.packtpub.com/improve-coding-productivity-with-codeigniter-1-7/book" target="_blank">CodeIgniter 1.7</a>, written by Jose Argudo and David Upton, aims to help you &#8220;improve your PHP coding productivity with [...] the powerful and popular CodeIgniter framework&#8221; and is designed as a companion to the excellent user guide that ships with CodeIgniter itself. It is aimed at both newcomers and more experienced developers alike. Books on CodeIgniter are thin on the ground, so as a long time CodeIgniter user (and fan, I&#8217;ll admit) I jumped at the invitation to review this new book shortly after its publication.</p>
<p>I&#8217;ve been using CodeIgniter in many of my personal and freelance projects for a number of years. I chose CodeIgniter over other PHP Model-View-Controller (MVC) structured frameworks initially for its lightweight approach, where the framework provides a basic skeleton for the developer to build an application on and then gets out of the way. This simplicity means that learning to use CodeIgniter is relatively easy compared to, say, <a href="http://cakephp.org/" target="_blank">CakePHP</a> or the <a href="http://framework.zend.com/" target="_blank">Zend</a> Framework, but is balanced against the extent of the functionality that the framework provides.</p>
<p>But if the framework is so easy to pick up and the supplied documentation is of a high standard, who needs a book? If you&#8217;ve never developed an MVC patterned web application before and are about to attempt one based on CodeIgniter, then you do.</p>
<p>The book starts with a comparison of CodeIgniter with <a href="http://cakephp.org/" target="_blank">CakePHP</a> and <a href="http://www.joomla.org/" target="_blank">Joomla!</a>. I see what the authors were trying to achieve here, comparing the lightweight CodeIgniter with a more popular and feature heavy framework and again with a full content management system, but this chapter comes across as clumsy and a little confusing. I also would have liked to have seen other popular PHP frameworks such as <a href="http://www.symfony-project.org/" target="_blank">Symfony</a> or <a href="http://framework.zend.com/" target="_blank">Zend</a> included in the comparison, or at least mentioned in passing.</p>
<p>The meat of the book begins by covering the very basics of downloading CodeIgniter, walking through it&#8217;s directory structure and then getting a &#8220;Hello World&#8221; application up and running on your development environment. Further fundamental topics are then addressed such as accessing databases, creating controllers and views and using sessions, before upping the pace and moving on to more advanced material on caching, file handling, creating your own CodeIgniter extensions, internationalisation of applications and even using XML-RPC remoting. There&#8217;s also a useful chapter on moving your development site on a live server, something that always causes problems even if you&#8217;ve done it before. A summary of the framework and a list of external resources wrap up the contents list.</p>
<p>Each chapter is written in a relaxed, personal and conversational style that&#8217;s easy to follow, and there are plenty of well explained code examples. The style works well enough but I think an extra editing pass would have been of enormous benefit, to pick up on spelling mistakes and more than occasional awkward phrasing. This omission is unfortunate as it gives a bad impression of a book that&#8217;s actually quite good technically. Much effort is made to underline good, sensible development practices and highlight the benefits of building web applications using the MVC pattern. There&#8217;s nothing on  source control or testing of your web applications though, which I thought would have been obvious subjects to cover.</p>
<p>CodeIgniter 1.7 on it&#8217;s own won&#8217;t teach you how to develop web applications using CodeIgniter but, by working through the book and cross referencing with the CodeIgniter user guide for further and more detailed information on the classes and functions touched upon in the text, I think you could progress a long way very quickly. The user guide is good as a reference source, but I recall that when I was starting out I would have welcomed some material that gave a &#8220;bigger picture&#8221; view of the framework and acted as a tutorial and best practice guide. CodeIgniter 1.7, I think, gives this high level view that I was missing.</p>
<p>However, I&#8217;m not sure how much experienced CodeIgniter developers would gain from reading this book. Reading it, I found myself skipping through a lot of the text as obvious, for example. There is still good advice to be found in the later chapters if you persevere, and they are more densely packed than the introductory ones, but I&#8217;m not <em>quite</em> sure this material alone would be reason enough to convince me to buy the book.</p>
<p>Without hesitation I&#8217;d recommend CodeIgniter 1.7 to anyone with some existing PHP knowledge who is starting out building web applications with the CodeIgniter framework. If you&#8217;ve been around the CodeIgniter block a few times, have a think about it first.</p>
<p><a href="http://www.packtpub.com/improve-coding-productivity-with-codeigniter-1-7?utm_source=johngirvin.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001697" target="_blank">CodeIgniter 1.7</a> is available now in printed and eBook format. A sample chapter is <a href="http://www.packtpub.com/files/9485-codeigniter-1-7-sample-chapter-3-%20navigating-your-site.pdf" target="_blank">available</a> (PDF), as well as the <a href="http://www.packtpub.com/article/improve-coding-productivity-with-codeigniter-1-7-table-of-contents" target="_blank">full table of contents</a>. Find out more from the official <a href="http://www.packtpub.com/improve-coding-productivity-with-codeigniter-1-7?utm_source=johngirvin.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001697" target="_blank">Packt Publishing</a> website.</p>
<p><strong>Disclosure</strong>: I have no association with Packt Publishing other than they contacted me to ask if I would review this book. I was provided with both a paper and electronic copy of the book for review purposes with no obligation. No other payment or payment in kind was offered or requested.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/book-review-codeigniter-1-7.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/0Ym_QVXKnNpRUXqGfhTx8fK50tY/0/da"><img src="http://feedads.g.doubleclick.net/~a/0Ym_QVXKnNpRUXqGfhTx8fK50tY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/0Ym_QVXKnNpRUXqGfhTx8fK50tY/1/da"><img src="http://feedads.g.doubleclick.net/~a/0Ym_QVXKnNpRUXqGfhTx8fK50tY/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=IBUw97BLS2E:Q4BrRIVXGy4:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=IBUw97BLS2E:Q4BrRIVXGy4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=IBUw97BLS2E:Q4BrRIVXGy4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/IBUw97BLS2E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/book-review-codeigniter-1-7.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/book-review-codeigniter-1-7.html</feedburner:origLink></item>
		<item>
		<title>codeigniter 1.7 book</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/NpXI2XOr920/codeigniter-1-7-book.html</link>
		<comments>http://www.johngirvin.com/blog/archives/codeigniter-1-7-book.html#comments</comments>
		<pubDate>Thu, 26 Nov 2009 17:18:27 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=383</guid>
		<description><![CDATA[Packt Publishing have recently published a book covering the CodeIgniter PHP framework that I've used in a number of my personal projects. CodeIgniter 1.7, written by Jose Argudo and David Upton, is designed as a companion to the official CodeIgniter user guide and is aimed at both newcomers more experienced developers alike.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/codeigniter-1-7-book.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.packtpub.com/" target="_blank">Packt Publishing</a> have recently published a book covering the <a href="http://www.codeigniter.com" target="_blank">CodeIgniter</a> PHP framework that I&#8217;ve used in a number of my <a href="http://www.johngirvin.com/blog/tags/sites">personal projects</a>. <a href="http://www.packtpub.com/improve-coding-productivity-with-codeigniter-1-7/book" target="_blank">CodeIgniter 1.7</a>, written by Jose Argudo and David Upton, is designed as a companion to the official CodeIgniter user guide and is aimed at both newcomers more experienced developers alike.</p>
<p>It is described as follows:</p>
<blockquote><p><a href="http://www.packtpub.com/improve-coding-productivity-with-codeigniter-1-7?utm_source=johngirvin.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001697" target="_blank">CodeIgniter 1.7</a></p>
<p><a href="http://www.packtpub.com/improve-coding-productivity-with-codeigniter-1-7?utm_source=johngirvin.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001697" target="_blank"><img class="size-medium wp-image-387 alignnone" title="CodeIgniter 1.7" src="/blog-content/uploads/2009/11/codeigniter-17-packt-publishing-202x250.jpg" alt="CodeIgniter 1.7" width="202" height="250" /></a></p>
<p>This book explains how to work with CodeIgniter in a clear logical way. It is not a detailed guide to the syntax of CodeIgniter, but makes an ideal complement to the existing online CodeIgniter user guide, helping you grasp the bigger picture and bringing together many ideas to get your application development started as smoothly as possible.</p>
<p>This book will start you from the basics, installing CodeIgniter, understanding its structure and the MVC pattern. You will also learn how to use some of the most important CodeIgniter libraries and helpers, upload it to a shared server, and take care of the most common problems. If you are new to CodeIgniter, this book will guide you from bottom to top. If you are an experienced developer or already know about CodeIgniter, here you will find ideas and code examples to compare to your own.</p></blockquote>
<p>As an experienced CodeIgniter developer I&#8217;ve been invited (not paid) by Packt to review an early access electronic copy of the book. I&#8217;ve been skimming through it and so far it looks as if it&#8217;s a good companion to the already excellent user guide that ships with CodeIgniter itself. I&#8217;ll be posting a full review in due course.</p>
<p>A sample chapter is <a href="http://www.packtpub.com/files/9485-codeigniter-1-7-sample-chapter-3-%20navigating-your-site.pdf" target="_blank">available</a> (PDF), as well as the <a href="http://www.packtpub.com/article/improve-coding-productivity-with-codeigniter-1-7-table-of-contents" target="_blank">full table of contents</a>. <a href="http://www.packtpub.com/improve-coding-productivity-with-codeigniter-1-7?utm_source=johngirvin.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001697" target="_blank">CodeIgniter 1.7</a> is available now in printed and eBook format. Find out more from the official <a href="http://www.packtpub.com/improve-coding-productivity-with-codeigniter-1-7?utm_source=johngirvin.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001697" target="_blank">Packt Publishing</a> website.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/codeigniter-1-7-book.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/MkeKRkfdBK3AbFjAz0nxO8tqm2I/0/da"><img src="http://feedads.g.doubleclick.net/~a/MkeKRkfdBK3AbFjAz0nxO8tqm2I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MkeKRkfdBK3AbFjAz0nxO8tqm2I/1/da"><img src="http://feedads.g.doubleclick.net/~a/MkeKRkfdBK3AbFjAz0nxO8tqm2I/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=NpXI2XOr920:5JyWedbVr_o:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=NpXI2XOr920:5JyWedbVr_o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=NpXI2XOr920:5JyWedbVr_o:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/NpXI2XOr920" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/codeigniter-1-7-book.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/codeigniter-1-7-book.html</feedburner:origLink></item>
		<item>
		<title>belfast street directories launch video</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/HnanUkAo3pA/belfast-street-directories-launch-video.html</link>
		<comments>http://www.johngirvin.com/blog/archives/belfast-street-directories-launch-video.html#comments</comments>
		<pubDate>Mon, 05 Oct 2009 10:52:59 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[belfast]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[sites]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webobjects]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=367</guid>
		<description><![CDATA[A few weeks ago I wrote about the launch of Public Records Office of Northern Ireland's new searchable archive of Belfast Street Directories. I've now uploaded some coverage of the launch event, originally broadcast on UTV on 23rd September 2009.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/belfast-street-directories-launch-video.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I wrote about the launch of <a href="http://www.johngirvin.com/blog/archives/belfast-street-directories-site-launched.html">Public Records Office of Northern Ireland&#8217;s new searchable archive of Belfast Street Directories</a>. I&#8217;ve now uploaded some coverage of the launch event, originally broadcast on UTV on 23rd September 2009.</p>
<p>Watch out for Roger, one of the developers who helped complete the site long after I&#8217;d left the project.</p>
<p align="center"><object width="480" height="295"><param name="movie" value="http://www.youtube-nocookie.com/v/FvxmUSS3Iws&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/FvxmUSS3Iws&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object></p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/belfast-street-directories-launch-video.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/fV6bpDWxxXa79pEo8FIk0Yd-Vh4/0/da"><img src="http://feedads.g.doubleclick.net/~a/fV6bpDWxxXa79pEo8FIk0Yd-Vh4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/fV6bpDWxxXa79pEo8FIk0Yd-Vh4/1/da"><img src="http://feedads.g.doubleclick.net/~a/fV6bpDWxxXa79pEo8FIk0Yd-Vh4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=HnanUkAo3pA:L8XWbq7CHW4:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=HnanUkAo3pA:L8XWbq7CHW4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=HnanUkAo3pA:L8XWbq7CHW4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/HnanUkAo3pA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/belfast-street-directories-launch-video.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/belfast-street-directories-launch-video.html</feedburner:origLink></item>
		<item>
		<title>twibble: losing friends and alienating people</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/NnUF4JD8xF8/twibble-losing-friends-and-alienating-people.html</link>
		<comments>http://www.johngirvin.com/blog/archives/twibble-losing-friends-and-alienating-people.html#comments</comments>
		<pubDate>Fri, 02 Oct 2009 12:16:26 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=351</guid>
		<description><![CDATA[I admit it, I like to Twitter (Tweet). To help me feed this addiction even when I'm away from the computer I've been using the 0.9 beta versions of Twibble Mobile, a free J2ME Twitter client that works perfectly well on my Nokia handset so I can Tweet wherever there is a 3G connection.

Just recently Twibble has moved out of beta to a final version 1.0, but in my opinion they've handled it badly and risk alienating and losing the users they've gained up until now.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/twibble-losing-friends-and-alienating-people.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I admit it, I like to <a href="http://twitter.com/johngirvin" target="_blank">Twitter</a> (Tweet). To help me feed this addiction even when I&#8217;m away from the computer I&#8217;ve been using the 0.9 beta versions of <a href="http://www.twibble.de" target="_blank">Twibble Mobile</a>, a free J2ME Twitter client that works perfectly well on my Nokia handset so I can Tweet wherever there is a 3G connection.</p>
<p>Just recently <a href="http://www.twibble.de/2009/09/30/changes-in-twibble-mobile/" target="_blank">Twibble has moved out of beta</a> to a final version 1.0, but in my opinion they&#8217;ve handled it badly and risk alienating and losing the users they&#8217;ve gained up until now.</p>
<div id="attachment_364" class="wp-caption aligncenter" style="width: 214px"><img class="size-full wp-image-364" title="Twibble Mobile - J2ME Twitter Client" src="/blog-content/uploads/2009/10/twibble-mobile.png" alt="Twibble Mobile" width="204" height="335" /><p class="wp-caption-text">Twibble Mobile</p></div>
<p>Simultaneously with the move out of beta the developers have introduced a charge for the software for the first time. At under 5 Euro it&#8217;s not much to ask and the software is worth it, but that isn&#8217;t the issue.</p>
<p>The 1.0 free version has had its functionality reduced to the point where it&#8217;s almost useless, by restricting the total number of Tweets you can view to just 10 and introducing an annoying nag screen when the application first starts. The problem is that, since the last 0.9 series beta version had expiry code built in, users are being forced into either paying the charge or &#8220;upgrading&#8221; to the crippled version.</p>
<p>Those who had a perfectly usable mobile Twitter client a couple of days ago are now left with crippleware, and there are also reports of long delays processing upgrades for those that have actually chosen to pay. It&#8217;s little wonder that many previously loyal users are now looking at alternative offerings. Imagine how you would feel if Google started charging to see the second page of results &#8211; you&#8217;d be giving Bing a try I suspect. Now think of the difference if they just started charging for newly added search features instead.</p>
<p>By all means charge for 1.0, but why force a downgrade on your users by making 0.9 expire? Instead of taking functionality away from the free version, why not follow the path trod by many a developer before (for good reason) and provide new or extra features only for the paid &#8220;premium&#8221; version?</p>
<p>When you offer features to users for free and give no indication that they will have to pay for them at some point in the future, they logically form an expectation that they will always have those features for free. When you then hide those features behind a paywall, your users will get upset. This isn&#8217;t rocket surgery.</p>
<p>Twibble is good, stable, usable software, but the jump from beta has been handled very badly and is a  real customer relations failure.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/twibble-losing-friends-and-alienating-people.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/GPW4eW1DZioJaDC6-GiDEAvqEOI/0/da"><img src="http://feedads.g.doubleclick.net/~a/GPW4eW1DZioJaDC6-GiDEAvqEOI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GPW4eW1DZioJaDC6-GiDEAvqEOI/1/da"><img src="http://feedads.g.doubleclick.net/~a/GPW4eW1DZioJaDC6-GiDEAvqEOI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=NnUF4JD8xF8:4leNA_OODlk:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=NnUF4JD8xF8:4leNA_OODlk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=NnUF4JD8xF8:4leNA_OODlk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/NnUF4JD8xF8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/twibble-losing-friends-and-alienating-people.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/twibble-losing-friends-and-alienating-people.html</feedburner:origLink></item>
		<item>
		<title>belfast street directories site launched</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/qzELIHQ5Lew/belfast-street-directories-site-launched.html</link>
		<comments>http://www.johngirvin.com/blog/archives/belfast-street-directories-site-launched.html#comments</comments>
		<pubDate>Thu, 10 Sep 2009 09:20:14 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[belfast]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[sites]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webobjects]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=343</guid>
		<description><![CDATA[PRONI, the Public Records Office of Northern Ireland, have launched a searchable archive of Belfast Street Directories dating back as far as 1819.

Street Directories are books containing a listing of the names, addresses and occupations of the inhabitants of Belfast as well as lists of commercial establishments operating in the city, and so are a vital resource for historical and genealogical researchers. Having them easily searchable online is a big step forward.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/belfast-street-directories-site-launched.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p>PRONI, the <a href="http://www.proni.gov.uk" target="_blank">Public Records Office of Northern Ireland</a>, have launched a <a href="http://www.proni.gov.uk/index/search_the_archives/street_directories.htm" target="_blank">searchable archive of Belfast Street Directories</a> dating back as far as 1819.</p>
<p>Street Directories are books containing a listing of the names, addresses and occupations of the inhabitants of Belfast as well as lists of commercial establishments operating in the city, and so are a vital resource for historical and genealogical researchers. Having them easily searchable online is a big step forward.</p>
<p>PRONI write:</p>
<blockquote><p>The street directories featured on this website consist of original volumes held by the Public Record Office of Northern Ireland (PRONI) covering the years 1819 to 1900 [...] These volumes, which were previously on open access in the Search Room in PRONI, were very heavily used and the paper in some of the volumes is very fragile. They were therefore at risk as pages or parts of pages had already been lost or damaged and further handling would have endangered their long term preservation. As such, it was decided to scan the directories and to provide a search facility which would enable users to find key words in a section of a directory, in a particular directory or in any directories.</p></blockquote>
<p>The <a href="http://streetdirectories.proni.gov.uk/" target="_blank">Street Directory search website</a> was developed in Java using <a href="http://www.apple.com/webobjects/" target="_blank">Apple&#8217;s WebObjects technology</a> and uses the <a href="http://lucene.apache.org/" target="_blank">open source Lucene index engine</a> to search the Street Directory contents by a number of criteria. Pages from the directories are available either as <a href="http://www.libpng.org/pub/png/" target="_blank">PNG format images</a> or <a href="http://djvu.org/" target="_blank">DjVu</a> documents.</p>
<div id="attachment_344" class="wp-caption aligncenter" style="width: 260px"><a href="/blog-content/uploads/2009/09/belfast-directory-1890-p168-169-girvin.png"><img class="size-medium wp-image-344" title="The Belfast and Ulster Directory 1890, pages 168-169" src="/blog-content/uploads/2009/09/belfast-directory-1890-p168-169-girvin-250x194.png" alt="The Belfast and Ulster Directory 1890, pages 168-169" width="250" height="194" /></a><p class="wp-caption-text">The Belfast and Ulster Directory 1890, pages 168-169</p></div>
<p>I <a href="http://www.aetopia.com/" target="_blank">worked</a> on this project when it first started off, developing the initial data importer and converter for the scanned images and accompanying OCR&#8217;d text and web interface, but there have been quite a few changes since I left the project (and the company) and, I&#8217;m told, a few speedbumps along the way too. Congratulations are due to all concerned for getting the site launched and making these important resources available to all!</p>
<p>Visit PRONI to <a href="http://streetdirectories.proni.gov.uk/" target="_blank">search the Belfast Street Directory archives</a>.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/belfast-street-directories-site-launched.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/A5MnyleiABpxB1NjLmZsJwmIO7w/0/da"><img src="http://feedads.g.doubleclick.net/~a/A5MnyleiABpxB1NjLmZsJwmIO7w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/A5MnyleiABpxB1NjLmZsJwmIO7w/1/da"><img src="http://feedads.g.doubleclick.net/~a/A5MnyleiABpxB1NjLmZsJwmIO7w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=qzELIHQ5Lew:sgAeiGZ9W0s:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=qzELIHQ5Lew:sgAeiGZ9W0s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=qzELIHQ5Lew:sgAeiGZ9W0s:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/qzELIHQ5Lew" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/belfast-street-directories-site-launched.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/belfast-street-directories-site-launched.html</feedburner:origLink></item>
		<item>
		<title>yourls for twitter tools update 1.1</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/RnVtMIng_lw/yourls-for-twitter-tools-update-1-1.html</link>
		<comments>http://www.johngirvin.com/blog/archives/yourls-for-twitter-tools-update-1-1.html#comments</comments>
		<pubDate>Tue, 01 Sep 2009 11:02:12 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=335</guid>
		<description><![CDATA[Following a prompt from the man himself, Alex King, I've made a small update to my YOURLS plugin for Twitter Tools 2.0 to make the YOURLS API URI configurable from the Wordpress administration interface.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/yourls-for-twitter-tools-update-1-1.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Following a prompt from the Twitter Tools author himself, <a href="http://alexking.org/" target="_blank">Alex King</a>, I&#8217;ve made a small update to my <a href="http://www.johngirvin.com/blog/archives/yourls-plugin-for-twitter-tools-2-0.html">YOURLS plugin for Twitter Tools 2.0</a> to make the YOURLS API URI configurable from the Wordpress administration interface.</p>
<div id="attachment_337" class="wp-caption aligncenter" style="width: 344px"><a href="/blog-content/uploads/2009/09/twitter-tools-yourls-1.1.png"><img class="size-full wp-image-337" title="YOURLS plugin for Twitter Tools" src="/blog-content/uploads/2009/09/twitter-tools-yourls-1.1.png" alt="YOURLS plugin for Twitter Tools" width="334" height="191" /></a><p class="wp-caption-text">YOURLS plugin for Twitter Tools</p></div>
<p>Click to download <a href="/blog-content/uploads/2009/09/twitter-tools-yourls-1.1.zip">twitter-tools-yourls-1.1.zip</a> (4Kb).</p>
<p>Install the plugin into your Wordpress plugins directory and activate in the administration screen as usual. Once activated, you may configure the YOURLS API URL and login credentials by selecting the Settings -&gt; Twitter Tools menu option, then entering and saving the required details. The YOURLS API URL must be the full URL to the API script, including &#8220;http://&#8221;, the hosting domain and &#8220;yourls-api.php&#8221; as appropriate.</p>
<p>If you have a Wordpress blog and a Twitter account, Twitter Tools is a very useful plugin to have. Pop over to <a href="http://alexking.org/projects/wordpress" target="_blank">Alex’s web site</a> and download your copy.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/yourls-for-twitter-tools-update-1-1.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/XUCBtGkuZa36GnpGnVuTTnolRHU/0/da"><img src="http://feedads.g.doubleclick.net/~a/XUCBtGkuZa36GnpGnVuTTnolRHU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/XUCBtGkuZa36GnpGnVuTTnolRHU/1/da"><img src="http://feedads.g.doubleclick.net/~a/XUCBtGkuZa36GnpGnVuTTnolRHU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=RnVtMIng_lw:aSpmXpfz5nY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=RnVtMIng_lw:aSpmXpfz5nY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=RnVtMIng_lw:aSpmXpfz5nY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/RnVtMIng_lw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/yourls-for-twitter-tools-update-1-1.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/yourls-for-twitter-tools-update-1-1.html</feedburner:origLink></item>
		<item>
		<title>yourls plugin for twitter tools 2.0</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/iNO7vj4HCMQ/yourls-plugin-for-twitter-tools-2-0.html</link>
		<comments>http://www.johngirvin.com/blog/archives/yourls-plugin-for-twitter-tools-2-0.html#comments</comments>
		<pubDate>Thu, 27 Aug 2009 18:59:22 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[trim]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=323</guid>
		<description><![CDATA[The troubles of URL shortening service tr.im continue. First the tr.im service went down, seemingly forever, then it was restored, then just recently it taken offline again due to their network provider thinking they were a spam spreading service. I had been using tr.im up until now to publicise posts from my various blogs on Twitter, but with this latest downtime and the reason for it, I decided it was time  I hosted my own URL shortening service.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/yourls-plugin-for-twitter-tools-2-0.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p>The troubles of URL shortening service tr.im continue. First the <a href="http://www.johngirvin.com/blog/archives/tr-im-discontinuing-service.html">tr.im service went down</a>, seemingly forever, then <a href="http://www.johngirvin.com/blog/archives/tr-im-not-discontinuing-service.html">it was restored</a>, then just recently it <a href="http://blog.tr.im/post/167852983/rackspace-downtime" target="_blank">taken offline again</a> due to their network provider thinking they were a spam spreading service. I had been using tr.im up until now to publicise posts from my <a href="http://www.weedoorsbanging.com" target="_blank">various</a> <a href="http://www.rainmiles.com" target="_blank">blogs</a> on <a href="http://twitter.com/johngirvin" target="_blank">Twitter</a>, but with this latest downtime and the reason for it, I decided it was time  I hosted my own URL shortening service.</p>
<p><strong>Update: The plugin has been updated to make the YOURLS API URL configurable from the Wordpress administration interface. Read <a href="../archives/yourls-for-twitter-tools-update-1-1.html">yourls for twitter tools update 1.1</a></strong></p>
<p>After some initial research, I decided on the <a href="http://yourls.org" target="_blank">YOURLS</a> open source solution as it was simple to set up, had an easy to use administration interface, provided an API and came with a ready made Wordpress plugin. I purchased a new, short domain to host my links and created an index page to <a href="http://girv.in" target="_blank">display all my shortened URLs</a> for easy access.</p>
<p>The new domain was <em><a href="http://girv.in" target="_blank">girv.in</a></em>, i.e.: my surname. I&#8217;d been thinking about this project for a while and originally had the opportunity to purchase the rather excellent domain hack <em>jo.hn</em>, but unfortunately it was taken by the time I actually went to buy it. A shame, but looking on the bright side, <em><a href="http://girv.in" target="_blank">girv.in</a></em> will be 20% of the annual renewal cost of <em>jo.hn</em>.</p>
<p>Although YOURLS came with its own Wordpress plugin, it lacked the hashtag ability of Alex King&#8217;s <a href="http://wordpress.org/extend/plugins/twitter-tools/" target="_blank">Twitter Tools</a> plugin that I&#8217;d been using up until now. Following my experiences with how easy it was to create <a href="http://www.johngirvin.com/blog/archives/tr-im-plugin-for-twitter-tools-2-0.html" target="_blank">tr.im plugins for Twitter Tools,</a> I decided to abandon YOURLS own plugin and create a new plugin for twitter tools 2.0 that used YOURLS at <a href="http://girv.in/" target="_blank">girv.in</a>.</p>
<p>Again using the Twitter Tools bit.ly plugin as a base, I simply replaced &#8220;bitly&#8221; with &#8220;YOURLS&#8221; in constants, literals, function names and so on and (obviously) modified the short URL generation function to use the YOURLS API instead. Once more, the whole &#8220;project&#8221; only took around 30 minutes to complete.</p>
<p>The modified short URL generation function is as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'AKTT_YOURLS_API_HOST'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'your.domain.here'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'AKTT_YOURLS_API_URL'</span> <span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://'</span><span style="color: #339933;">.</span>AKTT_YOURLS_API_HOST<span style="color: #339933;">.</span><span style="color: #0000ff;">'/yourls-api.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> aktt_yourls_shorten_url<span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$parts</span> <span style="color: #339933;">=</span> <span style="color: #990000;">parse_url</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$parts</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'host'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> AKTT_YOURLS_API_HOST<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$snoop</span> <span style="color: #339933;">=</span> get_snoopy<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$json</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Services_JSON<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$api</span> <span style="color: #339933;">=</span> AKTT_YOURLS_API_URL<span style="color: #339933;">.</span><span style="color: #0000ff;">'?action=shorturl'</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$api</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&amp;amp;url='</span><span style="color: #339933;">.</span><span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$api</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&amp;amp;format=json'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'aktt_yourls_api_user'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pass</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'aktt_yourls_api_pass'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pass</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$api</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&amp;amp;username='</span><span style="color: #339933;">.</span><span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;amp;password='</span><span style="color: #339933;">.</span><span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pass</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000088;">$snoop</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>agent <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Twitter Tools http://alexking.org/projects/wordpress'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$snoop</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>fetch<span style="color: #009900;">&#40;</span><span style="color: #000088;">$api</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$json</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>decode<span style="color: #009900;">&#40;</span><span style="color: #000088;">$snoop</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>results<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$result</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>shorturl<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$url</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tweet_blog_post_url'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'aktt_yourls_shorten_url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>YOURLS is generally self-hosted, so you must modify the initial <em>AKTT_YOURLS_API_HOST</em> define to match your own domain.</p>
<p>We use the YOURLS JSON API call via a GET request, supplying the URL to be shortened and the optional login credentials. The result of the request is parsed to extract the shortened URL generated by YOURLS, which is then returned to the caller. As before, this function works by hooking into the <em>tweet_blog_post_url</em> filter provided by the main Twitter Tools plugin itself, which is called when generating the automatic Twitter message.</p>
<p>Click to download <a href="/blog-content/uploads/2009/08/twitter-tools-yourls.zip">twitter-tools-yourls.zip</a> (3Kb).</p>
<p>Since this code is now a plugin, it must be installed into your Wordpress plugins directory and activated in the plugins administration screen as usual. Once activated, you may configure the YOURLS login credentials by selecting the Settings -&gt; Twitter Tools menu option in the Wordpress administration section, then entering and saving the required details.</p>
<div id="attachment_328" class="wp-caption aligncenter" style="width: 347px"><a href="/blog-content/uploads/2009/08/twitter-tools-yourls.png"><img class="size-full wp-image-328" title="YOURLS plugin for Twitter Tools" src="/blog-content/uploads/2009/08/twitter-tools-yourls.png" alt="YOURLS plugin for Twitter Tools" width="337" height="172" /></a><p class="wp-caption-text">YOURLS plugin for Twitter Tools</p></div>
<p>All credit is due to Alex King for the bit.ly plugin supplied with Twitter Tools, without which this hack would have been much more difficult.</p>
<p>If you have a Wordpress blog and a Twitter account, Twitter Tools is a very useful plugin to have. Pop over to <a href="http://alexking.org/projects/wordpress" target="_blank">Alex’s web site</a> and download your copy.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/yourls-plugin-for-twitter-tools-2-0.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/QNLVYm9Z69M7LnlAjl8j7yh4C6w/0/da"><img src="http://feedads.g.doubleclick.net/~a/QNLVYm9Z69M7LnlAjl8j7yh4C6w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/QNLVYm9Z69M7LnlAjl8j7yh4C6w/1/da"><img src="http://feedads.g.doubleclick.net/~a/QNLVYm9Z69M7LnlAjl8j7yh4C6w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=iNO7vj4HCMQ:IZkzSgt4Wbw:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=iNO7vj4HCMQ:IZkzSgt4Wbw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=iNO7vj4HCMQ:IZkzSgt4Wbw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/iNO7vj4HCMQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/yourls-plugin-for-twitter-tools-2-0.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/yourls-plugin-for-twitter-tools-2-0.html</feedburner:origLink></item>
		<item>
		<title>java devdays</title>
		<link>http://feedproxy.google.com/~r/johngirvin/~3/BRCIR4daDkA/java-devdays.html</link>
		<comments>http://www.johngirvin.com/blog/archives/java-devdays.html#comments</comments>
		<pubDate>Tue, 25 Aug 2009 09:11:00 +0000</pubDate>
		<dc:creator>John Girvin</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[belfast]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.johngirvin.com/blog/?p=304</guid>
		<description><![CDATA[Instil Software are helping to organise a Java DevDays event in Belfast, following the highly successful iPhone DevDays held in April. It's early days and Instil are currently looking for speakers and topics. If you have any suggestions, be sure to let them know.<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/java-devdays.html">Read the original article &raquo;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.instilsoft.com/work/2009/08/22/java-devdays/" target="_blank">Instil Software</a> are helping to organise a <a href="http://devdays.info" target="_blank">Java DevDays</a> event in Belfast, following the highly successful iPhone DevDays held in April.</p>
<p>As yet, we don&#8217;t know when it will be.</p>
<p>We don&#8217;t know where it will be held.</p>
<p>We don&#8217;t know who will be speaking.</p>
<p>We don&#8217;t know what topics will be covered.</p>
<p>It&#8217;s early days and Instil are currently looking for speakers and topics. If you have any suggestions, be sure to <a href="http://www.instilsoft.com" target="_blank">let them know</a>.</p>
<p>And spread the word.</p>
<p><a target="_blank" href="http://www.johngirvin.com/blog/archives/java-devdays.html">Read the original article &raquo;</a></p>
<p><a href="http://feedads.g.doubleclick.net/~a/lCNWBKnCjUGP2kjUkoEEzQ3RUmA/0/da"><img src="http://feedads.g.doubleclick.net/~a/lCNWBKnCjUGP2kjUkoEEzQ3RUmA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/lCNWBKnCjUGP2kjUkoEEzQ3RUmA/1/da"><img src="http://feedads.g.doubleclick.net/~a/lCNWBKnCjUGP2kjUkoEEzQ3RUmA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/johngirvin?a=BRCIR4daDkA:5-__Oc9l9BI:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=BRCIR4daDkA:5-__Oc9l9BI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/johngirvin?a=BRCIR4daDkA:5-__Oc9l9BI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/johngirvin?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/johngirvin/~4/BRCIR4daDkA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.johngirvin.com/blog/archives/java-devdays.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.johngirvin.com/blog/archives/java-devdays.html</feedburner:origLink></item>
	</channel>
</rss>
