<?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: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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Coders Eye</title>
	
	<link>http://coderseye.com</link>
	<description>Programming is passion made real</description>
	<lastBuildDate>Mon, 26 Jul 2010 00:30:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CodersEye" /><feedburner:info uri="coderseye" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
		<title>Protected: BRSD Camp Placement</title>
		<link>http://coderseye.com/2010/brsd-camp-placement.html</link>
		<comments>http://coderseye.com/2010/brsd-camp-placement.html#comments</comments>
		<pubDate>Wed, 21 Jul 2010 19:05:21 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://coderseye.kroozio.com/?p=285</guid>
		<description><![CDATA[There is no excerpt because this is a protected post.]]></description>
			<content:encoded><![CDATA[<form action="http://coderseye.com/wp-pass.php" method="post">
<p>This post is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-285">Password:<br />
<input name="post_password" id="pwbox-285" type="password" size="20" /></label><br />
<input type="submit" name="Submit" value="Submit" /></p></form>

<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2010/brsd-camp-placement.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving to eVoice from Google Voice</title>
		<link>http://coderseye.com/2010/moving-to-evoice-from-google-voice.html</link>
		<comments>http://coderseye.com/2010/moving-to-evoice-from-google-voice.html#comments</comments>
		<pubDate>Fri, 16 Jul 2010 17:28:14 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[hosted pbx]]></category>
		<category><![CDATA[pbx]]></category>
		<category><![CDATA[virtual pbx]]></category>
		<category><![CDATA[virtual phone number]]></category>

		<guid isPermaLink="false">http://coderseye.kroozio.com/?p=279</guid>
		<description><![CDATA[I was a GrandCentral early adopter. I scrambled to get an invite code, and got in on the beta. Then Google bought them and converted the service to &#8220;Google Voice.&#8221; I&#8217;ve used the number for years now as my main business number. It simply forwards the calls to the numbers I&#8217;ve set up. (Cue impending [...]]]></description>
			<content:encoded><![CDATA[<p>I was a GrandCentral early adopter.  I scrambled to get an invite code, and got in on the beta.  Then Google bought them and converted the service to &#8220;Google Voice.&#8221;  I&#8217;ve used the number for years now as my main business number.  It simply forwards the calls to the numbers I&#8217;ve set up.</p>
<p>(Cue impending doom music)</p>
<p>I got a call yesterday from someone answering a job application I&#8217;d posted.  He told me he&#8217;s been trying to call all week, but that he kept intermittently getting &#8220;this number is not in service.&#8221;  He said out of 8 calls, he connected twice.  Ouch!</p>
<h2>So, Google Voice is OUT</h2>
<p>Searching for a Virtual PBX isn&#8217;t easy.  I spent hours looking at review sites (which mostly have outdated information), and finally bit the bullet and signed up with <a onmouseover="window.status='http://www.evoice.com';return true;" onmouseout="window.status=' ';return true;" href="http://www.tkqlhce.com/br101ox52x4KPLMQPUPKMLSOOQNQ" target="_top">eVoice</a><img src="http://www.tqlkg.com/aq115drvjpn8D9AEDID8A9GCCEBE" border="0" alt=" Moving to eVoice from Google Voice" width="1" height="1" title="Moving to eVoice from Google Voice" /></p>
<p>So far, I am extremely impressed.  Let me tell you why I chose eVoice, and why I am more impressed than I thought I&#8217;d be.  I actually think they are underselling their service &#8230;</p>
<p><span id="more-279"></span></p>
<h2>Why I chose eVoice over RingCentral and Google Voice</h2>
<p>First off, I had to through Google Voice out of the running right away due to the inability to reliably answer the phone.  Also because their system always requires me to hit &#8220;1&#8243; to answer the call.  I hate that, because I am usually on the cell phone, and it is a hassle to unlock the dialpad to hit &#8220;1&#8243;, so callers have often dropped before I can do it.</p>
<p>The base feature set of RingCentral and eVoice are very similar.  If I had an iPhone, I might have gone with <a href="http://www.kqzyfj.com/click-4015494-10500369" target="_top">RingCentral</a><img src="http://www.ftjcfx.com/image-4015494-10500369" width="1" height="1" border="0" title="Moving to eVoice from Google Voice" alt=" Moving to eVoice from Google Voice" /> because of the nice app to manage and access their voicemail.</p>
<p>There are tons of features in eVoice, the main ones for me are:</p>
<ul>
<li>Voicemail to text &#8211; this is the big one for me.  I hate voicemail because of the interruption.  But reading a transcription is so much faster and easier.  Here&#8217;s where eVoice actually undersells themselves.  They will not only send the transcription to (multiple) email addresses for you, they&#8217;ll also send it via text message!  That&#8217;s the fastest, easiest way for me.  A winning feature all by itself.</li>
<li>Optional &#8220;auto receptionist&#8221;.  For now, I only have one extension, so it would be ridiculous to make people listen to a message and then hit &#8220;1&#8243;, the only extension, to contact me.  eVoice, unlike many Hosted PBX systems, allows me to just send the message along without the interruption.  But later, if I add more extensions I can enable the receptionist.  That&#8217;s user friendly, and bodes well for the service.</li>
<li><a onmouseover="window.status='http://www.evoice.com';return true;" onmouseout="window.status=' ';return true;" href="http://www.jdoqocy.com/t697uoxuowBGCDHGLGBDCJFFDCL" target="_top">6 Month Free Trial</a><img src="http://www.lduhtrp.net/l965qmqeki384598D8354B7754D" border="0" alt=" Moving to eVoice from Google Voice" width="1" height="1" title="Moving to eVoice from Google Voice" />.  Wow, that&#8217;s a nice free trial period.  If they don&#8217;t pan out, I am only out the cost of a new run of business cards.</li>
</ul>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/hosted+pbx' rel='tag' target='_blank'>hosted pbx</a>, <a class='technorati-link' href='http://technorati.com/tag/pbx' rel='tag' target='_blank'>pbx</a>, <a class='technorati-link' href='http://technorati.com/tag/virtual+pbx' rel='tag' target='_blank'>virtual pbx</a>, <a class='technorati-link' href='http://technorati.com/tag/virtual+phone+number' rel='tag' target='_blank'>virtual phone number</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2010/moving-to-evoice-from-google-voice.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howto Move a WordPress 3.0 Site</title>
		<link>http://coderseye.com/2010/howto-move-a-wordpress-3-0-site.html</link>
		<comments>http://coderseye.com/2010/howto-move-a-wordpress-3-0-site.html#comments</comments>
		<pubDate>Wed, 14 Jul 2010 20:18:02 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[wpmu]]></category>

		<guid isPermaLink="false">http://coderseye.kroozio.com/?p=277</guid>
		<description><![CDATA[When developing this site, and it&#8217;s sister sites ecomsmith.com &#38; gosatchmo.com, I decided to use the new multi-site feature of WordPress 3.0.  Everything went great during development. What I did was to develop using a local address of &#8220;blogs.dev&#8221; as my base site, and then add all the other sites using the WPMU features.  So [...]]]></description>
			<content:encoded><![CDATA[<p>When developing this site, and it&#8217;s sister sites <a href="http://ecomsmith.com">ecomsmith.com</a> &amp; <a href="http://gosatchmo.com">gosatchmo.com</a>, I decided to use the new multi-site feature of WordPress 3.0.  Everything went great during development.</p>
<p>What I did was to develop using a local address of &#8220;blogs.dev&#8221; as my base site, and then add all the other sites using the WPMU features.  So I had coderseye.blogs.dev and ecomsmith.blogs.dev as well.</p>
<p>All was great, until it came time to make the sites live.  I did what I used to do.  I dumped all my data from the database, opened it in an editor, and replaced &#8220;blogs.dev&#8221; with the live domain name that is acting as the master control for this site.</p>
<p>It worked!  Sort of.  It showed my blogs, but I couldn&#8217;t login.  WordPress kept complaining about needing cookies enabled.  But &#8230; but &#8230; they <em>are</em> enabled!</p>
<p>Fixing it took a bit of trial and error.<span id="more-277"></span>The critical change I needed to make was to edit my wp-config.php file and change the line:</p>
<p><code>define( 'DOMAIN_CURRENT_SITE', 'blogs.dev' );</code></p>
<p>All I had to do was to update it with the new, live, master control site domain name.  That way WP knows which domain to set the cookie for.</p>
<p>It works, and it only cost me about 45 minutes of panicked searching, glad to share.</p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Wordpress' rel='tag' target='_blank'>Wordpress</a>, <a class='technorati-link' href='http://technorati.com/tag/wpmu' rel='tag' target='_blank'>wpmu</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2010/howto-move-a-wordpress-3-0-site.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bluehost Hacked this week</title>
		<link>http://coderseye.com/2010/bluehost-hacked-this-week.html</link>
		<comments>http://coderseye.com/2010/bluehost-hacked-this-week.html#comments</comments>
		<pubDate>Thu, 08 Jul 2010 23:28:58 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Alerts]]></category>

		<guid isPermaLink="false">http://coderseye.com/?p=244</guid>
		<description><![CDATA[One of my clients was hacked today. Unfortunately, they are hosted at BlueHost, which is cheap but doesn&#8217;t seem to pay a lot of attention to security. It turns out that many sites on Bluehost got hacked last week by someone installing malware which somehow involves &#8220;www.domainameat.cc&#8221;. It is easy enough to see if you [...]]]></description>
			<content:encoded><![CDATA[<p>One of my clients was hacked today. Unfortunately, they are hosted at BlueHost, which is cheap but doesn&#8217;t seem to pay a lot of attention to security.</p>
<p>It turns out that many sites on Bluehost got hacked last week by someone installing malware which somehow involves &#8220;www.domainameat.cc&#8221;.  It is easy enough to see if you are hacked.  FTP a PHP file from your site and look at it.  Does it start with &#8220;base64_decode&#8221; followed by a bunch of gobbledygook?  If so, yep, you are hacked.</p>
<p>Here&#8217;s what I did to fix it, it took about 10 minutes:</p>
<ul>
<li>Delete everything in the &#8220;public_html/.files&#8221; directory.  That&#8217;s a bunch of spam.</li>
<li>Delete every php file on the server</li>
<li>Upload all of them again, you do use version control, right?</li>
</ul>
<p>Alternatively, you could try using the script from <a href="http://blog.sucuri.net/2010/06/bluehost-ceo-blog-and-others-exploited-by-domainameat-cc.html">this site</a>, which explains what is going on.</p>
<p>If you have a business site and use <a href="http://ecomsmith.com/maintenance/">my support service</a>, I&#8217;d already be doing this for you.  You would already have backups, and you would have version control. This would just be a blip on your day, followed by an email from us explaining what we did to recover.</p>

<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2010/bluehost-hacked-this-week.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Modifying Widget Titles in WordPress</title>
		<link>http://coderseye.com/2010/modifying-widget-titles-in-wordpress.html</link>
		<comments>http://coderseye.com/2010/modifying-widget-titles-in-wordpress.html#comments</comments>
		<pubDate>Sat, 20 Feb 2010 06:34:30 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[functions]]></category>

		<guid isPermaLink="false">http://coderseye.com/?p=230</guid>
		<description><![CDATA[On a recent project, my client wanted graphical headers for the widgets on her WordPress blog. Unfortunately, widgets are not that easily themed. Nor can you do this in CSS. The internet was no help. Lots of people were suggesting using a &#8220;dyamic_widget_params&#8221; filter. Nope, that isn&#8217;t what I want. I don&#8217;t want to modify [...]]]></description>
			<content:encoded><![CDATA[<p>On a recent project, my client wanted graphical headers for the widgets on her WordPress blog.  Unfortunately, widgets are not that easily themed.  Nor can you do this in CSS.</p>
<p>The internet was no help.  Lots of people were suggesting using a &#8220;dyamic_widget_params&#8221; filter.  Nope, that isn&#8217;t what I want.  I don&#8217;t want to modify before and after the title, I want to actually change the title.</p>
<p>But, with some poking around, I figured it out.  It&#8217;s actually pretty easy.</p>
<p><span id="more-230"></span>The trick is to use the &#8216;widget_title&#8217; filter, and the &#8216;link_category&#8217; filter.  Both of these pass the title itself to your function.</p>
<p>Here&#8217;s my code, fix the path for your theme and put in the theme&#8217;s functions.php file:</p>
<pre><code>
/**
 * Show a graphic title if one matches
 */
function fancy_title($title) {
 $clean = strtolower(str_replace(' ', '_', $title));
 $fpath= '/wp-content/themes/YOUR-THEME/images/'.$clean.'.jpg';
 if (file_exists(getcwd() . $fpath)) {
   return "&lt;img src='$fpath' alt='$title' /&gt;";
 }
 return $title;
}

add_filter('widget_title', fancy_title);
add_filter('link_category', fancy_title);

</code></pre></p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/functions' rel='tag' target='_blank'>functions</a>, <a class='technorati-link' href='http://technorati.com/tag/Wordpress' rel='tag' target='_blank'>Wordpress</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2010/modifying-widget-titles-in-wordpress.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How To Run Sandboxed Django Sites in Production</title>
		<link>http://coderseye.com/2010/how-to-run-sandboxed-django-sites-in-production.html</link>
		<comments>http://coderseye.com/2010/how-to-run-sandboxed-django-sites-in-production.html#comments</comments>
		<pubDate>Wed, 13 Jan 2010 19:19:50 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[supervisord]]></category>
		<category><![CDATA[virtualenv]]></category>

		<guid isPermaLink="false">http://coderseye.com/?p=227</guid>
		<description><![CDATA[Recently, I moved all my sites from a dedicated server to a great VPS over at SliceHost. I took the opportunity of &#8220;the big move&#8221; to fix an ongoing problem I&#8217;d had, which was that all four of my Django sites were using the same libraries. Ouch! That meant that I couldn&#8217;t update any of [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I moved all my sites from a dedicated server to a great VPS over at <a href="http://slicehost.com">SliceHost</a>.  I took the opportunity of &#8220;the big move&#8221; to fix an ongoing problem I&#8217;d had, which was that all four of my Django sites were using the same libraries.</p>
<p>Ouch!  That meant that I couldn&#8217;t update any of my sites without updating all of them, or at least retesting all of them.</p>
<p>This article will explain how I sandboxed my Django sites, so that all of them have their own versions of the appropriate library, and how I have them all running on the new production server.</p>
<p><span id="more-227"></span><br />
<h2>The Tools</h2>
<ul>
<li><a href="http://www.lighttpd.net">Lighttpd</a> &#8211; I am convinced that Lighty is the easiest, fastest (or close enough not to matter), most reliable way to serve Django.  Whenever possible, I use it for my own sites and for clients.  I am <i>not</i> an Apache fan, I find it bloated, opaque, hard to debug and hard to configure.</li>
<li><a href="http://supervisord.org">Supervisor</a> &#8211; A fantastic, easily configured Daemon starter and monitor for Linux.  It doesn&#8217;t replace the normal /etc/init.d/ system on Linux, instead it supplements it with the ability to run certain things &#8211; in this case my Django servers &#8211; very easily.  It automatically restarts failed processes, monitors uptime, and is generally my favorite new find in sysadmin world.</li>
<li><a href="http://pypi.python.org/pypi/superlance/">Superlance</a> &#8211; A plugin for Supervisor that does HTTP web &#8220;pings&#8221;, emails on failure and restarts the failed process.</li>
<li><a href="http://pypi.python.org/pypi/virtualenv">Virtualenv</a> &#8211; The tool that does the actual creation of the sandboxes. Absolutely invaluable.</li>
</ul>
<h2>Setting up your VirtualEnvironments</h2>
<p>There are plenty of good tutorials about using virtualenv.  <a href="http://www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/">SaltyCrane</a> has a particularly good one with links to his sources.</p>
<p>I set it up pretty much as he describes, with the exception that any packages that I&#8217;m going to use from source (including the site itself) get put in a &#8220;src&#8221; directory at the root of the virtual environment.</p>
<p>I then symlink src/site-i-am-working-on to the root as well.  Makes it easier to get to work on the site, but keeps everything in the same logical places.</p>
<p>Lastly, I create a file called &#8220;production&#8221;, in the bin directory.  It is just a shell script that gives details about how to run this particular environment in production.  Here&#8217;s an example:</p>
<pre><code>
SLUG=invisible
PID_FILE=/var/venv/$SLUG/$SLUG.pid
HOST=127.0.0.1
PORT=16667
MANAGE_COMMAND="runfcgi host=$HOST port=$PORT pidfile=$PID_FILE daemonize=false maxchildren=10  maxspare=5 minspare=2 method=threaded outlog=/var/venv/$SLUG/logs/${SLUG}.stdout errlog=/var/venv/$SLUG/logs/${SLUG}.stderr"
</code></pre>
<p>This shell script is going to be used by a convenient little script named &#8220;start_venv.sh&#8221; to make the fastcgi process start inside its virtual environment.  That file is included in my example <a href="/files/supervisor.tgz">supervisor.tgz</a> archive.<br />
<code>
<pre>
#! /bin/sh
set -e

if [ -z $1 ]
then
  echo "USAGE: start_venv.sh venv [workdir]"
  exit 2
fi

VENV=/var/venv/$1

if [ -z $2 ]
then
  STARTDIR=$VENV/$1
else
  STARTDIR=$VENV/$2
fi

if [ ! -f $VENV/bin/production ]
then
  echo "Could not find $VENV/bin/production"
  exit 2
fi

source $VENV/bin/activate
cd $STARTDIR
source $VENV/bin/production
python manage.py $MANAGE_COMMAND
</pre>
<p></code></p>
<p>You&#8217;ll have to adjust a path or two to your preference.  I put everything in /var/venv/[project], and I almost always arrange things so that the project itself is named the same, at the root of the virtual environment.  For example, &#8220;invisible castle&#8221; is at /var/venv/invisible/invisible.  That way, I can start the app with a simple &#8220;start_venv.sh invisible&#8221;</p>
<h2>Setting up Supervisor</h2>
<p>A simple &#8220;pip install superlance&#8221; should do the trick.  It will install both Supervisor and the Superlance plugin.</p>
<p>I&#8217;m including my init script for supervisor in my example <a href="/files/supervisor.tgz">supervisor.tgz</a> archive.  It is Debian specific, modify to your needs on a RedHat system.</p>
<p>Configuring Supervisor to start and monitor your sites is remarkably simple and short.  Here are the key lines from my supervisord.conf file:</p>
<pre>
[program:invisible]
command=/usr/bin/pidproxy /var/venv/invisible/invisible.pid /var/venv/start_venv.sh invisible
autostart=true
autorestart=true
startsecs=10

[eventlistener:invisible_httpok]
command=python -u /usr/bin/httpok -p invisible -m myaddress@example.com http://invisiblecastle.com/statusping/
events=TICK_60
</pre>
<p>The first starts invisible castle, the second runs an HTTP check every 60 seconds, emailing me and restarting if it didn&#8217;t work.</p>
<p>For the &#8220;statusping&#8221;, I just use the simplest thing possible, a &#8220;direct to template&#8221; entry in my urls.<br />
<code>
<pre>
urlpatterns += patterns('django.views.generic.simple',
 (r'^statusping/$', 'direct_to_template', {'template': 'statusping.html'})
</pre>
<p></code></p>
<p>My &#8220;statusping.html&#8221; file simply contains the word &#8220;OK&#8221;, it doesn&#8217;t extend any base templates, it just says &ldquo;OK&rdquo; when hit.  Easy, low resource use.</p>
<p>After supervisor is set up, you can control it by simply typing &#8220;supervisorctl&#8221;, which will show you a list of all monitored processes and their uptime.  Start, stop or restart by typing for example &#8220;restart invisible&#8221;, you get the idea.  It could hardly be easier, and you can make supervisorctl available to non-root users, which is very nice.</p>
<h2>Setting up Lighttpd</h2>
<p>Here&#8217;s an example section from my lighttpd.conf file:</p>
<p><code>
<pre>
fastcgi.server = (
  "/invisible.fcgi" =&gt;
  ((
      "check-local" =&gt; "disable",
      "host" =&gt; "127.0.0.1",
      "port" =&gt; 16667,
      "min-proces" =&gt; 4,
      "max-load-per-proc" =&gt; 3,
  )),
  # more .fcgi definitions here
)

# redirect www hits
$HTTP["host"] =~ "www\.invisiblecastle\.com(.*)" {
	url.redirect = ( "^/(.*)" =&gt; "http://invisiblecastle.com/$1" )
}

$HTTP["host"] == "invisiblecastle.com" {
    alias.url = (
       "/media/" =&gt; "/var/venv/invisible/lib/src/django/contrib/admin/media/",
       "/static/" =&gt; "/var/venv/invisible/lib/src/invisible/static/",
    )

    url.rewrite-once = (
        "^(/media.*)$" =&gt; "$1",
        "^(/static.*)$" =&gt; "$1",
        "^/favicon\.ico$" =&gt; "/static/favicon.ico",
        "^(/.*)$" =&gt; "/invisible.fcgi$1",
    )

    server.errorlog = "/var/venv/invisible/logs/invisible.error.log"
    accesslog.filename = "/var/venv/invisible/logs/invisible.access.log"
}
</pre>
<p></code></p>

<!-- start wp-tags-to-technorati 1.02 -->

<p class='technorati-tags'>Technorati Tags: <a class='technorati-link' href='http://technorati.com/tag/Django' rel='tag' target='_blank'>Django</a>, <a class='technorati-link' href='http://technorati.com/tag/Lighttpd' rel='tag' target='_blank'>Lighttpd</a>, <a class='technorati-link' href='http://technorati.com/tag/supervisord' rel='tag' target='_blank'>supervisord</a>, <a class='technorati-link' href='http://technorati.com/tag/virtualenv' rel='tag' target='_blank'>virtualenv</a></p>

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2010/how-to-run-sandboxed-django-sites-in-production.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Running WordPress on Lighttpd</title>
		<link>http://coderseye.com/2009/running-wordpress-on-lighttpd.html</link>
		<comments>http://coderseye.com/2009/running-wordpress-on-lighttpd.html#comments</comments>
		<pubDate>Wed, 30 Dec 2009 02:12:46 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Site]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://coderseye.com/?p=225</guid>
		<description><![CDATA[How to install Lighttpd/Wordpress on your Debian server.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve finally moved the site to a new server.  My new host is a 1 gig slice at <a href="http://slicehost.com">SliceHost</a>, which will be hosting all my sites (yes, I really need a 1 gig slice) from now on.</p>
<p>One of my big goals was to completely drop Apache.  I just don&#8217;t like that server.  Ugly to configure, huge, slow &amp; bloated.  I much prefer <a href="http://www.lighttpd.net">Lighttpd</a> for my <a href="http://djangoproject.com">Django</a> &amp; <a href="http://satchmoproject.com">Satchmo</a> projects, but I hadn&#8217;t ever tried using it for PHP.  Today I bit the bullet and started the transition.</p>
<p><span id="more-225"></span>A few details before I get into how I&#8217;ve got the blog configured.  My VPS &#8220;Slice&#8221; is running Debian.  This is hands-down, my favorite Linux distribution.  I can&#8217;t stand RedHat VPS system, to be honest.  RPM hell, upgrade hell, cpanel.  Ugh.</p>
<p>Debian is so much more simple and clean.  No RPM hell, easy upgrades.  Do yourself a favor and give it a try.</p>
<p>Getting the site up and running on Debian was almost dead simple.  Just one tricky bit at the end.</p>
<p>First, I installed lighttpd, php5 (cgi) and mysql with &#8220;aptitude install lighttpd lighttpd-mod-magnet mysql-server&#8221;</p>
<p>Note: I installed a bunch of other php5 packages too, like php5-curl, php-pear, php5-mysql.  That&#8217;s going to be up to your needs.  Just run Aptitude and search for php5, cursor up and down with arrows and press &#8220;+&#8221; to tell it you want to install a package, press &#8216;g&#8217; to go ahead and install what you&#8217;ve just selected.</p>
<p>Now for the tricky bit.  Making WordPress work with Lighty.  You&#8217;ve already got mod_magnet installed.  Refer to <a href="http://sudhaker.com/web-development/wordpress/wordpress-permalinks-lighttpd.html">this blog entry</a> for help doing that.</p>
<p>Bingo bango, WordPress is moved over cleanly from my old host.  No annoying old Apache, it is fast, and has nearly no overhead.</p>
<p>[tags]lighttpd,wordpress,debian[/tags]</p>

<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2009/running-wordpress-on-lighttpd.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speaking at DjangoCon 2009</title>
		<link>http://coderseye.com/2009/speaking-at-djangocon-2009.html</link>
		<comments>http://coderseye.com/2009/speaking-at-djangocon-2009.html#comments</comments>
		<pubDate>Mon, 24 Aug 2009 16:26:57 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Planning]]></category>

		<guid isPermaLink="false">http://coderseye.com/?p=223</guid>
		<description><![CDATA[I&#8217;m going to be presenting at DjangoCon 2009!  The 45 minute presentation will be on the advanced use of Django signals to promote reuse. I&#8217;ll be using Satchmo as an example of how to create very useful custom signals to allow for some quite complex customizations. If you want a copy of the presentation, please [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to be presenting at DjangoCon 2009!  The 45 minute presentation will be on the advanced use of Django signals to promote reuse.</p>
<p>I&#8217;ll be using Satchmo as an example of how to create very useful custom signals to allow for some quite complex customizations.  If you want a copy of the presentation, please sign up below and I&#8217;ll send it after the convention.</p>

<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2009/speaking-at-djangocon-2009.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django, the web framework for ponies with magical powers</title>
		<link>http://coderseye.com/2009/django-pony-meme.html</link>
		<comments>http://coderseye.com/2009/django-pony-meme.html#comments</comments>
		<pubDate>Tue, 28 Jul 2009 15:34:52 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://coderseye.com/?p=221</guid>
		<description><![CDATA[Last year at DjangoCon, one of the most interesting sessions was the one where people presented their &#8220;pony requests&#8221;, and made a case for their pet feature to be built into Django. Shortly after that, the first logos for the Django Pony began to appear, followed by the inevitable (in retrospect) djangopony.com. This morning, I [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coderseye.com/images/djangopony.gif" alt="Django Pony" title="Django, the web framework for ponies with magical powers" /></p>
<p>Last year at <a href="http://djangocon.com">DjangoCon</a>, one of the most interesting sessions was the one where people presented their &#8220;pony requests&#8221;, and made a case for their pet feature to be built into Django.</p>
<p>Shortly after that, the <a href="http://avalonstar.com/blog/2008/sep/9/web-framework-ponies/">first logos</a> for the Django Pony began to appear, followed by the inevitable (in retrospect) <a href="http://djangopony.com">djangopony.com</a>.</p>
<p>This morning, I discovered that NASA uses Django and even has a <a href="http://nebula.nasa.gov/services/framework">Django Pony</a> page.</p>
<p>Fly, little pony, spread your meme wide!</p>
<p>[tags]django pony, django, djangocon[/tags]</p>

<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2009/django-pony-meme.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Top 5 Most Used Web Applications</title>
		<link>http://coderseye.com/2009/my-top-5-most-used-web-applications.html</link>
		<comments>http://coderseye.com/2009/my-top-5-most-used-web-applications.html#comments</comments>
		<pubDate>Wed, 22 Jul 2009 16:50:25 +0000</pubDate>
		<dc:creator>Bruce Kroeze</dc:creator>
				<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://coderseye.com/2009/my-top-5-most-used-web-applications.html</guid>
		<description><![CDATA[In the past, I&#8217;ve written about several of the programs I use daily on my Mac. But as the web matures, I find that several of the &#8220;applications&#8221; which have become indispensable to me are web applications. I use every one of these on a daily basis. Top 5 most used Web Applications Gmail &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>In the past, I&#8217;ve written about several of the programs I use daily on my Mac. But as the web matures, I find that several of the &#8220;applications&#8221; which have become indispensable to me are web applications. I use every one of these on a daily basis.</p>
<p><span id="more-218"></span></p>
<h2>Top 5 most used Web Applications</h2>
<p><strong><a href="http://mail.google.com/">Gmail</a></strong> &#8211; I have about twenty email addresses, all forwarding to my main Gmail account. I use it for three main reasons.</p>
<ol>
<li><em>Synchronization</em>. The account is always in sync even when accessing it from different computers</li>
<li><em>Phone access</em>. It is built-in to my T-Mobile G1 (Googlephone) phone.</li>
<li><em>Spam</em>. I have had some of these addresses for almost twenty years. That adds up to a metric ton of spam. To be specific, I get about 3,200 spam messages a day, which works out to a little over two per minute. I used to run spam-filtering programs on my Mac, but Google is far far better at it. I get possibly one or two missed spams a day in my inbox. Amazing.</li>
</ol>
<p><strong><a href="https://www.freshbooks.com/?ref=63a3596533941-1">Freshbooks</a></strong> &#8211; I use Freshbooks to track time for clients, to provide trouble-ticket handling for them, and to generate invoices for hourly clients. It lets my employees log time to their assigned projects. It even has an OSX dashboard widget allowing me to punch-in/punch-out on projects as I work them. Simply beautiful, and extremely cheap, even free if you are just tracking a few projects.</p>
<p><strong><a href="http://www.assembla.com/?affiliate=bkroeze">Assembla</a></strong> &#8211; I use Assembla to manage version control, tickets, feature requests, and associated Wiki pages for my clients. They support Mercurial, SVN, and Git, which makes my life much easier. Not only that, but using them I have a dashboard showing the latest tickets from all clients, all in one place. Very cost-effective, much better than trying to &#8220;roll my own&#8221; on my own server.</p>
<p><strong><a href="http://calendar.google.com">Google Calendar</a></strong> &#8211; I love being able to share my calendars easily with friends. I have a &#8220;family/kids&#8221; calendar shared with my ex-wife where we plan out our visitation, holidays and the like. I share that (read-only) with my girlfriend, and I can also see her schedule. It works extremely well, especially since it is integrated with my phone. My only tip here is that you <strong>absolutely must only use one calendar</strong>. You cannot succeed if you use one calendar for this, another for that. One must rule them all.</p>
<p><strong><a href="http://everydaysystems.com/habitcal/">HabitCal</a></strong> &#8211; This is an odd one, it is a tool I use to track the development of habits. Using it, I can mark each day as a success, fail, or exempt for each of the habits I am developing. It is simple, but quite valuable to me.</p>
<p>[tags]webapps,reviews[/tags]</p>

<!-- start wp-tags-to-technorati 1.02 -->

<!-- end wp-tags-to-technorati -->
]]></content:encoded>
			<wfw:commentRss>http://coderseye.com/2009/my-top-5-most-used-web-applications.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
