<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

       <channel>
                <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2010</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>IPMI on CentOS/RHEL</title>                                   
                        <link>http://www.openfusion.net/linux/ipmi_on_centos.html</link>                                                                             
                        <description>&lt;p&gt;Spent a few days deep in the bowels of a couple of datacentres last week,
and realised I didn't know enough about Dell's DRAC base management 
controllers to use them properly. In particular, I didn't know how to 
mess with the drac settings from within the OS. So spent some of today
researching that. &lt;/p&gt;

&lt;p&gt;Turns out there are a couple of routes to do this. You can use the Dell
native tools (e.g. &lt;code&gt;racadm&lt;/code&gt;) included in Dell's 
&lt;a href="http://linux.dell.com/monitoring.shtml"&gt;OMSA product&lt;/a&gt;, or you can use
vendor-neutral &lt;a href="http://en.wikipedia.org/wiki/Intelligent_Platform_Management_Interface"&gt;IPMI&lt;/a&gt;,
which is well-supported by Dell DRACs. I went with the latter as it's 
more cross-platform, and the tools come native with CentOS, instead of
having to setup Dell's OMSA repositories. The Dell-native tools may give
you more functionality, but for what I wanted to do IPMI seems to work 
just fine.&lt;/p&gt;

&lt;p&gt;So installation is just:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;yum install OpenIPMI OpenIPMI-tools
chkconfig ipmi on
service ipmi start
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and then from the local machine you can use &lt;code&gt;ipmitool&lt;/code&gt; to access and 
manipulate all kinds of useful stuff:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# IPMI commands
ipmitool help
man ipmitool

# To check firmware version
ipmitool mc info
# To reset the management controller
ipmitool mc reset [ warm | cold ]

# Show field-replaceable-unit details
ipmitool fru print

# Show sensor output
ipmitool sdr list
ipmitool sdr type list
ipmitool sdr type Temperature
ipmitool sdr type Fan
ipmitool sdr type 'Power Supply'

# Chassis commands
ipmitool chassis status
ipmitool chassis identify [&amp;lt;interval&amp;gt;]   # turn on front panel identify light (default 15s)
ipmitool [chassis] power soft            # initiate a soft-shutdown via acpi
ipmitool [chassis] power cycle           # issue a hard power off, wait 1s, power on
ipmitool [chassis] power off             # issue a hard power off
ipmitool [chassis] power on              # issue a hard power on
ipmitool [chassis] power reset           # issue a hard reset

# Modify boot device for next reboot
ipmitool chassis bootdev pxe
ipmitool chassis bootdev cdrom
ipmitool chassis bootdev bios

# Logging
ipmitool sel info
ipmitool sel list
ipmitool sel elist                       # extended list (see manpage)
ipmitool sel clear
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For remote access, you need to setup user and network settings, either at boot time
on the DRAC card itself, or from the OS via &lt;code&gt;ipmitool&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Display/reset password for default root user (userid '2')
ipmitool user list 1
ipmitool user set password 2 &amp;lt;new_password&amp;gt;

# Display/configure lan settings
ipmitool lan print 1
ipmitool lan set 1 ipsrc [ static | dhcp ]
ipmitool lan set 1 ipaddr 192.168.1.101
ipmitool lan set 1 netmask 255.255.255.0
ipmitool lan set 1 defgw ipaddr 192.168.1.254
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once this is configured you should be able to connect using the 'lan' interface
to ipmitool, like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ipmitool -I lan -U root -H 192.168.1.101 chassis status
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;which will prompt you for your ipmi root password, or you can do the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;echo &amp;lt;new_password&amp;gt; &amp;gt; ~/.racpasswd
chmod 600 ~/.racpasswd
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and then use that password file instead of manually entering it each time:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ipmitool -I lan -U root -f ~/.racpasswd -H 192.168.1.101 chassis status
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I'm using an 'ipmi' alias that looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;alias ipmi='ipmitool -I lan -U root -f ~/.racpasswd -H'

# which then allows you to do the much shorter:
ipmi 192.168.1.101 chassis status
# OR
ipmi &amp;lt;hostname&amp;gt; chassis status
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Finally, if you configure serial console redirection in the bios as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Serial Communication -&amp;gt; Serial Communication:       On with Console Redirection via COM2
Serial Communication -&amp;gt; External Serial Connector:  COM2
Serial Communication -&amp;gt; Redirection After Boot:     Disabled
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;then you can setup standard serial access in grub.conf and inittab on &lt;code&gt;com2/ttyS1&lt;/code&gt;
and get serial console access via IPMI serial-over-lan using the 'lanplus' interface:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ipmitool -I lanplus -U root -f ~/.racpasswd -H 192.168.1.101 sol activate
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;which I typically use via a shell function:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# ipmi serial-over-lan function
isol() {
   if [ -n "&amp;#036;1" ]; then
       ipmitool -I lanplus -U root -f ~/.racpasswd -H &amp;#036;1 sol activate
   else
       echo "usage: sol &amp;lt;sol_ip&amp;gt;"
   fi
}

# used like:
isol 192.168.1.101
isol &amp;lt;hostname&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Further reading:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.cuddletech.com/blog/archives/archive_2008-m06.php"&gt;http://www.cuddletech.com/blog/archives/archive_2008-m06.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nikhef.nl/pub/projects/grid/gridwiki/index.php/Serial_Consoles"&gt;http://www.nikhef.nl/pub/projects/grid/gridwiki/index.php/Serial_Consoles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://openipmi.sourceforge.net/IPMI.pdf"&gt;http://openipmi.sourceforge.net/IPMI.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/ipmi_on_centos/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/ipmi_on_centos.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2010</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Mocking RPMs on CentOS</title>                                   
                        <link>http://www.openfusion.net/linux/mocking_rpms.html</link>                                                                             
                        <description>&lt;p&gt;&lt;a href="http://fedoraproject.org/wiki/Projects/Mock"&gt;Mock&lt;/a&gt; is a Fedora project that allows
you to build RPM packages within a chroot environment, allowing you to build
packages for other systems than the one you're running on (e.g. building CentOS 4
32-bit RPMs on a CentOS 5 64-bit host), and ensuring that all the required build
dependencies are specified correctly in the RPM spec file.&lt;/p&gt;

&lt;p&gt;It's also pretty under-documented, so these are my notes on things I've figured out
over the last week setting up a decent mock environment on CentOS 5.&lt;/p&gt;

&lt;p&gt;First, I'm using mock 1.0.2 from the EPEL repository, rather than older 0.6.13 
available from CentOS Extras. There are apparently backward-compatibility problems 
with versions of mock &gt; 0.6, but as I'm mostly building C5 packages I decided to go 
with the newer version. So installation is just:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Install mock and python-ctypes packages (the latter for better setarch support)
&amp;#036; sudo yum --enablerepo=epel install mock python-ctypes

# Add yourself to the 'mock' group that will have now been created
&amp;#036; sudo usermod -G mock gavin
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The mock package creates an &lt;code&gt;/etc/mock&lt;/code&gt; directory with configs for various OS 
versions (mostly Fedoras). The first thing you want to tweak there is the 
&lt;code&gt;site-defaults.cfg&lt;/code&gt; file which sets up various defaults for all your builds. Mine now 
looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# /etc/mock/site-defaults.cfg

# Set this to true if you've installed python-ctypes
config_opts['internal_setarch'] = True

# Turn off ccache since it was causing errors I haven't bothered debugging
config_opts['plugin_conf']['ccache_enable'] = False

