<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
         xmlns="http://purl.org/rss/1.0/">




    



<channel rdf:about="http://rudd-o.com/en/linux-and-free-software/aggregator/RSS">
  <title>Linux and free software: front page</title>
  <link>http://rudd-o.com</link>
  
  <description>
    
       Get to know the wonderful world that Linux and free software enthusiasts have created!
       
  </description>
  
  
  
            <syn:updatePeriod>hourly</syn:updatePeriod>
            <syn:updateFrequency>1</syn:updateFrequency>
            <syn:updateBase>2008-11-13T17:05:31Z</syn:updateBase>
        
  
  <image rdf:resource="http://rudd-o.com/logo.jpg"/>

  <items>
    <rdf:Seq>
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/nokia-n900"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/help-i-uninstalled-a-plone-product-reinstalled-it-and-now-some-of-my-content-doesnt-show-up-in-the-navigation"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/arcana-of-etc-ltsp-ldm-global-dmrc"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/how-to-get-virtual-surround-sound-on-your-headphones-plugged-to-your-linux-rig"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/kde-4.2-nepomuk-and-linux-distributions"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/conficker-eye-chart-reloaded"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/amarok-2-a-story-of-disappointment"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/making-zope-and-plone-collaborate-with-google-analytics"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/plone-documentation-center-failing-with-right_slots-or-name-not-defined-errors"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/kde-4.2-web-shortcuts-gg-not-working-in-krunner"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/new-plone-3.2.2-packages-released-as-rpms"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/qseoptimizer-and-plone-documentation-center-acting-up"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/how-to-make-plone-3-not-log-you-off-when-you-close-your-browser"/>
        
        
            <rdf:li rdf:resource="http://rudd-o.com/en/linux-and-free-software/how-to-create-big-ass-empty-files-in-milliseconds"/>
        
    </rdf:Seq>
  </items>

</channel>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/nokia-n900">
    <title>Nokia N900: check it out on this video.</title>
    <link>http://rudd-o.com/en/linux-and-free-software/nokia-n900</link>
    <description>It is not only superior to the iPhone 3GS in what you can do -- the user interface is really streamlined.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/nokia-n900">Nokia N900: check it out on this video.</a></small>.</p>
<p>I have an iPhone. I am not afraid to say this: the N900 smashes it.&nbsp; Here's just a quick example -- in the form of an interaction demo video -- of what the N900 can do:</p> <p style="text-align: center;"><object width="560" height="340"> <param name="movie" value="http://www.youtube.com/v/RP5R-5NX1BE&amp;hl=es&amp;fs=1&amp;"> <param name="allowFullScreen" value="true"> <param name="allowscriptaccess" value="always"><embed width="560" height="340" src="http://www.youtube.com/v/RP5R-5NX1BE&amp;hl=es&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"></embed></object></p> <p>For a <a href="http://www.reddit.com/r/technology/comments/9eyag/nokia_n900_vs_iphone_3gs_specs_side_by_side/">blow-by-blow feature comparison against the 3GS, go here</a>.</p><p><strong>Edit: and the promo video is to die for!</strong></p> <p style="text-align: center;"><object width="560" height="340"><param value="http://www.youtube.com/v/GhTtsZATwBQ&amp;hl=es&amp;fs=1&amp;" name="movie"><param value="true" name="allowFullScreen"><param value="always" name="allowscriptaccess"><embed width="560" height="340" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.youtube.com/v/GhTtsZATwBQ&amp;hl=es&amp;fs=1&amp;"></embed></object></p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Maemo</dc:subject>
    
    
        <dc:subject>Nokia</dc:subject>
    
    
        <dc:subject>iPhone</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    <dc:date>2009-08-28T09:23:23Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/help-i-uninstalled-a-plone-product-reinstalled-it-and-now-some-of-my-content-doesnt-show-up-in-the-navigation">
    <title>Help!  I uninstalled a Plone product, reinstalled it and now some of my content doesn't show up in the navigation!</title>
    <link>http://rudd-o.com/en/linux-and-free-software/help-i-uninstalled-a-plone-product-reinstalled-it-and-now-some-of-my-content-doesnt-show-up-in-the-navigation</link>
    <description>Relax.  Your content hasn't disappeared -- is there, hidden by a perhaps overzealous malfunction protection mechanism.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/help-i-uninstalled-a-plone-product-reinstalled-it-and-now-some-of-my-content-doesnt-show-up-in-the-navigation">Help!  I uninstalled a Plone product, reinstalled it and now some of my content doesn't show up in the navigation!</a></small>.</p>
<p>User Moo__ in the #plone channel at Freenode alerted me to the solution.&nbsp; What happens is this:</p> <ol>     <li>You uninstall a product.</li>     <li>Plone detects this, and to prevent malfunctions, any of the content types in the product get registered in a secret exclusion list.&nbsp; Whenever the navigation is shown, this list is consulted so as to not make Plone fail because the type of the uninstalled objects can't be found.</li>     <li>You install the product again.</li>     <li>Items remain in this secret list, and do not get removed no matter how hard you tinker with the Navigation control panel.</li> </ol> <p>The solution is to remove the excluded content types in the <code>portal_properties</code> folder of your Zope Management Interface:</p> <ol>     <li>Open your ZMI.</li>     <li>Browse to <code>portal_properties</code> within your Plone site.</li>     <li>Go to the Properties tab and look for the list <code>parentMetaTypesNotToQuery</code>.</li>     <li>Remove the content types that got added there.</li> </ol> <p>That's it!&nbsp; Now, why isn't this documented somewhere?</p> <p>&nbsp;</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>Plone</dc:subject>
    
    <dc:date>2009-08-15T12:32:37Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/arcana-of-etc-ltsp-ldm-global-dmrc">
    <title>Arcana of /etc/ltsp/ldm-global-dmrc</title>
    <link>http://rudd-o.com/en/linux-and-free-software/arcana-of-etc-ltsp-ldm-global-dmrc</link>
    <description>A tip of the trade from a fellow LTSP administrator: how to set up the default language and desktop session on LTSP terminals booting off a Fedora 11 terminal server.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/arcana-of-etc-ltsp-ldm-global-dmrc">Arcana of /etc/ltsp/ldm-global-dmrc</a></small>.</p>

<p>In the Fedora 11 flavor of LTSP, you can set a default language and desktop environment for the users' session by editing the file <code>/etc/ltsp/ldm-global-dmrc</code>.&nbsp; This is "documented" behavior; Warren Togami kindly wrote a one-line blurb about it in the RPM change log.&nbsp; A Busey clap for their dedication to <strong>not</strong> documenting their "configuration" options publicly:</p>
<pre>* Thu Dec 11 2008 Warren Togami &lt;wtogami@redhat.com&gt; - 2.0.22-1
  - Show good names in Session menu
  - Use and write to user .<strong>dmrc</strong>
<em>    It is now possible to set a default session that is not GNOME.
    Set LDM_GLOBAL_DMRC=/etc/ltsp/<strong>ldm</strong>-<strong>global</strong>-<strong>dmrc</strong> in lts.conf
      and specify your choice in /etc/ltsp/<strong>ldm</strong>-<strong>global</strong>-<strong>dmrc</strong> on the server.</em>
