<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Stuck Together With Tape</title>
	<atom:link href="http://www.stucktogetherwithtape.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stucktogetherwithtape.com/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 12 Nov 2010 22:38:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Bullet Proof CMS record ordering pattern</title>
		<link>http://www.stucktogetherwithtape.com/blog/2010/10/bullet-proof-cms-record-ordering-pattern/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=bullet-proof-cms-record-ordering-pattern</link>
		<comments>http://www.stucktogetherwithtape.com/blog/2010/10/bullet-proof-cms-record-ordering-pattern/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 17:28:17 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.stucktogetherwithtape.com/blog/?p=137</guid>
		<description><![CDATA[When building a custom backend, quite often a client will ask for the ablilty to order records/posts/images&#8230; Here&#8217;s a tried and tested method i use to build this functionality. It will work with or without js. In this example we will order the traditional post records. 1. The Database Create a table to hold your [...]]]></description>
			<content:encoded><![CDATA[<p>When building a custom backend, quite often a client will ask for the ablilty to order records/posts/images&#8230;</p>
<p>Here&#8217;s a tried and tested method i use to build this functionality. It will work with or without js. In this example we will order the <em>traditional</em> post  records.</p>
<h3>1. The Database</h3>
<p>Create a table to hold your posts and include a column (int) called <strong>order</strong>.</p>
<h3>2. Adding a new record</h3>
<p>Each time a new post is saved, the order column is assigned the auto inc value of the rows <strong>id</strong>. This prevents records from ever having the same order value.</p>
<h3>3. The order view (HTML)</h3>
<p>To provide the user with a way to order posts records, i&#8217;ll start with the HTML. This process is designed to degrade gracefully when JS is disabled. Dont worry if this process seems a bit clunky to the user, chances are they&#8217;ll have js turned on. I have found by restricting yourself to develop for HTML first created better structured and semantic code. Quite often divining straight in there with the javascript will get the job done, but it&#8217;ll be a headache to maintain.<br />
<span id="more-137"></span><br />
We&#8217;ll present the records in a ordered list, <em>cause we roll semantically like that</em>. Each li represents a post in the database They are ordered by their current order value.</p>
<pre><code>form
	ol
		li
			select</code></pre>
<p>Inside each li element is a select dropdown form input to hold each records order value. The possible options of the selectbox should be <strong>limited</strong> to the order values in the current record subset.</p>
<p>Again, this is prevents records having the same order value. Name the select box something like order[record-&gt;id]. So the post array will contain an array of record id =&gt; order value.</p>
<p>Stick a submit button at the bottom of that form and we&#8217;re all set&#8230;</p>
<h3>4. The MySql/Post Process</h3>
<p>A user changes some order values and then submits the form. First thing we need to do is check for duplicate order values. Some bright spark could have set all the select boxes to the same value! A quick way to do this is to use the php <a href="http://php.net/manual/en/function.array-unique.php">array_unique</a> function.<br />
This will return all unique values in the order array, so if all values in the array are unique, we&#8217;re golden.</p>
<pre><code>$unique = array_unique($_POST['order']);
// if arrays are equal no dupicates posted
if($unique == $order_values)</code></pre>
<p>If the user has posted duplicate order values you can provide feedback and get em to try again. After we have added a lick of jquery however, hopefully this will rarely happen!.</p>
<p>Once unique order values have been validated, its just a simple case of updating the order values of each post row by the post array key with the posted order value. Code will vary depending on what frameworks your using. Below is an example of what my Codeigniter Code would look like</p>
<pre><code>foreach($this-&gt;input-&gt;post('order') as $id =&gt; $order)
{
	$post = new Post($id);
	$post-&gt;order = $order;
	$post-&gt;save();
}</code></pre>
<p>Simples.</p>
<h3>The Javascript</h3>
<p>We have a basic, fugly but solid solution working. Now the fun part. With a few lines of jquery we can turn this into a fancy, elegant AND solid solution! We will use the jqueryui sortable plugin so the user can drag and re-order the list items. There is no need to show the selectboxes now because we have visual feedback on the current order. We&#8217;ll hide the selectboxes and then update their value whenever the list is reordered.</p>
<p>Here&#8217;s the code, the ol has an id of record-order.</p>
<pre><code>// updates the order value of all items hidden
// selectbox to the current order after a drag has taken place
$("#record-order").sortable({
	update: function(event, ui){
		var options = new Array();

		// get an array of order option values
		$(this).find('li:first select option').each(
			function(i){
				options[i] = $(this).val();
			}
		);

		$(this).children('li').each(
			function(i){
				var v = $(this).find('select').val(options[i])
			}
		);
	}
});</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.stucktogetherwithtape.com/blog/2010/10/bullet-proof-cms-record-ordering-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sync Web Dev with MAMP and Dropbox</title>
		<link>http://www.stucktogetherwithtape.com/blog/2009/12/sync-web-dev-with-mamp-and-dropbox/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sync-web-dev-with-mamp-and-dropbox</link>
		<comments>http://www.stucktogetherwithtape.com/blog/2009/12/sync-web-dev-with-mamp-and-dropbox/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 20:00:02 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[Hacks]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[mamp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[web dev]]></category>

		<guid isPermaLink="false">http://www.stucktogetherwithtape.com/blog/?p=103</guid>
		<description><![CDATA[Dropbox Initially I used dropbox, as an alternative to email, to share music tracks and ideas with band mates. So simple even our singer could work it out! It has quickly become my main tool for syncing all sorts of other data. So I decided to see if it could be used to sync multiple [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-119 aligncenter" title="dropbox-mamp" src="http://www.stucktogetherwithtape.com/blog/wp-content/uploads/2009/12/dropbox-mamp.png" alt="dropbox and mamp" width="460" height="320" /></p>
<h3>Dropbox</h3>
<p>Initially I used <a href="http://www.dropbox.com/">dropbox</a>, as an alternative to email, to share music tracks and ideas with  band mates. So simple even our singer could work it out! It has quickly become my main tool for syncing all sorts of other data.</p>
<p>So I decided to see if it could be used to sync multiple MAMP web development environments. Site files and MySQL databases.</p>
<p><span id="more-103"></span></p>
<p><a href="#thegoodshit">Ok, skip the blah, show me the method!</a></p>
<h3>Syncing Applications with Dropbox</h3>
<p>When you work on multiple computers it can be a pain to keep things in sync. But, where there&#8217;s data there&#8217;s a way to sync it with dropbox. One of the first dropbox solutions I came across was for <a href="http://agilewebsolutions.com/products/1Password">1Password</a>, my password manager of choice. 1Password holds all its data in a keychain so you can simply move the <em>1Password.agilekeychain</em> file to your dropbox and edit preferences in 1password to point to the new location. A more detailed tutorial can be found over at <a href="http://webworkerdaily.com/2008/09/29/1password-dropbox-sync/">WebWorkerDaily</a>. As of <a href="http://agilewebsolutions.com/products/1Password/whats_new">version 3</a>, this keychain file can also be opened as an HTML webpage so you can access your passwords on computers without 1password installed.</p>
<p><a href="http://culturedcode.com/things/">Things</a> requires a different approach. There is no preference option to chose the location of you data file. Instead you can move the Things data folder into your dropbox and create a symbolic link in its place. Detailed instructions can be found at this <a href="http://hocuspokus.net/2008/11/sync-your-things-database-via-dropbox">hocuspokus.net</a>. Symbolic links are basically low level Aliases. I also use a similar method to keep the <a href="http://www.tipsfor.us/2008/11/24/keep-your-address-book-in-sync-with-dropbox-mac-os-x/">address book app in sync</a>.</p>
<p>After using dropbox to sync these apps between 3 computers I was in need of a better way to sync my web development projects. I was already using dropbox to share zipped versions of site files and mysql dumps but this process was a bit tedious. Every morning I have to unarchive the files into my sites folder and re-import databases and remember to export them before I left. One solution would be to create a couple of scripts to import and export this data&#8230; but after seeing how well dropbox had worked so far, I decided to test its limits and sync a whole web development sever.</p>
<h3 id="thegoodshit">Syncing MAMP with Dropbox</h3>
<p>I use <a href="http://www.mamp.info">MAMP</a> to run my local webserver with php and mySQL. The first step is to sync Apache&#8217;s webroot. By default it&#8217;s located in the <em>/Applications/MAMP/htdocs</em> folder.</p>
<p>Click Preferences &gt; Select the Apache tab and change the location to a folder in your dropbox, I use /<em>Dropbox/Sites</em>.</p>
<p><img class="aligncenter size-full wp-image-121" title="apache-settings" src="http://www.stucktogetherwithtape.com/blog/wp-content/uploads/2009/12/apache-settings1.png" alt="apache-settings" width="600" height="265" /></p>
<p>Now all your development site files will be kept in sync through your dropbox.</p>
<p><img class="size-full wp-image-118 alignright" title="create-symbolic-link" src="http://www.stucktogetherwithtape.com/blog/wp-content/uploads/2009/12/create-symbolic-link.png" alt="create-symbolic-link" width="320" height="430" /></p>
<p>The second step is to sync MAMPs MySQL server. Unfortunately MAMP does not provide the option to define the location the database files are kept. So I followed the symbolic link method used to sync Things.</p>
<p>MAMPs database files are stored in <em>/Applications/MAMP/db</em>. Make sure you quit MAMP first, then move the db folder to your dropbox.</p>
<p>Create a symbolic link back to its original location. You can use terminal for this but I prefer to use <a href="http://www.macupdate.com/info.php/id/10433">SymbolicLinker</a> a contextual symlink plugin. It gives you a &#8220;Make Symbolic Link&#8221; option in any file or folders right click menu.</p>
<p>Thats it, you&#8217;re done. Start up MAMP and you&#8217;re up in the cloud.</p>
<h3>Steady Eddy</h3>
<p>I haven&#8217;t tested this process fully yet and may update this post if I see any trouble brewing. A few points to note though.</p>
<ul>
<li>Developing large sites with large databases is gonna fill up your dropbox pretty quickly.</li>
<li>I wouldn&#8217;t recommend developing on different computers simultaneously, dropbox is quick but not that quick. I can imagine your database could get messed up if your jumping between computers updating and deleting records. But by all means give it a go and let me know how dropbox copes!</li>
<li>For theses reasons do not totally rely on dropbox. It&#8217;s always good practive to have a local backup of your dev files as well, just incase.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.stucktogetherwithtape.com/blog/2009/12/sync-web-dev-with-mamp-and-dropbox/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Winters coming, WrapUp!</title>
		<link>http://www.stucktogetherwithtape.com/blog/2009/10/winters-coming-wrapup/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=winters-coming-wrapup</link>
		<comments>http://www.stucktogetherwithtape.com/blog/2009/10/winters-coming-wrapup/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 13:28:09 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[head]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[wrapup]]></category>

		<guid isPermaLink="false">http://www.stucktogetherwithtape.com/?p=20</guid>
		<description><![CDATA[I&#8217;ve been using this library, or iteration of, for about a year now and have finally had time to document it properly. WrapUp is a CodeIgniter Library to manage your sites &#60;head&#62; element. Defining the doctype Setting the page title Adding meta data Adding CSS Addming Javascript files This saves alot of time getting a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using this library, or iteration of, for about a year now and have finally had time to document it properly. WrapUp is a CodeIgniter Library to manage your sites &lt;head&gt; element.</p>
<p>Defining the doctype<br />
Setting the page title<br />
Adding meta data<br />
Adding CSS<br />
Addming Javascript files</p>
<p>This saves alot of time getting a site up and running. Its also extremly handy for large sites as you can define your default meta data, css &amp; javascript in a __constructor so its is inhereted by all pages on the site.</p>
<p>A few examples of WrapUp can be found after the jump.</p>
<p><span id="more-20"></span></p>
<p>Load the library, you&#8217;ll probably want to autoload this if you are using it on the whole site.</p>
<p><code>$this−&gt;load−&gt;library('wrapup');</code></p>
<p>The WrapUp library enables you to quickly get an HTML page up and running.</p>
<p><code>$this-&gt;wrapup-&gt;head();</code></p>
<p>The <strong>head()</strong> function returns the basic html head structure as a string.</p>
<p>There&#8217;s not a lot to it but from here you can easily customise your head page, set up defaults and overide/add elements for specific pages.</p>
<p>I normally create a MY_Controller which all my classes inherit from. Then all my default head elements, css links, js files are added to the wrapup library in the MY_Controller constructor.</p>
<p><code>// set doctype to transistional<br />
$this-&gt;wrapup-&gt;set_doctype('t');<br />
// add charset meta tag<br />
$meta = array(<br />
'http-equiv' =&gt;'Content-type',<br />
'content' =&gt; 'text/html;charset=UTF-8'<br />
);<br />
$this-&gt;wrapup-&gt;add_meta(meta);<br />
// add default css stylesheet<br />
$this-&gt;wrapup-&gt;add_css('style.css');<br />
// add google jquery script<br />
$this-&gt;wrapup-&gt;add_js('jquery.min.js');<br />
// add a default page titles<br />
$this-&gt;wrapup-&gt;set_title('My Page Title');</code></p>
<p>This sets up our default page head element. I find it saves me a lot of time if I ever need to change the default style sheet for instance or the doctype. I only have to change it in one place!</p>
<p>Another feature of WrapUp is managing inline javascript and CSS. I try not to include any inline CSS due to the dreaded <a href="http://en.wikipedia.org/wiki/Flash_of_unstyled_content" target="_blank">FOUC</a> but its useful for debugging. Using WrapUp to manage you javascript enables you to generate javascript programatically (include server side variables) and group all off your javascript and send it to the browser at the bottom of the page right before closing your body tags.</p>
<p>You can add inline javascript by calling the add_js_inline() WrapUp method.</p>
<p><code>$js = 'function say_hello(){alert("hello");}';<br />
$this-&gt;wrapup-&gt;add_js_inline($js);</code></p>
<p>Inline code can then be returned in your view by calling inline() method</p>
<p><code>$this-&gt;wrapup-&gt;inline();</code></p>
<p>So that&#8217;s about it for an introduction to WrapUp, no doubt i&#8217;ll add/tweak it as I discover news needs. Checkout the full <a title="WrapUp Docs" href="http://www.stucktogetherwithtape.com/user_guide/wrapup">documentation</a> in the code vault to see other methods like add_rss()</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stucktogetherwithtape.com/blog/2009/10/winters-coming-wrapup/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oi, Mind your Messages</title>
		<link>http://www.stucktogetherwithtape.com/blog/2009/10/oi-mind-your-messages/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=oi-mind-your-messages</link>
		<comments>http://www.stucktogetherwithtape.com/blog/2009/10/oi-mind-your-messages/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 22:03:15 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[notifications]]></category>

		<guid isPermaLink="false">http://www.stucktogetherwithtape.com/blog/?p=78</guid>
		<description><![CDATA[Often, I find I need to send notifications to the user (webpage) during server code. This may be a warning, notification, or a message that an action has hapend. If you&#8217;re using a MVC framework it&#8217;s not practical to exit running code or echo out the message. From a User Interface perspective it is also imperative [...]]]></description>
			<content:encoded><![CDATA[<p>Often, I find I need to send notifications to the user (webpage) during server code. This may be a warning, notification, or a message that an action has hapend. If you&#8217;re using a MVC framework it&#8217;s not practical to exit running code or echo out the message. From a User Interface perspective it is also imperative that the user knows where to look for these notifications and what they mean.<br />
<span id="more-78"></span><br />
This all lead me to develop a re-usable solution to drop into any project. As all most all of the sites I work on use CodeIgniter now, once again a CI Library was the obvious choice. <strong>Oi</strong> is notifications management system that, when stripped to its basic behaviour, has two uses.</p>
<ul>
<li>Stores new notifications added by the application</li>
<li>Returns all unread notices added by the application</li>
</ul>
<p>Pretty Simple. Added to that it will also remember notices between page redirects. So if you add a notice and then reach some code that triggers a redirect the notice will be displayed on the next page.</p>
<p>The library is now in its second incarnation. My original version supported three types of notices</p>
<ol>
<li><strong>Success</strong> (Well done, something that was meant to happen has happened)</li>
<li><strong>Message</strong> (Nothings gone wrong, nothings gone right. Just wanted to say a little something)</li>
<li><strong>Error</strong> (Oh shit, what did you do? Now i&#8217;m gonna have to tidy up after you again!)</li>
</ol>
<p>Each message would be returned as separate elements with a relevant class representing the type. This was pretty sufficient for most applications but there were times when I wanted to add more attributes (classes, titles, ids) or just needed another &#8216;type&#8217;.</p>
<p>So the new version uses the magic php method __call to provide an unlimited number of &#8216;types&#8217; via the method $oi-&gt;add_{<strong>type</strong>}($string);</p>
<p>e.g.<br />
<code>$this-&gt;oi-&gt;add_message('Well Done');</code></p>
<p>or</p>
<p><code>$this-&gt;oi-&gt;add_reallylongandimpressivesupertype('Hello');</code></p>
<p>More examples and documentation available in the <a href="http://www.stucktogetherwithtape.com/code">code</a> section</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stucktogetherwithtape.com/blog/2009/10/oi-mind-your-messages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS Typography Template</title>
		<link>http://www.stucktogetherwithtape.com/blog/2009/10/css-typography-template/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=css-typography-template</link>
		<comments>http://www.stucktogetherwithtape.com/blog/2009/10/css-typography-template/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 18:59:26 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://www.stucktogetherwithtape.com/blog/?p=64</guid>
		<description><![CDATA[Here&#8217;s a quick HTML template to organise your CSS typography. Nothing fancy, just an HTML file containing the most common elements to start your CSS, and a basic typography stylesheet. I used the 960 grid system to reset browser CSS and control the template layout. I find this helpful as a starting point for any [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-89" title="typography-framed" src="http://www.stucktogetherwithtape.com/blog/wp-content/uploads/2009/10/typography-framed.png" alt="typography-framed" width="620" height="220" /></p>
<p>Here&#8217;s a quick HTML template to organise your CSS typography.</p>
<p>Nothing fancy, just an HTML file containing the most common elements to start your CSS, and a basic typography stylesheet. I used the <a href="http://960.gs/" target="_blank">960 grid system</a> to reset browser CSS and control the template layout.</p>
<p>I find this helpful as a starting point for any site. Before I start knocking a CSS class together to style an element up for a specific page, I refer to the sites CSS template to see if  a similar base element already defined.</p>
<p>I would encourage keeping this typography stylesheet as basic as possible. Then use general css classes to add extra style later on.</p>
<p>Both the HTML and CSS files are included in the zip after the jump.</p>
<p><span id="more-64"></span></p>
<p><a href="http://www.stucktogetherwithtape.com/download/typography.zip" target="_blank">Download CSS Typography Template</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stucktogetherwithtape.com/blog/2009/10/css-typography-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shortie v1.0 Released</title>
		<link>http://www.stucktogetherwithtape.com/blog/2009/10/shortie-v1-0-released/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=shortie-v1-0-released</link>
		<comments>http://www.stucktogetherwithtape.com/blog/2009/10/shortie-v1-0-released/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 21:37:51 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[shortie]]></category>
		<category><![CDATA[urls]]></category>

		<guid isPermaLink="false">http://www.stucktogetherwithtape.com/blog/?p=54</guid>
		<description><![CDATA[Recently I needed code to shorten URLS and tweet said url as a twitter update. This all needed to happen in their existing CMS built using Codeigniter. Turns out the twitter part was easy, thanks to simonmaddox&#8217;s nice twitter CI library. I got a few whiffs of a url shortening CI library around the web, [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I needed code to shorten URLS and tweet said url as a twitter update. This all needed to happen in their existing CMS built using Codeigniter.</p>
<p>Turns out the twitter part was easy, thanks to <a href="http://github.com/simonmaddox/codeigniter-twitter" target="_blank">simonmaddox&#8217;s nice twitter CI library</a>. I got a few <a href="http://codeigniter.com/forums/viewthread/113285/" target="_blank">whiffs</a> of a url shortening CI library around the web, but it looks like the code was no longer available. Oh well, a good excuse to knock up a new library!</p>
<p><span id="more-54"></span></p>
<p><a href="http://www.stucktogetherwithtape.com/code/shortie" target="_blank">Shortie</a> is a simple library that uses curl to generate short urls using a number of different services. At the moment I have added support for four services:</p>
<ul>
<li>tr.im</li>
<li>tinyurl</li>
<li>is.gd</li>
<li>u.nu</li>
</ul>
<p>Check out the <a href="http://www.stucktogetherwithtape.com/code/shortie" target="_blank">user guide</a>, which was created using an app-in-progress <strong>Dokument</strong>, for examples.</p>
<p>More about Dokument later&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stucktogetherwithtape.com/blog/2009/10/shortie-v1-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

