<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>crashsystems.net &#187; programming</title>
	<atom:link href="http://crashsystems.net/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://crashsystems.net</link>
	<description>Home of Crashsystems LLC, and a blog about miscellaneous things</description>
	<lastBuildDate>Sun, 20 Jun 2010 19:28:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
	<!-- podcast_generator="podPress/8.8" - maintenance_release="8.8.5.3" -->
	<copyright>2006-2007 </copyright>
	<managingEditor>crashsystems@gmail.com (Douglass Clem)</managingEditor>
	<webMaster>crashsystems@gmail.com (Douglass Clem)</webMaster>
	<category>posts</category>
	<ttl>1440</ttl>
	<image>
		<url>http://crashsystems.net/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>crashsystems.net &#187; programming</title>
		<link>http://crashsystems.net</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>A blog about technology, world travel, spirituality, and random combinations of these themes.</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &amp; Culture" />
	<itunes:author>Douglass Clem</itunes:author>
	<itunes:owner>
		<itunes:name>Douglass Clem</itunes:name>
		<itunes:email>crashsystems@gmail.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://crashsystems.net/wp-content/plugins/podpress/images/powered_by_podpress.jpg" />
		<item>
		<title>Fighting Juno&#8217;s address book lock-in with Python</title>
		<link>http://crashsystems.net/2009/06/juno-address-book-converter/</link>
		<comments>http://crashsystems.net/2009/06/juno-address-book-converter/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 01:23:25 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=254</guid>
		<description><![CDATA[This week I helped a friend with an OS re-install (XP unfortunately). He used Juno for his email service, which refused to work properly when re-installed. I helped him switch to Gmail, but it turns out that Juno refused to implement an export feature for their contacts. After a little hunting around, I discovered the [...]]]></description>
			<content:encoded><![CDATA[<p>This week I helped a friend with an OS re-install (XP unfortunately). He used Juno for his email service, which refused to work properly when re-installed. I helped him switch to Gmail, but it turns out that Juno refused to implement an export feature for their contacts. After a little hunting around, I discovered the text file the software used to store contacts, somewhere in it&#8217;s Program Files folder. What follows is a quick bit of code I wrote to convert the contacts into a CSV file. Hopefully it will be useful to someone else in their efforts to fight lock-in.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># import libraries</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">csv</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> entry<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;A simple data structure for each contact.&quot;&quot;&quot;</span>
    Name = <span style="color: #483d8b;">''</span>
    Phone = <span style="color: #483d8b;">''</span>
    Birthday = <span style="color: #483d8b;">''</span>
    Address = <span style="color: #483d8b;">''</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> contacts<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;This class will contain pure input from the Juno contacts file.&quot;&quot;&quot;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, <span style="color: #008000;">input</span><span style="color: black;">&#41;</span>:
        <span style="color: #808080; font-style: italic;"># Open the input file</span>
        readFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #008000;">input</span>, <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Put the header into list</span>
        header = entry<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        header.<span style="color: black;">Name</span> = <span style="color: #483d8b;">&quot;Name&quot;</span>
        header.<span style="color: black;">Email</span> = <span style="color: #483d8b;">'Email'</span>
        header.<span style="color: black;">Phone</span> = <span style="color: #483d8b;">&quot;Phone Number&quot;</span>
        header.<span style="color: black;">Address</span> = <span style="color: #483d8b;">&quot;Address&quot;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: #008000;">list</span> = <span style="color: black;">&#91;</span>header<span style="color: black;">&#93;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Put the input file into a list and close file</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span> = readFile.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        readFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> parse<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Parse everything and put it in the list&quot;&quot;&quot;</span>
&nbsp;
        count = <span style="color: #ff4500;">0</span>
        <span style="color: #ff7700;font-weight:bold;">while</span><span style="color: black;">&#40;</span>count <span style="color: #66cc66;">&lt;</span> = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#41;</span> -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:
            person = entry<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            count += <span style="color: #ff4500;">1</span> <span style="color: #808080; font-style: italic;"># Skips over the field specifying the contact as an entry            </span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Get email address</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#91;</span>count<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">6</span>:-<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>item == <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
                person.<span style="color: black;">Email</span> = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                person.<span style="color: black;">Email</span> = item
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Throw alias into bit-bucket</span>
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Get first and last name</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#91;</span>count<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">5</span>:-<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>item == <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
                person.<span style="color: black;">Name</span> = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                person.<span style="color: black;">Name</span> = item
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Get the phone number</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#91;</span>count<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">14</span>:-<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>item == <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
                person.<span style="color: black;">Phone</span> = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                person.<span style="color: black;">Phone</span> = item
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Throw birthday into bit-bucket</span>
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Get the address</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#91;</span>count<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">8</span>:-<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>item == <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
                person.<span style="color: black;">Address</span> = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                person.<span style="color: black;">Address</span> = item
&nbsp;
            <span style="color: #808080; font-style: italic;"># incriment count by four to get to the beginning of next entry</span>
            count += <span style="color: #ff4500;">4</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># add person to the list</span>
            <span style="color: #008000;">self</span>.<span style="color: #008000;">list</span> += <span style="color: black;">&#91;</span>person<span style="color: black;">&#93;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> output<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Make a CSV file&quot;&quot;&quot;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Set up the output file</span>
        outFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'output.txt'</span>, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
        output = <span style="color: #dc143c;">csv</span>.<span style="color: black;">writer</span><span style="color: black;">&#40;</span>outFile, delimiter=<span style="color: #483d8b;">','</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Iterate through self.list and write stuff</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> person <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">self</span>.<span style="color: #008000;">list</span>:
            output.<span style="color: black;">writerow</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>person.<span style="color: black;">Name</span>, person.<span style="color: black;">Email</span>, person.<span style="color: black;">Phone</span>, person.<span style="color: black;">Address</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Close the file</span>
        outFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

</pre>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2009/06/juno-address-book-converter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keryx Tutorial: Bringing Updates Home</title>
		<link>http://crashsystems.net/2009/01/keryx-tutorial/</link>
		<comments>http://crashsystems.net/2009/01/keryx-tutorial/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 21:34:18 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[keryx]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=125</guid>
		<description><![CDATA[Update 20/2/09: Keryx 0.92 has been released, with several new features and a few important bug fixes. If you are using the previous version, please upgrade now. Check out the release notes for a list of what has changed. For a screenshot walk-through of the changes, check out this blog post. Translations / Tutorials In [...]]]></description>
			<content:encoded><![CDATA[<p><em>Update 20/2/09: Keryx 0.92 has been released, with several new features and a few important bug fixes. If you are using the previous version, please upgrade now. Check out the <a href="http://keryxproject.org/forum/index.php/topic,43.msg253.html" target="_blank">release notes</a> for a list of what has changed. For a screenshot walk-through of the changes, check out <a href="http://excid3.betaserver.org/2009/02/20/keryx-092-release/" target="_blank">this blog post</a>.</em></p>
<p><em>Translations / Tutorials In Other Languages:<br />
</em></p>
<ul>
<li><em> </em><em><a href="http://keryxproject.org/wiki/index.php?title=Tutorial_de_Keryx" target="_blank">Espanol</a></em></li>
<li><em><a href="http://ovroniil.wordpress.com/2010/06/10/%E0%A6%85%E0%A6%AB%E0%A6%B2%E0%A6%BE%E0%A6%87%E0%A6%A8%E0%A7%87-%E0%A6%95%E0%A7%87%E0%A6%B0%E0%A6%BE%E0%A6%87%E0%A6%95%E0%A7%8D%E0%A6%B8-keryx-%E0%A6%A6%E0%A6%BF%E0%A7%9F%E0%A7%87-%E0%A6%B8%E0%A6%AB/" target="_blank">Bengali</a></em></li>
</ul>
<p>Though in most North American cities one cannot find a spot <em>without</em> at least a weak WiFi signal, many of us Linux geeks still live in rural areas with less Internet connectivity. Also, in various non-Westernized nations, there is a growing number of Linux users who may have a computer at home, but cannot afford a decent connection. For both groups, software updates typically demand an Internet connection, which can make updating difficult if not impossible. There is now a solution though, a new program called Keryx.</p>
<p><a href="http://keryxproject.org/" target="_blank">Keryx</a> was written by Southern Illinois University computer science student <a href="http://excid3.betaserver.org/" target="_blank">Chris Oliver</a>, who wanted a way  to download software and updates for Ubuntu systems that had little or no connectivity. Simply put Keryx on your pen drive, use it to create a new project file which retains a copy of your software sources and other system details, then take the pen drive to a computer with a better connection. Via it&#8217;s Synaptic like interface, users can then select all updates for download, plus select any other software they may want to install, complete with dependency resolution.</p>
<p>Because it is written in Python, and utilizes wxWidgets for it&#8217;s interface, Keryx can run on Linux, OSX and Windows. Pre-compiled binaries for Windows are included in the download (meaning you don&#8217;t need to install Python and wxWidgets first), and similar binaries for OSX and Linux are in the development road-map, along with Debian/Ubuntu packages.</p>
<h1><a name="using-keryx"></a><a href="#using-keryx">.</a></h1>
<p>This tutorial will walk you through the simple process of using Keryx to get updates and new software. Keryx currently only works for Debian based distros, but there are plans for adding support for a number of other package management systems. The system being updated is running Ubuntu 8.10, with no network connectivity. The system that will be grabbing the updates is running Windows XP, though it could just as easily be Windows 95 through Vista, OSX, or another Linux box.</p>
<h2><a name="download-keryx"></a><a href="#download-keryx">.</a></h2>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-1.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-1.png" alt="Extract the zip file" width="55" height="100" /></a><br />
Go to the <a href="http://keryxproject.org/" target="_blank">Keryx</a> website and click the <a href="http://keryxproject.org/download/keryx_0.92.3.zip" target="_blank">download</a> link. Once the download is complete, put it on a USB pen drive that has a decent amount of free space, and unzip it.</p>
<h2><a name="create-a-project"></a><a href="#create-a-project">.</a></h2>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-cli-new.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-cli-new.png" alt="Starting a project from the CLI" width="100" height="55" /></a><br />
Keryx uses wxWidgets for it&#8217;s graphical interface, and a default Ubuntu install does not have wxWidgets installed. Therefore you must create your project file in a terminal window. Fear not, as it is really quite quick and painless.</p>
<p>Simply open up your terminal, and then navigate into the &#8220;linux&#8221; directory inside the Keryx folder. On my computer this was &#8220;/media/disk/keryx/linux&#8221; but it will look a little different for you, depending upon what your pen drive is called. Once you are in that directory, enter in the following, making sure to replace &lt;project&gt; for whatever you want to call your project and &lt;plugin&gt; for they type of system you are updating, in this case debian.</p>
<blockquote><p>python keryx.py &#8211;create &lt;project&gt; &lt;plugin&gt;</p>
<p>note: the above is <em>two dashes</em>, but my font makes it look like one.</p></blockquote>
<p>In a few moments the project will be made. When this happens, close out of the terminal and safely remove your pen drive, to take to another computer.</p>
<p><em>Note: For some people, Keryx may experience difficulty fetching the package list files in the next step, if their repository mirror is set to the regional default. If you experience this, consider selecting a different mirror in System/Administration/Software_Sources and then repeating step #2.</em></p>
<h2><a name="opening-keryx"></a><a href="#opening-keryx">.</a></h2>
<p>In this tutorial I am using a computer running Windows XP as the computer with a high speed connection. However, this could just as easily be done on any Linux or OSX computer, so long as they both had Python and wxWidgets installed.</p>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-3.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-3.png" alt="The Keryx main window" width="100" height="75" /></a><br />
On your Windows computer, plug in the pen drive and open up the Keryx folder. In this folder you will see a &#8220;win32&#8243; folder containing prepackaged binaries for Keryx. Using these you can run Keryx without having to first install Python and wxWidgets, making Keryx a very portable application. The file you need to run is called &#8220;keryx.exe,&#8221; though Windows may hide the .exe part from you. When Keryx opens, click &#8220;Open Project&#8221; and find the project file you created a few minutes ago.</p>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-4.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-4.png" alt="Downloading package lists" width="100" height="75" /></a><br />
When you open Keryx, go ahead and let it download the latest package list.</p>
<h2><a name="download-updates"></a><a href="#download-updates">.</a></h2>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-5.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-5.png" alt="The package list" width="100" height="75" /></a><br />
Once the package lists have been downloaded, you&#8217;ll see the full Synaptic-like package list in Keryx. This list can be sorted by package name, status (not installed, installed, needs updating, etc.), etc. The first thing you&#8217;ll want to do is click &#8220;Get Updates&#8221; near the top of the window.</p>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-6.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-6.png" alt="Snarfing 210 updates..." width="100" height="75" /></a><br />
When I started the download, Keryx had 210 files to download. Your number will vary, but you are likely to have a lot of updates if you have a fresh install. Keryx will tell you when it is finished, so you might want to go get some coffee.</p>
<h2><a name="download-wxwidgets"></a><a href="#download-wxwidgets">.</a></h2>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-7.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-7.png" alt="Searching for a package" width="100" height="75" /></a><br />
You probably want to be able to install wxWidgets on your Ubuntu system, so that you can run the Keryx graphical interface on it. Near the top of the window, start typing &#8220;wxversion&#8221; in the search field. Because the Keryx package search tool is so amazingly fast, you&#8217;ll only need to type the first few letters before you see python-wxversion. Right-click this package and then click download. It has several dependencies that Keryx will tell you about, so go ahead and let the program download those as well.</p>
<h2><a name="install-packages"></a><a href="#install-packages">.</a></h2>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-8.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-8.png" alt="Installing updates via dpkg" width="125" height="65" /></a><br />
With all your packages downloaded, close Keryx, safely remove your pen drive, and go back to your Ubuntu machine. When you plug the pen drive back into your Ubuntu machine, you&#8217;ll notice that the package are stored in projects/&lt;project&gt;/packages (where &lt;project&gt; is the name you gave the project). You&#8217;ll need to open up your terminal again, and navigate to this directory. Once there, run the following:</p>
<blockquote><p>sudo dpkg -i &#8211;force-depends *.deb</p></blockquote>
<p><a class="thickbox" href="http://crashsystems.net/wp-content/uploads/2009/01/keryx-9.png"><img class="ngg-singlepic ngg-right alignright" src="http://crashsystems.net/wp-content/uploads/2009/01/keryx-9.png" alt="Running updates" width="100" height="75" /></a><br />
This line will install and/or update all the packages in that directory. The &#8220;force-depends&#8221; parameter is necessary in this case, as we are installing the wxWidgets packages, which have a circular dependency. Without this parameter, dpkg will start whining at you. If you have as many packages as I had, this may take a while. Go refill your coffee, and by the time you get back, the install might be done. Thats all there is to it!</p>
<h1><a name="keryx-next-steps"></a><a href="#keryx-next-steps">.</a></h1>
<p>Despite already being a rather useful tool, there are a lot of enhancements planed for the near future with Keryx. Most of it&#8217;s features, including it&#8217;s package management support, are implemented via a very flexible plugin infrastructure. So if you are a Python hacker and would like to help implement some of the new features, or have some ideas of your own, feel free to check out the code and dive in!</p>
<p>If you run into any problems using Keryx, or would like to report a bug, check out the <a href="http://keryxproject.org/forum" target="_blank">friendly forums</a>.</p>
<h2><a name="upcoming-features"></a><a href="#upcoming-features">.</a></h2>
<ul>
<li>Support for more distributions, such as Fedora, Red Hat, Mandriva et al.</li>
<li>Package management like support for downloading and installing useful Open Source Windows software.</li>
<li>Built-in installation of downloaded packages, so the user need not mess with the CLI</li>
<li>Pre-compiled self contained binaries for Linux and OSX (like what already exists in the win32 folder), so that no matter what OS a user is running, they will be able to simply plug in their USB drive and run the graphical interface.</li>
<li>Improved documentation</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2009/01/keryx-tutorial/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>Switching to Django: The Saga Continues</title>
		<link>http://crashsystems.net/2008/12/switching-to-django/</link>
		<comments>http://crashsystems.net/2008/12/switching-to-django/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 18:49:51 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[crashsystems-2.0]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=122</guid>
		<description><![CDATA[As I announced in a previous post, I plan on switching this website to something Django based early next year. As of today, I am a heck of a lot closer to this goal than I was when I wrote that first post. I&#8217;ve been studying the Django framework, learning about models, views, url regular [...]]]></description>
			<content:encoded><![CDATA[<p>As I announced in a <a href="http://crashsystems.net/2008/11/switching-crashsystemsnet-to-django/">previous post</a>, I plan on switching this website to something <a href="http://djangoproject.com" target="_blank">Django</a> based early next year. As of today, I am a heck of a lot closer to this goal than I was when I wrote that first post. I&#8217;ve been studying the Django framework, learning about models, views, url regular expressions and templates. Though it is quite a bit different from previous forms of web development I&#8217;ve learned, it does make quite a bit of sense.</p>
<p>In <a href="http://crashsystems.net/2008/11/great-gobs-of-code/">this post</a> I mentioned some of the apps that I was considering using. I&#8217;ve done some experimentation, more reading, etc. and have decided upon the following apps:</p>
<ul>
<li><a href="http://code.google.com/p/django-atompub/" target="_blank">Atompub</a></li>
<li><a href="http://code.google.com/p/django-socialblog/" target="_blank">Django Socialblog</a></li>
<li><a href="http://code.google.com/p/django-bookmarks/" target="_blank">Django Bookmarks</a></li>
<li><a href="http://django-cms.org/" target="_blank">Django CMS</a></li>
<li><a href="http://code.google.com/p/django-notification" target="_blank">Django Notifications</a></li>
<li><a href="http://code.google.com/p/django-photologue/" target="_blank">Django Photologue</a></li>
<li><a href="http://code.google.com/p/django-tagging" target="_blank">Django Tagging</a></li>
<li><a href="http://code.google.com/p/django-threadedcomments/" target="_blank">Django ThreadedComments</a></li>
</ul>
<p>Most of the rest of the work that I need to do involves writing the template files (ugh!). However, the code itself is functioning quite as well at this moment. Feel free to <a href="http://crashsystems.net/wp-content/uploads/website.zip">download it</a>. The database is already set up (sqlite3), and the username and password for the super user are both &#8220;admin.&#8221; There are still a few minor bugs, such as an occasional &#8220;<a href="http://dpaste.com/hold/99837/" target="_blank">ajax-validation</a>&#8221; when rendering the admin page. Oddly enough, this only occasionaly happens. Also, I followed the instructions in this <a href="http://trac.django-cms.org/trac/wiki/GettingStarted" target="_blank">installation guide</a> for using <a href="http://django-tinymce.googlecode.com/svn/tags/release-1.2/docs/.build/html/installation.html" target="_blank">tinymce</a> in the CMS, but to no avail. If you happen to spot the reason I&#8217;m experiencing these two minor bugs, please leave a comment. Enjoy the code!</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2008/12/switching-to-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh My My, Great Gobs Of Code!</title>
		<link>http://crashsystems.net/2008/11/great-gobs-of-code/</link>
		<comments>http://crashsystems.net/2008/11/great-gobs-of-code/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 04:39:03 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[crashsystems-2.0]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=109</guid>
		<description><![CDATA[As I have recently mentioned, I have decided that early next year, when I switch web hosts, I&#8217;ll also be switching from the comfy confines of WordPress to a site made with Django. For those of you who want to follow along on this little journey, subscribe to this feed. Since there are so many [...]]]></description>
			<content:encoded><![CDATA[<p>As I have <a href="http://crashsystems.net/2008/11/switching-crashsystemsnet-to-django/">recently mentioned</a>, I have decided that early next year, when I switch web hosts, I&#8217;ll also be switching from the comfy confines of WordPress to a site made with Django. For those of you who want to follow along on this little journey, subscribe to <a href="http://crashsystems.net/tag/crashsystems-20/feed" target="_blank">this feed</a>.</p>
<p>Since there are so many Django apps running wild on the Internet, I have decided that I will <em>probably</em> not actually write any myself for this project, to focus on practicing putting sites containing multiple apps together. This will change however if none of the candidates I have found for a category suit my purpose. Speaking of which, I&#8217;m beginning to notice that many of the apps available online have absolutely no documentation, which is a little frustrating. Perhaps I&#8217;ll pick a few pet projects in the future for a little documentation love.</p>
<p>Anyways, the features I am looking for are basic CMS functionality, blogging, photo gallery, bookmarking and site search. In hunting for some suitable apps online, I obtained more questions then answers, so I&#8217;m looking for advice. If you have a preferred app for any of these categories, please tell me about it in the comments below, along with why you like it.</p>
<p>Without further delay, here is my list:</p>
<h2>CMS</h2>
<p>Without hesitation, the winner in this category is <a href="http://django-cms.org/" target="_blank">Django CMS</a>. It looks fully featured, easy to use, and it is from Switzerland. What could be better?</p>
<h2>Blogging</h2>
<p>There is no clear winner that I have decided upon yet, though I am leaning towards <a href="http://code.google.com/p/django-socialblog/" target="_blank">Socialblog</a>. I could not find a great amount of info about any of the blogging apps available, so I&#8217;m leaning towards Socialblog simply because it is something that broke off of the <a href="http://pinaxproject.com/" target="_blank">Pinax project</a>, which is one Django project that I happen to be quite impressed by. What I need for blogging isn&#8217;t all that advanced. So here are the list of contenders in the blogging category:</p>
<ul>
<li><a href="http://code.google.com/p/django-socialblog/" target="_blank">Socialblog</a></li>
<li><a href="http://djangoplugables.com/projects/coltrane-blog/" target="_blank">Coltrane Blog</a></li>
<li><a href="http://djangoplugables.com/projects/django-basic-blog/" target="_blank">Basic Blog</a></li>
<li><a href="http://code.google.com/p/django-diario/" target="_blank">Diario</a></li>
<li><a href="http://code.google.com/p/django-galaxy/" target="_blank">Galaxy</a></li>
<li><a href="http://code.google.com/p/django-liveblogging/" target="_blank">Liveblogging</a></li>
</ul>
<h2>Photo Gallery</h2>
<p>In this category so far I have two main contenders, though I&#8217;m leaning more towards the first one on the list below. What I want in a photo gallery, besides basic &#8220;galleries,&#8221; is the ability for visitors to comment on individual photos, and tagging for both photos and entire galleries. Geo-location support would be nice too.</p>
<ul>
<li><a href="http://code.google.com/p/django-photologue/" target="_blank">Photologue</a></li>
<li><a href="http://code.google.com/p/django-fleshin/" target="_blank">Fleshin</a>
<ul>
<li>note: I find this to be a rather odd name for a photo gallery app.</li>
</ul>
</li>
</ul>
<h2>Bookmarks</h2>
<p>I only found one app in this category, with the unique name of &#8220;<a href="http://code.google.com/p/django-bookmarks/" target="_blank">bookmarks</a>.&#8221; The project page gives absolutely no information on this app. If you know anything about this one, or know of any others, please leave a comment. I&#8217;m looking for something basic, with which I can create entries with titles, descriptions, URLs (duh!), and support for tagging.</p>
<h2>Site Search</h2>
<p>I want visitors to be able to search all of the content of my site, including CMS content, bookmarks, photo gallery content, and bookmarks. The ability to couple search queries with tags would be a great plus, but isn&#8217;t necessary. I&#8217;ve considered just using Google site search, but it takes time for new site content to make it into their indexes.</p>
<ul>
<li><a href="http://code.google.com/p/django-search/" target="_blank">Search</a></li>
<li><a href="http://code.google.com/p/django-sphinx/" target="_blank">Sphinx</a></li>
</ul>
<p>So now you have seen my grand plan for world domination&#8230; er&#8230; a new website. To top it off, check out the fancy <a href="http://en.wikipedia.org/wiki/Mind_map" target="_blank">mind map</a> below. Again, I&#8217;ll appreciate any advice you may have.</p>
<p><a href="http://crashsystems.net/wp-content/uploads/2008/11/crashsystemsnet-20.png"><img class="aligncenter size-medium wp-image-111" title="crashsystems.net 2.0" src="http://crashsystems.net/wp-content/uploads/2008/11/crashsystemsnet-20.png" alt="" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2008/11/great-gobs-of-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Switching crashsystems.net To Django</title>
		<link>http://crashsystems.net/2008/11/switching-crashsystemsnet-to-django/</link>
		<comments>http://crashsystems.net/2008/11/switching-crashsystemsnet-to-django/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 19:30:03 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[crashsystems-2.0]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=102</guid>
		<description><![CDATA[After a week of reading, thinking, playing around with code and talking to the friendly folks in #django on irc.freenode.net, I have decided that next year I will rebuild crashsystems.net with Django. Why last year, you might ask? I have been contemplating a switch of web host recently. Bluehost.com tech support is rather friendly and [...]]]></description>
			<content:encoded><![CDATA[<p>After a week of reading, thinking, playing around with code and talking to the friendly folks in #django on <a href="http://freenode.net" target="_blank">irc.freenode.net</a>, I have decided that next year I will rebuild crashsystems.net with <a href="http://www.djangoproject.com/" target="_blank">Django</a>. Why last year, you might ask? I have been contemplating a switch of web host recently. <a href="http://bluehost.com" target="_blank">Bluehost.com</a> tech support is rather friendly and nice, but their server&#8217;s seem a bit slow, likely due to overselling. After a <a title="http://stackoverflow.com/questions/2729/what-hosting-service-is-best-for-django-applications" href="http://" target="_blank">plethora of advice</a>, some of which was conflicting, I have decided that I will switch to <a href="http://webfaction.com" target="_blank">WebFaction.com</a>, both due to general good reports by people who have purchased their services, as well as their support of Django 1.0.</p>
<p>As for <em>why</em> I&#8217;ve decided to switch to Django, there are several reasons. First of all, I&#8217;ve decided recently to start getting into server-side programming. With 1/3 of the world connected to the Internet, and the other 2/3 likely to be connected within the next two decades, website programming is not only a very useful skill, but a very important one as well. The reason why I&#8217;m switching my site to Django in specific is because I am already familiar with <a href="http://python.org" target="_blank">Python</a>, and have heard a lot of good things about Django. This framework allows developers to launch fully functional websites with advanced features in a fraction of the time it would take to write all those features from the ground up in PHP, or even with Python without a framework, for that matter.</p>
<p>I think that moving my site to Django will be good incentive for me to practice what I am learning. Also, though such a site will require a little more work than a WordPress powered site, it will also be far more versatile as well. I still think that WordPress is a really good blogging platform / CMS. However, in being so easy to use, it does detract somewhat from potential versatility.</p>
<p>Besides, everyone and their mother has sites powered by WordPress, so why follow the crowd?</p>
<p>P.S.</p>
<p>I&#8217;ll be posting an update soon once I have decided upon what apps I&#8217;ll be using, features, etc.</p>
<p>P.P.S</p>
<p>For those of you on the Interwebs who would like to follow this little project of mine, I&#8217;ve created a &#8220;crashsystems.net-2.0&#8243; tag. Subscribe to <a href="http://crashsystems.net/tag/crashsystems-20/feed">this feed</a> to follow it via RSS.</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2008/11/switching-crashsystemsnet-to-django/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