</pre>
<p> I wanted to understand how a file in the server filesystem, not exported via NFS to the client, gets to affect the configuration of the terminal itself.</p>
<p>My first look was inside the <code>ldminfod</code> RPM package -- a companion package to the LDM greeter that goes in the terminal and serves some information the terminal needs to display to the user on the greeter.&nbsp; Since that file is distributed inside the <code>ldminfod</code> RPM package, that was the logical step, right?&nbsp; But said file does not appear to be read by the <code>ldminfod</code> on-demand <code>xinetd</code> daemon, so I was left stumped and wondering where and how it's read.</p>
<p>In case you wanted to know, it's read by the terminal client itself upon LDM login, when it's time to set up the desktop session, in the script <code>/opt/ltsp/i386/usr/share/ldm/rc.d/X50-dmrc-processing</code>.</p>
<p>The way that the script works is rather convoluted (I would have expected the LDM info daemon to give out the information in the file to the LDM greeter).&nbsp; The script specified in <code>/var/lib/tftpboot/ltsp/i386/lts.conf</code> in the variable <code>LDM_GLOBAL_DMRC</code> (which defaults to the file name in the first paragraph) is copied via scp to a temporary location into the terminal memory, along with the <code>.dmrc</code> of the user.&nbsp; Those files are then merged, and finally a decision on desktop environment and language is made upon the merged content of those files.</p>
<p class="discreet">How did I discover this?&nbsp; Thanks to the audit subsystem.&nbsp; I set a watch on the file of interest, and watched it be fetched by the terminal when I logged on to it.</p>
<p>I admit: this scp shenanigan is rather ingenious.&nbsp; However, unless having a user <code>.dmrc</code> is so important, I think it's overengineering; in my humble opinion, the LDM info daemon should export that information instead; after all, it's just security-insensitive defaults.</p>
<p>In fact, this whole <code>LDM_GLOBAL_DMRC</code> problem could be easily bypassed if LTSP simply obeyed the global terminal server configuration.&nbsp; I don't see why I should need to specify a default language in a separate file, when that default language has already been specified in the system configuration via the <code>LANG</code> environment variable.&nbsp; I also do not see why I should need to specify a default desktop environment, when that information has already been specified via distribution methods -- just run whatever gets me the session that I use when I logon locally and that's it!</p>
<p>For example, in Fedora, you just launch the <code>Xsession</code> script with the name of the desktop session that you want to run.&nbsp; Which is, all in all, what the terminal ends up remoting via SSH on the server, so the session piggybacks to the client display.&nbsp; The whole thing could be done by serving a "default" session line in the LDM info daemon output before all the lines of the other sessions, and serving the default language as the first line as well.&nbsp; Then LDM can use the first choice of language as the default language, and the default session gets to be the default system session.&nbsp; It would all work integrated with the Fedora X Window System client startup subsystem.</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>the X Window System</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>LTSP</dc:subject>
    
    <dc:date>2009-07-23T09:23:51Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users">
    <title>How to make PulseAudio run once at boot for all your users</title>
    <link>http://rudd-o.com/en/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users</link>
    <description>Running PulseAudio as a system-wide service has advantages -- you can play audio without having logged on, multiple users can play audio on the same audio gear, and music daemons like MPD won't fight for the audio device with PulseAudio.  Here's how.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/how-to-make-pulseaudio-run-once-at-boot-for-all-your-users">How to make PulseAudio run once at boot for all your users</a></small>.</p>

<p class="discreet">These instructions should work in Fedora 11, and probably Ubuntu as well.&nbsp; You will probably lose the ability to pair up Bluetooth audo gear, like lose&nbsp; autotunneling capabilities to networked audio devices through Zeroconf, but hey, you get what you pay for ;-)&nbsp; I also hear there are security considerations stemming from the fact that users allowed access to PulseAudio may break something in it, but for home use it is probably going to be just fine.</p>
<h2>Starting up PulseAudio on boot</h2>
<p>Put this text in the file <code>/etc/event.d/pulseaudio</code>:</p>
<pre>start on runlevel [2345]
stop on runlevel [016]

exec pulseaudio --system --realtime --log-target=syslog

respawn

description "PulseAudio system server"

pre-start script
	for a in `seq 60` ; do
		sleep 1
		killall -0 hald &amp;&amp; killall -0 dbus-daemon &amp;&amp; break
	done
end script

<em>post-start script
	( sleep 1 ; paplay /usr/share/sounds/login.wav ) &amp;
end script</em></pre>
<p>The text in italics is <em>optional</em> -- either don't include it, or replace it with something that will play a sound file confirming that PulseAudio has started.</p>
<p>As you can see, this is a straightforward script that waits until hald and D-Bus are active before starting PulseAudio (both are needed to get the hardware list), and then starts it up.</p>
<h2>Setting up default client settings</h2>
<p>Add these lines in the file <code>/etc/pulse/client.conf</code>:</p>
<pre>default-server = /var/run/pulse/native
autospawn = no</pre>
<h2>Allowing users access to the audio service</h2>
<p>Add every user that is allowed to use the audio device to the group <code>pulse-access</code>.</p>
<h2>Allowing PulseAudio access to Bluetooth</h2>
<p>In order to pair up with Bluetooth devices, you need to add the following text to the file <code>/etc/dbus-1/system.d/pulse.conf</code>:</p>
<pre>&lt;!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"&gt;
&lt;busconfig&gt;
	&lt;policy user="root"&gt;
		&lt;allow own="org.pulseaudio.Server"/&gt;
                &lt;allow send_destination="org.bluez"/&gt;
                &lt;allow send_interface="org.bluez.Manager"/&gt;
	&lt;/policy&gt;
	&lt;policy user="pulse"&gt;
		&lt;allow own="org.pulseaudio.Server"/&gt;
                &lt;allow send_destination="org.bluez"/&gt;
                &lt;allow send_interface="org.bluez.Manager"/&gt;
	&lt;/policy&gt;
	&lt;policy context="default"&gt;
                &lt;deny own="org.pulseaudio.Server"/&gt;
                &lt;deny send_destination="org.bluez"/&gt;
                &lt;deny send_interface="org.bluez.Manager"/&gt;
        &lt;/policy&gt;
&lt;/busconfig&gt;
</pre>
<h2>Preventing PulseAudio from starting on graphical logon</h2>
<p>A pesky program tries to start PulseAudio every time you log on, which may cause conflicts.&nbsp; Prevent this by running the following command as root:</p>
<pre>chmod -x /usr/bin/start-pulseaudio-x11</pre>
<p>You may need to run this command whenever you upgrade your system and,
in the course of the upgrade, PulseAudio itself is upgraded.</p>
<p>I've submitted a patch for PulseAudio that will render this step unnecessary soon, if it's accepted.  It's logged as <a href="http://www.pulseaudio.org/ticket/606">ticket 606 in the PulseAudio bug tracker</a>.</p>
<h2>That's it!</h2>
<p>Close your session and reboot your machine.&nbsp; PulseAudio should start on boot now, and all applications will be able to play sound, whether they are console or graphical applications, and without the need to actually log on beforehand.&nbsp; In addition, if PulseAudio dies, it will be automatically restarted and you will hear a confirmatory sound (provided you actually put the italicized text with a command to play audio).</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    
        <dc:subject>PulseAudio</dc:subject>
    
    
        <dc:subject>music</dc:subject>
    
    
        <dc:subject>Ubuntu</dc:subject>
    
    
        <dc:subject>audio</dc:subject>
    
    <dc:date>2009-07-15T00:52:28Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/how-to-get-virtual-surround-sound-on-your-headphones-plugged-to-your-linux-rig">
    <title>How to get virtual surround sound on your headphones plugged to your Linux rig</title>
    <link>http://rudd-o.com/en/linux-and-free-software/how-to-get-virtual-surround-sound-on-your-headphones-plugged-to-your-linux-rig</link>
    <description>Want to experience movies better but don't have the home theater?  Now you can.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/how-to-get-virtual-surround-sound-on-your-headphones-plugged-to-your-linux-rig">How to get virtual surround sound on your headphones plugged to your Linux rig</a></small>.</p>

