<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>
<channel>
	<title>G-Loaded Journal &#187; Software</title>
	<atom:link href="http://www.g-loaded.eu/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.g-loaded.eu</link>
	<description>An open-source software and technology related journal</description>
	<lastBuildDate>Mon, 05 Dec 2011 19:55:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
		<item>
		<title>Why free should not always mean cost-free</title>
		<link>http://www.g-loaded.eu/2011/05/14/why-free-should-not-always-mean-cost-free/</link>
		<comments>http://www.g-loaded.eu/2011/05/14/why-free-should-not-always-mean-cost-free/#comments</comments>
		<pubDate>Sat, 14 May 2011 06:11:15 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[License]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=2274</guid>
		<description><![CDATA[More and more I realize that there is a misconception about free software. Many people tend to believe that free software actually means software that should not cost any money. They somehow find natural and fair the fact that some people may work voluntarily in order to produce software, which the rest can use to [...]]]></description>
			<content:encoded><![CDATA[<p>More and more I realize that there is a <strong>misconception</strong> about free software. Many people tend to believe that <em>free software</em> actually means software that should not cost any money. They somehow find natural and fair the fact that some people may work voluntarily in order to produce software, which the rest can use to make money without having any legal obligation to contribute either money or effort back upstream.<br />
<span id="more-2274"></span><br />
As I see it, <strong>free software should be free from cost for all to use and build upon, BUT using or building upon free software to make a profit should not be cost-free</strong>. That&#8217;s a straightforward and very <strong>fair</strong> model. Also, it seems to be the only realistic concept that could drive money back to those who invested their time and effort producing free software. I know that currently there is no <em>free software license</em> that makes a distinction between <strong>commercial</strong> and <strong>non-commercial</strong> use and thus be the solid ground for such a software production ecosystem. But, who knows&#8230; maybe we see one in the near future. Such a software license would make a <strong>difference</strong> in the way we perceive the &#8220;<em>doing business with free software</em>&#8221; concept that people talk about these days.</p>
<p>For content and media, there are the <strong>Creative Commons</strong> licenses, some of which make it <a href="http://wiki.creativecommons.org/FAQ">possible</a> for creators to provide their work for free, while at the same time they still reserve the right to selectively make their work available for commercial purposes under different terms. That&#8217;s the beauty of those licenses. They are made to solve real problems and that&#8217;s why I highly respect them.</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2011/05/14/why-free-should-not-always-mean-cost-free/">Why free should not always mean cost-free</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2007/02/24/creative-commons-v30-licenses-launched/" rel="bookmark">Creative Commons v3.0 Licenses Launched</a></li>
<li><a href="http://www.g-loaded.eu/2007/07/29/best-practices-of-software-licensing/" rel="bookmark">Best Practices of Software Licensing</a></li>
<li><a href="http://www.g-loaded.eu/2009/10/08/operating-systems-do-not-matter-any-more/" rel="bookmark">Operating Systems do not matter any more</a></li>
<li><a href="http://www.g-loaded.eu/2006/01/14/creative-commons-configurator-wordpress-plugin/" rel="bookmark">Creative-Commons-Configurator WordPress Plugin</a></li>
<li><a href="http://www.g-loaded.eu/2007/07/01/gplv3-is-out-the-g-loadedeu-views/" rel="bookmark">GPLv3 is out &#8211; The G-Loaded.eu views</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2011/05/14/why-free-should-not-always-mean-cost-free/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>The Read-It-Later extension</title>
		<link>http://www.g-loaded.eu/2011/04/02/the-read-it-later-extension/</link>
		<comments>http://www.g-loaded.eu/2011/04/02/the-read-it-later-extension/#comments</comments>
		<pubDate>Sat, 02 Apr 2011 10:46:13 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=2239</guid>
		<description><![CDATA[I just discovered the Read-It-Later addon for the Firefox browser. This is one of the most fantastic plugins I&#8217;ve seen in a while. From what I see, there have been about 4 million downloads already. This means I am too late, but as they say &#8220;better late than never&#8220;! This extension makes it possible to [...]]]></description>
			<content:encoded><![CDATA[<p>I just discovered the <a href="https://addons.mozilla.org/en-US/firefox/addon/read-it-later/">Read-It-Later</a> addon for the Firefox browser. This is one of the most fantastic plugins I&#8217;ve seen in a while. From what I see, there have been about 4 million downloads already. This means I am too late, but as they say &#8220;<em>better late than never</em>&#8220;! This extension makes it possible to maintain a queue of unread content locally or <a href="http://readitlaterlist.com/">remotely</a>. It is also possible to save the text locally and read it at a later time even if you are offline. Really cool.<br />
<span id="more-2239"></span><br />
Here is a list of the features:</p>
<blockquote>
<ul>
<li>Save pages to a reading list to read when you have time.</li>
<li>Offline reading mode lets you read the items you’ve saved for later on the plane, train, or anywhere without an internet connection.</li>
<li>Sync your list to all of your computers, at work or home.</li>
<li>Sync your list to Read It Later apps for iPhone, iPod, iPad, Android and more.</li>
<li>After reading, bookmark pages on your preferred bookmarking service or share them with friends.</li>
<li>Click to Save Mode lets you quickly batch a reading list just by clicking on interesting links.</li>
<li>Text view strips away images, ads, and layout from articles and presents them in an easy to consume way.</li>
</ul>
</blockquote>
<p>Until today I have been keeping content that I wished to read at a later time in the browser&#8217;s bookmark system or I left yet another tab open or stored the URL in a text file. This plugin seems that it will provide a decent solution and eliminate the trouble. I haven&#8217;t used the remote service yet and I am not sure if I will ever do. The local &#8220;<em>read queue</em>&#8221; works really well.</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2011/04/02/the-read-it-later-extension/">The Read-It-Later extension</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2007/02/28/tab-links-extension-for-the-epiphany-browser/" rel="bookmark">Tab Links extension for the Epiphany browser</a></li>
<li><a href="http://www.g-loaded.eu/2007/05/11/smart-bookmarks-in-epiphany/" rel="bookmark">Smart Bookmarks in Epiphany</a></li>
<li><a href="http://www.g-loaded.eu/2006/05/16/tab-session-management-extension-for-epiphany/" rel="bookmark">Tab Session Management extension for Epiphany</a></li>
<li><a href="http://www.g-loaded.eu/2008/02/25/size-text-with-em-in-your-css-explained-with-example/" rel="bookmark">Size text with em in your CSS &#8211; Explained with example</a></li>
<li><a href="http://www.g-loaded.eu/2006/01/04/bot-allow-content-wordpress-plugin/" rel="bookmark">Bot-Allow-Content WordPress plugin</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2011/04/02/the-read-it-later-extension/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Awaiting CentOS 6</title>
		<link>http://www.g-loaded.eu/2011/02/28/awaiting-centos-6/</link>
		<comments>http://www.g-loaded.eu/2011/02/28/awaiting-centos-6/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 11:30:11 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=2154</guid>
		<description><![CDATA[I feel that the long awaited CentOS 6 will be out soon. This is a very important release for all the things I am involved with and have to do with computers. CentOS 5 was perfect, but I had to maintain several custom builds of RPMs, mainly rebuilds of Fedora RPMs plus some private builds, [...]]]></description>
			<content:encoded><![CDATA[<p>I feel that the long awaited <strong>CentOS 6</strong> will be out soon. This is a very important release for all the things I am involved with and have to do with computers. CentOS 5 was perfect, but I had to maintain several custom builds of RPMs, mainly rebuilds of Fedora RPMs plus some private builds, and also several patches of Python applications which were not compatible with Python 2.4, which ships with CentOS 5. The 6th version of CentOS will eliminate the need to maintain so much custom software. I&#8217;ve already downloaded the RHEL 6 Server ISO image from Red Hat and checked it in Virtualbox. I am so satisfied with the quality and features of the 6.X series, that I seriously think I should stick with it for good, even after it reaches EOL. This is something I had been thinking about for the last months. Of course there are some things, like security, I want to examine thoroughly before going that way, but I will post more on this topic in a future post.</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2011/02/28/awaiting-centos-6/">Awaiting CentOS 6</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2009/04/09/yum-priorities-configuration-for-a-centos-desktop/" rel="bookmark">YUM-Priorities Configuration for a CentOS Desktop</a></li>
<li><a href="http://www.g-loaded.eu/2009/04/07/sticking-with-centos-rpmforge-and-yum-priorities-for-now/" rel="bookmark">Sticking with CentOS, RPMforge and yum-priorities for now</a></li>
<li><a href="http://www.g-loaded.eu/2009/12/18/high-cpu-usage-centos-guest-virtualbox-vmware/" rel="bookmark">High CPU usage while running CentOS as guest on Virtualbox or VMware</a></li>
<li><a href="http://www.g-loaded.eu/2011/05/12/running-supervisor-3-on-centos-5/" rel="bookmark">Running supervisor 3 on CentOS 5</a></li>
<li><a href="http://www.g-loaded.eu/2009/10/05/fedora-server-vs-centos/" rel="bookmark">Fedora Server vs CentOS</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2011/02/28/awaiting-centos-6/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Declutter Plugin for WordPress</title>
		<link>http://www.g-loaded.eu/2010/09/17/declutter-plugin-for-wordpress/</link>
		<comments>http://www.g-loaded.eu/2010/09/17/declutter-plugin-for-wordpress/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 21:28:04 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=1889</guid>
		<description><![CDATA[Web applications that add unnecessary HTTP headers or meta tags and links in the HTML HEAD section of my web pages usually make me nervous. Today, WordPress, once again, made me spend my free time trying to find which filters add such useless data in my web pages and try to remove it. Removing the [...]]]></description>
			<content:encoded><![CDATA[<p>Web applications that add unnecessary <em>HTTP headers</em> or <em>meta tags</em> and <em>links</em> in the HTML HEAD section of my web pages usually make me nervous. Today, WordPress, once again, made me spend my free time trying to find which filters add such useless data in my web pages and try to remove it. Removing the meta tags and links from the HTML head was rather easy using the <em>remove_action()</em> function, but the HTTP headers gave me a hard time. Before giving up, I decided to search for a plugin that could possibly provide a solution. Fortunately, I discovered a great plugin, named <a href="http://rayofsolaris.net/code/?p=declutter-wordpress">WP-Declutter</a>, which makes it possible to remove all that useless stuff in one go. Below, there is some information about which items I have removed.<br />
<span id="more-1889"></span><br />
First of all, I should say that the plugin&#8217;s feature set by far exceeded my expectations as it can remove links and metatags from the HTML HEAD area, HTTP headers added by WordPress, the generator element of the feeds, and also various classes WP adds to various HTML elements.</p>
<p>I removed the following items from the HTML HEAD:</p>
<ul>
<li>Link to the Really Simple Discovery service endpoint. That&#8217;s the link to: <code>/xmlrpc.php?rsd</code></li>
<li>Link to the first post on your blog.</li>
<li>Link to the Windows Live Writer manifest file. That&#8217;s the link to: <code>/wp-includes/wlwmanifest.xml</code></li>
<li>The generator meta tag.</li>
<li>The shortlink.</li>
</ul>
<p>From the &#8220;feeds&#8221; section I removed the the &#8220;<em>generator</em>&#8221; element.</p>
<p>Finally, from the HTTP headers section I removed everything. In my case, the <strong>ETag</strong>, <strong>Expires</strong> and <strong>Cache-Control</strong> headers are added by the webserver (<em>FileETags</em> and <em>mod_expires</em>). If this is not the case for you, then consider keeping these enabled.</p>
<p>Another thing you should keep in mind is that if you use any caching mechanism, like <strong>WP-Super-Cache</strong>, make sure you clear the cache after you make any changes in the WP-Clutter&#8217;s administration panel, otherwise the changes you made will be visible after the cached pages expire.</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2010/09/17/declutter-plugin-for-wordpress/">Declutter Plugin for WordPress</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2008/05/09/remove-generator-meta-tag-wordpress-plugin/" rel="bookmark">Remove-Generator-Meta-Tag WordPress Plugin</a></li>
<li><a href="http://www.g-loaded.eu/2007/01/31/wordpress-meta-tags-plugin-stable-release/" rel="bookmark">WordPress Meta Tags plugin stable release</a></li>
<li><a href="http://www.g-loaded.eu/2006/01/05/add-meta-tags-wordpress-plugin/" rel="bookmark">Add-Meta-Tags WordPress Plugin</a></li>
<li><a href="http://www.g-loaded.eu/2007/09/27/add-meta-tags-and-wordpress-23/" rel="bookmark">Add-Meta-Tags and WordPress 2.3</a></li>
<li><a href="http://www.g-loaded.eu/2006/01/05/my-tags-wordpress-plugin/" rel="bookmark">My-Tags WordPress Plugin</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2010/09/17/declutter-plugin-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Software that detects violations of open source licenses</title>
		<link>http://www.g-loaded.eu/2010/04/16/software-that-detects-violations-of-open-source-licenses/</link>
		<comments>http://www.g-loaded.eu/2010/04/16/software-that-detects-violations-of-open-source-licenses/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 14:57:24 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Analysis]]></category>
		<category><![CDATA[Binary]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=1788</guid>
		<description><![CDATA[The rules make the game. You take out the rules, the game goes up in smoke. I think it&#8217;s still fine if someone takes advantage of any inconsistencies between the rules to win the game, but cheating is completely unacceptable. In the free software world, it&#8217;s neither the maker of the software nor the market, [...]]]></description>
			<content:encoded><![CDATA[<p>The <strong>rules</strong> make the <strong>game</strong>. You take out the rules, the game goes up in smoke. I think it&#8217;s still fine if someone takes advantage of any inconsistencies between the rules to win the game, but cheating is completely unacceptable.<br />
<span id="more-1788"></span><br />
In the free software world, it&#8217;s neither the maker of the software nor the market, via supply and demand, that set the rules of the game, but <strong>software licenses</strong>. That&#8217;s why today I was excited to learn about the existence of a software that can determine whether code, that has been released under a free/open-source license, has been used in another software by performing <strong>binary analysis</strong>, examination of files in <em>binary form</em>. The excitement is not because of some sort of personal benefit from this software. It&#8217;s just good to know that it is possible to develop tools that can defend open-source code, even if they have to analyze the derived binary file. At the moment the tool supports:</p>
<ul>
<li>Automated extraction of the version and configuration of BusyBox</li>
<li>Extraction of file systems</li>
<li>Automated checking for the Linux kernel</li>
<li>Brute force scanning of firmware</li>
<li>Feeding known information through a knowledgebase</li>
</ul>
<p>This means that, currently, it can detect the <a href="http://kernel.org">kernel</a> and <a href="http://www.busybox.net/">busybox</a> in the firmware of electronic devices. I have no clue about its effectiveness and, possibly, I won&#8217;t be trying it any time soon, but, if you are interested, make sure you read more information about the <a href="http://www.binaryanalysis.org/en/content/show/tool">features of the Binary Analysis Tool</a> and check out the <a href="http://www.binaryanalysis.org/trac/browser/trunk">code</a>.</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2010/04/16/software-that-detects-violations-of-open-source-licenses/">Software that detects violations of open source licenses</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2006/04/07/microsofts-open-source-software-lab/" rel="bookmark">Microsoft&#8217;s Open Source Software Lab</a></li>
<li><a href="http://www.g-loaded.eu/2007/07/29/best-practices-of-software-licensing/" rel="bookmark">Best Practices of Software Licensing</a></li>
<li><a href="http://www.g-loaded.eu/2011/03/02/rhel-kernel-source-released-with-patches-already-applied/" rel="bookmark">RHEL kernel source released with patches already applied</a></li>
<li><a href="http://www.g-loaded.eu/2006/12/20/open-source-guitar-sound-effect-processor/" rel="bookmark">Open-Source Guitar Sound Effect Processor</a></li>
<li><a href="http://www.g-loaded.eu/2007/02/24/creative-commons-v30-licenses-launched/" rel="bookmark">Creative Commons v3.0 Licenses Launched</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2010/04/16/software-that-detects-violations-of-open-source-licenses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Python SSH Server for UNIX Systems using Twisted.conch</title>
		<link>http://www.g-loaded.eu/2010/03/26/python-ssh-server-unix-twisted-conch/</link>
		<comments>http://www.g-loaded.eu/2010/03/26/python-ssh-server-unix-twisted-conch/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:27:00 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Remote]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Twisted]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=1572</guid>
		<description><![CDATA[I can still recall the excitement of the first time I tried to access and administer a remote system using SSH. Accessing my shell at a remote machine securely, being able to do local and remote port forwarding in order to access remote services through encrypted tunnels, X forwarding, secure file transfers using scp or [...]]]></description>
			<content:encoded><![CDATA[<p>I can still recall the excitement of the first time I tried to access and administer a remote system using <strong>SSH</strong>. Accessing my shell at a remote machine securely, being able to do local and remote port forwarding in order to access remote services through encrypted tunnels, X forwarding, secure file transfers using <em>scp</em> or <em>sftp</em>, <a href="http://www.g-loaded.eu/2005/11/10/ssh-with-keys/">authentication using public key infrastructure</a> are just a few of the features that justify the excitement of the first time. The only <em>Secure Shell</em> server implementation I had used all that time was the <a href="http://www.openssh.com/">OpenSSH</a> server. Although this is an open-source project, the fact that it is written in C makes it extremely difficult for me to have fun with it by making any modifications in order to implement even simple things like command filtering. This is because I have never programmed in <strong>C</strong> and do not intend to learn how to do it in the foreseeable future. So what I&#8217;ve been looking for today was a server implementation of the <strong>SSH2 protocol</strong> written in <a href="http://python.org">Python</a>. Unfortunately, there is no such project ready for immediate use. I had to hack my own! After several hours of trial and error, having written dozens of sample scripts for testing, I finally created a minimal project, called <strong>RapidSSH</strong>, in order to demonstrate how to create a fully functional SSH server with just a few lines of Python code by using <em>Twisted.conch</em>, part of the <a href="http://twistedmatrix.com">Twisted Framework</a>. Read on&#8230;<br />
<span id="more-1572"></span><br />
At first, I tried to experiment with the <a href="http://twistedmatrix.com/documents/current/conch/examples/sshsimpleserver.py">sshsimpleserver.py</a> example script that exists on the Twisted homepage. But, soon I realized that this script is there just to give an idea about how to use <code>Twisted.conch</code> and also provide a sensible starting point for your own implementations. That script was not even close in having the functionality I had in mind. After spending some time examining the Twisted source code, I found a fantastic, but completely undocumented, module: <a href="http://twistedmatrix.com/trac/browser/trunk/twisted/conch/unix.py">twisted.conch.unix</a>. Having gained some experience by my experimentation with <code>sshsimpleserver.py</code> I managed to easily put the pieces together and come up with the SSH server implementation as shown below.</p>
<p>But first, let&#8217;s install some <strong>dependencies</strong>. I assume that you will try the code on a machine aimed for testing, so I won&#8217;t be using the system&#8217;s package manager but instead use <strong>easy_install</strong> to install the needed Python modules. Other commands like <em>pip</em> could be used as well. If you do not want to mess with your system-wide python installation, just use <strong>virtualenv</strong> and <strong>pip</strong>, but I won&#8217;t go into the details about how to use these tools in the current document.</p>
<p>Install the needed dependencies:</p>
<pre class="console">
easy_install pycrypto
easy_install pyasn1
easy_install pam
easy_install twisted
</pre>
<p>Make sure you have <strong>gcc</strong> installed, because it will be needed to complete the installation of Twisted and PyCrypto.</p>
<p>I have created a project for this code at <strong>Bitbucket</strong>, called <a href="http://bitbucket.org/gnotaras/rapidssh/">RapidSSH</a>. This will make it easier to share code and ideas about SSH server implementations in Python using Twisted.</p>
<p>Filename: <code>scripts/rapidsshd_unix.py</code></p>
<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># This file is part of rapidssh - http://bitbucket.org/gnotaras/rapidssh/</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># rapidssh - A set of Secure Shell (SSH) server implementations in Python</span>
<span style="color: #808080; font-style: italic;">#            using Twisted.conch, part of the Twisted Framework.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Copyright (c) 2010 George Notaras - http://www.g-loaded.eu</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Permission is hereby granted, free of charge, to any person obtaining a copy</span>
<span style="color: #808080; font-style: italic;"># of this software and associated documentation files (the &quot;Software&quot;), to deal</span>
<span style="color: #808080; font-style: italic;"># in the Software without restriction, including without limitation the rights</span>
<span style="color: #808080; font-style: italic;"># to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</span>
<span style="color: #808080; font-style: italic;"># copies of the Software, and to permit persons to whom the Software is</span>
<span style="color: #808080; font-style: italic;"># furnished to do so, subject to the following conditions:</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># The above copyright notice and this permission notice shall be included in</span>
<span style="color: #808080; font-style: italic;"># all copies or substantial portions of the Software.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
<span style="color: #808080; font-style: italic;"># IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
<span style="color: #808080; font-style: italic;"># FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
<span style="color: #808080; font-style: italic;"># AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
<span style="color: #808080; font-style: italic;"># LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span>
<span style="color: #808080; font-style: italic;"># OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span>
<span style="color: #808080; font-style: italic;"># THE SOFTWARE.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Initially based on the sshsimpleserver.py kindly published by:</span>
<span style="color: #808080; font-style: italic;"># Twisted Matrix Laboratories - http://twistedmatrix.com</span>
<span style="color: #808080; font-style: italic;">#</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> pam
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">conch</span>.<span style="color: black;">unix</span> <span style="color: #ff7700;font-weight:bold;">import</span> UnixSSHRealm
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">cred</span> <span style="color: #ff7700;font-weight:bold;">import</span> portal
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">cred</span>.<span style="color: black;">credentials</span> <span style="color: #ff7700;font-weight:bold;">import</span> IUsernamePassword
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">cred</span>.<span style="color: black;">checkers</span> <span style="color: #ff7700;font-weight:bold;">import</span> ICredentialsChecker
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">cred</span>.<span style="color: black;">error</span> <span style="color: #ff7700;font-weight:bold;">import</span> UnauthorizedLogin
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">conch</span>.<span style="color: black;">checkers</span> <span style="color: #ff7700;font-weight:bold;">import</span> SSHPublicKeyDatabase
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">conch</span>.<span style="color: black;">ssh</span> <span style="color: #ff7700;font-weight:bold;">import</span> factory, userauth, connection, keys, session
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">internet</span> <span style="color: #ff7700;font-weight:bold;">import</span> reactor, defer
<span style="color: #ff7700;font-weight:bold;">from</span> zope.<span style="color: black;">interface</span> <span style="color: #ff7700;font-weight:bold;">import</span> implements
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">python</span> <span style="color: #ff7700;font-weight:bold;">import</span> log
&nbsp;
<span style="color: #808080; font-style: italic;"># Logging</span>
<span style="color: #808080; font-style: italic;"># Currently logging to STDERR</span>
log.<span style="color: black;">startLogging</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Server-side public and private keys. These are the keys found in</span>
<span style="color: #808080; font-style: italic;"># sshsimpleserver.py. Make sure you generate your own using ssh-keygen!</span>
&nbsp;
publicKey = <span style="color: #483d8b;">'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEArzJx8OYOnJmzf4tfBEvLi8DVPrJ3/c9k2I/Az64fxjHf9imyRJbixtQhlH9lfNjUIx+4LmrJH5QNRsFporcHDKOTwTTYLh5KmRpslkYHRivcJSkbh/C+BR3utDS555mV'</span>
&nbsp;
privateKey = <span style="color: #483d8b;">&quot;&quot;&quot;-----BEGIN RSA PRIVATE KEY-----
MIIByAIBAAJhAK8ycfDmDpyZs3+LXwRLy4vA1T6yd/3PZNiPwM+uH8Yx3/YpskSW
4sbUIZR/ZXzY1CMfuC5qyR+UDUbBaaK3Bwyjk8E02C4eSpkabJZGB0Yr3CUpG4fw
vgUd7rQ0ueeZlQIBIwJgbh+1VZfr7WftK5lu7MHtqE1S1vPWZQYE3+VUn8yJADyb
Z4fsZaCrzW9lkIqXkE3GIY+ojdhZhkO1gbG0118sIgphwSWKRxK0mvh6ERxKqIt1
xJEJO74EykXZV4oNJ8sjAjEA3J9r2ZghVhGN6V8DnQrTk24Td0E8hU8AcP0FVP+8
PQm/g/aXf2QQkQT+omdHVEJrAjEAy0pL0EBH6EVS98evDCBtQw22OZT52qXlAwZ2
gyTriKFVoqjeEjt3SZKKqXHSApP/AjBLpF99zcJJZRq2abgYlf9lv1chkrWqDHUu
DZttmYJeEfiFBBavVYIF1dOlZT0G8jMCMBc7sOSZodFnAiryP+Qg9otSBjJ3bQML
pSTqy7c3a2AScC/YyOwkDaICHnnD3XyjMwIxALRzl0tQEKMXs6hH8ToUdlLROCrP
EhQ0wahUTCk1gKA4uPD6TMTChavbh4K63OvbKg==
-----END RSA PRIVATE KEY-----&quot;&quot;&quot;</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> PamPasswordDatabase:
    <span style="color: #483d8b;">&quot;&quot;&quot;Authentication/authorization backend using the 'login' PAM service&quot;&quot;&quot;</span>
    credentialInterfaces = IUsernamePassword,
    implements<span style="color: black;">&#40;</span>ICredentialsChecker<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> requestAvatarId<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, credentials<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> pam.<span style="color: black;">authenticate</span><span style="color: black;">&#40;</span>credentials.<span style="color: black;">username</span>, credentials.<span style="color: black;">password</span><span style="color: black;">&#41;</span>:
            <span style="color: #ff7700;font-weight:bold;">return</span> defer.<span style="color: black;">succeed</span><span style="color: black;">&#40;</span>credentials.<span style="color: black;">username</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> defer.<span style="color: black;">fail</span><span style="color: black;">&#40;</span>UnauthorizedLogin<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;invalid password&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> UnixSSHdFactory<span style="color: black;">&#40;</span>factory.<span style="color: black;">SSHFactory</span><span style="color: black;">&#41;</span>:
    publicKeys = <span style="color: black;">&#123;</span>
        <span style="color: #483d8b;">'ssh-rsa'</span>: keys.<span style="color: black;">Key</span>.<span style="color: black;">fromString</span><span style="color: black;">&#40;</span>data=publicKey<span style="color: black;">&#41;</span>
    <span style="color: black;">&#125;</span>
    privateKeys = <span style="color: black;">&#123;</span>
        <span style="color: #483d8b;">'ssh-rsa'</span>: keys.<span style="color: black;">Key</span>.<span style="color: black;">fromString</span><span style="color: black;">&#40;</span>data=privateKey<span style="color: black;">&#41;</span>
    <span style="color: black;">&#125;</span>
    services = <span style="color: black;">&#123;</span>
        <span style="color: #483d8b;">'ssh-userauth'</span>: userauth.<span style="color: black;">SSHUserAuthServer</span>,
        <span style="color: #483d8b;">'ssh-connection'</span>: connection.<span style="color: black;">SSHConnection</span>
    <span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Components have already been registered in twisted.conch.unix</span>
&nbsp;
portal = portal.<span style="color: black;">Portal</span><span style="color: black;">&#40;</span>UnixSSHRealm<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
portal.<span style="color: black;">registerChecker</span><span style="color: black;">&#40;</span>PamPasswordDatabase<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>   <span style="color: #808080; font-style: italic;"># Supports PAM</span>
portal.<span style="color: black;">registerChecker</span><span style="color: black;">&#40;</span>SSHPublicKeyDatabase<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>  <span style="color: #808080; font-style: italic;"># Supports PKI</span>
UnixSSHdFactory.<span style="color: black;">portal</span> = portal
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    reactor.<span style="color: black;">listenTCP</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5022</span>, UnixSSHdFactory<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    reactor.<span style="color: black;">run</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>
<p>Some notes:</p>
<ul>
<li>The server uses the very same public and private keys as found in the <code>sshsimpleserver.py</code> script. Make sure you generate new keys using <strong>ssh-keygen</strong> if you plan to run this on a public server (although this not recommended).</li>
<li>Twisted included a module for PAM authentication, <code>twisted.cred.pamauth</code>, but unfortunately I could not locate one of its dependencies to make it work. So, I used the excellent <a href="http://atlee.ca/software/pam/">python-pam</a> to create a custom PAM authenticator class.</li>
<li>I can guess what you might thought when you read about this code:<br />
<blockquote>Python is a cross-platform programming language. Twisted runs on Windows. So, is this a solution for running a SSH server on Win32?</p></blockquote>
<p> Well, at the moment it won&#8217;t run because internally it uses some Python modules that are available on UNIX platforms only. But, I intend to investigate the possibility of running this on <strong>Windows</strong> since I already need something like that.</li>
</ul>
<p>We can now enjoy our Python SSH server. Run as root:</p>
<pre class="console">
python scripts/rapidsshd_unix.py
</pre>
<p>From another machine, connect to the server using an <em>ssh client</em>:</p>
<pre class="console">
ssh -p 5022 rocky@arena
</pre>
<p>If you have deployed your public key in the <code>~/.ssh/authorized_keys</code> file on the remote machine (<em>arena</em>), you should be able to authenticate using the public key:</p>
<pre class="console">
ssh -p 5022 -i /path/to/private.key rocky@arena
</pre>
<p>You should get output like the following on the server:</p>
<pre class="console">
[root@arena ~]# python ssh.py
2010-03-26 21:30:05+0000 [-] Log opened.
2010-03-26 21:30:05+0000 [-] __main__.UnixSSHdFactory starting on 5022
2010-03-26 21:30:05+0000 [-] Starting factory <__main__.UnixSSHdFactory instance at 0xb7a0b0cc>
2010-03-26 21:30:13+0000 [__main__.UnixSSHdFactory] disabling diffie-hellman-group-exchange because we cannot find moduli file
2010-03-26 21:30:13+0000 [SSHServerTransport,0,192.168.0.172] kex alg, key alg: diffie-hellman-group1-sha1 ssh-rsa
2010-03-26 21:30:13+0000 [SSHServerTransport,0,192.168.0.172] outgoing: aes256-ctr hmac-sha1 none
2010-03-26 21:30:13+0000 [SSHServerTransport,0,192.168.0.172] incoming: aes256-ctr hmac-sha1 none
2010-03-26 21:30:14+0000 [SSHServerTransport,0,192.168.0.172] NEW KEYS
2010-03-26 21:30:14+0000 [SSHServerTransport,0,192.168.0.172] starting service ssh-userauth
2010-03-26 21:30:17+0000 [SSHService ssh-userauth on SSHServerTransport,0,192.168.0.172] rocky trying auth none
2010-03-26 21:30:17+0000 [SSHService ssh-userauth on SSHServerTransport,0,192.168.0.172] rocky trying auth publickey
2010-03-26 21:30:17+0000 [SSHService ssh-userauth on SSHServerTransport,0,192.168.0.172] rocky trying auth publickey
2010-03-26 21:30:17+0000 [SSHService ssh-userauth on SSHServerTransport,0,192.168.0.172] rocky authenticated with publickey
2010-03-26 21:30:17+0000 [SSHService ssh-userauth on SSHServerTransport,0,192.168.0.172] starting service ssh-connection
2010-03-26 21:30:17+0000 [SSHService ssh-connection on SSHServerTransport,0,192.168.0.172] got channel session request
2010-03-26 21:30:17+0000 [SSHChannel session (0) on SSHService ssh-connection on SSHServerTransport,0,192.168.0.172] channel open
2010-03-26 21:30:17+0000 [SSHChannel session (0) on SSHService ssh-connection on SSHServerTransport,0,192.168.0.172] pty request: xterm (24L, 80L, 0L, 0L)
2010-03-26 21:30:17+0000 [SSHChannel session (0) on SSHService ssh-connection on SSHServerTransport,0,192.168.0.172] getting shell
</pre>
<p>This first release of the <a href="http://bitbucket.org/gnotaras/rapidssh/">RapidSSH</a> project exists solely for demonstration purposes. Don&#8217;t get fooled by the small amount of code. Information about how to put the pieces together is scarce and it required a lot trial&#038;error and source code reading. The above implementation contains none of the customizations I had in mind. These will be done as soon as I find some time to do so. Until then it will be nice to hear about your experiences or implementations you have worked on.</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2010/03/26/python-ssh-server-unix-twisted-conch/">Python SSH Server for UNIX Systems using Twisted.conch</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2006/09/23/use-python-to-get-the-web-page-data-in-epiphany/" rel="bookmark">Use Python to get the web page data in Epiphany</a></li>
<li><a href="http://www.g-loaded.eu/2006/05/17/epiphany-python-console-open-new-tab/" rel="bookmark">Epiphany Python Console &#8211; Open New Tab</a></li>
<li><a href="http://www.g-loaded.eu/2007/01/31/python-irc-bot/" rel="bookmark">Python IRC Bot</a></li>
<li><a href="http://www.g-loaded.eu/2006/04/07/python-crash-course/" rel="bookmark">Python Crash Course</a></li>
<li><a href="http://www.g-loaded.eu/2005/11/10/configure-vnc-server-in-fedora/" rel="bookmark">Set up the VNC Server in Fedora</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2010/03/26/python-ssh-server-unix-twisted-conch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Mozilla Thunderbird 3 is out!</title>
		<link>http://www.g-loaded.eu/2009/12/09/mozilla-thunderbird-3-is-out/</link>
		<comments>http://www.g-loaded.eu/2009/12/09/mozilla-thunderbird-3-is-out/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 11:36:17 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[Maintenance]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Thunderbird]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=1492</guid>
		<description><![CDATA[Mozilla has announced the general availability of version 3 of its popular open source email &#038; newsgroup client, Thunderbird. Thunderbird has been my desktop email client of choice since its early stable releases, both in Linux and Windows. Actually, the only programs I&#8217;ve ever used for email and newsgroup management are Outlook Express, Mozilla Thunderbird [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mozilla.org">Mozilla</a> has <a href="http://en-us.www.mozillamessaging.com/en-US/about/press/archive/2009-12-08-01">announced</a> the general availability of version 3 of its popular <strong>open source</strong> <em>email &#038; newsgroup client</em>, <a href="http://en-us.www.mozillamessaging.com/en-US/thunderbird/">Thunderbird</a>. Thunderbird has been my desktop email client of choice since its early stable releases, both in Linux and Windows. Actually, the only programs I&#8217;ve ever used for email and newsgroup management are <strong>Outlook Express</strong>, <strong>Mozilla Thunderbird</strong> and <strong>Novell/Ximian Evolution</strong>. Out of those 3, Thunderbird, although not a strong candidate when it comes to <em>performance</em>, ranks 1st, since it offers the best:</p>
<ol>
<li>security</li>
<li>reliability</li>
<li>backwards compatibility</li>
<li>extensibility</li>
</ol>
<p>A few years ago, I had published an approach on <a href="http://www.g-loaded.eu/2007/03/05/organizing-mailing-list-messages-with-evolution/">how to organize mailing list messages</a> using Evolution. The same <em>tips and tricks</em> apply to <em>Thunderbird</em>, so those of you who deal with many mailing lists might find that old article interesting.</p>
<p>The <strong>highlights</strong> of the new release include:<br />
<span id="more-1492"></span></p>
<ul>
<li><strong>Tabbed Email</strong>: Provides the ability view individual emails and folders in tabs.</li>
<li><strong>Filtered Search</strong>: The new search interface contains filtering and timeline tools</li>
<li><strong>Message Archive</strong>: When an email message is archived, it is moved from the inbox into the new archive folder system, de-cluttering the inbox, while, at the same time, enabling users to find email months or years from now.</li>
<li><strong>One-click Address Book</strong>: A very quick and easy way to add people to an address book, by simply clicking on the star icon in the messages received from new correspondents.</li>
<li><strong>New Mail Account Setup Wizard</strong>: Getting started with Thunderbird 3 is faster than ever with the new account set-up wizard that requires simple information, like email addresses and passwords to get going instead of a user&#8217;s IMAP, SMTP, SSL/TLS settings.</li>
<li><strong>Smart Folders</strong>: Combines individual mailboxes to help manage multiple email accounts in one spot. For example, by selecting the Inbox, users can view all the incoming emails from all their different accounts without having to go to each email account separately.</li>
<li><strong>Add-ons Manager</strong>: The new add-ons manager can help users find, download, and install hundreds of add-ons enabling them to customize Thunderbird 3 and add functionality or change the appearance.</li>
<li><strong>Gecko 1.9.1 Engine</strong>: The same Web page rendering engine and graphics infrastructure used in Firefox, provides the latest Web Standards support and security enhancements.</li>
<li><strong>Automated Updates</strong>: Thunderbird&#8217;s update system notifies users when a security update is available and automates the download and installation process to keep users safe.</li>
</ul>
<p>Now, I am off to test this beast&#8217;s new features&#8230;</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2009/12/09/mozilla-thunderbird-3-is-out/">Mozilla Thunderbird 3 is out!</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2011/09/09/mozilla-thunderbird-speed-up/" rel="bookmark">Mozilla Thunderbird speed up</a></li>
<li><a href="http://www.g-loaded.eu/2007/03/05/organizing-mailing-list-messages-with-evolution/" rel="bookmark">Organizing Mailing List messages with Evolution</a></li>
<li><a href="http://www.g-loaded.eu/2007/08/20/mailing-list-manager/" rel="bookmark">Mailing List Manager</a></li>
<li><a href="http://www.g-loaded.eu/2007/08/17/next-time-come-prepared/" rel="bookmark">Next time, come prepared</a></li>
<li><a href="http://www.g-loaded.eu/2007/02/20/application-testing-zero-free-space/" rel="bookmark">Application Testing: Zero Free Space</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2009/12/09/mozilla-thunderbird-3-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Shred changes default number of passes to 3</title>
		<link>http://www.g-loaded.eu/2009/01/23/shred-changes-default-number-of-passes-to-3/</link>
		<comments>http://www.g-loaded.eu/2009/01/23/shred-changes-default-number-of-passes-to-3/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 23:22:14 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Patch]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=869</guid>
		<description><![CDATA[I thought it would be nice to share with you that I received a comment from Pádraig Brady, member of the GNU Core Utilities (coreutils) maintainers team, on yesterday&#8217;s post about effective data wiping saying that he has decreased shred&#8216;s default number of passes from 25 to 3, as shown in this git commit. The [...]]]></description>
			<content:encoded><![CDATA[<p>I thought it would be nice to share with you that I received a comment from <a href="http://www.pixelbeat.org/">Pádraig Brady</a>, member of the <a href="http://savannah.gnu.org/projects/coreutils">GNU Core Utilities</a> (coreutils) maintainers team, on yesterday&#8217;s <a href="http://www.g-loaded.eu/2009/01/22/effective-data-wiping-with-a-single-complete-overwrite/">post about effective data wiping</a> saying that he has decreased <strong>shred</strong>&#8216;s default <em>number of passes</em> from 25 to 3, as shown in this <a href="http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commit;h=83ae1bdd44432055e2cb6cf1502d1cc0cd651746">git commit</a>. The commit&#8217;s comment reveals that there has been a discussion on this matter:</p>
<pre class="codesnp">
shred: change default number of overwrites from 25 to 3
* src/shred.c: The concensus is that a default of 3
passes is appropriate for current drive technologies.
* src/TODO: Reference Paul Eggert's suggestion
of enhancing shred to conform to DoD 5220 rules.
</pre>
<p>I would like to publicly thank Pádraig for the feedback. There are times that the open source development model takes me by surprise.</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2009/01/23/shred-changes-default-number-of-passes-to-3/">Shred changes default number of passes to 3</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
  <p>No related articles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2009/01/23/shred-changes-default-number-of-passes-to-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>delayed-shutdown initscript</title>
		<link>http://www.g-loaded.eu/2008/11/28/delayed-shutdown-initscript/</link>
		<comments>http://www.g-loaded.eu/2008/11/28/delayed-shutdown-initscript/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 00:36:42 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=684</guid>
		<description><![CDATA[delayed-shutdown is an initscript that delays the shutdown (runlevel 0) or reboot (runlevel 6) procedure as long as a pre-defined lock file exists. The goal is to create a mechanism, which can be used by programs that perform critical operations that must not be interrupted, in order to delay system shutdown until these programs have [...]]]></description>
			<content:encoded><![CDATA[<p><strong>delayed-shutdown</strong> is an initscript that delays the shutdown (runlevel 0) or reboot (runlevel 6) procedure as long as a pre-defined <strong>lock</strong> file exists. The goal is to create a mechanism, which can be used by programs that perform critical operations that must not be interrupted, in order to delay system shutdown until these programs have finished their job. The whole concept is very simple: the program, for instance a backup script, creates a pre-defined lockfile at a pre-defined location (<em>lock is acquired</em>). If a shutdown or reboot is initiated while the script is still active, <strong>delayed-shutdown</strong> checks for the existence of the lockfile and, if it finds it, it delays the system shutdown/reboot while it periodically continues to check for the existence of the lockfile. Whenever the backup script finishes its operation and deletes the lockfile (<em>lock is released</em>), <strong>delayed-shutdown</strong> lets the system go down.</p>
<p><strong>Note</strong>: in a previous post I had tried to <a href="http://www.g-loaded.eu/2008/11/26/using-a-switch-to-prevent-system-shutdownrebootsuspend/">implement a shutdown/reboot/suspend prevention switch</a> using various <em>inefficient methods</em>. After receiving some pointers from members of the Linux-Greek-Users mailing list, I studied the initscript mechanism and wrote this solution. It has been tested on Fedora only and is <strong>released for Fedora and RedHat based linux distributions</strong>. I would appreciate feedback about its compatibility with <strong>Debian</strong> or <strong>Gentoo</strong> based systems.<br />
<span id="more-684"></span></p>
<h4>Manual Installation</h4>
<p>As user &#8216;<strong>root</strong>&#8216; follow the instructions to install the file in your <em>initscripts directory</em>:</p>
<pre class="console">
cp delayed-shutdown /etc/init.d/
chmod +x /etc/init.d/delayed-shutdown
</pre>
<p>For RedHat and relatives run:</p>
<pre class="console">
chkconfig --add delayed-shutdown
</pre>
<p>For Debian and relatives run:</p>
<pre class="console">
update-rc.d delayed-shutdown defaults
</pre>
<h4>Manual De-installation</h4>
<p>If for any reason you need to remove &#8216;delayed-shutdown&#8217; from your system do the following:</p>
<p>For RedHat and relatives run:</p>
<pre class="console">
chkconfig --del delayed-shutdown
</pre>
<p>For Debian and relatives run:</p>
<pre class="console">
update-rc.d -f delayed-shutdown remove
</pre>
<p>Delete the initscript:</p>
<pre class="console">
rm /etc/init.d/delayed-shutdown
</pre>
<h4>Usage</h4>
<p>In order to delay the shutdown process until your software finishes its operation, you should create the no-shutdown lock file:</p>
<pre class="codesnp">
/var/lock/noshutdown.lock
</pre>
<p>Then let your software do its job and, when finished, delete the no-shutdown lock file. In case of a script that would be:</p>
<pre class="codesnp">
lockfile /var/lock/noshutdown.lock
... [script is working] ...
rm -f /var/lock/noshutdown.lock
</pre>
<h4>Test</h4>
<p>A test script, test.sh, is included in the distribution package. In order perform a test, do the following:</p>
<ul>
<li>Make sure you have installed the <strong>delayed-shutdown</strong> initscript as described in the &#8220;installation section.</li>
<li>Run test.sh: <strong>./test.sh &#038;</strong></li>
<li>Reboot or shutdown the machine</li>
</ul>
<p><code>Test.sh</code> will acquire the lock, sleep in the background for 90 seconds and then release the lock. The shutdown/reboot procedure will continue after the lock has been released.</p>
<h4>Download</h4>
<p>All versions of the software, including the latest stable release, are available from the development web site&#8217;s <a href="http://www.codetrax.org/projects/delayed-shutdown/files">download area</a>.</p>
<h4>Misc</h4>
<p>The initscript <em>delayed-shutdown</em> is released under the terms of the MIT license.</p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2008/11/28/delayed-shutdown-initscript/">delayed-shutdown initscript</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2008/11/26/using-a-switch-to-prevent-system-shutdownrebootsuspend/" rel="bookmark">Using a switch to prevent system shutdown/reboot/suspend</a></li>
<li><a href="http://www.g-loaded.eu/2009/10/08/redmine-deployment-delayed/" rel="bookmark">Redmine deployment delayed</a></li>
<li><a href="http://www.g-loaded.eu/2009/10/30/selinux-setenforce-mode/" rel="bookmark">Using setenforce to switch SELinux mode wisely</a></li>
<li><a href="http://www.g-loaded.eu/2007/02/12/lock-out-a-user-after-n-failed-login-attempts/" rel="bookmark">Lock out a user after N failed login attempts</a></li>
<li><a href="http://www.g-loaded.eu/2009/02/01/xen-domu-using-dynamic-ip-and-hostname/" rel="bookmark">Xen DomU using dynamic IP and hostname</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2008/11/28/delayed-shutdown-initscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Fast-Static-Feed WordPress Plugin</title>
		<link>http://www.g-loaded.eu/2008/05/10/fast-static-feed-wordpress-plugin/</link>
		<comments>http://www.g-loaded.eu/2008/05/10/fast-static-feed-wordpress-plugin/#comments</comments>
		<pubDate>Sat, 10 May 2008 04:44:56 +0000</pubDate>
		<dc:creator>George Notaras</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Optimization]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Syndication]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">http://www.g-loaded.eu/?p=493</guid>
		<description><![CDATA[Syndicated content has almost become the standard way of distributing web content nowadays. WordPress can deliver its content in various different feed formats -RSS 2.0, Atom 1.0, RDF, RSS 0.92- and can generate feeds for both the published posts -grouped by time, category, tag, author etc- and the comments that have been submitted by readers. [...]]]></description>
			<content:encoded><![CDATA[<p>Syndicated content has almost become the standard way of distributing web content nowadays. <a href="http://wordpress.org/">WordPress</a> can deliver its content in various different feed formats -<em>RSS 2.0</em>, <em>Atom 1.0</em>, <em>RDF</em>, <em>RSS 0.92</em>- and can generate feeds for both the <em>published posts</em> -grouped by <em>time</em>, <em>category</em>, <em>tag</em>, <em>author</em> etc- and the <em>comments</em> that have been submitted by readers. Moreover, some <em>RSS add-on modules</em> are being used in the generated feeds, so that modern feed readers can even retrieve the submitted comments for each of the feed entries. It is obvious that all these features greatly enhance the user experience, but, on the other hand, depending on the website&#8217;s traffic they might increase the server load and thus the content delivery times.</p>
<p>Taking these things into consideration, I decided to write <strong><a href="http://www.g-loaded.eu/2008/05/10/fast-static-feed-wordpress-plugin/">Fast-Static-Feed</a></strong>, a plugin that can <strong>cache</strong> the site&#8217;s entries feed, and deliver a static XML file instead of constantly generating the feed content on every client request. This, combined with the fact that the web server can <a href="http://www.g-loaded.eu/2008/05/10/use-mod_deflate-to-compress-web-content-delivered-by-apache/">compress the web content on-the-fly</a>, has greatly reduced the waste of bandwidth and system resources.<br />
<span id="more-493"></span></p>
<h4>How it works</h4>
<p><strong>Fast-Static-Feed</strong> performs the following actions:</p>
<ul>
<li>Every time a post is <strong>published</strong> or an already published post is <strong>edited</strong>, the plugin dumps the <em>entries feed</em> (that is the feed of the blog posts) to a file. This way, the static XML file is always contains the most fresh content of your blog.</li>
<li>Every time a feed is requested, instead of re-generating the XML content over and over, this plugin delivers the static XML file. This is <strong>completely transparent</strong> to the client as there are no HTTP redirects involved. Your content is just being delivered faster!</li>
<li>If the plugin is enabled, but the static files have not been created yet, the plugin will try to generate them automatically. Upon failure to do so, a <code>404 Not Found</code> HTTP error code will be returned to the client.</li>
<li>It also checks if the client&#8217;s request includes the <a href="http://www.g-loaded.eu/2005/10/19/the-if-modified-since-http-header/">If-Modified-Since</a> HTTP header and, in such a case, it checks the static file&#8217;s <strong>modification time</strong>. If the client&#8217;s cache is current, it just returns a <code>304 Not Modified</code> status to further reduce bandwidth usage.</li>
</ul>
<p>The plugin caches all four types of feeds WordPress supports -<em>RSS 2.0</em>, <em>Atom 1.0</em>, <em>RDF</em>, <em>RSS 0.92</em>-.</p>
<p>Only the feeds that contain your blog posts are cached. The comments feed, each individual post&#8217;s comments feed, feeds for categories, tags, authors etc are <strong>still generated dynamically every time they are requested</strong>.</p>
<p>This plugin <strong>does not interefere in any way with the generation of <em>rewrite rules</em> and the generation of your site&#8217;s feed links</strong>.</p>
<h4>Configuration</h4>
<p>Generally, the plugin does not require any configuration in order to work.</p>
<p>One <strong>mandatory prerequisite</strong> is that the <code>wp-content/</code> directory is <strong>writable by the web server</strong>. If it is not, the plugin will not be able to create the static files and, consequently, the clients who request a feed will receive a <code>404 Not Found</code> HTTP code.</p>
<p>Furthermore, there are two options within the source code <code>fast-static-feed.php</code> that can be set.</p>
<pre class="codesnp">
// By default, the WordPress feeds contain elements of the 'wfw' namespace
// (CommentAPI), so a feed reader can fetch each feed entry's comments.
// By setting the following to 1, these elements will be stripped
// from the static feed.
// It is recommended to set this to 1 in order to save bandwidth.
// More info: http://wellformedweb.org/news/wfw_namespace_elements/
$FSF_STRIP_COMMENTS = 0;
// Set the following to 1 and various messages will be recorded in the logfile,
// which is located in the cache dir (wp-content/cache-xml/)
$FSF_DEBUG = 0;
</pre>
<p>It has already been mentioned, but it is important to note it again: The only <strong>mandatory prerequisite</strong> is that <code>wp-content/</code> is <strong>writable by the webserver</strong>.</p>
<h4>Installation</h4>
<p>Make any changes to the configuration options within <code>fast-static-feed.php</code> and upload the file to <code>wp-content/plugins/</code> directory. Then, <strong>activate</strong> the plugin through the WordPress administration panel.</p>
<h4>License</h4>
<p><em>Fast-Static-Feed</em> is an open-source project, released as Free Software under the terms of the <a href="http://www.codetrax.org/licenses/ApacheLicenseV2">Apache License version 2</a>.</p>
<h4>Downloads, Issue Tracking, Support</h4>
<p>For the <strong>latest releases</strong> of <em>Fast-Static-Feed</em> please visit the <a href="http://www.codetrax.org/projects/wp-fast-static-feed/files">downloads</a> section of the <a href="http://www.codetrax.org/projects/wp-fast-static-feed">Fast-Static-Feed Development Portal</a>.</p>
<p>The development website also hosts an <strong>issue tracking</strong> facility, where you can submit your feature requests or report bugs, and <strong>discussion boards</strong>, where you can get first class support from the <em>community of users</em>.</p>
<h4>Donate</h4>
<p>This plugin is released as <strong>free software</strong>. Nevertheless, its development requires time and effort. A small donation, as a sign of appreciation of the effort, is welcome. Please, use the following button to visit the <em>Donations</em> page. Thanks in advance for your support!</p>
<p><a href="http://www.g-loaded.eu/about/donate" title="Donate"><img src="/images/donations_button.png" alt="Donations Button" /></a></p>
<div class="cc-block"><em><a href="http://www.g-loaded.eu/2008/05/10/fast-static-feed-wordpress-plugin/">Fast-Static-Feed WordPress Plugin</a></em>, unless otherwise expressly stated, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Terms and conditions beyond the scope of this license may be available at <a href="http://www.g-loaded.eu/about/disclaimer-and-license/">www.g-loaded.eu</a>.</div>
<h4>Related Articles</h4>
<ul><li><a href="http://www.g-loaded.eu/2008/05/08/more-feed-excerpt-wordpress-plugin/" rel="bookmark">More-Feed-Excerpt WordPress Plugin</a></li>
<li><a href="http://www.g-loaded.eu/2006/01/04/bot-allow-content-wordpress-plugin/" rel="bookmark">Bot-Allow-Content WordPress plugin</a></li>
<li><a href="http://www.g-loaded.eu/2008/11/29/how-to-enable-wp-super-cache-in-wordpress/" rel="bookmark">How to enable WP-Super-Cache in WordPress</a></li>
<li><a href="http://www.g-loaded.eu/2006/01/05/add-meta-tags-wordpress-plugin/" rel="bookmark">Add-Meta-Tags WordPress Plugin</a></li>
<li><a href="http://www.g-loaded.eu/2006/01/05/my-tags-wordpress-plugin/" rel="bookmark">My-Tags WordPress Plugin</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.g-loaded.eu/2008/05/10/fast-static-feed-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
	</channel>
</rss>

