<?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:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><description>About Quite Useful: A blog about useful things

Follow us on Twitter or delicious for the scoop.

Made a useful web or desktop app?  Contact us and we’ll review it!

follow quiteuseful at http://twitter.com</description><title>Quite Useful</title><generator>Tumblr (3.0; @quiteuseful)</generator><link>http://quiteuseful.co.uk/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/quiteuseful" /><feedburner:info uri="quiteuseful" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><item><title>Christmas eBook Reader Recommendations</title><description>&lt;p&gt;This list of &lt;a href="http://www.teleread.org/2009/11/01/my-christmas-recommendation-for-an-ebook-reader/"&gt;ebook reader recommendations&lt;/a&gt; on &lt;a href="http://www.teleread.org"&gt;Teleread&lt;/a&gt; is interesting food for thought:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;#8220;There are no bad readers out there, at least as far
  as I have seen, so I don’t think you’ll go wrong no matter which one you choose&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wrote a big &lt;a href="http://quiteuseful.co.uk/post/106686706/ebooks"&gt;introduction to the world of ebooks&lt;/a&gt; back in May, and I still generally read on my iPhone.  I&amp;#8217;m looking forward to testing a Kindle now they&amp;#8217;re shipping internationally.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/mvXlh_rqTko/229819708</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/229819708</guid><pubDate>Sun, 01 Nov 2009 16:09:00 +0000</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/229819708</feedburner:origLink></item><item><title>Kev's PSP Money Saving Idea</title><description>&lt;p&gt;The PSP is about to go serious on digital distribution with the release of the UMD-less PSP Go.  This is great for convenience because you can buy games right from your PSP using the PlayStation Store.  However, what&amp;#8217;s not great is the price of memory sticks.&lt;/p&gt;