<p>The latest release of ALSA (Advanced Linux Sound Architecture) ships a sound virtualization plugin that uses (to the extent that my hearing can tell) HRTF to virtualize multichannel sound.&nbsp; This plugin is called <code>vdownmix</code> and it has the ability to mix down both quadraphonic and 5.1 surround sound so they sound more "spatial" with headphones.</p>
<p>Here, we'll learn how to set that up with Fedora 11 -- with the advantage that this solution works with PulseAudio just fine.&nbsp; Users of other distributions may adapt these instructions to their packaging and configuration.&nbsp; We assume, of course, that you don't have a home theater installed in your system -- rather, you only have a set of headphones plugged into your stereo or sound card.</p>
<h2>Step 1: install the requisite software</h2>
<p>Launch your software installer tool and look for a package named <code>alsa-plugins-vdownmix</code>.&nbsp; Install it.&nbsp; For those of you who like to use the command line:</p>
<pre>yum install -y alsa-plugins-vdownmix
</pre>
<h2>Step 2: set the software up</h2>
<p>By default, this plugin comes with a neutered configuration that you have to explicitly request in your application.&nbsp; This is silly.&nbsp; The way we're going to set it up is rather simple: we're going to tell ALSA to disregard the standard multichannel outputs in the cards with this short ALSA configuration script:</p>
<pre>pcm.!surround51 {
        @args [ CARD DEV ]
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars [
                                ALSA_SURROUND51_CARD
                                ALSA_PCM_CARD
                                ALSA_CARD
                        ]
                        default {
                                @func refer
                                name defaults.pcm.surround51.card
                        }
                }
        }
        @args.DEV {
                type integer
                default {
                        @func igetenv
                        vars [
                                ALSA_SURROUND51_DEVICE
                        ]
                        default {
                                @func refer
                                name defaults.pcm.surround51.device
                        }
                }
        }
        type vdownmix
        slave.pcm {
                @func refer
                name {
                        @func concat
                        strings [
                                "cards."
                                {
                                        @func card_driver
                                        card $CARD
                                }
                                ".pcm.surround51." $DEV ":CARD=" $CARD
                        ]
                }
        }
        hint {
                description "Downmix to stereo 5.1 Surround output to Front, Center, Rear and Subwoofer speakers"
                device $DEV
        }
}

pcm.!surround40 {
        @args [ CARD DEV ]
        @args.CARD {
                type string
                default {
                        @func getenv
                        vars [
                                ALSA_SURROUND51_CARD
                                ALSA_PCM_CARD
                                ALSA_CARD
                        ]
                        default {
                                @func refer
                                name defaults.pcm.surround40.card
                        }
                }
        }
        @args.DEV {
                type integer
                default {
                        @func igetenv
                        vars [
                                ALSA_SURROUND51_DEVICE
                        ]
                        default {
                                @func refer
                                name defaults.pcm.surround40.device
                        }
                }
        }
        type vdownmix
        slave.pcm {
                @func refer
                name {
                        @func concat
                        strings [
                                "cards."
                                {
                                        @func card_driver
                                        card $CARD
                                }
                                ".pcm.surround51." $DEV ":CARD=" $CARD
                        ]
                }
        }
        hint {
                description "Downmix to stereo 4.0 Surround output to Front, Center, Rear and Subwoofer speakers"
                device $DEV
        }
}</pre>
<p>&nbsp;Save the contents of this script in the file <code>/etc/alsa/pcm/vdownmix.conf</code> (do this as root, obviously).  Now we're going to tell ALSA to pick this configuration file up, by editing the file <code>/etc/asound.conf</code>.  The original file should look like this:</p>
<pre>#
# Place your global alsa-lib configuration here...
#

@hooks [
        {
                func load
                files [
                        "/etc/alsa/pulse-default.conf"
                ]
                errors false
        }
]</pre>
<p>Add a new line as per this example:</p>
<pre>#
# Place your global alsa-lib configuration here...
#

@hooks [
        {
                func load
                files [
                        "/etc/alsa/pcm/vdownmix.conf"
                        <strong>"/etc/alsa/pulse-default.conf"</strong>
                ]
                errors false
        }
]</pre>
<p>You're finished with the setup.  You can verify that the configuration has been picked up properly by running the command <code>aplay -L</code> on a console -- you should see the description of the surround51 definition begin with <q>Downmix...</q>.</p>
<p>And that's it.&nbsp; Your system is now properly set up to virtualize surround sound to your headphones.&nbsp;</p>
<p>Now, you should know this configuration is not applied by default: PulseAudio still needs to be informed when you intend to play multichannel audio, otherwise PulseAudio performs non-spatialized mixdown of your multichannel audio.&nbsp; Here's how you prevent that from happening.</p>
<h2>How to activate and deactivate virtualization on the fly</h2>
<p>Whenever you want to listen to multichannel audio on your headphones, you will want to tell PulseAudio to output multichannel audio on your gear.&nbsp; You do this by:</p>
<ol><li>Opening the <em>PulseAudio Volume Control</em></li><li>Going to the <em>Configuration</em> tab (the last tab in the application)</li><li>Selecting <em>Output Analog 5.1</em> on the drop-down of your sound card</li></ol>
<p>This lets PulseAudio know that you have a "surround-sound capable" sound card, which makes PulseAudio relay each sound channel straight into the ALSA downmixer, which in turn mixes each channel down to the correct virtual position.</p>
<p>Finally: when you go back to your speakers or to listening stereo music, select <em>Output Analog Stereo</em> again, and the spatialization will be disabled.</p>
<p>And that's it!</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>movies</dc:subject>
    
    
        <dc:subject>music</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    
        <dc:subject>audio</dc:subject>
    
    
        <dc:subject>ALSA</dc:subject>
    
    <dc:date>2009-07-13T10:16:13Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/kde-4.2-nepomuk-and-linux-distributions">
    <title>KDE 4.2, NEPOMUK and Linux distributions</title>
    <link>http://rudd-o.com/en/linux-and-free-software/kde-4.2-nepomuk-and-linux-distributions</link>
    <description>NEPOMUK and Strigi do not work in the vast majority of Linux distributions.  We'll see why, and how we can fix that.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/kde-4.2-nepomuk-and-linux-distributions">KDE 4.2, NEPOMUK and Linux distributions</a></small>.</p>

