<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Rudd-O.com &#187; Tips</title>
	<atom:link href="http://rudd-o.com/archives/category/tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://rudd-o.com</link>
	<description>We only do fun stuff.</description>
	<pubDate>Thu, 04 Sep 2008 22:54:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>The history meme</title>
		<link>http://rudd-o.com/archives/2008/04/15/the-history-meme/</link>
		<comments>http://rudd-o.com/archives/2008/04/15/the-history-meme/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 19:14:16 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Tips]]></category>

		<category><![CDATA[Yo]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2008/04/15/the-history-meme/</guid>
		<description><![CDATA[Since it’s been around my corners of the Internets, I guess it’s time for me to post this meme as well:



rudd-o@karen: ~ $
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
76 cd
38 mv
36 svn
34 python
31 rm
30 ls
19 git
14 dpkg
14 aptitude
13 find

Please note: I have history set up so it [...]]]></description>
			<content:encoded><![CDATA[<p>Since it&#8217;s been around my corners of the Internets, I guess it&#8217;s time for me to post this meme as well:</p>

<p><span id="more-1897"></span></p>

<p><pre>rudd-o@karen: ~ $
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
76 cd
38 mv
36 svn
34 python
31 rm
30 ls
19 git
14 dpkg
14 aptitude
13 find</pre></p>

<p>Please note: I have history set up so it doesn&#8217;t record repeated commands.  So this count is a count of unique, different commands each.</p>

<p>Want the <code>graphwatch</code> version?  Here it is:</p>

<p><pre>cd 70 #################################################
      mv 36 #########################
  python 34 #######################
     svn 32 ######################
      rm 29 ####################
      ls 29 ####################
     git 16 ###########
    dpkg 14 #########
aptitude 14 #########
    nano 13 #########</pre></p>

<p>Here&#8217;s what I did to generate that graph:</p>

<ol>
<li><code>history &gt; x</code></li>
<li><code>graphwatch 'cat x | awk '\''{a[$2]++}END{for(i in a){print a[i] &#8221; &#8221; i}}&#8217;\&#8221; | sort -rn | head | awk &#8216;\&#8221; { print $2 &#8221; &#8221; $1 } &#8216;\&#8221;&#8217; &#8221; &#8220;</code></li>
</ol>

<p><code>graphwatch</code> is a nice Python script that takes a properly quoted shell pipeline that will be run through <code>bash</code> and a field separator (in this case, a sngle empty space).  My extra <code>awk</code> invocation there swaps the first and second fields so the first column is the label, and the second column is the value &#8212; <code>graphwatch</code> plots a nice set of proportional horizontal bars.</p>

<p>But that&#8217;s not it.  The command is run once every second, so if the contents of the file <code>x</code> (or the output of the supplied command) change, the graph is re-plotted.  Very nifty to watch tabular numeric output in graphical form, in real-time &#8212; imagine using it with iostat and you&#8217;ll get the idea.</p>

<p>Here&#8217;s the code.  I will release it as a proper package with enhancements (it&#8217;s a quick hack right now) later on:</p>

<p><pre>#!/usr/bin/env python</pre></p>

<p>from time import sleep
from subprocess import PIPE,Popen
from sys import argv,exit,stdout
import os</p>

<p>try:
    cmd = argv[1]
    sep = argv[2]
except IndexError, e:
    print "usage: graphwatch 'shell pipeline' 'separator'"
    exit(os.EX_USAGE)
print "Running this command in a shell:"
print "&gt;", cmd</p>

<p>def getstdout(cmdline):
    p = Popen(["bash","-c",cmdline],stdout=PIPE)
    output = p.communicate()[0]
    if p.returncode != 0: raise Exception, "Command %s return code %s"%(cmdline,p.returncode)
    return output</p>

<p>try:
    while True:</p>

<pre><code>    output = getstdout(cmd).strip()
    stdout.write(getstdout("clear"))

    labels = []
    values = []
    for l in output.splitlines():
        try:
            label,value= l.strip().split(sep,1)
            label,value = label.strip(),value.strip()
        except ValueError, e: label,value = None,l.strip()
        labels.append(label)
        try: values.append(float(value))
        except ValueError, e: values.append(0.0)

    try:
        maximum_value = max(values + [maximum_value] )
    except NameError, e:
        maximum_value = max(values)

    try:
        longest_label = max( [len(l) for l in labels if l is not None ] )
        label_fmt = "%" + str(longest_label) + "s"
    except ValueError, e:
        longest_label = -1 # to compensate for the extra -2 below
        pass # nothing will happen later

    longest_number = max( [ len(str(int(i))) for i in values if type(i) is float ] )
    number_fmt = "%" + str(longest_number) + ".0f"

    column_width = 61
    leftover_for_plot = column_width - longest_label - longest_number - 2


    for value,label in zip(values,labels):
        if label is not None:
            print label_fmt%label,
        print number_fmt%value,
        print "#"*int(value/maximum_value*leftover_for_plot)

    sleep(1)
</code></pre>

<p>except KeyboardInterrupt, e:
    exit(0)</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2008/04/15/the-history-meme/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Monitoring Dirvish backup servers using Nagios</title>
		<link>http://rudd-o.com/archives/2008/02/01/monitoring-dirvish-backup-servers-using-nagios/</link>
		<comments>http://rudd-o.com/archives/2008/02/01/monitoring-dirvish-backup-servers-using-nagios/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 08:23:02 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Cool]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Server management]]></category>

		<category><![CDATA[Software bacán]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2008/02/01/monitoring-dirvish-backup-servers-using-nagios/</guid>
		<description><![CDATA[Dirvish is an excellent disk-based rotating backup application.  Nagios is a fabulous service monitor.  Combine the two using this Nagios plugin and you will know, at all times, the status of your latest backup run:



The script

Stash it in /usr/lib/nagios/plugins of the Dirvish backup machine, naming it check_dirvish.  This script assumes that your [...]]]></description>
			<content:encoded><![CDATA[<p>Dirvish is an excellent disk-based rotating backup application.  Nagios is a fabulous service monitor.  Combine the two using this Nagios plugin and you will know, at all times, the status of your latest backup run:</p>

<p><span id="more-1877"></span></p>

<h2>The script</h2>

<p>Stash it in <code>/usr/lib/nagios/plugins</code> of the Dirvish backup machine, naming it <code>check_dirvish</code>.  This script assumes that your Dirvish vaults are in <code>/mnt/backup</code>, so tune it if that isn&#8217;t true in your case:</p>

<p><pre>#!/bin/bash</pre></p>

<p>for a in /mnt/backup/* ; do
        if [ -f <code>ls -d "$a/"* 2&amp;gt; /dev/null | grep -v /dirvish | sort -g | tail -1</code>/rsync_error ] ; then
                echo "CRITICAL: latest backup in vault $a failed"
                exit 2
        else
                /bin/true
        fi
done
echo "OK: All backups OK"</p>

<h2>The security setup</h2>

<p>Create a <code>nagios</code> user on your Dirvish backup machine, and set up SSH passwordless authentication.</p>

<p>Now, if your Dirvish vaults are accessible only to root, set up <code>sudo</code> to allow Nagios to run this script as root:</p>

<p><pre>nagios ALL = NOPASSWD: /usr/lib/nagios/plugins/check_dirvish</pre></p>

<h2>The Nagios setup</h2>

<p>Finally, set Nagios up:</p>

<p><pre>define command{
        command_name    ssh_dirvish_sudo
        command_line    /usr/lib/nagios/plugins/check_by_ssh -t 29 -H $HOSTADDRESS$ -C 'sudo /usr/lib/nagios/plugins/check_dirvish'
        }
define service{
        use                             generic-service
        host_name                       gabriela
        service_description             Backups
        check_command                   ssh_dirvish_sudo
        }</pre></p>

<p>Of course, the <code>sudo</code> call is only needed if the Dirvish vaults are restricted for the <code>nagios</code> user.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2008/02/01/monitoring-dirvish-backup-servers-using-nagios/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The latest PulseAudio on Ubuntu</title>
		<link>http://rudd-o.com/archives/2008/01/05/the-latest-pulseaudio-on-ubuntu/</link>
		<comments>http://rudd-o.com/archives/2008/01/05/the-latest-pulseaudio-on-ubuntu/#comments</comments>
		<pubDate>Sat, 05 Jan 2008 16:56:40 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Software bacán]]></category>

		<category><![CDATA[Tips]]></category>

		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2008/01/05/the-latest-pulseaudio-on-ubuntu/</guid>
		<description><![CDATA[If you want to install the latest and greatest PulseAudio (now on version 0.9.8) on Ubuntu — a worthwhile thing to do, because of the fixes in the latest version — here are some packages you can use.



These packages are built from the source code of the next release of Ubuntu, Hardy.  They work [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to install the latest and greatest <a href="http://pulseaudio.org/">PulseAudio</a> (now on version 0.9.8) on Ubuntu — a worthwhile thing to do, because of the fixes in the latest version — here are some packages you can use.</p>

<p><span id="more-1851"/></p>

<p>These packages are built from the source code of the next release of Ubuntu, Hardy.  They work flawlessly on my home machines (yes, plural).  I built these packages myself for my usage:</p>

<ul>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/libpulse-browse0_0.9.8-1ubuntu3_i386.deb">libpulse-browse0_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/libpulse-mainloop-glib0_0.9.8-1ubuntu3_i386.deb">libpulse-mainloop-glib0_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/libpulse0_0.9.8-1ubuntu3_i386.deb">libpulse0_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/libpulsecore5_0.9.8-1ubuntu3_i386.deb">libpulsecore5_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/pulseaudio-esound-compat_0.9.8-1ubuntu3_i386.deb">pulseaudio-esound-compat_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/pulseaudio-module-gconf_0.9.8-1ubuntu3_i386.deb">pulseaudio-module-gconf_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/pulseaudio-module-hal_0.9.8-1ubuntu3_i386.deb">pulseaudio-module-hal_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/pulseaudio-module-lirc_0.9.8-1ubuntu3_i386.deb">pulseaudio-module-lirc_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/pulseaudio-module-x11_0.9.8-1ubuntu3_i386.deb">pulseaudio-module-x11_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/pulseaudio-module-zeroconf_0.9.8-1ubuntu3_i386.deb">pulseaudio-module-zeroconf_0.9.8-1ubuntu3_i386.deb</a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/pulseaudio-utils_0.9.8-1ubuntu3_i386.deb ">pulseaudio-utils_0.9.8-1ubuntu3_i386.deb </a></li>
<li><a href="http://rudd-o.com/wp-content/uploads/pulseaudio-0.9.8/pulseaudio_0.9.8-1ubuntu3_i386.deb">pulseaudio_0.9.8-1ubuntu3_i386.deb</a></li>
</ul>

<p>Download them all in a folder, then just open a terminal window there and type:</p>

<p><pre>sudo dpkg -i *deb</pre></p>

<p>That should upgrade you to the latest PulseAudio.  I was gonna write a tutorial, but then you would have had to download hundreds of megabytes of development packages.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2008/01/05/the-latest-pulseaudio-on-ubuntu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Upgrade from Ubuntu Feisty to Gutsy: the one-liner version</title>
		<link>http://rudd-o.com/archives/2007/11/02/upgrade-from-ubuntu-feisty-to-gutsy-the-one-liner-version/</link>
		<comments>http://rudd-o.com/archives/2007/11/02/upgrade-from-ubuntu-feisty-to-gutsy-the-one-liner-version/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 13:42:35 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Tips]]></category>

		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/11/02/upgrade-from-ubuntu-feisty-to-gutsy-the-one-liner-version/</guid>
		<description><![CDATA[Here’s the one-liner version of the Feisty (7.04) to Gutsy (7.10) upgrade (in case the distribution upgrade tool fails — it failed in my computer=.  Copy and paste this on an open console window, and you’re very probably set:



sudo sed -i 's/feisty/gutsy/g' /etc/apt/sources.list &amp;&amp; sudo apt-get update &amp;&amp; sudo apt-get dist-upgrade

If at some point [...]]]></description>
			<content:encoded><![CDATA[<p>Here’s the one-liner version of the Feisty (7.04) to Gutsy (7.10) upgrade (in case the distribution upgrade tool fails — it failed in my computer=.  Copy and paste this on an open console window, and you’re very probably set:</p>

<p><span id="more-1798"/></p>

<p><pre>sudo sed -i 's/feisty/gutsy/g' /etc/apt/sources.list &amp;&amp; sudo apt-get update &amp;&amp; sudo apt-get dist-upgrade</pre></p>

<p>If at some point any of those processes fail, you will be returned back to the console.  <code>dist-upgrade</code> will require your confirmation, so don’t just take off before the confirmation question.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/11/02/upgrade-from-ubuntu-feisty-to-gutsy-the-one-liner-version/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Six things to demand from your Internet Service Provider</title>
		<link>http://rudd-o.com/archives/2007/10/31/how-to-choose-a-good-internet-service-provider-what-criteria-really-matter/</link>
		<comments>http://rudd-o.com/archives/2007/10/31/how-to-choose-a-good-internet-service-provider-what-criteria-really-matter/#comments</comments>
		<pubDate>Thu, 01 Nov 2007 00:36:49 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Ethics]]></category>

		<category><![CDATA[ISPs]]></category>

		<category><![CDATA[Personal freedoms]]></category>

		<category><![CDATA[Politics]]></category>

		<category><![CDATA[Privacy]]></category>

		<category><![CDATA[Tips]]></category>

		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/10/31/how-to-choose-a-good-internet-service-provider-what-criteria-really-matter/</guid>
		<description><![CDATA[In the world of Internet service advertising, we’re perpetually bombarded with ads that, above all, extol the “virtues of a faster Internet experience”.  Don’t fall into the trap — here are six aspects you should evaluate beyond the “numbers” in your current or future Internet contract:




    Real speed
    [...]]]></description>
			<content:encoded><![CDATA[<p>In the world of Internet service advertising, we’re perpetually bombarded with ads that, above all, extol the “virtues of a faster Internet experience”.  Don’t fall into the trap — here are six aspects you should evaluate beyond the “numbers” in your current or future Internet contract:</p>

<p><span id="more-1794"/></p>

<ul>
    <li>Real speed</li>
    <li>Guaranteed bandwidth</li>
    <li>Unfiltered, unthrottled service</li>
    <li>Reliability and quality of service</li>
    <li>Access from the outside world</li>
    <li>Privacy, neutrality and censorship</li>
</ul>

<p>Each and every one of these aspects can make or break the honeymoon with your ISP.  Each matter independently, and once you’ve done a little research on what your ISP of choice is doing to grant (or deny) them to you, you’ll be in a position to make a much more informed decision.</p>

<h2>Bandwidth is <em>not</em> speed.  <em>Latency</em> is.</h2>

<p>If you are anything like the next person, by now you’ve been led to believe that your Internet experience is determined by bandwidth.  That’s bullshit. Bandwidth is hoy many bytes you can download per second — and nothing more.</p>

<p>Anything above 500 kbits per second guarantees enough speed to make Web surfing snappy — <strong>if, and only if, the latency of your connection is low enough</strong>.   Becaus, you see, <a href="http://rescomp.stanford.edu/~cheshire/rants/Latency.html">latency is key</a> — it’s the time your computer takes to initially communications with Web (or other types of Internet) servers.</p>

<h3>What happens when you click on a link</h3>

<p>After you click on a hyperlink, your Web browser (more or less) goes through the following steps:</p>

<ol>
    <li>It connects your computer to a Web server and requests a Web page.</li>
    <li>It receives the response, starts processing it and (in parallel) starts other requests — to get the images, videos, styles and scripts that actually form the page.  But only four of those at a time.</li>
</ol>

<p>If each of those steps can be started in, say, 50 milliseconds, you’re golden — the page more or less snaps in front of your eyes.  But if they take over a second each… well, let’s say you have a problem because, for the average Web page, you will never see it settle down before ten or so seconds since your last click.</p>

<h3>What happens when you play games over the Internet</h3>

<p>Let’s imagine for a moment that you’re playing Unreal Tournament, or any other fast-paced first person shooter kinda game.  Just blink once — boom, you’re dead.  That’s how long it takes for someone to shoot your neck and rip your head off.</p>

<p>A blink of an eye is, literally, 25 milliseconds.  Not a problem for wireless or wired local networks — because the bullets traveling through the network take less than two milliseconds to get eaten by your enemies.  But if you’re gaming through an Internet connection and your enemy is sitting just 200 milliseconds “away”, you’re going to have real trouble making any kills.</p>

<p>Sure, modern games incorporate mechanisms that attempt to compensate for that latency problem.  But they only go so far.</p>

<h3>What determines latency</h3>

<p>Latency is determined by two factors:</p>

<ol>
    <li>The physical distance of the route that information takes through the Internet.  Not a really big hurdle, since information travels at a rather close factor to the speed of light.</li>
    <li>The time each “hop” (Internet router) takes to process and forward that information to the next hop.</li>
</ol>

<p>You can verify this yourself.  Open a command line (<code>cmd.exe</code> on Windows, <code>konsole</code> or <code>gnome-terminal</code> on Linux) and type (on Windows) <code>tracert google.com</code> (on Linux, substitute <code>tracert</code> for <code>traceroute</code>).  You’ll see a table grow: each row is a hop, and the three columns on the right side are the times, in milliseconds, that information took to reach that hop.  The last row will contain the final destination’s latency measurement.  You can substitute <code>google.com</code> for your favorite Web site’s address or your gaming friend’s IP address.</p>

<p>So latency is key — now you know that.  Next up: how much bandwidth you’re really getting?</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/10/31/how-to-choose-a-good-internet-service-provider-what-criteria-really-matter/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Solving choppy sound and audio stutter in VMware</title>
		<link>http://rudd-o.com/archives/2007/10/20/solving-choppy-sound-and-audio-stutter-in-vmware/</link>
		<comments>http://rudd-o.com/archives/2007/10/20/solving-choppy-sound-and-audio-stutter-in-vmware/#comments</comments>
		<pubDate>Sat, 20 Oct 2007 13:58:24 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[MP3/música]]></category>

		<category><![CDATA[Tips]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/10/20/solving-choppy-sound-and-audio-stutter-in-vmware/</guid>
		<description><![CDATA[VMware (Workstation or Player) under Linux tends to stutter and produce choppy audio when running a Windows XP virtual machine.  Here’s what I did to kill those problems (yes, I can even use Steinberg Nuendo now!):




    Open the VMware .vmx / .cfg file of your VM.

    Find the [...]]]></description>
			<content:encoded><![CDATA[<p>VMware (Workstation or Player) under Linux tends to stutter and produce choppy audio when running a Windows XP virtual machine.  Here’s what I did to kill those problems (yes, I can even use Steinberg Nuendo now!):</p>

<p><span id="more-1774"/></p>

<ol>
    <li>Open the VMware <code>.vmx</code> / <code>.cfg</code> file of your VM.
<ol>
    <li>Find the config entries labeled <code>sound.</code>  Kill them all.</li>
    <li>Put the following instead:
<pre>sound.present = "TRUE"
sound.autodetect = "TRUE"
sound.fileName = "-1"
sound.directSound = "false"
sound.highPriority = "TRUE"
sound.maxLength = 2048
sound.smallBlockSize = 1024</pre>
</li>
</ol>
</li>
    <li>If you are using Steinberg Nuendo in your VM:
<ol>
    <li>Go to Devices -&gt; Device configuration…</li>
    <li>Select VST Multitrack on the left panel.</li>
    <li>Change the ASIO controller to ASIO DirectX Full Duplex</li>
</ol>
</li>
</ol>

<p>Let’s hope this works for you as well as it worked for me.  Here’s the obligatory screenshot:</p>

<p align="center"> <a href="http://rudd-o.com/archives/2007/10/20/solving-choppy-sound-and-audio-stutter-in-vmware/windows-xp-on-vmware-on-linux-in-a-headless-machine-through-xrealvnc-displayed-through-krdc/" rel="attachment wp-att-1776" title="Windows XP on VMware on Linux in a headless machine through Xrealvnc displayed through KRDC"><img src="http://rudd-o.com/wp-content/uploads/2007/10/windows-xp-on-vmware-on-linux-in-a-headless-machine-through-xrealvnc-displayed-through-krdc.thumbnail.jpg" alt="Windows XP on VMware on Linux in a headless machine through Xrealvnc displayed through KRDC"/></a></p>

<p align="left">See that?  It’s Steinberg Nuendo performing a mix down under Windows XP, running under a VMware machine in a headless Linux computer, displaying to a virtual Xrealvnc screen, displayed on my desktop computer using KRDC (my favorite VNC client). KRDC is set to resize the desktop — that’s why Windows looks a bit blurry. For kicks, XMMS is playing the mix down as it’s being generated, from a shared folder in the Windows virtual machine.</p>

<p align="left">Refer to <a href="http://rudd-o.com/archives/2007/10/19/the-ultimate-linux-audio-hack/" title="The ultimate Linux audio hack">my previous “cluster computing” audio hack</a> to understand why I went to such lengths.</p>

<p align="left">It’s a 3-hour mix, so the mix down will take a while.  I’l just sit and chill.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/10/20/solving-choppy-sound-and-audio-stutter-in-vmware/feed/</wfw:commentRss>
		</item>
		<item>
		<title>25 guidelines to iPhone Web development</title>
		<link>http://rudd-o.com/archives/2007/10/01/25-guidelines-to-iphone-web-development/</link>
		<comments>http://rudd-o.com/archives/2007/10/01/25-guidelines-to-iphone-web-development/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 06:06:17 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Tips]]></category>

		<category><![CDATA[Web standards]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/10/01/25-guidelines-to-iphone-web-development/</guid>
		<description><![CDATA[The iPhone Web guidelines.  All the rage now.  Long, boring read.  To save you the trouble of actually reading it, I’ve checklisted the wheat and trimmed the chaff for you:




It’s Safari.
There’s no exposed filesystem anywhere.
Heed sanctioned Web development best practices.
In contrast to a PC, you may not have the full attention of [...]]]></description>
			<content:encoded><![CDATA[<p>The iPhone Web guidelines.  All the rage now.  Long, boring read.  To save you the trouble of actually reading it, I’ve checklisted the wheat and trimmed the chaff for you:</p>

<p><span id="more-1702"/></p>

<ul>
<li>It’s Safari.</li>
<li>There’s no exposed filesystem anywhere.</li>
<li>Heed sanctioned Web development best practices.</li>
<li>In contrast to a PC, you may not have the full attention of your users.</li>
<li>Build apps to provide quick, easy access to things user need.</li>
<li>iPhone is different.  People expect a different user experience.  People will benchmark your Web site against the included apps.</li>
<li>Make fast Web pages.  People may be browsing using EDGE networks.</li>
<li>Cookies are available.</li>
<li>No Flash.  No Java.</li>
<li>No scrollbars.  Finger gestures are to manipulate how the content is viewed (pan, zoom in/out).</li>
<li>The tap is equivalent to a mouse click.</li>
<li>Present your text in narrow columns to let the user avoid zooming in/out.</li>
<li>People fatfinger.  Design UI elements accordingly.</li>
<li>There are <em>pages compatible with iPhone</em>, <em>pages optimized for iPhone</em> and <em>iPhone Web applications</em>.</li>
<li>Shoehorn your content into single-purpose views.  You can redesign centering your site around that, or you can build iPhone Web applications (mimicking the iPhone UI) for each specific type of view.</li>
<li>iPhone applications should integrate with iPhone services.</li>
<li>Make it obvious how to use your content.</li>
<li>Minimize user input.</li>
<li>Remove decorative crap.</li>
<li>User-centric terminology.</li>
<li>Provide dynamic feedback.</li>
<li>Be consistent in your UI.</li>
<li>Aim for instant display in the responsiveness department.</li>
<li>Make your page/app resilient to network service interruptions.</li>
<li>Avoid absolute positioning.</li>
</ul>

<p>Here’s <a href="http://developer.apple.com/documentation/iPhone/Conceptual/iPhoneHIG/">the set of guidelines</a>.  And here’s a <a href="http://developer.apple.com/documentation/iPhone/Conceptual/iPhoneHIG/">set of metrics, layout guidelines and tips</a> which don’t work well as a summary.</p>

<p>My personal tip: you can, and should, use CSS to make your page work differently in Safari.  Do so; avoid falling in the trap of different markup for the iPhone.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/10/01/25-guidelines-to-iphone-web-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Do not open new browser windows, ever</title>
		<link>http://rudd-o.com/archives/2007/09/27/do-not-open-new-browser-windows-ever/</link>
		<comments>http://rudd-o.com/archives/2007/09/27/do-not-open-new-browser-windows-ever/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 15:12:29 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Tips]]></category>

		<category><![CDATA[Web authoring]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/09/27/do-not-open-new-browser-windows-ever/</guid>
		<description><![CDATA[When I was in college, I had a stubborn teacher who absolutely demanded that certain parts of our project (Web site / application) open in new windows.  I tried to explain to him why this was a big no-no.  He didn’t understand.



Maybe I was at a loss for words.  Maybe not.  [...]]]></description>
			<content:encoded><![CDATA[<p>When I was in college, I had a stubborn teacher who absolutely demanded that certain parts of our project (Web site / application) open in new windows.  I tried to explain to him why this was a big no-no.  He didn’t understand.</p>

<p><span id="more-1699"/></p>

<p>Maybe I was at a loss for words.  Maybe not.  But today I found the most amazing, concise and compelling explanation — I just couldn’t have said it better:</p>

<blockquote>Visitors want to have control over everything what happens in their browser. If they’d like to open a link in a new window they will. If they don’t want to, they won’t. If your links open in a new window you make the decision which is not your decision to make.</blockquote>

<p><a href="http://www.smashingmagazine.com/2007/09/27/10-usability-nightmares-you-should-be-aware-of/">Thanks to these guys for the explanation</a>.  I will burn it in my memory for future projects — there will never be a shortage of bozos attempting these shenanigans.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/09/27/do-not-open-new-browser-windows-ever/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Stupid is as stupid writes</title>
		<link>http://rudd-o.com/archives/2007/09/26/stupid-words/</link>
		<comments>http://rudd-o.com/archives/2007/09/26/stupid-words/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 14:58:54 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Tips]]></category>

		<category><![CDATA[Yo]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/09/26/stupid-words/</guid>
		<description><![CDATA[You know, it’s always freaked me out when people say the (invented?) word utilize.  I know they have mush for brains when they can’t muster the use word.  Now, I thought I was alone on this, but as it turns out, I’m not:



I could of course rant at length about style, but it’s [...]]]></description>
			<content:encoded><![CDATA[<p>You know, it’s always freaked me out when people say the (invented?) word <em>utilize</em>.  I know they have mush for brains when they can’t muster the <em>use</em> word.  Now, I thought I was alone on this, <a href="http://steve-yegge.blogspot.com/2007/09/ten-tips-for-slightly-less-awful-resume.html">but as it turns out, I’m not</a>:</p>

<p><span id="more-1694"/></p>

<blockquote>I could of course rant at length about style, but it’s pretty open-ended: people constantly find clever new ways to be unclever. So I will restrict my stylistic remarks to the use of the word “utilize”. “Utilize” has been scientifically demonstrated to be used only by stupid people, so if you use it you could easily be mistaken for one. A stupid person, that is, not a scientist. “Utilize” is one of the all-time classic Stupidity Indicators, right up there with saying “choo-choo-choo” out loud when you’re thinking. Ever notice how only stupid people make train noises when they’re thinking? “Oh gosh, lemme think, chsh chsh chsh… hmmm, choo choo choo…”I could of course rant at length about style, but it’s pretty open-ended: people constantly find clever new ways to be unclever. So I will restrict my stylistic remarks to the use of the word “utilize”. “Utilize” has been scientifically demonstrated to be used only by stupid people, so if you use it you could easily be mistaken for one. A stupid person, that is, not a scientist. “Utilize” is one of the all-time classic Stupidity Indicators, right up there with saying “choo-choo-choo” out loud when you’re thinking. Ever notice how only stupid people make train noises when they’re thinking? “Oh gosh, lemme think, chsh chsh chsh… hmmm, choo choo choo…”</blockquote>

<p>The article’s got great tips for aspiring young people who want to <a href="http://steve-yegge.blogspot.com/2007/09/ten-tips-for-slightly-less-awful-resume.html">make their résumés look great</a> too!.  I wonder if the author will pick this post up and <a href="http://rudd-o.com/about-me/resume/resume-en/" title="In English">as a consequence, read my own résumé</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/09/26/stupid-words/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The shell challenge: changing another process&#8217; working directory</title>
		<link>http://rudd-o.com/archives/2007/09/06/the-shell-challenge-changing-another-process-working-directory/</link>
		<comments>http://rudd-o.com/archives/2007/09/06/the-shell-challenge-changing-another-process-working-directory/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 07:57:42 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Server management]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/09/06/the-shell-challenge-changing-another-process-working-directory/</guid>
		<description><![CDATA[Don’t you hate it when you leave a shell open and you can’t unmount a disk volume because the shell has a firm grip on a directory in that disk?  Well, there’s a solution.



Put this on a script, and run it with the offending process ID as the first argument, and the destination directory [...]]]></description>
			<content:encoded><![CDATA[<p>Don&#8217;t you hate it when you leave a shell open and you can&#8217;t unmount a disk volume because the shell has a firm grip on a directory in that disk?  Well, there&#8217;s a solution.</p>

<p><span id="more-1672"></span></p>

<p>Put this on a script, and run it with the offending process ID as the first argument, and the destination directory as the second one:</p>

<p><pre>#!/bin/bash</pre></p>

<p>pid="$1" # get the PID
cwd="$2" # first argument is the CWD, there is a quoting bug below but I really couldn't care less</p>

<h1>now let's command the GNU debugger</h1>

<p>gdb -q &gt;&gt; EOF
attach $pid
call (int) chdir("$cwd")
detach
quit
EOF</p>

<p><a href="http://mces.blogspot.com/2007/09/linux-shell-puzzle.html">Inspired by Behdad</a>.  Took me one minute to write it, two to <a href="http://sial.org/howto/debug/unix/lsof/">look up how it&#8217;s done</a>.  Thank <a href="http://www.google.com/">Google</a>.</p>

<p>Things to notice:</p>

<ol>
<li>Yes, there&#8217;s a quoting bug in the here-document fed to GDB.  I couldn&#8217;t care less; post the fix as a comment if you want to.</li>
<li><em>Caveat luser</em>: when you sweep the rug off of <code>bash</code>&#8217;s feet using this trick, the <code>bash</code> prompt will continue to have the <em>wrong</em> idea of the current directory, but every other command (not using the <code>$PWD</code> variable, of course) will operate correctly.</li>
<li>Processes holding files open on a volume to be mounted could conceivably get their files closed using GDB as well.  Trivial and left as an exercise for the reader.</li>
<li><code>bash</code> is my bitch, I rule, then you die.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/09/06/the-shell-challenge-changing-another-process-working-directory/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Three kinds of poor people</title>
		<link>http://rudd-o.com/archives/2007/06/14/three-kinds-of-poor-people/</link>
		<comments>http://rudd-o.com/archives/2007/06/14/three-kinds-of-poor-people/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 23:03:18 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Money]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/06/14/three-kinds-of-poor-people/</guid>
		<description><![CDATA[The Simple Dollar has fantastic advice for those of you who don’t want to die poor and in pain.  Like, for example, this sobering snippet:






People who actively chose to be poor. These people are those who chose not to live a competitive lifestyle. Just down the road from where I grew up lived a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thesimpledollar.com/">The Simple Dollar</a> has fantastic advice for those of you who don’t want to die poor and in pain.  Like, for example, this sobering snippet:</p>

<p><span id="more-1566"/></p>

<blockquote>

<p>
<strong>People who actively chose to be poor.</strong> These people are those who chose not to live a competitive lifestyle. Just down the road from where I grew up lived a person with a Ph.D. from Berkeley who basically checked out of mainstream life in the mid-’70s. He bought a small piece of land, built a log cabin out of the wood on that land, and spent all of his time fishing, hunting, and reading. He chose to be poor as a lifestyle choice. There were others like this as well who made their living quietly.
</p><p>
<strong>People who inactively chose to be poor.</strong> These people were the ones that played the lottery every week, followed celebrity gossip, and rambled on about how they were going to have big money someday, but just kept going to work in the same old factory doing the same old thing. They basically refuse to make choices that would raise them up from poverty for whatever reason. It is people from this group who you often see winning the lottery - then blowing it all in a few months.
</p><p>
<strong>People who choose to get out.</strong> The third group mostly is filled with younger people who see that this is a fool’s game and then try to get out of the situation. They do whatever it takes to go to college, get an education, and find work. What I often noticed is that these people managed to make the step to the upper middle class, but it was their children that did amazing things, as these people instilled some serious values in their kids and also gave them appropriate support.
</p>

</blockquote>

<p><a href="http://www.thesimpledollar.com/2007/01/11/why-income-inequality-matters-motivation/">Keep reading that article</a>, and then subscribe to The Simple Dollar.  Whether you subscribe to their ideas or not, at the least I can guarantee you a steady source of food for thought.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/06/14/three-kinds-of-poor-people/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Palm T&#124;X</title>
		<link>http://rudd-o.com/archives/2007/05/27/palm-tx/</link>
		<comments>http://rudd-o.com/archives/2007/05/27/palm-tx/#comments</comments>
		<pubDate>Sun, 27 May 2007 18:37:35 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Palm]]></category>

		<category><![CDATA[Sucks!]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/05/27/palm-tx/</guid>
		<description><![CDATA[Do not buy one.  Here’s why:




It resets out of the blue.  Even with no applications installed, the bundled VersaMail and Blazer Web browser tends to reset spontaneously.  Some VersaMail mail messages are undeletable (unless you manually nuke its databaes, in which case you need to reconfigure the app from zero again).
Blazer, the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Do not buy one</strong>.  Here’s why:</p>

<p><span id="more-1541"/></p>

<ul>
<li><strong>It resets out of the blue</strong>.  Even with no applications installed, the bundled VersaMail and Blazer Web browser tends to reset spontaneously.  Some VersaMail mail messages are undeletable (unless you manually nuke its databaes, in which case you need to reconfigure the app from zero again).</li>
<li>Blazer, the <strong>Web browser, is slow and bad</strong>.  It won’t load big Web pages either.</li>
<li>When an SD card is in the expansion slot, <strong>the Palm takes 8 seconds to power up</strong> (resume from standby).  Imagine wanting to take a quick note and having to wait <em>every time</em> you turn the device on.</li>
<li><strong>It’s slow and unresponsive</strong>.  Lots of applications block.  There are tons of corners in the little TX’s world where you can’t do anything but wait.</li>
<li><strong>Networking sucks</strong>.  It fails out of the blue, and when it fails, the device hangs until the application times out — no way to cancel network operations.</li>
<li><strong>It has extremely poor audio quality</strong>.  There’s a horrible hiss coming out of the headphone jack constantly.  If you want to listen to music, you better listen at max volume and brace yourself for hearing loss, because listening at low volumes is impossible given the hiss.</li>
<li>Every media player available for the Palm (even the bundled one) <em>rescans</em> the expansion card every time you launch it.  This means that you have to <strong>wait up to 15 seconds</strong> in order <strong>to select a song</strong> to play.</li>
<li><strong>Music on the go? Forget about it</strong>. Although Pocket Tunes can turn the screen off while listening to music, if you put your Palm T|X in your pocket, the 5-way navigation keys will be depressed constantly, randomly activating functions in your Palm and turning the screen on — effectively, it’s a music player with no Hold function.  The only workaround, an app (aptly) named Hold On, takes a while to launch, shows an annoying dialog box, and needs two extra taps on the screen in order to activate.  In effect, to put the Palm on hold, you need to start the app, wait 5 seconds, tap the screen twice, then hit the (hard to depress) Power button.  If I want to change a song, I have to hit the Power button again, tap the screen again, then hit the a hard key mapped to Pocket Tunes, and endure its interface, awkward to use with a thumb.  Compare to an iPod: <em>slide a slider, scroll a wheel</em>, and you’re done.</li>
<li>Did I say Power button?  My <strong>Power button is already damaged</strong>.</li>
<li><strong>Battery life: bad</strong>.  Don’t get me wrong, for a PDA, it’s quite good.  But for a music player… come on, if the CPU scaled back when listening to music, it’d last so much more!  I’m forced to use WarpSpeed to manually set the speed to 70 MHz when the Hold On app is active.</li>
<li><strong>Zero support</strong>.  The forums about Palm on the Web are helpful, but you ain’t getting to talk to Palm customer representatives that easily.  After extensive talk to reps, all they could suggest is that I erase everything from my Palm and see if problems continue to exist.</li>
</ul>

<p>For me, the Palm T|X was the hopeful answer to carrying both a PDA and an iPod in my already crowded pockets.  In reality, the Palm T|X has the potential to be everything you need, <em>if</em> you can hack the hardware to replace the poor DAC and amplifier, add an extra battery rucksack, and hack the software to work around all the limitations and bugs.</p>

<p>I suspect the LifeDrive is also plagued with the same issues (the Tungstens did have these issues, for the record).</p>

<p>Steer clear of Palm — they’re dead and I wish they were even deader.</p>

<p><ins datetime="2007-06-05T17:57:34+00:00">Update: the problem I experienced with my SD card is circumscribed to my SD card and only it.  Others don’t make the Palm T|X exhibit the issue.  However, there’s no guarantee that spending another $100 in a new 4GB SD card will solve the issue, so I’m stuck with it.  Sucks to be me, doesn’t it?</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/05/27/palm-tx/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Python packages failing to build (bdist_rpm) on Fedora 6?</title>
		<link>http://rudd-o.com/archives/2007/04/16/python-packages-failing-to-build-bdist_rpm-on-fedora-6/</link>
		<comments>http://rudd-o.com/archives/2007/04/16/python-packages-failing-to-build-bdist_rpm-on-fedora-6/#comments</comments>
		<pubDate>Mon, 16 Apr 2007 08:59:09 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Fedora]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Sucks!]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/04/16/python-packages-failing-to-build-bdist_rpm-on-fedora-6/</guid>
		<description><![CDATA[Then I’ve got the cure.



Most Python packages fail to build using the traditional python setup.py bdist_rpm process with an Installed (but unpackaged) files found error message, and a list with a bunch of .pyc and .pyo files.

If this is the problem, I know why it arises, and how to solve it.

Why?

First, let me assure you: [...]]]></description>
			<content:encoded><![CDATA[<p>Then I&#8217;ve got the cure.</p>

<p><span id="more-1381"></span></p>

<p>Most Python packages fail to build using the traditional <code>python setup.py bdist_rpm</code> process with an <em>Installed (but unpackaged) files found</em> error message, and a list with a bunch of <code>.pyc</code> and <code>.pyo</code> files.</p>

<p>If this is the problem, I know why it arises, and how to solve it.</p>

<h2>Why?</h2>

<p>First, let me assure you: you are not doing anything wrong.  It&#8217;s a Fedora 6 issue.</p>

<p>Because there&#8217;s a post-process script that Fedora runs named <code>/usr/lib/rpm/brp-python-bytecompile</code>.  This fucks up the RPM buid process because it compiles byte-optimized versions of the Python files to be installed.  Of course, <code>bdist_rpm</code> is not aware of this, so it can&#8217;t inform RPM that those files will also be added to the package.  What does this mean?  It means that RPM finds those files and says <q>Oh, damn, these files don&#8217;t belong here, I better bomb out</q>.</p>

<p>The script is a complete fuckup, and it contains at least two bugs.</p>

<h2>How I solved it</h2>

<p>I opened it in my favorite text editor, located these two lines:</p>

<p><pre># Generate normal (.pyc) byte-compiled files.
$python    -c 'import compileall; .... (something irrelevant)</pre></p>

<h1>Generate optimized (.pyo) byte-compiled files.</h1>

<p>$python -O -c 'import compileall; (something equally irrelevant)</p>

<p>and commented those two lines beginning with <code>$python</code>, like this:</p>

<p><pre># Generate normal (.pyc) byte-compiled files.
<strong>#</strong>$python    -c 'import compileall; .... (something irrelevant)</pre></p>

<h1>Generate optimized (.pyo) byte-compiled files.</h1>

<p><strong>#</strong>$python -O -c 'import compileall; (something equally irrelevant)</p>

<p>You should do so too.</p>

<p>And once Fedora 7 comes out, if this fuckup persists, you bet you&#8217;ll be able to do this again.</p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/04/16/python-packages-failing-to-build-bdist_rpm-on-fedora-6/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Have a blog or a Web site?  You better not do these things</title>
		<link>http://rudd-o.com/archives/2007/01/29/have-a-blog-or-a-web-site-you-better-not-do-these-things/</link>
		<comments>http://rudd-o.com/archives/2007/01/29/have-a-blog-or-a-web-site-you-better-not-do-these-things/#comments</comments>
		<pubDate>Mon, 29 Jan 2007 22:36:10 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Blogging]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/01/29/have-a-blog-or-a-web-site-you-better-not-do-these-things/</guid>
		<description><![CDATA[Guy Kawasaki writes an extremely insightful post about anathema behaviors for online publishers:



Here are his top ten no-no’s:

Enforced immediate registration.
The long URL.
Windows that don’t generate URLs.
The unsearchable web site.
Sites without Digg, del.icio.us, and Fark bookmarks.
Limiting contact to email.
Lack of feeds and email lists.
Requirement to re-type email addresses.
User names cannot contain the “@” character.
Case sensitive user [...]]]></description>
			<content:encoded><![CDATA[<p>Guy Kawasaki <a href="http://blog.guykawasaki.com/2007/01/the_top_ten_stu.html">writes an extremely insightful post</a> about anathema behaviors for online publishers:</p>

<p><span id="more-1352"/></p>

<p>Here are his top ten no-no’s:</p>

<ol><li><strong>Enforced immediate registration.</strong></li>
<li><strong>The long URL.</strong></li>
<li><strong>Windows that don’t generate URLs.</strong></li>
<li><strong>The unsearchable web site.</strong></li>
<li><strong>Sites without Digg, del.icio.us, and Fark bookmarks.</strong></li>
<li><strong>Limiting contact to email.</strong></li>
<li><strong>Lack of feeds and email lists.</strong></li>
<li><strong>Requirement to re-type email addresses.</strong></li>
<li><strong>User names cannot contain the “@” character.</strong></li>
<li><strong>Case sensitive user names and passwords.</strong></li>
<li><strong>Friction-full commenting.</strong></li>
<li><strong>Unreadable confirmation codes.</strong></li>
<li><strong>Emails without signatures.</strong></li>
<li><strong>Supporting only Windows Internet Explorer.</strong></li>
</ol>

<p>Yes, I know Kawasaki said 10 and delivered 14.  But he’s right, on all counts.  <a href="http://blog.guykawasaki.com/2007/01/the_top_ten_stu.html">Read his article</a> if you want to understand exactly why these things are bad for your readers and you.</p>

<p>And don’t just wave your hands and say “I don’t understand that much about tech to be fixin’ these things”: get the fark off your comfort zone and do whatever it takes to start learning how to fix what’s wrong.  Which is usually no more than a clever reading list of information that already exists on the Web.  <a href="http://justfuckinggoogleit.com/">Just fucking Google it</a>.<br />
</p>

<p>Oh, if you’re blogging, then you better pay attention to one more thing: <i>you need to link</i>.  I’ve always said so — it’s self evident — <a href="http://scobleizer.com/2007/01/28/do-a-list-bloggers-have-a-responsibility-to-link-to-others/">and now Scoble is voicing his support for linking as well</a>.  Oh, and linking to outside blog posts is a great way to gain pingback links, in case you didn’t know.<br />
</p>

<p />
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/01/29/have-a-blog-or-a-web-site-you-better-not-do-these-things/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CoComment: awesome!</title>
		<link>http://rudd-o.com/archives/2007/01/29/cocomment-awesome/</link>
		<comments>http://rudd-o.com/archives/2007/01/29/cocomment-awesome/#comments</comments>
		<pubDate>Mon, 29 Jan 2007 12:28:33 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Blogging]]></category>

		<category><![CDATA[Software bacán]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://rudd-o.com/archives/2007/01/29/cocomment-awesome/</guid>
		<description><![CDATA[Do you comment on blogs?  If you do, you’ll love CoComment.



Imagine a conversation.  A distributed one.  Someone posts in his blog.  You reply in the comments box of that blog.  A couple of people respond to your comment: some in the same page, and some directly in their blogs (seamlessly [...]]]></description>
			<content:encoded><![CDATA[<p>Do you comment on blogs?  If you do, you’ll love <a href="http://www.cocomment.com/">CoComment</a>.</p>

<p><span id="more-1349"/></p>

<p>Imagine a conversation.  A distributed one.  Someone posts in his blog.  You reply in the comments box of that blog.  A couple of people respond to your comment: some in the same page, and some directly in their blogs (seamlessly tied into the original page through pingbacks).
</p>

<p>How do you keep track of whoever responded to you afterwards?</p>

<p>If the answer to that question is <q>by checking the Web site I commented on every so often</q>, smack yourself in the head.</p>

<p>CoComment promises to do away with that.  It’s a new Web service that keeps track of the conversations you’ve engaged in blogs and news sites.</p>

<p>How does it work?  It’s practically like magic.  On CoComment-enabled Web sites and blogs, a small, unobtrusive CoComment status bar attaches to the comment form on the Web page.  Simply comment there, and CoComment will track that conversation.  You just log in to CoComment to see a nimble, expandable, AJAX-powered overview of your conversations:
</p>

<p style="text-align:center"><a class="imagelink" href="http://rudd-o.com/wp-content/uploads/2007/01/cocomment.jpg" title="CoComment conversations" rel="lightbox"><img id="image1350" src="http://rudd-o.com/wp-content/uploads/2007/01/cocomment.thumbnail.jpg" alt="CoComment conversations"/></a><br />
<i>You can clearly see the conversations you’re currently involved into.  These boxes expand as you click on them.</i>
</p>

<p>CoComment also works as a plugin in your browser.  If you have it installed, you can automatically track all of your conversations, even if the Web site doesn’t support CoComment.</p>

<p>Evidently, social features are featured throughout the site.  Just like <a href="http://last.fm/">last.fm</a>’s neighbour functionality, you automatically get commenting neighbors.  You can peek on others’ conversations, be them heated or cozy.  You can easily get hypnotized by the service.
</p>

<p><a href="http://www.cocomment.com/">Give it a spin</a>.  Registration’s free, and the service is a real time saver.  And, of course, it’s ideal for highly effective trolling. <img src="http://rudd-o.com/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley"/>  </p>
]]></content:encoded>
			<wfw:commentRss>http://rudd-o.com/archives/2007/01/29/cocomment-awesome/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