# (Optional) Fake the build hostname to report
config_opts['use_host_resolv'] = False
config_opts['files']['etc/hosts'] = """
127.0.0.1 buildbox.openfusion.com.au nox.openfusion.com.au localhost
"""
config_opts['files']['etc/resolv.conf'] = """
nameserver 127.0.0.1
"""

# Setup various rpm macros to use 
config_opts['macros']['%packager'] = 'Gavin Carr &amp;lt;gavin@openfusion.com.au&amp;gt;'
config_opts['macros']['%debug_package'] = '%{nil}'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can use the &lt;code&gt;epel-5-{i386,x86_64}.cfg&lt;/code&gt; configs as-is if you like; I copied them 
to &lt;code&gt;centos-5-{i386,x86_64}.cfg&lt;/code&gt; versions and removed the epel 'extras', 'testing',
and 'local' repositories from the &lt;code&gt;yum.conf&lt;/code&gt; section, since I typically want to build 
using only 'core' and 'update' packages.&lt;/p&gt;

&lt;p&gt;You can then run a test by doing:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# e.g. initialise a centos-5-i386 chroot environment
&amp;#036; CONFIG=centos-5-i386
&amp;#036; mock -r &amp;#036;CONFIG --init
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;which will setup an initial chroot environment using the given config. If that
seemed to work (you weren't inundated with error messages), you can try a build:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Rebuild the given source RPM within the chroot environment
# usage: mock -r &amp;lt;mock_config&amp;gt; --rebuild /path/to/SRPM e.g.
&amp;#036; mock -r &amp;#036;CONFIG --rebuild ~/rpmbuild/SRPMS/clix-0.3.4-1.of.src.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If the build succeeds, it drops your packages into the &lt;code&gt;/var/lib/mock/&amp;#036;CONFIG/result&lt;/code&gt;
directory:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;#036; ls -1 /var/lib/mock/&amp;#036;CONFIG/result
build.log
clix-0.3.4-1.of.noarch.rpm
clix-0.3.4-1.of.src.rpm
root.log
state.log
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If it fails, you can check mock output, the &lt;code&gt;*.log&lt;/code&gt; files above for more info, and/or 
rerun mock with the &lt;code&gt;-v&lt;/code&gt; flag for more verbose messaging.&lt;/p&gt;

&lt;p&gt;A couple of final notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;the chroot environments are cached, but rebuilding them and checking for updates
can be pretty network intensive, so you might want to consider setting up a local
repository to pull from. &lt;a href="http://freshmeat.net/projects/mrepo"&gt;mrepo&lt;/a&gt; (available 
from rpmforge) is pretty good for that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;there don't seem to be any hooks in mock to allow you to sign packages you've
built, so if you do want signed packages you need to sign them afterwards via a
&lt;code&gt;rpm --resign &amp;#036;RPMS&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/mocking_rpms/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/mocking_rpms.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2010</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Backup Regimes with Brackup</title>                                   
                        <link>http://www.openfusion.net/net/monthly_brackups.html</link>                                                                             
                        <description>&lt;p&gt;After using &lt;a href="http://code.google.com/p/brackup/"&gt;brackup&lt;/a&gt; for a while you find
you have a big list of backups sitting on your server, and start to think 
about cleaning up some of the older ones. The standard brackup tool for this
is &lt;code&gt;brackup-target&lt;/code&gt;, and the &lt;code&gt;prune&lt;/code&gt; and &lt;code&gt;gc&lt;/code&gt; (garbage collection)
subcommands.&lt;/p&gt;

&lt;p&gt;Typical usage is something like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# List the backups for a particular target on the server e.g.
TARGET=myserver_images
brackup-target &amp;#036;TARGET list-backups
Backup File                      Backup Date                      Size (B)
-----------                      -----------                      --------
images-1262106544                Thu 31 Dec 2009 03:32:49          1263128
images-1260632447                Sun 13 Dec 2009 08:19:13          1168281
images-1250042378                Wed 25 Nov 2009 06:25:06           977464
images-1239323644                Mon 09 Nov 2009 00:30:34           846523
images-1239577352                Thu 29 Oct 2009 13:03:02           846523
...

# Decide how many backups you want to keep, and prune (delete) the rest
brackup-target --keep-backups 15 &amp;#036;TARGET prune

# Prune just removes the brackup files on the server, so now you need to
# run a garbage collect to delete any 'chunks' that are now orphaned
brackup-target --interactive &amp;#036;TARGET gc
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This simple scheme - "keep the last N backups" - works pretty nicely for 
backups you do relatively infrequently. If you do more frequent backups, 
however, you might find yourself wanting to be able to implement more 
sophisticated retention policies. Traditional backup regimes often involve 
policies like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep the last 2 weeks of daily backups&lt;/li&gt;
&lt;li&gt;keep the last 8 weekly backups&lt;/li&gt;
&lt;li&gt;keep monthly backups forever&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not necessarily obvious how to do something like this with brackup, but
it's actually pretty straightforward. The trick is to define multiple
'sources' in your brackup.conf, one for each backup 'level' you want to use.
For instance, to implement the regime above, you might define the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Daily backups
[SOURCE:images]
path = /data/images
...

# Weekly backups
[SOURCE:images-weekly]
path = /data/images
...

# Monthly backups
[SOURCE:images-monthly]
path = /data/images
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You'd then use the &lt;code&gt;images-monthly&lt;/code&gt; source once a month, the &lt;code&gt;images-weekly&lt;/code&gt;
source once a week, and the &lt;code&gt;images&lt;/code&gt; source the rest of the time. Your list
of backups would then look something like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Backup File                      Backup Date                      Size (B)
-----------                      -----------                      --------
images-1234567899                Sat 05 Dec 2009 03:32:49          1263128
images-1234567898                Fri 04 Dec 2009 03:19:13          1168281
images-1234567897                Thu 03 Dec 2009 03:19:13          1168281
images-1234567896                Wed 02 Dec 2009 03:19:13          1168281
images-monthly-1234567895        Tue 01 Dec 2009 03:19:13          1168281
images-1234567894                Mon 30 Nov 2009 03:19:13          1168281
images-weekly-1234567893         Sun 29 Nov 2009 03:19:13          1168281
images-1234567892                Sat 28 Nov 2009 03:25:06           977464
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And when you &lt;code&gt;prune&lt;/code&gt;, you want to specify a --source argument, and specify 
separate --keep-backups settings for each level e.g. for the above:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Keep 2 weeks worth of daily backups
brackup-target --source images --keep-backups 12 &amp;#036;TARGET prune

# Keep 8 weeks worth of weekly backups
brackup-target --source images-weekly --keep-backups 8 &amp;#036;TARGET prune

# Keep all monthly backups, so we don't prune them at all

# And then garbage collect as normal
brackup-target --interactive &amp;#036;TARGET gc
&lt;/code&gt;&lt;/pre&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/net/monthly_brackups/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/net/monthly_brackups.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2010</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Anycast DNS</title>                                   
                        <link>http://www.openfusion.net/linux/anycast_dns.html</link>                                                                             
                        <description>&lt;p&gt;(Okay, brand new year - must be time to get back on the blogging wagon ...)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.linuxjournal.com/"&gt;Linux Journal&lt;/a&gt; recently had a really good article
by Philip Martin on &lt;a href="http://m.linuxjournal.com/article/10376"&gt;Anycast DNS&lt;/a&gt;. It's
well worth a read - I just want to point it out and record a cutdown version of 
how I've been setting it up recently.&lt;/p&gt;

&lt;p&gt;As the super-quick intro, anycast is the idea of providing a network service
at multiple points in a network, and then routing requests to the 'nearest'
service provider for any particular client. There's a one-to-many relationship
between an ip address and the hosts that are providing services on that address.&lt;/p&gt;

&lt;p&gt;In the LJ article above, this means you provide a service on a /32 host address,
and then use a(n) (interior) dynamic routing protocol to advertise that address
to your internal routers. If you're a non-cisco linux shop, that means using 
quagga/ospf.&lt;/p&gt;

&lt;p&gt;The classic anycast service is dns, since it's stateless and benefits from the
high availability and low latency benefits of a distributed anycast service.&lt;/p&gt;

&lt;p&gt;So here's my quick-and-dirty notes on setting up an anycast dns server on 
CentOS/RHEL using &lt;code&gt;dnsmasq&lt;/code&gt; for dns, and quagga &lt;code&gt;zebra/ospfd&lt;/code&gt; for the routing.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;First, setup your anycast ip address (e.g. 192.168.255.1/32) on a random 
virtual loopback interface e.g. lo:0. On CentOS/RHEL, this means you want
to setup a &lt;code&gt;/etc/sysconfig/network-scripts/ifcfg-lo:0&lt;/code&gt; file containing:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;
 DEVICE=lo:0
 IPADDR=192.168.255.1
 NETMASK=255.255.255.255
 ONBOOT=yes
 &lt;/pre&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setup your dns server to listen to (at least) your anycast dns interface.
With dnsmasq, I use an &lt;code&gt;/etc/dnsmasq.conf&lt;/code&gt; config like:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;
 interface=lo:0
 domain=example.com
 local=/example.com/
 resolv.conf=/etc/resolv.conf.upstream
 expand-hosts
 domain-needed
 bogus-priv 
 &lt;/pre&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use quagga's &lt;code&gt;zebra/ospfd&lt;/code&gt; to advertise this host address to your internal
routers. I use a completely vanilla &lt;code&gt;zebra.conf&lt;/code&gt;, and an &lt;code&gt;/etc/quagga/ospfd.conf&lt;/code&gt; 
config like:&lt;/p&gt;

&lt;p&gt;&lt;pre&gt;
 hostname myhost
 password mypassword
 log syslog
 !
 router ospf
   ! Local segments (adjust for your network config and ospf areas)
   network 192.168.1.0/24 area 0
   ! Anycast address redistribution
   redistribute connected metric-type 1
   distribute-list ANYCAST out connected
!
access-list ANYCAST permit 192.168.255.1/32
 &lt;/pre&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. Now (as root) start everything up:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ifup lo:0
for s in dnsmasq zebra ospfd; do
  service &amp;#036;s start
  chkconfig &amp;#036;s on
done
tail -50f /var/log/messages
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And then check on your router that the anycast dns address is getting advertised 
and picked up by your router. If you're using cisco, you're probably know how to
do that; if you're using linux and quagga, the useful &lt;code&gt;vtysh&lt;/code&gt; commands are:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;show ip ospf interface &amp;lt;interface&amp;gt;
show ip ospf neighbor 
show ip ospf database
show ip ospf route
show ip route
&lt;/code&gt;&lt;/pre&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/anycast_dns/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/anycast_dns.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Skype 2.1 on CentOS 5</title>                                   
                        <link>http://www.openfusion.net/linux/skype_2.1_on_centos5.html</link>                                                                             
                        <description>&lt;p&gt;The new &lt;a href="http://www.skype.com/go/getskype-linux-beta-static"&gt;skype 2.1 beta&lt;/a&gt; 
(woohoo - Linux users are now only 2.0 versions behind Windows, way to go Skype!) 
doesn't come with a CentOS rpm, unlike earlier versions. And the Fedora packages 
that are available are for FC9 and FC10, which are too recent to work on a stock 
RHEL/CentOS 5 system.&lt;/p&gt;

&lt;p&gt;So here's how I got skype working nicely on CentOS 5.3, using the static binary 
tarball.&lt;/p&gt;

&lt;p&gt;Note that while it appears skype has finally been ported to 64-bit architectures, the
only current 64-bit builds are for Ubuntu 8.10+, so installing on a 64-bit CentOS 
box requires 32-bit libraries to be installed (sigh). Otherwise you get the error:
&lt;code&gt;skype: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# the available generic skype binaries are 32-bit, so if you're running a 64-bit 
# system you need to make sure you have various 32-bit libraries installed
yum install glib2.i386 qt4.i386 zlib.i386 alsa-lib.i386 libX11.i386 \
  libXv.i386 libXScrnSaver.i386 

# installing to /opt (tweak to taste)
cd /tmp
wget http://www.skype.com/go/getskype-linux-beta-static
cd /opt
tar jxvf /tmp/skype_static-2.1.0.47.tar.bz2
ln -s skype_static-2.1.0.47 skype

# Setup some symlinks (the first is required for sounds to work, the second is optional)
ln -s /opt/skype /usr/share/skype
ln -s /opt/skype/skype /usr/bin/skype
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You don't seem to need &lt;code&gt;pulseaudio&lt;/code&gt; installed (at least with the static binary - I assume it's
linked in statically already).&lt;/p&gt;