<h2>What NEPOMUK is about</h2>
<p> The stable KDE 4.2 release is a phenomenal work of art that lets
every application share and modify metadata using an unified ontology,
all mediated through the great D-Bus protocol.&nbsp; This is known as NEPOMUK and the way it works is as follows:</p>
<ul><li>There is a daemon that starts up when your desktop environment starts.&nbsp; This daemon (the NEPOMUK daemon) starts a bunch of little services -- storage backends, query server, indexer (known as Strigi).</li><li>This daemon latches onto the D-Bus session associated with your desktop environment.&nbsp; It sits there listening to queries -- they can be questions in SPARQL, or method calls to get/set specific pieces of metadata.</li><li>The daemon mediates the job of searching the storage backends and manipulating the data.</li><li>Applications query it through D-Bus using a standardized interface that works for full-text-search queries and other sorts of metadata-related queries.<br /></li></ul>
<p>This provides a central location which applications can access the metadata, either directly through D-Bus or abstracted through the available application libraries.&nbsp; It's a rather powerful idea, since applications no longer need to link directly to metadata libraries or use ad-hoc methods like stat calls to piece together metadata for files in your computer.</p>
<p>Couple this with a KIO slave called <code>nepomuksearch:</code>, and you have live searches or data feeds for your applications.&nbsp; That's right, you can put a list of files tagged <em>TO-DO</em> or a list of files with the word <em>rabbit</em> right on your desktop.</p>
<p>Or at least you ought to be able to.</p>
<h2>The problem<br /></h2>
<p>The problem is that NEPOMUK simply does not work in KDE 4.2 as it was supposed to work.</p>
<p>The database technology used in NEPOMUK is called Soprano.&nbsp; It was chosen because it has several pluggable backends (sort of on-disk formats).&nbsp; The problem with Soprano is that its default backend (the Redland one) does not support certain query methods on its database, methods that NEPOMUK requires.&nbsp; So the NEPOMUK developers decided to use the Sesame2 backend, which is feature-complete and fast enough for their needs.</p>
<p>One problem, though: Sesame2 is a Java library that almost nobody in the distribution world has bothered to package for almost no distributions.&nbsp; And with good reason too -- most distributions require a compilation from source, while the Sesame2 backend is being distributed as a JAR file instead.</p>
<p>The result is clear:&nbsp; <code>nepomuksearch:</code> (the whole point behind NEPOMUK) does not work in any distribution except perhaps for Mandriva.</p>
<p>And, in that manner, the NEPOMUK developers royally tied themselves up into a Gordian Knot.</p>
<h2>The fix</h2>
<p>...is not that simple.</p>
<p>The quick fix is to package the Sesame2 backend.&nbsp; <a class="external-link" href="http://rdieter.fedorapeople.org/pkg-reviews/soprano-backend-sesame2/">Rdieter has done this himself</a>, and I have rebuilt the packages so they are installable.&nbsp; Here is a package for Fedora 11, derived from an OpenSUSE package.&nbsp; Here you go:</p>
<ul><li><a class="external-link" href="../../new-projects/the-missing-rpms/browse/RPMS/x86_64/soprano-backend-sesame2-2.2.3-2.fc11.x86_64.rpm">64-bit Fedora 11 RPM</a></li></ul>
<p>But distributions do not want to go there, namely because distributing KDE in this manner would introduce a dependency to Java.&nbsp; That's about two hundred megabytes to ship just one feature.&nbsp; <a class="external-link" href="http://trueg.wordpress.com/2009/02/27/are-we-there-yet-the-long-road-to-a-stable-soprano-virtuoso-backend/">So what they're doing, long-term, is write a Soprano C++ backend (Virtuoso)</a> to replace the need for the Sesame2 backend.&nbsp; There have been talks about merging the Akonadi and NEPOMUK databases too -- and, frankly, it is quite moronic to have a SPARQL daemon and a MySQL daemon running per desktop session anyway, and it's also quite moronic to have to deal with data format impedance mismatches between client applications, so these talks do make quite a lot of sense.</p>
<p>&nbsp;</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Strigi</dc:subject>
    
    
        <dc:subject>NEPOMUK</dc:subject>
    
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>KDE</dc:subject>
    
    
        <dc:subject>hacks</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    
        <dc:subject>tips</dc:subject>
    
    <dc:date>2009-04-22T13:49:19Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/conficker-eye-chart-reloaded">
    <title>Conficker eye chart -- reloaded.  Also known (in the great tradition) as: Spread this chart</title>
    <link>http://rudd-o.com/en/linux-and-free-software/conficker-eye-chart-reloaded</link>
    <description>Are you infected with Conficker?  My machines can handle the DDoS that Conficker inflicted on the original eye chart's site.  See if you're infected here.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/conficker-eye-chart-reloaded">Conficker eye chart -- reloaded.  Also known (in the great tradition) as: Spread this chart</a></small>.</p>

<p class="callout">On account of the original eye chart at Joe Stewart's site being down, I've taken the liberty of creating this eye chart in replacement.</p>
<table align="center">
<tbody>
<tr>
<td align="center"><a href="http://www.f-secure.com/"><img src="http://www.f-secure.com/export/system/fsgalleries/thumbnails/thumbnails_112xN/FSC_logo_pos_112x128.jpg" alt="" height="128" width="112" /></a></td>
<td align="center"><a href="http://www.secureworks.com/"><img src="http://www.secureworks.com/images/headerlogo.gif" alt="" height="37" width="233" /></a></td>
<td align="center"><a href="http://www.trendmicro.com/"><img src="http://us.trendmicro.com/images/common/LogoTrendMicro_3d.gif" alt="" height="45" width="120" /></a></td>
</tr>
<tr>
<td align="center"><a href="http://www.openbsd.org/"><img src="http://eyechart.sie.isc.org/openbsd.jpg" alt="" height="129" width="150" /></a></td>
<td align="center"><a href="http://www.linux.org/"><img src="http://149.20.54.68/linux.png" alt="" height="129" width="109" /></a></td>
<td align="center"><a href="http://www.freebsd.org/"><img src="http://eyechart.sie.isc.org/freebsd.png" alt="" height="129" width="118" /></a></td>
</tr>
</tbody>
</table>
<h2>How to interpret</h2>
<table>
<tbody>
<tr align="center">
<td>If you see this above:</td>
<td>It probably means this:</td>
</tr>
<tr>
<td align="center">All six images displayed</td>
<th align="left">= Normal/Not Infected by Conficker (or using proxy)</th>
</tr>
<tr>
<td align="center">Security/AV logos not displayed</td>
<th align="left">= Possibly Infected by Conficker (C variant or greater)</th>
</tr>
<tr>
<td align="center">Some security/AV logos not displayed</td>
<th align="left">= Possibly Infected by Conficker B variant</th>
</tr>
<tr>
<td align="center">Lower images don't appear<br />(Tux, blowfish, devil)<br /></td>
<th align="left">=<br />
<ol><li>&nbsp;Image loading turned off in browser?</li>
<li>Verification images most likely being DDoSed (attacked by thousands of machines around the globe)</li></ol>
It's okay, the important part is the top images -- <em>do you see them</em>?</th>
</tr>
<tr>
<td align="center">Any other combination</td>
<th align="left">= Poor Internet connection?</th>
</tr>
</tbody>
</table>
<h2>Explanation</h2>
<p>Conficker (aka Downadup, Kido) is known to block access to over 100 anti-virus and security websites.</p>
<p>If you are blocked from loading the remote images in the first row of
the top table above (AV/security sites) but not blocked from loading
the remote images in the second row (websites of alternative operating
systems) then your Windows PC may be infected by Conficker (or some
other malicious software).</p>
<p>
If you can see all six images in both rows of the top table -- or at
least the top ones, as the bottom ones seem to be DDoSed at the time -- you are either not infected by Conficker, or you
may be using a proxy server, in which case you will not be able to use
this test to make an accurate determination, since Conficker will be
unable to block you from viewing the AV/security sites.</p>
<h2>Detecting Conficker on your network through a port scanner</h2>
<p><a class="external-link" href="http://www.net-security.org/secworld.php?id=7252">Net-Security suggests that</a>, to scan for Conficker, you can a command such as:</p>
<pre>&nbsp;nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns --script-args safe=1 [targetnetworks]</pre>
<h2>Credits<br /></h2>
<p class="discreet">F-Secure and the F-Secure Logo are trademarks of F-Secure Corporation.<br />SecureWorks and the SecureWorks Logo are registered trademarks of SecureWorks Inc.<br />Trend Micro and the T-Ball logo are trademarks or registered trademarks of Trend Micro Inc.
<br />The Conficker Eye Chart is a concept by <a href="http://www.joestewart.org/">Joe Stewart</a>.