&lt;p&gt;Here are the current prices on Amazon.co.uk:&lt;/p&gt;
&lt;p&gt;Memory Stick Pro Duo 2&amp;#160;8GB: ~&lt;b&gt;£20&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;16GB: ~&lt;b&gt;£50&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Here are the prices for micro SD cards:&lt;/p&gt;
&lt;p&gt;8GB: ~&lt;b&gt;£10&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;16GB: ~&lt;b&gt;£36&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Fortunately you can technically use a micro SD card using an &lt;a href="http://www.amazon.co.uk/EMARTBUY-MICRO-SDHC-PRO-ADAPTOR/dp/B001CM50HI"&gt;adapter&lt;/a&gt; which sells on Amazon for around &lt;b&gt;£4&lt;/b&gt;, which is still makes the overall cost less than a memory stick.&lt;/p&gt;
&lt;p&gt;I haven&amp;#8217;t actually tried this, but shopping around for cheaper 16GB micro SD cards might make it worth it.  Micro SD also works with more devices.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/_ZBy6bjJxlE/191633143</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/191633143</guid><pubDate>Sat, 19 Sep 2009 09:50:22 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/191633143</feedburner:origLink></item><item><title>Review: Pinboard.in</title><description>&lt;p&gt;&lt;img src="http://files.getdropbox.com/u/221414/quiteuseful/pinboard/logo.png"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pinboard.in"&gt;Pinboard.in&lt;/a&gt; is a social bookmarking site by &lt;a href="http://idlewords.com/"&gt;Maciej Cegłowski&lt;/a&gt;.  Here&amp;#8217;s a few things you might like about it:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The interface is incredibly simple and clean&lt;/li&gt;
&lt;li&gt;Your huge Delicious library will import quickly without hassle&lt;/li&gt;
&lt;li&gt;It has handy bulk processing features&lt;/li&gt;
&lt;li&gt;It has bookmarklets that work like Delicious&lt;/li&gt;
&lt;li&gt;Gmail-like starred status, and a &lt;i&gt;read later&lt;/i&gt; flag&lt;/li&gt;
&lt;li&gt;Amazon S3 backups (with some Ma.gnolia mockery)&lt;/li&gt;
&lt;li&gt;At a time when Microsoft and Yahoo! are working together, people are looking for serious Delicious alternatives&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;One big thing that&amp;#8217;s unique about Pinboard is this: &lt;b&gt;there&amp;#8217;s a one-time signup fee&lt;/b&gt;.  It&amp;#8217;s currently $4.99, and this will scale up as more people join the site.  This inspired &lt;a href="http://idlewords.com/"&gt;Cegłowski&lt;/a&gt; to dub the site an &amp;#8221;anti-social bookmarking service&amp;#8221;.&lt;/p&gt;
&lt;h3&gt;Imports&lt;/h3&gt;
&lt;p&gt;If you read this blog you probably already use a social bookmarking service, so the first thing you&amp;#8217;ll do is import your bookmarks.  Pinboard does this efficiently, firing off a background task that imports items as you use the site.&lt;/p&gt;
&lt;p&gt;It retained my Delicious metadata: private bookmarks are still private, tags all appear present and correct.&lt;/p&gt;
&lt;h3&gt;Design&lt;/h3&gt;
&lt;p&gt;The interface is inspired by old-skool &lt;a href="http://delicious.com/"&gt;Delicious&lt;/a&gt;, but has its own identity too.  It&amp;#8217;s unobtrusive and easy to understand.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://files.getdropbox.com/u/221414/quiteuseful/pinboard/site.png"/&gt;&lt;/p&gt;
&lt;p&gt;I think people will like the starred and &lt;i&gt;to read &lt;/i&gt;flags.  Although tags would do the same job, these flags are much less hassle.  Stars are actually used for bulk editing.  Viewing starred items (from the top-right navigation) displays a &lt;b&gt;bulk operations&lt;/b&gt; box.  This makes it easy to tag a set of items, or toggle their starred/to read status.&lt;/p&gt;
&lt;h3&gt;Bookmarklets&lt;/h3&gt;
&lt;p&gt;The main &amp;#8220;popup&amp;#8221; bookmarklet has the same layout as Delicious:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://files.getdropbox.com/u/221414/quiteuseful/pinboard/bookmarklet.png"/&gt;&lt;/p&gt;
&lt;p&gt;Which is actually nice if you&amp;#8217;ve been using Delicious for a few years.&lt;/p&gt;
&lt;h3&gt;The Fee&lt;/h3&gt;
&lt;p&gt;I don&amp;#8217;t know if the fee is a viable business model, and the developer cites it as a way to cut down spammers and people gaming the site.  He&amp;#8217;s been careful to select one of the easiest possible payment methods &amp;#8212; Amazon &amp;#8212; so it won&amp;#8217;t put people off.&lt;/p&gt;
&lt;p&gt;However, with some grass-roots marketing and enough blog reviews, the developer could easily attract 10,000 signups (I&amp;#8217;m speaking from my own experiences of launching commercial web apps here).  That would keep him hacking on Pinboard for a year.&lt;/p&gt;
&lt;p&gt;I think the ability to gift the service to friends would work well, but that might be against the developer&amp;#8217;s anti-social philosophy.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/QAlxQKCtx1Y/153694399</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/153694399</guid><pubDate>Sat, 01 Aug 2009 17:16:00 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/153694399</feedburner:origLink></item><item><title>How to Twitter</title><description>&lt;p&gt;When Twitter was new a lot of people couldn&amp;#8217;t figure out what to use it for.  The question &lt;i&gt;What are you Doing?&lt;/i&gt; appeared to have no relation to the way popular people used it.  It&amp;#8217;s an innocuous question that inspired and yet confused people.  However, because Twitter is so fundamentally simple &amp;#8212; especially compared to other social networks &amp;#8212; just about anyone could get started with it and use it for&amp;#8230; something.&lt;/p&gt;
&lt;p&gt;Now Twitter has cemented its credibility and popularity, people are &lt;i&gt;still&lt;/i&gt; wondering what to use it for.  As veterans of the service I thought we&amp;#8217;d share how we see Twitter used in a meaningful fashion, which will hopefully inspire your own use.&lt;/p&gt;
&lt;p&gt;If you like this post, also check out &lt;a href="http://quiteuseful.co.uk/post/81356964/twitter-for-your-boss"&gt;Twitter for your Boss&lt;/a&gt; which is a deeper article on helping Twitter gain traction at work.&lt;/p&gt;
&lt;h3&gt;Retweeting&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;ve seen treatises and manifestos on retweeting.  The truth is it doesn&amp;#8217;t matter how you do it &amp;#8212; if a friend writes an interesting blog post and you share it with a reference to their account name you&amp;#8217;re doing them a favour.  Just remember to say thanks when people share your links this way.&lt;/p&gt;

&lt;h3&gt;For Casual Communication and Contacts&lt;/h3&gt;
&lt;p&gt;The type of people who initially disliked Twitter now seem to use it simple for communication.  It&amp;#8217;s like a &amp;#8220;permanent&amp;#8221; IM system.  It&amp;#8217;s really useful to print your Twitter account name on your business cards to give out at meetups or conferences &amp;#8212; I&amp;#8217;ve made some useful contacts and friends this way.  This is of course the true social networking that services like Twitter promised.&lt;/p&gt;
&lt;p&gt;Tips:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Don&amp;#8217;t be embarrassed to print your Twitter account name on your business cards&lt;/li&gt;
&lt;li&gt;Consider making &amp;#8220;casual&amp;#8221; business cards for meetups or conferences &amp;#8212; &lt;a href="http://moo.com"&gt;moo.com&lt;/a&gt; makes this cheap and easy&lt;/li&gt;
&lt;li&gt;Get used to checking your @replies so you don&amp;#8217;t ignore people&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Internet Celebrities&lt;/h3&gt;
&lt;p&gt;We all know there&amp;#8217;s celebrities like Stephen Fry on Twitter.  There&amp;#8217;s also a lot of Internet celebrities &amp;#8212; journalists, programmers, designers, musicians: just about anyone you follow professionally or through a hobby will have an account.&lt;/p&gt;
&lt;p&gt;Tips for finding:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Try to discover people through Twitter search or Google &amp;#8212; they&amp;#8217;ll link to their Twitter account on their blogs or profiles on other sites&lt;/li&gt;
&lt;li&gt;Searching for real names can be difficult &amp;#8212; a lot of people (especially well-known videogame journalists) use crazy aliases&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;As an Aggregator&lt;/h3&gt;
&lt;p&gt;We use our Twitter feed, &lt;a href="http://twitter.com/quiteuseful"&gt;@quiteuseful&lt;/a&gt; to share links to things we think are interesting.  There&amp;#8217;s a lot of aggregators out there now though, and they&amp;#8217;re great if they fit into your interests.  Low traffic human curated aggregators like @quiteuseful are like more accessible, compact RSS feeds.&lt;/p&gt;
&lt;p&gt;Tips for finding:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Search for hashtags based on your interests&lt;/li&gt;
&lt;li&gt;Look for accounts with a topic-focused name, or a name that sounds like a blog&lt;/li&gt;
&lt;li&gt;Check out interesting accounts to see if they provide human @replies &amp;#8212; steer clear of bots that blindly retweet based on hashtags&lt;/li&gt;
&lt;br/&gt;&lt;/ul&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/ft_Hj0_ocbo/142031575</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/142031575</guid><pubDate>Wed, 15 Jul 2009 11:09:04 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/142031575</feedburner:origLink></item><item><title>Inspirational Books</title><description>&lt;p&gt;There&amp;#8217;s a war on my shelves between design and programming books.  It&amp;#8217;s interesting that the programming books &lt;i&gt;look like&lt;/i&gt; programming books, whereas the design books are all totally different shapes and sizes.  Here&amp;#8217;s a few of the design books that I keep close at hand.&lt;/p&gt;
&lt;h3&gt;A Smile in the Mind&lt;/h3&gt;
&lt;p&gt;I borrowed this book off a friend and wanted to keep quiet about the fact I still have it, but he&amp;#8217;s likely to read this so I&amp;#8217;m going to get busted.  It&amp;#8217;s by Beryl McAlhone and David Stuart, and explains the link between humour and wit and design: the subtitle is &amp;#8220;witty thinking in graphic design&amp;#8221;.&lt;/p&gt;
&lt;p&gt;This book demonstrates through examples and short essays how important wit is to design.  It makes it seem so fundamental to design I can&amp;#8217;t look at things the same way since reading it.&lt;/p&gt;
&lt;h3&gt;Show Me the Numbers&lt;/h3&gt;
&lt;p&gt;Show Me the Numbers by Stephen Few is a slightly technical introduction to the world of presenting tables and graphs.  It explains the history and psychology of presenting data, and gives practical advice and solid examples for producing incredible tables and graphs.&lt;/p&gt;
&lt;p&gt;The technical background can be dry at times, but it&amp;#8217;s watertight.  If you ever need to win a design argument with your boss, this book is a gold mine.  It&amp;#8217;s helped me avoid pie charts time and again!&lt;/p&gt;
&lt;h3&gt;Paul Arden&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/learn/5189NZY4TAL._SL500_AA240_.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve mentioned Paul Arden&amp;#8217;s books before on Quite Useful, but &lt;i&gt;It&amp;#8217;s Not How Good You Are, It&amp;#8217;s How Good You Want To Be&lt;/i&gt; is worth mentioning again.  On the surface it appears to be yet another self help book, but Arden&amp;#8217;s insightfulness, originality and sense of humour makes me keep coming back to it.&lt;/p&gt;
&lt;h3&gt;Creative Code by John Maeda&lt;/h3&gt;
&lt;p&gt;If you&amp;#8217;ve read my Beautiful Algorithms articles you&amp;#8217;ll know I have a fascination with art and code.  John Maeda has done a lot to further digital art, and this book is an accessible set of case studies about this area.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/zJubqoCZTNM/136356231</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/136356231</guid><pubDate>Mon, 06 Jul 2009 11:50:03 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/136356231</feedburner:origLink></item><item><title>iPhone Survival Guide</title><description>&lt;p&gt;I&amp;#8217;m a first generation iPhone veteran and iPhone developer, and these are my hard-earned tips for you new 3GS users.
&lt;/p&gt;&lt;h3&gt;Keyboard Tips&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Moving the cursor&lt;/b&gt;: hold your finger then drag the cursor to move it.  You&amp;#8217;ll get a magnifying glass effect so you can see it more clearly&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Copy and paste&lt;/b&gt;: hold the cursor similar to the above, then release it.  A pop up menu will display copy and paste options.  You can even make a bounding box to copy ranges of text&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Correcting mistakes&lt;/b&gt;: when you&amp;#8217;re new to iPhone typing you&amp;#8217;re going to keep hitting the wrong keys.  Try leaving your finger on a key and dragging to the correct one before you release it.  Also try getting used to trusting the iPhone&amp;#8217;s suggestion, they&amp;#8217;re generally accurate!  Press space to accept a suggestion, or touch the suggestion to ignore it&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.?123&lt;/b&gt;: You can tap and release &amp;#8220;.?123&amp;#8221;, or hold it and drag to punctuation.  Holding it will cause it to flip back to &amp;#8220;ABC&amp;#8221;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Currency&lt;/b&gt;: Hold down your punctuation currency key to get a list of other currencies (I see £, but holding it shows dollar, yen, etc.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Domains&lt;/b&gt;: When typing in a domain (web site address), you&amp;#8217;ll see .com in the keyboard.  Hold it to see other common TLDs&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Headphones&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;The standard headphones contain a mic so you can use the iPhone hands-free&lt;/li&gt;
&lt;li&gt;The mic bit (the weird white thing) let&amp;#8217;s you skip tracks by pressing it twice.  Once pauses, three clicks goes back&lt;/li&gt;
&lt;li&gt;Pushing it once will let you answer a call or hang up&lt;/li&gt;
&lt;li&gt;The new headphones also have volume controls&lt;/li&gt;
&lt;li&gt;Removing any type of headphone will pause, which is great for when you arrive at work in the morning (have you ever forgot to pause your iPod and left it playing all day?)&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Safari&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Tap and hold a link&lt;/b&gt; to bring up a menu: open, open in new page, copy&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Double tap white space&lt;/b&gt; at the top or bottom of a page to quickly move up or down.  I prefer swiping up and down to quickly scroll: the speed you swipe affects how far it scrolls&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Double tap images&lt;/b&gt; to zoom in&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Syncing&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Be aware that syncing can be slow&lt;/b&gt;.  This is because iTunes will occasionally backup your iPhone.  Factor this in to when you sync: generally syncing will be fast, but if you&amp;#8217;ve got a train to catch you can guarantee it&amp;#8217;ll do a full sync and backup&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Make an iPhone playlist&lt;/b&gt;.  My 8GB obviously couldn&amp;#8217;t store all my music.  Therefore, I prefer copying specific music and videos onto my iPhone.  I have a playlist with my desert island discs, as well as new purchases and new podcasts&lt;/li&gt;
&lt;li&gt;You can sync Yahoo! and &lt;a href="http://www.google.com/mobile/apple/sync.html"&gt;Google&lt;/a&gt; contacts/calendars/etc with iPhones.  Google syncing kind of&amp;#8230; messed up my contacts, because of the way Gmail seems to add everyone ever to my contact list.  I prefer just syncing with my Mac&amp;#8217;s Address Book and iCal, which is standard behaviour&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Apps&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;If you&amp;#8217;ve got an Apple TV or Airport speakers, get the &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284417350&amp;amp;amp;mt=8"&gt;Remote app&lt;/a&gt;.  It&amp;#8217;s like living in Star Trek&lt;/li&gt;
&lt;li&gt;There&amp;#8217;s loads of interesting games, but keep an eye out for original iPhone games that don&amp;#8217;t have crazy on-screen joystick interfaces: &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=306220440&amp;amp;amp;mt=8"&gt;Flight Control&lt;/a&gt;, &lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=314303518&amp;amp;amp;mt=8"&gt;Peggle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/MzWSG916UWE/132210753</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/132210753</guid><pubDate>Mon, 29 Jun 2009 11:48:37 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/132210753</feedburner:origLink></item><item><title>Introduction to Git Part 2: Branches</title><description>&lt;p&gt;This is the second part of Ric&amp;#8217;s &lt;i&gt;Introduction to Git&lt;/i&gt; series. Last time, he covered the basics; this time he&amp;#8217;ll explain how to use branches and tags.  This article was originally published on &lt;a href="http://www.ricroberts.com/articles/2009/06/13/getting-to-grips-with-git-part-2-branches-and-tags"&gt;Ric&amp;#8217;s Blog&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Branches&lt;/h2&gt;
&lt;h3&gt;How Branches Work&lt;/h3&gt;
&lt;p&gt;In git everything is treated like a branch, so they’re quick and easy to create and manage.  Branching doesn’t involve copying the files into a new directory, like in other version control systems. Git keeps track of only the most recent commit to that branch and from there, it can ﬁgure out all the changes in that branch. (The history of changes in git takes the form of a &lt;a target="_blank" href="http://www.ericsink.com/entries/dvcs_dag_1.html"&gt;Directed Acyclic Graph&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Branching marks the point that files in the repository diverge onto two different paths.  Each branch keeps track of the changes separately. Changes in branches can be merged together later if you like.&lt;/p&gt;
&lt;h3&gt;In Practice&lt;/h3&gt;
&lt;p&gt;You can use a branch for anything, but they’re especially useful for keeping experiments or new features separate from bug fixes to already-released code.&lt;/p&gt;
&lt;h3&gt;Making a New Branch&lt;/h3&gt;
&lt;p&gt;To make a new branch from the current one, use:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git branch &amp;lt;name of new branch&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you then run the &lt;i&gt;branch&lt;/i&gt; command with no parameters, it will give you a list of all the existing branches (with an asterisk indicating the current one):&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;&amp;gt; git branch
* master
  my_new_branch&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Working with the New Branch&lt;/h3&gt;
&lt;p&gt;Before the branch can be used it must be &lt;i&gt;checked out&lt;/i&gt;. Remember that &lt;i&gt;checkout&lt;/i&gt; means something different in git to subversion?&lt;/p&gt;
&lt;p&gt;In git, checkout refers to switching the working tree over to using another branch.  Don’t worry – any committed changes will safely remain in the branch (even if you’ve not pushed them to your central repository).&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git checkout my_new_branch&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Pushing the Branch into GitHub&lt;/h3&gt;
&lt;p&gt;To share the branch, push it to GitHub with this command:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git push &amp;lt;remote_repository&amp;gt; &amp;lt;branch_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git push origin my_new_branch&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Getting a Branch from GitHub&lt;/h3&gt;
&lt;p&gt;What if someone else has made a branch and pushed it up to GitHub already?  You can see a list of all the remote branches for a repository with:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git branch -r&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then create a local version of that branch like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git branch &amp;lt;name of branch&amp;gt; &amp;lt;remote branch&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Merging Branches&lt;/h3&gt;
&lt;p&gt;As I mentioned earlier, branches are commonly used as part of a release-process, to keep fixes to ‘live’ code separate from ongoing development.  At some point, it’s likely that you’d want to get the bug fixes into the main development branch.  This is where merging comes in.&lt;/p&gt;
&lt;p&gt;There are three main types of merging:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;Straight&lt;/i&gt;: Commits are just merged in as they appear in the source branch.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Squashed&lt;/i&gt;: All commits from the source branch are applied to the target branch as a single commit.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Cherry picked&lt;/i&gt;: A single commit from the source branch can by applied to the target branch.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;For all types of merging, commands must be run from the target branch.&lt;/p&gt;
&lt;h4&gt;Straight Merge&lt;/h4&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git merge &amp;lt;source branch&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Squashed Merge&lt;/h4&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git merge --squash &amp;lt;source branch&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that for squashed merges, the changes are applied as staged (not committed).&lt;/p&gt;
&lt;h4&gt;Cherry Picking&lt;/h4&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git cherry-pick &amp;lt;commit name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;#8230; where the commit name is the SHA-1 hash of the commit you want to pick (or at least, enough characters of it to uniquely identify a commit).  You can stage multiple cherry-picked merges by adding the -n argument.&lt;/p&gt;
&lt;h3&gt;Merge Tracking and Conflicts&lt;/h3&gt;
&lt;p&gt;Git has automatic merge-tracking that keeps tabs on what commits have been merged together, and so wont merge the same thing twice.  Git will also warn you when you try to merge and it can’t resolve merge conflicts automatically.&lt;/p&gt;
&lt;h2&gt;Tags&lt;/h2&gt;
&lt;p&gt;Tags are used to mark a certain point (such as a milestone like a release) in the history of a repository with a name.&lt;/p&gt;
&lt;p&gt;To make a tag based on the current working tree’s latest commit:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git tag &amp;lt;name of tag&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To get your tags up to GitHub, you need to run:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git push --tags&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can make a branch from a tag by using:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git checkout -b &amp;lt;tag name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;When to Use Tags&lt;/h3&gt;
&lt;p&gt;Git is very flexible and it’s up to you based on your project’s requirements, but tags are very useful for managing releases.  For example, you can tag the last commit that went into a release, so that if a bug arises in the released code, you can retrospectively branch from that point (even if you’ve already started work on the new features).&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/eWj7Un7uUbM/130525177</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/130525177</guid><pubDate>Fri, 26 Jun 2009 09:26:00 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/130525177</feedburner:origLink></item><item><title>Introduction to Git</title><description>&lt;p&gt;&lt;i&gt;This article is by Quite Useful contributor &lt;a href="http://www.ricroberts.com"&gt;Ric Roberts&lt;/a&gt;&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;I’ve been using the version control system, &lt;a href="http://git-scm.com/" target="_blank"&gt;git&lt;/a&gt; (along with &lt;a href="http://github.com" target="_blank"&gt;GitHub&lt;/a&gt;) for a couple of months now, for my open source projects: &lt;a href="http://www.grridjs.org/" target="_blank"&gt;grrid.js&lt;/a&gt; and &lt;a href="http://www.ricroberts.com/articles/2009/05/17/taskit-a-rails-scheduler-plugin" target="_blank"&gt;Taskit&lt;/a&gt;.  At &lt;a href="http://www.swirrl.com" target="_blank"&gt;Swirrl&lt;/a&gt;, we recently decided to take the plunge to start using git for our main code repository.&lt;/p&gt;
&lt;p&gt;With this series of blog posts, I hope to ease the transition from &lt;a href="http://subversion.tigris.org" target="_blank"&gt;subversion&lt;/a&gt; (or sourcesafe, or whatever) to git.  In this article, I’ll just cover the basics.  More advanced stuff will come later.&lt;/p&gt;
&lt;h2&gt;Why Switch?&lt;/h2&gt;
&lt;p&gt;There are several advantages to using git over other version control systems:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Being a distributed version control system, everyone has their own version of the whole repository.  The central repository (at GitHub in my case) is just arbitrary.  This means that you can do operations such as tagging, branching and diff without having to be connected to the central server.  &lt;a href="http://www.ericsink.com/entries/dvcs_dag_1.html" target="_blank"&gt;This article&lt;/a&gt; by Eric Sink is a good explanation of how git differs from traditional version control.&lt;/li&gt;
&lt;li&gt;Due to the git:// protocol and the way git stores and tracks the data and changes in repositories, it’s really fast and the repositories don’t take up much room on disk.&lt;/li&gt;
&lt;li&gt;Quick, cheap, easy branching.&lt;/li&gt;
&lt;li&gt;The repository and branches are separate from the filesystem.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com"&gt;GitHub&lt;/a&gt;.  Why go to the trouble of hosting a central repository yourself, when you can do it securely, cheaply and quickly with GitHub?  There’s &lt;a href="http://sourceforge.net/" target="_blank"&gt;Sourceforge&lt;/a&gt; for svn, but for me GitHub does it better. If you can get to grips with GitHub, it opens up a world of possibilities for publishing or consuming open source code.&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;How Git Works&lt;/h2&gt;
&lt;p&gt;The whole repository is stored in a hidden folder called .git at the top level of your project structure.  The &lt;i&gt;working tree&lt;/i&gt; &amp;#8212; the actual files in your project &amp;#8212; are just the ones you happen to be working with at the time.  Git doesn’t track the files themselves, it just tracks their content along with some metadata (&lt;a href="http://en.wikipedia.org/wiki/Git_(software)" target="_blank"&gt;read more about this here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Git stores content in these locations:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; The &lt;i&gt;working tree&lt;/i&gt;. This is the file system, where you manually make the changes.&lt;/li&gt;
&lt;li&gt; The &lt;i&gt;staging area&lt;/i&gt;, where changes lie until they’re committed.&lt;/li&gt;
&lt;li&gt; The &lt;i&gt;repository&lt;/i&gt; itself, where committed changes go (you can have local and remote repositories).&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Commits in git are labeled with an SHA-1 hash instead of version numbers.  There’s a &lt;b&gt;very&lt;/b&gt; small chance of the hashes ever colliding, so they can be assumed to be unique.  Git actually generates a 40 character-long hash but normally the first 7 or 8 characters are enough to uniquely identify a commit.&lt;/p&gt;
&lt;h2&gt;Installing Git&lt;/h2&gt;
&lt;p&gt;If you’re using Mac OS X like me, the easiest way to install git is to download the installer from the &lt;a href="http://code.google.com/p/git-osx-installer/" target="_blank"&gt;Google Code project&lt;/a&gt;. I used version 1.6.2.2. Alternatively, you can compile it from source or use Macports (see &lt;a href="http://github.com/guides/get-git-on-mac" target="_blank"&gt;this guide&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;If you want to share your code with others, you will need a centrally accessible server.  GitHub provides this service for free.&lt;/p&gt;
&lt;h2&gt;Setting Up a Repository&lt;/h2&gt;
&lt;h3&gt;Sign Up for GitHub&lt;/h3&gt;
&lt;p&gt;Visit &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt; and sign up for an account.&lt;/p&gt;
&lt;p&gt;Next, &lt;a href="http://github.com/guides/providing-your-ssh-key" target="_blank"&gt;set up an SSH key&lt;/a&gt;.  This allows the &lt;code&gt;git&lt;/code&gt; command to authenticate with GitHub and send your code to their servers.&lt;/p&gt;
&lt;p&gt;Next, configure the global parameters on your computer to tell git what your GitHub username and email address are. For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git config --global user.name "RicSwirrl"
git config --global user.email my.email@address.com&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Getting Code Into GitHub&lt;/h3&gt;
&lt;p&gt;Make a new repository with the GitHub web interface.  Creating a new repository on GitHub gives you a short guide so you don&amp;#8217;t need to remember all the steps.  The process is outlined here for completeness.&lt;/p&gt;
&lt;p&gt;Initialise your local project by changing into its directory and running:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git init&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will create the .git folder.  Next, tell git about the GitHub remote (get the full command from the GitHub web interface):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git remote add origin ...&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Next, add all the files in the directory to the repository.  At this point they’re not being tracked yet.&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git add .&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will add all the files in the directory to the &lt;i&gt;staging area&lt;/i&gt;.  You can then commit these files to your local repository, with a message:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git commit -m "my initial commit"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you have a fully fledged repository on your computer.  To send it up to GitHub, just run:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git push origin master&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that by default git will push to the “origin” remote repository in your config, using the current branch. If you want to push to a different remote repository, using a different branch, you can run something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git push github mybranch&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: for this to work you’d have to define &lt;i&gt;github&lt;/i&gt; in your config file as another remote repo, and have a ‘mybranch’ branch.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Push&lt;/i&gt; is a similar to a subversion &lt;i&gt;commit&lt;/i&gt;, in that it allows you to share your changes with your colleagues.&lt;/p&gt;
&lt;h3&gt;Working With Existing Repositories&lt;/h3&gt;
&lt;p&gt;What if one of your colleagues has already set up the repository on GitHub? To get started, you just need to &lt;i&gt;clone&lt;/i&gt; the remote repository like this (using the clone url displayed on the GitHub page).  For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git clone git://github.com/Swirrl/grrid.git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I suppose this is equivalent to a subversion &lt;i&gt;checkout&lt;/i&gt;.  Watch out, though, because &lt;i&gt;checkout&lt;/i&gt; means something a bit different in git.&lt;/p&gt;
&lt;h2&gt;Working With the Repository&lt;/h2&gt;
&lt;h3&gt;Adding Files to the Staging Area&lt;/h3&gt;
&lt;p&gt;You’re now ready to start making changes to your code.  Once you’ve made a few changes, you can see what’s happened by running:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you’re ready to commit some of these changes to your local repository, you need to run &lt;i&gt;git add&lt;/i&gt; on each file you want to commit.  This adds these changes to the staging area.&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git add &amp;lt;filename_to_add&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;What’s the Point of the Staging Area?&lt;/h3&gt;
&lt;p&gt;The staging area lets you choose which of your changes you want to commit – a bit like checking/unchecking files in the svn commit dialog in TextMate (or your editor of choice). You can change the files in your staging area as many times as you like, before committing.&lt;/p&gt;
&lt;h3&gt;Committing to the Local Repository&lt;/h3&gt;
&lt;p&gt;You can run git status again to check what’s going to be committed. When you’re happy, run:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git commit -m "my message"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;#8230;and the changes will be committed.  If you know you just want to commit all the changes that you’ve made, you can do it all in one go by running this (i.e. skip the staging step):&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git commit -a -m "my message"&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Pushing Changes to the Remote Repository&lt;/h3&gt;
&lt;p&gt;At this point, the changes have been committed to your local repository, but the remote GitHub repository remains unchanged.  For your colleagues to be able to see your commits you need to push them up to the remote repository with:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git push&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Pulling Changes From the Remote Repository&lt;/h3&gt;
&lt;p&gt;If you want to see what your buddies have been up to, you need to &lt;i&gt;pull&lt;/i&gt; their changes from the remote repository.&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git pull&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will fetch the remote changes and merge them with your local ones &amp;#8212; it’s a bit like the &lt;i&gt;update&lt;/i&gt; command in subversion.&lt;/p&gt;
&lt;h2&gt;Viewing the Log&lt;/h2&gt;
&lt;p&gt;To see the history of the commits in a repository:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git log&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Getting Help&lt;/h2&gt;
&lt;p&gt;Many git commands can take multiple optional arguments which I haven’t covered here.  To get help on the usage of any command you can do:&lt;/p&gt;
&lt;pre&gt;&lt;code class="typocode_default "&gt;git help &amp;lt;command&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/39Sd4lwnV6I/128007163</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/128007163</guid><pubDate>Mon, 22 Jun 2009 10:13:19 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/128007163</feedburner:origLink></item><item><title>Review: MinuteBase</title><description>&lt;p&gt;&lt;a href="http://minutebase.com"&gt;MinuteBase&lt;/a&gt; is a web application designed for planning meetings and writing up minutes.  It helps focus meetings with an agenda, and provides lots of ways of collecting notes and other related information.&lt;/p&gt;
&lt;p&gt;Each meeting can have several attendees, and they can be added as users to your MinuteBase account.  This makes MinuteBase a good tool for communicating agendas before meetings to help keep discussions focused.  Attendees can also see minutes (which have privacy controls), so meetings can be followed up with relevant actions.  Minutes can also accept comments for later discussion.&lt;/p&gt;
&lt;p&gt;Text, actions, files, links and agendas can be appended to each agenda item.  This makes MinuteBase a good central location for information produced during a meeting.&lt;/p&gt;
&lt;h3&gt;Design&lt;/h3&gt;
&lt;p&gt;There&amp;#8217;s some great attention to detail in MinuteBase&amp;#8217;s design.  It also uses a lot of white space, so pages feel clean and easy to understand.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s what the dashboard page looks like when you sign in:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://files.getdropbox.com/u/221414/quiteuseful/minutebase/dashboard.png"/&gt;&lt;/p&gt;
&lt;p&gt;The dashboard makes it easy to add a new meeting and see existing ones.  It also has some useful inline documentation:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://files.getdropbox.com/u/221414/quiteuseful/minutebase/empty.png"/&gt;&lt;/p&gt;
&lt;p&gt;I particularly like the search widget:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://files.getdropbox.com/u/221414/quiteuseful/minutebase/search.png"/&gt;&lt;/p&gt;
&lt;p&gt;Minutes can be displayed in &lt;b&gt;view&lt;/b&gt; or &lt;b&gt;edit&lt;/b&gt; modes.  The edit mode has intuitive hover effects which make it easy to insert items at any position, or edit existing items:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://files.getdropbox.com/u/221414/quiteuseful/minutebase/minutes.png"/&gt;&lt;/p&gt;
&lt;p&gt;The PDF export for minutes is also excellent.&lt;/p&gt;
&lt;h3&gt;Conclusions and Pricing&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;ve had many meetings where internal systems were used to collect data, which is difficult to access outside of the office unless you can use a VPN.  MinuteBase would be perfect for teams collaborating across different companies or departments.  It would also help in meetings where attendees are known to stray off-topic and overrun the allocated meeting time.&lt;/p&gt;
&lt;p&gt;The only other things I&amp;#8217;d like to see in MinuteBase are meeting timers and audio clips.  Most people find it hard to keep meetings on time, so it would be useful to have timers for each agenda item.  Additionally, although people have dedicated tools for recording audio in meetings, MinuteBase might appeal to certain corporate customers if it did that too.&lt;/p&gt;
&lt;p&gt;Another thought I had was using MinuteBase for organising conference calls.  These can be awkward when working across company boundaries, so collecting attendees&amp;#8217; voip or telephone details inside MinuteBase would make a lot of sense.&lt;/p&gt;
&lt;p&gt;The pricing varies between £10 and £50 a month, which seems like sensible pricing considering the types of customers who will use MinuteBase.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/cN8mbBciKwM/122388812</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/122388812</guid><pubDate>Fri, 12 Jun 2009 16:22:00 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/122388812</feedburner:origLink></item><item><title>Review: Ringer</title><description>&lt;p&gt;&lt;a href="http://pixelresearchlabs.com/ringer"&gt;Ringer&lt;/a&gt; is a small Mac app made by &lt;a href="http://pixelresearchlabs.com/"&gt;Pixel Research Labs&lt;/a&gt; that helps you create ring tones for iPhones.  It&amp;#8217;ll read any unprotected audio or video file.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/ringer/icon.png" align="right"/&gt;&lt;/p&gt;
&lt;p&gt;It automatically adds a quick fade in and out, so tracks will sound right without much effort.  You can change the length of the snippet you want, and add a gap between rings.  Ringer automatically detects the volume too, so quiet or loud songs should still be effective ringtones.&lt;/p&gt;
&lt;p&gt;Working with files looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/ringer/selection.png"/&gt;&lt;/p&gt;
&lt;p&gt;Your iTunes media library is presented to you, and searching through a large collection is fast.&lt;/p&gt;
&lt;p&gt;Garage Band can also be used to create ringtones, but Ringer is much easier, and it&amp;#8217;s an incredibly well-crafted app to boot.  A licensed version will cost $15.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/eEaJyOEwZqI/121902283</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/121902283</guid><pubDate>Thu, 11 Jun 2009 19:58:00 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/121902283</feedburner:origLink></item><item><title>Review: Figure Out When</title><description>&lt;p&gt;&lt;a href="http://figureoutwhen.com"&gt;Figureoutwhen.com&lt;/a&gt; is a tiny service for organising dates.  It works like this:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Enter a title for an event&lt;/li&gt;
&lt;li&gt;Click the dates you&amp;#8217;re not available&lt;/li&gt;
&lt;li&gt;Send the link to friends you want to invite&lt;/li&gt;
&lt;li&gt;They click the dates when they aren&amp;#8217;t available&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Everyone can see when they&amp;#8217;re not free, thus allowing you to figure out when to schedule an event.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/figureoutwhen/figureoutwhen.png"/&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s an incredibly simple tool, but has a clever &amp;#8220;just works&amp;#8221; interface, there&amp;#8217;s no registration, login, saving data&amp;#8230; just a simple calendar and title for your event.  Figure Out When works best when organising an event in the near future, because the month defaults to the current month (rather than the last one selected).&lt;/p&gt;
&lt;p&gt;The only thing I&amp;#8217;d like to see added is shift-clicking to select date ranges.  This might help people when organising events that could happen any time in a month.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/ti6mVNvvEZw/116751843</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/116751843</guid><pubDate>Tue, 02 Jun 2009 12:25:17 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/116751843</feedburner:origLink></item><item><title>JsChat</title><description>&lt;p&gt;&lt;a href="http://jschat.org"&gt;JsChat&lt;/a&gt; is a simple open source realtime chat protocol based on JSON.  There&amp;#8217;s a server and console and web clients.  It&amp;#8217;s developed by the Quite Useful authors.  Download it from my GitHub repository: &lt;a href="http://github.com/alexyoung/jschat"&gt;github.com/alexyoung/jschat&lt;/a&gt;, and read more at the &lt;a href="http://blog.jschat.org/"&gt;JsChat Blog&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Web Client&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/jschat/slap.png"/&gt;&lt;/p&gt;
&lt;p&gt;Most people who have tried JsChat think it&amp;#8217;s all about the web client, but this is only a proof of concept I built to illustrate how simple implementing the JSON-based protocol can be.  It&amp;#8217;s made with Ruby and &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt; (Sinatra is a tiny Ruby web framework).&lt;/p&gt;
&lt;p&gt;It has a few interesting features:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;YouTube URLs are automatically embedded so people can watch them&lt;/li&gt;
&lt;li&gt;Image URLs are embedded too&lt;/li&gt;
&lt;li&gt;Tab completion for names&lt;/li&gt;
&lt;li&gt;Joining a room gives you the last 100 lines, so you can safely leave and come back&lt;/li&gt;
&lt;li&gt;Rooms are just denoted by a hash part in the URL: jschat.org/chat/#jschat&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s possible to open multiple tabs in your browser and sit in multiple rooms&lt;/li&gt;
&lt;li&gt;It polls using simple Ajax calls which means it&amp;#8217;ll run in lots of browsers (I&amp;#8217;ll experiment with detecting browser-specific push capabilities in the future)&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Console Client&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/jschat/ncurses.png"/&gt;&lt;/p&gt;
&lt;p&gt;The console client is written with Ruby and Ncurses.  You can connect to JsChat.org by downloading it and running:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;./client.rb jschat.org&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;ll pick up your name from the system and auto-join #jschat.  You can join multiple rooms and switch between them using /switch (or /s).  Type /help for more commands.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m not particularly good at Ncurses, so I&amp;#8217;m waiting for someone to help clean it up!&lt;/p&gt;
&lt;h3&gt;Running Your Own Server&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;m going to blog more about how to run the web app alongside the core server with Apache and mod_proxy, with strategies for keeping them running (I&amp;#8217;ll start with monit examples).&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;d like to try it locally, just run:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;./server.rb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;./client.rb&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Authors&lt;/h3&gt;
&lt;p&gt;Protocol creation and initial server, client and web app: &lt;a href="http://alexyoung.org/"&gt;Alex Young&lt;/a&gt; (message me on GitHub or @&lt;a href="http://twitter.com/alex_young"&gt;alex_young&lt;/a&gt; for more info about JsChat)&lt;/p&gt;
&lt;p&gt;Initial concept, testing, feature suggestions: Kevin Ford&lt;/p&gt;
&lt;p&gt;Bug fixes and code contributions: &lt;a href="http://simonstarr.com/"&gt;Simon Starr&lt;/a&gt;, &lt;a href="http://www.ricroberts.com/"&gt;Ric Roberts&lt;/a&gt;, Nick Martini, &lt;a href="http://github.com/jenf"&gt;Jenf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;JavaScript sanity checker: &lt;a href="http://github.com/gabrielg"&gt;gabrielg&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/kSMxxss7EJM/114231039</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/114231039</guid><pubDate>Thu, 28 May 2009 10:51:48 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/114231039</feedburner:origLink></item><item><title>Beautiful Algorithms 3: Gravity</title><description>&lt;p&gt;This series of articles explores using basic physics and mathematics to simulate balls bouncing.  The examples are written with Ruby and Shoes.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been working on the 2D version of the &lt;a href="http://quiteuseful.co.uk/post/108115925/beautiful-algorithms-3-1d-collisions"&gt;previous example&lt;/a&gt; for 3 days now, and I haven&amp;#8217;t got it to a point where it&amp;#8217;s clear enough yet.  However, I realised I was trying to cram too much into one article.  Instead, this part focuses on explaining vectors, and simulating gravity.  Although simulating gravity is simple for this simulation, I think you&amp;#8217;ll be surprised by how naturally the balls bounce.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/ba3/balls-gravity.png"/&gt;&lt;/p&gt;
&lt;h3&gt;Vectors and Vectors in Ruby&lt;/h3&gt;
&lt;p&gt;A vector is just a direction of a force.  They&amp;#8217;re usually drawn as a line with a direction.  More generally, vectors are quantities that are made up of components.  In the previous article, arrays were used to represent direction and velocity.  This is adequate, but not as natural as vectors when used with mathematical operators:&lt;/p&gt;
&lt;pre&gt;[1, 2] + [8, 2]

=&amp;gt; [1, 2, 8, 2]

&lt;/pre&gt;
&lt;p&gt;If you&amp;#8217;re used to mathematics, this result might surprise you.  What we want is:&lt;/p&gt;
&lt;pre&gt;[9, 4]&lt;/pre&gt;
&lt;p&gt;However, the + operator in Ruby treats arrays like sets and concatenates them.  This is generally the most intuitive thing to do.  What we need is a way of defining vectors.&lt;/p&gt;
&lt;p&gt;Vectors are essentially matrices, and Ruby has a matrix library in its standard library.  Vectors are defined like this: &lt;code&gt;Vector.[](1, 2)&lt;/code&gt; and can be added, multiplied, and more:&lt;/p&gt;
&lt;pre&gt;require 'matrix'

v1 = Vector.[](1, 2)

=&amp;gt; Vector[1, 2]

v2 = Vector.[](8, 2)

=&amp;gt; Vector[8, 2]

v1 * -1

=&amp;gt; Vector[-1, -2]

v1 - v2

=&amp;gt; Vector[-7, 0]

v1 + v2

=&amp;gt; Vector[9, 4]

v2 * 0.1

=&amp;gt; Vector[0.8, 0.2]

v2.r

=&amp;gt; 8.24621125123532

v2.inner_product v2

=&amp;gt; 68

&lt;/pre&gt;
&lt;h3&gt;Advantages&lt;/h3&gt;
&lt;p&gt;This makes the code in the previous example clearer, because inverting velocities and updating position becomes much clearer:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@position += @velocity * @mass&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@velocity = ((@velocity * -1) * @eta)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;These expressions update both the X and Y values for the position and velocity.  The second will be used to simulate bounces off the wall.&lt;/p&gt;
&lt;h3&gt;Gravity&lt;/h3&gt;
&lt;p&gt;To model gravity, the Y component of the velocity vector will be updated for each frame of animation:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@velocity += Vector.[](0, @gravity)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This looks suspiciously like it will result in infinite speed, but because the overall space the ball can move in is so small we can ignore this for now.&lt;/p&gt;
&lt;h3&gt;Wall Bounces&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;ve been very explicit about detecting bounces against the &amp;#8220;walls&amp;#8221; of the scene.  Each wall is checked (because the ball could hit two at the same time), and if a bounce has occurred the ball is moved back to the wall.  This is in case it bounces through the wall in cases where it&amp;#8217;s moving very fast.  The &lt;code&gt;bounce_off_wall&lt;/code&gt; method just uses the velocity vector multiplication described above.&lt;/p&gt;
&lt;pre&gt;    if @position[0] &amp;gt;= @app.width - (@radius * 2)
      @position = Vector.[](@app.width - (@radius * 2), @position[1])
      bounce_off_wall
    end
&lt;/pre&gt;
&lt;h3&gt;Scene Management and Keyboard Commands&lt;/h3&gt;
&lt;p&gt;My example adds some methods for creating random balls with different velocities and mass, and it also adds keyboard commands for reset (r) and adding a new ball (a).&lt;/p&gt;
&lt;h3&gt;Putting it Together&lt;/h3&gt;
&lt;p&gt;Get &lt;a href="http://github.com/alexyoung/shoes-ball/blob/77836b41f81c0f51f6541a8b1c00a4d075ff0143/ball-gravity.rb" id="ac247d2c61c186064549a0ad0a579cd2167cb13f"&gt;ball-gravity.rb&lt;/a&gt; from my GitHub repository &lt;a href="http://github.com/alexyoung/shoes-ball/tree/master"&gt;shoes-ball&lt;/a&gt; and run it with &lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt;.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/1GzrkDx2kV4/110396226</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/110396226</guid><pubDate>Wed, 20 May 2009 09:26:00 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/110396226</feedburner:origLink></item><item><title>Quite Useful Weekly Roundup</title><description>&lt;p&gt;This week we posted the first of a new series of Beautiful Algorithms articles: &lt;a href="http://quiteuseful.co.uk/post/108115925/beautiful-algorithms-3-1d-collisions"&gt;Collisions&lt;/a&gt;.  We also posted about &lt;a href="http://quiteuseful.co.uk/post/106686706/ebooks"&gt;eBooks&lt;/a&gt; and a web app called &lt;a href="http://quiteuseful.co.uk/post/106185341/web-app-review-orchestrate"&gt;Orchestrate&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Twitter Summary&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.teleread.org/"&gt;TeleRead&lt;/a&gt; is a great blog about eBooks.  They post regularly, and write about hardware readers, formats, sites that sell/host eBooks.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mobileorchard.com/6-tips-to-get-your-app-noticed/"&gt;6 Tips To Get Your App Noticed&lt;/a&gt; has some ideas for marketing your iPhone apps.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.uweschmidt.org/wiimote-whiteboard"&gt;Wiimote Whiteboard&lt;/a&gt; is an open source project for using Wiimotes to turn any surface into an interactive whiteboard.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://windosill.com/"&gt;Windosill&lt;/a&gt; is an incredibly imaginative Flash puzzle game.&lt;/p&gt;
&lt;h3&gt;App Reviews&lt;/h3&gt;
&lt;p&gt;Please send us links to your web/iPhone/Mac/Windows apps so we can review them!&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/MPfWtRKRiR4/108994403</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/108994403</guid><pubDate>Sun, 17 May 2009 12:46:45 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/108994403</feedburner:origLink></item><item><title>Beautiful Algorithms 3: 1D Collisions</title><description>&lt;p&gt;&amp;#8220;1D Collisions&amp;#8221; might sound a little bit strange, but the goal of &lt;i&gt;Beautiful Algorithms 3&amp;#160;&lt;/i&gt;is to explore algorithms for collision physics.  Collisions in 2 or 3 dimensions are naturally more complex than a single dimension, so let&amp;#8217;s look at this first.  I&amp;#8217;ll explain what mathematics and physical laws are required (don&amp;#8217;t worry, you understood all of this when you were 13), and then explain how to write a Ruby program to simulate this.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/ba3/shooesballs.png"/&gt;&lt;/p&gt;
&lt;h3&gt;Newton&amp;#8217;s Laws&lt;/h3&gt;
&lt;p&gt;You probably did simple experiments in science classes at school whereby objects were rolled down ramps, and their bounces were measured.  This is a physical exploration of Newton&amp;#8217;s second and third laws of motion.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Newton&amp;#8217;s second law of motion&lt;/b&gt;: &lt;i&gt;Momentum = mass * velocity&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Newton&amp;#8217;s third law of motion&lt;/b&gt;: &lt;i&gt;For every force there is an equal and opposite force&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Newton&amp;#8217;s law of impact&lt;/b&gt;&lt;i&gt;: &lt;/i&gt;The difference between velocities before impact is &lt;i&gt;proportional&lt;/i&gt; to the difference between their velocities after impact&lt;i&gt;&lt;br/&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In the Ruby Shoes example, we&amp;#8217;ll draw two balls and make them collide.  Calculating their position for a given frame of animation will require the second law.  Collisions will use the third law and law of impact to calculate the velocities after impact.&lt;/p&gt;
&lt;h3&gt;Velocity&lt;/h3&gt;
&lt;p&gt;Velocity is the rate of change of position: speed and direction are combined as a vector.  Vectors aren&amp;#8217;t scary &amp;#8212; in this example we&amp;#8217;ll use an array to model velocity for the speed going left or right and up or down.&lt;/p&gt;
&lt;p&gt;The velocity will change after impacts according to the second law of impact and third law: that is, the velocity should be reversed after impact, transferring some of its energy in the process.&lt;/p&gt;
&lt;h3&gt;Required Variables&lt;/h3&gt;
&lt;p&gt;According to the brief and possibly inaccurate summary of high school Newtonian physics above, each ball will have the following variables:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Mass&lt;/li&gt;
&lt;li&gt;Velocity (as an array) &amp;#8212; negative values will mean left or up&lt;/li&gt;
&lt;li&gt;X and Y co-ordinates&lt;/li&gt;
&lt;li&gt;A value for the &lt;i&gt;coefficient of restitution&lt;/i&gt; &amp;#8212; basically the amount of energy lost in each impact&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Required Methods&lt;/h3&gt;
&lt;p&gt;We&amp;#8217;ll need to know when balls bounce off each other or the walls of the scene.  We&amp;#8217;ll also want to update the position for each frame of animation.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;check_collisions(set of balls)&lt;/li&gt;
&lt;li&gt;hit?(ball) &amp;#8212; check if the ball has bounced off another one&lt;/li&gt;
&lt;li&gt;collide &amp;#8212; if a collision has been detected, alter the velocity according to the laws above&lt;/li&gt;
&lt;li&gt;move &amp;#8212; move the ball&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Collision Detection&lt;/h3&gt;
&lt;p&gt;The algorithm works like this:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Calculate the distance between two balls using Pythagoras&amp;#8217; Theorem by subtracting their positions to create a common frame of reference, then calculating the hypotenuse&lt;/li&gt;
&lt;li&gt;If this value is less than or equal to the combined radius of each ball, they&amp;#8217;ve bounced&lt;/li&gt;
&lt;li&gt;If the ball has moved to the end of the window, it has bounced&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The first step sounds a little bit complicated.  Basically:&lt;/p&gt;
&lt;pre style="font-size: 12px"&gt;x = absolute value of: ball_a.x - ball_b.x - x_velocity
y = absolute value of: ball_a.y - ball_b.y - y_velocity&lt;br/&gt;hypotenuse = square root of (x squared + y squared)&lt;br/&gt;&lt;/pre&gt;
&lt;h3&gt;Main Loop&lt;br/&gt;&lt;/h3&gt;
&lt;p&gt;The main loop will look like this (example requires JavaScript to display):&lt;/p&gt;
&lt;p&gt;
&lt;script src="http://gist.github.com/112152.js"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;h3&gt;Putting it Together&lt;/h3&gt;
&lt;p&gt;The final example is available here: &lt;a href="http://github.com/alexyoung/shoes-ball/blob/1e2cf311bdd499d192176129691f4b9d96551b94/ball-1D.rb"&gt;ball-1D.rb&lt;/a&gt;.  You can run it with &lt;a href="http://shoooes.net/"&gt;Shoes&lt;/a&gt;.  Note that there&amp;#8217;s no friction or gravity, bodies simply bounce until their collisions reduce their velocity enough.&lt;/p&gt;
&lt;p&gt;Try playing around with the velocity and mass settings to see what happens.  I&amp;#8217;ll be back on Monday with a 2D collision example!&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/TXLQmGY4pAk/108115925</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/108115925</guid><pubDate>Fri, 15 May 2009 11:10:06 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/108115925</feedburner:origLink></item><item><title>Beautiful Algorithms 3: Balls</title><description>&lt;p&gt;Beautiful Algorithms 3 is going to be about simple physics.  These examples will be written with Ruby Shoes, and will demonstrate how to simulate bouncing balls and collisions.&lt;/p&gt;
&lt;p&gt;The easiest way to model bouncing is to go back to basics with high school physics.  Start off with 1D collisions, then add the second dimensions, then apply gravity.&lt;/p&gt;
&lt;p&gt;The first post in this series will be posted tomorrow.  To get Shoes, download it here: &lt;a href="http://shoooes.net/"&gt;shoooes.net&lt;/a&gt;.  My previous Shoes example was &lt;a href="http://quiteuseful.co.uk/post/94473551/lets-make-a-game-wrap-up"&gt;Let&amp;#8217;s Make a Game: Snake&lt;/a&gt;.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/OKazZqypm1U/107662790</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/107662790</guid><pubDate>Thu, 14 May 2009 13:23:00 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/107662790</feedburner:origLink></item><item><title>eBooks</title><description>&lt;p&gt;You&amp;#8217;ve probably seen the Kindle, Amazon&amp;#8217;s reading device.  I live in the UK, and I have massive Kindle envy because Amazon don&amp;#8217;t sell it outside of the US.  That doesn&amp;#8217;t mean we all need to wait for Amazon to launch localised Kindles, however.  eBooks have been with us for a long time: Project Gutenberg&amp;#8217;s founder Michael Hart has been exploring eBooks since 1971.  I used to read books on my Palm IIIe at university to save money.  The old Palm&amp;#8217;s low-glare monochrome screen was good for reading, and I was happy with it.&lt;/p&gt;
&lt;p&gt;Since my experience with eBooks on Palm I&amp;#8217;ve tried many devices.  I&amp;#8217;m currently using an iPhone with the &lt;a href="http://www.lexcycle.com/"&gt;Stanza&lt;/a&gt; app.  There&amp;#8217;s a few things I like about Stanza: it&amp;#8217;s easy to change the brightness by dragging across the screen, there&amp;#8217;s a lot of options for fonts and sizes, and page changes are fast.  In terms of comfort, however, reading on the iPhone isn&amp;#8217;t optimum.  It&amp;#8217;s equivalent to my old Palm but I imagine the Kindle or Sony Reader offer better experiences.&lt;/p&gt;
&lt;h3&gt;Content and Formats&lt;/h3&gt;
&lt;p&gt;The main problem with eBooks right now is finding content.  This is a solved problem is you&amp;#8217;re using a Kindle in the US, and &lt;a href="http://ebookstore.sony.com/"&gt;Sony has their own store too&lt;/a&gt;.  Sony&amp;#8217;s device can use books from other sources too.  If you&amp;#8217;re not using one of these devices, it&amp;#8217;s not always clear what books will work for you: some online shops don&amp;#8217;t display their formats known.  Others specifically note the format and DRM used.  And even when they display formats, what do they mean and what can your reader support?  If you&amp;#8217;re using Stanza and you buy a DRM&amp;#8217;d ePub, will it work?  (The answer is: not currently).&lt;/p&gt;
&lt;p&gt;Sony&amp;#8217;s products support DRM, most notably for ePub.  If you buy a book in the DRM&amp;#8217;d ePub format, &lt;a href="http://www.adobe.com/products/digitaleditions/"&gt;Adobe&amp;#8217;s Digital Editions&lt;/a&gt; will open it and manage the DRM.  Interestingly, ePub is basically a load of XHTML, so it&amp;#8217;s an easy format for developers to support.&lt;/p&gt;
&lt;p&gt;Another popular format is &lt;a href="http://wiki.mobileread.com/wiki/MOBI"&gt;.mobi&lt;/a&gt; (or Mobipocket), which is an extension of the PalmDOC format.  It can be DRM&amp;#8217;d.  As far as I know, this doesn&amp;#8217;t work on the Sony Reader, but it could be converted, and the Kindle does support it.&lt;/p&gt;
&lt;p&gt;You&amp;#8217;ll probably also come across &lt;a href="http://wiki.mobileread.com/wiki/LIT"&gt;LIT&lt;/a&gt;.  Microsoft Reader will open these files, which is on PocketPC and Windows Mobile devices.  Stanza&amp;#8217;s desktop app allows me to open LIT files and send them to my iPhone; I think the Sony Reader will need the files converted.&lt;/p&gt;
&lt;p&gt;There are many other popular formats.  Books are distributed in RTF, plain text and PDF, and the &lt;a href="http://wiki.mobileread.com/wiki/E-book_formats"&gt;frightening list here&lt;/a&gt; contains more.  Generally, if you&amp;#8217;re sent a LIT, ePub or mobi file, it&amp;#8217;ll work well on a hardware reader (or with minimal conversion through desktop software).  I&amp;#8217;ve had a lot of luck with ePub and LIT with Stanza and iPhone.  PDF has been a problem: yes, I can read them, but they just don&amp;#8217;t work very well on hardware readers.  Plain text and RTF can lose some of the elegance of a well presented LIT or ePub book.&lt;/p&gt;
&lt;h3&gt;Converting Files&lt;/h3&gt;
&lt;p&gt;You&amp;#8217;ll be converting formats a lot.  &lt;a href="http://calibre.kovidgoyal.net/"&gt;Calibre&lt;/a&gt; works well, and Stanza&amp;#8217;s desktop app will try to adapt content for your iPhone.  Calibre will run on Windows, Mac OS and Linux.&lt;/p&gt;
&lt;p&gt;Yes, you can strip ePub DRM.  The process is quite technical, and will become more difficult when Adobe fixes a security flaw in Adobe Digital Editions.  It may be illegal in your country to do this.&lt;/p&gt;
&lt;h3&gt;Finding eBooks&lt;br/&gt;&lt;/h3&gt;
&lt;p&gt;I can only list sites I&amp;#8217;ve had luck with, and my list is generally UK-centric.  Stanza has a built-in list of sources as well.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.fictionwise.com/"&gt;Fictionwise&lt;/a&gt; - US-based, but has a lot of content.  I haven&amp;#8217;t bought anything form here, but they&amp;#8217;re clear about formats and DRM.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ebooks.whsmith.co.uk"&gt;WHSmith eBook Shop&lt;/a&gt; - very clear about DRM, but mix in audiobooks with results so keep an eye on the format you&amp;#8217;re purchasing.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://waterstones.co.uk/"&gt;Waterstones&lt;/a&gt; - heavily promoted the Sony Reader in the UK.  Not clear enough about DRM and formats, but the books I&amp;#8217;ve got from there have been ePub DRM&amp;#8217;d and open on my Mac and PC with Digital Editions.  Their advanced search lets you limit results to eBooks, but this sometimes decides to include regular books.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.penguin.co.uk/static/cs/uk/0/epenguin/index.html"&gt;Penguin&lt;/a&gt; - Similar to Waterstones, selling DRM&amp;#8217;d ePub&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pragprog.com/"&gt;Pragmatic Programmers&lt;/a&gt; - the template for all future eBook sites.  Once you buy a book you can download multiple copies in PDF, ePub and mobi with no DRM.  Only really suitable for software and designer folks, but if all eBook sites were done this way life would be simple.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://oreilly.com/store/ebooks.html"&gt;O&amp;#8217;Reilly&lt;/a&gt; - Also sell un-DRM&amp;#8217;d eBooks that&amp;#8217;ll work on just about any device.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gutenberg.org"&gt;Project Gutenberg&lt;/a&gt; - Copyright expired books&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Blogs&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.epubbooks.com/blog/"&gt;ePub Books&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.teleread.org/"&gt;TeleRead&lt;/a&gt; - the best blog about eBooks&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Conclusions&lt;/h3&gt;
&lt;p&gt;I hope this article has clarified the world of eBooks.  At first all the formats and DRM are hugely frustrating, but the growing dominance of .mobi and ePub should make things simpler, and publishers who support DRM-free books will ultimately create a world where anyone can understand and use eBooks.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/hwFZ4cvSaAc/106686706</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/106686706</guid><pubDate>Tue, 12 May 2009 11:59:29 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/106686706</feedburner:origLink></item><item><title>Web App Review: Orchestrate</title><description>&lt;p&gt;&lt;a href="http://orchestrateapp.com/"&gt;Orchestrate&lt;/a&gt; is a web application made by &lt;a href="http://www.elevensoft.com/"&gt;Elevensoft&lt;/a&gt;, who are based in the UK.  It&amp;#8217;s designed to manage tasks for projects.  What makes it unique is the focus on scheduling conflicts and qualification management.&lt;/p&gt;
&lt;p&gt;Orchestrate has a clean interface, similar to Lighthouse or Basecamp: the main page body is used to display information and forms, whilst the sidebar is used to issue commands or change the view.  It also has a prominent breadcrumb navigation, so it&amp;#8217;s easy to jump back to earlier stages of a process.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/orchestrate/orchestrate.png"/&gt;&lt;/p&gt;
&lt;p&gt;The only tweak I&amp;#8217;d like to see here is automatic field focus: I&amp;#8217;m used to web apps putting careful thought into what field I&amp;#8217;ll need to type in on a freshly loaded page.&lt;/p&gt;
&lt;h3&gt;Scheduling&lt;/h3&gt;
&lt;p&gt;Tasks can be assigned to locations and people.  It&amp;#8217;s also easy to set up recurring tasks, then assign them to people based on a weekly schedule overview.  You can then see all of the events for a particular day in a summary by clicking on the day:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/orchestrate/schedule.png"/&gt;&lt;/p&gt;
&lt;p&gt;Qualifications can be created and assigned to people.  This makes it easier to decide who can perform a particular task.  This makes sense: in our company I&amp;#8217;m the only person who can deploy apps to our servers, so I&amp;#8217;d set that up as a qualification.  Other tasks like writing blog posts are accessible to more than one of us.&lt;/p&gt;
&lt;p&gt;Once a task is ready to be signed off, there&amp;#8217;s a set of standard outcomes that can be selected:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dl.getdropbox.com/u/221414/quiteuseful/orchestrate/task_sign_off.png"/&gt;&lt;/p&gt;
&lt;h3&gt;Pricing and Conclusions&lt;/h3&gt;
&lt;p&gt;There&amp;#8217;s a free plan, and other plans start at $19 per month.  All paid plans give unlimited users so they&amp;#8217;re pretty good value, and the top plan at $199 per month gives branding features.  Judging by customer feedback I expect branding will be dropped to other plans, but this will probably be determined by how many companies pick up the $199 plan.&lt;/p&gt;
&lt;p&gt;The Help page is powered by Get Satisfication.  I&amp;#8217;d much rather see a comprehensive help page with usage examples; despite Orchestrate consistently claiming to be easy to use and simple, it took me too long to figure out its terminology and features.  The interface is always clear and also provides inline help tips, but more detailed inline help would really get people going with less initial confusion.&lt;/p&gt;
&lt;p&gt;I use project management software: I&amp;#8217;ve used Basecamp since it was launched, and I still use it to manage client projects today.  The core feature that makes me stick with Basecamp is messaging, and Orchestrate doesn&amp;#8217;t do this.  However, many business people I&amp;#8217;ve worked with have wanted more sophisticated scheduling like Orchestrate offers, and it does provide client updates, so it may work better than Basecamp for  companies who want this type of scheduling.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/wbkX9-RPP3o/106185341</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/106185341</guid><pubDate>Mon, 11 May 2009 09:45:16 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/106185341</feedburner:origLink></item><item><title>Quite Useful Weekly Roundup</title><description>&lt;p&gt;This week we posted a selection of &lt;a href="http://tinyurl.com/czsb43"&gt;command line time savers&lt;/a&gt;, the &lt;a href="http://quiteuseful.co.uk/post/103701530/twitter-scheduler"&gt;source code for a Ruby Twitter scheduler&lt;/a&gt;, and a &lt;a href="http://quiteuseful.co.uk/post/104525172/review-woobius"&gt;review of online collaboration service Woobius&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Twitter&lt;/h3&gt;
&lt;p&gt;I was having a bit of fun with mashups this week, so I posted a link to &lt;a href="http://djlobsterdust.com/"&gt;DJ Lobsterdust&lt;/a&gt; who makes some incredibly witty and skilled tracks.  If you like that, it&amp;#8217;s worth checking out &lt;a href="http://illegalart.net/girltalk/"&gt;Girl Talk&lt;/a&gt; too.&lt;/p&gt;
&lt;p&gt;A lot of Twitter/Digg style sites were announced this week: &lt;a href="http://www.dailyrt.com/"&gt;Daily RT&lt;/a&gt; and &lt;a href="http://www.twittl.com/"&gt;Twittl&lt;/a&gt; were heavily linked to.  Although these types of sites don&amp;#8217;t seem wildly popular right now, their obviousness is leading some people to believe Twitter&amp;#8217;s future will be based on reputation: a combination of Google&amp;#8217;s PageRank with social networks.&lt;/p&gt;
&lt;p&gt;On the Mac apps side, I found &lt;a href="http://www.nodheadsoftware.com/"&gt;Warranty Hero which&lt;/a&gt; is an interesting app: it aims to help you track when you purchased items along with their receipts.  &lt;a href="http://www.apaulodesign.com/widgets/page-capture.php"&gt;Page Capture&lt;/a&gt; also seemed to strike a chord, I&amp;#8217;ve been using &lt;a href="http://derailer.org/paparazzi/"&gt;Paparazzi!&lt;/a&gt; for a few years to do the same thing &amp;#8212; great apps for designers building images for a portfolio or for clients.&lt;/p&gt;
&lt;p&gt;I posted a few developer links, but one that stood out was an &lt;a href="http://www.mobileorchard.com/ocunit-integrated-unit-testing-in-xcode/"&gt;OCUnit tutorial&lt;/a&gt;.  I&amp;#8217;ve been a Ruby programmer for several years, where unit testing is part of a day&amp;#8217;s work.  In the Objective-C (iPhone/Mac) camp, however, unit testing isn&amp;#8217;t part of the scenery.  It&amp;#8217;s worth getting to grips with OCUnit though, if only to save your sanity in the long run!&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/btFc6zbjlYw/105800042</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/105800042</guid><pubDate>Sun, 10 May 2009 12:47:47 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/105800042</feedburner:origLink></item><item><title>Mind Blowing Command Line Time Savers</title><description>&lt;p&gt;Whether you&amp;#8217;re an old skool unix hacker or a Mac user who uses Terminal regularly, there&amp;#8217;s lots of ways to save time on the command line.  I&amp;#8217;ve mentioned a few of the following tips on &lt;a href="http://twitter.com/quiteuseful"&gt;twitter.com/quiteuseful&lt;/a&gt;, but I thought it&amp;#8217;d be handy to collect them all here.&lt;/p&gt;
&lt;h3&gt;Bash&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;!!&lt;/code&gt; - repeats the last command&lt;/p&gt;
&lt;p&gt;&lt;code&gt;history&lt;/code&gt; &lt;i&gt;n&lt;/i&gt; - shows the last &lt;i&gt;n&lt;/i&gt; things you&amp;#8217;ve typed&lt;/p&gt;
&lt;p&gt;My favourite shortcut is &lt;code&gt;ctrl-r&lt;/code&gt;: this lets you search through history interactively.  I probably use &lt;code&gt;ctrl-r&lt;/code&gt; every day, I really don&amp;#8217;t like repeating myself!&lt;/p&gt;
&lt;p&gt;xargs is a useful command: it&amp;#8217;ll construct argument lists.  It works really well with pipes:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;find *.rb | xargs grep -i "ActiveRecord"&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Aliases&lt;/h3&gt;
&lt;p&gt;My aliases end up getting ridiculously short.  I don&amp;#8217;t ssh into my screen session with IRC, etc, I just type &amp;#8220;irc&amp;#8221;.  I don&amp;#8217;t even type &lt;code&gt;ls&lt;/code&gt; either:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;alias l='ls -Gla'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re on a Mac you should have a &lt;code&gt;~/.profile&lt;/code&gt; file, so you can add aliases there.&lt;/p&gt;
&lt;h3&gt;Apps: ack and cdargs&lt;br/&gt;&lt;/h3&gt;
&lt;p&gt;My two favourite command line time savers are &lt;code&gt;ack&lt;/code&gt; and &lt;code&gt;cdargs&lt;/code&gt;.  I found myself searching code a lot, and ack works better than grep for this.  It&amp;#8217;s also useful for finding documentation: why view the Rails HTML docs when you can ack the Rails source?  Give it a go with one of your regularly used libraries!&lt;/p&gt;
&lt;p&gt;You can get ack from &lt;a href="http://betterthangrep.com/"&gt;betterthangrep.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cdargs&lt;/code&gt; lets you bookmark directories, then cd to them with a shorter name.  I have a lot of code in &lt;code&gt;~/Documents/Code/project_name&lt;/code&gt;, and I move between projects every day.  I bookmarked these with &lt;code&gt;ca&lt;/code&gt;, then I &lt;code&gt;cd&lt;/code&gt; to them with &lt;code&gt;cv project-short-name&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can get cdargs here: &lt;a href="http://www.skamphausen.de/cgi-bin/ska/CDargs"&gt;cdargs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These apps don&amp;#8217;t sound like a big deal, but they really help me switch between projects.  Ack is great for navigating code too: you can get plugins for TextMate or Vim.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/quiteuseful/~3/QCVw_BQaVH0/104974785</link><guid isPermaLink="false">http://quiteuseful.co.uk/post/104974785</guid><pubDate>Fri, 08 May 2009 11:20:27 +0100</pubDate><feedburner:origLink>http://quiteuseful.co.uk/post/104974785</feedburner:origLink></item></channel></rss>