&lt;p&gt;Tangentially, if you have any video problems with your webcam, you might want to check out 
the updated video drivers available in the 
&lt;a href="http://elrepo.org/tiki/kmod-video4linux"&gt;kmod-video4linux package&lt;/a&gt; from the shiny new 
&lt;a href="http://elrepo.org/"&gt;ELRepo.org&lt;/a&gt;. I'm using their updated &lt;code&gt;uvcvideo&lt;/code&gt; module with a Logitech 
QuickCam Pro 9000 and Genius Slim 1322AF, and both are working well.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/skype_2.1_on_centos5/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/skype_2.1_on_centos5.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Yum Download SRPMs</title>                                   
                        <link>http://www.openfusion.net/linux/yum_download_srpms.html</link>                                                                             
                        <description>&lt;p&gt;Found a nice post today on 
&lt;a href="http://www.imminentweb.com/technologies/yum-download-source-rpm"&gt;how to use yum to download source RPMs&lt;/a&gt;,
rather than having to do a manual search on the relevant mirror.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/yum_download_srpms/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/yum_download_srpms.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>pvmove Disk Migrations</title>                                   
                        <link>http://www.openfusion.net/linux/pvmove_disk_migrations.html</link>                                                                             
                        <description>&lt;p&gt;Lots of people make use of linux's &lt;code&gt;lvm&lt;/code&gt; (Logical Volume Manager) for 
providing services such as disk volume resizing and snapshotting under linux.
But few people seem to know about the little &lt;code&gt;pvmove&lt;/code&gt; utility, which offers a
very powerful facility for migrating data between disk volumes on the fly.&lt;/p&gt;

&lt;p&gt;Let's say, for example, that you have a disk volume you need to rebuild for 
some reason. Perhaps you want to change the raid type you're using on it; 
perhaps you want to rebuild it using larger disks. Whatever the reason, you
need to migrate all your data to another temporary disk volume so you can
rebuild your initial one. &lt;/p&gt;

&lt;p&gt;The standard way of doing this is probably to just create a new filesystem on 
your new disk volume, and then copy or &lt;code&gt;rsync&lt;/code&gt; all the data across. But how 
do you verify that you have all the data at the end of the copy, and that 
nothing has changed on your original disk after the copy started? If you did
a second rsync and nothing new was copied across, &lt;em&gt;and&lt;/em&gt; the disk usage totals
exactly match, &lt;em&gt;and&lt;/em&gt; you remember to unmount the original disk immediately,
you might have an exact copy. But if your original disk data is changing at 
all, getting a good copy of a large disk volume can actually be pretty tricky.&lt;/p&gt;