This derivative work was set up to help Joe Stewart's efforts.<br /><a href="http://www.gnu.org/copyleft/">Copyleft</a> 2009.</p>
<p class="callout">If this machine survives the current hundreds-of-hits per second traffic storm,  consider <a class="external-link" href="http://www.gplhost.com/hosting-vps.html">GPLHost</a> for your next Web service venture (I'm using a 768 MB RAM VPS).&nbsp; And, for your next consulting need, <a class="external-link" href="../../../contact-info">consider me</a>.&nbsp; <a title="Spread this number" class="internal-link" href="resolveuid/a4910a2cbdf52f1292afce1674528dff">Back in the day</a>, I used <a class="external-link" href="http://wordpress.org/">WordPress</a>; today, I use <a class="external-link" href="http://www.plone.org/">Plone</a>.&nbsp; So far, I seem to know what I'm doing to serve big traffic, and I hope you'll let me do that for you too.</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>viruses</dc:subject>
    
    <dc:date>2009-04-10T00:44:10Z</dc:date>
    <dc:type>Article</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/amarok-2-a-story-of-disappointment">
    <title>Amarok 2: a story of disappointment -- with a solution for Fedora 11</title>
    <link>http://rudd-o.com/en/linux-and-free-software/amarok-2-a-story-of-disappointment</link>
    <description>Amarok 2 is regrettably worse than unusable (it actually causes data loss) for people coming from Amarok 1.  Worst part is, Fedora ships it as "stable" software since its tenth release.  Fortunately, I have built Amarok 1.4.10 for Fedora 11 -- and you can install it now.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/amarok-2-a-story-of-disappointment">Amarok 2: a story of disappointment -- with a solution for Fedora 11</a></small>.</p>

<p>I've finished upgrading my workstation to Fedora 11 beta.&nbsp; Since Fedora 10, Amarok 2 has been shipping in lieu of Amarok 1, but since the import tool in Amarok 2 was unusable, I had remained with Amarok 1 instead.&nbsp; This time around, I decided to take Amarok 2 (specifically, 2.0.2) for a spin. So, I diligently backed up my KDE config and application data for Amarok 1, and nuked it from the original places.</p>
<p>Before anybody accuses me of using a beta for this rant, bear in mind that the rest of the KDE 4 applications in this system are functioning correctly.&nbsp; Of course, if you want to skip the rant, <a title="The solution" href="#the-solution">click here for the solution</a>.</p>
<h2>The launch -- failure #1<br /></h2>
<p>I launched Amarok 2.</p>
<p>No cookie.&nbsp; It didn't even launch -- it ended with a SIGSEGV after an St9_bad_alloc C++ exception.&nbsp; What could be going on?</p>
<p>Turns out it was my security configuration.&nbsp; I have my system set up to never grant more than 1 GB of RAM to any application, using the ulimit command; and for good reason too, since Kopete every once in a while decides to run away with all system memory and freeze my machine.</p>
<p>But this only lets me ask the question: why would a music player need to allocate in excess of <strong>one gigabyte of RAM</strong> just to start up?&nbsp; I am appalled at this.&nbsp; It makes me want to go back to MS-DOS .OVL files as a memory management strategy.</p>
<p>Well, never mind, let's increase that to 2 GB and try again.&nbsp;</p>
<h2>The import -- failure #2</h2>
<p>This time around, Amarok launches, and presents me with a collection configuration screen.&nbsp; I check the folders I had checked in the old Amarok 1 configuration, then click <em>Import</em>.&nbsp; The importer appears -- I feed it my database information and I hit Next.&nbsp; It starts importing.&nbsp; This import function is vital to me, since my entire music collection habit and mobile music experience is powered by Amarok 1 statistics and other metadata like tags.</p>
<p>The importer takes 5 minutes to list all of my music, spitting quite a few TagLib errors on the console.&nbsp; And then... it just spins.&nbsp; It spins using 100% of one CPU core for twenty minutes.&nbsp; I am about to terminate Amarok 2... and then the Finish button on the importer lights up.&nbsp; I hit <em>Finish</em>.&nbsp; Remember, I'm now half an hour trying to get this junk to work, and so far <em>nothing</em>.</p>
<p>Now, like any regular person, I'd expect the importer to have succeeded.&nbsp; Surprise, surprise, the collection pane is <strong>empty</strong>.&nbsp; Not a single song has been imported!</p>
<h2>Drag and drop, Ogg edition -- failure #3<br /></h2>
<p>So, okay, maybe the statistics were imported but not the collection itself, which may need a rescan, right?</p>
<p>Let's move on to the file browser panel.&nbsp; In Amarok 1, I had a series of bookmarks pointing to commonly accessed directories.&nbsp; No such luck in Amarok 2!</p>
<p>That's okay, I know my way around my collection, so let's browse to an Ace of Base folder which contains several tracks I listen frequently.&nbsp; Let's drag the song Beautiful life.ogg to the playlist... wait... why isn't my favorite Ace of Base song showing up in the pane?</p>
<p>What?&nbsp; Only MP3 files are showing up!&nbsp; All the Ogg files are gone!</p>
<p>I launch Dolphin and browse to the folder and, sure enough, the Ogg files are there!&nbsp; Why would Amarok not show me my Ogg files?</p>
<p>OK so let's try and drag the file in question from Dolphin to Amarok's playlist... nice, the drop target shows a black bar where it's going to be inserted.&nbsp; Let's release the mouse button... <strong>nothing</strong>!&nbsp; Amarok plainly refuses to accept Ogg files dropped into it!</p>
<p>By now I'm furious.</p>
<p>OK, maybe at least Amarok will let me drop an MP3 file.&nbsp; So I try with Angel eyes.mp3.&nbsp; Sure enough, the black bar appears, and this time the file gets actually added...</p>
<h2>Metadata fail -- failure #4</h2>
<p>...only there's something funny about the playlist.&nbsp; It doesn't show me any info except for the file name.&nbsp; No album, no artist, no track, no number, no nothing!</p>
<p>I right-click the file and select the option to edit tags (which shows me a number of things, not just the tags).&nbsp; Whaddya know?&nbsp; Amarok thinks the file is zero bytes long and the only things that it shows correctly are:</p>
<ol><li>The path to the file</li><li>The number of plays that song has seen</li></ol>
<p>Aha.&nbsp; Well, will it play the song?&nbsp; Let's double-click it... and <em>bingo</em>, sound!</p>
<p>OK, so let's go fix the collection thing.&nbsp; Let's request a collection update.&nbsp; I do that... and boom, segfault again.&nbsp; Despite that taking place, there are several amarokcollectionscanner processes running amok on my system and slowing it down to a nearly unusable crawl.</p>
<p>So, in the words of a friend wise beyond his years, <strong>a la verga los pastores, se acabó la Navidad</strong>.&nbsp; killall -9 amarokcollectionscanner &amp;&amp; rpm -e amarok.</p>
<h2>The recap</h2>
<ol><li>Amarok 2 refuses to load when limited to less than one gigabyte of RAM.</li><li>The importer doesn't work.</li><li>You can't play Ogg files.</li><li>If you so much as sneeze, it dies and leaves mongrels that make your system unusable.</li></ol>
<p>Let me remind you, the Amarok developers have the audacity to call this the second bug fix release of the second version.</p>
<p>If I, a Linux developer with 12 years of experience who knows his way around UNIX like the back of his hand, can't get this ersatz "music player", with elementarily dumb oversights, mistakenly shipped by the Fedora release managers as stable software, what can a regular user who just wants to play music have in the way of hope?</p>
<p>Now I go to the IRC channel in Freenode where the Amarok developers dwell, and voice my complaints.&nbsp; They tell me to stop complaining and file bugs.&nbsp; What for?&nbsp; It isn't the first bug I have filed about Amarok, and bugs take <em>months or even years</em> to be sorted out.</p>
<p>This on top of a number of regressions I discovered months ago that I'm pretty sure aren't fixed yet:</p>
<ol><li>Playlist import didn't work.&nbsp; Especially if one of your playlists had a track entry that had been moved and is no longer in the collection.&nbsp; In fact, you cannot even put a song outside your collection in a playlist, since the database doesn't store paths but rather IDs from songs in the collection.&nbsp; So you had to manually fix all of your playlists in order to prevent data loss.&nbsp; Fortunately, I scripted this task so I did do it months ago in the good faith that I would be able to use Amarok 2 some day.<br /></li><li>Any statistics (ratings, labels, play counts, scores) for songs outside your collection is lost.&nbsp; Lost.&nbsp; If you have been listening to songs outside your collection folder, expect to say goodbye to all track metadata applied to these tracks.&nbsp; The reason it is lost is, again, because Amarok does who knows what with the imported statistics data that used to show (not anymore!&nbsp; so you can say this is a bug atop a bug!)&nbsp; on the playlist when a non-collection track was first added, but gets utterly reset when the non-collection track finishes playing.<br /></li><li>Intelligent playlists weren't imported either.&nbsp; If you were feeding your iPod using one of these, bye bye.</li><li>There is no way to mass-edit tag information right from the playlist, something I very much frequently did when using Amarok 1.<br /></li></ol>
<p><strong>Systemic failure</strong>.&nbsp; That's all I can say.&nbsp; A group of developers set out to write a music player that has less features than the old generation one, and has more bugs than an ant colony.&nbsp; Then they code code code without any meaningful testing.&nbsp; Then they ship it implying it is stable software under the banner of "we need more testers", but with no working migration path from the old version of the software, and double the hardware requirements.&nbsp; Good-willed people in charge of distributing good software get duped into shipping this bag of FAIL, updating perfectly-working software already-deployed into millions of users' workstations.&nbsp; And when the users complain, some people have the gall to say that we are rude.</p>
<p><em>Lenin would be proud.</em></p>
<p class="discreet">If you want to accuse me of being an ungrateful son of a bitch, can that accusation.&nbsp; Not only is my criticism valid in a world where you're validated by how good the results of your work is -- regardless of end-user price -- I have actually gone out of my way to provide a solution for you and help you avoid these disasters.&nbsp; Scroll down.</p>
<h2><a name="the-solution"></a>The solution</h2>
<p>Well, since I cannot live without Amarok 1, I decided to built it for Fedora 11.&nbsp; I had to patch a number of deficiencies in the Amarok 1 source code (namely, the use of obsolete libraries and C include practices) with patches I found around the globe for Gentoo and other distributions.&nbsp; It wasn't that hard, but it wasn't easy either.&nbsp; The RPM packages ready to install are on <a title="The missing RPMs" class="internal-link" href="resolveuid/920588c00c7f3e1193d732e18062f83c">The missing RPMs repository</a> (which I do not recommend you actually add to your Yum configuration if you're using Fedora 11) and you can get them here directly:</p>
<ol><li><a class="external-link" href="../../../new-projects/the-missing-rpms/browse/RPMS/x86_64/amarok-1.4.10-4.fc11.x86_64.rpm">Amarok 1.4.10 for Fedora 11 64 bits.</a></li><li><a class="external-link" href="../../../new-projects/the-missing-rpms/browse/SRPMS/amarok-1.4.10-4.fc11.src.rpm">Amarok 1.4.10 source package to rebuild for Fedora 11 or Fedora 10 (32 or 64 bits).</a><br /></li></ol>
<p>You install them by downloading them and then using the <code>rpm -Uvh --oldpackage</code> command, so this package actually replaces the newer Amarok package.&nbsp; After doing that, you're strongly encouraged to lock Amarok from being upgraded with yum by putting a line <code>exclude=amarok</code> in your <code>/etc/yum.conf</code> file.</p>
<p class="callout">Tip: if you use the <a class="external-link" href="http://labix.org/smart">Smart package manager</a>, you can install the package using point-and-click, and it will automatically erase the newer version for you, no need for funny commands or anything.&nbsp; After installing the package, lock the version of the newly installed Amarok package so it won't get upgraded in future upgrade cycles.</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Fedora</dc:subject>
    
    
        <dc:subject>KDE</dc:subject>
    
    
        <dc:subject>bugs</dc:subject>
    
    
        <dc:subject>Amarok</dc:subject>
    
    
        <dc:subject>rants</dc:subject>
    
    
        <dc:subject>bad software</dc:subject>
    
    
        <dc:subject>sucks!</dc:subject>
    
    <dc:date>2009-04-03T23:16:25Z</dc:date>
    <dc:type>Article</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/making-zope-and-plone-collaborate-with-google-analytics">
    <title>Making Zope and Plone collaborate with Google Analytics</title>
    <link>http://rudd-o.com/en/linux-and-free-software/making-zope-and-plone-collaborate-with-google-analytics</link>
    <description>Otherwise known as the slash-ended problem.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/making-zope-and-plone-collaborate-with-google-analytics">Making Zope and Plone collaborate with Google Analytics</a></small>.</p>

<p>In Apacheland, if you access a folder, Apache automatically redirects you to a new URL ending in a slash (/).&nbsp; Not so with Plone or Zope -- any resource can or cannot have a slash at the end, which is not nice for neither Web caches nor Google Analytics -- it groups content based on the slash, so the same resource linked twice, once with a slash and once without a slash, those are two separate pages.</p>
<h2>The fix<br /></h2>
<p>So, how do we fix this?&nbsp; We fix this with the following Varnish configuration stanza:</p>
<pre>sub vcl_recv {
    # Redirect slash-ended requests
    if (req.url != "/" &amp;&amp; req.url ~ "/$") {
            set req.http.New-Location = regsub(req.url,"/+$","");
            error 301 "Redirecting you to the non-slash representation...";
    }
}

sub vcl_error {
    if (req.http.New-Location) {
            set obj.http.Location = req.http.New-Location;
    }
}
</pre>
<p>That is it.&nbsp; The receive routine will detect the URL has a slash at the end, will rewrite the location into a temporary HTTP header, and throw an HTTP error 301.&nbsp; The error routine will detect the presence of this temporary header and use it to base the Location header for the HTTP error 301 (Moved Permanently) itself.</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Zope</dc:subject>
    
    
        <dc:subject>Varnish</dc:subject>
    
    
        <dc:subject>Web publishing</dc:subject>
    
    
        <dc:subject>Plone</dc:subject>
    
    <dc:date>2009-03-26T23:08:30Z</dc:date>
    <dc:type>Article</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/plone-documentation-center-failing-with-right_slots-or-name-not-defined-errors">
    <title>Plone Documentation Center failing with right_slots or 'name not defined' errors?</title>
    <link>http://rudd-o.com/en/linux-and-free-software/plone-documentation-center-failing-with-right_slots-or-name-not-defined-errors</link>
    <description>Plone Documentation Center has been having some issues with Plone 3.1 and above.  Here is the fix.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/plone-documentation-center-failing-with-right_slots-or-name-not-defined-errors">Plone Documentation Center failing with right_slots or 'name not defined' errors?</a></small>.</p>

<p>If your Plone Documentation Center 1.5 is barfing out when trying to see one of the sub-elements (manuals, FAQ, ...) with a traceback that mentions right_slots or "Name is not defined' (<a class="external-link" href="http://talk.quintagroup.com/forums/plone-seo/474668269">here are a few examples</a>), work around it with this:</p>
<ol><li>Open your Plone Doc Center</li><li>Manage it by tacking <code>/manage</code> to the end of the URL</li><li>Go to Properties</li><li>Add a string property with any content, named <code>right_slots</code></li></ol>
<p>That is it.</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Plone Documentation Center</dc:subject>
    
    
        <dc:subject>hacks</dc:subject>
    
    
        <dc:subject>Plone</dc:subject>
    
    
        <dc:subject>bugs</dc:subject>
    
    <dc:date>2009-03-20T14:41:49Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/kde-4.2-web-shortcuts-gg-not-working-in-krunner">
    <title>KDE 4.2, Web Shortcuts (gg:) not working in KRunner?</title>
    <link>http://rudd-o.com/en/linux-and-free-software/kde-4.2-web-shortcuts-gg-not-working-in-krunner</link>
    <description>I have the fix.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/kde-4.2-web-shortcuts-gg-not-working-in-krunner">KDE 4.2, Web Shortcuts (gg:) not working in KRunner?</a></small>.</p>

<p>Super easy.</p>
<ol><li>Open file <code>home/rudd-o/.kde/share/config/kuriikwsfilterrc</code> (replace <code>rudd-o</code> with your own user name).</li><li>Nuke its contents.</li><li>Save.</li><li>Kill KRunner.</li><li>Rerun KRunner from a terminal, or restart your desktop session.<br /></li></ol>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>KDE</dc:subject>
    
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>hacks</dc:subject>
    
    <dc:date>2009-03-18T11:24:22Z</dc:date>
    <dc:type>Article</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/new-plone-3.2.2-packages-released-as-rpms">
    <title>New Plone 3.2.2 packages released as RPMs</title>
    <link>http://rudd-o.com/en/linux-and-free-software/new-plone-3.2.2-packages-released-as-rpms</link>
    <description>The latest release of Plone just hit the shelves, and we're right on track delivering the RPM releases for your CentOS and Fedora.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/new-plone-3.2.2-packages-released-as-rpms">New Plone 3.2.2 packages released as RPMs</a></small>.</p>

<p><a title="The missing RPMs" class="internal-link" href="resolveuid/920588c00c7f3e1193d732e18062f83c">The missing RPMs</a> is proud to announce that <a class="external-link" href="http://plone.org/products/plone/releases/3.2.2">it now carries the latest stable Plone packages for your use</a>.&nbsp; They have been tested in CentOS 5.2 but they should work in any RPM-based distribution.&nbsp; So go there and have a field day installing Plone now!&nbsp; And don't forget to <a title="Key facts about this RPM release" class="internal-link" href="resolveuid/3ffb030ab862071dfee4bf5bbc7af23f">read the manual for a few details of this RPM-based release</a>.</p>
<h2>Engineering information</h2>
<ul><li>The scripts used to build the Plone RPMs are all in The missing RPM's <a class="external-link" href="http://yum.rudd-o.com/SCRIPTS/">Yum repository</a>.</li><li>The only Plone RPM that was rebuilt and updated with a patch from the upstream sources is the <code>plone.app.layout</code> package, which required a patch to make Google Sitemaps work with LinguaPlone.<br /></li></ul>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>RPM</dc:subject>
    
    
        <dc:subject>Plone</dc:subject>
    
    <dc:date>2009-03-13T02:05:53Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/qseoptimizer-and-plone-documentation-center-acting-up">
    <title>qSEOptimizer and Plone Documentation Center acting up?  Here is the fix.</title>
    <link>http://rudd-o.com/en/linux-and-free-software/qseoptimizer-and-plone-documentation-center-acting-up</link>
    <description>Those two Plone products seem to never get along.  Here's a hot fix for Plone 3.0.x users that will make the excellent qSEOptimizer by QuintaGroup work just fine along with Plone Documentation Center (PHC) and Plone Software Center (PSC).</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/qseoptimizer-and-plone-documentation-center-acting-up">qSEOptimizer and Plone Documentation Center acting up?  Here is the fix.</a></small>.</p>

<h2>The bug<br /></h2>
<p>You've installed qSEOptimizer (version 1.5.1 or version 1.6.0), and now every visitor to your Plone Documentation Center documents experiences an error.&nbsp; The details of the error are like this:</p>
<pre>Site Error
 
An error was encountered while publishing this resource.
 
AttributeError
Sorry, a site error occurred.
 
Traceback (innermost last):
 
    * Module ZPublisher.Publish, line 202, in publish_module_standard
    * Module ZPublisher.Publish, line 150, in publish
    * Module plone.app.linkintegrity.monkey, line 21, in zpublisher_exception_hook_wrapper
    * Module Zope2.App.startup, line 221, in zpublisher_exception_hook
    * Module ZPublisher.Publish, line 119, in publish
    * Module ZPublisher.mapply, line 88, in mapply
    * Module ZPublisher.Publish, line 42, in call_object
    * Module Shared.DC.Scripts.Bindings, line 313, in __call__
    * Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
    * Module Products.CMFCore.FSPageTemplate, line 216, in _exec
    * Module Products.CacheSetup.patch_cmf, line 48, in FSPT_pt_render
    * Module Products.CacheSetup.patch_cmf, line 120, in PT_pt_render
    * Module zope.tal.talinterpreter, line 271, in __call__
    * Module zope.tal.talinterpreter, line 346, in interpret
    * Module zope.tal.talinterpreter, line 891, in do_useMacro
    * Module zope.tal.talinterpreter, line 346, in interpret
    * Module zope.tal.talinterpreter, line 536, in do_optTag_tal
    * Module zope.tal.talinterpreter, line 521, in do_optTag
    * Module zope.tal.talinterpreter, line 516, in no_tag
    * Module zope.tal.talinterpreter, line 346, in interpret
    * Module zope.tal.talinterpreter, line 586, in do_setLocal_tal
    * Module zope.tales.tales, line 696, in evaluate
      URL: file:/opt/prod/zeocluster/parts/plone/CMFPlone/skins/plone_templates/main_template.pt
      Line 32, Column 4
<strong>      Expression: &lt;PythonExpr putils.listMetaTags(here).items()&gt;</strong>
      Names:
 
      {'container': &lt;PloneSite at /Plone&gt;,
       'context': &lt;ATDocument at /Plone/front-page&gt;,
       'default': &lt;object object at 0x7f69289ae200&gt;,
       'here': &lt;ATDocument at /Plone/front-page&gt;,
       'loop': {},
       'nothing': None,
       'options': {'args': ()},
       'repeat': &lt;Products.PageTemplates.Expressions.SafeMapping object at 0xc8acb00&gt;,
       'request': &lt;HTTPRequest, URL=http://www.onlinehr.co.nz/front-page/document_view&gt;,
       'root': &lt;Application at &gt;,
       'template': &lt;FSPageTemplate at /Plone/document_view used for /Plone/front-page&gt;,
       'traverse_subpath': [],
       'user': &lt;SpecialUser 'Anonymous User'&gt;}
 
    * Module Products.PageTemplates.ZRPythonExpr, line 49, in __call__
      __traceback_info__: putils.listMetaTags(here).items()
    * Module PythonExpr, line 1, in &lt;expression&gt;
    * Module Products.qSEOptimizer, line 79, in listMetaTags
    * Module Products.qSEOptimizer.adapters, line 23, in listKeywords
 
<strong>AttributeError: qSEO_Keywords</strong> (Also, the following error occurred while attempting to render the standard error message, please see the event log for full details: qSEO_Keywords)</pre>
<p>Do not despair.&nbsp; I've got your back.</p>
<h2>The hotfix<br /></h2>
<p>Kindly engineered with the help of jl_ at the <a class="external-link" href="http://plone.org/support/chat">Plone chat channel</a>.</p>
<ol><li>Locate the qSEOptimizer files on your server.</li><li>Find the file named adapters.py and open it into a text editor.</li><li>Find this text, around line 23:<br />
<pre>keywords = list(self.context.qSEO_Keywords())</pre>
</li><li>Nuke it.&nbsp; Replace it with:<br />
<pre>try: keywords = list(self.context.qSEO_Keywords())
except AttributeError: keywords = []</pre>
Remember to stay at the same indentation level.</li><li>That's it.&nbsp; Restart your Zope application server.</li></ol>
<p>Now, your qSEOptimizer should no longer bork out with horrible errors when people access your PHC documents.</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>Plone Documentation Center</dc:subject>
    
    
        <dc:subject>Plone Software Center</dc:subject>
    
    
        <dc:subject>bugs</dc:subject>
    
    
        <dc:subject>hacks</dc:subject>
    
    
        <dc:subject>Plone</dc:subject>
    
    
        <dc:subject>qSEOptimizer</dc:subject>
    
    <dc:date>2009-01-28T19:16:19Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/how-to-make-plone-3-not-log-you-off-when-you-close-your-browser">
    <title>How to make Plone 3 not log you off when you close your browser</title>
    <link>http://rudd-o.com/en/linux-and-free-software/how-to-make-plone-3-not-log-you-off-when-you-close-your-browser</link>
    <description>Plone is pretty secure by default.  Unfortunately, as an administrator, having to log in each time you restart your browser is extremely annoying.  Here's how to bypass that.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/how-to-make-plone-3-not-log-you-off-when-you-close-your-browser">How to make Plone 3 not log you off when you close your browser</a></small>.</p>

<h2>Step 1: patch or reconfigure Plone<br /></h2>
<h3>For plone 3.1.x users<br /></h3>
<p>The following patch should be applied by you to your Plone sources.&nbsp; Find your Plone's python library directory, and apply this patch to it:</p>
<pre>diff -urN lib/python/plone/session/plugins/session.py lib/python/plone/session/plugins/session.py
--- lib/python/plone/session/plugins/session.py 2009-01-28 12:55:40.000000000 -0500
+++ lib/python/plone/session/plugins/session.py 2009-01-28 12:57:36.000000000 -0500
@@ -7,6 +7,7 @@
 from AccessControl.SecurityInfo import ClassSecurityInfo
 from plone.session.interfaces import ISessionPlugin, ISessionSource
 import binascii
+import datetime,time

 try:
     from AccessControl.requestmethod import postonly
@@ -85,7 +86,9 @@
         cookie=self.source.createIdentifier(userid)
         cookie=binascii.b2a_base64(cookie).rstrip()

-        response.setCookie(self.cookie_name, cookie, path=self.path)
+        expires = datetime.datetime.now() + datetime.timedelta(365)
+        expires = time.strftime("%a, %d-%b-%Y %H:%M:%S GMT", expires.timetuple())
+        response.setCookie(self.cookie_name, cookie, path=self.path, expires=expires)


     # IExtractionPlugin implementation
</pre>
<p>Once this patch is applied, the login cookie that Plone sets is going to last for a year, or until you log off explicitly (whichever happens first).</p>
<h3>For plone 3.2.x users</h3>
<ol><li>Open your ZMI interface</li><li>In there, browse to your Plone site</li><li>Browse into <code>acl_users/session</code></li><li>Click on the Properties tab</li><li>Set the cookie lifetime in days to a number larger than 0.&nbsp; Only positive integers are accepted.<br /></li></ol>
<h2>Step 2: make Plone sessions last longer<br /></h2>
<p>However, this patch alone still won't keep you logged on -- your session with Plone will expire, by default, after thirty minutes of inactivity.&nbsp; To change that, locate your Plone instance's <code>etc/zope.conf</code> file, and open it in a text editor.&nbsp; Then look for the line that says <code># Directive: session-timeout-minutes</code>.&nbsp; You are going to add a new directive<code> session-timeout-minutes</code> like this:</p>
<pre>session-timeout-minutes 10080</pre>
<p>That makes Plone not expire its sessions in RAM for one week.&nbsp; Or until you restart the server.&nbsp; Your call.</p>
<p>And that's it!&nbsp; Now your users' sessions and yours will last for a week or until you log off.&nbsp; <em>Just remember to explicitly log off whenever you're using a shared computer!</em></p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>hacks</dc:subject>
    
    
        <dc:subject>session</dc:subject>
    
    
        <dc:subject>cookie</dc:subject>
    
    
        <dc:subject>login</dc:subject>
    
    
        <dc:subject>Plone</dc:subject>
    
    <dc:date>2009-03-12T23:15:45Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>


    <item rdf:about="http://rudd-o.com/en/linux-and-free-software/how-to-create-big-ass-empty-files-in-milliseconds">
    <title>How to create big-ass empty files in milliseconds</title>
    <link>http://rudd-o.com/en/linux-and-free-software/how-to-create-big-ass-empty-files-in-milliseconds</link>
    <description>A small trick that will help you when you need a file that is multi-gigabytes in size, but you don't have hours to wait for it to be written to disk.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
<p><small>This article was culled from <a href="http://rudd-o.com/en/linux-and-free-software/how-to-create-big-ass-empty-files-in-milliseconds">How to create big-ass empty files in milliseconds</a></small>.</p>

<pre>dd if=/dev/zero of=bigassfile bs=1M count=1 seek=9999
</pre>
<p>See what I did there?</p>
<p>This command, issued in a console, literally means: <em>Duplicate data from /dev/zero (a zero generator) into bigassfile.&nbsp; Do it in blocks of 1 mebibyte each, write only one block, but skip forward to 9999 blocks in the bigassfile.</em></p>
<p>So what does Linux do when it sees this?&nbsp; Pretty simple: it creates a <em>bigassfile</em> that is ten thousand megabytes in size, but only bothers to write the very last 1 mebibyte, leaving the first 9999 MiBs empty.&nbsp; <em>Since only one mebibyte is ever written to disk, it's nearly instantaneous</em>.&nbsp; When you list the file, it will show as having ten thousand mebybites, but if you use an on-disk size analyzer, the file will only occupy one mebibyte.&nbsp; As you write data to the file, Linux will use free disk space to supply the big-ass file with room to save the incoming data.</p>
<p>So, remember the trick: give a block size, ask the command to write only one block, and skip N - 1 blocks, where N is the size in blocks of the file you want.</p>
<p>There you go.</p>
<p class="discreet">Note that this trick does not work in Windows FAT16 or FAT32 filesystems.</p>
]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>RuddO</dc:creator>
    <dc:rights></dc:rights>
    
        <dc:subject>tips</dc:subject>
    
    
        <dc:subject>system administration</dc:subject>
    
    
        <dc:subject>Linux</dc:subject>
    
    <dc:date>2009-12-24T18:33:47Z</dc:date>
    <dc:type>Blog Entry</dc:type>
    </item>





</rdf:RDF>
