<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2238516101365346732</id><updated>2011-10-18T10:44:58.011+02:00</updated><category term='gsoc'/><category term='DNS'/><category term='sysadmin'/><category term='ujail'/><category term='observations'/><category term='personal'/><category term='Technology'/><category term='gparted'/><category term='Debian'/><category term='GNU/Linux'/><category term='update-manager'/><category term='general'/><category term='isc dhcpd'/><category term='free software'/><category term='everywhere'/><category term='python'/><category term='dhcpd'/><category term='Canonical'/><category term='pyttpd'/><category term='Networking'/><category term='nwu'/><category term='foss'/><category term='Ubuntu'/><category term='Android'/><category term='NetworkManager'/><category term='argvalidate'/><category term='Maemo'/><title type='text'>tech &amp; sp</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>61</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-8452251285200558704</id><published>2011-06-01T21:53:00.000+02:00</published><updated>2011-06-01T21:53:24.136+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DNS'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='NetworkManager'/><category scheme='http://www.blogger.com/atom/ns#' term='GNU/Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>How to force a local DNS resolver to be used using resolvconf</title><content type='html'>I know it has been a while, but after reading a &lt;a href="http://www.progsoc.org/~wildfire/aum/2011/06/01#bind2"&gt;blog post&lt;/a&gt; by Anand Kumria over at &lt;a href="http://planet.debian.org/"&gt;planet.debian.org&lt;/a&gt; I decided to have a quick look at one of the problems he described.&lt;br /&gt;&lt;br /&gt;Basically, Anand wants to force the local resolver to be used for each and every network connection, may that connection be established manually or via NetworkManager. He wrote that fixing this configuration for every new connection manually is tedious, and I fully agree on that. So here is a solution to do this all automatically, using &lt;i&gt;resolvconf&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;After installing the &lt;i&gt;resolvconf&lt;/i&gt; package every time &lt;i&gt;/etc/resolv.conf&lt;/i&gt; is to be updated &lt;i&gt;resolvconf&lt;/i&gt; takes care of that. Using the files in &lt;i&gt;/etc/resolvconf&lt;/i&gt; this process can be controlled and the resulting file modified to fit one own's needs.&lt;br /&gt;&lt;br /&gt;So at first we would like the local resolver to be used for every connection. This works by simply adding the "nameserver 127.0.0.1" directive to the &lt;i&gt;/etc/resolvconf/resolv.conf.d/head&lt;/i&gt; file. Simple as that. Every time &lt;i&gt;/etc/resolv.conf&lt;/i&gt;&amp;nbsp;gets generated the contents of the head file are actually used as &lt;i&gt;/etc/resolv.conf&lt;/i&gt;'s header.&lt;br /&gt;&lt;br /&gt;Using this method the local resolver is used for every connection. But Anand wanted to use&amp;nbsp;&lt;b&gt;only&lt;/b&gt;&amp;nbsp;the local resolver and discard any resolvers possibly obtained via DHCP for example. Guess what, this is also possible using resolvconf.&lt;br /&gt;&lt;br /&gt;Adding&amp;nbsp;&lt;i&gt;TRUNCATE_NAMESERVER_LIST_AFTER_127="yes"&lt;/i&gt;&amp;nbsp;to &lt;i&gt;/etc/default/resolvconf&lt;/i&gt;&amp;nbsp;does exactly that. Now every &lt;i&gt;nameserver&lt;/i&gt;&amp;nbsp;directive after the 127.0.0.1 one is ignored and will not make it into /&lt;i&gt;etc/resolv.conf&lt;/i&gt;. You can of course add more nameservers to the &lt;i&gt;head&lt;/i&gt;&amp;nbsp;file above the 127.0.0.1 directive.&lt;br /&gt;&lt;br /&gt;Problem fixed I guess.&lt;br /&gt;Don't forget to re-connect to the network or manually force re-creation of &lt;i&gt;/etc/resolv.conf&lt;/i&gt;&amp;nbsp;so the changes you made get populated. I really hope this is of use to some of you facing similar problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-8452251285200558704?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/8452251285200558704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2011/06/how-to-force-local-dns-resolver-to-be.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8452251285200558704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8452251285200558704'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2011/06/how-to-force-local-dns-resolver-to-be.html' title='How to force a local DNS resolver to be used using resolvconf'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-5015936656850141802</id><published>2011-01-01T23:01:00.001+01:00</published><updated>2011-01-01T23:02:38.466+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='dhcpd'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><category scheme='http://www.blogger.com/atom/ns#' term='isc dhcpd'/><title type='text'>ISC dhcpd and IP assignments from a pool to specific hosts only</title><content type='html'>Assigning an IP address statically to a host with a given MAC address using ISC dhcpd is quite trivial, one host entry, a hardware ethernet entry and a fixed-address entry and you are up and running.&lt;br /&gt;But what if you want to assign IP addresses from a pool to only a few hosts with specific MAC addresses?&lt;br /&gt;&lt;br /&gt;Before you ask yourself why someone might want to do that, have a look at my (very real) use-case.&lt;br /&gt;I am currently working on setting up an installation server for my employer,&amp;nbsp;&lt;a href="http://www.anexia.at/"&gt;ANEXIA Internetdienstleistungs GmbH&lt;/a&gt;. The server itself uses PXE, TFTP and FAI for installing systems. To be able to do PXE booting one has to set up an DHCP server to provide configuration details, like the TFTP Server Address and the boot filename.&lt;br /&gt;&lt;br /&gt;Now what one should consider is that this system is designed to provide automatic installations for internet-facing hosts, namely ones in public IP networks. Running a DHCP server in such a network is not a good idea. We neither want to dish out configurations to each and every hosts that asks for them, neither do not want to do a PXE boot each and every time one of our systems is restarted. Now the combination of FAI and pxelinux allows for default configurations which force local booting, but this still causes the (re-)boot time for those systems to increase and potentially also increases the load on the TFTP server. Also, let's not even consider thinking about whether this setup is "clean" or not. I personally believe that dishing out IP addresses in a public IP network is a bad thing(tm) and I guess a lot of people will be nodding when reading these lines.&lt;br /&gt;&lt;br /&gt;What I was asking myself is how to get something like that set up in a cleaner way, and guess what, I found a solution.&lt;br /&gt;The basic idea behind this is only providing IP configuration via DHCP to a specific set of hosts (with a specific set of MAC addresses) and not providing any information to all other hosts. The specific set of hosts are those that we want to do an install run on. This is a no-brainer and I guess the right way to do that, but implementing this approach is not as straight-forward as I initially thought.&lt;br /&gt;&lt;br /&gt;Actually the implementation of that idea caused me a bit of a headache and cost me a few work-hours to get right, that's why I'd like to share the configuration details with you.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let's have a look at how to get such a setup using ISC dhcpd. We are using the fact that ISC dhcpd allows you to not only configure a subnet, but rather also pools inside subnets, which can have allow and deny rules. Such rules can be in the form of "allow/deny member of &lt;class&gt;", where classes (and subclasses, keep on reading for details) can be defined inside the configuration file as well.&lt;/class&gt;&lt;br /&gt;&lt;br /&gt;What we first did was creating a subnet with a pool declaration, as follows:&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;subnet 10.0.0.0 netmask 255.255.255.0 {&amp;nbsp;&amp;nbsp;&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;option routers&amp;nbsp;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;10.0.0.254&lt;/i&gt;&lt;/span&gt;;&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;option broadcast-address&amp;nbsp;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;10.0.0.&lt;/i&gt;&lt;/span&gt;255;&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;filename "fai/pxelinux.0";&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;next-server&amp;nbsp;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;10.0.0.254&lt;/i&gt;&lt;/span&gt;;&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;server-name "10.0.0.254";&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;pool {&amp;nbsp;&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;allow members of "install";&amp;nbsp;&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;range 10.0.0.10 10.0.0.230;&amp;nbsp;&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; }&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;}&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;This one configures the subnet 10.0.0.0/24, with&amp;nbsp;10.0.0.254&amp;nbsp;being the network gateway,&amp;nbsp;10.0.0.254&amp;nbsp;being the TFTP server and "fai/pxelinux.0" being the TFTP filename. Additionally pool allows us to define a range of IP addresses we want to use, along with a line stating that only members of the "install" class should get a network configuration. If you do not have any other subnet defined in your config and a client that is not in this "install" class asks for an IP address you will see something like this in your syslog: &amp;nbsp;"&lt;i&gt;dhcpd: DHCPDISCOVER from 11:22:33:44:55:66 via eth1: network 10.0.0/24: no free leases&lt;/i&gt;". dhcpd will not even answer these requests and thus the client will not even know that there is a DHCP server running here. Exactly what we wanted.&lt;br /&gt;&lt;br /&gt;I wrote about this giving me a headache, but so far things have been pretty straight-forward. Getting this far did not take very long, believe me.&lt;br /&gt;&lt;br /&gt;Next thing we did was defining that "install" class as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;class "install" { match hardware; }&lt;/i&gt;&lt;/blockquote&gt;Again, not very hard to do. This tells dhcpd to look for subclasses of "install" with a matching hardware-address. So let's have a look at the subclass for, let's say the host with MAC address "11:22:33:44:55:66":&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;subclass "install" &lt;b&gt;1:&lt;/b&gt;11:22:33:44:55:66;&lt;/i&gt;&lt;/blockquote&gt;I intentionally highlighted the leading "1:" there. This means nothing more or less than "ethernet". Without that leading "1:" you won't get anywhere. Matching will fail, simple as that. It took me a while to find &amp;nbsp;information about this in "&lt;i&gt;man 5 dhcp-eval&lt;/i&gt;". Quoting parts of the interesting section:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;The hardware operator returns a data string whose first &amp;nbsp;element &amp;nbsp;is&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;the &amp;nbsp;type of network interface indicated in packet being considered,&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;and whose subsequent elements are client’s link-layer address. [...]&amp;nbsp;Hardware types include &amp;nbsp;ethernet &amp;nbsp;(1), &amp;nbsp;token-ring &amp;nbsp;(6), and fddi (8).&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&amp;nbsp;Now, with the combination of the subnet, pool, class and subclass directives we could get the setup we wanted: a DHCP server only providing IP configuration to a specific set of hosts and ignoring all other DHCP requests.&lt;br /&gt;&lt;br /&gt;If you have any comments about this setup or ideas on how to get something similar set-up using another approach feel free to leave a comment.&lt;br /&gt;&lt;br /&gt;Personal final note: accidentally typing 80 instead of 08 in a MAC address will cost you an additional two hours and will even have you re-compile ISC dhcpd with eval debugging turned on, believe me. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-5015936656850141802?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/5015936656850141802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2011/01/isc-dhcpd-and-ip-assignments-from-pool.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5015936656850141802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5015936656850141802'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2011/01/isc-dhcpd-and-ip-assignments-from-pool.html' title='ISC dhcpd and IP assignments from a pool to specific hosts only'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-432143584778252867</id><published>2010-08-10T14:07:00.000+02:00</published><updated>2010-08-10T14:07:35.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Canonical'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>What's all the fuzz about canonical-census?</title><content type='html'>I know I have not updated this blog in quite a long time now, but something caught my attention today: canonical-census.&lt;br /&gt;&lt;br /&gt;As slashdot.org &lt;a href="http://linux.slashdot.org/story/10/08/10/0319243/Canonical-Begins-Tracking-Ubuntu-Installations"&gt;reports&lt;/a&gt; Canonical begins with tracking their (OEM) installations. Now it's obvious that people are uncomfortable with a program running on their system which phones back to their OS vendor, that's why I have had a quick look at what exactly canonical-census does.&lt;br /&gt;&lt;br /&gt;Firstly however, I would like to point out that the report on slashdot.org is very clear about which information is being gathered, being "&lt;i&gt;the number of times this system previously sent to Canonical [...], the Ubuntu distributor channel, the product name as acquired by the system's DMI information, and which Ubuntu release is being used&lt;/i&gt;". And it's perfectly correct. After getting the canonical-census Debian source package (using&amp;nbsp;dget -u https://launchpad.net/ubuntu/+archive/partner/+files/canonical-census_0.1.dsc) the source package shows, besides the Debian packaging information, two scripts:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;census (written in Python) and&lt;/li&gt;&lt;li&gt;send-census (a GNU bash script).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Now what do those scripts actually do?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;send-census&lt;/b&gt; is installed in /etc/cron.daily, which means it will be executed once a day by the system's cron daemon. It's a mere 48 lines long, and its code is quite simple. So everyone with at least some shell scripting experience can easily check what it's doing. Now guess what, it sends exactly the information as reported on slashdot to Canonical. Nothing more and nothing less.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Technically it keeps a plain text file containing a single number as its call-counter, residing in&amp;nbsp;&lt;i&gt;/var/lib/send-install-count/counter&lt;/i&gt;&amp;nbsp;and uses an on my Ubuntu Lucid system&amp;nbsp;nonexistent&amp;nbsp;&lt;i&gt;/var/lib/ubuntu_dist_channel&lt;/i&gt;&amp;nbsp;file for getting information about the distribution channel.&lt;/div&gt;&lt;div&gt;The above mentioned "system's DMI information" is not the whole bunch of DMI information available, but only the contents of &lt;i&gt;/sys/class/dmi/id/product_name&lt;/i&gt;, which strangely enough returns "System Product Name" on my machine. Last but not least it uses lsb-release to get the distribution release (ie. 10.04 for my system).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now those four pieces of information are sent to &lt;i&gt;http://census.canonical.com/submit&lt;/i&gt; via a simple HTTP GET query, using wget. The full URL with all the parameters added is:&lt;br /&gt;&lt;i&gt;http://census.canonical.com/submit?count=&lt;b&gt;count&lt;/b&gt;&amp;amp;dcd=&lt;b&gt;dist_channel&lt;/b&gt;&amp;amp;product=&lt;b&gt;dmi_product_name&lt;/b&gt;&amp;amp;release=&lt;b&gt;ubuntu_release_version&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;The second script, &lt;b&gt;census&lt;/b&gt;, is the part working on Canonical's script. Basically census reads in their Apache's access log file and creates an SQLite database from the contents of the log file. With 391 lines this script is a bit longer, but it does not end up in the Debian package at all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Personally I do not see how Canonical or one of their partners could possibly do anything harmful with that information. Comparing this to Debian's popcon reveals that Debian is gathering a lot more information.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now there are two more things one should consider: census is targeted at OEMs, which means its unlikely that it will end up on each and every Ubuntu installation and can be uninstalled by removing the canonical-census package with your favorite package manager.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, think about this for a second: It's a shell script you can always examine. There is no hidden magic and it's a plain HTTP request the script is sending. No evil things happening there.&lt;br /&gt;And now compare that to what other (often proprietary) software vendors do and how much data they submit, possibly even in encrypted form so you do not know for sure what is being sent to them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Personally I welcome the openness of Canonical with providing their users with the package's code this early and being straight about what information it submits. They could have silently added it to those installations after all...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Happy hacking!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-432143584778252867?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/432143584778252867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2010/08/whats-all-fuzz-about-canonical-census.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/432143584778252867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/432143584778252867'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2010/08/whats-all-fuzz-about-canonical-census.html' title='What&apos;s all the fuzz about canonical-census?'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-4838751526409373266</id><published>2009-12-20T00:15:00.000+01:00</published><updated>2009-12-20T00:15:48.224+01:00</updated><title type='text'>Rest in peace Flo: 13.11.1986–16.12.2009</title><content type='html'>Today is a sad day. Everything feels like I am having a bad nightmare. That's because today I learnt from the too early death of my friend &lt;a href="http://florianhufsky.soup.io/"&gt;Florian Hufksy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I am sitting here and do not really know what to write. I keep on thinking about the great times we spent together. The time we started programming when we were twelve. The time we spent learning BASIC. All the times you knew more than me and could teach me a thing or two. I remember our geek talks. How we would discuss latest games. How we lost contact and how we met again. I am thinking about how sorry I am for not having met you often enough. I keep on trying to understand what drove you that far. How you could just end it all. More and more memories come to my mind, like the moment when you showed me one of your projects, Super Mario War. The moments we had playing video games together. All those moments, all that time, I miss you my friend. You were a genius, always a step ahead, not only of me, but seemingly the whole world. I can't stop thinking about your brilliant ideas and how you always finished your projects. You were a real hacker, a real genius, a person trying to make the world a better place, a person who will be missed, not only by me.&lt;br /&gt;&lt;br /&gt;You were a genius and I always respected you, not only as a hacker, but as a beloved friend. Why did we not spend more time together? Why did you have to go? Why do I have to write this now, sitting here in my chair with tears in my eyes? And all those memories come up again and again.  There is so much more that comes to my mind, but I can't keep on writing, it just hurts too much.&lt;br /&gt;&lt;br /&gt;The world is a sad place today. I am sad. I am mourning the too early death of my beloved friend, Florian. You will always have a special place in my heart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-4838751526409373266?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/4838751526409373266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/12/rest-in-peace-flo-1311198616122009.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/4838751526409373266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/4838751526409373266'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/12/rest-in-peace-flo-1311198616122009.html' title='Rest in peace Flo: 13.11.1986–16.12.2009'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-650638336388347182</id><published>2009-12-09T11:16:00.000+01:00</published><updated>2009-12-09T11:16:46.793+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='ujail'/><category scheme='http://www.blogger.com/atom/ns#' term='GNU/Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>ujail: use cases, FAQs, part 1 &amp; proof of concept, part 2</title><content type='html'>As I ran out of time whilst writing the "&lt;a href="http://techandsp.blogspot.com/2009/12/introducing-ujail-proof-of-concept.html"&gt;introducing ujail&lt;/a&gt;" post on monday I would like to further elaborate on the idea, giving you some examples of possible use cases and then having a look at FAQs regarding ujail. Additionally I have created a second proof of concept that should be a lot faster, see below for more details.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Use cases of ujail&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Monday's post was rather technical, so let's have a look at possible use cases today.&lt;br /&gt;&lt;br /&gt;The main reason for both having the idea of ujail and starting working on it is my web server. I am running quite a few (S)CGI scripts there and, even though running them as different users, on a per-vhost basis, I have the impression of the whole thing being a bit insecure.&lt;br /&gt;&lt;br /&gt;Okay, PHP does provide its famous &lt;i&gt;open_basedir&lt;/i&gt; feature, but I am also running some Python applications which I simply cannot restrict easily. My first ideas involved adding something similar to open_basedir to Python, followed by the idea of replacing some C library functions, like fopen and friends on startup time.&lt;br /&gt;&lt;br /&gt;Whilst the adding open_basedir to Python would have involved changing a lot of Python's internals I soon discarded the library patching idea as those could be worked around by injected code directly invoking syscalls. It didn't take long for me to notice that I have to dig deeper. The idea of ujail was born and after coming up with the proof of concept this seems to be a viable solution.&lt;br /&gt;&lt;br /&gt;Now ujail is not only about protecting a web server from its web applications, but could do a lot more, for example:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Creating a sandbox for untrusted code (socket&amp;amp;file i/o emulation)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Implementing some sort of personal firewall (socket-call only emulation)&lt;/li&gt;&lt;li&gt;Testing applications that perform low-level system operations (read: package managers and friends, filesystem emulation)&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;I am sure you can come up with even more use-cases. What should be noted is that emulating a system call does not mean that one necessarily needs to emulate the whole filesystem. What can be done, for example, is patching through access to common files (libraries, executables, etc.) whilst maintaining a virtual filesystem for data that will eventually be modified. A copy-on-write approach is possible too, for example. There are multiple methods with which the multiple filesystem could be implemented, the most common would probably be using a state directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;FAQs&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There have been some questions about ujail in comments to my first post which I would like to answer. Also, I have been thinking about things that are different about ujail compared to other virtualization techniques. Feel free to add additional questions either in a comment or drop me an email: debian at sp dot or dot at.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Could you change the license of ujail to ... ?&lt;br /&gt;&lt;br /&gt;Not likely to happen. The proof of concept's license is GPLv3 and the actual code's license will be too. However, ujail is a userspace application that does not need any modifications to the kernel so there should be no problems with porting ujail from GNU/Linux to any other system.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Does ujail work on operating systems other than GNU/Linux?&lt;br /&gt;&lt;br /&gt;Not yet. If it's technically possible to implement the technique on other operating systems I would be happy to accept patches.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do I need to patch my kernel for ujail to work?&lt;br /&gt;&lt;br /&gt;No, ujail is running in userspace. The only thing it needs is Linux with support for PTRACE_SYSEMU.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How is this approach different from using LD_PRELOAD?&lt;br /&gt;&lt;br /&gt;With LD_PRELOAD one can replace library functions, but malicious code could still directly invoke syscalls, working around this protection completely. Also, statically linked binaries cannot be restricted with LD_PRELOAD.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How is this approach different from user-mode-linux?&lt;br /&gt;&lt;br /&gt;User-mode-linux (UML) works by emulating a full kernel in userspace and allows you to virtualize a whole Linux instance (including a new init process, etc). ujail is about providing a way of restricting a single process (and its childs) inside a running system in terms of access to syscalls and the partial emulation of those.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How is this approach different from linux-vserver?&lt;br /&gt;&lt;br /&gt;Linux-vserver is a kernel patch and runs in kernel space, as opposed to ujail, which works in userspace.&lt;br /&gt;Also, linux-vserver works similarly to user-mode-linux, providing a fully virtualized Linux instance.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Does the account running ujail need any special privileges?&lt;br /&gt;&lt;br /&gt;No, the only restrictions that apply are those of ptrace.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Where is the code?&lt;br /&gt;&lt;br /&gt;Right now ujail is in a planning phase, and only the proof of concept code has been written and published. The actual ujail code is yet to be written and the code will be hosted on&amp;nbsp;&lt;a href="http://launchpad.net/ujail"&gt;launchpad.net&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Proof of concept, part 2&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;An anonymous person (who were you stranger?) added a comment to my first post, suggesting "&lt;i&gt;Also, why patch the process rather than just modifying its state and trapping into the kernel?&lt;/i&gt;". I have had a look at this approach earlier, but it didn't work out. However, I decided to give it yet another try and created a &lt;a href="http://bazaar.launchpad.net/%7Espeijnik/ujail/proof-of-concept/revision/3"&gt;second proof of concept&lt;/a&gt;. That code does not require patching any code, but only modifies the instruction pointer (eip) and the first register (eax). This should be a lot faster than patching the code.&lt;br /&gt;&lt;br /&gt;Technically the new main loop works by calling PTRACE_SYSEMU and waiting for a notification. It then saves the instruction pointer and switches to PTRACE_SYSCALL. As before it waits for the emulated syscall to exit and at this point sets eax from orig_eax and decreases the value of the instruction pointer by the size of the "&lt;i&gt;int $0x80&lt;/i&gt;" instruction. Another call to PTRACE_SYSCALL resumes the process. The next event is the process actually entering the real syscall and yet another one leaving the syscall again. These are resumed by PTRACE_SYSCALL and PTRACE_SYSEMU respectively. So, comparing this with the first approach we are only modifying two registers now, instead of writing to the TEXT area of the running process.&lt;br /&gt;&lt;br /&gt;Thanks should go to the anonymous commenter for making me give this approach another try.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Questions? Criticism? More ideas? Want to contribute?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Coming to an end I would yet again like to let you know that I am&amp;nbsp; open for questions, criticism, more ideas and contributions in general. So if you are interested in this topic come join the discussion by either dropping me an email, writing a comment to this post or replying to this post on your own blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-650638336388347182?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/650638336388347182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/12/ujail-use-cases-faqs-part-1-proof-of.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/650638336388347182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/650638336388347182'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/12/ujail-use-cases-faqs-part-1-proof-of.html' title='ujail: use cases, FAQs, part 1 &amp; proof of concept, part 2'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-4959850950040758640</id><published>2009-12-07T17:49:00.001+01:00</published><updated>2009-12-09T11:17:25.560+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='ujail'/><category scheme='http://www.blogger.com/atom/ns#' term='GNU/Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Introducing ujail &amp; proof of concept</title><content type='html'>Lately I have been thinking about methods to provide a stripped down, secured environment for running untrusted code on GNU/Linux. With this post I would like to present you with the first results of my research.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ujail - brief introduction&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I have chosen &lt;a href="http://launchpad.net/ujail"&gt;ujail&lt;/a&gt; as the name for the technique I am proposing. ujail stands for micro jail in userspace and, in itself, describes the concept briefly. The main idea is to have a userspace process monitor system calls of one of its childs and emulate some calls, if needed. This is done using ptrace and namely both PTRACE_SYSEMU and PTRACE_SYSCALL.&lt;br /&gt;The ujail process should not be able to monitor syscalls, like strace does, but also intercept and emulate them.&lt;br /&gt;&lt;br /&gt;This sounds a lot like user mode linux (uml), but the method is different. Whilst uml comes with a complete kernel, emulates all system calls and this way provides a virtualized system, ujail is intended to only emulate some systemcalls, without emulating the kernel.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Revisiting PTRACE_SYSCALL &amp;amp; PTRACE_SYSEMU&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To better explain how the ujail technique works I would like to have a quick look at PTRACE_SYSCALL and PTRACE_SYSEMU again.&lt;br /&gt;&lt;br /&gt;PTRACE_SYSCALL allows a userspace process to be notified whenever a traced process enters or leaves a system call. This means that two notifications are normally sent: one before system call entry and one afterwards. Even though one is able to change the parameters of system calls this method does not allow system calls to be fully emulated (think virtual filesystem here).&lt;br /&gt;&lt;br /&gt;PTRACE_SYSEMU on the other hand provides one notification on syscall entry and expects the receiver of the notification to emulate the syscall. This method alone sounds great, but this also means that memory allocation needs to be emulated too, which is quite complex in userspace.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A hybrid of PTRACE_SYSCALL &amp;amp; PTRACE_SYSEMU&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now on to the concept behind ujail. The method I am describing works by calling PTRACE_SYSEMU for a specific process and this way taking over emulation of all system calls. However, some system calls are complex to emulate in userspace, and so a hybrid of both PTRACE_SYSEMU and PTRACE_SYSCALL is needed. In short this works by checking whether the syscall needs to be emulated when the PTRACE_SYSEMU event is received.&lt;br /&gt;Now one way is emulating the syscall, filling the processes' registers and resuming execution of the process. This is simple and straight-forward.&lt;br /&gt;&lt;br /&gt;The second way is forwarding the system call to the kernel. The problem here is that calling the syscall in the monitoring process will make the new resources available to that very process, and not the process to be jailed. This is where the hybrid method kicks in.&lt;br /&gt;&lt;br /&gt;The proof of concept code creates a backup of the next instruction to be executed along with a copy of the instruction pointer at this point and patches it with the opcodes for "int $0x80", causing the syscall to be made again. After that it resumes execution with PTRACE_SYSCALL and waits again. The first event to be received now is the program leaving the emulated system call, which can be ignored. Resuming yet again will give use two PTRACE_SYSCALL events, one for syscall entry and one for syscall exit.&lt;br /&gt;&lt;br /&gt;The first event is not really interesting, but at the second event the opcode backup is restored and the eip set from the saved value. Now the kernel has handled the syscall and the result is ready for the child process. A final call of PTRACE_SYSEMU resumes execution of the child and waits for the next syscall.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Proof of concept&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The proof of concept code can be downloaded from its &lt;a href="https://code.launchpad.net/%7Espeijnik/ujail/proof-of-concept"&gt;bazaar branch&lt;/a&gt; at launchpad.net. It is intended to be used on i386 systems only and works with simple programs, but is known not to work with anything using fork, vfork and most likely will not work for binaries using threading.&lt;br /&gt;&lt;br /&gt;Finally, I would like to thank &lt;a href="http://www.linuxjournal.com/user/800841" title="View user profile."&gt;Pradeep Padala&lt;/a&gt; for his "Playing with ptrace" articles &lt;a href="http://www.linuxjournal.com/article/6100"&gt;[0]&lt;/a&gt;&lt;a href="http://www.linuxjournal.com/article/6210"&gt;[1]&lt;/a&gt;, which were fun to read and worked as a great introduction of ptrace for me. &lt;br /&gt;&lt;br /&gt;Now there is only one thing left to say: if you are interested in this method, see loopholes or problems or want to contribute, please go ahead and contact me:&lt;br /&gt;&lt;br /&gt;debian at sp dot or dot at&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-4959850950040758640?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/4959850950040758640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/12/introducing-ujail-proof-of-concept.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/4959850950040758640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/4959850950040758640'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/12/introducing-ujail-proof-of-concept.html' title='Introducing ujail &amp; proof of concept'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-3072305094096337653</id><published>2009-12-01T18:22:00.001+01:00</published><updated>2009-12-01T18:23:47.936+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='gparted'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>How to copy partitions under GNU/Linux the easy way</title><content type='html'>After getting a new disk for my Popcorn Hour A-110 device I had to copy all partitions from the old disk onto the new one so I do not have to reinstall some applications and reconfigure everything.&lt;br /&gt;&lt;br /&gt;After searching the web and trying to find a free alternative to Norton Ghost and Acronis True Image, preferably not using a boot disk on its own (I did not want to backup my workstation after all, just a simple partition to partition copy between two SATA disks) I gave up and decided to do the copying manually.&lt;br /&gt;&lt;br /&gt;So I fired up gparted to do the partitioning, did a right click and... I noticed that gparted supports copy/paste. Being curious about what this could potentially do I gave it a try. I marked partition one on the old disk, did a copy, went to the new disk and clicked on paste - and guess what, gparted did what I was looking for.&lt;br /&gt;&lt;br /&gt;Putting a long story short: you can copy whole partitions using gparted's copy/paste mechanism and even resize them whilst doing so. I am somehow ashamed I did not notice this feature earlier, having been a gparted user for a few years now and I can imagine I am not the only one who missed that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-3072305094096337653?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/3072305094096337653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/12/how-to-copy-partitions-under-gnulinux.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3072305094096337653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3072305094096337653'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/12/how-to-copy-partitions-under-gnulinux.html' title='How to copy partitions under GNU/Linux the easy way'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-9200220208459479392</id><published>2009-11-11T09:25:00.001+01:00</published><updated>2009-11-11T09:28:55.040+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>kvm, qemu and the magic of ubuntu-vm-builder</title><content type='html'>As I &lt;a href="http://techandsp.blogspot.com/2009/11/my-android-repositories.html"&gt;noted&lt;/a&gt; two days ago I was unable to build Android on Ubuntu 9.10 x86-64 and thus needed to set up a virtual machine.&lt;br /&gt;&lt;br /&gt;At first I went for my preferred virtualization solution, &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; and had to notice that even though I assigned all 4 processor cores of my workstation (along with 2GiB of memory) to the virtual machine building was painfully slow. I immediately ditched the idea of using&amp;nbsp; VirtualBox again and decided to give something new to me a try: the combination of &lt;a href="http://www.linux-kvm.org/page/Main_Page"&gt;kvm&lt;/a&gt; and &lt;a href="http://www.qemu.org/"&gt;qemu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Having Intel VT-x support built into my workstation's processor I thought that this combination should give better performance, and I wasn't disappointed. To be honest, I am astonished on how fast the beast is now. Disk speed still seems to be not as fast as running things natively, but there must be a downside somewhere. :-)&lt;br /&gt;&lt;br /&gt;After a bit of googling I also found that &lt;a href="https://launchpad.net/vmbuilder"&gt;ubuntu-vm-builder&lt;/a&gt; exists, which simplifies virtual system creation tremendously.&lt;br /&gt;&lt;br /&gt;My Android working tree is being synchronized right now, which means that I should be able to start building in a few minutes time. I hope the virtual machine stays as fast as it is right now during the build and I hope everything goes well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-9200220208459479392?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/9200220208459479392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/11/kvm-qemu-and-magic-of-ubuntu-vm-builder.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/9200220208459479392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/9200220208459479392'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/11/kvm-qemu-and-magic-of-ubuntu-vm-builder.html' title='kvm, qemu and the magic of ubuntu-vm-builder'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-6952979796292578934</id><published>2009-11-09T22:00:00.003+01:00</published><updated>2009-11-09T22:09:58.591+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Maemo'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>An update on the proprietary Maemo SDK installer</title><content type='html'>Yesterday I &lt;a href="http://techandsp.blogspot.com/2009/11/android-mythbusters-and-openness.html"&gt;wrote&lt;/a&gt; about my dissatisfaction with the current state of the Android 2.0 code tree and how a proprietary install script for Maemo scared me off.&lt;br /&gt;&lt;br /&gt;As suggested in one of the comments to my post I filed a bug report against Maemo, &lt;a href="https://bugs.maemo.org/show_bug.cgi?id=6087"&gt;bug 6087&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Besides getting quite a few replies to the bug report within a matter of hours Carsten Munk pointed me at &lt;a href="http://maemo-sdk.garage.maemo.org/install.html"&gt;Maemo SDK+&lt;/a&gt;, which has less restrictive licensing.&lt;br /&gt;&lt;br /&gt;Another comment, by Marius Gedminas (thanks!) pointed me at &lt;a href="http://wiki.maemo.org/Mer/About"&gt;Mer&lt;/a&gt;,&lt;br /&gt;&lt;blockquote&gt;a new operating system for small, mobile touch-screen devices. &lt;p&gt;It is Linux based and layers the best open-source elements of Nokia's Maemo platform over a modern Ubuntu base. &lt;/p&gt;&lt;p&gt;The goals of Mer include: &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Integrate the best solutions for a wide variety of small form-factor devices &lt;/li&gt;&lt;li&gt; Encourage wider access to device capabilities through the &lt;a href="http://wiki.maemo.org/Mer/Documentation/Vendor_Social_Contract" title="Mer/Documentation/Vendor Social Contract"&gt;Vendor Social Contract&lt;/a&gt; &lt;/li&gt;&lt;li&gt; Demonstrably provide an easy route to market for vendors &lt;/li&gt;&lt;li&gt; Dramatically reduce costs to vendors of supporting EOL hardware &lt;/li&gt;&lt;li&gt; Focus, harness and support community contributions to the platform &lt;/li&gt;&lt;li&gt; Encourage and ease migration of existing applications &lt;/li&gt;&lt;li&gt; Support experimentation, innovation and development &lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-6952979796292578934?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/6952979796292578934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/11/update-on-proprietary-maemo-sdk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6952979796292578934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6952979796292578934'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/11/update-on-proprietary-maemo-sdk.html' title='An update on the proprietary Maemo SDK installer'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-2552464520477389664</id><published>2009-11-09T21:58:00.000+01:00</published><updated>2009-11-09T21:59:29.094+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>My Android repositories</title><content type='html'>As I wrote in &lt;a href="http://techandsp.blogspot.com/2009/11/android-roaming-detection-its.html"&gt;my last post&lt;/a&gt; I noticed a few problems with Android's roaming detection code and decided to try fixing it myself.&lt;br /&gt;&lt;br /&gt;So, I am basing my work on &lt;a href="http://www.cyanogenmod.com/"&gt;CyanogenMod&lt;/a&gt;, which I am also using on my Android device. My repositories are hosted at &lt;a href="http://github.com/speijnik"&gt;github.com/speijnik&lt;/a&gt; and you can fetch (nearly) everything you need for building by using &lt;a href="http://source.android.com/download/using-repo"&gt;repo&lt;/a&gt;. See the &lt;a href="http://github.com/speijnik/android/blob/donut/README"&gt;README&lt;/a&gt; file in my android repository over at github for details.&lt;br /&gt;&lt;br /&gt;For now only the simplification of the roaming detection code has made it into the repository, but be aware that even though I have published the code I still have neither built nor tried it, as I do not have a working build environment set up yet.&lt;br /&gt;&lt;br /&gt;Oh, about the working build environment: there seem to be problems with either the webkit code in the Android repositories (unlikely) or with building that code on Ubuntu 9.10 x86-64 (more likely). Right now I am downloading Ubuntu 8.04 LTS i386 for use in a virtual machine. I will let you know whether that fixes my problems or not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-2552464520477389664?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/2552464520477389664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/11/my-android-repositories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2552464520477389664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2552464520477389664'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/11/my-android-repositories.html' title='My Android repositories'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-7604238037357226776</id><published>2009-11-08T21:04:00.000+01:00</published><updated>2009-11-09T21:21:28.459+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Android's roaming detection &amp; its implementation</title><content type='html'>I know I wrote about Android already today, but there is another thing that concerns me right now. I am owner of an Android-based phone (an HTC Dream) and recently switched my mobile network provider. The problem is that my new provider is a &lt;a href="http://en.wikipedia.org/wiki/Mobile_Virtual_Network_Operator"&gt;virtual provider&lt;/a&gt; and as such there is no real network of that provider. Now Android has a feature to turn off broadband connections when in roaming mode, which itself is a great idea and can save you from paying quite a lot of money when the phone connects to 3G abroad, but this feature also turns off broadband connections when roaming locally. All this is being discussed in bug report &lt;a href="http://code.google.com/p/android/issues/detail?id=3499"&gt;#3499&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;After noticing this problem I became curious on how Android detects that it is roaming and I found the GsmServiceStateTracker.isRoamingBetweenOperators method to be responsible for that magic, but soon noticed that the method is not only inefficient, but also doesn't work as intended. This is hardly related to the bug mentioned above, but let's have a look at the code in question:&lt;br/&gt;&lt;pre name="code" class="java"&gt;/**&lt;br/&gt;* Set roaming state when gsmRoaming is true and, if operator mcc is the&lt;br/&gt;* same as sim mcc, ons is different from spn&lt;br/&gt;* @param gsmRoaming TS 27.007 7.2 CREG registered roaming&lt;br/&gt;* @param s ServiceState hold current ons&lt;br/&gt;* @return true for roaming state set&lt;br/&gt;*/&lt;br/&gt;    private&lt;br/&gt;    boolean isRoamingBetweenOperators(boolean gsmRoaming, ServiceState s) {&lt;br/&gt;        String spn = SystemProperties.get(PROPERTY_ICC_OPERATOR_ALPHA, "empty");&lt;br/&gt;&lt;br/&gt;        String onsl = s.getOperatorAlphaLong();&lt;br/&gt;        String onss = s.getOperatorAlphaShort();&lt;br/&gt;&lt;br/&gt;        boolean equalsOnsl = onsl != null &amp;amp;&amp;amp; spn.equals(onsl);&lt;br/&gt;        boolean equalsOnss = onss != null &amp;amp;&amp;amp; spn.equals(onss);&lt;br/&gt;&lt;br/&gt;        String simNumeric = SystemProperties.get(PROPERTY_ICC_OPERATOR_NUMERIC, "");&lt;br/&gt;        String operatorNumeric = s.getOperatorNumeric();&lt;br/&gt;&lt;br/&gt;        boolean equalsMcc = true;&lt;br/&gt;        try {&lt;br/&gt;            equalsMcc = simNumeric.substring(0, 3).&lt;br/&gt;                    equals(operatorNumeric.substring(0, 3));&lt;br/&gt;        } catch (Exception e){&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        return gsmRoaming &amp;amp;&amp;amp; !(equalsMcc &amp;amp;&amp;amp; (equalsOnsl || equalsOnss));&lt;br/&gt;    }&lt;/pre&gt;&lt;br/&gt;Okay, let me summarize what this piece of code does wrong, at least from my understanding:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;It takes both the network operator alphanumeric identifier and alphanumeric long identifier and compares both to the alphanumeric identifier coming from the SIM card, whilst...&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;... it could simply use the network and SIM card numeric identifiers and compare those, which should be a lot cheaper than comparing those strings&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Then it takes the first three characters/digits of the numeric identifiers (which indicate the country) and compares those&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Now in my case my SIM card doesn't seem to provide the phone with a alphanumeric identifier, so the first two comparisons always fail for obvious reasons and, looking at the inline-if in the last line of that method my phone will always indicate that I am in roaming mode, even when I am not.&lt;br/&gt;&lt;br/&gt;The problem is not only the logic which seems to be wrong, but I rather see the inefficient comparisons used there to be a major problem in embedded systems like mobile phones. This is the first piece of Android code I have had a look at, but if all other code is as ugly and inefficient as these few lines Android really needs some major fixes. Related to this I have reported bug &lt;a href="http://code.google.com/p/android/issues/detail?id=4590"&gt;#4590&lt;/a&gt; and forked the &lt;a href="http://github.com/speijnik/android_frameworks_base"&gt;git repository in question&lt;/a&gt; over at github, to fix this method, should be a matter of 5 minutes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-7604238037357226776?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/7604238037357226776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/11/android-roaming-detection-its.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7604238037357226776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7604238037357226776'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/11/android-roaming-detection-its.html' title='Android&amp;#39;s roaming detection &amp;amp; its implementation'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-6048719359285370652</id><published>2009-11-08T05:49:00.000+01:00</published><updated>2009-11-09T21:21:28.461+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Android, Mythbusters and openness</title><content type='html'>I have been reading a great many posts about Android lately, some consisting of criticism, some of praise and some simply addressing issues in the Android "community". Let's have a look at those.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Matt Porter's &lt;/strong&gt;&lt;strong&gt;Android Mythbusters presentation&lt;/strong&gt;&lt;strong&gt; and Harald Welte's reaction&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I haven't seen the presentation live, but I had a look at &lt;a title="Mythbusters_Android.pdf @ tree.celinux.org" href="http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2009Presentations?action=AttachFile&amp;amp;do=get&amp;amp;target=Mythbusters_Android.pdf"&gt;the slides&lt;/a&gt;. Impressing work done by Matt putting all this information together. However, we all knew that Android only (ab-)uses Linux, without making use of the GNU userland for a long time, didn't we?&lt;br/&gt;&lt;br/&gt;In his presentation Matt has shown things such as Android's udev "replacement" that uses hardcoded values for device node creation and (on his &lt;a title="Android Mythbusters (Matt Porter) comment @ laforge.gnumonks.org" href="http://laforge.gnumonks.org/weblog/2009/11/04/#20091104-android_mythbusters"&gt;blog&lt;/a&gt;) Harald has then come up with a statement I have found to be very strong:&lt;br/&gt;&lt;blockquote&gt;The presentation shows how Google has simply thrown 5-10 years of Linux userspace evolution into the trashcan and re-implemented it partially for no reason.  Things like hard-coded device lists/permissions in object code rather than config files, the lack of support for hot-plugging devices (udev), the lack of kernel headers.  A libc that throws away System V IPC that every unix/Linux software developer takes for granted. The lack of complete POSIX threads.  I could continue this list, but hey, you should read those slides. now!&lt;/blockquote&gt;&lt;br/&gt;Now both of these statements target technical details, but the root of the problem seems to be elsewhere.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Where is my Android 2.0?&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Okay, that heading might not be making any sense in the context of this post at a first glance, but let me elaborate on that. Google and the Open Handset Alliance refer to Android as being an "Open Source" operating system, but the project is different from "real" Free Software projects: development takes place in a closed group and the results are shared with the community later on, when they are deemed to be ready.&lt;br/&gt;&lt;br/&gt;This means that innovation also takes place behind closed curtains and that the community is not involved in the actual development process at all. Lately we have seen the result of that, as Motorola is bragging about working close with Google on Android 2.0 ("Eclair"), but the AOSP source trees, open for everyone to have a look at, show no signs of version 2.0. In fact no changes that might even remotely suggest the release of a new major version have been made public in the past few weeks. So where is the openess there?&lt;br/&gt;Actually, the Motorola Droid has already shipped with Eclair on 6th, but still, there is no indication that Eclair will be made available to the broader public.&lt;br/&gt;&lt;br/&gt;In short Android seems to be developed behind closed curtains, with hardly (read no) community input whatsoever and is sometimes released as Free Software, not what I would describe as an open development process.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;The Android Market problem&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;As we have seen in the past Google is enforcing their copyright on proprietary applications that ship with pretty much every Android device, such as the Android Market. This has become really clear when Steve Kondik received  a cease and desist letter when packing the Google-proprietary applications into his ROMs. Okay, it's Google's right to enforce their copyright and there is nothing wrong with actually doing so, the thing I really have a problem with is something else: the Market is proprietary.&lt;br/&gt;&lt;br/&gt;Now what this means should become rather clear. You can have an Android device without Google's proprietary bits, but with default settings you just do not have any way of installing additional software. In my opinion the Market should be freed by Google themselves, or the community has to react and come up with a free replacement to overcome the vendor lock-in. Oh, you might know a replacement called &lt;a href="http://www.slideme.org"&gt;SlideMe&lt;/a&gt; (or Mobentoo) already. Well, that bugger is proprietary too, so not a solution at all.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Nokia and Maemo to the rescue&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;In most discussions about the openness of Android someone throws in Nokia and &lt;a href="http://www.maemo.org"&gt;Maemo&lt;/a&gt;, as a solution to the dilemma. Reading all those positive comments I simply had to give it a try, but all my hopes were destroyed within a few minutes.&lt;br/&gt;&lt;br/&gt;Let's start with the good news and let alone the reason why my hopes were destroyed for another minute or two. Maemo is based on Debian GNU/Linux and various Free Software components, such as GTK+, gstreamer, esd and friends. Most of the system is Free Software which is a good thing(tm) and reading all of this really got me into Maemo. Okay, some applications seem to be proprietary, but I am sure that could be fixed rather easily, so I could once for all use a truly open phone.&lt;br/&gt;&lt;br/&gt;...and then came the &lt;a href="http://repository.maemo.org/stable/fremantle/maemo-sdk-install_5.0.sh"&gt;SDK installer shell script&lt;/a&gt;:&lt;br/&gt;&lt;blockquote&gt;#!/bin/sh&lt;br/&gt;# Copyright (C) 2006-2009 Nokia Corporation&lt;br/&gt;#&lt;br/&gt;# This is proprietary software owned by Nokia Corporation.&lt;br/&gt;#&lt;br/&gt;# Contact: Maemo Integration &amp;lt;integration@maemo.org&amp;gt;&lt;br/&gt;# Version: $Revision: 1110 $&lt;/blockquote&gt;&lt;br/&gt;Now there is one question you should ask yourself: Why would someone trying to promote his platform as being open make the *installer* script for its SDK proprietary? Come on, it's an installer script, how much of your secret juice could be in there? What's the problem with people modifying it and working on this installer script in an open development environment?&lt;br/&gt;&lt;br/&gt;I had high hopes for Nokia actually doing a bit better than Google, but it seems they've failed to do so. It may be me overreacting, but a proprietary SDK installer shell script scares me enough not to install the SDK and have a look at it for now nor to think about buying a Maemo-based device in the near future. Please Nokia, either get the facts straight or provide us with a free SDK to your free &amp;amp; open platform.&lt;br/&gt;&lt;br/&gt;So, in short, Google is bad at working with the community and creating a truly open development process, and Nokia simply fails in terms of not scaring off prospective developers for their open platform with the proprietary SDK installer. Do you have any solutions in terms of an open phone environment, apart from what OpenMoko has come up with?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-6048719359285370652?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/6048719359285370652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/11/android-mythbusters-and-openness.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6048719359285370652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6048719359285370652'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/11/android-mythbusters-and-openness.html' title='Android, Mythbusters and openness'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1795654771566897797</id><published>2009-11-04T11:04:00.000+01:00</published><updated>2009-11-09T21:21:28.463+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>How to move panels in Gnome 2.28</title><content type='html'>I just installed Ubuntu Karmic Koala on my workstation and came across the problem of not being able to move/drag Gnome panels around in order to have the panels on my primary monitor.&lt;br/&gt;On the Debian system that was powering the workstation before this was a non-issue as I could simply click, hold and drag both the upper and the lower panel, but this didn't work.&lt;br/&gt;&lt;br/&gt;So, after a few minutes of googling I came across an entry at answers.launchpad.net[0] and a blog post, but I cannot seem to remember the URL to that one. I can imagine that some of you might be having the exact same problem, so the solution is holding down the ALT, whilst dragging as usual.&lt;br/&gt;&lt;br/&gt;[0] &lt;a href="https://answers.launchpad.net/ubuntu/+source/gnome-panel/+question/264"&gt;https://answers.launchpad.net/ubuntu/+source/gnome-panel/+question/264&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1795654771566897797?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1795654771566897797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/11/how-to-move-panels-in-gnome-228.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1795654771566897797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1795654771566897797'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/11/how-to-move-panels-in-gnome-228.html' title='How to move panels in Gnome 2.28'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-8767770947500760370</id><published>2009-08-17T21:23:00.000+02:00</published><updated>2009-11-09T21:30:21.450+01:00</updated><title type='text'>Automagic bug reporting in Python applications for Debian</title><content type='html'>We all know this situation: a program crashes and you need to send a bug report to the DBTS. The damn bug however is hard to reproduce and you fail to do so and hence can't submit the report.&lt;br/&gt;&lt;br/&gt;This has all changed for update-manager now. With the next upload to unstable update-manager will get automagic bug reporting. In short: there is code that detects uncaught exceptions, asks the user if he or she wants to file a bug report and then invokes reportbug. Nothing too special about this yet. There is one thing that should make lives of both bug reporters and developers easier though: the code automatically includes traceback information, that make finding the cause of the problem a lot easier.&lt;br/&gt;&lt;br/&gt;Okay, enough of praising this feature of update-manager, this post is about something else. Ubuntu users and developers might think "apport" now, because apport is an application that provides exactly this, reporting of bugs on program crashes, for all users.&lt;br/&gt;&lt;br/&gt;At least for Python applications and libraries in Debian providing this functionality should be easy. The only thing one has to do is create a sys.excepthook implementation that does the bug reporting, just as in update-manager.&lt;br/&gt;&lt;br/&gt;The questions I have now are:&lt;br/&gt;&lt;br/&gt;Do you think this feature would be a good addition to the Debian distribution?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-8767770947500760370?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/8767770947500760370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/08/automagic-bug-reporting-in-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8767770947500760370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8767770947500760370'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/08/automagic-bug-reporting-in-python.html' title='Automagic bug reporting in Python applications for Debian'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-56320903137120021</id><published>2009-07-09T20:07:00.000+02:00</published><updated>2009-11-09T21:21:28.467+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='update-manager'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>update-manager weekly update #6</title><content type='html'>So finally I have the time to provide you with a weekly update, instead of my usual bi-weekly ones.&lt;br/&gt;&lt;br/&gt;Unfortunately I did not work on anything on last week's TODO list, but found other issues I worked on and corrected.  So let's have a look at what I've done.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Debian packaging update&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I have done some work on the Debian packaging, which allows update-manager to be built using dpkg-buildpackage now. The way packages are splitted is not finalized yet and not up-to-date with my (and my mentor's) idea of how we should do that. You can expect an update to that soonish.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Automatically invoking package list reloading / update check&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;There is a command line switch (namely -c, or --check) now, that automatically performs an update check on startup. This gives other programs, like software-properties, a way of forcing a check when, for example, the package list sources have changed.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Checking/unchecking all updates in Gtk frontend&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Finally the small feature of selecting or deselecting all updates works in the Gtk frontend. Special cases like "all updates already checked" or "no updates checked" yet are handled too, meaning that you can only use one of these methods if it actually makes sense.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Package dependencies in python-apt backend and Gtk frontend&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Both the python-apt backend and the Gtk frontend are now aware of package dependencies. This means that when you select an upgrade that depends on another one that other update is selected too. The same works vice-versa too. Additionally the UI now lists all dependencies and dependencies on packages that are not installed yet and automatically deselects all updates that would requires new packages to be installed.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Displaying of overall download size in Gtk frontend&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;There has been a missing feature (ok, maybe a bug) so that the displayed download size would not be updated in the Gtk frontend. This has been fixed.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Install button being set sensitive correctly in Gtk frontend&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;In the past the install button would be set to either sensitive or insensitive at startup and not updated afterwards. That means if there were no packages to update when starting update-manager, then checking for updates where new updates are found, the install button would not be set sensitive again. I fixed that too.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Sorting of packages in Gtk frontend&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;In the Gtk frontend packages were not sorted at all, which meant that finding a specific package was rather hard. I added code that sorts the update list by package name now, which solves this issue.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Bugfixing humanize_size&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The humanize_size method, which is responsible for human-readable size displaying in the Gtk frontend contained a major bug so that sizes were rounded. Again, I was able to solve this.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Next week's TODO list&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;As I didn't find time to work on last week's TODO list my new TODO list is in fact my old one, with additional "Bugfixing" and "Debian packaging" tasks:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Downloading and installing of updates&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Bugfixing (?)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Debian packaging&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Checking that everything is documented&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Even more unit tests&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Pylint checking&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;If time permits and everything else works correctly: working on an aptdaemon backend&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;The next thing you can expect me to update is the Debian packaging and the documentation, which are my highest priority tasks for now, followed by support for downloading and installing updates.&lt;br/&gt;&lt;br/&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-56320903137120021?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/56320903137120021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/07/update-manager-weekly-update-6.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/56320903137120021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/56320903137120021'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/07/update-manager-weekly-update-6.html' title='update-manager weekly update #6'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1416008994458295356</id><published>2009-07-02T12:29:00.000+02:00</published><updated>2009-11-09T21:21:28.469+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='update-manager'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>update-manager weekly update #5</title><content type='html'>Firstly I have to apologize again for not providing you with weekly update #4, but again I didn't have the time to write one, so this post is going to sum up everything that happened since my last update.&lt;br/&gt;&lt;br/&gt;Let's have a look at my previous TODO list:&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Even though my TODO list entry contained a more detailed entry I have updated the UpdateManager documentation as a whole, leaving only a few blank spots right now.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Ubuntu distribution specific code&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I implemented changelog fetching for Ubuntu, which works just as fine as its Debian counterpart now.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;More unit tests&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;There are plenty of unit tests now, but not everything is being tested yet. I am especially proud of my Python interface validation code, that is being used in unit tests to check if handlers implement an interface correctly.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Update list downloading&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Checking for updates is what caused me major trouble in the past few days. Basically I had all the code ready, but for some reason the UI froze, with no apparent reason.&lt;br/&gt;However, today I was able to finally identify and fix the problem. As I expected my code was just fine, but python-apt was messing up. I am going to discuss the exact problem and its solution later on, but first: a screenshot. :-)&lt;br/&gt;&lt;p style="text-align: center;"&gt;&lt;a href="http://blog.peijnik.at/wp-content/uploads/2009/07/Screenshot-Checking-for-updates.png"&gt;&lt;img class="aligncenter size-thumbnail wp-image-151" title="Update Manager update check" src="http://blog.peijnik.at/wp-content/uploads/2009/07/Screenshot-Checking-for-updates-150x150.png" alt="Update Manager update check" width="150" height="150" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;Note: As you probably noticed I replaced the default progressbar with a pulsating one, because we cannot get exact information on how many items/bytes to fetch and would likely get a progress bar moving backwards, which isn't beautiful.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Further changes&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The TODO list was rather short and I did a lot of other work, which I want to elaborate on.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Dynamic selection of frontend, backend and distribution specific modules&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Even though this is probably not of any interest to John Doe, it helps a great deal when debugging code as all three components can be selected via separate command line switches now.&lt;br/&gt;Additionally some magic has been put in place that automatically detects the system's distribution and loads the corresponding distribution specific module. This is done via lsb_release and the newly introduced code in UpdateManager.Util.lsb.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Pylint cleanup&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Just out of curiosity I decided to start a pylint run on the codebase and quite a few problems were detected, which I then fixed. To be honest though I added quite some code afterwards that probably needs pylint checking and fixes again.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;update-manager IPC&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;My original plan and IPC design involved using callback functions and passing them between the different modules. Even though this worked out fine I had the feeling this wasn't clean enough and decided to ditch this approach and replace it with handler classes.&lt;br/&gt;The handler base classes now provide an interface of methods that are called on certain events and their implementations act accordingly. The main benefit was that I could easily drop a lot of enums and rather have different methods handling different events.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Gtk, threads and python-apt&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;With the new IPC approach it became easier to use threads that do the actual work in the background, which I had implemented in next to no time, but a few problems showed up.&lt;br/&gt;Whilst cache reloading from within a thread worked just fine checking for updates did not, and until today I didn't know why. I spent a good amount of time debugging this issue, even using python profiling, but nothing obvious showed up. The background process was running, whilst the UI froze.&lt;br/&gt;Today I finally found the root of the problem: python-apt. Even though I assumed that the python-apt worker threads must be stealing CPU time from the thread running gtk.main I wasn't sure how this could be happening, having two completely independent threads.&lt;br/&gt;&lt;br/&gt;Now, the cause of all this mess was that Python has a global threading lock and it seems as if this one is *LOCKED* when running C-code, such as the one python-apt comes with. The solution lies in calling Py_BEGIN_THREADS_ALLOW and Py_END_THREADS_ALLOW from within the C code, to release the global lock and let the Python interpreter do some work every now and then.&lt;br/&gt;&lt;br/&gt;As with the python-apt acquire code I was able to allow other threads to work as soon as the fetching code starts working and only disallow threads when actually modifying Python objects or calling methods and/or functions. Surprisingly python-apt already made use of this in its cache loading code, but not the fetch progress code.&lt;br/&gt;Fixing this problem took me less than half an hour and you probably can't believe how glad I was to finally get things working again.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;UI updates &amp;amp; other changes&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Some details in the UI were anything but optimal, like horizontal scrollbars in a few places, which I removed. Additionally I saw the need to move some code out of the Gtk frontend's __init__.py file and to a separate ui.py file.&lt;br/&gt;A full list of all changes I made is available from the bzr changelog at &lt;a title="update-manager changes @bzr.debian.org" href="http://bzr.debian.org/loggerhead/update-manager/devel/gsoc09/changes"&gt;bzr.debian.org&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;A few more screenshots&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Finally, I would like to provide you with two more screenshots (don't worry about my system being insecure because of not applied updates - this is a testing machine that is  not up-to-date on purpose):&lt;br/&gt;&lt;br/&gt;&lt;a href="http://blog.peijnik.at/wp-content/uploads/2009/07/Screenshot-Update-Manager-1.png"&gt;&lt;img class="size-thumbnail wp-image-149 alignnone" title="Update Manager main screen" src="http://blog.peijnik.at/wp-content/uploads/2009/07/Screenshot-Update-Manager-1-150x150.png" alt="Update Manager main screen" width="150" height="150" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://blog.peijnik.at/wp-content/uploads/2009/07/Screenshot-Update-Manager.png"&gt;&lt;img class="size-thumbnail wp-image-150 alignnone" title="Update Manager main screen with details &amp;amp; changelog" src="http://blog.peijnik.at/wp-content/uploads/2009/07/Screenshot-Update-Manager-150x150.png" alt="Update Manager main screen with details &amp;amp; changelog" width="150" height="150" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;TODO list&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;My TODO list for next week:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Downloading and installing of updates&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Checking that everything is documented&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Even more unit tests&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Pylint checking&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;If time permits and everything else works correctly: working on an aptdaemon backend&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1416008994458295356?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1416008994458295356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/07/update-manager-weekly-update-5.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1416008994458295356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1416008994458295356'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/07/update-manager-weekly-update-5.html' title='update-manager weekly update #5'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1657622990903131257</id><published>2009-06-22T23:30:00.000+02:00</published><updated>2009-11-09T21:21:28.471+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='update-manager'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Python interface validation</title><content type='html'>When I started working on update-manager I thought using zope.interface for my interfaces was a good idea, but soon realized that it lacked a way of actually validating a given interface against an implementation. The only thing it did was checking whether the implementation defined that it implements the interface.&lt;br/&gt;&lt;br/&gt;Now, whilst writing some unit tests for update-manager I came up with a simple way of doing "real" validation, and I would like to share that Python code with you.&lt;br/&gt;&lt;br/&gt;Firstly, I'd like to give you an overview of which checks my code carries out:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Mandatory method (raises NotImplementedError in interface definition) is not implemented (also raises NotImplementedError in implementation)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Optional or mandatory method is of correct type (static method versus instance method)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Optional or mandatory method has a different signature (argument count is different)&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;I consider at least the first and last check viable for validation of an interface against its implementation. The second check I listed is not that useful, and may produce false positives when someone uses certain decorators, I did not carry out any tests on that myself though.&lt;br/&gt;&lt;br/&gt;The code can be found in update-manager's repository (&lt;a title="tests/_helpers.py @bzr.debian.org - update-manager gsoc09 repository" href="http://bzr.debian.org/loggerhead/update-manager/devel/gsoc09/annotate/head:/tests/_helpers.py?"&gt;link&lt;/a&gt;) and (for now) is licensed under the GPLv2 or later. I am willing to distribute this code as a separate Python module (maybe under a more permissive license like the LGPL) if enough (let's say at least two) people are interested in it, so please let me know if you like it.&lt;br/&gt;&lt;br/&gt;Apart from the code itself the unit tests in the file linked above should explain how this beast exactly works.&lt;br/&gt;&lt;br/&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1657622990903131257?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1657622990903131257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/06/python-interface-validation.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1657622990903131257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1657622990903131257'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/06/python-interface-validation.html' title='Python interface validation'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-7645577357325191998</id><published>2009-06-19T04:27:00.000+02:00</published><updated>2009-11-09T21:21:28.476+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='update-manager'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>update-manager weekly update #2</title><content type='html'>First of all: yes, I skipped update #1. I was rather busy with some assignments and exams at university and didn't work that much on update-manager the past two weeks.&lt;br/&gt;&lt;br/&gt;Anyways, this update contains everything that has happened since &lt;a title="update-manager weekly update #0 @blog.peijnik.at" href="http://blog.peijnik.at/2009/05/27/update-manager-weekly-update-0/"&gt;update #0&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Changelog fetching&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The changelog fetching code has been added to update-manager. This means that the changelog will be shown in the details section now and should look the same it looked before. However, I have only written that code for Debian so far, but the Ubuntu part is on my TODO list.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The documentation has been updated and uploaded to alioth and can be viewed &lt;a title="update-manager documentation @update-manager.alioth.debian.org" href="http://update-manager.alioth.debian.org/doc/current/"&gt;here&lt;/a&gt;. I have set up a python environment on alioth which allows building the documentation directly, rather than building it locally and uploading it then. Basically this works by having a separate python packages directory, containing some mock modules that are needed (think gtk and friends here), allowing us to build the docs without having to install all dependencies.&lt;br/&gt;I am planning on elaborating on this method and how to create such an environment in one of my upcoming posts, so stay tuned if you could use something like this too.&lt;br/&gt;&lt;br/&gt;Additionally to this environment the documentation has been updated a great deal, including more modules and containing documentation for previously undocumented methods and classes.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Application module&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I have reworked some aspects of the UpdateManager.Application module, allowing me to do unit testing on pretty much every aspect of the class. The problem I fixed here is that Application directly called sys.exit when something went wrong and now raises exceptions, which contain the status code and are handled in the respective scripts (ie. "update-manager").&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Gtk Frontend and updates from another thread&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;One thing I fixed was the problem caused by the changelog fetching code running in a separate thread and invoking a callback function that updates the UI. It seems as Gtk isn't that happy when you do this and the UI wouldn't be updated immediatly (it seemed that this only happened after some events, like scrolling the update list). This has been reworked and the callback function now checks if it was called from the main thread or not and calls gtk.gdk.threads_enter/_leave accordingly.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Changelog Viewer&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;After finishing the changelog fetching code I added the ChangelogViewer widget from previous update-manager versions again, supporting creation of links to launchpad and debian bugs (ie. LP:NNNNNN and Closes: #NNNNNN are now links) and displaying the version number in bold, among other things.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Weeding out UpdateManager.Frontend.Gtk.utils&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Initially I just copied over the utils module from old update-manager to the new implementation, leaving every single function in there, but now I decided to weed out the module. The result is that only the functions actually used by this implementation remained in there. Related to this documentation of that module is pending and on my TODO list.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Version number&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;After a chat with my mentor we decided to bump update-manager's version to 0.200-pre. This should make it easier to distinguish from the old version and indicates that a lot has changed. The first release following the -pre series will be 0.200.0, which should then include all functionality old update-manager included.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;My TODO list for next week&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Ordered by priority&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Documentation of UpdateManager.Frontend.Gtk.utils and .ChangelogViewer modules&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Ubuntu Distribution Specific code&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;More unit tests&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Update list downloading in Gtk frontend&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-7645577357325191998?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/7645577357325191998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/06/update-manager-weekly-update-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7645577357325191998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7645577357325191998'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/06/update-manager-weekly-update-2.html' title='update-manager weekly update #2'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-7284479615920173884</id><published>2009-06-02T08:55:00.000+02:00</published><updated>2009-11-09T21:21:28.478+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='update-manager'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Should CLI debug output and error messages be localized in a GUI
application?</title><content type='html'>Whilst working on update-manager I have been wondering whether I should use gettext for localizing debug output and error messages sent to stderr.&lt;br/&gt;As for debug output itself I basically do not see the need for providing a localized version for each and every message sent to stderr, but as far as error messages are concerned I am uncertain.&lt;br/&gt;&lt;br/&gt;The point is that update-manager (apart from its experimental text interface) is usually not launched from a terminal at all and so most users won't even see these messages ever. Also, I believe that every developer's English skills are good enough so that he or she is able to understand simple messages.&lt;br/&gt;Error messages however might be useful to all users when they experience a problem with the software, but localizing those could make handling bug reports a bit harder, possibly having to translate the error message back to English before being able to see what has gone wrong.&lt;br/&gt;&lt;br/&gt;So basically I am asking you: What do you think? Is it worth localizing these messages? What is your experience with localized or non-localized error and debug messages?&lt;br/&gt;&lt;br/&gt;I would be glad if I could get some input from you, either as a comment to this article, via email to debian(dot)sp(dot)or(dot)at or through the &lt;a title="update-manager-devel listinfo @lists.alioth.debian.org" href="http://lists.alioth.debian.org/mailman/listinfo/update-manager-devel"&gt;update-manager-devel&lt;/a&gt; mailing list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-7284479615920173884?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/7284479615920173884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/06/should-cli-debug-output-and-error.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7284479615920173884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7284479615920173884'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/06/should-cli-debug-output-and-error.html' title='Should CLI debug output and error messages be localized in a GUI&#xA;application?'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-2900319837896355329</id><published>2009-06-01T20:20:00.000+02:00</published><updated>2009-11-09T21:21:28.480+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='update-manager'/><title type='text'>sphinx-aware Enums in Python</title><content type='html'>As I promised to keep you updated on recent developments on update-manager I am writing this article. Just as a disclaimer: I am not going to write about any recent developments here, but would rather like to point at a piece of code I added to update-manager that could be useful in other applications too.&lt;br/&gt;&lt;br/&gt;Now, as the title suggests there are sphinx-aware Enums in update-manager. Enums are common constructs in other programming languages like C and allow simple creation of constants with, for example, ascending values (first constant has value 0, second has value 1 and so on). Python unfortunately does not include support for Enums itself, but I found it rather easy to write classes that emulate such a construct.&lt;br/&gt;&lt;br/&gt;Nothing is new about Enums in Python and there are probably quite a few different implementations out there, but I believe mine is different. The sphinx-aware part means that my implementation automagically updates the docstrings of the created instances and thus allows sphinx' "autodata" method to include sensible information in generated API documentation.&lt;br/&gt;&lt;br/&gt;I could go on writing about and praising my method, but I believe a short example gives you a better idea how my implementation works and what I wanted to achieve with this. Have a look at &lt;a title="UpdateManager.Backend.RELOAD_CACHE_STATUS Enum (update-manager API doc) @update-manager.alioth.debian.org" href="http://update-manager.alioth.debian.org/doc/current/api/api/UpdateManager/Backend/index.html#UpdateManager.Backend.RELOAD_CACHE_STATUS"&gt;this page&lt;/a&gt;, which is part of update-manager's new API documentation. You should see rather well-looking documentation of the &lt;em&gt;UpdateManager.Backend.RELOAD_CACHE_STATUS&lt;/em&gt; NegativeEnum, the defined constants, their values and some additional information about each value now.&lt;br/&gt;&lt;br/&gt;Still, nothing too fancy, HTML documentation generated from docstrings. What makes this special is the code from which it was generated:&lt;br/&gt;&lt;br/&gt;&lt;pre name="code" class="python"&gt;RELOAD_CACHE_STATUS = NegativeEnum(&lt;br/&gt;  BEGIN = "Started reloading package cache",&lt;br/&gt;  DONE = "Finished reloading package cache")&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;This not only gives us a &lt;em&gt;RELOAD_CACHE_STATUS&lt;/em&gt; enum, along with the &lt;em&gt;RELOAD_CACHE_STATUS.BEGIN&lt;/em&gt; and &lt;em&gt;RELOAD_CACHE_STATUS.DONE&lt;/em&gt;, but also some documentation, included in &lt;em&gt;RELOAD_CACHE_STATUS&lt;/em&gt;' docstring, that can be used by sphinx.&lt;br/&gt;&lt;br/&gt;You can find the Enum code, which is rather short and should be quite easy to understand, &lt;a title="UpdateManager/Util/enum.py @bzr.debian.org/loggerhead" href="http://bzr.debian.org/loggerhead/update-manager/devel/gsoc09/annotate/head:/UpdateManager/Util/enum.py?"&gt;here&lt;/a&gt;. I hope you find this code as useful as I do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-2900319837896355329?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/2900319837896355329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/06/sphinx-aware-enums-in-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2900319837896355329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2900319837896355329'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/06/sphinx-aware-enums-in-python.html' title='sphinx-aware Enums in Python'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-6634281606454315198</id><published>2009-05-28T13:44:00.000+02:00</published><updated>2009-11-09T21:21:28.482+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='update-manager'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>update-manager on alioth</title><content type='html'>As I noted in this weeks &lt;a title="update-manager weekly update #0 @blog.peijnik.at" href="http://blog.peijnik.at/2009/05/27/update-manager-weekly-update-0/"&gt;update-manager progress update&lt;/a&gt; one of my tasks was to create an &lt;a title="alioth.debian.org" href="http://alioth.debian.org"&gt;alioth.debian.org&lt;/a&gt; project and get my branches uploaded to Debian.&lt;br/&gt;&lt;br/&gt;I did not imagine that alioth admins (hi there, a huge "thank you" goes to you guys) would be this fast with reviewing and accepting the project and enabling bazaar support for me.&lt;br/&gt;Anyways, the project has been accepted and its &lt;a title="update-manager project @alioth.debian.org" href="https://alioth.debian.org/projects/update-manager/"&gt;new home&lt;/a&gt; is on alioth. I have also already uploaded both my &lt;a title="my update-manager branch @bzr.debian.org" href="http://bzr.debian.org/loggerhead/update-manager/devel/gsoc09/"&gt;update-manager branch&lt;/a&gt; and &lt;a title="my python-apt branch @bzr.debian.org" href="http://bzr.debian.org/loggerhead/users/speijnik-guest/python-apt/gsoc09"&gt;python-apt branch&lt;/a&gt; to bzr.debian.org&lt;br/&gt;&lt;br/&gt;Additionally I have generated the &lt;a title="update-manager API documentation @update-manager.alioth.debian.org" href="http://update-manager.alioth.debian.org/doc/current/api/"&gt;API documentation&lt;/a&gt;, which is also hosted on alioth, and created a development disccusion mailing list, &lt;a title="update-manager-devel listinfo @lists.alioth.debian.org" href="http://lists.alioth.debian.org/mailman/listinfo/update-manager-devel"&gt;update-manager-devel at lists.alioth.debian.org&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;If you are interested in this project feel free to have a look at what I've done so far and join the development discussion. Comments, critizism and ideas are always welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-6634281606454315198?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/6634281606454315198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/05/update-manager-on-alioth.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6634281606454315198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6634281606454315198'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/05/update-manager-on-alioth.html' title='update-manager on alioth'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-908913174257563611</id><published>2009-05-28T01:52:00.000+02:00</published><updated>2009-11-09T21:21:28.485+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='update-manager'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>update-manager weekly update #0</title><content type='html'>It has been more than a month since I last wrote about my work on update-manager during this year's Google Summer Of Code and I am somewhat ashamed I wasn't able to provide you with updates more regularly.&lt;br/&gt;&lt;br/&gt;So first of all, yes, I did do some work and yes, there has been quite some progress. Basically both private and university stuff have kept me from writing and that's why I'd like to start with this series of weekly updates today.&lt;br/&gt;This series are meant to summarize what has happened during a week of writing code and give you an overview of what's happening. This first issue however will sum up the past month.&lt;br/&gt;&lt;br/&gt;So let me begin explaining what has happened since my &lt;a title="update manager to become more modular @blog.peijnik.at" href="http://blog.peijnik.at/2009/04/24/update-manager-to-become-more-modular/"&gt;last post&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;strong&gt;update-manager bazaar repository&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;All code I have written so far is available through a public bazaar branch on &lt;a title="launchpad.net" href="http://launchpad.net"&gt;launchpad.net&lt;/a&gt;. My branch's page can be found &lt;a title="my update-manager branch @code.launchpad.net" href="https://code.launchpad.net/~speijnik/update-manager/distribution-independent"&gt;here&lt;/a&gt; and provides you with its history and of course instructions on how to obtain the code. The location is only temporary though, as I am going to move hosting over to &lt;a title="alioth.debian.org" href="http://alioth.debian.org"&gt;alioth.debian.org&lt;/a&gt;. This is on my task list for next week.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;modular design&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I have ripped apart nearly all of update-manager and put it together in a more modular way, which should implementing new frontends or backends more easy, whilst also simplifying code maintenance.&lt;br/&gt;&lt;br/&gt;The new design consists of four major parts:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;The application class is responsible for parsing command line arguments, initializing all other components correctly and coordinate communication between the frontend and the backend.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;The backend itself is defined through the UpdateManager.Backend.BackendBase class and each implementation subclasses BackendBase. It is responsible for interacting with apt.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;The frontend is again defined through a base class, UpdateManager.Frontend.FrontendBase. This part of update-manager provides the userinterface, handles user input and starts operations accordingly.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Lastly there is the distribution-specific part, which lives inside the UpdateManager.DistSpecific Python module and is defined by its own base class, DistBase.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;strong&gt;backend implementation&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;When I started working on update-manager it heavily relied on synaptic and used it to do the dirty-work. However, together with my mentor, mvo, I decided to drop synaptic support and rather concentrate on using python-apt. This means that the only backend implementation right now is a python-apt backend.&lt;br/&gt;&lt;br/&gt;The python-apt backend is currently a work in progress, but already includes some basic functionality. Right now it can (re-)load the package cache and package lists and is able to provide a list of packages which are upgradable to the frontend.&lt;br/&gt;Whilst implementing these functions I noticed some shortcomings of python-apt itself, fixed those and got mvo included in &lt;a title="mvo's python-apt branch @code.launchpad.net" href="https://code.launchpad.net/~mvo/python-apt/python-apt--mvo"&gt;his python-apt branch&lt;/a&gt; at launchpad.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;frontend implementation&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I started re-implementing the Gtk frontend as provided through current update-manager and right now it visualizes the package cache reloading process and provides users with a list of upgradable packages. However, that's pretty much all of the functionality it includes right now, which is why implementing more functions is pretty much on the top of my todo list.&lt;br/&gt;&lt;br/&gt;Additionally I have ported the text frontend, as included in Ubuntu, to the new modular system, and this frontend's code really shows how easy adding a frontend with the new modular design is. This frontend contains the same functionality as the Gtk frontend.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;distribution specific code&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The core described above does not include any distribution specific code anymore, which is the main focus of this project. The implementations of distribution-specific functionality contains classifiers for update categories for both Debian and Ubuntu, whilst I focused on getting things right with the Debian implementation for now. These classifiers allow the frontend to let the user know which kind of update they are about to install, like a security update, a recommended upgrade or a third-party (unofficial) upgrade.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;documentation&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;As update-manager was poorly (read: hardly at all) documented I started documenting the API using sphinx. However, right now the generated documentation cannot be found anywhere yet. This should change as soon as an alioth project for update-manager has been created.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;next week's tasks&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I would also like to provide you with my task list for the coming week. The list, ordered by priority, is:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Register an alioth project and move the bazaar branch to bzr.debian.org&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Generate an HTML version of the API documentation and put it on alioth.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Implement changelog-fetching for the Debian-specific module and make use of that from within the code and the Gtk frontend.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;As you can see this list is rather short. This can mainly be attributed to a few university assignments, and instead of providing a long list of tasks which I probably won't be able to finish I rather keep the list short and hopefully get things not on this list done too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-908913174257563611?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/908913174257563611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/05/update-manager-weekly-update-0.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/908913174257563611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/908913174257563611'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/05/update-manager-weekly-update-0.html' title='update-manager weekly update #0'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-9090493678329778442</id><published>2009-04-24T19:41:00.000+02:00</published><updated>2009-11-09T21:21:28.488+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>update manager to become more modular</title><content type='html'>In my &lt;a title="Summer Of Code 2009: Working for Debian @ blog.peijnik.at" href="http://blog.peijnik.at/2009/04/21/summer-of-code-2009-working-for-debian/"&gt;last post&lt;/a&gt; I wrote about how I got accepted for GSoC09 and am going to work on &lt;a title="update-manager @ launchpad.net" href="https://launchpad.net/update-manager"&gt;update manager&lt;/a&gt;. Now I couldn't wait for the actual GSoC09 coding period to start and created my own &lt;a title="update-manager/distribution-independent branch @ code.launchpad.net" href="https://code.launchpad.net/~speijnik/update-manager/distribution-independent"&gt;update manager branch&lt;/a&gt; right away and started hacking.&lt;br/&gt;&lt;br/&gt;So far I have only written a few lines of code, but my mentor Michael Vogt and me came to the conclusion that whilst working on the internals of update manager it might be a good idea to make the whole program more modular.&lt;br/&gt;Right now all the different functions of update manager (being the UI/frontend and the package manager interface/backend) are mixed up in various files, which makes not only reading the code harder, but also extending update manager more difficult. This was reason enough for me to have a look into making update manager more modular in its design and some of my efforts can already be seen in my update manager branch.&lt;br/&gt;&lt;br/&gt;If you have any comments on the proposed backend interface or see major problems with it, please let me know, I would really appreciate some input on that. Also, the UI and the distribution-specific code interfaces are next on my list, before beginning to actually move existing code around. I hope to be able to finish that work before the GSoC hacking period starts, so I can concentrate entirely on my task of making update-manager distribution independent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-9090493678329778442?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/9090493678329778442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/04/update-manager-to-become-more-modular.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/9090493678329778442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/9090493678329778442'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/04/update-manager-to-become-more-modular.html' title='update manager to become more modular'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1215627308666078451</id><published>2009-04-21T09:10:00.000+02:00</published><updated>2009-11-09T21:21:28.492+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>Summer Of Code 2009: Working for Debian</title><content type='html'>Yesterday Google announced the students and projects that have been accepted for Google Summer Of Code 2009 and guess what: &lt;a title="Distribution-independent update-manager @ wiki.debian.org" href="http://wiki.debian.org/SummerOfCode2009/Distribution_independent_update_manager"&gt;my project&lt;/a&gt; was accepted. This means I will be working full-time on FOSS this summer.&lt;br/&gt;&lt;br/&gt;So I guess it's about time to introduce my project to you: Distribution-independent update manager, mentored by &lt;a title="mvo @ launchpad.net" href="https://launchpad.net/~mvo"&gt;Michael Vogt (mvo)&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Okay, I believe some of you might wonder what this project is all about, as &lt;a title="update-manager @ packages.qa.debian.org" href="http://packages.qa.debian.org/u/update-manager.html"&gt;update-manager&lt;/a&gt; is in the Debian package archive already. There is a problem with update-manager though. As you see in the package's version number (it contains ".debian") update-manager has been adapted for use in Debian. Also, Debian contains update-manager 0.68 right now, whilst upstream (Ubuntu in this case) has released &lt;a title="update-manager revision log @ bazaar.launchpad.net" href="http://bazaar.launchpad.net/~ubuntu-core-dev/update-manager/main/revision/1374"&gt;0.111.6&lt;/a&gt; (actually there were quite a few upstream versions meanwhile). The reason Debian is nowhere near being up-to-date with upstream is that right now a lot of effort has to be put into porting update-manager to Debian every time a new upstream release is made, because certain Ubuntu-specific functionality breaks update-manager in more or less severe ways on Debian.&lt;br/&gt;&lt;br/&gt;This leads me directly to what my project is about: making update-manager (Ubuntu-) distribution-independent, but not package manager independent.&lt;br/&gt;There are 6 main goals for this project, which I will be working on in the order below.&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Analyzing the code and identifying Ubuntu-specific parts.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Creating a distribution-plugin interface and moving the Ubuntu-specific parts into a distribution-plugin, creating a core package that is distribution-independent.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Creating a special notification for important/security related updates and providing the code that handles updates from security.debian.org as such.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Creating a backend-plugin interface, moving the synaptics backend into a backend-plugin and optionally create a python-apt based plugin.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;UI redesign, providing a simpler interface to average joe, whilst allowing more experienced users to optionally display more information.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Automatic downloading &amp;amp; installation of updates. This is still up to discussion, as automatic downloading is already provided by software-properties (-gtk and -kde) and automatic installation can be handled by unattended-upgrades. Both packages are part of Debian already.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Please note that this list should not be considered final and may be extended or modified over time. It exists to give you an overview of what exactly my project is about and how I am planning on carrying out the tasks.&lt;br/&gt;&lt;br/&gt;Finally I wanted to let you know that I will keep you posted on the progress I am making, via this blog. Alternatively a blog aggregator for Debian's GSoC students has been set up over at &lt;a title="Debian's GSoC blog aggregator" href="http://soc.alioth.debian.org/feeds/blogs/"&gt;http://soc.alioth.debian.org/feeds/blogs/&lt;/a&gt;, where you can not only find my posts, but those of all of Debian's students.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1215627308666078451?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1215627308666078451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/04/summer-of-code-2009-working-for-debian.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1215627308666078451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1215627308666078451'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/04/summer-of-code-2009-working-for-debian.html' title='Summer Of Code 2009: Working for Debian'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1477286516687077857</id><published>2009-04-02T19:35:00.000+02:00</published><updated>2009-11-09T21:21:28.493+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='everywhere'/><title type='text'>Python everywhere: computer games</title><content type='html'>This is the second article in my series Python everywhere and covers the use of Python for in computer games. The first article of this series covered the use of Python for the conficker worm scanner tool and can be found &lt;a title="Python everywhere: conficker scanner" href="http://blog.peijnik.at/2009/03/31/python-everywhere-conficker-scanner/"&gt;here&lt;/a&gt;.&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;strong&gt;Games written in Python&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;As &lt;a title="pygame.org" href="http://www.pygame.org/"&gt;PyGame&lt;/a&gt; provides a nice library for writing games purely in Python it is becoming more common to use Python for this task too. The book "&lt;a title="Beginning Game Development with Python and Pygame  @ apress.com" href="http://www.apress.com/book/view/9781590598726"&gt;Beginning Game Development with Python and Pygame&lt;/a&gt;" is linked directly from the PyGame homepage, and thus is probably a good resource if you want to start writing games in Python.&lt;br/&gt;&lt;br/&gt;However, I do not want to go into detail on how this library works, but rather provide you with a few examples of games written in Python. To provide you with a few examples I had a look at the &lt;a title="pyweek.org" href="http://www.pyweek.org/"&gt;PyWeek&lt;/a&gt; homepage. PyWeek is a Python Game Programming Challenge which invites everyone to participate, so the winners of this contest are of high-quality, and I'm showing you the latest two winners.&lt;br/&gt;&lt;br/&gt;There are always two winners of PyWeek in for indivduals who have created games and teams. The latest winners are "&lt;a title="Team Rambo @ pyweek.org" href="http://www.pyweek.org/e/Rambo/"&gt;Team Rambo&lt;/a&gt;" in the individual effort category and "&lt;a title="Midnight Sun @ pyweek.org" href="http://www.pyweek.org/e/midnightsun/"&gt;Midnight Sun&lt;/a&gt;" with their two-man team.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;PyWeek: Team Rambo's Stringrolled (individual)&lt;/strong&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;Stringrolled makes use of the pygame library I mentioned earlier and is a &lt;a title="Platform game @ en.wikipedia.org" href="http://en.wikipedia.org/wiki/Platform_game"&gt;platform game&lt;/a&gt;. In a mere 2377 lines of code, including comments and blank lines, Team Rambo created an impressive game, coming with a story, easy-to-learn controls and nice 2D-graphics, screenshot below. &lt;a href="http://media.pyweek.org/dl/7/Rambo/pyweek3.png"&gt;&lt;img class="aligncenter" title="Screenshot of Stringrolled" src="http://media.pyweek.org/dl/7/Rambo/pyweek3.png" alt="Stringrolled screenshot @ media.pyweek.org" width="384" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;strong&gt;PyWeek: Midnight Sun's Kite Story&lt;/strong&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;Kite Story is yet another interesting game, with game mechanics I have not seen ever before. You are controlling a kite with your mouse and are trying to catch objects, such as bees and birds, with the kite's rope. So what you basically do you draw a loop around an object with&lt;a href="http://media.pyweek.org/dl/7/midnightsun/ss2.png"&gt;&lt;img class="alignleft" title="Kite Story: catching a sky diver" src="http://media.pyweek.org/dl/7/midnightsun/ss2.png" alt="Kite Story screenshot @ media.pyweek.org" width="357" height="359" /&gt;&lt;/a&gt; your mouse and that way catch it. Every third cought object you advance to the next level, but keep in mind not to collide with the objects, because you will lose them and in turn be doing the previous level again, screenshot below. It should be noted that this game does not make use of PyGame at all, but rather relies on &lt;a title="pyglet.org" href="http://pyglet.org/"&gt;pyglet&lt;/a&gt;, and is 1997 lines of code in length, again counting blank lines and comments too.&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;strong&gt;Games using Python&lt;/strong&gt;&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;You have seen now that it is possible to write a game completely in Python, but there's another use-case of Python in games: scripting.&lt;br/&gt;Some (proprietary) games, such as &lt;a title="Modding Sid Meier's Civilization IV @ 2kgames.com" href="http://www.2kgames.com/civ4/blog_03.htm"&gt;Civilization IV&lt;/a&gt;, offer Python support in their editors and SDKs. This quote from the article at 2kgames.com should give you a good idea of what can be done using Python in Civilization IV:&lt;br/&gt;&lt;blockquote&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;The next level offers &lt;strong&gt;Python and XML&lt;/strong&gt; support, letting modders with more experience manipulate the game world and everything in it. XML (eXtensible Markup Language) files can be edited in standard text editors or in special XML file editors that have ease-of-use features like a grid view. Editing these files will allow players to tweak simple game rules and change or add content. For instance, they can add new unit or building types, change the cost of wonders, or add new civilizations. Players can also change the sounds played at certain times or edit the play list for your soundtrack. NOTE: You can have custom soundtracks simply by adding music to the custom folder. You only need to edit the XML in order to assign certain pieces to specific eras or remove certain pieces.&lt;/p&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;blockquote&gt;The Python scripting language is fully integrated throughout the game and offers experienced modders a chance to really strut their stuff! People with some programming skills will be able to do things to alter the game in interesting and extraordinary ways. For instance, all of the game interface screens are exposed to Python, so modders will be able to change the information that's displayed, as well as how it's positioned on the screen. We also use Python to create and generate all of the random map scripts that are included in the game. So, players will now have the ability to add scripted events to the game like automatically generating units when a tile is reached, having specific situations trigger automatic war, or get this, bringing back Civil Wars caused by unrest, Civ II style!&lt;/blockquote&gt;&lt;br/&gt;&lt;a title="EVE Online Homepage" href="http://www.eveonline.com/"&gt;EVE Online&lt;/a&gt; is another game making use of Python, as an &lt;a title="stackless python 2.5 @ eveonline.com" href="http://www.eveonline.com/devblog.asp?a=blog&amp;amp;bid=488"&gt;article&lt;/a&gt; over at eveonline.com points out.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Python everywhere - also in compuater games&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Even though I am sure you can come up with a lot more examples of Python being used in computer games I think I have proven my point. Python is being used not only to create computer games, but sometimes also to provide developers with a way of extending games. To me personally it feels as if adoption of Python for this very task is increasing too, and I expect Python to be used even more by the game development community in the future.&lt;br/&gt;&lt;br/&gt;You can expect the third part of this series to be released in about a week, so please check back regularly if you like the series.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1477286516687077857?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1477286516687077857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/04/python-everywhere-computer-games.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1477286516687077857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1477286516687077857'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/04/python-everywhere-computer-games.html' title='Python everywhere: computer games'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-3498442585948574888</id><published>2009-04-01T14:06:00.000+02:00</published><updated>2009-11-09T21:21:28.496+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><title type='text'>Problems running PHP as a separate FastCGI process</title><content type='html'>As some of you might have noticed this webserver has not been that responsive in the past few hours and I have been working hard on getting that fixed. I finally identified the problem and was able to fix it.&lt;br/&gt;&lt;br/&gt;The root of the problem was my setup running PHP as a separate FastCGI process. Unfortunatly it seems as if PHP can only handle 500 requests per FastCGI process and then seems to lock up.&lt;br/&gt;The old setup of this site didn't cause such problems and it seems the problem lies in not setting the &lt;em&gt;PHP_FCGI_CHILDREN&lt;/em&gt; and &lt;em&gt;PHP_FCGI_MAX_REQUESTS&lt;/em&gt; environment variables with the new setup.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I initially thought that the default values of those environment variables were safe, but they are not. As I already wrote PHP seems to lock up after 500 requests and the solution lies in changing &lt;em&gt;PHP_FCGI_CHILDREN&lt;/em&gt;, which defaults to 0 (no additional processes) to something bigger than 0 (I am using 2 children to make sure I have at least one PHP process reading for answering requests at any time).&lt;br/&gt;Why? Quite simple, if you increase the value the PHP root process becomes some sort of manager and delegates requests to the children, as expected. However, using &lt;em&gt;PHP_FCGI_MAX_REQUESTS&lt;/em&gt; it only forwards the specified number of requests to a child process before killing it and starting a new one. &lt;strong&gt;Problem solved&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;Information on this behaviour can not be found in the PHP online manual, but rather at &lt;a title="README.FastCGI @ lxr.php.net" href="http://lxr.php.net/source/php-src/sapi/cgi/README.FastCGI"&gt;http://lxr.php.net/source/php-src/sapi/cgi/README.FastCGI&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-3498442585948574888?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/3498442585948574888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/04/problems-running-php-as-separate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3498442585948574888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3498442585948574888'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/04/problems-running-php-as-separate.html' title='Problems running PHP as a separate FastCGI process'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-7898349443529250777</id><published>2009-03-31T16:33:00.000+02:00</published><updated>2009-11-09T21:30:21.454+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='everywhere'/><title type='text'>Python everywhere: extending applications with Python</title><content type='html'>Extending applications with Python: gimp, Evolution, Inkscape, Paint Shop Pro, [...]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-7898349443529250777?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/7898349443529250777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-everywhere-extending.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7898349443529250777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7898349443529250777'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-everywhere-extending.html' title='Python everywhere: extending applications with Python'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-3458352926292730998</id><published>2009-03-31T16:31:00.000+02:00</published><updated>2009-11-09T21:30:21.459+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='everywhere'/><title type='text'>Python everywhere: A Python Operating System called cleese</title><content type='html'>Cleese....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-3458352926292730998?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/3458352926292730998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-everywhere-python-operating.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3458352926292730998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3458352926292730998'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-everywhere-python-operating.html' title='Python everywhere: A Python Operating System called cleese'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1941996102367910986</id><published>2009-03-31T14:30:00.000+02:00</published><updated>2009-11-09T21:21:28.500+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='everywhere'/><title type='text'>Python everywhere: conficker scanner</title><content type='html'>This article is the first in my new series "Python everywhere".&lt;br/&gt;&lt;br/&gt;As this is the first article in this series I would like to explain what the series is all about.&lt;br/&gt;As an avid Python user and developer I want to share my observations whenever I find Python applications doing not-so-unusual things, Python applications running on embedded devices. In the end I want to point out just what the name of this series suggests: Python is everywhere and can be used for everything.&lt;br/&gt;&lt;br/&gt;So, straight ahead to the first issue: the conficker scanner.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;When reading an article about a detection mechanism for the conficker worm on &lt;a title="Deutsche Forscher entwickeln Netzwerk-Scan für Conficker-Wurm @ heise.de" href="http://www.heise.de/security/Deutsche-Forscher-entwickeln-Netzwerk-Scan-fuer-Conficker-Wurm--/news/meldung/135434"&gt;heise Security&lt;/a&gt; [german] I was myself wondering a few things, but wanted to give it a try. So I followed the link to the article &lt;a title="Detecting Conficker @ honeynet.org" href="http://honeynet.org/node/388"&gt;Detecting Conficker&lt;/a&gt;, by &lt;a title="Werner Tillmann\s blog @ honeynet.org" href="http://honeynet.org/blog/9"&gt;Tillmann Werner&lt;/a&gt;. Before clicking the link I was wondering whether I could get this tool running on GNU/Linux using wine, or another method.&lt;br/&gt;&lt;br/&gt;After downloading the ZIP file and unpacking it I thought I was dreaming. There were two Python files, along with a &lt;em&gt;COPYING&lt;/em&gt; file.&lt;br/&gt;So, even though before having a look at the code I wanted to know the COPYING conditions, and again I saw something unexpected: it's licensed under the &lt;strong&gt;GPLv3&lt;/strong&gt;, great!&lt;br/&gt;&lt;br/&gt;As there are some computers running a proprietary operating system from Redmond on this network I immediately gave it a shot. I started the script (&lt;em&gt;scs.py&lt;/em&gt;), and after fulfilling its requirements (namely the &lt;em&gt;impacket&lt;/em&gt; Python module) I ran it on the local network and it worked without any problems. No conficker found on this network, after all my flatmates have their systems secured - good.&lt;br/&gt;&lt;br/&gt;So there you have another use-case for Python: detecting malware over the network.&lt;br/&gt;Kudos should go to Tillmann Werner, not only for this piece of Python code, but also for his work on the &lt;a title="honeynet project (honeynet.org)" href="http://honeynet.org/"&gt;honeynet project&lt;/a&gt; and, together with Felix Leder, the great &lt;a title="Know Your Enemy: Containing Conficker paper @ honeynet.org" href="https://www.honeynet.org/papers/conficker"&gt;analysis&lt;/a&gt; of conficker. Keep up the good work, and thanks for proving Python can also be used for this task.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1941996102367910986?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1941996102367910986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-everywhere-conficker-scanner.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1941996102367910986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1941996102367910986'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-everywhere-conficker-scanner.html' title='Python everywhere: conficker scanner'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1883223353951650302</id><published>2009-03-31T02:27:00.000+02:00</published><updated>2009-11-09T21:21:28.501+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='pyttpd'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Introducing pyttpd</title><content type='html'>In this article I would like to inform you about my newest pet-project: &lt;a title="pyttpd project @ code.sp-its.at" href="http://code.sp-its.at/projects/pyttpd"&gt;pyttpd&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;pyttpd is my effort of implementing a webserver in Python, with a focus on security (through privilege separation), extensibility and scalability.&lt;br/&gt;&lt;br/&gt;I started this project because I was not entirely happy with the lack of flexibility and support for privilege separation by popular webservers. Whilst both &lt;a title="lighttpd.net" href="http://lighttpd.net"&gt;lighttpd&lt;/a&gt; and &lt;a title="httpd.apache.org" href="http://httpd.apache.org"&gt;Apache httpd&lt;/a&gt; provide means of running processes under different users these usually require hacks like &lt;a title="suexec (apache 2.0 documentation)" href="http://httpd.apache.org/docs/2.0/suexec.html"&gt;suexec&lt;/a&gt;. Additionally I am somehow curious about how a fully-fledged webserver implemented in Python would perform compared to the mentioned daemons.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Security through extensive use of Privilege Separation&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Whilst it is common for daemons to initially run as a privileged user and drop privileges as soon as possible it is possible to make more extensive use of setuid and friends.&lt;br/&gt;pyttpd's design aims at creating one &lt;a title="pmaster (pyttpd documentation)" href="http://code.sp-its.at/doc/pyttpd/tip/concepts/process_layout.html#privileged-master-process-pmaster"&gt;privileged process&lt;/a&gt;, which only binds to privileged ports and spawns subprocesses.&lt;br/&gt;All subprocesses have specific tasks, such as routing &lt;a title="umaster (pyttpd documentation)" href="http://code.sp-its.at/doc/pyttpd/tip/concepts/process_layout.html#unprivileged-master-process-umaster"&gt;between all processes&lt;/a&gt;, &lt;a title="listener process (pyttpd documentation)" href="http://code.sp-its.at/doc/pyttpd/tip/concepts/process_layout.html#id1"&gt;protocol-specific parsing&lt;/a&gt; of incoming requests and handling &lt;a title="vhost process (pyttpd documentation)" href="http://code.sp-its.at/doc/pyttpd/tip/concepts/process_layout.html#id2"&gt;processing&lt;/a&gt; of those requests.&lt;br/&gt;The point is that all these processes do not run as "&lt;em&gt;www-data&lt;/em&gt;" or another common account, but that a logic separation takes place on a per-host basis. This means that if the webserver is hosting &lt;em&gt;www.example.org&lt;/em&gt; and &lt;em&gt;webapp.example.org&lt;/em&gt; those will be running under different system accounts, making it hard to interfere with each other. This method should also enable the use of &lt;a title="Mandatory Access Control @ en.wikipedia.org" href="http://en.wikipedia.org/wiki/Mandatory_access_control"&gt;MAC&lt;/a&gt; mechanisms such as &lt;a title="SELinux @ en.wikipedia.org" href="http://en.wikipedia.org/wiki/SELinux"&gt;SELinux&lt;/a&gt; or &lt;a title="SMACK @ en.wikipedia.org" href="http://en.wikipedia.org/wiki/Simplified_Mandatory_Access_Control_Kernel"&gt;SMACK&lt;/a&gt; more efficiently.&lt;br/&gt;&lt;br/&gt;The design choice of having separate processes for each vhost comes with another benefit: users (or customers) "owning" a vhost could potentionally be allowed to modify parts of the vhost's configuration (excluding UID, GID, and other security-relevant options) on their own.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Early status&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Right now pyttpd is in a very early planning stage, with no code to show yet. I am still in the middle of the process of writing down all ideas that come to my mind, weeding some out and documenting the others.&lt;br/&gt;So what do I have to show you then? Well, the the concept section of the &lt;a title="Concepts (pyttpd documentation)" href="http://code.sp-its.at/doc/pyttpd/tip/concepts"&gt;documentation&lt;/a&gt; is online now and I am planning on extending it in the next few days and eventually start writing code rather sooner than later.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Your ideas...&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;...and opinions are what I am really interested in. If you are interested in this project I would love if you got involved in some way. Feel free to create tickets at pyttpd's &lt;a title="pyttpd project @ code.sp-its.at" href="http://code.sp-its.at/projects/pyttpd"&gt;project page&lt;/a&gt; if you have an idea you feel is worth adding or if one of my ideas is flawed, create a comment here or send me an &lt;a title="send email to stephan at peijnik dot at" href="mailto:stephan at peijnik dot at"&gt;email&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1883223353951650302?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1883223353951650302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/introducing-pyttpd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1883223353951650302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1883223353951650302'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/introducing-pyttpd.html' title='Introducing pyttpd'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-5670781859888591522</id><published>2009-03-30T12:30:00.000+02:00</published><updated>2009-11-09T21:21:28.502+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>UPDATE: AdSense on freedom blog reloaded</title><content type='html'>I just wanted to inform you that I am in the process of adding AdSense ads to this blog.&lt;br/&gt;However, I am planning on having a one-ad-per-post policy, whilst not placing any ads on the front page.&lt;br/&gt;&lt;br/&gt;More details on this topic will follow in the next few days.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I have now integrated AdSense into this blog. As promised the front page does not contain any ads, but all other pages do. Ads are shown as a widget so they are not in-text and thus should not disturb you whilst reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-5670781859888591522?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/5670781859888591522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/update-adsense-on-freedom-blog-reloaded.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5670781859888591522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5670781859888591522'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/update-adsense-on-freedom-blog-reloaded.html' title='UPDATE: AdSense on freedom blog reloaded'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-2448120557013802954</id><published>2009-03-29T13:32:00.000+02:00</published><updated>2009-11-09T21:21:28.503+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='argvalidate'/><title type='text'>python-argvalidate has hit Debian unstable</title><content type='html'>I am proud to announce that python-argvalidate has hit Debian unstable yesterday.&lt;br/&gt;&lt;br/&gt;This does not only mean that you can install argvalidate on Debian-based systems more easily now, but also that python-argvalidate has met the strict criteria of the &lt;a title="DFSG @ debian.org" href="http://www.debian.org/social_contract#guidelines"&gt;Debian Free Software Guidelines&lt;/a&gt;, and as such has been confirmed to be Free Software.&lt;br/&gt;&lt;br/&gt;Also, I wanted to let you know that I am maintaining the Debian package itself, which means that updates to python-argvalidate itself will be included in Debian as fast as possible, usually within two days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-2448120557013802954?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/2448120557013802954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-argvalidate-has-hit-debian.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2448120557013802954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2448120557013802954'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-argvalidate-has-hit-debian.html' title='python-argvalidate has hit Debian unstable'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-8569278089295504867</id><published>2009-03-29T13:17:00.000+02:00</published><updated>2009-11-09T21:21:28.505+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>How using proprietary software can affect system security</title><content type='html'>There has been a lot of discussion on whether Free Software is more secure than proprietary software, but I have an additional argument that shows how the use of Free Software can improve system security.&lt;br/&gt;&lt;br/&gt;Now you probably expect me to come up with a pure technical reason showing superiority of Free Software, but I am taking another path this time: let's talk about user trust.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Software updates on pure Free Software operating systems&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Firstly, let's take a look at how security updates are deployed on pure Free Software operating systems.&lt;br/&gt;All major GNU/Linux and *BSD distributions come with built-in update systems for all Free Software packages provided by the distribution. Once a security update to any piece of software is released you will get a notification saying updates are available and that you should install them and after doing so your system should be in a quite secure state.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Updater-applications of proprietary software&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Okay, proprietary software does often come with its own update mechanisms, giving you pretty much the same functionality. But here is my point: users tend to block these updater-applications from accessing the network with personal firewalls and similar tools, which basically disables the updater and most likely will cause the system to be more vulnerable rather sooner than later.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;But why do people even consider blocking an updater-application? &lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;When I asked people why they blocked these applications a lot of reasons came up, but it usually boils down to lack of trust for proprietary software vendors. People seem not to trust software vendors for a variety of reasons. The most common reasons seem to be that they are either worried about the disclosure of private information or the lack of a license for a piece of software, combined with the first reason.&lt;br/&gt;&lt;br/&gt;So people actually seem to be scared by what a piece proprietary software could do, and when not having their software licensed people seem to be even more scared. When I ask people why they are running these programs, even though they do not trust their vendors they usually shrug and I get replies that can be summed up as "it just works", "but I don't have a choice" and "I am used to software X".&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;The solution is Free Software&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Free Software can be a solution to all these problems. The most important thing people should be aware of that they do not have to fear Free Software vendors. After all, when using Free Software you do have a valid license and you can, at least in theory, check exactly a program is doing to your system. Also, if you are not capable of doing such checks yourself, you can rest assured that other people are doing such checks and give back to the project in question, improving your favorite Free Software applications.&lt;br/&gt;&lt;br/&gt;Free Software is a choice, and there is hardly any proprietary piece of software which cannot be replaced by a free equivalent. Free Software is my first choice, not only for me but for my family too, with great results so far.&lt;br/&gt;&lt;br/&gt;&lt;em&gt;Rest assured you can trust in what your software is doing, free yourself today&lt;/em&gt; - &lt;strong&gt;use Free Software&lt;/strong&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-8569278089295504867?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/8569278089295504867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/how-using-proprietary-software-can.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8569278089295504867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8569278089295504867'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/how-using-proprietary-software-can.html' title='How using proprietary software can affect system security'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-6827376775390439968</id><published>2009-03-26T13:06:00.000+01:00</published><updated>2009-11-09T21:21:28.506+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><title type='text'>A possible attack - what to do about this?</title><content type='html'>Just as I wanted to start writing an article here and I entered the URL of this blog into my browser I got no response from the webserver, zero, nothing.&lt;br/&gt;First I thought the PHP fastcgi process for this virtual host died, but a quick check on another virtual host suggested that something else was going on.&lt;br/&gt;&lt;br/&gt;So I guessed the lighttpd process itself must be experiencing problems of some sort, but after doing a "netstat -nat" I  knew what was going on:&lt;br/&gt;&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.248:12474    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.234:39671    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.253:39211    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.234:55160    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.230:25836    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.231:16865    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.232:24266    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.240:38441    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.243:17726    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.241:38206    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.251:23892    LAST_ACK&lt;br/&gt;tcp6       1      1 83.65.62.72:80          61.135.190.225:29675    LAST_ACK&lt;br/&gt;&lt;br/&gt;Plus "a few" more of those. Now I'm not entirely sure whether it's just some systems misbehaving or actually an attack, but my feelings told me this could have been intentional after all.&lt;br/&gt;I did a quick whois on one of those IP addresses and came up with the 61.135.0.0/16 network which is owned by China Network Communications Group Corporation.&lt;br/&gt;&lt;br/&gt;As the connections were made from pretty much every host in that network I had two choices: sit it out or block it.&lt;br/&gt;&lt;br/&gt;I came to the conclusion that blocking the entire subnet from connecting to this system, at least temporarily, might be a viable solution and so I did.&lt;br/&gt;However, afterwards I am asking myself whether I really had to block an entire 16-Bit network, so I am asking you: &lt;strong&gt;how do you handle such situations usually?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-6827376775390439968?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/6827376775390439968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/possible-attack-what-to-do-about-this.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6827376775390439968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6827376775390439968'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/possible-attack-what-to-do-about-this.html' title='A possible attack - what to do about this?'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-2352996617491949107</id><published>2009-03-24T17:02:00.000+01:00</published><updated>2009-11-09T21:20:59.346+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='argvalidate'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>python-argvalidate 0.9.0 released</title><content type='html'>Even though I planned providing a release candidate first, which can be seen in the project's &lt;a title="Mercurial changelog between 0.8.2 and 0.9.0" href="http://code.sp-its.at/projects/argvalidate/log?action=stop_on_copy&amp;amp;mode=stop_on_copy&amp;amp;rev=23&amp;amp;stop_rev=14&amp;amp;limit=100&amp;amp;verbose=on"&gt;Mercurial changelog&lt;/a&gt; I have released &lt;a title="python-argvalidate homepage @ code.sp-its.at" href="http://code.sp-its.at/projects/argvalidate"&gt;python-argvalidate&lt;/a&gt; 0.9.0 today. Tarballs can be obtained from the &lt;a title="Python Package Index" href="http://pypi.python.org"&gt;Python Package Index (pypi)&lt;/a&gt;, as usual.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;So what's has changed compared to 0.8.2&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Basically a lot of code has been rewritten or reviewed and modified. The most important change lies in argvalidate's internals though.&lt;br/&gt;Instead of relying on Python internals, those are the&lt;em&gt; func_*&lt;/em&gt; and &lt;em&gt;func_code.*&lt;/em&gt; attributes of every function argvalidate uses another mechanism for obtaining the information about functions now, the &lt;a title="inspect Module documentation @ docs.python.org" href="http://docs.python.org/library/inspect.html"&gt;inspect&lt;/a&gt; Module. In short this means that argvalidate should be more resistant to possible changes in the format of these attributes, because the &lt;em&gt;inspect&lt;/em&gt; Module that ships with Python should be changed accordingly and it is unlikely that its public interface is going to break.&lt;br/&gt;&lt;br/&gt;Which leads me straight to the next point regarding argvalidate: the public interface. The most visible change was the deprecation of the &lt;em&gt;method_args&lt;/em&gt;, &lt;em&gt;func_args&lt;/em&gt; and &lt;em&gt;return_value&lt;/em&gt; decorators. These decorators are still present, but will be removed in one of the next upcoming releases of argvalidate. The functionality of &lt;em&gt;method_args&lt;/em&gt; and &lt;em&gt;func_args&lt;/em&gt; has been combined into the &lt;a title="argvalidate.accepts @ argvalidate 0.9.0 documentation" href="http://code.sp-its.at/doc/argvalidate/v0.9.0/argvalidate.html#argvalidate.accepts"&gt;accepts&lt;/a&gt; decorator, whilst the &lt;a title="argvalidate.returns @ argvalidate 0.9.0 documentation" href="http://code.sp-its.at/doc/argvalidate/v0.9.0/argvalidate.html#argvalidate.returns"&gt;returns&lt;/a&gt; decorator replaces &lt;em&gt;return_value&lt;/em&gt;.&lt;br/&gt;&lt;br/&gt;accepts now includes some magic for automatically determining whether a function or method has been decorated. Initially the plan was on using inspect's &lt;a title="inspect.ismethod Module documentation @ docs.python.org" href="http://docs.python.org/library/inspect.html#inspect.ismethod"&gt;ismethod&lt;/a&gt; function, which did not work out as when the decorator is called for methods the method has not been bound to the class yet and looks like a simple function to ismethod. However, the magic added checks the first argument's name and decides that functions having either "&lt;em&gt;self&lt;/em&gt;" or "&lt;em&gt;cls&lt;/em&gt;" as their first parameter are methods, whilst everything else is a simple function.&lt;br/&gt;&lt;br/&gt;There is more to say about &lt;em&gt;accepts&lt;/em&gt;. Internally some checks which were done at every call to the decorated function in the past are now done only once, when the decorator is invoked. This should reduce the overhead argvalidate adds when the function (and thus the internal wrapper doing the checks) is called, but most likely will slow down decoration itself. However, decoration is only done once, whilst a function is likely to be called several times in its lifetime, which should give us an overall improvement of speed.&lt;br/&gt;&lt;br/&gt;The &lt;a title="argvalidate Documentation @ code.sp-its.at" href="http://code.sp-its.at/doc/argvalidate/v0.9.0/"&gt;documentation&lt;/a&gt; has been updated accordingly and can be found at the usual place.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;What's up next?&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;There is no real further &lt;a title="argvalidate roadmap @ code.sp-its.at" href="http://code.sp-its.at/projects/argvalidate/roadmap"&gt;roadmap&lt;/a&gt; for argvalidate right now. No issues were left open, except for Python 3 &lt;a title="ticket: Python3 compatibility meta @ code.sp-its.at" href="http://code.sp-its.at/projects/argvalidate/ticket/3"&gt;testing &amp;amp; support&lt;/a&gt;. Further releases are going to be made when needed, that is when you &lt;a title="argvalidate: submit bug report @ code.sp-its.at" href="http://code.sp-its.at/projects/argvalidate/newticket"&gt;submit&lt;/a&gt; a bug report and it is fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-2352996617491949107?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/2352996617491949107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-argvalidate-090-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2352996617491949107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2352996617491949107'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/python-argvalidate-090-released.html' title='python-argvalidate 0.9.0 released'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1488327977131505916</id><published>2009-03-17T12:49:00.000+01:00</published><updated>2009-11-09T21:21:28.507+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Presented in H^H^H^H^HIPv6</title><content type='html'>I just wanted to let you know that this blog (actually all webpages I am hosting) are now accessiable via &lt;a href="http://en.wikipedia.org/wiki/IPv6"&gt;IPv6&lt;/a&gt;. Additionally, my mail-server now also accepts IPv6 SMTP and IMAP connections, allowing communication with the IPv6-world.&lt;br/&gt;&lt;br/&gt;The setup uses &lt;a href="http://www.sixxs.net"&gt;SiXXs&lt;/a&gt; as tunnelbroker, with &lt;a href="http://www.amis.net"&gt;AMIS&lt;/a&gt; being the SiXXs PoP in use.&lt;br/&gt;If you experience any problems with the services I am providing via IPv6, please let me know, either via a comment to this article or an email to &lt;a href="mailto:ipv6@sp-its.at"&gt;ipv6@sp-its.at&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1488327977131505916?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1488327977131505916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/presented-in-hhhhhipv6.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1488327977131505916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1488327977131505916'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/presented-in-hhhhhipv6.html' title='Presented in H^H^H^H^HIPv6'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-4961436340131627697</id><published>2009-03-17T12:31:00.000+01:00</published><updated>2009-11-09T21:21:28.509+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Freedom blog reloaded launch</title><content type='html'>Welcome to my new blog, "freedom blog reloaded".&lt;br/&gt;&lt;br/&gt;Now with this first article I would like to elaborate on the name of the blog, the purpose and what you are likely to find here in the future.&lt;br/&gt;&lt;br/&gt;Okay, let's start straight ahead with the name of the blog. Freedom in the blog's name refers to &lt;a href="http://www.gnu.org/philosophy/free-sw.html"&gt;Free Software&lt;/a&gt;, which is going to be the main topic of the articles you will find here.&lt;br/&gt;I would like to keep you informed about my involvement in the Free Software community and hopefully provide you with some useful information when it comes to configuring and running Free Software.&lt;br/&gt;&lt;br/&gt;Now you might still ask what the "reloaded" part in the blog's name is about. Well, I have done some blogging in the past, but due to various reasons didn't have the time to provide my readers with a constant flow of articles, but this should change now. I am planning on regularly keeping you informed.&lt;br/&gt;&lt;br/&gt;On to the last thing I wanted to write about: the kind of articles you are likely to find here in the future.&lt;br/&gt;I am planning on writing posts on development in the Free Software community, updates to the &lt;a href="http://www.debian.org"&gt;Debian GNU/Linux&lt;/a&gt; packages I either &lt;a href="http://qa.debian.org/developer.php?login=debian%40sp.or.at&amp;amp;comaint=yes"&gt;maintain&lt;/a&gt; or co-maintain, the &lt;a href="http://code.sp-its.at"&gt;projects&lt;/a&gt; I am working on and last but not least some tips and tricks when it comes to day-to-day operation.&lt;br/&gt;&lt;br/&gt;Lastly, as this is a blog dedicated to Free Software it's a good idea to let you know that this blog is being run on a Free Software stack completely and I am using Free Software only to write articles.&lt;br/&gt;The setup is as follows: Running on a Debian GNU/Linux system is &lt;a href="http://www.lighttpd.net"&gt;lighttpd&lt;/a&gt;, my webserver of choice, and builds, along with &lt;a href="http://www.php.net"&gt;PHP5&lt;/a&gt; and &lt;a href="http://dev.mysql.com/"&gt;MySQL&lt;/a&gt;, the base for running &lt;a href="http://www.wordpress.org"&gt;Wordpress&lt;/a&gt;, a blogging system written in PHP.&lt;br/&gt;For writing articles I am using, guess what, a browser, namely &lt;a href="http://en.wikipedia.org/wiki/Mozilla_software_rebranding"&gt;Iceweasel&lt;/a&gt; (also known as Firefox to non-Debian users), running on my Debian GNU/Linux workstation.&lt;br/&gt;&lt;br/&gt;I guess that's it for now. As a last note I would like to point out that even though comments have been disabled for this article I will enable them for all posts where discussion makes sense.&lt;br/&gt;&lt;br/&gt;-- Stephan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-4961436340131627697?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/4961436340131627697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2009/03/freedom-blog-reloaded-launch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/4961436340131627697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/4961436340131627697'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2009/03/freedom-blog-reloaded-launch.html' title='Freedom blog reloaded launch'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-443999933929133179</id><published>2008-10-16T12:27:00.000+02:00</published><updated>2009-11-09T21:21:28.511+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>How Email encryption for the broader public could be realized</title><content type='html'>After reading the &lt;a title="Every EMail In UK To Be Monitored" href="http://yro.slashdot.org/yro/08/10/15/2222209.shtml"&gt;Every Email In UK To Be Monitored&lt;/a&gt; article and its comments over at &lt;a title="News for nerds, stuff that matters" href="http://slashdot.org"&gt;Slashdot&lt;/a&gt; I once again felt like encrypting each and every Email I send using GPG/PGP. Now for this encryption to work the person I am sending a message to would need to have GPG/PGP set up too. A lot of technical-minded people already have this set up, but I can not expect everyone to be using encryption.&lt;br/&gt;&lt;br/&gt;The reason for not everyone using GPG/PGP for encrypting their emails might be that, even though GPG/PGP have become a lot more usable for the end-user in the last few years, these programs are probably still too technical and thus hard to understand for non-technical users.&lt;br/&gt;&lt;br/&gt;This is when I thought a little about how people could be made using public key encryption for E-Mails. After a bit of brain-storming an idea came to my mind, an idea I would like to present you with.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Basic idea&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;What about creating a program acting as both SMTP and POP3/IMAP proxy server that included all the logic to do encryption and would encrypt/decrypt messages transparently?&lt;br/&gt;If this logic was moved out of Email clients we could get a solution working universally for each and every Email client out there.&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;How this could work&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Imagine you sending an email to someone you've never sent an email to. You write the message in your Email client as you are used to and hit the send button. Now, instead of connecting to your SMTP server the E-Mail client would connect to the Email proxy program and submit the message there.&lt;br/&gt;&lt;br/&gt;At this point the program would check the email sender and recipient. If the sender does have a public/private key pair and the recipient's public key is known the program would prompt you for the passphrase to your encryption key. After entering the passphrase and hitting a button (send, sign, encrypt, I guess you can think of a more appropriate name) again the message would be encrypted and then forwarded to your SMTP server.&lt;br/&gt;&lt;br/&gt;On the other hand, if the public key of the recipient is not known (and cannot be fetched off key servers) the program could send a message informing the recipient that you wanted to encrypt your email, but were unable to do so, explain that this program exists, where to get it from, how to set it up, why encryption is important, and so on. I can imagine having a hard-fail mode, sending only this message and a soft-fail mode, attaching or including the automatically generated message somehow (attach it, inline it, etc.) to the original message. Either way, the generated message should be cryptographically signed.&lt;br/&gt;&lt;br/&gt;Receiving mail would work the other way around. The proxy would try to fetch messages off all configured IMAP/POP3 servers on its own, check if they are signed. If a signed message arrives the public key should be, if not already done, be imported into the local keyring. As for encrypted messages this should happen the same way, plus decrypting the message.&lt;br/&gt;The Email client would connect to the IMAP/POP3 proxy server and fetch (the decrypted) messages from it. Both unencrypted and unsigned messages should be marked somehow (think subject re-writing here and maybe adding an X- header). However, no automatic sending of emails should happen when receiving messages as the From header could be forged (spam anyone?).&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Features of the program&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The program I have in mind should include the following features:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;GPG key management (creating, distribution to keyservers, etc).&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Automatic encryption/decryption and signing/checking signatures.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Non-technical, so everyone can use it.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Support multiple IMAP/POP3 and SMTP servers, so it can act as a central point for storing all Emails a user could receive.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Cross-platform functionality (Java? Python?)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Free Software&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;strong&gt;Plans&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I would love to implement this program, but fear that this could be way too much work for a single person. If you are interested in helping with the implementation or simply have any comments feel free to either drop me an email at &lt;a title="Send email to author" href="mailto:blog at sp dot or dot at"&gt;blog at sp dot or dot at&lt;/a&gt; or use the blog's comment function.&lt;br/&gt;&lt;br/&gt;I hope I did explain my idea clear enough and did not miss anything.&lt;br/&gt;&lt;br/&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-443999933929133179?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/443999933929133179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/10/how-email-encryption-for-broader-public.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/443999933929133179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/443999933929133179'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/10/how-email-encryption-for-broader-public.html' title='How Email encryption for the broader public could be realized'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-2464476471915581012</id><published>2008-09-18T14:19:00.000+02:00</published><updated>2009-11-09T21:21:28.516+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>EuroparlTV for everyone? No, only for users of proprietary software!</title><content type='html'>The European Parliament (EP) has just recently started a new service: &lt;a title="EuroparlTV homepage" href="http://www.europarltv.europa.eu/StartPage.aspx"&gt;EuroparlTV&lt;/a&gt;. A web-TV service which should give citizens of the European Union (actually everyone around the world)  a way to inform themselves about how the EP works, what it does, and so on.&lt;br/&gt;&lt;br/&gt;After I first read these news over at &lt;a title="Europäisches Parlament startet Internet-TV" href="http://www.heise.de/newsticker/Europaeisches-Parlament-startet-Internet-TV--/meldung/116144"&gt;heise&lt;/a&gt; (german) I was impressed, but started to fear that yet again some sort of government has invested in proprietary software and is able to bring its services only to users of such software. Seconds later my fears became reality.&lt;br/&gt;&lt;br/&gt;EuroparlTV seems to work only for users of either Adobe's proprietary &lt;a title="Adobe Flash" href="http://en.wikipedia.org/wiki/Adobe_Flash"&gt;Flash player&lt;/a&gt; (via the proprietary Adobe Flash file format) or users of Microsoft's &lt;a title="Windows Media Player" href="http://en.wikipedia.org/wiki/Windows_Media_Player"&gt;Windows Media Player&lt;/a&gt; (via the proprietary &lt;a title="WMV" href="http://en.wikipedia.org/wiki/WMV"&gt;WMV&lt;/a&gt; file format).&lt;br/&gt;&lt;br/&gt;What this means to an open web, that is usable for everyone, should be clear.&lt;br/&gt;&lt;br/&gt;Basically this is a service all citizens of the European Union pay for, but some cannot use. Is this really how governments (and the EP is some sort of government) should treat their citizens? Rather not.&lt;br/&gt;&lt;br/&gt;On the one hand the European Commission is fighting vendor lock-in and monopoles, but on the other hand it directly helps these vendors by creating such services. Not a smart move in my opinion, neither is it understandable.&lt;br/&gt;&lt;br/&gt;What I am asking myself though is why the EP was unable to create such a service, which itself could be quite interesting, without having all users of that service use proprietary software?&lt;br/&gt;Is it so hard to deliver the service in a free (as in freedom), standardized format?&lt;br/&gt;I will let answering these questions to you, but keep in mind that there are alternatives to this whole proprietary mess, like &lt;a title="Ogg" href="http://en.wikipedia.org/wiki/Ogg"&gt;Ogg&lt;/a&gt;, which are completly free.&lt;br/&gt;&lt;br/&gt;Personally I am pretty disappointed by this move. However, I hope that I at least informed people that there is a problem with EuroparlTV.&lt;br/&gt;Putting it simple and short this way the EP does a great deal with helping vendor lock-in whilst fighting the freedom of its own citizens. Even though it should be the other way round.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-2464476471915581012?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/2464476471915581012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/09/europarltv-for-everyone-no-only-for.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2464476471915581012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2464476471915581012'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/09/europarltv-for-everyone-no-only-for.html' title='EuroparlTV for everyone? No, only for users of proprietary software!'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-3332246037491003614</id><published>2008-09-10T14:06:00.000+02:00</published><updated>2009-11-09T21:21:28.519+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>sptest - a Python unittest extension</title><content type='html'>Even though this is meant to be an introduction to sptest, I want to start off by letting you know why I wrote this extension to the Python &lt;a title="unittest Module" href="http://docs.python.org/lib/module-unittest.html"&gt;unittest&lt;/a&gt; module.&lt;br/&gt;&lt;br/&gt;I am currently working on a (still private) project that uses Python's unittest module and the underlying framework. Even though unittest is a great utility for creating unit tests I found that the output it generates is unusable for me. I wanted something different though. Maybe a bit more aesthetic than the simple command line output unittest provides.&lt;br/&gt;&lt;br/&gt;So I started off writing a class extending &lt;a title="TestResult Objects" href="http://docs.python.org/lib/testresult-objects.html"&gt;unittest.TestResult&lt;/a&gt; to fit my needs. I soon realized that interfacing with this part of unittest is not as easy as it could be, but I still continued to write my class.&lt;br/&gt;After two hours of hacking I noticed that this class had become a monster. It was huge and I felt uncomfortable having such a huge class lying around somewhere in a &lt;em&gt;"runtests.py"&lt;/em&gt; file for the only reason of having that pretty output.&lt;br/&gt;&lt;br/&gt;This was the point when I decided to move all that code into a separate project and try to come up with a more intuitive API. This was the second when &lt;a title="sptest project" href="http://www.bitbucket.org/sp/sptest/"&gt;sptest&lt;/a&gt; was born, about 5 hours ago.&lt;br/&gt;&lt;br/&gt;What I did come up with is a small Python module that makes customizing the way unit test results are presented (or stored) easier. It currently includes two output handler classes. One providing fancy CLI output on ANSI terminals and the other one providing XML output.&lt;br/&gt;&lt;br/&gt;Additional output handler classes could store the result of the unit tests in a database or send it to a central point on the network, but implementing that is up to someone else, for now.&lt;br/&gt;&lt;br/&gt;Running unit tests with &lt;em&gt;sptest&lt;/em&gt; is as simple as calling:&lt;br/&gt;&lt;blockquote&gt;sptest.TestMain(TestSuite).run()&lt;/blockquote&gt;&lt;br/&gt;By default the FancyCLIOutput handler class will be invoked and you will see why the handler is called the way it is immediatly.&lt;br/&gt;&lt;br/&gt;In order to generate an XML file containing the test results one just has to modify the call to &lt;em&gt;sptest&lt;/em&gt; to look like this:&lt;br/&gt;&lt;blockquote&gt;sptest.TestMain(TestSuite, output_class=sptest.output.XMLOutput).run()&lt;/blockquote&gt;&lt;br/&gt;&lt;em&gt;sptest&lt;/em&gt; also provides support for preparation and cleanup functions. The only thing you have to do is define these functions and adjust the arguments passed to &lt;em&gt;TestMain&lt;/em&gt; accordingly.&lt;br/&gt;&lt;br/&gt;Most of the code is already documented and a doxygen configuration file for generating the html documentation comes with the code. Also, &lt;a title="example0.py" href="http://www.bitbucket.org/sp/sptest/src/d332f262bb0d/doc/example/example0.py"&gt;two&lt;/a&gt; &lt;a title="example0_xml.py" href="http://www.bitbucket.org/sp/sptest/src/d332f262bb0d/doc/example/example0_xml.py"&gt;examples&lt;/a&gt; are included that show how to use sptest.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-3332246037491003614?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/3332246037491003614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/09/sptest-python-unittest-extension.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3332246037491003614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3332246037491003614'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/09/sptest-python-unittest-extension.html' title='sptest - a Python unittest extension'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-8437434959748997077</id><published>2008-09-02T18:54:00.000+02:00</published><updated>2009-11-09T21:21:28.522+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>UPDATE: Google Chrome: Good or evil? -- GOOD!</title><content type='html'>&lt;strong&gt;UPDATE&lt;/strong&gt;: You can find the update to this article at its bottom.&lt;br/&gt;&lt;br/&gt;Even though Google's slogan is &lt;a title="Don't be evil" href="http://en.wikipedia.org/wiki/Don%27t_be_evil"&gt;"don't be evil"&lt;/a&gt; I am not entirely sure whether this also applies to their newest development: the Google Chrome browser.&lt;br/&gt;&lt;br/&gt;The &lt;a href="http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html"&gt;announcement&lt;/a&gt; over at the &lt;a href="http://googleblog.blogspot.com/"&gt;Official Google Blog&lt;/a&gt; tells us that Google is about to release a Free Software-based browser. When I first read the announcement I wasn't too impressed reading that Google has actually built a browser, this was logical and I have been expecting this move for years. Also, reading that they based their browser on Free Software didn't impress me too much either, but then I found &lt;a href="http://www.google.com/googlebooks/chrome/index.html"&gt;the comic&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The comic contains a lot of information about the browser's architecture and I like the design. It makes perfectly sense, even though it could create some memory and processing overhead, but don't all major browsers consume "quite some" ressources? So, from a technical point of view, the browser sounds great, but there is a huge downside too.&lt;br/&gt;&lt;br/&gt;The product announcement says that the browser is not only built upon Free Software, but is Free Software itself. Now, this sounds good, but then I had to read this:&lt;br/&gt;&lt;blockquote&gt;This is just the beginning -- Google Chrome is far from done. We're releasing this beta for Windows to start the broader discussion and hear from you as quickly as possible. We're hard at work building versions for Mac and Linux too, and will continue to make it even faster and more robust.&lt;/blockquote&gt;&lt;br/&gt;I don't want to start nit-picking on the use of the term "Linux" for describing the GNU/Linux operating system there, even though I have to mention this fact.&lt;br/&gt;&lt;br/&gt;What really bothers me is that it seems as if a binary-only release for Windows is being prepared, and only this binary version. In my opinion this is bad. I would rather have liked reading "a binary beta version for Windows will be made available along with the source code licensed under the terms of the &amp;lt;insert your favourite Free Software license here&amp;gt;".&lt;br/&gt;Why? Because this way people could start tinkering with the code and thus help making a GNU/Linux version available sooner. Not seeing the code released makes the "Free Software" promise sound void.&lt;br/&gt;&lt;br/&gt;Though nothing has happened yet. Google has merely announced the upcoming release of Google Chrome. No details have been made available whether the code will be released along with the Windows binary, but I fear we won't be getting hold of the code for a while.&lt;br/&gt;&lt;br/&gt;This leads me to the title of this article: Is Google Chrome good or evil?&lt;br/&gt;Well, if Google keeps the promise to release Chrome under a Free Software license and does so rather sooner than later I believe Google Chrome should not only be called "good". It would then qualify as a real alternative to Mozilla Firefox  and could even be superior to Firefox.&lt;br/&gt;On the other hand, if Google does not release the code timely, releases the code under a proprietary license or does not release the code at all Chrome could and possibly should be tagged "evil".&lt;br/&gt;&lt;br/&gt;Personally I am awaiting the release of Google Chrome. I would like to test it, see the code, maybe dig a bit into it and possibly make it my browser-of-choice. The reason for this is quite simple: I am tech-savvy and the technology used in Google Chrome sounds more than just interesting, but could actually be a step forward for the web. Both in increased usability for the user and the use of Free Software and Free Standards as a way to help the web evolve. If Google doesn't keep the Free Software promise though, expect me not to ever though that evil beast.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; (September 3, 2008 at 7:44am CET):&lt;br/&gt;&lt;br/&gt;Now that Chrome has been &lt;a href="http://googleblog.blogspot.com/2008/09/google-chrome-now-live.html"&gt;released&lt;/a&gt; Google apparently did also release the source code to Chrome, Chromium. The chromium project page can be found &lt;a href="http://code.google.com/chromium/"&gt;here&lt;/a&gt;, the Google Chrome home page &lt;a href="http://www.google.com/chrome"&gt;here&lt;/a&gt;.&lt;br/&gt;Now it seems as if Google did make Chromium a Free Software browser (seems because I have not yet come around to downloading the tarball and checking the contents, but I do believe it actually is Free Software and for me there is no reason not to believe that anymore).&lt;br/&gt;&lt;br/&gt;I am more than just happy with this because, as I pointed out in this article already, Google Chrome or Chromium does have an interesting architecture and should, in my opinion, be embraced by the Free Software community. The reason I am happy is not only the fact that it is Free Software, but rather that a company like Google does release a lot Free Software these days and personally I hope other companies will start following this example soon. &lt;strong&gt;Thanks Google for taking this step!&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;So to make it short: &lt;strong&gt;Google Chrome? Not evil, good!&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Now a short word to the commenters of this article: Most comments have been helpful and I really appreciated them. Sorry that an update to this article took so long, but I'm living in Europe and was asleep while all the things you mentioned have happened.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-8437434959748997077?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/8437434959748997077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/09/update-google-chrome-good-or-evil-good.html#comment-form' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8437434959748997077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8437434959748997077'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/09/update-google-chrome-good-or-evil-good.html' title='UPDATE: Google Chrome: Good or evil? -- GOOD!'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-3604044309185560486</id><published>2008-08-31T13:04:00.000+02:00</published><updated>2009-11-09T21:21:28.524+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><category scheme='http://www.blogger.com/atom/ns#' term='nwu'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Autoconf and Python: checking for modules</title><content type='html'>I am currently writing a Python application that makes use of GNU Autotools as build system and noticed that determining whether a specific Python module is installed is not that easy and no usable Autoconf macro exists. So I came up with &lt;a title="python_module.m4" href="http://blog.peijnik.at/wp-content/uploads/2008/08/python_module.m4"&gt;my own solution&lt;/a&gt;, which I would like to share with you.&lt;br/&gt;&lt;br/&gt;The &lt;em&gt;AC_CHECK_PYTHON_MODULE&lt;/em&gt; macro takes two arguments: The module name and optionally the variable name holding version information. This way it is not only possible to determine whether a module is installed (ie. loads in Python) on the current system, but also retrieve version information from that module.&lt;br/&gt;&lt;br/&gt;The following examples checks whether the Crypto module is installed and retrieves its version information from Crypto.__version__:&lt;br/&gt;&lt;blockquote&gt;AC_CHECK_PYTHON_MODULE(Crypto, __version__)&lt;/blockquote&gt;&lt;br/&gt;The macro itself does never report and error, but rather only a found/not found result. Error checking is up to the user and can be done via these two Autoconf variables:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;PYTHON_&lt;em&gt;&amp;lt;MODULE_NAME&amp;gt;&lt;/em&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;PYTHON_&lt;em&gt;&amp;lt;MODULE_NAME&amp;gt;&lt;/em&gt;_VERSION&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;PYTHON_&lt;em&gt;&amp;lt;MODULE_NAME&amp;gt;&lt;/em&gt; is set to &lt;em&gt;"1"&lt;/em&gt; if the module is present and &lt;em&gt;"0"&lt;/em&gt; if not present.&lt;br/&gt;PYTHON_&lt;em&gt;&amp;lt;MODULE_NAME&amp;gt;&lt;/em&gt;_VERSION is only set when the version variable argument has been set and contains the version information of the module, if the module been found. If the module is not present this variable is also set to &lt;em&gt;"0"&lt;/em&gt;.&lt;br/&gt;&lt;br/&gt;The version variable argument is optional as I wrote, so the following invocation works too and only checks whether the distutils module is present:&lt;br/&gt;&lt;blockquote&gt;AC_CHECK_PYTHON_MODULE(distutils)&lt;/blockquote&gt;&lt;br/&gt;As I wrote earlier in this article I would like to share this macro with you. You can download it &lt;a title="python_module.m4" href="http://blog.peijnik.at/wp-content/uploads/2008/08/python_module.m4"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-3604044309185560486?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/3604044309185560486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/08/autoconf-and-python-checking-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3604044309185560486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3604044309185560486'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/08/autoconf-and-python-checking-for.html' title='Autoconf and Python: checking for modules'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-8869750887247114433</id><published>2008-08-22T11:28:00.000+02:00</published><updated>2009-11-09T21:21:28.526+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Debian GNU/Linux 5.0 ("lenny") on a Samsung P55-Pro T8100 Sevesh</title><content type='html'>I have recently bought a new laptop, a Samsung P55-Pro T8100 Sevesh. As I was not able to find an installation report for this model anywhere on the internet I thought writing one myself is a good idea. This way people interested in getting this laptop or installing GNU/Linux on it can get some information.&lt;br/&gt;&lt;br/&gt;The article covers both the hardware configuration of the laptop itself, a list of which features of the laptop do work and which don't (do not be afraid, most things work perfectly well out of the box) and finally a short installation report.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;First of all, let's have a look at the hardware configuration of this laptop:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Intel Core 2 Duo T8100 CPU (2.1 GHz)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;2GiB DDR2 RAM (PC2-5300 - 667MHz)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Intel GM965 chipset with integrated Intel GMA X3100 graphics adapter&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;250GiB HDD&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;SXGA+ display with a resolution of 1400x1050&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Intel PRO/Wireless 3945ABG WiFi adapter&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Intel 82566MC NIC&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;HD Audio Codec,  ALC262 sound adapter&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;AuthenTec AES1600 fingerprint reader&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Infineon TPM module&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Ricoh cardbus bridge (RL5c476 II) plus cardreaders and IEEE1394 controller&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;One cardbus (PCMCIA II) and one Express Card/54 slot&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Now on to the list of what does and what doesn't work with GNU/Linux.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Intel GMA X3100 graphics adapter&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Works out of the box. Full resolution is possible without a hack, VGA out works out of the box in both mirror and extended desktop mode.&lt;br/&gt;&lt;strong&gt;NO&lt;/strong&gt; xorg.conf modifications are needed in this setup, everything works perfectly well with a nearly empty xorg.conf!&lt;br/&gt;The only thing I had to modify was making the virtual display a bit bigger so that extended desktop mode works with an external monitor having a resolution of 1680x1050 pixels.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Intel 82566MC NIC&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Works out of the box, no further configuration needed.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Intel PRO/Wireless 3945ABG WiFi adapter&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Works with the iwl3945 driver, however, it requires something Intel calls "ucode", a proprietary firmware. Without this piece of firmware the card does not work. If you want to WiFi without the need for proprietary software (the ucode) you will have to go for a USB, PCMCIA or Express Card/54 WiFi adapter.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;HD Audio Codec,  ALC262 sound adapter&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Works out of the box.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;AuthenTec AES1600 fingerprint reader&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The fingerprint reader is said to be working with &lt;a title="fprint homepage" href="http://reactivated.net/fprint/wiki/Main_Page"&gt;fprint&lt;/a&gt;, which I did not test yet though. Expect an update sometime soon.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Infineon TPM module&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Not tested.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;INSTALLATION REPORT&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Basically the Debian GNU/Linux 5.0 installation went smoothly using the beta2 netinstaller image. The system booted from cdrom and the installation process worked fine.&lt;br/&gt;After rebooting into the new system however the system froze. No response, nothing. The last message on the screen suggested that the ACPI video module is the problem.&lt;br/&gt;After rebooting using &lt;em&gt;init=/bin/sh&lt;/em&gt; as boot argument I modified &lt;em&gt;/etc/modprobe.d/blacklist&lt;/em&gt; and added the following line:&lt;br/&gt;&lt;blockquote&gt;blacklist video&lt;/blockquote&gt;&lt;br/&gt;This is only a workaround for the real problem. The bug is present in Linux 2.6.25 and Linux 2.6.26. A bug report has been filed (&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=495697"&gt;here&lt;/a&gt;). I will update this page as soon as the problem has been resolved.&lt;br/&gt;&lt;br/&gt;There is another thing which doesn't seem to work. However, this could be (and likely is) related to the broken ACPI video kernel module: adjusting the display brightness.&lt;br/&gt;On AC power the system boots with maximum brightness, which cannot be adjusted. Unplugging the AC adapter lowers the brightness.&lt;br/&gt;When running on battery one can use the "brightness up" key combination to switch to maximum brightness, however, this &lt;strong&gt;cannot&lt;/strong&gt; be undone.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The laptop is not only usable under GNU/Linux but most hardware works, even out of the box. The only real problem is the broken ACPI video module, which hopefully gets fixed soon.&lt;br/&gt;I hope this article helps those who would like to get one of these laptops, but are not sure of its GNU/Linux compatibility, just like I was.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-8869750887247114433?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/8869750887247114433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/08/debian-gnulinux-50-on-samsung-p55-pro.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8869750887247114433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8869750887247114433'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/08/debian-gnulinux-50-on-samsung-p55-pro.html' title='Debian GNU/Linux 5.0 (&amp;quot;lenny&amp;quot;) on a Samsung P55-Pro T8100 Sevesh'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-3613651052771844049</id><published>2008-07-03T13:33:00.000+02:00</published><updated>2009-11-09T21:21:28.528+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><title type='text'>Is trying to fix (E)SMTP really worth it? [part 2 - infrastructure]</title><content type='html'>[digg=http://digg.com/security/Is_trying_to_fix_E_SMTP_really_worth_it_part_2]This article is the second in my series about the flaws of (E)SMTP, the whole Internet mail infrastructure and how it could possibly be fixed. The main focus of this part is a new approach to the infrastructure which should help making emailing more secure, reliable and less spam-prone.&lt;br/&gt;&lt;br/&gt;The first article can be found &lt;a title="Is trying to fix (E)SMTP really worth it? [part 1]" href="http://blog.sp.or.at/2008/03/27/is-trying-to-fix-esmtp-really-worth-it-part-1/"&gt;here&lt;/a&gt; and points out flaws and problems in the current systems.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Before going into detail about how the infrastructure could look like I would like to point out the goals of my proposal:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;security through end-to-end encryption&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;security through sender and server authentication&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;integrity of message contents&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;built-in load-balancing support&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;getting rid of email forwards&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;These five major points should be covered directly by a new infrastructure and should be mandatory. There is no point in making any of these optional as the rest of this article should point out.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;security through end-to-end encryption&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Even though both SSL and TLS support exist for (E)SMTP these features are optional. In fact this means that it is possible that even though one submits his or her email over a secure channel the message could be transferred in plain-text somewhere on the way to its destination.&lt;br/&gt;This enables an attacker to snoop at your message somewhere along its way. Whilst some people believe this is okay I strongly oppose to anyone being able to read either my private or business emails.&lt;br/&gt;&lt;br/&gt;The solution to this problem is end-to-end encryption. The new infrastructure should make encryption of all message exchanged mandatory and further provide a way of encrypting the message contents. This way only the intended recipient can actually read the message (as in not even a server administrator having direct access to a user's mailbox). End-to-end encryption of the communication channels should be done by using TLS for all communication between all clients and servers and for server-to-server communication.&lt;br/&gt;&lt;br/&gt;Encrypting of the message payload could be done in a similar (if not even the same) way &lt;a title="OpenPGP" href="http://en.wikipedia.org/wiki/OpenPGP#OpenPGP"&gt;OpenPGP&lt;/a&gt; (RFC 4880) works.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;security through sender and server authentication&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The next feature a possible SMTP successor should provide is sender and server authentication. As TLS should be mandatory for the implementation the easiest way to achieve this is using a &lt;a title="Public key infrastructure" href="http://en.wikipedia.org/wiki/Public_key_infrastructure"&gt;public key infrastructure&lt;/a&gt;. This could then in turn be used for multiple things, including message integrity checking, encryption of message contents, authentication of the sender and authentication of the server.&lt;br/&gt;&lt;br/&gt;Integrating a public key infrastructure could be done by having special DNS (maybe TXT) records that contain the address of key servers. These key servers would store not only a domain-root certificate which would allow user and server authentication but also all user and server certificates themselves.&lt;br/&gt;&lt;br/&gt;A receiving server could then check the sending domain's key server for both the domain-root certificate and the sending server and thus verify that the message is legitimate and actually originated from the specified domain.&lt;br/&gt;&lt;br/&gt;Sender authentication works together with message integrity. Basically the receiving server opens the message, gets the client's message signature from the message, and asks the sending domain's key server for the public key of the sender. The receiving server then checks the signature and this way verifies the sender.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;integrity of message contents&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Integrity checking is closely related to sender verification. As the receiving server checks the sender's message signature in the sender-verification process the message is automatically checked for integrity too.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;built-in load-balancing support&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Load-balancing is also closely related to the PKI approach. The sending server could use the receiving domain's key server to locate the server to send the message to. This way load-balancing of receiving servers can easily be implemented. Furthermore load-balancing of multiple key servers for a single domain is possible using DNS round-robin records.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;getting rid of email forwards&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Forwards can also be gotten rid of by using the receiving domain's key server similarily to the load-balancing approach. Instead of pointing the sender to a domain-local receiving server the key server could simply point the sender to another domain's receiving server. This way the message would not really be forwarded or relayed anymore but rather a pointer to where the message should be stored could be provided.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Putting everything together&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Making all the mentioned features mandatory for a possible successor of SMTP should make users benefit in a few ways. Firstly, users could rely on both then integrity of the message, that the sender actually the person he or she pretends to be and the fact that snooping on the contents of the messages they send is hard to impossible.&lt;br/&gt;Furthermore this infrastructure should make sending SPAM messages a lot harder as domains for sending spam would have to be bought, DNS servers and key servers would need to be operated and blocking unwanted messages could be as easy as blocking either a domain or a single user using the information provided through their message signature.&lt;br/&gt;&lt;br/&gt;ISPs would benefit from the built-in load-balancing mechanisms and the mailbox alias feature (forwarder). Whilst the load-balancing technique simplifies set-up and operating of a load-balanced infrastructure the mailbox alias feature should help cutting down on traffic generated by email forwarders.&lt;br/&gt;&lt;br/&gt;Please be aware that I intentionally left out all implementation specific details, such as the message exchange protocols. More technical aspects of a possible implementation are to be covered in the next parts of this series. As always, comments are highly appreciated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-3613651052771844049?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/3613651052771844049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/07/is-trying-to-fix-esmtp-really-worth-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3613651052771844049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3613651052771844049'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/07/is-trying-to-fix-esmtp-really-worth-it.html' title='Is trying to fix (E)SMTP really worth it? [part 2 - infrastructure]'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-6259994497689576153</id><published>2008-06-23T13:38:00.000+02:00</published><updated>2009-11-09T21:21:28.531+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Status update</title><content type='html'>It has been quite a while since I last wrote an article and published it here.&lt;br/&gt;&lt;br/&gt;It's not like I got tired of blogging. The reason why there hasn't been an update for such a long time is that I was doing my final exams in the past two months.&lt;br/&gt;&lt;br/&gt;After passing my exams on Friday I should have time to write some articles again, so watch out for new articles here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-6259994497689576153?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/6259994497689576153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/06/status-update.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6259994497689576153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/6259994497689576153'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/06/status-update.html' title='Status update'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1134014574095253244</id><published>2008-04-06T16:13:00.000+02:00</published><updated>2009-11-09T21:21:28.533+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Why are hardware manufacturers keeping specs to themselves?</title><content type='html'>This is one question I have been interested in ever since I started using GNU/Linux.&lt;br/&gt;&lt;br/&gt;Just think about it for a moment. About 20 years ago you got specifications for pretty much every piece of hardware you bought. You were given exact instructions on how to use the hardware you just bought, not only how to install it. Things have changed since then.&lt;br/&gt;&lt;br/&gt;If you buy any piece of hardware today you actually have to expect not to get any documentation on how to "talk" to your new toy. You are only given a CD (sometimes even only a link to a homepage) containing drivers for a few specific operating systems, usually only Microsoft Windows.&lt;br/&gt;&lt;br/&gt;Now I am no driver hacker and so I probably wouldn't be able to implement a driver for anything on my own anyways, but the Free Software community would largely benefit from hardware documentation, as there are a lot of capable driver hackers out there.&lt;br/&gt;&lt;br/&gt;This is not a problem that only affects the Free Software community though. There are a lot of pieces of hardware which do not work on recent proprietary operating systems anymore due to lack of support by its manufacturers.&lt;br/&gt;At least this problem would not exist for Free Software operating systems, such as GNU/Linux, if hardware makers would publish documentation of their hardware. The people still using devices which are well beyond their end-of-life could implement drivers on their own, not being dependent on anyone.&lt;br/&gt;&lt;br/&gt;What I am really wondering about in this case is why hardware companies are unable to coin standards for accessing devices of the same class. It works perfectly well for USB (take USB mass storage devices as an example) and I do not understand why there can't be standardized interfaces to other hardware, such as network adapters, as well. On a very-low level these standardized interfaces do work. Just think of PCI, PCI Express or AGP.&lt;br/&gt;&lt;br/&gt;Actually, if you think about this for a few more seconds you should realize one thing: Having standardized interfaces for devices of the same class would cut a lot of costs for hardware makers. Why? Oh well, if they design a brand new networking chip and still implement the given standard there would be no need of writing a new driver. Wait, there would be no need for per-device drivers at all. Implementing a common driver that accesses the standardized interface would be enough, for a whole range of devices.&lt;br/&gt;&lt;br/&gt;So what am I asking of hardware makers? I would love to see companies creating devices of the same class to get together, create standardized interfaces, publish them and implement them in their new devices.&lt;br/&gt;I know, this is not likely to happen anytime soon, so a more realistic approach is asking for Free Software drivers and/or documentation.&lt;br/&gt;&lt;br/&gt;Personally I have stopped buying hardware which "works" with GNU/Linux, I have come to the point where I try only to buy hardware which either comes with Free Software drivers from the manufacturer or documentation which allows implementation of Free Software drivers.&lt;br/&gt;This is probably the best way of showing these companies what you demand: Freedom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1134014574095253244?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1134014574095253244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/04/why-are-hardware-manufacturers-keeping.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1134014574095253244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1134014574095253244'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/04/why-are-hardware-manufacturers-keeping.html' title='Why are hardware manufacturers keeping specs to themselves?'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-4140577698954644039</id><published>2008-03-28T16:13:00.000+01:00</published><updated>2009-11-09T21:21:28.535+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Free Software Supporter</title><content type='html'>I was quite stunned when I noticed that the Free Software Foundation (&lt;a href="http://www.fsf.org" title="Free Software Foundation"&gt;FSF&lt;/a&gt;) has recently started a new monthly-published newsletter, called the &lt;a href="http://www.fsf.org/blogs/community/fss_v1.html"&gt;Free Software Supporter&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;The reason I was amazed is not the fact that the FSF is now publishing such a newsletter, but rather the fact that I did not hear about that yet. Basically, the Supporter is about informating the Free Software enthusiasts about recent happenings and the work of the FSF, the &lt;a href="http://gnu.org" title="The GNU project"&gt;GNU&lt;/a&gt; project and the global Free Software community.&lt;br/&gt;&lt;br/&gt;It seems as if I am not the only person that is excited about the supporter, as Joshua Gay, who apparently is writing the Supporter, also seems to like it, as he writes in a &lt;a href="http://www.fsf.org/blogs/community/fss_v1.html"&gt;blog post&lt;/a&gt;:&lt;br/&gt;&lt;blockquote&gt;I hope that you enjoy the Supporter. I am looking forward to reflecting each month upon the work of the FSF, the GNU project, and the global free software community. I only hope that the number of highlights I add each month will continue to grow as quickly as the community is growing. In either case, we hope to keep it short and we hope to keep you informed.&lt;/blockquote&gt;&lt;br/&gt;You can sign up to receive the Supporter via email on a monthly basis at &lt;a href="http://lists.gnu.org/mailman/listinfo/info-fsf"&gt;http://lists.gnu.org/mailman/listinfo/info-fsf&lt;/a&gt; and you can read the first issue online at &lt;a href="http://lists.gnu.org/archive/html/info-fsf/2008-03/msg00000.html" title="Free Software Supporter - Issue 1"&gt;http://lists.gnu.org/archive/html/info-fsf/2008-03/msg00000.html&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Also, if the Supporter looks like an interesting read to you, you may as well enjoy the monthly newsletter the &lt;a href="http://www.fsfeurope.org" title="FSF Europe"&gt;FSF Europe&lt;/a&gt; publishes. The FSFE Newsletter can either be read &lt;a href="http://www.germany.fsfeurope.org/news/newsletter.en.html" title="FSFE - Newsletter"&gt;online&lt;/a&gt; or you can sign up for the FSF Europe &lt;a href="http://mail.fsfeurope.org/mailman/listinfo/press-release"&gt;press-release&lt;/a&gt; mailing list.&lt;br/&gt;&lt;br/&gt;Personally I believe both newsletters are worth reading and give you a great overview of what has happened in the past month, what is going to happen and the work done by the FSF and FSF Europe.&lt;br/&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-4140577698954644039?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/4140577698954644039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/free-software-supporter.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/4140577698954644039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/4140577698954644039'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/free-software-supporter.html' title='Free Software Supporter'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-5431611913532799129</id><published>2008-03-27T20:36:00.000+01:00</published><updated>2009-11-09T21:21:28.538+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><title type='text'>Is trying to fix (E)SMTP really worth it? [part 1]</title><content type='html'>[digg=http://digg.com/security/Is_trying_to_fix_E_SMTP_really_worth_it_part_1]&lt;br/&gt;This one question has been in my mind for quite some time already. I mean, everyone uses &lt;a href="http://en.wikipedia.org/wiki/SMTP"&gt;SMTP&lt;/a&gt; (knowingly or not) when sending out emails and everyone sending emails also knows what &lt;a href="http://en.wikipedia.org/wiki/E-mail_spam"&gt;SPAM&lt;/a&gt; is and receives SPAM messages.&lt;br/&gt;&lt;br/&gt;However, few know how old SMTP actually is, and that, even though it serves everyone well, it has been designed in a time when everyone was thinking of &lt;a href="http://en.wikipedia.org/wiki/Spam_%28food%29"&gt;Spam&lt;/a&gt; as canned meat. Back in 1982 SMTP was a great achievement and a lot of kudos should go to its creators, but now, in 2008, SMTP has become more of a liability than a great tool.&lt;br/&gt;&lt;br/&gt;Originally, I wanted to write a single article covering all shortcomings of SMTP and possible solutions to these problems, but while writing the article a lot of text came up, so this is the first of two articles I am going to write on this topic. The first part is about the problems with SMTP and how fix-ups for SMTP are, even though they do work to some extent, a proper solutions to today's issues.&lt;br/&gt;&lt;br/&gt;Due to the way SMTP was designed and the way the Internet was back then it is prone to various things, like SPAM messages, &lt;a href="http://en.wikipedia.org/wiki/E-mail_spoofing"&gt;sender spoofing&lt;/a&gt;, data manipulation and so forth. A few attempts have been made at fixing some of the shortcomings of SMTP, like &lt;a href="http://en.wikipedia.org/wiki/SMTP-AUTH"&gt;ESMTPA&lt;/a&gt; (SMTP-AUTH) or &lt;a href="http://en.wikipedia.org/wiki/Sender_Policy_Framework"&gt;SPF&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Callback_verification"&gt;Callback Verification&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/DKIM"&gt;DKIM&lt;/a&gt;, but none of them has really fixed all problems that exist and all of these modifications are in my opinion mere workarounds.  Let us have a look at why both SPF and DKIM fail to fix the all problems SMTP has right now.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;SPF&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;First let's have a quick look at how SPF works: When an email is received a special TXT DNS record at the sender's domain is used to verify that the sending computer (using its IP address) of an email is actually allowed to send email for a domain. A great mechanism that in theory would work perfectly well. Reality is a bit different though.&lt;br/&gt;&lt;br/&gt;There are some domains which are actually using SPF and do have valid SPF records on their DNS servers. However, those are only some of the millions of domains on the Internet. How should one treat emails coming from a domain without SPF record? The messages could be real, non-SPAM messages, that should be delivered, but on the other hand these could be SPAM messages. Also, the more people start using SPF, the more likely it becomes that spammers are simply going to use sender-domains which do not have SPF records.&lt;br/&gt;Also, there are some organizations that have domains with improperly configured SPF records and there are even well-known ones, such as &lt;a href="http://www.technorati.com/"&gt;Technorati&lt;/a&gt; (I covered this in &lt;a href="http://blog.sp.or.at/2008/03/25/mails-from-technorati-not-arriving-not-obeying-their-own-spf-rules/"&gt;one of my articles&lt;/a&gt;). So one cannot even trust SPF records and valuable messages could be lost if a mail server is configured to drop all messages for which SPF authentication fails.&lt;br/&gt;&lt;br/&gt;And there is a third problem: Sending emails from other places than your default one (office, home, etc.) and ISPs not allowing external users to use their SMTP servers (even not with authentication). A good example of this would be Austrian ISP &lt;a href="http://www.upc.at/"&gt;UPC&lt;/a&gt; (their SMTP server tells me that the AUTH extension was not advertised, even though it was; long story short, I cannot log in from outside) and I am quite sure there are a lot of others.&lt;br/&gt;&lt;br/&gt;And I can come up with yet another problem: What about email relaying? Think about downloading all messages from all your email accounts into a single one, using &lt;a href="http://fetchmail.berlios.de/"&gt;fetchmail&lt;/a&gt; for example. This makes SPF useless, as no checks can be done anymore, due to the sending system's IP address not being the original sender. If one assumes that every mail server uses SPF this is not a problem, but I like doing my checks on my server rather than relying on some other server.&lt;br/&gt;&lt;br/&gt;Maybe there are even more problems with SPF, such as what to do when an email is received from a &lt;a href="http://www.ops.ietf.org/lists/namedroppers/namedroppers.2005/msg00053.html"&gt;nonexistant domain&lt;/a&gt; or when there is a temporary DNS failure on either side, but the ones listed above are those I am confronted with most often.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Callback Verification&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;On to the next topic. Callback verification is a simple method used by mail servers to try verifying that the sender actually exists. Whilst this works for some SPAM messages which use non-existent senders,  it does not help much as soon as the sender address does exist, and it does not even matter if the message was actually sent by the user owning the address. I guess there is nothing to add, even though it is a nice method to get rid of some spam it does not help with a lot of such messages.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;DKIM&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;DKIM, or DomainKeys Identified Mail (originally named DomainKeys) is a method that is not meant to prevent abuse (such as SPAM), but rather to make tracking abuse easier. It works by the sender (usually the MSA of the sender on behalf of him) adding another header, "DKIM-Signature", which contains a cryptographic signature of the message body.  The signature is generated using &lt;a href="http://en.wikipedia.org/wiki/Public-key_cryptography"&gt;public-key cryptography&lt;/a&gt;, where the public key is stored in a DNS TXT record and can thus be used by the receiving end to verify that the message contents have not been tampered with during transport and that the mail actually originated from that domain.&lt;br/&gt;&lt;br/&gt;This method, even though being one of the most advanced ones today, is prone to replay attacks and does not protect from tampering with message headers. In short this means that even though the message body cannot be modified without the receiving end detecting the modification, the headers can, and thus the message can be redirected. Also, it is possible to intercept the transmission of a message, generate a thousand messages with the same content but a different recipient and this way flood a mailbox with a message that would stand DKIM verification.&lt;br/&gt;&lt;br/&gt;The email relaying problem that's present in SPF is not a problem here anymore, but the mobile-mail, the nonexistent domain and the DKIM-not-in-use problem still exist.&lt;br/&gt;Also, DKIM seems not to be used by a lot of email servers on the Internet. Thinking about it for a second I can just come up with two names of well-known organizations using DKIM: Google and Yahoo.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;The message format&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;The next part of this article is about the SMTP message format. This part is not directly related to the SPAM problem, but should provide you with some more information that verifies that SMTP is outdated nowadays.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://en.wikipedia.org/wiki/Email#Format"&gt;RFC822 messages&lt;/a&gt; (or emails) usually consist of two parts: a message header and a message body. Originally these messages were designed to contain 7bit-encoded ASCII data, which is plain text. This means that there were only 128 different characters which could be transferred via email, without support of special characters, like German "Umlaut" characters. A solution has then be developed, not only to support special characters in emails, but also to support transferring of binary data (such as images).&lt;br/&gt;&lt;br/&gt;&lt;a href="http://en.wikipedia.org/wiki/MIME"&gt;MIME&lt;/a&gt; is the name of this solution, and it enables every one of us to send binary attachments and special characters via email today. MIME allows the email client to include more than just 7-bit plain text messages, including attachments. This is achieved by special header, "&lt;i&gt;MIME-Version&lt;/i&gt;", which indicates that the contents of a message are MIME encoded. This header is then followed by a "&lt;i&gt;Content-Type&lt;/i&gt;" header, identifying the type of content. For simple messages just consisting of a message body this would be "text/plain", telling the client that there is just text in the mail.&lt;br/&gt;&lt;br/&gt;However, how can emails then consist of both text and attachments? Well, there is a special value for the "Content-Type" header: "&lt;i&gt;multipart/mixed&lt;/i&gt;". This one indicates that there are several parts of a message, and every part comes with a separate "&lt;i&gt;Content-Type&lt;/i&gt;" header. This way contents of a message can be organized in a tree, for example, containing the message body and a forwarded message.&lt;br/&gt;&lt;br/&gt;An attachment is added by specifying an additional part of the message, usually with a "&lt;i&gt;Content-Transfer-Encoding: base64&lt;/i&gt;" header, that says that the data has been &lt;a href="http://en.wikipedia.org/wiki/Base64"&gt;base64&lt;/a&gt; encoded. This way binary data can be represented using 7-bit ASCII.&lt;br/&gt;&lt;br/&gt;But what does that mean? First of all, even though a message is split into several parts, there is only one body. Now if you are downloading a message via POP3 for example, there is no way of only downloading the actual text. You always need to download the whole message. Everyone knows this situation: You are downloading a message and have to wait for all attachments to be downloaded, even though you might not be interested in those attachments at all.&lt;br/&gt;&lt;br/&gt;Also, encoding binary data using base64 creates a lot of overhead, as every byte (which can have 256 different values and corresponds to a single letter of text in 7-bit ASCII) is represented using only 64 possible values. Talking numbers here this means that messages encoded using base64 are usually 137% the size of the data they contain.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;I hope that I have shown you what the problems with SMTP are right now. SMTP initially was  designed to transport only text and had no way of verifying either the sender of a message or the integrity of data. Some workarounds have been created to get rid of these issues, but even though some helped a lot, none has really fixed any of those problems.&lt;br/&gt;&lt;br/&gt;Also, one should never forget how much time and money has been used to try fixing SMTP, whilst a lot less money might have been sufficient for creating something new, something better, something that is built for the needs of the Internet today, and not for the needs of the Internet back in 1982.&lt;br/&gt;&lt;br/&gt;Personally I believe that the days of SMTP are long over and that there is need of a proper replacement. I do understand that SMTP and the current email infrastructure are still in use because an infrastructure exists, but SMTP really deserves being retired, after serving us pretty well for more than 25 years.&lt;br/&gt;&lt;br/&gt;The next part in this series of articles will be about what my idea of a successor of SMTP and the whole email infrastructure is, what it could look like and also how it could work. So stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-5431611913532799129?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/5431611913532799129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/is-trying-to-fix-esmtp-really-worth-it.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5431611913532799129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5431611913532799129'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/is-trying-to-fix-esmtp-really-worth-it.html' title='Is trying to fix (E)SMTP really worth it? [part 1]'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-2206582855138536295</id><published>2008-03-27T12:33:00.000+01:00</published><updated>2009-11-09T21:21:28.540+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>How to reject mails containing OOXML attachments using Exim4</title><content type='html'>I finally did it. I modified my Exim's configuration to reject any mail with an OOXML attachment (ie. docx, pptx, xlsx).&lt;br/&gt;&lt;br/&gt;There are two main reasons for this step. First of all I am not able to open these files and I believe I will not be able to do so and get them properly rendered anytime soon. Secondly, people using the new Microsoft Office suite seem to be ignorant enough to think everyone is able to view those files, which is not the case.&lt;br/&gt;&lt;br/&gt;I am trying to make one point here:&lt;br/&gt;People sending emails to other people should &lt;b&gt;always&lt;/b&gt; send files in internationally standardized formats (&lt;a href="http://en.wikipedia.org/wiki/Open_format"&gt;open formats&lt;/a&gt;), such as &lt;a href="http://en.wikipedia.org/wiki/OpenDocument"&gt;ODF&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/PDF"&gt;PDF&lt;/a&gt;, so that everyone is able to open them and use the attachments. Also, I am trying to make people sending out emails in those formats aware of the fact that not everyone can open them, not everyone wants to invest a lot of money in new applications and that some people generally prefer Free Software and that there is no way of using those files using Free Software right now.&lt;br/&gt;&lt;br/&gt;Enough for the introduction, I wanted to explain how to achieve this behavior using Exim4:&lt;br/&gt;&lt;blockquote&gt;deny  message         = Message contains attachment of unwanted type ($found_extension)&lt;br/&gt;demime          = docx:pptx:xlsx&lt;/blockquote&gt;&lt;br/&gt;Putting this snippet in the &lt;i&gt;acl_check_content&lt;/i&gt; section of your exim4.conf should do the trick.&lt;br/&gt;&lt;br/&gt;Oh, and while I am at it, you can easily use this snippet to drop mails with other attachments, based on the file extension.&lt;br/&gt;For example, in order to reject all mails containing WMV files just use &lt;i&gt;demime = wmv&lt;/i&gt;.&lt;br/&gt;&lt;br/&gt;Note that this snippets checks for a specified file extension instead of a MIME type. People still can get mails through in those formats if they modify the file extension, so &lt;b&gt;do not&lt;/b&gt; use this method as a security measure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-2206582855138536295?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/2206582855138536295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/how-to-reject-mails-containing-ooxml.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2206582855138536295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2206582855138536295'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/how-to-reject-mails-containing-ooxml.html' title='How to reject mails containing OOXML attachments using Exim4'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-755971236178766511</id><published>2008-03-26T23:12:00.000+01:00</published><updated>2009-11-09T21:21:28.542+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>SFLC now also providing services to for-profit clients</title><content type='html'>The &lt;a href="http://www.softwarefreedom.org/"&gt;Software Freedom Law Center&lt;/a&gt;, known for providing pro bono legal assistance to Free Software projects, announced the formation of &lt;a href="http://www.moglenravicher.com/"&gt;Moglen Ravicher LLC&lt;/a&gt;, a law firm also providing services to for-profit clients.&lt;br/&gt;&lt;blockquote&gt;"We are pleased to extend the services of the Software Freedom Law Center to companies that support software freedom," said Eben Moglen, founding director of SFLC.&lt;br/&gt;&lt;br/&gt;Moglen Ravicher LLC is fully owned by the Software Freedom Law Center, and all profits will go to support SFLC's operations. Clients of Moglen Ravicher LLC will receive legal counsel from the same attorneys that staff the Software Freedom Law Center.&lt;/blockquote&gt;&lt;br/&gt;This not only means that companies are now able to get legal assistance on Free Software matters from the SFLC, but also that the center found a way of helping its own funding.&lt;br/&gt;&lt;br/&gt;It also seems as if the first for-profit client  is &lt;a href="http://www.opennms.org"&gt;OpenNMS&lt;/a&gt;:&lt;br/&gt;&lt;blockquote&gt;An initial client of Moglen Ravicher LLC is OpenNMS, an open source enterprise grade network management platform. OpenNMS has retained the firm for representation regarding violations of the GNU General Public License (GPL).&lt;/blockquote&gt;&lt;br/&gt;For more information see the &lt;a href="http://softwarefreedom.org"&gt;homepage&lt;/a&gt; of the SFLC and the &lt;a href="http://www.softwarefreedom.org/news/2008/mar/26/moglen-ravicher/"&gt;news entry&lt;/a&gt; announcing this step.&lt;br/&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-755971236178766511?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/755971236178766511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/sflc-now-also-providing-services-to-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/755971236178766511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/755971236178766511'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/sflc-now-also-providing-services-to-for.html' title='SFLC now also providing services to for-profit clients'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-728949719276078867</id><published>2008-03-26T21:05:00.000+01:00</published><updated>2009-11-09T21:21:28.544+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Happy Document Freedom Day!</title><content type='html'>Just in case you do not know yet: today is &lt;a href="http://documentfreedom.org/News/20080326"&gt;Document Freedom Day&lt;/a&gt;.&lt;br/&gt;&lt;blockquote&gt;Today is Document Freedom Day: Roughly 200 teams from more than 60 countries worldwide are organising local activities to raise awareness for Document Freedom and Open Standards.&lt;/blockquote&gt;&lt;br/&gt;What does this mean for mean personally? Less than one would expect. I have been advocating the use of Open Document formats (such as ODF) for the past two years already, and try to do so whenever possible.&lt;br/&gt;&lt;br/&gt;People react very differntly when I raise this issue. Some appreciate being informed that there are Open Document formats, which guarantee interoperability with everyone, but others tend to tell me "&lt;i&gt;everyone uses [Microsoft] Office, isn't that format a standard?&lt;/i&gt;". The answer is always the same: &lt;b&gt;NO.&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;Neither the old proprietary Microsoft Office format, nor the new format, OOXML are standards in my opinion and here is why:&lt;br/&gt;&lt;br/&gt;The old format is not documented at all, and no international standards body, such as the ISO, have ever made this format a standard.&lt;br/&gt;&lt;br/&gt;The new format, OOXML, which is in the news quite often lately, is being pushed to be made an ISO standard. People often think that, as documentation (which is said to be of poor quality) is available, making this format an international standard would be a good thing.&lt;br/&gt;I am afraid I have to say &lt;b&gt;NO&lt;/b&gt; once again here. There are too many references to the old proprietary format, which is a huge no-go for something that should become an international standard.&lt;br/&gt;&lt;br/&gt;Also, there already is an international standard for office documents, &lt;b&gt;ODF&lt;/b&gt;. In my opinion there is no point in having two separate standards for the same thing and the chance of such a situation causing a lot of havoc is quite good.&lt;br/&gt;&lt;br/&gt;So, personally I have to say that I quite often suggested people to switch to &lt;a href="http://www.openoffice.org"&gt;OpenOffice.Org&lt;/a&gt; lately, instead of buying Microsoft's latest Office suite. Document Freedom and the use of Free Software are not my main arguments lately, but rather that people switching to OpenOffice.Org now do not have to learn how to use a new user-interface. People are lazy, and this argument works perfectly.&lt;br/&gt;&lt;br/&gt;And there is yet another point for using Open Standards in IT:&lt;br/&gt;Think of the Internet and where it would be without Open Standards (and also Free Software). Think of how everything on the Internet would work together. Think of one browser supporting only its own network protocol (which of course would be proprietary) and other browsers only supporting theirs. The Internet would not be what it is today without Open Standards and guaranteed interoperability.&lt;br/&gt;&lt;br/&gt;More information about the Document Freedom day can be found in the last &lt;a href="http://documentfreedom.org/News/20080326"&gt;news entry&lt;/a&gt; over at &lt;a href="http://documentfreedom.org/"&gt;documentfreedom.org&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-728949719276078867?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/728949719276078867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/happy-document-freedom-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/728949719276078867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/728949719276078867'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/happy-document-freedom-day.html' title='Happy Document Freedom Day!'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-5129753207530768346</id><published>2008-03-26T17:26:00.000+01:00</published><updated>2009-11-09T21:21:28.545+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><title type='text'>Less spam again</title><content type='html'>I found a solution to the problem last described in &lt;a href="http://espi86.wordpress.com/2008/03/25/more-spam-again/"&gt;this&lt;/a&gt; article.&lt;br/&gt;&lt;br/&gt;To sum the problem I was experiencing up: My anti-spam system (namely Spamassassin) did not detect spam mails anymore.&lt;br/&gt;&lt;br/&gt;Now here is the reason it did not: After some more investigation of the problem I noticed that spam emails were received via a local connection (forwarded from fetchmail). However, one of my Exim ACLs says not to scan emails from localhost for spam.&lt;br/&gt;&lt;br/&gt;So, the solution might be a hack, but it worked out perfectly. Starting fetchmail with the &lt;i&gt;-S &amp;lt;servername&amp;gt;&lt;/i&gt; argument causes it to send emails to the given SMTP server rather than localhost. Using the real hostname of my server caused the "do not scan local mails" not to kick in and all mails received via fetchmail to be scanned again.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Problem fixed&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-5129753207530768346?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/5129753207530768346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/less-spam-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5129753207530768346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5129753207530768346'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/less-spam-again.html' title='Less spam again'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-8190432415052688079</id><published>2008-03-25T16:29:00.000+01:00</published><updated>2009-11-09T21:21:28.547+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Moving my blog</title><content type='html'>And yet another post today. As I am planning to take down my personal server in the next few weeks (maybe months) I have moved my blog to wordpress.com. A 301-redirect has been set up at http://sp.or.at/blog so people (and robots) are still able to find my blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-8190432415052688079?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/8190432415052688079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/moving-my-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8190432415052688079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/8190432415052688079'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/moving-my-blog.html' title='Moving my blog'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-7673219687745987615</id><published>2008-03-25T15:59:00.000+01:00</published><updated>2009-11-09T21:21:28.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='observations'/><title type='text'>Mails from Technorati not arriving: not obeying their own SPF rules</title><content type='html'>As I was looking into problems with my mail server I noticed one more thing: I was wondering why I did not receive password recovery emails from &lt;a href="http://www.technorati.com"&gt;Technorati&lt;/a&gt;. It seems as if they are not obeying their own SPF rules:&lt;br/&gt;&lt;code&gt;&lt;br/&gt;2008-03-25 14:46:23 H=nat-365m.technorati.com (t120.technorati.com) [208.66.64.4] F= rejected RCPT : Not authorized by SPF&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;Now I am wondering why someone sets up SPF for his mail domain when he is in fact sending emails from other IP addresses as well. Time to update your SPF rules Technorati...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-7673219687745987615?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/7673219687745987615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/mails-from-technorati-not-arriving-not.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7673219687745987615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7673219687745987615'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/mails-from-technorati-not-arriving-not.html' title='Mails from Technorati not arriving: not obeying their own SPF rules'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1418933812387457385</id><published>2008-03-25T15:40:00.000+01:00</published><updated>2009-11-09T21:21:28.549+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Removing a lot of frozen mails from Exim’s mail queue</title><content type='html'>After writing my &lt;a href="http://www.sp.or.at/blog/2008/03/25/more-spam-again/"&gt;last article&lt;/a&gt;, I started digging into my mail configuration and after doing a quick "mailq" noticed a lot of frozen messages in Exim's queue. After inspecting the logs and the mails themselves I noticed the problem was caused by a broken POP server I retrieve mails from periodically. A few days ago something went wrong on that server and all messages were marked as unread causing my fetchmail to re-fetch all of them (about 2.5K).&lt;br/&gt;&lt;br/&gt;Now that my mail server is configured  to do sender verification and a few very old mails came from domains or systems which are non-existent today about 50 mails ended up being frozen.&lt;br/&gt;&lt;br/&gt;But how to remove all frozen mails from Exim's queue? I ended up using &lt;em&gt;mailq | grep frozen&lt;/em&gt; to get a list of  all messages (and more importantly their message IDs) and saved that to a file. I then wrote a minimalistic Python script attached to this article to delete all those messages. Consider the script a quick and dirty hack, but it might come in handy for some of you. Get it &lt;a href="http://www.sp.or.at/batchdelete.py" title="batchdelete.py"&gt;here.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1418933812387457385?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1418933812387457385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/removing-lot-of-frozen-mails-from-exims.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1418933812387457385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1418933812387457385'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/removing-lot-of-frozen-mails-from-exims.html' title='Removing a lot of frozen mails from Exim’s mail queue'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-2753668925171660352</id><published>2008-03-25T15:08:00.000+01:00</published><updated>2009-11-09T21:21:28.550+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>More spam again?</title><content type='html'>Right now I am asking myself if it just affects me or if more spam is sent out and less is detected by anti-spam software again.&lt;br/&gt;&lt;br/&gt;I set up my mail server in February and noticed a decrease in spam mail delivered to my mailbox compared to my old system. However, in the past two weeks more and more spam mail has been delivered to my mailbox again. So is it just me, my system or the system's configuration or is everyone else receiving more spam again?&lt;br/&gt;&lt;br/&gt;Anyways, it's about time to inspect the configuration of my mail system again...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-2753668925171660352?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/2753668925171660352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/more-spam-again.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2753668925171660352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/2753668925171660352'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/more-spam-again.html' title='More spam again?'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-9200592681932601933</id><published>2008-03-19T12:26:00.000+01:00</published><updated>2009-11-09T21:21:28.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Python IDEs tested</title><content type='html'>In the past two days I have been playing around with various Python IDEs. It is not like I need a fully-fledged IDE, I'm fine with GNU Emacs to be honest. However, everyone is talking about IDE X and IDE Y and how they save so much time using these programs and how these programs assist them with hacking.&lt;br/&gt;&lt;br/&gt;Well, I decided it was time to give a few IDEs a try. There were only two requirements I had: the IDE has to be Free Software and it has to run on GNU/Linux.&lt;br/&gt;&lt;br/&gt;If you are planning to read on please be aware that this was no real test, but rather contains my observations regarding the IDEs I have tested, what I liked and did not like and if one surprised me enough to actually use it instead of my good old plain GNU Emacs.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;strong&gt;Eclipse&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;As Java development in school is done with &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; and all teachers are more than happy with that program I gave it a try first. I head that there was some sort of Python IDE plugin and so I downloaded Eclipse 3.3. After a few problems keeping the bugger running for more than 5 minutes (seems like the default memory-usage configuration did not provide Eclipse with enough memory) I started downloading the &lt;a href="http://pydev.sourceforge.net/"&gt;PyDev&lt;/a&gt; plugin using the internal plugin download manager. This worked quite smoothly, however, it seemed a bit slow.&lt;br/&gt;Now PyDev looks quite neat, but without the proprietary &lt;a href="http://www.fabioz.com/pydev/"&gt;PyDev extensions&lt;/a&gt; it is rather useless and GNU Emacs gives me pretty much the same features.&lt;br/&gt;&lt;strong&gt;&lt;br/&gt;CONCLUSION&lt;/strong&gt;: Bloated, using a huge load of memory (Eight-Megabyte-And-Constantly-Swapping joke comes to my mind again), not offering a lot more features than GNU Emacs without proprietary PyDev Extensions.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;OpenKomodo&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;After reading &lt;a href="http://lwn.net/Articles/273583/" title="KomodoEdit"&gt;this&lt;/a&gt; post on &lt;a href="http://lwn.net"&gt;lwn.net&lt;/a&gt; about &lt;a href="http://www.openkomodo.com/"&gt;OpenKomodo&lt;/a&gt; (note: the post says Komodo Edit, but that's proprietary software) and how it supports Python I gave it a try. I built it from Subversion trunk, which took some time. OpenKomodo is based on Mozilla and Gecko and if you ever built Firefox from source you should know that you can go and grab quite a few coffees while waiting for the build to finish.&lt;br/&gt;The build system seems to be one specifically written for this application and so is a bit weird to use for people use to either GNU Autotools or Python's distutils. After the build process finished I was unable to find a way to install the application. The documentation only contains a note about using the build tool (black, "bk") with the "run" argument to start OpenKomodo.&lt;br/&gt;At first everything looked quite nice. It supports Python quite well, including limited auto-completion support and so on and also supports, just like you would expect, tabbed-editing. After playing around in the source tree of one of my projects and trying to get used to "normal" keyboard shortcuts, such as Ctrl+s for saving a file, I had quite a few tabs open.&lt;br/&gt;You probably know that having a lot of tabs open just leads to confusion and so I wanted to close all tabs but the currently active one and oops: that feature does not exist.&lt;br/&gt;I then digged into the OpenKomodo source, added that feature, prepared a patch and&lt;a href="http://bugs.activestate.com/show_bug.cgi?id=75787"&gt; tried to get it into the trunk&lt;/a&gt;: without luck as it seems. As noted in a comment to my bug report such features should go into extensions. As I am too lazy to write an extension just for this small patch and basic feature I am still trying getting the changes into trunk.&lt;br/&gt;However, I abandoned OpenKomodo, as I found something better. First to my conclusion though:&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;: Nice editor, but like Eclipse, quite bloated as it is based on Mozilla (memory leaks anyone?). Compile time is bad, again, because it is based on Mozilla. Getting simple patches into its trunk also seems to be a problem.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;PIDA &lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I do not remember how or where I stumbled accross a reference to &lt;a href="http://pida.co.uk/"&gt;PIDA,&lt;/a&gt; but it sounded interesting. PIDA is a Python IDE, built using Python, with a lot of features.&lt;br/&gt;Even though you cannot see this on the screenshots on the PIDA homepage it does not include its own editor. It rather makes use of an existing editor. It currently can embed either vim or GNU Emacs (you need CVS version 23.x or newer). As I was using GNU Emacs before this really caught my attention. I downloaded PIDA from mercurial and built it. Build time is less than 5 minutes on my machine, which is more than acceptable.&lt;br/&gt;When starting PIDA for the first time it asks which editor you want to embed. I obviously chose Emacs there.&lt;br/&gt;It seems like embedding Emacs is in an early stage right now. Even though everything seems to work PIDA embeds the whole GNU Emacs (GTK version) window, including the menu bar and the toolbar. This generates a weird look, as you have two menu- and toolbars, one belonging to PIDA and one belonging to GNU Emacs. No problem for me though, as it is rather a style-problem than a real one.&lt;br/&gt;After opening up one of my projects I immediately noticed one thing: version control integration. I can confirm that Subversion is properly supported and works perfectly. Including reverting of files, updating the local copy, committing changes and viewing differences. This indeed is a great feature and I like it.&lt;br/&gt;I played around a bit more and stumbled across the plugins. There are quite a few neat plugins, like a Trac integration plugin which allows you to view tickets inside the IDE or a TODO parser plugin, which parses comments containing "TODO:" or "XXX:" from files and gives you references to them.&lt;br/&gt;Another useful plugin seems to be the Python Source Viewer, which displays all functions, classes and methods present in the current python file in a tree view.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;: The IDE I am most likely going to use for now. Why? Because it seems to be lightweight, uses GNU Emacs as embedded editor and comes with a proper feature set. I suggest everyone, even hardcore GNU Emacs users, to give PIDA  a try. It looks worth it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-9200592681932601933?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/9200592681932601933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/03/python-ides-tested.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/9200592681932601933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/9200592681932601933'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/03/python-ides-tested.html' title='Python IDEs tested'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-1968756439313520520</id><published>2008-01-16T22:49:00.000+01:00</published><updated>2009-11-09T21:21:28.554+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nwu'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>nwu development news #0</title><content type='html'>So, today I am starting off with a new story series. The &lt;a href="http://cetico.org/nwu"&gt;nwu&lt;/a&gt; development news.&lt;br/&gt;Now what is this series about? Well, to make a long story short, it is about what has recently changed in nwu's codebase and how nwu is coming along.&lt;br/&gt;Just a sidenote, the first story in this series is of course number 0, as real programmers start counting at 0. :-)&lt;br/&gt;&lt;br/&gt;For those of you who are now wondering what nwu is or could be, I did write about nwu on this weblog already and the 'nwu - an introduction' post should give you a good idea of what it is.&lt;br/&gt;&lt;br/&gt;So, what has changed recently? Basically I merged my changes back into trunk, which means that most of these things are going to be used now. This means that the &lt;strong&gt;application framework&lt;/strong&gt;, the &lt;strong&gt;scheduler&lt;/strong&gt;, the &lt;strong&gt;APT "Packages" file parser&lt;/strong&gt;, &lt;strong&gt;support for gzip compression&lt;/strong&gt; in both the SecureXMLRPC client and server and the brand-new &lt;strong&gt;RPC framework&lt;/strong&gt; are either already being used, or are going to be used soon.&lt;br/&gt;&lt;br/&gt;Except for the RPC framework, which would need to be adapted, and the application framework, which depends on nwu.common.config, all these pieces of code also work stand-alone and can be used in other python applications too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-1968756439313520520?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/1968756439313520520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/01/nwu-development-news-0.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1968756439313520520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/1968756439313520520'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/01/nwu-development-news-0.html' title='nwu development news #0'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-5765386386732767159</id><published>2008-01-13T18:43:00.000+01:00</published><updated>2009-11-09T21:21:28.556+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nwu'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Using parts of nwu in your project</title><content type='html'>As I promised I am writing about &lt;a href="http://cetico.org/nwu" title="network wide updates"&gt;nwu&lt;/a&gt; again. But instead of reporting on recent development efforts I would rather like to point something else out today: The &lt;a href="http://cetico.org/nwu/browser/branches/stephan/nwu/common" title="nwu.common module"&gt;nwu.common&lt;/a&gt; Python module contains code which can be used stand-alone in your applications. Some of the functions the module provides could come in handy, so I thought it was a good idea to let you know.&lt;br/&gt;&lt;br/&gt;This article is going to explain the stand-alone nwu.common.* modules and their function.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;strong&gt; nwu.common.SecureXMLRPC&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;I would like to start out introducing my "baby": SecureXMLRPC. As the name suggests it provides support for XML-RPC over https. You might think "but that's present in Python's SimpleXMLRPCServer and xmlrpclib already" and you are right about that. However, the Python implementation uses &lt;a href="http://openssl.org/" title="OpenSSL homepage"&gt;OpenSSL&lt;/a&gt;, whilst SecureXMLRPC provides both a server and client implementation using &lt;a href="http://www.gnu.org/software/gnutls/" title="GnuTLS homepage"&gt;GnuTLS&lt;/a&gt;. Even though the OpenSSL version works perfectly fine you cannot link it to GPL-licensed code due to the OpenSSL license being &lt;a href="http://gnu.org/licenses/license-list.html" title="license list"&gt;incompatible to the GPL&lt;/a&gt;.&lt;br/&gt;Furthermore SecureXMLRPC supports compression of the XML-RPC payload and as of today is aware of multi-threading.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;nwu.common.config&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The config module provides a single class, "Config". It basically is a slightly improved version of Python's SafeConfigParser class and allows passing a "default value" argument to its get() method which is returned in case the setting is not present in the config.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;nwu.common.app&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;This is a simple application framework. It makes use of "nwu.common.config" for reading the config file. However, its main feature is a simple-to-use command-line parser, which parses not only arguments from the command-line (such as --do-something, -d or --configfile=filename), but also supports "commands" as they can be found in several applications, such as aptitude. This way it is easy to not only create top-level commands (like "aptitude &lt;em&gt;search&lt;/em&gt; &amp;lt;package name&amp;gt;"), but also nested command structures (like "program &lt;em&gt;computer get&lt;/em&gt; &amp;lt;computer name&amp;gt;", "program &lt;em&gt;computer list&lt;/em&gt;", etc.).&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;nwu.common.certtool&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;The certtool module is a wrapper around GnuTLS' certtool application. It allows you to create private keys, certificate authorities, sign certificates, created certificate-signing-requests (CSRs)  and sign such.&lt;br/&gt;However, please note that it currently does not implement the full functionality certtool provides but rather only the pieces nwu needs.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;nwu.common.aptmethod&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;nwu.common.aptmethod simplifies implementation of an APT transport/method in Python. It takes care of all communication done with apt itself and thus gives you the opportunity to implement a new method in a simple way.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;nwu.common.apt&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Finally there is also the apt module. This module currently contains code to parse APT Packages files.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;nwu.common.scheduler&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;One of the latest additions to the common module. It provides a way of scheduling tasks for execution at a certain date/time and executing a task in a given interval.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-5765386386732767159?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/5765386386732767159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/01/using-parts-of-nwu-in-your-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5765386386732767159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/5765386386732767159'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/01/using-parts-of-nwu-in-your-project.html' title='Using parts of nwu in your project'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-7231447609161241928</id><published>2008-01-13T12:02:00.000+01:00</published><updated>2009-11-09T21:21:28.559+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>Blue-GNU - News for Gnus</title><content type='html'>I just stumbled accross what seems to be an interesting Free Software news site, named &lt;a href="http://blue-gnu.biz/"&gt;Blue-GNU&lt;/a&gt;, and wanted to let you know.&lt;br/&gt;&lt;br/&gt;It also seems to be "GNU-approved" as there is a link to it on the (new) &lt;a href="http://gnu.org"&gt;gnu.org&lt;/a&gt; frontpage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-7231447609161241928?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/7231447609161241928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/01/blue-gnu-news-for-gnus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7231447609161241928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/7231447609161241928'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/01/blue-gnu-news-for-gnus.html' title='Blue-GNU - News for Gnus'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2238516101365346732.post-3260944177091362417</id><published>2008-01-13T11:57:00.000+01:00</published><updated>2009-11-09T21:21:28.560+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nwu'/><category scheme='http://www.blogger.com/atom/ns#' term='free software'/><title type='text'>nwu - an introduction</title><content type='html'>This article should give you a brief overview of what &lt;a href="http://cetico.org/nwu" target="_blank"&gt;network-wide updates&lt;/a&gt;, one of my projects, is about.&lt;br/&gt;&lt;br/&gt;Network wide updates, or nwu, is a &lt;a href="http://www.gnu.org/philosophy/free-sw.html"&gt;free software&lt;/a&gt; package licensed under the &lt;a href="http://gnu.org/licenses/gpl.html" target="_blank"&gt;GPL&lt;/a&gt; (version 3 or later). It allows an administrator to remotely install software on and roll out security upgrades to managed computers. It is targeted at GNU/Linux systems using the &lt;a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool"&gt;Advanced Packaging Tool&lt;/a&gt; (APT) for package management and thus should run fine on all GNU/Linux distributions based on &lt;a href="http://debian.org"&gt;Debian GNU/Linux&lt;/a&gt; (such as &lt;a href="http://gnewsense.org"&gt;gNewSense&lt;/a&gt; and all &lt;a href="http://ubuntu.com"&gt;Ubuntu&lt;/a&gt; flavors).&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;It further gathers data about all managed computers in a database, which gives the administrator an overview about which systems are managed, the hardware configurations they have, the software installed on them and pending security updates.&lt;br/&gt;&lt;br/&gt;The system is split into two major components: the server, which is the central management point, and the clients, usually referred to as agents, which report to the server.&lt;br/&gt;&lt;br/&gt;Now let's go into nasty technical details. nwu is implemented in &lt;a href="http://python.org"&gt;Python&lt;/a&gt;, using XML-RPC and python-gnutls (and this way the &lt;a href="http://gnu.org/software/gnutls"&gt;GnuTLS&lt;/a&gt; library) for secure communication between the server and its agents. It further makes use of X.509-certificate authentication and provides an integrated CA-system which simplifies use of this method a great deal.&lt;br/&gt;&lt;br/&gt;Currently nwu is in an alpha development stage, but moving forward quite fast. We are expecting to be able to release a stable version quite soon.&lt;br/&gt;&lt;br/&gt;The development team is made up of &lt;a href="http://cetico.org/tech" class="ext-link"&gt;&lt;span class="icon"&gt;Yves Junqueira&lt;/span&gt;&lt;/a&gt; and myself right now, but we would be happy to accept contributions from others.&lt;br/&gt;&lt;br/&gt;If you are interested in nwu development you should probably watch this blog, as I am going to write about recent developments here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2238516101365346732-3260944177091362417?l=techandsp.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techandsp.blogspot.com/feeds/3260944177091362417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techandsp.blogspot.com/2008/01/nwu-introduction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3260944177091362417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2238516101365346732/posts/default/3260944177091362417'/><link rel='alternate' type='text/html' href='http://techandsp.blogspot.com/2008/01/nwu-introduction.html' title='nwu - an introduction'/><author><name>sp</name><uri>http://www.blogger.com/profile/10693058812548733549</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Aw-AgPpRjjA/Svh1RWGdS8I/AAAAAAAAAAM/3dMoZVQCHKI/S220/sp_hackergotchi2_85x85.png'/></author><thr:total>0</thr:total></entry></feed>