&lt;p&gt;The elegant &lt;code&gt;lvm/pvmove&lt;/code&gt; solution to this problem is this: instead of doing
a userspace migration between disk volumes, you add your new volume into the
existing volume group, and then tell lvm to move all the physical extents 
off of your old physical volume, and the migration is magically handled by 
lvm, without even needing to unmount the logical volume!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Volume group 'extra' exists on physical volume /dev/sdc1
&amp;#036; lvs
  LV   VG     Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  data extra  -wi-ao 100.00G

# Add new physical volume /dev/sdd1 into volume group
&amp;#036; vgextend extra /dev/sdd1
  Volume group "extra" successfully extended
&amp;#036; lvs
  LV   VG     Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  data extra  -wi-ao 200.00G

# Use pvmove to move physical extents off of old /dev/sdc1 (verbose mode)
&amp;#036; pvmove -v /dev/sdc1
# Lots of output in verbose mode ...

# Done - remove old physical volume
&amp;#036; pvremove /dev/sdc1
&amp;#036; lvs
  LV   VG     Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  data extra  -wi-ao 100.00G
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The joys of linux.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/pvmove_disk_migrations/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/pvmove_disk_migrations.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Currency On-Screen Display</title>                                   
                        <link>http://www.openfusion.net/perl/currency_osd.html</link>                                                                             
                        <description>&lt;p&gt;Here's a quick hack demonstrating a nice juxtaposition between the 
power of a CPAN module - in this case Christopher Laco's 
&lt;a href="http://search.cpan.org/~claco/Finance-Currency-Convert-WebserviceX-0.07001/lib/Finance/Currency/Convert/WebserviceX.pm"&gt;Finance::Currency::Convert::WebserviceX&lt;/a&gt;
- and the elegance and utility of the little known &lt;code&gt;osd_cat&lt;/code&gt;, putting 
together a desktop currency rates widget in a handful of lines:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/usr/bin/perl

use strict;
use IO::File;
use Finance::Currency::Convert::WebserviceX;

# Configuration
my @currencies = map { uc } @ARGV || qw(USD GBP);
my &amp;#036;base_currency = 'AUD';
my &amp;#036;refresh = 300;   # seconds
my &amp;#036;font = '9x15bold';
# X colours: http://sedition.com/perl/rgb.html
my &amp;#036;colour = 'goldenrod3';
my &amp;#036;align = 'right';
my &amp;#036;pos = 'top';
my &amp;#036;offset = 25;

my &amp;#036;lines = scalar @currencies;
my &amp;#036;osd_refresh = &amp;#036;refresh + 1;
my &amp;#036;osd = IO::File-&amp;gt;new(
  "|osd_cat -l &amp;#036;lines -d &amp;#036;osd_refresh -c '&amp;#036;colour' -f &amp;#036;font -p &amp;#036;pos -A &amp;#036;align -o &amp;#036;offset"
) or die "can't open to osd_cat &amp;#036;!";
&amp;#036;osd-&amp;gt;autoflush(1);
local &amp;#036;SIG{PIPE} = sub { die "pipe failed: &amp;#036;!" };

my &amp;#036;cc = Finance::Currency::Convert::WebserviceX-&amp;gt;new;

