<?xml version="1.0" encoding="UTF-8"?>
<articles>
  <article>
    <body>&lt;p&gt;I am fairly committed to using Gmail (Google Mail) as my primary universal email service, but once I got my new iPhone I found myself wishing that it too provided 'push' services like Yahoo Mail provides (as does Microsoft Exchange server and Apple's new MobileMe service).&lt;/p&gt;
&lt;p&gt;The simplest way is to set up a free Yahoo mail account (assuming you don't have one already), add the Yahoo Mail account to your iPhone's email account list, then in Gmail create a new filter which tests for the condition 'is:inbox' and then forwards a copy to Yahoo Mail - which (you guessed it) gets pushed automatically to the iPhone.&lt;/p&gt;
&lt;p&gt;If you haven't set up a filter before, log into Gmail and click on 'Settings' in the navigation towards the upper right corner of the page. Then click on the 'Filters' tab (between 'Labels' and 'Forwardingand POP/IMAP'). Then at the bottom of this page click 'Create a new filter'.&lt;/p&gt;
&lt;p&gt;On the first page of your filter setup type the words "is:inbox" (without quotes) in the field 'Has the words:', then click on the 'Test Search' button. You should see the result is everything currently in your inbox.&lt;/p&gt;
&lt;p&gt;Then click the 'Next Step &gt;&gt;' button, which will give you a warning to the effect this criteria will never catch incoming mail -- but it does!&lt;/p&gt;
&lt;p&gt;The last step is to select 'Forward it to:' and fill in your Yahoo Mail account address. Then select 'Create Filter'. I would advise against selecting the tickbox to 'Apply this filter to &lt;em&gt;nnn&lt;/em&gt; conversations below', otherwise - your iPhone will have &lt;em&gt;nnn&lt;/em&gt; unread email conversations to deal with.&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/yahoo_mail_1.gif" width=450 height=209 alt="Google Mail filter creation dialogue"/&gt;&lt;/p&gt;
&lt;p&gt;Finally, add the Yahoo Mail account to your iPhone's email account list. You may also wish to alter your iPhone's email fetching preferences so that Gmail will only be checked when you want to check it (Manual). Go into the iPhone's settings and select 'Fetch New Data' from the top group. Select 'Advanced', then select your gmail account and set it to 'Manual' (instead of 'Fetch').&lt;/p&gt;
&lt;p&gt;Actually, you don't have to keep Gmail on your iPhone, but I do so I can override the 'From:' address to my Gmail account when I am responding to an email I am viewing in my Yahoo account. It makes it easier for the person who originally sent the email - otherwise you could end up with a situation where a 'reply all' ends up including both your Gmail account and your Yahoo account and you could potentially start seeing duplicate notifications of the same email, etc.&lt;/p&gt;
&lt;p&gt;All that remains now is to test it out by sending an email to your Gmail account and waiting for your iPhone to buzz/alert/notify you of a new mail. Cool!&lt;/p&gt;</body>
    <category-id type="integer">2</category-id>
    <created-at type="datetime">2008-07-13T07:08:45+00:00</created-at>
    <id type="integer">15</id>
    <is-link type="boolean">false</is-link>
    <published type="boolean">true</published>
    <published-at type="datetime">2008-07-13T09:29:59+00:00</published-at>
    <synopsis>How to get your Gmail inbox pushed to your iPhone - without having to check for it.</synopsis>
    <title>Push Email on iPhone = Gmail + Yahoo Mail</title>
    <updated-at type="datetime">2008-07-13T09:29:59+00:00</updated-at>
    <url></url>
    <use-textilize type="boolean">true</use-textilize>
    <user-id type="integer">1</user-id>
  </article>
  <article>
    <body>&lt;p&gt;Well, I'm categorising this as a 'tutorial' even though it's really just a handy tip.&lt;/p&gt;
&lt;p&gt;A few weeks ago I started to get an unprecedented number of emails purporting to represent job opportunities at Waller Truck Co. Gmail did a very good job at recognising these as spam emails, however the problem with Gmail spam is that you have to check it every now and again because sometimes valid emails get caught out by its spam algorithm.&lt;/p&gt;
&lt;p&gt;The first thought I had was to set up a filter - however Gmail filters don't apply to items already caught by the Spam filter - at least they don't make it easy for you to do so.&lt;/p&gt;
&lt;p&gt;The trick is to use the condition 'is:spam' in addition to the words ' waller truck' in the 'Has the words' section on the filter creation page.&lt;/p&gt;

&lt;img src="/images/waller_1.gif" width=450 height=211 alt="Google Mail filter creation dialogue"/&gt;
&lt;br/&gt;
&lt;p&gt;When you advance to the next step, Gmail will warn you that this filter will not catch any incoming emails. That is fine. Click OK and continue.&lt;/p&gt;

&lt;img src="/images/waller_2.gif" width=449 height=162 alt="Google Mail warning dialogue"/&gt;
&lt;br/&gt;
&lt;p&gt;On the second page of the filter creation page, you can assign a label for good measure, but this is really unnecessary. I did it at first to ensure the filter was working correctly.&lt;/p&gt;
&lt;p&gt;Tick the 'Delete it' box, and now any incoming Spam emails with the words 'Waller' and 'Truck' in it will be automatically deleted.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; This attack seems to have waned off and taken a new form as &lt;a href="http://labs.kevox.co.uk/tutorials/10"&gt;Newman, Esmond &amp;amp; Eisenberg&lt;/a&gt;.&lt;/p&gt;</body>
    <category-id type="integer">2</category-id>
    <created-at type="datetime">2008-02-12T21:22:59+00:00</created-at>
    <id type="integer">7</id>
    <is-link type="boolean">false</is-link>
    <published type="boolean">true</published>
    <published-at type="datetime">2008-02-29T11:46:52+00:00</published-at>
    <synopsis>If you have been bombarded with spam from Waller Truck Company and are using Gmail, then I have a solution that will send those emails straight to the Trash or Bin folder and not require your attention in the Spam folder.</synopsis>
    <title>Waller Truck Co. Spam Solution</title>
    <updated-at type="datetime">2008-02-29T11:46:52+00:00</updated-at>
    <url></url>
    <use-textilize type="boolean">true</use-textilize>
    <user-id type="integer">1</user-id>
  </article>
  <article>
    <body>&lt;p&gt;I detailed a solution earlier this month for a similar attack from people purporting to be Waller Truck Company. The solution is &lt;a href="/tutorials/7"&gt;detailed here&lt;/a&gt; - all you have to do different is create the filter using the search condition:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Has the words: is:spam newman esmond&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;I didn't add 'eisenberg' to the condition test because sometimes it gets shortened to 'Eisen.' in the email subject and sometimes they use 'NEE' instead.&lt;/p&gt;</body>
    <category-id type="integer">2</category-id>
    <created-at type="datetime">2008-02-23T16:12:54+00:00</created-at>
    <id type="integer">10</id>
    <is-link type="boolean">false</is-link>
    <published type="boolean">true</published>
    <published-at type="datetime">2008-02-27T16:40:25+00:00</published-at>
    <synopsis>Are you being bombarded with Spam from Newman, Esmond &amp;amp; Eisenberg? (AKA NEE)? Then read on...</synopsis>
    <title>Newman, Esmond &amp;amp; Eisenberg Spam Solution</title>
    <updated-at type="datetime">2008-02-27T16:40:25+00:00</updated-at>
    <url></url>
    <use-textilize type="boolean">true</use-textilize>
    <user-id type="integer">1</user-id>
  </article>
  <article>
    <body>&lt;p&gt;I recently worked on a PHP-based site and was getting tired of shifting files to the server via FTP so I decided to take a stab at utilising &lt;a href="http://capify.org" target="_new"&gt;Capistrano&lt;/a&gt; to do the work for me.&lt;/p&gt;
&lt;p&gt;The thing about Capistrano is that once you set it up, you generally never think about it again - so I had to do a bit of trial and error getting things set up for the PHP application.&lt;/p&gt;
&lt;p&gt;This tutorial assumes your PHP application is served under the path '/web/public/'. It is also assumed that you have already installed Capistrano.&lt;/p&gt;
&lt;p&gt;The first step is to make sure you have your application stored in a Subversion repository. Next you are going look under your /public directory to see if there is anything that isn't controlled by Subversion. Textdrive users may want to preserve the _ical subdirectory - and if you have a favicon.ico or .htaccess file that isn't under Subversion, you'll want to preserve those too.&lt;/p&gt;
&lt;p&gt;Under the root of your &lt;b&gt;local&lt;/b&gt; version of the application, you want to run 'capify .' from a command line. This creates the /config directory and the deploy.rb file underneath it.&lt;/p&gt;
&lt;p&gt;After you modify the deploy.rb file with the correct login details of your remote server, then it's time to prepare the remote server by running the command 'cap deploy:setup' from your local command line. It may prompt you for your remote server password. It sets up two directories (shared and releases) and modifies their permissions correctly.&lt;/p&gt;
&lt;p&gt;Move any of the items (if any) you wish to preserve into the shared directory. This is a safe directory that never gets overwritten. We can later modify the deploy.rb script to create symlinks to items in the shared directory.&lt;/p&gt;
&lt;p&gt;Then comes the scary bit where you delete the entire /public directory and everything underneath it. It's OK though, in a moment, you'll have a fresh copy of the application sent over from the Subversion repository. Now it's time to do the first deployment. From the local command line (at the root of the application) run the command 'cap deploy' and respond to any password prompts along the way.&lt;/p&gt;
&lt;p&gt;If all went well, you will now have a new Subversion checkout in a time-stamped directory under the /releases directory. You will now also have a new symlinked folder called '/current'. But what about /public? Without a public folder the URL will fail. This is where we create a one-time symlink called 'public' pointing to the 'current' symlink which in turn points to the latest release. This symlink must be done on the remote side. SSH into your server and navigate to the /web folder where '/releases', '/shared' and '/current' now reside. Run the command 'ln -s [path to application]/web/current [path to application]/web/public'. That should do the trick!&lt;/p&gt;</body>
    <category-id type="integer">2</category-id>
    <created-at type="datetime">2007-11-26T01:20:46+00:00</created-at>
    <id type="integer">6</id>
    <is-link type="boolean">false</is-link>
    <published type="boolean">true</published>
    <published-at type="datetime">2007-11-26T01:34:04+00:00</published-at>
    <synopsis>The Ruby-based deployment tool works for other environments as well as Ruby on Rails.</synopsis>
    <title>Deploying a PHP Application Using Capistrano</title>
    <updated-at type="datetime">2007-11-26T01:34:04+00:00</updated-at>
    <url></url>
    <use-textilize type="boolean">true</use-textilize>
    <user-id type="integer">1</user-id>
  </article>
  <article>
    <body>OK, so this isn't a tutorial just yet -- but it will be soon (once I've finished writing it).&lt;br/&gt;&lt;br/&gt;
I just couldn't bear to have the Tutorials section sitting empty when all the other sections had content.</body>
    <category-id type="integer">2</category-id>
    <created-at type="datetime">2007-08-21T17:53:58+00:00</created-at>
    <id type="integer">2</id>
    <is-link type="boolean">false</is-link>
    <published type="boolean">true</published>
    <published-at type="datetime">2007-09-09T18:13:13+00:00</published-at>
    <synopsis>It's a tutorial -- but not as we know it...</synopsis>
    <title>How to use placeholders in a blog</title>
    <updated-at type="datetime">2007-09-09T18:13:13+00:00</updated-at>
    <url></url>
    <use-textilize type="boolean">true</use-textilize>
    <user-id type="integer">1</user-id>
  </article>
</articles>
