<?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>Proven Corporation &#187; Free Software</title>
	<atom:link href="http://www.proven-corporation.com/category/free-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.proven-corporation.com</link>
	<description>Free Software in Thailand and Southeast Asia</description>
	<lastBuildDate>Wed, 01 Apr 2009 13:07:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>One-line shell script server for testing your AJAX and HTTP code</title>
		<link>http://www.proven-corporation.com/2009/04/01/one-line-shell-script-server-for-testing-your-ajax-and-http-code/</link>
		<comments>http://www.proven-corporation.com/2009/04/01/one-line-shell-script-server-for-testing-your-ajax-and-http-code/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 13:07:57 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[socat]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/?p=231</guid>
		<description><![CDATA[Here is how to make a very simple web server with a very simple shell script on a GNU or Unix system such as OS X.  I have found it to be ideal for quick tests and debugging sessions with AJAX code and tools like Python&#8217;s urllib2.
The idea is to run an infinite loop [...]]]></description>
			<content:encoded><![CDATA[<p>Here is how to make a very simple web server with a very simple shell script on a GNU or Unix system such as OS X.  I have found it to be ideal for quick tests and debugging sessions with AJAX code and tools like Python&#8217;s <code>urllib2</code>.</p>
<p>The idea is to run an infinite loop which calls <a href="http://www.dest-unreach.org/socat/">socat</a> to return static files to the browser.</p>
<p><span id="more-231"></span></p>
<h3>Preparation</h3>
<ol>
<li>Install Bash and socat on your OS.  Your operating system probably has packages named <code>bash</code> and <code>socat</code>.</li>
<li>Create a new directory, for exmple <code>responses/</code> to hold your static response files.
<li>Place one or more files in this directory.  The format should be:
<ol>
<li>HTTP response code</li>
<li>HTTP Headers</li>
<li>Blank line</li>
</ol>
</li>
</ol>
<ol>
<li>Content such as HTML, Javascript, or whatever you need<br />
<h3>Example response file.</h3>
<p>Here is what I put in my <code>responses/simple-html.txt</code> file.  I got it from a from a tcpdump capture, but you could use Firebug or HTTPFox.</p>
<pre class="highlight"><code>
HTTP/1.1 200 OK
Connection: close
Date: Tue, 31 Mar 2009 15:13:29 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=Z3X0u4H5iDieUuZL3KbAuaS7; path=/; HttpOnly
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: text/html; charset=utf-8

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;Example Page&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;Isn't this cool?&lt;/h1&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre>
</p>
<h3>Running the server</h3>
<p>Running the server is pretty straightforward.  It&#8217;s mostly a one-liner (split here for space), but you could format it and put it in a script.  The idea is for the server to randomly choose a file from the directory.  If there is only one, then you get a consistent response (and you can edit that file between trials of course).  If there are more, then you can see how your app responds to different data.</p>
<pre class="highlight" style="padding: 0 0.5em;"><code>while true; do socat TCP4-LISTEN:8080,reuseaddr \
  SYSTEM:'cat `/bin/ls -1 responses/* | sort --random-sort | head -1`'; done</code></pre>
<p>Now, going to <a href="http://localhost:8080/">http://localhost:8080/</a> will show that page!</p>
<h3>Storyboarded response sequences</h3>
<p>You can extend this script to return a series of HTTP responses (with HTML, JSON, whatever) in them, like a storyboard.  First, give the files names such that they are in the correct order when alphabetized (e.g. 01-first, 02-second, etc.).  Then use a script like this:</p>
<pre class="highlight" style="padding: 0 0.5em;"><code>while true; do for f in responses/*; do socat TCP4-LISTEN:8080,reuseaddr \
  SYSTEM:"cat $f"; done; done</code></pre>
<p>Here, every time you query the server, it will return the next response in the queue.  When the queue is empty, it will start over; and you can make changes to the storyboard between restarts.</p>
<h3>Concluding Notes</h3>
<ul>
<li>You can control the HTTP and HTML!  So you can test 404s and 301s and anything else!</li>
</ol>
</li>
<li>This works for any URL you try since it completely ignores the client request and headers</li>
<li>To make the &#8220;server&#8221; easier to kill, before the first &#8220;done&#8221; keyword, add: <code>[ $? -ne 0 ] &#38;&#38; break 2;</code></li>
<li>You could substitute Netcat for socat if you don&#8217;t have access to the latter</li>
</ul>
<ul>
<li>I haven&#8217;t tested this on OS, but I would love to hear from people about successes or bugs with the script.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2009/04/01/one-line-shell-script-server-for-testing-your-ajax-and-http-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Risk-free introduction to CouchDB on Amazon EC2</title>
		<link>http://www.proven-corporation.com/2009/03/19/risk-free-introduction-to-couchdb-on-amazon-ec2/</link>
		<comments>http://www.proven-corporation.com/2009/03/19/risk-free-introduction-to-couchdb-on-amazon-ec2/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 06:57:45 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/?p=226</guid>
		<description><![CDATA[I love using EC2 for experimenting with software, which has included CouchDB recently.  Slowly, I established a good procedure for running the Subversion HEAD on an EC2 Ubuntu 8.10 instance.  So, I went ahead and posted it to the project&#8217;s wiki.  If you have a spare $0.10 and want to take CouchDB [...]]]></description>
			<content:encoded><![CDATA[<p>I love using EC2 for experimenting with software, which has included CouchDB recently.  Slowly, I established a good procedure for running the Subversion HEAD on an EC2 Ubuntu 8.10 instance.  So, I went ahead and posted it to the project&#8217;s wiki.  If you have a spare $0.10 and want to take CouchDB for a spin without any hassle, check it out:</p>
<p><a href="http://wiki.apache.org/couchdb/Getting_started_with_Amazon_EC2">CouchDB: Getting started on Amazon EC2</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2009/03/19/risk-free-introduction-to-couchdb-on-amazon-ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to run a quick throwaway Ubuntu EC2 instance</title>
		<link>http://www.proven-corporation.com/2009/03/04/how-to-run-a-quick-throwaway-ubuntu-ec2-instance/</link>
		<comments>http://www.proven-corporation.com/2009/03/04/how-to-run-a-quick-throwaway-ubuntu-ec2-instance/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 05:20:51 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[nx]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/?p=168</guid>
		<description><![CDATA[Time was, when you wanted to experiment or test something on Ubuntu, you needed a fresh install (best-case&#8212;a snapshotted virtual system).  Nowadays, I myself prefer the convenience and negligible cost of simply firing up an Alestic community machine images.  Once I&#8217;ve completed my work (perhaps pushing changes to a remote Git repository), I [...]]]></description>
			<content:encoded><![CDATA[<p>Time was, when you wanted to experiment or test something on Ubuntu, you needed a fresh install (best-case&mdash;a snapshotted virtual system).  Nowadays, I myself prefer the convenience and negligible cost of simply firing up an <a href="http://alestic.com/">Alestic community machine images</a>.  Once I&#8217;ve completed my work (perhaps pushing changes to a remote Git repository), I simply terminate the instance and call it a day.</p>
<p>Here is a comprehensive procedure detailing exactly the steps required to get an Ubuntu desktop running in a few minutes&#8217; time.  The tools used are <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609">Elasticfox</a> to manage EC2, <a href="http://www.nomachine.com/">NoMachine</a>&#8217;s NX client for remote login, and command-line SSH for odds and ends.</p>
<p><span id="more-168"></span></p>
<h3>Contents</h3>
<ol>
<li><a href="#objectives">Objectives</a></li>
<li><a href="#prep">Preparation (One-Time Only)</a>
<ol>
<li><a href="#nx">Install the NX client</a></li>
<li><a href="#nxclient">Set up NX client for EC2</a></li>
<li><a href="#elasticfox">Install Elasticfox</a></li>
<li><a href="#account">Input account credentials in Elasticfox</a></li>
<li><a href="#ssh">Set up an SSH keypair</a></li>
<li><a href="#firewall">Set up firewall rules</a></li>
</ol>
</li>
<li><a href="#boot">Booting Ubuntu Intrepid</a></li>
<li><a href="#initialization">Initial Setup</a></li>
<li><a href="#connect">Connect to the instance desktop</a></li>
<li><a href="#reminders">Reminders</a></li>
</ol>
<p><a name="objectives"></a></p>
<h3>Objectives</h3>
<p></p>
<ul class="simple"></p>
<li>Be able to start up any number of Ubuntu 8.10 Intrepid desktop at a moment&#8217;s notice.</li>
<p>
</ul>
</p>
<p><a name="prep"></a></p>
<h3>Preparation (One-Time Only)</h3>
</p>
<p>These steps will get you up and running with Amazon&#8217;s AWS infrastructure.  Do this <em>only once</em>, during your first run through this procedure.  Afterwards, <a href="#boot">skip to the next section</a>.</p>
<p><a name="nx"></a></p>
<h4>Install the NX client</h4>
</p>
<p>Install the NX client (which is similar to the rdesktop VNC client) onto your local system:</p>
<ol>
<li>Go to the <a href="http://www.nomachine.com/select-package.php?os=linux&#38;id=1">NX download page</a>.
<li>Click on the link for the architecture and package type of your local system</li>
<li>Install the client and node packages (server is not needed)</li>
</ol>
<p><a name="nxclient"></a></p>
<h4>Set up NX client for EC2</h4>
</p>
<p>Set up an NX session which is configured to connect to EC2 and establish a GNOME session.</p>
<ol>
<li>On your local GNOME system, Applications -> Internet -> NX Client for Linux -> NX Connection Wizard</li>
<li>Name the session (e.g. EC2)</li>
<li>Enter any random hostname (it will be changed later) for the host field and hit Next</li>
<li>In the dropdowns, select a Unix system, GNOME desktop and hit Next</li>
<li>Disable the &#8220;Create shortcut&#8221; option and click finish</li>
</ol>
<p><a name="elasticfox"></a></p>
<h4>Install Elasticfox</h4>
</p>
<ol>
<li>Run Firefox and go to the <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609">Elasticfox</a> page</li>
<li>Click the &#8220;Download&#8221; button and install the extension</li>
<li>Restart Firefox</li>
</ol>
<p><a name="account"></a></p>
<h4>Input account credentials in Elasticfox</h4>
</p>
<ol>
<li>First, get your AWS account credentials:
<ol>
<li>Go to the <a href="http://aws.amazon.com">AWS site</a></li>
<li>Mouse over &#8220;Your account&#8221; and click on &#8220;Access Identifiers&#8221;</li>
<li>(Possibly sign in to Amazon)</li>
<li>The access key is displayed; and you can click on the &#8220;Show&#8221; link to view your secret key</li>
</ol>
</li>
<li>Back in Elasticfox, click the &#8220;Credentials&#8221; button at the top</li>
<li>Specify an account name (e.g. &#8220;Me&#8221; or &#8220;Business&#8221; or whatever)</li>
<li>Copy and paste the access key and secret key into the form and click the &#8220;Add&#8221; button</li>
</ol>
<p><a name="ssh"></a></p>
<h4>Set up an SSH keypair</h4>
</p>
<ol>
<li>In Elasticfox, click the &#8220;KeyPairs&#8221; tab</li>
<li>Click the green &#8220;Create&#8221; button</li>
<li>Specify a name for the pair (e.g. &#8220;EC2&#8221;) and hit OK</li>
<li>A file download will initiate (e.g. named &#8220;id-EC2&#8221;).  Save the file in ~/.ssh/</li>
<li>Edit (or create) the file ~/.ssh/config</li>
<li>Add the line:
<pre class="highlight">IdentityFile ~/.ssh/id-EC2</pre>
</li>
</ol>
<p><a name="firewall"></a></p>
<h4>Set up firewall rules</h4>
</p>
<ol>
<li>In Elasticfox, click the &#8220;Security Groups&#8221; tab</li>
<li>Click green &#8221;+&#8221; button to add a group</li>
<li>Set a group name and description (both are required)</li>
<li>Select &#8220;I will authorize protocols for this group as needed&#8221; and hit &#8220;Create Group&#8221;</li>
<li>An &#8220;Add New Permission&#8221; window will pop up automatically</li>
<li>Select &#8220;SSH&#8221; for the protocol</li>
<li>Select &#8220;Network&#8221; and set the value to 0.0.0.0/0 and click &#8220;Add&#8221;</li>
<li>Allow ICMP ping
<ol>
<li>Select the new group and click the green check button to add another rule</li>
<li>Protocol Details = &#8220;Other&#8221;</li>
<li>Protocol = ICMP</li>
<li>ICMP type = 8</li>
<li>ICMP Code = 0</li>
<li>Select &#8220;Network&#8221; and set it to 0.0.0.0/0 and click &#8220;Add&#8221;</li>
</ol>
</li>
<li><em>For any other TCP port you may need</em>
<ol>
<li>Select the new group and click the green check button to add another rule</li>
<li>Protocol Details = &#8220;Other&#8221;</li>
<li>Protocol = TCP/IP</li>
<li>Port range = (lower port number) to (higher port number)&mdash;or enter the same port twice to have no range</li>
<li>Select &#8220;Network&#8221; and set it to 0.0.0.0/0 and click &#8220;Add&#8221;</li>
</ol>
</li>
</ol>
<p><a name="boot"></a></p>
<h3>Booting Ubuntu Intrepid</h3>
</p>
<p>This step is where you actually boot Ubuntu as an Amazon instance.</p>
<ol>
<li>In Elasticfox, go to &#8220;AMIs and Instances&#8221; tab</li>
<li>Click the blue &#8220;refresh&#8221; button and wait for it to load</li>
<li>Enter the Alestic Ubuntu Intrepid image id:
<ul>
<li>For 32-bit: ami-7dfd1a14</li>
<li>For 64-bit: ami-bdfe19d4</li>
</ul>
</li>
<li>Select the AMI and click the green power button to launch</li>
<li>Select the instance type.  The cheapest types are as follows:
<ul>
<li>For 32-bit: m1.small</li>
<li>For 64-bit: m1.large</li>
</ul>
</li>
<li>Select or confirm the correct key pair (e.g. &#8220;EC2&#8221;)</li>
<li>Click the right/left arrow buttons to have your desired firewall group as the only one in the right side</li>
<li>Click Launch</li>
<li>Click the blue refresh button under &#8220;Your Instances&#8221; until the instance is in a green running state</li>
</ol>
<p><a name="initialization"></a></p>
<h3>Initial Setup</h3>
</p>
<ol>
<li>Once the instance is running, right click the it and select &#8220;Copy public DNS name to clipboard&#8221;</li>
<li>In a terminal, type &#8220;ssh root@&#8221;, and then paste the DNS name, hit enter, and type yes to accept the server&#8217;s key.  Login should happen automatically using the keypair</li>
<li>Run:
<pre class="highlight">apt-get update &#38;&#38; apt-get -y upgrade</pre>
</li>
<li>Run
<pre class="highlight">user-setup</pre>
<p> Enter a username and password (I use simple ones since the instance will be terminated shortly) and take the default to whatever other prompts come up</li>
</ol>
<p><a name="connect"></a></p>
<h3>Connect to the instance desktop</h3>
</p>
<ol>
<li>In your GNOME, Applications -> Internet -> NX Client for Linux -> NX Client for Linux</li>
<li>Select the session (e.g. &#8220;EC2&#8221;) and click the &#8220;Configure&#8221; button</li>
<li>Delete the old hostname and paste in the new instance&#8217;s public DNS name</li>
<li>Possibly set the display size to something manageable like 1024&#215;768, otherwise it will run maximized</li>
<li>Click Save, then click OK</li>
<li>Enter the username and password for the instance&#8217;s user created in the previous step</li>
<li>Click Login.  NX will SSH in and the remote GNOME desktop will come up shortly.</li>
<li>Enjoy!</li>
</ol>
<p><a name="reminders"></a></p>
<h3>Reminders</h3>
</p>
<p>Remember to terminate the instance in Elasticfox when you are finished.  Since termination will permanently delete all filesystem data, make sure you copy any important work off the system before terminating.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2009/03/04/how-to-run-a-quick-throwaway-ubuntu-ec2-instance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>App Engine Console 1.0beta3 Released</title>
		<link>http://www.proven-corporation.com/2009/01/23/app-engine-console-10beta3-released/</link>
		<comments>http://www.proven-corporation.com/2009/01/23/app-engine-console-10beta3-released/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 07:55:51 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/?p=152</guid>
		<description><![CDATA[I am pleased to announce the release of App Engine Console version 1.0beta3.  Please see http://con.appspot.com/ for demos, documentation, and downloads.
App Engine Console is an interactive Python session running in the server, which you use from a web browser.  Designed to be embedded within App Engine projects, the console assists developers with testing [...]]]></description>
			<content:encoded><![CDATA[<p>I am pleased to announce the release of <a href="http://con.appspot.com/">App Engine Console</a> version 1.0beta3.  Please see http://con.appspot.com/ for demos, documentation, and downloads.</p>
<p>App Engine Console is an interactive Python session running in the server, which you use from a web browser.  Designed to be embedded within App Engine projects, the console assists developers with testing and debugging their code and data in both development and production settings.</p>
<p>New changes to App Engine Console:</p>
<ul></p>
<li>Support the SDK version 1.1.8</li>
<p></p>
<li>Full support for Firefox, Chrome, Safari, and Internet Explorer browsers</li>
<p></p>
<li>Several bug fixes and unit tests</li>
<p>
</ul>
</p>
<p>Thanks very much to everybody who has emailed me with bug reports, comments, and other feedback.  Future plans for App Engine Console include persistent sessions, simultaneous sessions (i.e. &#8220;copiloting&#8221;), and autocompletion; and I am eager to hear ideas from other App Engine developers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2009/01/23/app-engine-console-10beta3-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Software: Tomboy Wordcount Plugin</title>
		<link>http://www.proven-corporation.com/2008/07/26/new-software-tomboy-wordcount-plugin/</link>
		<comments>http://www.proven-corporation.com/2008/07/26/new-software-tomboy-wordcount-plugin/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 15:57:34 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[tomboy]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/?p=116</guid>
		<description><![CDATA[We have a new addition to the software section: Tomboy-Wordcount.
This is a plugin for the excellent Tomboy note taking application.  This plugin allows you to quickly determine the number of lines, words, and characters in your note, much like the Unix wc command.  Like Tomboy, this plugin is written in C# and runs [...]]]></description>
			<content:encoded><![CDATA[<p>We have a new addition to the software section: <a href="/software/tomboy-wordcount/">Tomboy-Wordcount</a>.</p>
<p>This is a plugin for the excellent <a href="http://www.gnome.org/projects/tomboy/">Tomboy</a> note taking application.  This plugin allows you to quickly determine the number of lines, words, and characters in your note, much like the Unix <tt>wc</tt> command.  Like Tomboy, this plugin is written in C# and runs on Mono.</p>
<p>
<h3>Screenshot</h3>
<p>
<img src="/wp-content/uploads/2008/07/wordcount-ss.png" alt="Tomboy-Wordcount screenshot" title="Tomboy-Wordcount screenshot" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2008/07/26/new-software-tomboy-wordcount-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sphinx Templates</title>
		<link>http://www.proven-corporation.com/2008/03/27/sphinx-templates/</link>
		<comments>http://www.proven-corporation.com/2008/03/27/sphinx-templates/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 06:26:47 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/2008/03/27/sphinx-templates/</guid>
		<description><![CDATA[This document explains HTML templating with the Sphinx documentation system.  Sphinx is a tool for converting restructured text documentation into presentation formats like HTML or LaTeX.
Sphinx is used for Python documentation (compare old vs. new), but it is great for for any project in any language.  Integrated wikis (like Trac) are nice; but [...]]]></description>
			<content:encoded><![CDATA[<p>This document explains HTML templating with the <a href="http://sphinx.pocoo.org/index.html">Sphinx</a> documentation system.  Sphinx is a tool for converting restructured text documentation into presentation formats like HTML or LaTeX.</p>
<p>Sphinx is used for Python documentation (compare <a href="http://docs.python.org/">old</a> vs. <a href="http://docs.python.org/dev/">new</a>), but it is great for for any project in any language.  Integrated wikis (like Trac) are nice; but I prefer to keep the documentation together with the source code.  Sphinx is perfect for that.  It also looks like a million bucks.</p>
<p>This document was tested on Fedora 8; however it is likely to work on all platforms that Python supports.  Please <a href="/contact/">contact me</a> if you have questions or comments.</p>
<p><span id="more-83"></span></p>
<h3>Getting Started</h3>
<p>First, see the <a href="http://sphinx.pocoo.org/contents.html">Sphinx documentation</a> and get familiar with installing it (<tt>easy_install</tt>), initializing a project (<tt>sphinx-quickstart</tt>), and building your standalone HTML docs (<tt>make html</tt>).</p>
<p>Notice how (as of right now), the <a href="http://sphinx.pocoo.org/templating.html">templating documentation</a> is suspiciously missing?  That is what this document covers.  I spoke with Georg Brandi briefly over email and he said that the document is forthcoming.  Therefore I will try to make this page here have a how-to style so that it will hopefully complement the official Sphinx docs when they come out.</p>
<h3>The Basics</h3>
<p>First, read up on the Django-like <a href="http://jinja.pocoo.org/">Jinja templating system</a>, to get a basic feel for how things work.  Just scan through it because you can learn more quickly  by experimenting with your own templates.</p>
<p>Your Sphinx templates go in a special subdirectory of your documentation source.  By default, this is <tt>.templates</tt>, so we will use that.  (It is set in the <tt>templates_path</tt> directory in <tt>conf.py</tt>.)  Therefore, all of your template files will go in <tt>source/.templates</tt>.</p>
<p>Templating with Jinja is all about <em>extending</em> (or inheriting) previously-made templates.  So the procedure is to make your own template file and say &#8220;this file is mostly like such-and-such template, with these differences&#8230;.&#8221;</p>
<p>Sphinx uses the following built-in template files to generate HTML pages:</p>
<ul>
<li><tt>genindex.html</tt></li>
<li><tt>index.html</tt></li>
<li><tt>layout.html</tt> (This is the main one you want to modify)</li>
<li><tt>macros.html</tt></li>
<li><tt>modindex.html</tt></li>
<li><tt>page.html</tt></li>
<li><tt>search.html</tt></li>
</ul>
<h3>Making a Template</h3>
<p>To modify a template, choose a filename of the template you want to modify and create a file with the same name in <tt>.templates</tt>.  Go ahead!  Create <tt>.templates/layout.html</tt> with some simple content:</p>
<pre class="highlight">
{# Filename: .templates/layout.html #}
This is the new layout!
</pre>
<p>Now run <tt>make html</tt> to rebuild the HTML.  (<strong>Note</strong>, for Sphinx versions before 0.1.61945, you must run <tt>make clean</tt>.)   Your documentation is gone, but at least you successfully overrode the old layout template!</p>
<h3>Extending a Template</h3>
<p>We see that you can make a new <tt>layout.html</tt> to completely override the old <tt>layout.html</tt>, but how do you merely <em>modify one small part of it</em>?  To change just one part of the original Sphinx template, make a new template that <em>extend</em>s the old one, and then put a <em>block</em> in your new file.  (If you don&#8217;t know about <em>extend</em>ing and <em>block</em>s, see the <a href="http://jinja.pocoo.org/">Jinja</a> web page.)</p>
<p><strong>Warning:</strong> You may try to make a new <tt>layout.html</tt> that extends the old <tt>layout.html</tt>.  That is wrong:</p>
<pre class="highlight">
{# XXX This is wrong! XXX #}
{# Filename: .templates/layout.html #}
{% extends &#8216;layout.html&#8217; <span>}
</pre>
<p>If you don&#8217;t believe me, try it!  It will cause an infinite loop when layout.html tries to extend itself.  Instead, you must use a Sphinx-specific extension to Jinja by prepending the <tt>!</tt> character to the template filename:</p>
<pre class="highlight">
{# This is just fine #}
{# Filename: .templates/layout.html #}
{</span> extends &#8217;!layout.html&#8217; <span>}
</pre>
<p>That&#8217;s it!  Now you can go crazy making your own blocks that override the old layout template.  For example:</p>
<pre class="highlight">
{# Filename: .templates/layout.html #}
{</span> extends &#8217;!layout.html&#8217; <span>}

{</span> block afterfooter <span>}
Hi!  I am beneath the footer.
{</span> endblock <span>}
</pre>
</p>
<h3>Useful Blocks to Create</h3>
<p>Here are some blocks (all in <tt>layout.html</tt>) that you should start extending.  As of this writing, all of these blocks are completely empty in the original layout, so you are not replacing anything, only adding your own content.  Therefore they are a good place to experiment.</p>
<ul>
<li>extrahead</li>
<li>beforerelbar, afterrelbar</li>
<li>beforesidebar1, sidebar1, aftersidebar1</li>
<li>beforedocument, afterdocument</li>
<li>beforesidebar2, aftersidebar2</li>
<li>beforefooter, afterfooter</li>
</ul>
<h3>How To: Add Your Own CSS Stylesheet</h3>
<p>To add your own CSS stylesheet, for example, <tt>mystyle.css</tt>, first create the file in the <tt>.static</tt> directory.  Next, you have a choice depending on what you want to do:</p>
<p>
<ul></p>
<li><strong>To use your styles in addition to the defaults</strong>, add an &#8220;extrahead&#8221; block in your own <tt>layout.html</tt> template, like so:
<pre class="highlight">
{# Filename: .templates/layout.html #}
{</span> extends &#8217;!layout.html&#8217; <span>}

{</span> block extrahead <span>}
<link rel=&#8221;stylesheet&#8221;
  href=&#8221;{{ pathto(&#8217;_static/mystyle.css&#8217;, 1) }}&#8221;
  type=&#8221;text/css&#8221; />
{</span> endblock <span>}
</pre>
</li>
<p></p>
<li><strong>To completely replace the old styles</strong>, replace the <tt>html_style</tt> variable in <tt>conf.py</tt> and set it to &#8220;mystyle.css&#8221;.  Of course, you can use @import other styles or do anything else that CSS supports.</li>
<p>
</ul>
</p>
<h3>How To: Change the &#8220;root&#8221; page name</h3>
<p>I don&#8217;t like the default text in the upper-left side of the page.  It just says &#8220;ProjectName vX.Y documentation&#8221; which is pretty boring.  To replace it, override the &#8220;rootrellink&#8221; block in your own template.  Here is what I use:</p>
<pre class="highlight">
{# Filename: .templates/layout.html #}
{</span> extends &#8217;!layout.html&#8217; <span>}

{</span> block rootrellink <span>}
<li>
  <a href="{{ pathto('index') }}">FooProject (v{{ release }})</a>
  &raquo;
  </li>


{</span> endblock <span>}
</pre>
</p>
<h3>How To: Show the current page name in the top navigation bar</h3>
<p>I like to show the current page name in the top part of the page, because it provides a kind of &#8220;you are here&#8221; feel.  For example: FooProject &raquo; Getting Started &raquo; Compiling and Installing</p>
<p>Well, Sphinx builds this for you automatically, except it takes the liberty of <strong>deleting the current page</strong> from the end of the list!  I have no idea why they don&#8217;t make it optional, but they just mercilessly chop off the last page from the ancestry list.  Here is how you can add it back using templates:</p>
<pre class="highlight">
{# Filename: .templates/layout.html #}
{</span> extends &#8217;!layout.html&#8217; <span>}

{</span> block relbaritems <span>}
  {</span> if current_page_name != &#8216;index&#8217; <span>}
<li><a href="{{ pathto(current_page_name) }}">{{ title }}</a></li>

  {</span> endif <span>}
{</span> endblock <span>}
</pre>
</p>
<h3>How To: Extra Sidebar Content</h3>
<p>I like to put extra stuff in the sidebar for every page, however maintaining the <tt>html_sidebars</tt> variable is tedious.  To ensure that every page loads your custom HTML in the sidebar, first create <tt>.static/mysidebarcontent.html</tt> page with something in it.  (<strong>Note</strong> this file goes in <tt>.static</tt>, not <tt>.templates</tt>.)</p>
<p>Next, put this in your <tt>layout.html</tt>:</p>
<pre class="highlight">
{# Filename: .templates/layout.html #}
{</span> extends &#8217;!layout.html&#8217; <span>}

{</span> set customsidebar = &#8216;mysidebarcontent.html&#8217; %}
</pre>
</p>
<p>I know it&#8217;s kludgy but it works.  You may also want to consider doing this in <tt>page.html</tt> if you don&#8217;t want the custom sidebar stuff on the special index, module index, etc. pages.</p>
<h3>Final Comments</h3>
<p>Here are some final notes that I have accumulated in no particular order:</p>
<ul>
<li>Searching seems to work only if you include the document source.  So make sure you set <tt>html_copy_source</tt> to True in <tt>conf.py</tt>.</li>
<li>html_index is not quite intuitive.  It does not simply set the Jinja template to use for the index, but rather it activates special handling for the index page.  Without it, the index page will build normally using <tt>page.html</tt> (which extends <tt>layout.html</tt>).  But if you set html_index = &#8220;foo.html&#8221; for example, then the <em>prefab index.html will run which loads your foo.html inside it</em> in the body (as the indextemplate variable).  So remember, index.html is <strong>not used</strong> unless you set html_index; and if you do set html_index, then your template will merely be rendered as part of the document body.  In summary:
<ul>
<li><strong>If you want the index page to render using the same template as all the other pages</strong>, then you <em>must not</em> set html_index.</li>
<li><strong>If you want to activate the special template for the index page</strong>, you must set html_index in conf.py.  The file that you specify will be included in the template.</li>
<li><strong>If you want to activate the special template and you want to completely override index.html</strong>, you must set html_index in conf.py and also create your own index.html in .templates.  You will probably want to &#8220;extends &#8216;layout.html&#8217;&#8221; too.  The &#8220;indextemplate&#8221; variable will be set to whatever you specified in conf.py.  To actually render the contents of that file, you must
<pre class="highlight">{{ rendertemplate(indextemplate) }}</pre>
<p> somewhere in your index.html template.</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2008/03/27/sphinx-templates/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MonoDevelop 1.0 on CentOS 5 and Fedora: Compiling and Installing</title>
		<link>http://www.proven-corporation.com/2008/03/24/compiling-and-installing-monodevelop-10-on-centos-5-and-fedora/</link>
		<comments>http://www.proven-corporation.com/2008/03/24/compiling-and-installing-monodevelop-10-on-centos-5-and-fedora/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 07:40:38 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/2008/03/24/compiling-and-installing-monodevelop-10-on-centos-5-and-fedora/</guid>
		<description><![CDATA[Recently, I had to get MonoDevelop working on CentOS 5 for a project.  Here is my blow-by-blow summary of how to get it working.  The procedure is designed for CentOS 5, and it works on my Fedora 8 system as well.  Since most of the activity is just compiling stuff from source, [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I had to get <a href="http://www.monodevelop.com/Main_Page">MonoDevelop</a> working on CentOS 5 for a project.  Here is my blow-by-blow summary of how to get it working.  The procedure is designed for CentOS 5, and it works on my Fedora 8 system as well.  Since most of the activity is just compiling stuff from source, it should be pretty easy to follow on a different distribution.  It&#8217;s just a matter of getting the correct packages installed in the preparation phase.</p>
<p><span id="more-82"></span></p>
<h3>Contents</h3>
<ol>
<li><a href="#objectives">Objectives</a></li>
<li><a href="#prep">Preparation</a></li>
<li><a href="#env">Enabling the Environment</a></li>
<li><a href="#mono">Mono 1.9</a></li>
<li><a href="#libgdiplus">Libgdiplus</a></li>
<li><a href="#gtk">GTK#</a></li>
<li><a href="#addins">Mono.Addins</a></li>
<li><a href="#monodoc">Monodoc</a></li>
<li><a href="#tools">Mono Tools</a></li>
<li><a href="#gtksourceview">Gtksourceview</a></li>
<li><a href="#monodevelop">MonoDevelop</a></li>
<li><a href="#nant">Nant</a></li>
<li><a href="#finish">Finish</a></li>
</ol>
<p><a name="objectives"></a></p>
<h3>Objectives</h3>
<p></p>
<ul class="simple"></p>
<li>MonoDevelop platform ready to use on CentOS 5 or Fedora 8</li>
<p></p>
<li>For minimal maintenance headache, use the base operating system to provide as much sofware as possible, with the obvious exception of Mono 1.9 and MonoDevelop 1.0</li>
<p></p>
<li>The install is isolated from the rest of the system.  MonoDevelop and its dependencies should have no overlap or interference with the base operating system.</li>
<p>
</ul>
</p>
<p><a name="prep"></a></p>
<h3>Preparation</h3>
</p>
<p>
<ul class="wide"></p>
<li><strong>Note:</strong> In this document, all source code will go in <tt class="docutils literal"><span class="pre">/usr/src/monodevelop-install</span></tt>.  All installed packages will go in <tt class="docutils literal"><span class="pre">/usr/local/software</span></tt>.
</li>
<p></p>
<li>
<pre class="highlight">mkdir -p /usr/local/software/mono-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">sudo chown -R <span class="sb">`</span>whoami<span class="sb">`</span> /usr/local/software # (Be careful if you already have software here)</pre>
<p>
</li>
<p></p>
<li>
<pre class="highlight">mkdir -p /usr/src/monodevelop-install
</pre>
<p>
</li>
<p></p>
<li>
<pre class="highlight">yum install glib2-devel pango-devel gtk2-devel glade2-devel libgnome-devel <span class="se"></span>
            gnome-desktop-devel gnome-panel-devel libgnomeprintui22-devel  <span class="se"></span>
            gtksourceview-devel ruby ruby-rdoc gtkhtml38-devel wget        <span class="se"></span>
            <span class="c"># (maybe openssl-devel also)</span>
</pre>
</li>
<li>
<pre class="highlight"><span class="nb">echo</span> <span class="s1">&#39;PATH=&quot;/usr/local/software/mono-1.9/bin:$PATH&quot;&#39;</span> <span class="se"></span>
     > /usr/local/software/mono-1.9/env.sh
</pre>
</li>
<li>
<pre class="highlight"><span class="nb">echo</span> <span class="s1">&#39;export PKG_CONFIG_PATH=/usr/local/software/mono-1.9/lib/pkgconfig&#39;</span> <span class="se"></span>
     >> /usr/local/software/mono-1.9/env.sh
</pre>
</li>
<li>
<pre class="highlight"><span class="nb">echo</span> <span class="s1">&#39;export LD_LIBRARY_PATH=/usr/local/software/mono-1.9/lib&#39;</span> <span class="se"></span>
     >> /usr/local/software/mono-1.9/env.sh
</pre>
</li>
</ul>
<p><a name="env"></a></p>
<h3>Enabling the Environment</h3>
</p>
<p><strong>Important:</strong> You must always run this command before using Monodevelop, and also before continuing on with this procedure.</p>
<pre class="highlight smaller"><span class="nb">source</span> /usr/local/software/mono-1.9/env.sh</pre>
<p>In this document, Monodevelop is not completely integrated into the GUI, menus, etc. for a couple of reasons:</p>
<ol>
<li>Getting Monodevelop to show up in the menus is somewhat distro-specific.  For RPM-based distros, look into setting the <tt>$XDG_DATA_DIRS</tt> variable in <tt>/etc/X11/xinit/xinitrc.d/</tt>, but you will also have to get the path working.  For Debian-based distros, look into doing the same thing in <tt>/etc/X11/Xsession.d</tt>.  And if you happen to be trying this on Solaris, look into <tt>/usr/dt/config/Xsession.d</tt>.  Oh and by the way, the .desktop file that ships with Monodevelop is invalid for my Fedora 8 system!  So you will have to manually edit it and (IIRC) remove the <tt>TryExec</tt> line.
<li>As you can see, this requires a bit of mucking with &#8220;standard&#8221; package-maintained config files, which I am hesitant to do because it violates the objective of isolation.</li>
</ol>
<p>All this means you will always have to first source the small shell script which sets up the correct environment variables whenever you want to run Monodevelop.</p>
<p><a name="mono"></a></p>
<h3>Mono 1.9</h3>
</p>
<ul class="wide">
<li>
<pre class="highlight"><span class="nb">cd</span> /usr/src/monodevelop-install</pre>
</li>
<li>
<pre class="highlight">wget http://go-mono.com/sources/mono/mono-1.9.tar.bz2</pre>
</li>
<li>
<pre class="highlight">tar xjf mono-1.9.tar.bz2</pre>
</li>
<li>
<pre class="highlight"><span class="nb">cd </span>mono-1.9</pre>
</li>
<li>
<pre class="highlight">./configure&#8212;prefix<span class="o">=</span>/usr/local/software/mono-1.9</pre>
<ul>
<li>Optionally,
<pre class="highlight">&#8212;with-ikvm-native<span class="o">=</span>no&#8212;with-moonlight<span class="o">=</span>no</pre>
</li>
<li>Optionally,
<pre class="highlight">&#8212;with-xen_opt=yes</pre>
</li>
</ul>
</li>
<li>
<pre class="highlight">make &#038;&#038; make install</pre>
</li>
</ul>
<p><a name="libgdiplus"></a></p>
<h3>Libgdiplus:</h3>
<p></p>
<ul class="wide"></p>
<li>
<pre class="highlight">cd /usr/src/monodevelop-install</pre>
</li>
<p></p>
<li>
<pre class="highlight">wget http://go-mono.com/sources/libgdiplus/libgdiplus-1.9.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">tar xjf libgdiplus-1.9.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">cd libgdiplus-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">./configure&#8212;prefix=/usr/local/software/mono-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">make &#38;&#38; make install</pre>
</li>
<p>
</ul>
</p>
<p><a name="gtk"></a></p>
<h3>GTK#</h3>
<p></p>
<ul class="wide"></p>
<li>
<pre class="highlight">cd /usr/src/monodevelop-install</pre>
</li>
<p></p>
<li>
<pre class="highlight">wget http://go-mono.com/sources/gtk-sharp-2.0/gtk-sharp-2.8.4.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">tar xjf gtk-sharp-2.8.4.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">cd gtk-sharp-2.8.4</pre>
</li>
<p></p>
<li>
<pre class="highlight">./configure&#8212;prefix=/usr/local/software/mono-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">make &#38;&#38; make install</pre>
</li>
<p>
</ul>
</p>
<p><a name="addins"></a></p>
<h3>Mono.Addins:</h3>
<p></p>
<ul class="wide"></p>
<li>
<pre class="highlight">cd /usr/src/monodevelop-install</pre>
</li>
<p></p>
<li>
<pre class="highlight">wget http://go-mono.com/sources/mono-addins/mono-addins-0.3.1.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">tar xjf mono-addins-0.3.1.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">cd mono-addins-0.3.1</pre>
</li>
<p></p>
<li>
<pre class="highlight">./configure&#8212;prefix=/usr/local/software/mono-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">make &#38;&#38; make install</pre>
</li>
<p>
</ul>
</p>
<p><a name="monodoc"></a></p>
<h3>Monodoc</h3>
<p></p>
<ul class="wide"></p>
<li>
<pre class="highlight">cd /usr/src/monodevelop-install</pre>
</li>
<p></p>
<li>
<pre class="highlight">wget http://go-mono.com/sources/monodoc/monodoc-1.9.zip</pre>
</li>
<p></p>
<li>
<pre class="highlight">unzip monodoc-1.9.zip</pre>
</li>
<p></p>
<li>
<pre class="highlight">cd monodoc-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">./configure&#8212;prefix=/usr/local/software/mono-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">make &#38;&#38; make install</pre>
</li>
<p>
</ul>
</p>
<p><a name="tools"></a></p>
<h3>Mono Tools:</h3>
<p></p>
<ul class="wide"></p>
<li>
<pre class="highlight">cd /usr/src/monodevelop-install</pre>
</li>
<p></p>
<li>
<pre class="highlight">wget http://go-mono.com/sources/mono-tools/mono-tools-1.9.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">tar xjf mono-tools-1.9.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">cd mono-tools-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">./configure&#8212;prefix=/usr/local/software/mono-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">make &#38;&#38; make install</pre>
</li>
<p>
</ul>
</p>
<p><a name="gtksourceview"></a></p>
<h3>Gtksourceview:</h3>
<p></p>
<ul class="wide"></p>
<li>
<pre class="highlight">cd /usr/src/monodevelop-install</pre>
</li>
<p></p>
<li>
<pre class="highlight">wget http://go-mono.com/sources/gtksourceview-sharp-2.0/gtksourceview-sharp-2.0-0.10.tar.gz</pre>
</li>
<p></p>
<li>
<pre class="highlight">tar xzf gtksourceview-sharp-2.0-0.10.tar.gz</pre>
</li>
<p></p>
<li>
<pre class="highlight">cd gtksourceview-sharp-2.0-0.10</pre>
</li>
<p></p>
<li>
<pre class="highlight">./configure&#8212;prefix=/usr/local/software/mono-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">make &#38;&#38; make install</pre>
</li>
<p>
</ul>
</p>
<p><a name="monodevelop"></a></p>
<h3>Monodevelop:</h3>
<p></p>
<ul class="wide"></p>
<li>
<pre class="highlight">cd /usr/src/monodevelop-install</pre>
</li>
<p></p>
<li>
<pre class="highlight">wget http://go-mono.com/sources/monodevelop/monodevelop-1.0.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">tar xjf monodevelop-1.0.tar.bz2</pre>
</li>
<p></p>
<li>
<pre class="highlight">cd monodevelop-1.0</pre>
</li>
<p></p>
<li>
<pre class="highlight">./configure&#8212;prefix=/usr/local/software/mono-1.9</pre>
</li>
<p></p>
<li>
<pre class="highlight">make &#38;&#38; make install</pre>
</li>
<p>
</ul>
</p>
<p><a name="nant"></a></p>
<h3>NAnt</h3>
</p>
<p>This is optional, but many .NET applications build with it, so it might be worth throwing in there.</p>
<ul class="wide">
<li>
<pre class="highlight">cd /usr/src/monodevelop-install</pre>
</li>
<li>
<pre class="highlight">wget http://downloads.sourceforge.net/nant/nant-0.85-bin.tar.gz</pre>
</li>
<li>
<pre class="highlight">tar xzf nant-0.85-bin.tar.gz -C /usr/local/software/mono-1.9</pre>
</li>
<li>
<pre class="highlight">echo &#8217;#!/bin/bash&#8217; > /usr/local/software/mono-1.9/bin/nant</pre>
</li>
<li>
<pre class="highlight">echo &#8216;mono /usr/local/software/mono-1.9/nant-0.85/bin/NAnt.exe &#8221;$@&#8221;&#8217; >> /usr/local/software/mono-1.9/bin/nant</pre>
</li>
<li>
<pre class="highlight">chmod +x /usr/local/software/mono-1.9/bin/nant</pre>
</li>
</ul>
<p><a name="finish"></a></p>
<h3>Finished!</h3>
</p>
<p>You&#8217;re done!  Run it!</p>
<pre class="highlight smaller">monodevelop</pre>
<p>Feel free to <a href="/contact">contact me</a> if you have any input to add.  I will try to add another post for Debian/Ubuntu and possibly Solaris in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2008/03/24/compiling-and-installing-monodevelop-10-on-centos-5-and-fedora/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Software: Bzr Notification Plugin</title>
		<link>http://www.proven-corporation.com/2008/02/07/new-software-bzr-notification-plugin/</link>
		<comments>http://www.proven-corporation.com/2008/02/07/new-software-bzr-notification-plugin/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 15:06:14 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/2008/02/07/new-software-bzr-notification-plugin/</guid>
		<description><![CDATA[We have a new addition to the software section: Bzr Notification.
This is a plugin for the Bazaar source code control system.  It will pop up a small window when pushes and pulls have completed.  This way, you do not need to wait around watching (slow) transactions over the network.  Here is a [...]]]></description>
			<content:encoded><![CDATA[<p>We have a new addition to the software section: <a href="/software/bzr-notification/">Bzr Notification</a>.</p>
<p>This is a plugin for the <a href="http://bazaar-vcs.org">Bazaar</a> source code control system.  It will pop up a small window when pushes and pulls have completed.  This way, you do not need to wait around watching (slow) transactions over the network.  Here is a screenshot of bzr_notification in action:</p>
<p><img src='/wp-content/uploads/2008/02/bzr_notification.png' alt='bzr_notification in action' title="bzr_notification in action"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2008/02/07/new-software-bzr-notification-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Magic with SSH</title>
		<link>http://www.proven-corporation.com/2008/01/29/making-magic-with-ssh/</link>
		<comments>http://www.proven-corporation.com/2008/01/29/making-magic-with-ssh/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 14:11:29 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/news/2008/01/29/making-magic-with-ssh/</guid>
		<description><![CDATA[I posted my slides from my talk at BarCamp Bangkok on January 26th.  The talk mostly covers advanced usage of OpenSSH to do port forwarding, web proxying, and control of remote systems.
View the slides in HTML format: Making Magic with SSH
You can also get the text source file, or download everything in zip format.

]]></description>
			<content:encoded><![CDATA[<p>I posted my slides from my talk at BarCamp Bangkok on January 26th.  The talk mostly covers advanced usage of OpenSSH to do port forwarding, web proxying, and control of remote systems.</p>
<p>View the slides in HTML format: <a href="/static/ssh/" target="_blank">Making Magic with SSH</a></p>
<p>You can also get the <a href="/static/ssh/ssh.txt">text source</a> file, or download everything in <a href="/static/ssh.zip">zip format</a>.</p>
<p><a href="/static/ssh/" target="_blank" title='SSH Intro Slide'><img src='http://www.proven-corporation.com/wp-content/uploads/2008/01/ssh-slide1.png' alt='SSH Intro Slide' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2008/01/29/making-magic-with-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Software: Strangle DNS parsing</title>
		<link>http://www.proven-corporation.com/2008/01/24/new-software-strangle-dns-parsing/</link>
		<comments>http://www.proven-corporation.com/2008/01/24/new-software-strangle-dns-parsing/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 12:33:19 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Free Software]]></category>

		<guid isPermaLink="false">http://www.proven-corporation.com/news/2008/01/24/new-software-strangle-dns-parsing/</guid>
		<description><![CDATA[We are happy to release Strangle, an open source DNS message parsing library.  You can read all about it from our Strangle summary.  Strangle provides a convenient Python interface which leverages the enterprise-grade BIND technology from the Internet Software Consortium.  If your Python application needs to understand the meaning in cryptic DNS [...]]]></description>
			<content:encoded><![CDATA[<p>We are happy to release Strangle, an open source DNS message parsing library.  You can read all about it from our <a href="http://www.proven-corporation.com/software/strangle/">Strangle summary</a>.  Strangle provides a convenient Python interface which leverages the enterprise-grade BIND technology from the Internet Software Consortium.  If your Python application needs to understand the meaning in cryptic DNS packets, give it a try!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.proven-corporation.com/2008/01/24/new-software-strangle-dns-parsing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