while (1) {
  my &amp;#036;output = '';
  &amp;#036;output .= "&amp;#036;_ " . &amp;#036;cc-&amp;gt;convert(1, &amp;#036;base_currency, &amp;#036;_) . "\n" for @currencies;
  &amp;#036;osd-&amp;gt;print(&amp;#036;output);
  sleep &amp;#036;refresh;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Most of this is just housekeeping around splitting out various &lt;code&gt;osd_cat&lt;/code&gt; 
options for tweaking, and allowing the set of currencies to display
to be passed in as arguments. I haven't bothered setting up any option 
handling in order to keep the example short, but that would be
straightforward.&lt;/p&gt;

&lt;p&gt;To use, you just run from the command line in the background:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;./currency_osd &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and it shows up in the top right corner of your screen, like so:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openfusion.net/images/currency_osd.png"&gt;&lt;img src="/images/currency_osd_small.png" alt="alt
text" width="640" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tweak to taste, of course.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/perl/currency_osd/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/perl/currency_osd.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Delicious CSS Bookmarklet</title>                                   
                        <link>http://www.openfusion.net/web/delicious_css_bookmarklet.html</link>                                                                             
                        <description>&lt;p&gt;Further to my &lt;a href="http://www.openfusion.net/web/delicious_css"&gt;Delicious CSS&lt;/a&gt; post, here's a javascript
bookmarklet to make adding delicious css tags that much easier:&lt;/p&gt;

&lt;p&gt;&lt;a href="javascript:(function(){f='http://delicious.com/save?url='+encodeURIComponent(window.location.host)+'&amp;amp;title='+encodeURIComponent(window.location.host)+'&amp;amp;tags=delicious_css%2520delicious_css%253d'+encodeURIComponent(window.location.host)+'&amp;amp;v=5&amp;amp;';a=function(){if(!window.open(f+'noui=1&amp;amp;jump=doclose','deliciousuiv5','location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'))location.href=f+'jump=yes'};if(/Firefox/.test(navigator.userAgent)){setTimeout(a,0)}else{a()}})()"&gt;Delicious CSS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just drag it to your bookmarks toolbar somewhere, and click to use.&lt;/p&gt;

&lt;p&gt;Unfortunately, the latest version of the delicious tag form doesn't accept
tag arguments in the URL, which is what we need to preset the &lt;code&gt;delicious_css&lt;/code&gt;
tags we need. To workaround this, you need to also install the 
&lt;a href="http://userscripts.org/scripts/show/37076"&gt;Auto-Fill Delicious Tag Field&lt;/a&gt;
greasemonkey script.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/web/delicious_css_bookmarklet/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/web/delicious_css_bookmarklet.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Delicious CSS</title>                                   
                        <link>http://www.openfusion.net/web/delicious_css.html</link>                                                                             
                        <description>&lt;p&gt;And from the quick-weekend-hack department ...&lt;/p&gt;

&lt;p&gt;Ever wanted to quickly add a style to a page you were on to make it
more usable? If you're a Firefox user with Firebug installed you can
do that directly, but it's a temporary and local-only solution. User
stylesheets are more permanent, but at least in Firefox
(&lt;a href="http://www.openfusion.net/web/site_specific_user_stylesheets"&gt;as I've complained before&lt;/a&gt;) 
they're relatively difficult to use, and they're still a single-host
solution.&lt;/p&gt;

&lt;p&gt;I've wanted a lightweight method of defining and applying user styles
on the network for ages now, and this weekend it struck me that a simple 
and relatively elegant hack would be to just store user styles as 
&lt;a href="http://delicious.com/"&gt;delicious&lt;/a&gt; tags, applying them to a page via 
a &lt;a href="http://www.greasespot.net"&gt;greasemonkey&lt;/a&gt; script.&lt;/p&gt;

&lt;p&gt;So here it is: available at &lt;a href="http://userscripts.org"&gt;userscripts.org&lt;/a&gt; is a 
relatively trivial &lt;a href="http://userscripts.org/scripts/show/50451"&gt;Delicious CSS&lt;/a&gt;
greasemonkey script. It looks for delicious bookmarks belonging to a list
of  specified delicious usernames that are tagged with 
&lt;code&gt;delicious_css=&amp;lt;current_domain&amp;gt;&lt;/code&gt;,
and applies any 'style tags' it finds on that bookmark to the current 
page.&lt;/p&gt;

&lt;p&gt;Say if for example you wanted to hide the sidebar on my blog and make 
the content wider, you might do this in CSS:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;div#sidebar { display: none }
div#main    { width: 100% }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To define these rules for Delicious CSS you'd just create a bookmark
for &lt;code&gt;www.openfusion.net&lt;/code&gt; with the following tags:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;delicious_css
delicious_css=www.openfusion.net
div#sidebar=display:none
div#main=width:100%
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that since delicious tags are space-separated, you have to be 
careful to avoid spaces.&lt;/p&gt;

&lt;p&gt;The general format of the style tags is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ELT[,ELT...]=STYLE[;STYLE...]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;so more complex styles are fine too. Here for example are the styles 
I'm using for the Sydney Morning Herald:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;div.header,div.sidebar,div.aside,div.ad,div.footer=display:none
div#content,div.col1,.span-11=width:100%
body=background:none
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;which turns this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openfusion.net/images/delicious_css_smh1.png"&gt;&lt;img src="/images/delicious_css_smh1_small.png" alt="SMH Article, unstyled" width="640" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;into this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openfusion.net/images/delicious_css_smh2.png"&gt;&lt;img src="/images/delicious_css_smh2_small.png" alt="SMH Article, restyled" width="640" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And to setup a new machine, all you need to do is install the 
Delicious CSS greasemonkey script, adjust the usernames you're 
trusting, and all your styles are available instantly - nice!&lt;/p&gt;

&lt;p&gt;I'll be setting up my userstyles under my 'gavincarr' delicious account,
so you should be able to find additional examples at
&lt;a href="http://delicious.com/gavincarr/delicious_css"&gt;http://delicious.com/gavincarr/delicious_css&lt;/a&gt;.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/web/delicious_css/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/web/delicious_css.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Missing Delicious Feeds</title>                                   
                        <link>http://www.openfusion.net/web/missing_delicious_feeds.html</link>                                                                             
                        <description>&lt;p&gt;I've been playing with using &lt;a href="http://delicious.com/"&gt;delicious&lt;/a&gt;
as a lightweight URL database lately, mostly for use by 
&lt;a href="http://www.greasespot.net/"&gt;greasemonkey&lt;/a&gt;
scripts of various kinds (e.g. 
&lt;a href="http://www.openfusion.net/web/squatter_domains_tracked_by_delicious"&gt;squatter_redirect&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;For this kind of use I really just need a lightweight anonymous
http interface to the bookmarks, and delicious provides a number of 
nice lightweight &lt;a href="http://delicious.com/help/feeds"&gt;RSS and JSON feeds&lt;/a&gt; 
suitable for this purpose.&lt;/p&gt;

&lt;p&gt;But it turns out the feed I really need isn't currently available.
I mostly want to be able to ask, "Give me the set of bookmarks stored
for URL X by user Y", or even better, "Give me the set of bookmarks
stored for URL X by users Y, Z, and A".&lt;/p&gt;

&lt;p&gt;Delicious have a feed for recent bookmarks by URL:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://feeds.delicious.com/v2/{format}/url/{url md5}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and a feed for all a user's bookmarks:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://feeds.delicious.com/v2/{format}/{username}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and feeds for a user's bookmarks limited by tag(s):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;http://feeds.delicious.com/v2/{format}/{username}/{tag[+tag+...+tag]}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;but not one for a user limited by URL, or for URL limited by user.&lt;/p&gt;

&lt;p&gt;Neither alternative approach is both feasible and reliable: searching
by url will only return the most recent set of N bookmarks; and searching
by user and walking the entire (potentially large) set of their bookmarks
is just too slow.&lt;/p&gt;

&lt;p&gt;So for now I'm having to workaround the problem by adding a special 
hostname tag to my bookmarks (e.g. &lt;code&gt;squatter_redirect=www.openfusion.net&lt;/code&gt;),
and then using the &lt;code&gt;username+tag&lt;/code&gt; feed as a proxy for my &lt;code&gt;username+domain&lt;/code&gt;
search.&lt;/p&gt;

&lt;p&gt;Any cluesticks out there? Any nice delicious folk want to whip up a shiny
new feed for the adoring throngs? :-)&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/web/missing_delicious_feeds/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/web/missing_delicious_feeds.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Squatter Domains, Tracked with Delicious</title>                                   
                        <link>http://www.openfusion.net/web/squatter_domains_tracked_by_delicious.html</link>                                                                             
                        <description>&lt;p&gt;A few weeks ago I hit a couple of domain squatter sites in quick
succession and got a bit annoyed. I asked on twitter/identi.ca
whether anyone knew of any kind of domain squatter database on the
web, perhaps along the lines of the email RBL lists, but got no
replies.&lt;/p&gt;

&lt;p&gt;I thought at the time that &lt;a href="http://www.delicious.com/"&gt;delicious&lt;/a&gt; might 
be useful for this, in much the same way that Jon Udell has been
&lt;a href="http://blog.jonudell.net/2008/12/24/lightweight-event-syndication-with-trusted-feed/"&gt;exploring&lt;/a&gt;
using delicious for collaborative 
&lt;a href="http://blog.jonudell.net/2009/04/08/stepping-into-the-river-with-heraclitu/"&gt;event curation&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;So here's the results of some hacking time this weekend: 
&lt;a href="http://userscripts.org/scripts/show/47100"&gt;Squatter Redirect&lt;/a&gt;,
a &lt;a href="http://www.greasespot.net/"&gt;greasemonkey&lt;/a&gt; script (i.e. firefox only,
sorry) that checks whether the sites you visit have been tagged on 
delicious as squatter domains that should be directed elsewhere, and 
if so, does the redirect in your browser.&lt;/p&gt;

&lt;p&gt;Here's a few squatter domains to try it out on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a rel="nofollow" href="http://www.quagga.org/"&gt;http://www.quagga.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" href="http://whatsmyip.com/"&gt;http://whatsmyip.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" href="http://www.twitterstats.com/"&gt;http://www.twitterstats.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" href="http://ozspeedtest.com.au/"&gt;http://ozspeedtest.com.au&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The script checks two delicious accounts - your personal account, so 
you can add your own domains without having to wait for them to be 
pulled into the 'official' &lt;code&gt;squatter_redirect&lt;/code&gt; stream; and the 
official &lt;code&gt;squatter_redirect&lt;/code&gt; delicious account, into which other 
people's tags are periodically pulled after checking.&lt;/p&gt;

&lt;p&gt;Marking a new domain as a squatter simply involves creating a delicious
bookmark for the squatter page with a few special tags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;squatter_redirect&lt;/code&gt; - flagging the bookmark for the attention of
the &lt;code&gt;squatter_redirect&lt;/code&gt; delicious user&lt;/li&gt;
&lt;li&gt;&lt;code&gt;squatter_redirect=www.realdomain.com&lt;/code&gt; - setting the real domain that you 
want to be redirected to&lt;/li&gt;
&lt;li&gt;(optional) &lt;code&gt;squatter_domain=www.baddomain.com&lt;/code&gt; - marker for the
squatter domain itself (only required if you want to use from your own 
delicious account)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So &lt;code&gt;www.quagga.org&lt;/code&gt; above would be tagged:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;squatter_redirect squatter_redirect=www.quagga.net
# or, optionally:
squatter_redirect squatter_redirect=www.quagga.net squatter_domain=www.quagga.org
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Feedback/comments welcome.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/web/squatter_domains_tracked_by_delicious/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/web/squatter_domains_tracked_by_delicious.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Quick Linux Box Hardware Overview</title>                                   
                        <link>http://www.openfusion.net/linux/quick_linux_box_overview.html</link>                                                                             
                        <description>&lt;p&gt;Note to self: here's how to get a quick overview of the hardware on a 
linux box:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;perl -F"\s*:\s*" -ane "chomp \&amp;#036;F[1]; 
  print qq/\&amp;#036;F[1] / if \&amp;#036;F[0] =~ m/^(model name|cpu MHz)/; 
  print qq/\n/ if \&amp;#036;F[0] eq qq/\n/" /proc/cpuinfo
grep MemTotal /proc/meminfo
grep SwapTotal /proc/meminfo
fdisk -l /dev/[sh]d? 2&amp;gt;/dev/null | grep Disk
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Particularly useful if you're auditing a bunch of machines (via an ssh
loop or clusterssh or something) and want a quick 5000-foot view of 
what's there.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/quick_linux_box_overview/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/quick_linux_box_overview.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>ASX20 Announcements Review</title>                                   
                        <link>http://www.openfusion.net/web/asx20_announcements.html</link>                                                                             
                        <description>&lt;p&gt;Question: you're a small investor with a handful of small share 
investments in Australian companies listed on the ASX. How do you 
keep track of the announcements those companies make to the ASX?&lt;/p&gt;

&lt;p&gt;There are a couple of manual methods you can use. You can bookmark 
the announcements page on the various company websites you're 
interested in and go and check them periodically, but that's 
obviously pretty slow and labour intensive.&lt;/p&gt;

&lt;p&gt;Or you can go to a centralised point, the 
&lt;a href="http://www.asx.com.au/asx/statistics/announcementSearch.do"&gt;ASX Announcements Page&lt;/a&gt;,
and search for all announcements from there. Unfortunately, the ASX
only lets you search for one company at a time, so that's also 
pretty slow, and still requires you do all the checking manually -
there's no automation available without subscribing to the ASX's
expensive data feed services.&lt;/p&gt;

&lt;p&gt;There are also other third-party subscription services you can pay for 
that will do this for you, but it's annoying to have to pay for what 
is rightly public information.&lt;/p&gt;

&lt;p&gt;The better answer is for the company themselves to provide their 
announcements through some sort of push mechanism. The traditional
method is via email, where you subscribe to company announcements,
and they show up in your inbox shortly after they're released. &lt;/p&gt;

&lt;p&gt;But the best and most modern solution is for companies to provide a 
syndication feed on their website in a format like RSS or Atom, which 
can be monitored and read using feed readers like 
&lt;a href="http://reader.google.com"&gt;Google Reader&lt;/a&gt;, 
&lt;a href="http://www.mozillamessaging.com/en-US/thunderbird/"&gt;Mozilla Thunderbird&lt;/a&gt;,
or &lt;a href="http://www.jetbrains.com/omea/reader/"&gt;Omea Reader&lt;/a&gt;. Feeds are superior
to email announcments in that they're centralised and lightweight (big 
companies don't have to send out thousands of emails, for instance), and 
they're a standardised format, and so can be remixed and repurposed in
lots of interesting ways.&lt;/p&gt;

&lt;p&gt;So out of interest I did a quick survey of the current ASX20 (the top 20
list of companies on the ASX according to Standards and Poors) to see how 
many of them support syndicating their announcements either by email or by 
RSS/Atom. Here are the results:&lt;/p&gt;

&lt;table class="explicit td_centre"&gt;
&lt;caption class="center"&gt;Table: Company Announcement Availability, ASX20&lt;/caption&gt;
&lt;tr&gt;
&lt;th width="200" class="left"&gt;Company&lt;/th&gt;
&lt;th width="100"&gt;via web&lt;/th&gt;
&lt;th width="100"&gt;via email&lt;/th&gt;
&lt;th width="100"&gt;via RSS/Atom&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://shareholdercentre.amp.com.au/"&gt;AMP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://shareholdercentre.amp.com.au/phoenix.zhtml?c=142072&amp;p=irol-news&amp;nyo=0"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://shareholdercentre.amp.com.au/phoenix.zhtml?c=142072&amp;p=irol-alerts"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://shareholdercentre.amp.com.au/corporate.rss?c=142072&amp;Rule=Cat=news|subcat=ALL"&gt;&lt;img src="/images/feed.png" alt="RSS Feed"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.anz.com.au/aus/shares/default.asp"&gt;ANZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.anz.com.au/about-us/our-company/media-centre/asx-announcements"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.bhpbilliton.com/bb/investorsMedia.jsp"&gt;BHP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.bhpbilliton.com/bb/investorsMedia/news.jsp"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.bhpbilliton.com/bb/investorsMedia/news.jsp"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.brambles.com/BXB/content/investors_welcome.html"&gt;Brambles (BXB)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.brambles.com/BXB/content/investors_asx.html"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.brambles.com/BXB/content/investors_emailalerts.html"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.commbank.com.au/about-us/shareholders/default.aspx"&gt;Commonwealth Bank (CBA)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.commbank.com.au/about-us/shareholders/asx-announcements-media/asx-announcements/"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://shareholders.commbank.com.au/subscribe/0,1711,2,00.html"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.csl.com.au/s1/cs/auhq/1187378853231/page/1187378853200/prlist.htm"&gt;CSL&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.csl.com.au/s1/cs/auhq/1187378853231/page/1187378853200/prlist.htm"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.csl.com.au/s1/cs/auhq/1199978953033/page/1199978936034/Register.htm"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://fosters.com.au/investors.htm"&gt;Fosters (FGL)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://fosters.com.au/mediacentre/announcements.htm"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="left"&gt;
&lt;td class="left"&gt;&lt;a href="http://www.macquarie.com.au/au/about_macquarie/investor_information.htm"&gt;Macquarie Group (MQG)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.macquarie.com.au/au/about_macquarie/media_centre.htm"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.macquarie.com.au/au/about_macquarie/investor_information/registration.htm"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.nabgroup.com/"&gt;NAB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.nabgroup.com/0,,91975,00.html"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.newcrest.com.au/"&gt;Newcrest Mining (NCM)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.newcrest.com.au/market.asp"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.originenergy.com.au/8/Investor-centre"&gt;Origin Energy (ORG)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.originenergy.com.au/news/"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.originenergy.com.au/news/register"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.originenergy.com.au/news/feed/asxmedia-releases.xml"&gt;&lt;img src="/images/feed.png" alt="RSS Feed"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://group.qbe.com/Insurance.html"&gt;QBE Insurance (QBE)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://group.qbe.com/Investor-Information/Company-Announcements/Insurance.html"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.riotinto.com/index_shareholders.asp"&gt;Rio Tinto (RIO)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.riotinto.com/media/5157.asp"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.riotinto.com/media/415_sign_up_for_media_releases_by_email.asp"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.riotinto.com/media/riotinto_mediareleases.xml"&gt;&lt;img src="/images/feed.png" alt="RSS Feed"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.suncorpgroup.com.au/"&gt;Suncorp Metway (SUN)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.suncorpgroup.com.au/phoenix.zhtml?c=144033&amp;p=irol-keynews&amp;nyo=0"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.suncorpgroup.com.au/phoenix.zhtml?c=144033&amp;p=irol-alerts"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.suncorpgroup.com.au/corporate.rss?c=144033&amp;Rule=Cat=news|subcat=ALL"&gt;&lt;img src="/images/feed.png" alt="RSS Feed"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.telstra.com.au/abouttelstra/investor/"&gt;Telstra (TLS)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.telstra.com.au/abouttelstra/investor/asx_announcements.cfm"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.telstra.com.au/abouttelstra/media/subscribe/index.cfm"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://feeds.feedburner.com/telstra-asx-announcements"&gt;&lt;img src="/images/feed.png" alt="RSS Feed"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://ir.wesfarmers.com.au/phoenix.zhtml?c=144042&amp;p=irol-irhome"&gt;Wesfarmers (WES)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://ir.wesfarmers.com.au/phoenix.zhtml?c=144042&amp;p=irol-news&amp;nyo=0"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://ir.wesfarmers.com.au/phoenix.zhtml?c=144042&amp;p=emailPage"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://ir.wesfarmers.com.au/corporate.rss?c=144042&amp;Rule=Cat=news|subcat=ALL"&gt;&lt;img src="/images/feed.png" alt="RSS Feed"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://westfield.com/corporate/"&gt;Westfield (WDC)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://westfield.com/corporate//news-announcements/asx-announcements/"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://westfield.com/corporate/investor-services/e-communications/"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.westpac.com.au/internet/publish.nsf/Content/WI+Investor+Centre"&gt;Westpac (WBC)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.westpac.com.au/internet/publish.nsf/Content/WIMCMR+Media+releases"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.woodside.com.au/"&gt;Woodside Petroleum (WPL)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.woodside.com.au/investors+and+media/announcements/"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.woodside.com.au/email_registration/default2009.asp"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="left"&gt;&lt;a href="http://www.woolworthslimited.com.au/"&gt;Woolworths (WOW)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.woolworthslimited.com.au/phoenix.zhtml?c=144044&amp;p=irol-news&amp;nyo=0"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.woolworthslimited.com.au/phoenix.zhtml?c=144044&amp;p=irol-alerts"&gt;&lt;img src="/images/tick.png" alt="tick"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.woolworthslimited.com.au/phoenix.rss?c=144044&amp;p=rssall"&gt;&lt;img src="/images/feed.png" alt="RSS Feed"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Some summary ratings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grade: A&lt;/strong&gt; - announcements available via web, email, and RSS: &lt;strong&gt;AMP, ORG, RIO, SUN, TLS, WES, WOW&lt;/strong&gt; (7)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grade: B&lt;/strong&gt; - announcements available via web and email: &lt;strong&gt;BHP, BXB, CBA, CSL, MQG, WDC, WPL&lt;/strong&gt; (7)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grade: C&lt;/strong&gt; - announcements available via web: &lt;strong&gt;ANZ, FGL, NAB, NCM, QBE, WBC&lt;/strong&gt; (6)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, I'm relatively impressed that 7 of the ASX20 do support RSS. On the
down side, the fact that another 6 don't even provide an email announcements
service is pretty ordinary, especially considering the number of retail
shareholders who hold some of these stocks (e.g. three of the big four banks,
bonus points to CBA, the standout).&lt;/p&gt;

&lt;p&gt;Special bonus points go to: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Suncorp Metway and Wesfarmers, who also offer RSS feeds for upcoming calendar 
events; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rio Tinto, who have their own announcements &lt;a href="http://twitter.com/riotinto"&gt;twitter account&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Corrections and updates are welcome in the comments.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/web/asx20_announcements/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/web/asx20_announcements.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>The Joy of Scripting</title>                                   
                        <link>http://www.openfusion.net/linux/the_joy_of_scripting.html</link>                                                                             
                        <description>&lt;p&gt;Was going home on the train with Hannah (8) this afternoon, and she says, 
"Dad, what's the longest word you can make without using any letters with 
tails or stalks?". "Do you really want to know?", I asked, and whipping 
out the trusty laptop, we had an answer within a couple of train stops:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;egrep -v '[A-Zbdfghjklpqty]' /usr/share/dict/words | \
perl -nle 'chomp; push @words, &amp;#036;_; 
  END { @words = sort { length(&amp;#036;b) cmp length(&amp;#036;a) } @words; 
        print join "\n", @words[0 .. 9] }' 

noncarnivorousness
nonceremoniousness
overcensoriousness
carnivorousnesses
noncensoriousness
nonsuccessiveness
overconsciousness
semiconsciousness
unacrimoniousness
uncarnivorousness
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now I just need to teach her how to do that.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/the_joy_of_scripting/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/the_joy_of_scripting.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Cityrail Timetables Greasemonkey Script</title>                                   
                        <link>http://www.openfusion.net/web/cityrail_timetables_greasemonkey_script.html</link>                                                                             
                        <description>&lt;p&gt;I got sufficiently annoyed over last week's 
&lt;a href="http://bit.ly/14xy69"&gt;Cityrail&lt;/a&gt;
&lt;a href="http://www.smh.com.au/articles/2009/03/05/1235842537210.html"&gt;Timetable&lt;/a&gt;
&lt;a href="http://www.smh.com.au/articles/2009/03/09/1236447097082.html"&gt;fiasco&lt;/a&gt;
that I thought I'd contribute something to the making-Cityrail-bearable
software ecosystem. &lt;/p&gt;

&lt;p&gt;So this post is to announce a new &lt;a href="http://greasespot.net/"&gt;Greasemonkey&lt;/a&gt; script 
called &lt;a href="http://userscripts.org/scripts/show/43905"&gt;Cityrail Timetables Reloaded&lt;/a&gt;
[CTR], available at the standard Greasemonkey repository on
&lt;a href="http://userscripts.org/"&gt;userscripts.org&lt;/a&gt;, that cleans up and extensively
refactors Cityrail's standard timetable pages. &lt;/p&gt;

&lt;p&gt;Here's a screenshot of Cityrail's initial timetable page for the Northern
line:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openfusion.net/images/cityrail_std41.png"&gt;&lt;img src="/images/cityrail_std41_small.png" alt="Cityrail standard timetable" width="454" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and here's the same page with CTR loaded:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openfusion.net/images/cityrail_ctr41.png"&gt;&lt;img src="/images/cityrail_ctr41_small.png" alt="Cityrail timetable via CTR" width="454" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CTR loads a configurable number of pages rather than forcing you to click 
through them one by one, and in fact will load the whole set if you tell it
to. &lt;/p&gt;

&lt;p&gt;It also has support for you specifying the 'from' and 'to' stations you're 
travelling between, and will highlight them for you, as well as omit stations 
well before or well after yours, and any trains that don't actually stop at
your stations. This can compress the output a lot, allowing you to fit more
pages on your screen:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.openfusion.net/images/cityrail_ctr42.png"&gt;&lt;img src="/images/cityrail_ctr42_small.png" alt="Cityrail timetable via CTR" width="454" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can't see Cityrail having a problem with this script since it's just
taking their pages and cleaning them up, but we shall see.&lt;/p&gt;

&lt;p&gt;If you're a firefox/greasemonkey user please try it out and post your 
comments/feedback here or on the userscripts site.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/web/cityrail_timetables_greasemonkey_script/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/web/cityrail_timetables_greasemonkey_script.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Soul Communications FAIL!</title>                                   
                        <link>http://www.openfusion.net/general/soul_communications_fail.html</link>                                                                             
                        <description>&lt;p&gt;What's a blog if not a vehicle for an occasional rant?&lt;/p&gt;

&lt;p&gt;I used to have a mobile with Soul Communications, and recently
changed to another provider because Soul cancelled the plan I'd 
been on with them for 3 or 4 years. I ported my number, and 
gathered that that would close the Soul account, and all would be 
good. Soul has a credit card on that account that they've billed
for the last 3 years or so without problems. I've had nothing 
from them to indicate there are any issues.&lt;/p&gt;

&lt;p&gt;And so today I get a Notice of Demand and Disconnection from Soul
advising me that my account is overdue, charging me additional
debt recovery fees, and advising that if I don't pay all 
outstanding amounts immediately it'll be referred to debt
collectors.&lt;/p&gt;

&lt;p&gt;Nice work Soul.&lt;/p&gt;

&lt;p&gt;So let's recap. I've had no notices that my account is overdue,
no contact from anyone from Soul, no indication that there are
any issues, and then a Notice of Demand?&lt;/p&gt;

&lt;p&gt;I go and check my email, in case I've missed something. Two 
emails from Soul since the beginning of the year, the most recent
from a week ago. They're HTML-only, of course, and I use a text 
email client, but hey, I'll go the extra mile and fire up an HTML 
email client to workaround the fact that multipart/alternative is 
a bit too hard.&lt;/p&gt;

&lt;p&gt;The emails just say, "Your Soul Bill is Now Available", and point
to the "MySoul Customer Portal". (Yes, it would be nice if it was 
a link to the actual bill, of course, rather than expecting me 
to navigate through their crappy navigation system, but that's
clearly a bit too sophisticated as well; but I digress.) There's no 
indication in any of the emails that anything is amiss, like a
"Your account is overdue" message or something. So no particular 
reason I would have bothered to go and actually login to their
portal, find my bill, and review it, right? They've got the credit
card, right?&lt;/p&gt;

&lt;p&gt;So let's go and check the bill. Go to "MySoul Salvation Portal",
or whatever it's called, dig out obscure customer number and 
sekrit password, and login. Except I can't. "This account is 
inactive." &lt;/p&gt;

&lt;p&gt;Aaaargh! &lt;/p&gt;

&lt;p&gt;So let's recap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;account has been cancelled due to move to another carrier
(yippee!)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;can't login to super-customer-portal to get bills&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;emails from Soul do not indicate there are any problems with 
the account&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;no other emails from the Soul saying "we have a problem"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;maybe they could, like, phone my mobile, since they do have
the number - no, too hard!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Epic mega stupendous FAIL! What a bunch of lusers.&lt;/p&gt;

&lt;p&gt;So now I've phoned Soul, had a rant, and been promised that they'll
email me the outstanding accounts. That was half an hour ago, and 
nothing in the inbox yet. I get the feeling they don't really want
to be paid.&lt;/p&gt;

&lt;p&gt;And I feel so much better now. :-)&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/general/soul_communications_fail/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/general/soul_communications_fail.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>mod_auth_tkt 2.0.1</title>                                   
                        <link>http://www.openfusion.net/web/mod_auth_tkt_2_0_1.html</link>                                                                             
                        <description>&lt;p&gt;I'm happy to announce the release of mod_auth_tkt 2.0.1, the first full release
of mod_auth_tkt in a couple of years. The 2.0.x release includes numerous
enhancements and bugfixes, including guest login support and full support for
apache 2.2.&lt;/p&gt;

&lt;p&gt;mod_auth_tkt is a lightweight single-sign-on authentication module for apache,
supporting versions 1.3.x, 2.0.x, and 2.2.x. It uses secure cookie-based
tickets to implement a single-signon framework that works across multiple
apache instances and servers. It's also completely repository agnostic, 
relying on a user-supplied script to perform the actual authentication.&lt;/p&gt;

&lt;p&gt;The release is available as a tarball and various RPMs from the 
&lt;a href="http://www.openfusion.com.au/labs/mod_auth_tkt/"&gt;mod_auth_tkt homepage&lt;/a&gt;.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/web/mod_auth_tkt_2_0_1/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/web/mod_auth_tkt_2_0_1.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Testing Disqus</title>                                   
                        <link>http://www.openfusion.net/web/disqus_test.html</link>                                                                             
                        <description>&lt;p&gt;I'm trying out &lt;a href="http://disqus.com/"&gt;disqus&lt;/a&gt;, since I like the idea
of being able to track/collate my comments across multiple endpoints,
rather than have them locked in to various blogging systems. So this
is a test post to try out commenting. Please feel free to comment ad
nauseum below (and sign up for a disqus account, if you don't already
have one).&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/web/disqus_test/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/web/disqus_test.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 <title>Gavin Carr's Hackery</title>
                <link>http://www.openfusion.net</link>
                <description>World disintermediation, one hack at a time</description>
                <dc:date></dc:date>
                <dc:language>en-us</dc:language>
                <dc:creator>mailto:</dc:creator>
                <dc:rights>Copyright 2009</dc:rights>
                <admin:generatorAgent rdf:resource="http://www.raelity.org/apps/blosxom/?v=2.0.2" />
                <admin:errorReportsTo rdf:resource="mailto:" />
                <sy:updatePeriod>hourly</sy:updatePeriod>
                <sy:updateFrequency>1</sy:updateFrequency>
                <sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
                <item>                                                          
                        <title>Open Fusion RPM Repository</title>                                   
                        <link>http://www.openfusion.net/linux/openfusion_rpm_repository.html</link>                                                                             
                        <description>&lt;p&gt;Over the last few years I've built up quite a collection of packages 
for CentOS, and distribute them via a yum repository. They're typically 
packages that aren't included in 
&lt;a href="http://dag.wieers.com/rpm/"&gt;DAG/RPMForge&lt;/a&gt; when I need them, so I just
build them myself. In case they're useful to other people, this post
documents the repository locations, and how you can get setup to make
use of it yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Obligatory Warning:&lt;/strong&gt; this is a personal repository, so it's 
primarily for packages I want to use myself on a particular platform
i.e. coverage is uneven, and packages won't be as well tested as
a large repository like Dag's. I'm particularly building for
CentOS 5 these days, too, but I also try and make the SRPMs
available so you should hopefully be able to rebuild if a 
CentOS 3/4 version isn't immediately available. Also, you use 
at your own risk, packages may nuke your system and kill your
children, etc. etc.&lt;/p&gt;

&lt;p&gt;Locations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repository root: &lt;a href="http://www.openfusion.com.au/mrepo/"&gt;http://www.openfusion.com.au/mrepo/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Source RPMs: &lt;a href="http://www.openfusion.com.au/labs/srpms/"&gt;http://www.openfusion.com.au/labs/srpms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add the Open Fusion repository to your yum configuration, just 
install the following 'openfusion-release' package:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo rpm -Uvh http://www.openfusion.com.au/openfusion-release-0.3-1.of.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Feedback and suggestions are &lt;a href="http://www.openfusion.net/about.story"&gt;welcome&lt;/a&gt;. Packaging 
requests are also welcome, particularly when they involve my 
&lt;a href="http://www.amazon.com/gp/registry/wishlist/AJTB32U3FT82"&gt;Amazon wishlist&lt;/a&gt;. 
;-)&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;




</description>                                                         
                        <comments>http://www.openfusion.net/linux/openfusion_rpm_repository/</comments>                                                                     
                        <guid isPermaLink="true">http://www.openfusion.net/linux/openfusion_rpm_repository.html</guid>                                                          
                        <dc:date></dc:date>        
                        </item>                                                                 </channel>                                                      
        </rss>                                                                  