[{"content":"LinkedIn Messages I\u0026rsquo;m trying to significantly reduce the time I spend on email, social media and messaging.\nOne of the plaforms where I get a lot of inbound connection requests and messages is LinkedIn.\nI find filtering connection requests very time consuming, so I decided a while ago it was easiest to just accept all requests.\nThis does, however, mean I get a lot more messages, many of which are trying to sell me a product or service.\nI don\u0026rsquo;t really mind people using LinkedIn as a sales channel, but I don\u0026rsquo;t have time to reply to all of these message individually.\n","permalink":"https://www.andrewmcdonough.com/linkedin-autoreply/","summary":"\u003ch1 id=\"linkedin-messages\"\u003eLinkedIn Messages\u003c/h1\u003e\n\u003cp\u003eI\u0026rsquo;m trying to significantly reduce the time I spend on email, social media and messaging.\u003c/p\u003e\n\u003cp\u003eOne of the plaforms where I get a lot of inbound connection requests and messages is LinkedIn.\u003c/p\u003e\n\u003cp\u003eI find filtering connection requests very time consuming, so I decided a while ago it was easiest to just accept all requests.\u003c/p\u003e\n\u003cp\u003eThis does, however, mean I get a lot more messages, many of which are trying to sell me a product or service.\u003c/p\u003e","title":"LinkedIn Messages"},{"content":"Coming soon\n","permalink":"https://www.andrewmcdonough.com/web-pages-should-not-vanish/","summary":"\u003cp\u003eComing soon\u003c/p\u003e","title":"Web Pages Should Not Vanish"},{"content":"The 10 year old Rackspace (previously Slicehost) server running my Wordpress website finally died, so I\u0026rsquo;m migrating any content that\u0026rsquo;s still potentially relevant to Gatsby. It\u0026rsquo;s deployed to Netlify, because who wants to care about personal web servers in 2019?\n","permalink":"https://www.andrewmcdonough.com/hello-world/","summary":"\u003cp\u003eThe 10 year old Rackspace (previously Slicehost) server running my Wordpress website finally died, so I\u0026rsquo;m migrating any content that\u0026rsquo;s still potentially relevant to Gatsby. It\u0026rsquo;s deployed to Netlify, because who wants to care about personal web servers in 2019?\u003c/p\u003e","title":"Hello World"},{"content":"On 11th September 2017, I spoke at the London Ruby Users Group about the modern Java ecosystem. I had left the Java world around a decade before, and had bad memories of writing lots of verbose boilerplate code. When I moved to being a Ruby developer, I left all of this behind, and never thought I\u0026rsquo;d go back. On a recent project, however, I was exposed to modern Java, which now has lambdas, and lots of nice syntactic sugar. On top of that, the Spring framework and the accompanying ecosystem had lots of the features I had been looking for when considering moving to a microservices architeture.\nSlides Video ","permalink":"https://www.andrewmcdonough.com/talks/a-trip-back/","summary":"\u003cp\u003eOn 11th September 2017, I spoke at the \u003ca href=\"https://lrug.org\"\u003eLondon Ruby Users Group\u003c/a\u003e about the modern Java ecosystem. I had left the Java world around a decade before, and had bad memories of writing lots of verbose boilerplate code. When I moved to being a Ruby developer, I left all of this behind, and never thought I\u0026rsquo;d go back. On a recent project, however, I was exposed to modern Java, which now has lambdas, and lots of nice syntactic sugar. On top of that, the Spring framework and the accompanying ecosystem had lots of the features I had been looking for when considering moving to a microservices architeture.\u003c/p\u003e","title":"Talk: A Trip Back to Where I Grew Up"},{"content":"On 8th June 2015 I gave a talk to the London Ruby Users Group entitled Ruby Magic. For this talk, I recreated several popular magic tricks in Ruby, including cups and balls, turning water into wine, and sawing a person in half.\nI then told the audience how the tricks were done, by including a gem I wrote in my .irbrc file. This magic_set gem monkey patches core Ruby classes like String and Array. The purpose of this talk was to demonstrate some of the unexpected behaviour you can get if you extend classes Ruby\u0026rsquo;s core classes, something I strongly advise against.\nVideo: https://skillsmatter.com/skillscasts/6455-ruby-magic Magic set: https://github.com/andrewmcdonough/magic_set ","permalink":"https://www.andrewmcdonough.com/talks/ruby-magic/","summary":"\u003cp\u003eOn 8th June 2015 I gave a talk to the \u003ca href=\"https://lrug.org\"\u003eLondon Ruby Users Group\u003c/a\u003e entitled \u003cem\u003eRuby Magic\u003c/em\u003e.  For this talk, I recreated several popular magic tricks in Ruby, including \u003ca href=\"https://en.wikipedia.org/wiki/Cups_and_balls\"\u003ecups and balls\u003c/a\u003e, turning water into wine, and \u003ca href=\"https://en.wikipedia.org/wiki/Sawing_a_woman_in_half\"\u003esawing a person in half\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"presentation\" loading=\"lazy\" src=\"/talks/ruby-magic/magic.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eI then told the audience how the tricks were done, by including a \u003ca href=\"https://github.com/andrewmcdonough/magic_set\"\u003egem\u003c/a\u003e I wrote in my \u003ccode\u003e.irbrc\u003c/code\u003e file. This magic_set gem monkey patches core Ruby classes like \u003ccode\u003eString\u003c/code\u003e and \u003ccode\u003eArray\u003c/code\u003e. The purpose of this talk was to demonstrate some of the unexpected behaviour you can get if you extend classes Ruby\u0026rsquo;s core classes, something I strongly advise against.\u003c/p\u003e","title":"Ruby Magic"},{"content":"On Tuesday evening, I gave a 20 slide \u0026rsquo;lightning talk\u0026rsquo; at the London Ruby Users Group (LRUG) entitled \u0026ldquo;Ruby Poetry\u0026rdquo;. Inspired by Murray Steele\u0026rsquo;s \u0026ldquo;My First Ruby\u0026rdquo; talk at a previous LRUG, I decided to tell a story about a small progam I wrote about five years ago, when I was fairly new to Ruby. At the time, I had just made the transition to Ruby after years as Java developer, and I was amazed at how easy it was to solve problems without having to write very much code.\nThe story starts when I was invited to a party. The party was a themed Burns Night dinner. These celebrations are common in Scotland to celebrate the life and poetry of Robert Burns. I had been invited to the same party the previous year, and remembered back to enjoying the haggis and whisky. One thing I recalled that had not felt particularly comfortable with, is that I had been asked to bring a poem to read. On the evening, instead of bringing poems from books, most people had written their own, and I felt bad for lacking creativity. I decided that this time around, I would try to be creative in my own way, and wrote a Ruby program to generate some topical poetry from the day\u0026rsquo;s news headlines. I won\u0026rsquo;t go into too much detail here, as my five minute talk was kindly videoed by Skills Matter:\ngenerate_topical_rhyming_couplets.rb The code below is what I used to generate the couplets on the day. While I had been tuning my algorithm, I wrote the headlines to a file so I didn\u0026rsquo;t have to reload them each time. The full source is on github.\n#!/usr/bin/env ruby require \u0026#39;rss\u0026#39; require \u0026#39;open-uri\u0026#39; # Open the list of feeds fh = open(\u0026#34;feeds.txt\u0026#34;) feeds = fh.read.split \u0026#34;\\n\u0026#34; # For each feed, get the headlines headlines = [] feeds.each do |feed| begin file = open(feed) rss = RSS::Parser.parse(file.read) feed_headlines = rss.items.map {|i| i.title} headlines += feed_headlines rescue puts \u0026#34;Error with #{feed}\u0026#34; end end # Remove duplicates and strip some prefixes headlines = headlines.uniq! headlines = headlines.map {|h| h.gsub /^(AUDIO|VIDEO): /,\u0026#34;\u0026#34;} # Test for couplets def couplet?(a,b) as = a.gsub /\\W/,\u0026#34;\u0026#34; # Ignore punctuation bs = b.gsub /\\W/,\u0026#34;\u0026#34; as[-3,3] == bs[-3,3] \u0026amp;\u0026amp; !(as[-5,5] == bs[-5,5]) \u0026amp;\u0026amp; (as.length - bs.length).abs \u0026lt; 10 \u0026amp;\u0026amp; (as.length \u0026gt; 30 \u0026amp;\u0026amp; as.length \u0026lt; 70) \u0026amp;\u0026amp; (bs.length \u0026gt; 30 \u0026amp;\u0026amp; bs.length \u0026lt; 70) end # Sort the headlines by the last three letters headlines.sort! {|a,b| a[-3,3] \u0026lt;=\u0026gt; b.reverse[-3,3] } # Iterate over the headlines, testing in pairs for couplets i = 0 while (i \u0026lt; headlines.length-2) do a = headlines[i] b = headlines[i+1] if couplet?(a,b) i += 1 puts \u0026#34;#{a}\\n#{b}\\n\\n\u0026#34; end i += 1 end As the couplet finding algorithm was fairly crude, only looking for matches of the last three letters, and not the phonetic reprentation, I allowed myself to pick the best couplets as generated on the day. To demonstrate my code, I reran the program on the day of my talk, and read the best couplets it generated at the end:\nThe final poem, as generated on the day of the talk Eurozone agrees second Greek bail-out Haye trainer rules out Chisora bout Man released after Sunday arrest South Sudan puts Beijing policies to the test Young carers need more support Green light for £100m golf resort Lord of the Flies redesigned \u0026#39;Typosquatting\u0026#39; prize firms fined Football with history of conflict Travel by train though the Lake District Storm at C-word in BBC weather forecast Top Irish dancers set for Belfast Are there more strikes on the way? I love my ID card. Can they really be taking it away? London \u0026#39;second best study city\u0026#39; Oil sector \u0026#39;needs tax stability\u0026#39; Ants remember their enemy\u0026#39;s scent That\u0026#39;s enough \u0026#39;kicking ass\u0026#39; Mr President One-minute World News Performance poetry - your reviews I particularly like the last one, which like the others, was genuinely generated on the day.\nSo the two talks I have given at LRUG have been entitled Ruby Poetry and Ruby Golf. What Ruby \u0026lt;insert word here\u0026gt; should I do next?\n","permalink":"https://www.andrewmcdonough.com/2012/02/23/ruby-poetry/","summary":"\u003cp\u003eOn Tuesday evening, I gave a 20 slide \u0026rsquo;lightning talk\u0026rsquo; at the \u003ca href='http://lrug.org'\u003eLondon Ruby Users Group (LRUG)\u003c/a\u003e entitled \u0026ldquo;Ruby Poetry\u0026rdquo;.  Inspired by \u003ca href='http://twitter.com/hlame'\u003eMurray Steele\u003c/a\u003e\u0026rsquo;s \u0026ldquo;\u003ca href='http://skillsmatter.com/podcast/ajax-ria/my-first-ruby'\u003eMy First Ruby\u003c/a\u003e\u0026rdquo; talk at a previous LRUG, I decided to tell a story about a small progam I wrote about five years ago, when I was fairly new to Ruby.  At the time, I had just made the transition to Ruby after years as Java developer, and I was amazed at how easy it was to solve problems without having to write very much code.\u003c/p\u003e","title":"Ruby Poetry"},{"content":"On 23rd June 2011, I gave a talk at the Hacker News London meetup group on how we \u0026rsquo;eat our own dogfood\u0026rsquo; at Tribesports by integrating fitness and exercise into our work day.\nVideo: https://skillsmatter.com/skillscasts/2395-dogfooding Slides: https://github.com/andrewmcdonough/presentation-dogfood ","permalink":"https://www.andrewmcdonough.com/talks/tribesports-dogfooding/","summary":"\u003cp\u003eOn 23rd June 2011, I gave a talk at the \u003ca href=\"https://www.meetup.com/HNLondon/\"\u003eHacker News London\u003c/a\u003e meetup group on how we \u0026rsquo;eat our own dogfood\u0026rsquo; at \u003ca href=\"https://tribesports.com\"\u003eTribesports\u003c/a\u003e by integrating fitness and exercise into our work day.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"standup\" loading=\"lazy\" src=\"/talks/tribesports-dogfooding/standup.jpg\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVideo: \u003ca href=\"https://skillsmatter.com/skillscasts/2395-dogfooding\"\u003ehttps://skillsmatter.com/skillscasts/2395-dogfooding\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSlides: \u003ca href=\"https://github.com/andrewmcdonough/presentation-dogfood\"\u003ehttps://github.com/andrewmcdonough/presentation-dogfood\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"Talk: Eating our own dogfood at Tribesports"},{"content":"On 9th May 2011, I ran a coding competition at the London Ruby Users Group. People were asked to form teams of 4-8 people, and solve nine short ruby golf \u0026lsquo;holes\u0026rsquo; using as few characters as possible. Each hole was defined by a set of RSpec examples describing a single method, and the teams had to write the method to pass all of the examples. The team with all tests passing using the fewest number of charaters would be declared the winner.\nI made a trophy for the competition by ordering a golf trophy, sawing off the golf ball with a hacksaw, and replacing it with a Ruby I bought on eBay.\nThe winner of the competition was a team of one person working on his own - Tomasz Wegrzanowski.\nOur lovely hosts Skills Matter took some photos of the evening.\nThanks to Simon Coffey for his help writing some of the challenges.\nLinks LRUG: http://lrug.org/meetings/2011/#may-2011-meeting Skills matter: https://skillsmatter.com/meetups/1000-ruby-golf Photos: https://www.flickr.com/photos/skillsmatter/albums/72157626683669388 GitHub: https://github.com/andrewmcdonough/rubygolf ","permalink":"https://www.andrewmcdonough.com/talks/ruby-golf/","summary":"\u003cp\u003eOn 9th May 2011, I ran a coding competition at the \u003ca href=\"https://lrug.org\"\u003eLondon Ruby Users Group\u003c/a\u003e. People were asked to form teams of 4-8 people, and solve nine short ruby golf \u0026lsquo;holes\u0026rsquo; using as few characters as possible. Each hole was defined by \u003ca href=\"https://github.com/andrewmcdonough/rubygolf\"\u003ea set of RSpec examples\u003c/a\u003e describing a single method, and the teams had to write the method to pass all of the examples. The team with all tests passing using the fewest number of charaters would be declared the winner.\u003c/p\u003e","title":"Talk: Ruby Golf"},{"content":"Update (2019) I wrote this post in 2010, and this project won\u0026rsquo;t work anymore.\nRecently, I have been consuming a lot of music through Spotify, a desktop application that gives you instant access to millions of songs. As well as listening to music at home, I try to go to as many live gigs as possible. Living in London, there are so many touring bands to chose from that it is sometimes difficu lt to keep track. For the last year or so, I have been helped by Songkick.com, a fantastic online database and community for live music fans. Through the site, you can track your favourite artists, receive email notifications when they are playing near you, and mark any gigs you are going to (which in turn gets fed into my Google Calendar so I don\u0026rsquo;t forget). When I go to a gig, I like to listen to the music of the performer beforehand, which I usually do using Spotify. I find, however, that I frequently forget to do this, and end up not enjoying the gig as much.\nTo help me keep up to date, I decided to put together a little app to generate Spotify artist links from my Songkick gig calendar. Thanks to Spotify\u0026rsquo;s relatively new Metadata API, Phil Nash\u0026rsquo;s meta-spotify ruby wrapper, and a little bit of Sinatra, Hpricot and Haml, this was pretty simple.\nYou can see the result by clicking on the image:\nIf you want to have a look at the source, it's on my github ","permalink":"https://www.andrewmcdonough.com/2010/01/19/spotkick-generate-spotify-artist-links-from-your-songkick-gig-calendar/","summary":"\u003ch2 id=\"update-2019\"\u003eUpdate (2019)\u003c/h2\u003e\n\u003cp\u003eI wrote this post in 2010, and this project won\u0026rsquo;t work anymore.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eRecently, I have been consuming a lot of music through \u003ca href=\"http://spotify.com\" target=\"_new\"\u003eSpotify\u003c/a\u003e, a desktop application that gives you instant access to millions of songs.  As well as listening to music\nat home, I try to go to as many live gigs as possible.  Living in \u003ca href=\"http://www.songkick.com/metro_areas/24426-uk-london/calendar\" target=\"_new\"\u003eLondon\u003c/a\u003e, there are so many touring bands to chose from that it is sometimes difficu\nlt to keep track.  For the last year or so, I have been helped by \u003ca href=\"http://songkick.com\" target=\"_new\"\u003eSongkick.com\u003c/a\u003e, a fantastic online database and community for live music fans.  Through the site, you can track your favourite\nartists, receive email notifications when they are playing near you, and mark any gigs you are going to (which in turn gets fed into my \u003ca href=\"http://calendar.google.com\" target=\"_new\"\u003eGoogle Calendar\u003c/a\u003e so I don\u0026rsquo;t forget).  When I go\nto a gig, I like to listen to the music of the performer beforehand, which I usually do using Spotify.  I find, however, that I frequently forget to do this, and end up not enjoying the gig as much.\u003c/p\u003e","title":"Spotkick - Generate Spotify artist links from your Songkick gig calendar"},{"content":"Update (2019) I wrote this post in 2009. In 2019 I believe my approach is a terrible idea. Adding methods to Ruby\u0026rsquo;s core classes (like String) is asking for trouble.\nThe logger is a really useful way to tell what is going on in your ruby application, but in Rails, it can be difficult to spot your own log entries when they are mixed up with all the ActiveRecord and ActionController ones. One way of making your own comments stand out is to use color in your logs. You have probably noticed that Rails does this already to make the logs more reada ble, and the effect is fairly easy to replicate yourself. Color in the terminal is achieved using ANSI escape codes, a series of characters to tell the terminal to print the enclosed string in a particular color and style. You could just include this in your logs yourself, but this ends up looking a bit messy. To solve this, I extended String to include a method called colorize. It takes a color (\u0026ldquo;gray\u0026rdquo;,\u0026ldquo;red\u0026rdquo;, \u0026ldquo;green\u0026rdquo;, \u0026ldquo;yellow\u0026rdquo;, \u0026ldquo;blue\u0026rdquo;, \u0026ldquo;magenta\u0026rdquo;, \u0026ldquo;cyan\u0026rdquo;,\u0026ldquo;white\u0026rdquo;) and a few other optional parameters for styling.\ncolorize.rb:\nclass String def colorize(color, options = {}) background = options[:background] || options[:bg] || false style = options[:style] offsets = [\u0026#34;gray\u0026#34;,\u0026#34;red\u0026#34;, \u0026#34;green\u0026#34;, \u0026#34;yellow\u0026#34;, \u0026#34;blue\u0026#34;, \u0026#34;magenta\u0026#34;, \u0026#34;cyan\u0026#34;,\u0026#34;white\u0026#34;] styles = [\u0026#34;normal\u0026#34;,\u0026#34;bold\u0026#34;,\u0026#34;dark\u0026#34;,\u0026#34;italic\u0026#34;,\u0026#34;underline\u0026#34;,\u0026#34;xx\u0026#34;,\u0026#34;xx\u0026#34;,\u0026#34;underline\u0026#34;,\u0026#34;xx\u0026#34;,\u0026#34;strikethrough\u0026#34;] start = background ? 40 : 30 color_code = start + (offsets.index(color) || 8) style_code = styles.index(style) || 0 \u0026#34;\\e[#{style_code};#{color_code}m#{self}\\e[0m\u0026#34; end end Here are some examples of colorize in action:\n\u0026gt; irb irb(main):001:0\u0026gt; require 'colorize' irb(main):002:0\u0026gt; s = \"Some text\" irb(main):003:0\u0026gt; puts s.colorize \"red\" Some text irb(main):004:0\u0026gt; puts s.colorize \"green\", :bg =\u0026gt; true Some text irb(main):005:0\u0026gt; puts s.colorize \"blue\", :style =\u0026gt; \"underline\" Some text irb(main):006:0\u0026gt; puts s.colorize \"magenta\", :style =\u0026gt; \"bold\" Some text irb(main):007:0\u0026gt; puts s.colorize \"cyan\", :style =\u0026gt; \"strikethrough\" Some text irb(main):008:0\u0026gt; puts s.colorize \"yellow\", :style =\u0026gt; \"dark\" Some text To include this in your Rails app, and use it with the debugger, just put the code in a place where it will be loaded. My method of doing this is to drop colorize.rb into your application\u0026rsquo;s /lib directory, then add the following line toe nvironment.rb\nrequire File.join(File.dirname(__FILE__), \u0026#39;../lib/colorize\u0026#39;) Reload the server, then you will be able to add color to your logs e.g.\nlogger.debug(\u0026#34;This is a message for debugging\u0026#34;.colorize(\u0026#34;red\u0026#34;)) As well as using colorize in logs, you can also use it in any script that runs on the command line. Uses for this might include test reporting, installation scripts, sysadmin script reporting and others.\n","permalink":"https://www.andrewmcdonough.com/2009/10/20/colorized-logs-in-ruby/","summary":"\u003ch2 id=\"update-2019\"\u003eUpdate (2019)\u003c/h2\u003e\n\u003cp\u003eI wrote this post in 2009. In 2019 I believe my approach is a terrible idea. Adding methods to Ruby\u0026rsquo;s core classes (like String) is asking for trouble.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eThe \u003ca href=\"http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc/\" target=\"_new\"\u003elogger\u003c/a\u003e is a really useful way to tell what is going on in your ruby application, but in \u003ca href=\"http://rubyonrails.org/\" target=\"_n\new\"\u003eRails\u003c/a\u003e, it can be difficult to spot your own log entries when they are mixed up with all the \u003ca href=\"http://api.rubyonrails.org/classes/ActiveRecord/Base.html\" target=\"_new\"\u003eActiveRecord\u003c/a\u003e and \u003ca href=\"http://api.rubyonrails.org\n/classes/ActionController/Base.html\" target=\"_new\"\u003eActionController\u003c/a\u003e ones.  One way of making your own comments stand out is to use color in your logs.  You have probably noticed that Rails does this already to make the logs more reada\nble, and the effect is fairly easy to replicate yourself.  Color in the terminal is achieved using \u003ca href=\"http://en.wikipedia.org/wiki/ANSI_escape_code\" target=\"_new\"\u003eANSI escape codes\u003c/a\u003e, a series of characters to tell the terminal to\nprint the enclosed string in a particular color and style.  You could just include this in your logs yourself, but this ends up looking a bit messy.  To solve this, I extended \u003cem\u003eString\u003c/em\u003e to include a method called \u003cstrong\u003ecolorize\u003c/strong\u003e.  It takes a color  (\u0026ldquo;gray\u0026rdquo;,\u0026ldquo;red\u0026rdquo;, \u0026ldquo;green\u0026rdquo;, \u0026ldquo;yellow\u0026rdquo;, \u0026ldquo;blue\u0026rdquo;, \u0026ldquo;magenta\u0026rdquo;, \u0026ldquo;cyan\u0026rdquo;,\u0026ldquo;white\u0026rdquo;) and a few other optional parameters for styling.\u003c/p\u003e","title":"Colorized Logs in Ruby"},{"content":"Update (2019): I wrote this post in 2009, so it\u0026rsquo;s probably not very useful anymore. I\u0026rsquo;ve left it here, as I am trying not to let content disappear from the web. I also find it interesting historical reasons\u0026hellip;\nFor a while, this was the most popular page on my website, which shows how difficult it was to find streaming audio content 10 years ago. The iPhone had been released two years previously, but publishers hadn\u0026rsquo;t really made it easy to access their content on mobile devices. It\u0026rsquo;s amazing how much things have changed\nIf you\u0026rsquo;re still reading this in 2019, listening to the Ashes is as simple as visiting BBC Sport\u0026rsquo;s cricket page\nIt\u0026rsquo;s surprisingly difficult to find a pub in Bayswater that shows the cricket during the day. I went searching for one today, hoping to catch a bit of The Ashes over my lunch hour. Of the few I did find, none had the volume turned up. Even The Elbow Room, which has individual TVs intended for watching sport, was playing loud 90s dance music instead (at 2pm).\nI decided that next time I needed to more prepared. I needed my own portable commentary source. My first thoughts were a traditional AM radio, but this approach felt a bit dated. I then had a look at DAB alternatives, but was shocked that they are still so expensive.\nFinally, after a bit of research, I found that I had the solution already; my iPhone. Here is how to do it:\nGo to the App Store and search for the App 'FStream'. It's free, so download it Open FStream and Select the 'Favourites' menu Click 'Edit' then 'Add new webradio' Call the station something like 'BBC Radio 5 Sports' Enter the URL http://www.bbc.co.uk/radio/listen/live/r5lsp.asx Click on the 'Play' menu and select your new station. Within a few seconds you should have BBC Radio 5 sport Find a pub These instructions don\u0026rsquo;t just work for the Radio 5; most of the other BBC radio stations are available. You can find a list of URLs at http://bbcstreams.com/.\n","permalink":"https://www.andrewmcdonough.com/2009/07/09/listening-to-the-ashes-commentary-on-my-iphone/","summary":"\u003ch2 id=\"update-2019\"\u003eUpdate (2019):\u003c/h2\u003e\n\u003cp\u003eI wrote this post in 2009, so it\u0026rsquo;s probably not very useful anymore. I\u0026rsquo;ve left it here, as I am \u003ca href=\"/web-pages-should-not-vanish\"\u003etrying not to let content disappear from the web\u003c/a\u003e.  I also find it interesting historical reasons\u0026hellip;\u003c/p\u003e\n\u003cp\u003eFor a while, this was the most popular page on my website, which shows how difficult it was to find streaming audio content 10 years ago. The iPhone had been released two years previously, but publishers hadn\u0026rsquo;t really made it easy to access their content on mobile devices. It\u0026rsquo;s amazing how much things have changed\u003c/p\u003e","title":"Listening to The Ashes commentary on my iPhone"},{"content":"It\u0026rsquo;s easy to let your email get on top of you. Fortunately, since I moved to Gmail for my domain, it has been to be a lot easier to avoid being overcome by an overcrowded inbox. For the last year or so, I have been trying to implement Inbox Zero, a system that I first heard about from productivity expert Merlin Mann. It involves processing your inbox regularly and moving all emails to a trusted place where they can be processed later. After a single pass, your inbox should be empty.\nMy first attempt at implementation was to create a number of labels (folders) that corresponded to the lists suggested by Dave Allen in his book Getting Things Done; Next Actions, Projects, Waiting For, Someday/Maybe. I quickly found this to be over complicated and decided to move to the Trusted Trio method suggested by Gina Trapani on the Lifehacker blog. I found this much more manageable because it used fewer folders, and the follow-up Lifehacker article, \u0026ldquo;Empty your inbox with Gmail and The Trusted Trio\u0026rdquo; helped with suggestions of how to implement the system in Gmail.\nDespite a significant rise in my email productivity, I still found processing my inbox fairly time consuming, and it was easy to fall out of the habit of Inbox Zero if I let my inbox get too full, particularly if I\u0026rsquo;d been away from my computer for a few days. I realised that the bottleneck for clearing my inbox was the process of moving the messages into the appropriate folders.\nI tend to find using the keyboard much more efficient than the mouse and so I looked into the keyboard shortcuts to move the emails. The \u0026lsquo;V\u0026rsquo; shortcut key for \u0026ldquo;Move To\u0026rdquo; helps, but I still had to type the start of the folder name. I needed a system where I could process the majority of emails with a single key press.\nReply/Star/Archive/Spam And so I come to the system that I have found works best for me. It is a hybrid of some of the ideas above, but even simpler. I have decided that I don't need a \"Hold\" category as Gmail's search is so powerful. Instead use Gmail's \"Star\" functionality as my \"Follow Up\" folder. I start processing my inbox by clicking on the first (most recent) email in my inbox. I then make a decision on what needs to be done with it. If it needs a reply, and the reply can be written in under two minutes, I hit the \u0026lsquo;r\u0026rsquo; key and start writing. If the email needs a reply or another action, but to do so would take more than two minutes, I hit the \u0026rsquo;s\u0026rsquo; key to star the email, and then \u0026rsquo;[\u0026rsquo; to archive it. If the email doesn\u0026rsquo;t require any further actions, but I need to keep it for reference, I archive it by pressing the \u0026rsquo;[\u0026rsquo; (left square bracket) key. Finally, if somehow an email has managed to break through Google\u0026rsquo;s excellent spam filter, I hit the \u0026lsquo;!\u0026rsquo; (exclaimation mark) key. This is more helpful than simply deleting the message as it helps Google identify future spam. I find that the majority of my emails don\u0026rsquo;t require any action at all, but I prefer to keep all non-spam messages for reference. Gmail\u0026rsquo;s huge storge and lightning-fast search facility means there rarely a reason to do so.\nSo to summarise, the four important keys you need:\nAction Shortcut Key Decision Reply r Reply/Action required taking less than two minutes Archive and next message [ No action required. Keep archive. Star s Reply/Action required taking more than two minutes Spam ! Spam. Delete and report it. Of course this system only deals with clearing your inbox. You will also need to process your Starred folder regularly to make sure anything that needs further attention gets done, but at least you can see a clear list of emails that require action, separate from new messages. One final note, if you\u0026rsquo;d prefer to process your inbox starting at the last (oldest) email rather than the first (newest) one, simply use the \u0026rsquo;]\u0026rsquo; (right angle braket) key instead of the left one.\n","permalink":"https://www.andrewmcdonough.com/2009/07/02/reply-star-archive-spam-achieving-inbox-zero-using-four-important-keyboard-shortcuts-in-gmail/","summary":"\u003cp\u003eIt\u0026rsquo;s easy to let your email get on top of you.  Fortunately, since I moved to \u003ca href=\"http://www.google.com/a/cpanel/domain/new\" target=\"_new\"\u003eGmail for my domain\u003c/a\u003e, it has been to be a lot easier to avoid being overcome by an overcrowded inbox.  For the last year or so, I have been trying to implement \u003ca href=\"http://www.43folders.com/izero\" target=\"_new\"\u003eInbox Zero\u003c/a\u003e, a system that I first heard about from productivity expert \u003ca href=\"http://www.merlinmann.com/\" target=\"_new\"\u003eMerlin Mann\u003c/a\u003e.  It involves processing your inbox regularly and moving all emails to a trusted place where they can be processed later.  After a single pass, your inbox should be empty.\u003c/p\u003e","title":"Reply/Star/Archive/Spam - Achieving Inbox Zero using four important keyboard shortcuts in Gmail"},{"content":"","permalink":"https://www.andrewmcdonough.com/talks/junior-developer-tips/","summary":"","title":""},{"content":"","permalink":"https://www.andrewmcdonough.com/talks/ruby-poetry/","summary":"","title":""},{"content":"","permalink":"https://www.andrewmcdonough.com/talks/startup-software-development/","summary":"","title":""}]