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

<channel>
	<title>Millsie</title>
	<atom:link href="http://millsie.net/feed" rel="self" type="application/rss+xml" />
	<link>http://millsie.net</link>
	<description>What goes in here again?</description>
	<lastBuildDate>Tue, 16 Aug 2011 13:44:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Reducing the Load</title>
		<link>http://millsie.net/linux/reducing-the-load</link>
		<comments>http://millsie.net/linux/reducing-the-load#comments</comments>
		<pubDate>Tue, 16 Aug 2011 13:44:00 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Slider]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cent os]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[optimisation]]></category>

		<guid isPermaLink="false">http://millsie.net/?p=71</guid>
		<description><![CDATA[Over the last few months, I&#8217;ve been monitoring Apache&#8217;s usage of memory and CPU for 10 virtual hosts on one of my VPS. I found that Apache regularly ate up 480MB of RAM after a couple days running, as this is getting dangerously close to my VPS limit, I had a play and optimised it<a href="http://millsie.net/linux/reducing-the-load">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>Over the last few months, I&#8217;ve been monitoring Apache&#8217;s usage of memory and CPU for 10 virtual hosts on one of my VPS. I found that Apache regularly ate up 480MB of RAM after a couple days running, as this is getting dangerously close to my VPS limit, I had a play and optimised it a little. </p>
<p>I got the load down to 380MB, but that&#8217;s still not good enough. </p>
<p>With the optimisation that I&#8217;d done to reduce memory load, I was starting to find that static assets are taking a while to load, typically all of the items on a standard e-commerce product listing page was taking around 3s to display. This was giving a negative user experience, so today I set about seeing what I could do to speed up the static assets, and keep a low memory footprint.</p>
<p>I&#8217;d heard people talking about running Lighttpd and Apache together, using Lighttpd to serve static assets &#8211; this seemed like a good idea, so I went ahead and configured Apache to listen on 127.0.0.1 only, and on a port that wasn&#8217;t 80.<br />
This meant that I could have Lighttpd running on port 80, and filtering what traffic went to Apache. </p>
<p>Already I was down to 0.5s page-load speed, and down to 300MB memory footprint. Good, but could I do better?</p>
<p>Nginx came to the rescue, very simple set up for all of my virtual hosts, which fed directly into Apache for all server-side scripts, with nginx serving static assets. Down to a 0.2s page load, 280MB RAM usage and barely any CPU load regardless of the amount the server gets hit. </p>
]]></content:encoded>
			<wfw:commentRss>http://millsie.net/linux/reducing-the-load/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Useful, little-used, Linux/UNIX console commands</title>
		<link>http://millsie.net/linux/useful-little-used-linux-unix-console-commands</link>
		<comments>http://millsie.net/linux/useful-little-used-linux-unix-console-commands#comments</comments>
		<pubDate>Tue, 19 Apr 2011 19:13:48 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Slider]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nl]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[pgrep]]></category>
		<category><![CDATA[tux]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://millsie.net/?p=54</guid>
		<description><![CDATA[pstree - lists processes in a tree format, I find this very useful for when working with heavy duty applications, and applications that spawn other processes: [ ~ ] [ alex@server ] pstree init-+-crond &#124;-dhclient &#124;-httpd---14*[httpd] &#124;-mingetty &#124;-mysqld_safe---mysqld---9*[{mysqld}] &#124;-ntpd &#124;-perl &#124;-rsyslogd---2*[{rsyslogd}] &#124;-screen---bash---irssi---figlet &#124;-3*[screen---bash---irssi] &#124;-screen-+-bash---irssi &#124;        `-bash &#124;-2*[screen---bash] &#124;-sshd-+-3*[sshd---sshd---bash---screen] &#124;      `-sshd---sshd---bash---pstree &#124;-svnserve &#124;-udevd `-znc pgrep -<a href="http://millsie.net/linux/useful-little-used-linux-unix-console-commands">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://linux.die.net/man/1/pstree" target="_blank">pstree </a>- </strong>lists processes in a tree format, I find this very useful for when working with heavy duty applications, and applications that spawn other processes:</p>
<blockquote>
<pre>[ ~ ]
[ alex@server ] pstree
init-+-crond
 |-dhclient
 |-httpd---14*[httpd]
 |-mingetty
 |-mysqld_safe---mysqld---9*[{mysqld}]
 |-ntpd
 |-perl
 |-rsyslogd---2*[{rsyslogd}]
 |-screen---bash---irssi---figlet
 |-3*[screen---bash---irssi]
 |-screen-+-bash---irssi
 |        `-bash
 |-2*[screen---bash]
 |-sshd-+-3*[sshd---sshd---bash---screen]
 |      `-sshd---sshd---bash---pstree
 |-svnserve
 |-udevd
 `-znc
</pre>
</blockquote>
<p><a href="http://linux.die.net/man/1/pgrep" target="_blank"><strong>pgrep </strong></a>- lookup processes based on name or other attributes</p>
<p>To list all process id&#8217;s owned by root, we could:</p>
<blockquote>
<pre> # ps -ef | egrep '^root ' | awk '{print $2}'
1
2
96
187
2053
...</pre>
</blockquote>
<p>Or we could:</p>
<blockquote>
<pre># pgrep -u root
1
2
96
187
2053
...
</pre>
</blockquote>
<p><strong><a href="http://linux.die.net/man/1/split" target="_blank">split </a>- </strong>for splitting  a larger file into manageable chunks</p>
<blockquote>
<pre>[ bbc.closing.sites.archive ]
[ alex@server ] ls -al
drwxrwxr-x 3 alex alex      4096 Apr 19 19:58 .
drwxrwxr-x 3 alex alex      4096 Apr  5 19:55 ..
-rw-rw-r-- 1 alex alex 916635648 Feb 10 15:04 bbc.co.uk.tgz
[ bbc.closing.sites.archive ]
[ alex@server ] split -b 128m bbc.co.uk.tgz bbc.co.uk.tgz_
[ bbc.closing.sites.archive ]
[ alex@server ] ls -al
-rw-rw-r-- 1 alex alex 916635648 Feb 10 15:04 bbc.co.uk.tgz
-rw-rw-r-- 1 alex alex 134217728 Apr 19 19:58 bbc.co.uk.tgz_aa
-rw-rw-r-- 1 alex alex 134217728 Apr 19 19:58 bbc.co.uk.tgz_ab
-rw-rw-r-- 1 alex alex 134217728 Apr 19 19:58 bbc.co.uk.tgz_ac
-rw-rw-r-- 1 alex alex 134217728 Apr 19 19:58 bbc.co.uk.tgz_ad
-rw-rw-r-- 1 alex alex 134217728 Apr 19 19:58 bbc.co.uk.tgz_ae
-rw-rw-r-- 1 alex alex 134217728 Apr 19 19:58 bbc.co.uk.tgz_af
-rw-rw-r-- 1 alex alex 111329280 Apr 19 19:58 bbc.co.uk.tgz_ag</pre>
</blockquote>
<p><a href="http://linux.die.net/man/1/nl" target="_blank"><strong>nl</strong> </a>- number the lines and output to stdout</p>
<blockquote>
<pre>[ bbc.closing.sites.archive ]
[ alex@server ] nl bbc.closing.sites.archive.txt | head
1  On Monday 24th January 2011 the BBC announced [1] that it would be
2  restructuring its online department - with 360 job losses and the
3  deletion of 200 of its top level directories (including the websites
4  that live under them - eg http://www.bbc.co.uk/blast).  172 of of those
5  top level directories [2] are due to be deleted within the coming 12
6  months.

7  Most of these sites are already 'mothballed' [3], which means that the</pre>
</blockquote>
<p><a href="http://linux.die.net/man/1/xmlwf" target="_blank"><strong>xmlwf </strong></a>- check whether an XML file is well formed</p>
<blockquote>
<pre>[ ~ ]
[ alex@server ] curl -s 'http://millsie.net' &gt; index.html
[ ~ ]
[ alex@server ] xmlwf index.html
index.html:387:154: not well-formed (invalid token)</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://millsie.net/linux/useful-little-used-linux-unix-console-commands/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tab completion in Eclipse IDE</title>
		<link>http://millsie.net/slider/tab-completion-in-eclipse-ide</link>
		<comments>http://millsie.net/slider/tab-completion-in-eclipse-ide#comments</comments>
		<pubDate>Mon, 18 Apr 2011 14:53:55 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Slider]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://millsie.net/?p=51</guid>
		<description><![CDATA[I find tab-completion an extremley useful feature of my IRC client, irssi, and most Linux/UNIX terminal emulators. I often wish that tab completion of filenames, commands etc was implemented in other software as well. Eclipse does have this feature, but it is often overlooked &#8211; simple open a file in Eclipse, in the Perspective that<a href="http://millsie.net/slider/tab-completion-in-eclipse-ide">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>I find tab-completion an extremley useful feature of my IRC client, irssi, and most Linux/UNIX terminal emulators. I often wish that tab completion of filenames, commands etc was implemented in other software as well.</p>
<p>Eclipse does have this feature, but it is often overlooked &#8211; simple open a file in Eclipse, in the Perspective that you are programming in, and hit CTRL + SPACE. You will be given a popup similar to the one below, and you can start typing the name of the method/function you want to call, and it will show you a brief description, and the parameters that it takes, without having to look them up online &#8211; how handy is that!</p>
<p><a href="http://millsie.net/wp-content/uploads/2011/04/Picture-2.png"><img class="alignnone size-full wp-image-52" title="Picture 2" src="http://millsie.net/wp-content/uploads/2011/04/Picture-2.png" alt="" width="766" height="256" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://millsie.net/slider/tab-completion-in-eclipse-ide/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Who is selling your email address?</title>
		<link>http://millsie.net/slider/how-to-track-selling-your-email-address</link>
		<comments>http://millsie.net/slider/how-to-track-selling-your-email-address#comments</comments>
		<pubDate>Mon, 18 Apr 2011 13:21:31 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Slider]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[rfc]]></category>

		<guid isPermaLink="false">http://millsie.net/?p=34</guid>
		<description><![CDATA[I get a lot of annoying spam email, I know that a lot of people do too, but I recently discovered something that enables me to track who has given who my email address. In order to sign up to, well, any website these days, you have to give them your email address, in order<a href="http://millsie.net/slider/how-to-track-selling-your-email-address">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>I get a lot of annoying spam email, I know that a lot of people do too, but I recently discovered something that enables me to track who has given who my email address.</p>
<p>In order to sign up to, well, any website these days, you have to give them your email address, in order to prove you are a real person, but a simple trick lets you track who is giving who your email address to who.</p>
<p>Say you sign up to my blog, your email address is i_love_biscuits@biscuitlover.com &#8211; by simply adding +&lt;websitename&gt; to your email address before the @ symbol, you can, relatively reliably, check who is selling your email address!</p>
<p>For example, i_love_biscuits+millsie.net@biscuitlover.com passes 99% of validators due to it being in <a href="http://tools.ietf.org/html/rfc2822#section-3.4.1" target="_blank">RFC 2822</a> &#8211; however, some validators are <a title="I knew how to validate an email address until I looked at the RFC" href="http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx" target="_blank">too strict</a> and won&#8217;t let you use it.</p>
<p>Using the +&lt;websitename&gt; or any other +&lt;randompieceoftext&gt; is a step closer to finding out who is selling your email address (or, giving it out for free!) &#8211; and the message will still enter your inbox, at which point you can create filters etc based on the To: field of the email to filter it down even more.</p>
]]></content:encoded>
			<wfw:commentRss>http://millsie.net/slider/how-to-track-selling-your-email-address/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>at &#8211; queue, examine or delete jobs for later execution</title>
		<link>http://millsie.net/linux/at-queue-examine-or-delete-jobs-for-later-execution</link>
		<comments>http://millsie.net/linux/at-queue-examine-or-delete-jobs-for-later-execution#comments</comments>
		<pubDate>Thu, 14 Apr 2011 21:00:35 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Slider]]></category>
		<category><![CDATA[commands]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[useful]]></category>

		<guid isPermaLink="false">http://millsie.net/?p=22</guid>
		<description><![CDATA[Recently, I had to do a scheduled deploy of some code &#8211; specifically, the client wanted a new rebranded logo to go up at 6am. Whilst I do try and give as much as I can to work, I really like sleeping, so I wasn&#8217;t going to get up and start messing around in their<a href="http://millsie.net/linux/at-queue-examine-or-delete-jobs-for-later-execution">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>Recently, I had to do a scheduled deploy of some code &#8211; specifically, the client wanted a new rebranded logo to go up at 6am.</p>
<p>Whilst I do try and give as much as I can to work, I <strong><em>really</em><em> like </em></strong>sleeping, so I wasn&#8217;t going to get up and start messing around in their CMS when I&#8217;m half awake.</p>
<p>I think of the &#8216;at&#8217; command as a one-off cronjob, and it&#8217;s syntax is really intuitive: here are some examples of usage:<em></em></p>
<p>To run the command svn up at 1am tomorrow:<em></em></p>
<blockquote><p><em># at 1am tomorrow</em><br />
svn up</p>
</blockquote>
<p>To run the script ~/start_backups.sh at 10:00am on 31st July:</p>
<blockquote><p>#at 10am Jul 31<br />
~/start_backups.sh</p>
</blockquote>
<p>To view jobs in the list:</p>
<blockquote><p><em>atq</em></p>
</blockquote>
<p>To remove jobs from the list:</p>
<blockquote><p><em>atrm [job number]</em></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://millsie.net/linux/at-queue-examine-or-delete-jobs-for-later-execution/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google AppEngine Development Server Python Persistent Datastore (OS X)</title>
		<link>http://millsie.net/app-engine/google-appengine-development-server-python-persistent-datastore-os-x</link>
		<comments>http://millsie.net/app-engine/google-appengine-development-server-python-persistent-datastore-os-x#comments</comments>
		<pubDate>Thu, 14 Apr 2011 20:37:39 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Slider]]></category>
		<category><![CDATA[annoying]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://millsie.net/?p=15</guid>
		<description><![CDATA[For some reason, the gods at Google decided that the file containg the datastore for the Python Google AppEngine SDK should be in a temporary folder, meaning that sometimes if you stop an app from running, or turn your machine off, you lose the datastore contents. This is really annoying. You can, however, tell the<a href="http://millsie.net/app-engine/google-appengine-development-server-python-persistent-datastore-os-x">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>For some reason, the gods at Google decided that the file containg the datastore for the Python Google AppEngine SDK should be in a temporary folder, meaning that sometimes if you stop an app from running, or turn your machine off, you lose the datastore contents.</p>
<p>This is really annoying.</p>
<p>You can, however, tell the SDK to use an external path for the datastore, so it will survive a shutdown.</p>
<p>I do this on an app by app basis, so I know where everything is saved and I feel more comfortable with it</p>
<ol>
<li>Create a folder somewhere memerable(!)</li>
<li>Edit the settings for each app in the Python SDK, and add the following to the &#8216;Extra Flags&#8217; field: &#8211;datastore_path=/path/to/folder/you/just/created</li>
</ol>
<p>All done, you can now reboot and keep your datastore intact!</p>
]]></content:encoded>
			<wfw:commentRss>http://millsie.net/app-engine/google-appengine-development-server-python-persistent-datastore-os-x/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pv &#8211; Monitor the progress of data through a pipe</title>
		<link>http://millsie.net/linux/pv-monitor-the-progress-of-data-through-a-pipe</link>
		<comments>http://millsie.net/linux/pv-monitor-the-progress-of-data-through-a-pipe#comments</comments>
		<pubDate>Thu, 14 Apr 2011 20:29:05 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Slider]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[useful]]></category>

		<guid isPermaLink="false">http://millsie.net/?p=11</guid>
		<description><![CDATA[I&#8217;ve often wondered whether my terminal is hanging or if file transfer/import is just taking a long amount of time. pv solves this by outputting a simple progress bar, as well as time elapsed, percentage completed, current throughput rate, total data transferred, and ETA. The usage is really simple, and I find it really useful,<a href="http://millsie.net/linux/pv-monitor-the-progress-of-data-through-a-pipe">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve often wondered whether my terminal is hanging or if file transfer/import is just taking a long amount of time. pv solves this by outputting a simple progress bar, as well as time elapsed, percentage completed, current throughput rate, total data transferred, and ETA.</p>
<p>The usage is really simple, and I find it really useful, especially when using scp to transfer archives between servers.</p>
<p>Usage is really simple: pv database.sql | mysql -uusername -ppassword database</p>
<p>There is also quite a nice comment in the description of pv&#8217;s man page:</p>
<blockquote><p><code>A more complicated example using numeric output to feed into the dialog(1) program for a full-screen progress display:</code></p>
<p><code> (tar cf - . \<br />
 | pv -n -s 'du -sb . | awk '{print $1}'' \<br />
 | gzip -9 &gt; out.tgz) 2&gt;&amp;1 \<br />
 | dialog --gauge 'Progress' 7 70</code></p>
<p><code>Frequent use of this third form is not recommended as it may cause the programmer to overheat.</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://millsie.net/linux/pv-monitor-the-progress-of-data-through-a-pipe/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Cyanogen(mod) on the Orange San Francisco/ZTE Blade</title>
		<link>http://millsie.net/android/installing-cyanogenmod-on-the-orange-san-francisco-zte-blade</link>
		<comments>http://millsie.net/android/installing-cyanogenmod-on-the-orange-san-francisco-zte-blade#comments</comments>
		<pubDate>Thu, 14 Apr 2011 19:56:23 +0000</pubDate>
		<dc:creator>Alexander</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Slider]]></category>
		<category><![CDATA[cyanogen mod]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[zte blade]]></category>

		<guid isPermaLink="false">http://millsie.net/?p=6</guid>
		<description><![CDATA[I was really rather surprised at how simple this actually was. From the Cyanogen(mod) website: The ZTE Blade (aka Venus or Orange San Francisco) is a touchscreen Android smartphone manufactured by ZTE for the European market. The device has various versions, differing in aspects such as screen type (AMOLED/TFT), camera (3.2MP or 5.0MP), and RAM<a href="http://millsie.net/android/installing-cyanogenmod-on-the-orange-san-francisco-zte-blade">&#160;&#160;[ Read More ]</a>]]></description>
			<content:encoded><![CDATA[<p>I was really rather surprised at how simple this actually was.</p>
<p>From the Cyanogen(mod) website:</p>
<blockquote><p>The ZTE Blade (aka Venus or  Orange San Francisco) is a touchscreen Android smartphone manufactured  by ZTE for the European market. The device has various versions,  differing in aspects such as screen type (AMOLED/TFT), camera (3.2MP or  5.0MP), and RAM (256MB or 512MB), although it is now clear that all  European models have 512MB, but the Greek and older Hungarian versions  of the phone have been limited to 256MB by software. A custom update is  available on the internet to resize the partitions in order to get back  the 256MB that’s originally taken up by software.</p>
</blockquote>
<ol>
<li>Download the <a href="http://download.cyanogenmod.com/?type=stable&amp;device=blade" target="_blank">Stable Mod for ZTE Blade</a></li>
<li>Download &amp; install the <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Java SE JDK</a></li>
<li>Download &amp; install the latest <a href="http://wiki.cyanogenmod.com/index.php?title=Howto:_Install_the_Android_SDK" target="_blank">Android SDK Starter Tools</a> as documented on the Cyanogen(mod) wiki</li>
<li>I tried using Amon_Ra&#8217;s recovery method, but that didn&#8217;t work for me. So we will use the ClockworkMod Recovery tool.</li>
<li>Download the latest version of <a href="http://android.d3xt3r01.tk/cyanogen/blade/recovery/recovery-clockwork-3.0.1.4-blade.img" target="_blank">ClockworkMod Recovery</a></li>
<li>Download the <a href="http://support.zte.com.cn/support/uploads/Drivers/ZTE%20Android%20USB%20Driver%20for%20Microsoft%20PC_5.2066.1.7.exe.zip" target="_blank">ZTE Blade</a> drivers (Windows only)</li>
<li>Assuming that Android SDK is set up correctly, open a terminal and enter the following:<br />
# <em>adb reboot bootloader</em></li>
<li>The phone will reboot and a single green android should appear on the screen, and remain there</li>
<li>Open a terminal and enter the following:<br />
<em># fastboot flash recovery /path/to/recovery-clockwork-3.0.1.4-blade.img</em><br />
ClockworkMod will now be installed in the recovery sector of the device</li>
<li>Enter USB Mount mode in Clockword Mod by using the volume buttons to scroll through options, home to select, and back to go back.</li>
<li>Copy the CyanogenMod .zip file to the mounted SD card, and optionally, <a href="http://wiki.cyanogenmod.com/index.php?title=Latest_Version#Google_Apps" target="_blank">Google Apps </a>.zip for the device (I recommend this, it includes Anroid Market etc) &#8211; Leave USB Mount mode</li>
<li>Select the option to <strong>Wipe data/factory reset</strong>.</li>
<li>Then select the option to <strong>Wipe cache partition</strong>.</li>
<li>Select <strong>Install zip from sdcard</strong>.</li>
<li>Select <strong>Choose zip from sdcard</strong>.</li>
<li>Select the CyanogenMod update.zip.<br />
Optionally, repeat steps 14 &amp; 15 and then selecting the Google Apps .zip</li>
<li>Once the installation has finished, select +++++Go Back+++++ to get back to the main menu, and select the Reboot system now option. The ZTE Blade should now boot into CyanogenMod.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://millsie.net/android/installing-cyanogenmod-on-the-orange-san-francisco-zte-blade/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

