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

<channel>
	<title>Graceful Exits &#187; configuration</title>
	<atom:link href="http://www.jpstacey.info/blog/category/configuration/www.jpstacey.info/blog/category/configuration/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jpstacey.info/blog</link>
	<description>Garbage collection, in a very real sense</description>
	<pubDate>Tue, 07 Oct 2008 19:19:45 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Wordpress violence / breaks the silence</title>
		<link>http://www.jpstacey.info/blog/2008/09/14/wordpress-violence-breaks-the-silence/</link>
		<comments>http://www.jpstacey.info/blog/2008/09/14/wordpress-violence-breaks-the-silence/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 15:22:47 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

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

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=228</guid>
		<description><![CDATA[Come cracking in / into my little shared-hosting environment. I'm working on it.]]></description>
			<content:encoded><![CDATA[<p>I finally began to get on top of Wordpress upgrades a few months ago, with an <a href="/blog/2008/06/16/upgrading-this-blog-to-wordpress-251/">upgrade to 2.5.1</a>. It worked well, but left me open to what looks like a failed attempt to exploit a <a href="http://seclists.org/fulldisclosure/2008/Apr/0699.html" >cryptographic splicing vulnerability in Wordpress 2.5.x</a>. I&#8217;m still checking database tables now.</p>
<p>In the mean time I&#8217;ve finally followed <a href="http://throwingbeans.org/">Tom&#8217;s</a> advice (which I didn&#8217;t take when he volunteered it at the time) and <a href="http://codex.wordpress.org/Installing/Updating_WordPress_with_Subversion" >upgraded Wordpress to a subversion checkout</a> of 2.6+ . It was no more painful than the previous upgrade, and looks like being a much simpler procedure in future owing to subversion&#8217;s interface for switching versions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/09/14/wordpress-violence-breaks-the-silence/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The TimeToLead.eu technical stack: Django and Flex</title>
		<link>http://www.jpstacey.info/blog/2008/09/11/the-timetoleadeu-technical-stack-django-and-flex/</link>
		<comments>http://www.jpstacey.info/blog/2008/09/11/the-timetoleadeu-technical-stack-django-and-flex/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 18:57:43 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		<category><![CDATA[timetolead.eu]]></category>

		<category><![CDATA[unit test]]></category>

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

		<guid isPermaLink="false">http://www.jpstacey.info/blog/?p=203</guid>
		<description><![CDATA[Move over LAMP: here comes LAPD.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jpstacey.info/blog/2008/09/05/they-work-for-eu/" >As discussed previously</a>, at <a href="http://torchbox.com/" >Torchbox</a> we recently built <a href="http://timetolead.eu/" >TimeToLead.eu</a>, an advocacy site set up by the four major environmental NGOs to prompt MEPs into passing the sort of legislation the world&#8217;s climate desperately needs. The project itself needed a fast turnaround time, and its pan-European audience demanded strong <abbr title="internationalization" >i18n</abbr> and <abbr title="localization">l10n</abbr>. This had to be in place at all layers, including an embedded Flex application.</p>
<p>In a parallel with the acronym LAMP, the overall stack is probably best described as &#8220;LAPD&#8221;:</p>
<ul>
<li><strong>L</strong>inux</li>
<li><strong>A</strong>pache</li>
<li><strong>P</strong>ostgreSQL</li>
<li><strong>D</strong>jango</li>
</ul>
<p>although there are refinements at almost every level, which I&#8217;ll go into below.</p>
<p>I18n with <strong>Django</strong> was a joy to implement. We had to have the site translated in six languages, but this was practically a doddle with <a href="http://www.djangoproject.com/documentation/i18n/" >Django&#8217;s core internationalization behaviour</a>. Before we&#8217;d put the translations in, I clicked on &#8220;POLSKI&#8221; and was sure the l10n wasn&#8217;t working, until I spotted that the &#8220;ENGLISH&#8221; link had magically changed to &#8220;ANGIELSKI&#8221;. </p>
<p>The only issue we&#8217;ve had&#8212;which we&#8217;re hoping to work around&#8212;was deciding on an initial translation when the visitor arrived for the first time. Some parts of the system seemed to need l10n&#8212;the plumping for a specific version of the site&#8212;before Django&#8217;s <code>LocaleMiddleware</code> had done that for us, so we&#8217;ve had to force English until the user states otherwise. I&#8217;m hoping that a version 2 rewrite will fix that.</p>
<p><strong>PostgreSQL</strong> might seem an odd choice of database to the LAMP community, who are used to MySQL&#8217;s minuscule overhead and often actively work around its deficiencies to keep that low overhead. But PostgreSQL&#8217;s stability and maturity outweigh the performance issues which&#8212;with a little care and attention&#8212;it&#8217;s possible to at least partly mitigate. </p>
<p>Compared to MySQL or Oracle, PostgreSQL also has the accolade of <a href="http://docs.djangoproject.com/en/dev/ref/databases/" >being supported by Django but having no outstanding database issues</a>. Whether that&#8217;s because nobody else uses it, or because the integration is tight and relatively bug-free, I daren&#8217;t comment, but we&#8217;ve had nothing but seamless, transparent behaviour thus far.</p>
<p>Our Django-oriented hosting is with <a href="http://www.webfaction.com/hosting/django-hosting" >Webfaction</a>, who are geared up for one-click <strong>mod_python</strong> Django deployments. The Django app sits in its own <strong>Apache</strong> process, while static files are served by the <strong>Linux</strong> server&#8217;s main Apache process: differential serving of content lets us take advantage of differential hosting fees. The hosting is a pretty good package, although TimeToLead.eu (despite being a pretty small application) is already finding the maximum memory package a bit restrictive, so we&#8217;ll need to keep an eye on that.</p>
<p>On top of this, Django has to a greater or lesser extent enabled us to use a whole host of other neat little technologies to integrate the site and improve both the user and the developer&#8217;s experience:</p>
<ul>
<li>The main Flash widget is written in <a href="http://www.adobe.com/products/flex/" >Flex</a>: I&#8217;m no particular fan of Flash myself, but it fulfills the remit admirably here. Because of text flow issues, there are actually six versions of the Flash file, one for each language, but the majority of the explanatory text is then picked up from an XML feed provided by Django, so can be retranslated by the client without recompiling Flex.</li>
<li><a href="http://code.google.com/p/swfobject/" >Swfobject</a> serves up our main widget and the YouTube file. It degrades well, but bear in mind that the API to it has changed considerably in the most recent major version.</li>
<li>Unit tests in Django cover a number of stress points in the code (although not all, owing to the timescale). Towards the end, we were testing any major functionality changes by writing the tests first, which I was really pleased with.</li>
<li>BeautifulSoup, which <a href="/blog/2008/09/07/spliticket-running-again-with-beautifulsoup/" >I mentioned a few days ago</a>, is employed in the unit tests to check that certain content is coming through on the front end. It also managed to help us proof against a browser-dependent <a href="http://www.bluerobot.com/web/css/fouc.asp/" >FOUC</a> we encountered during development.</li>
<li>Translations are managed by the Django application <a href="http://code.google.com/p/django-rosetta/" >Rosetta</a>: the most recent stable version is for Django 0.96 but the bleeding-edge repository copy seems to work OK on 1.0b1</li>
</ul>
<p>Django has been the saviour here, living up to its promise as a framework for rapid application development. No framework is ever perfect, and there&#8217;ll always be arguments over the right way to proceed, reconciling what the framework developers want you to do with what the end developer wants to do, but this particular brief sojourn alongside <a href="http://docs.djangoproject.com/en/dev/internals/committers/" >Holovaty, Kaplan-Moss, Willison <i>et al</i></a> has been tremendous fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2008/09/11/the-timetoleadeu-technical-stack-django-and-flex/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unsubscibe me form this maling list&#8230; for a bit</title>
		<link>http://www.jpstacey.info/blog/2007/12/17/unsubscibe-me-form-this-maling-list-for-a-bit/</link>
		<comments>http://www.jpstacey.info/blog/2007/12/17/unsubscibe-me-form-this-maling-list-for-a-bit/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 11:50:38 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

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

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

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

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://www.jpstacey.info/blog/2007/12/17/unsubscibe-me-form-this-maling-list-for-a-bit/</guid>
		<description><![CDATA[&#8216;Tis the season to remove yourself from mailing lists if you&#8217;re subscribed from your work address. And there&#8217;s only so much good will to go round, until it&#8217;s completely soaked up by people asking lists with automated (un)subscription procedures to &#8220;unsubscibe&#8221; them, please, right now. It&#8217;s even harder to deal with those who ask thousands [...]]]></description>
			<content:encoded><![CDATA[<p>&#8216;Tis the season to remove yourself from mailing lists if you&#8217;re subscribed from your work address. And there&#8217;s only so much good will to go round, until it&#8217;s completely soaked up by people asking lists with automated (un)subscription procedures to &#8220;unsubscibe&#8221; them, please, right now. It&#8217;s even harder to deal with those who ask thousands of people if they can be unsubscribed, but then re-subscribed</p>
<p>One big problem is vacation programs, aspects of your email provision that permit automated emails on your behalf to say &#8220;I&#8217;m not here right now.&#8221; They&#8217;re horrible, all of them. Outlook Express&#8217; system only runs when your desktop is switched on: imagine the cheery post-seasonal look on your face as you return to work after two weeks away, power up your computer and then watch everyone who&#8217;s sent you an email for the past two weeks suddenly get an email each, per email they sent, before you can hit &#8220;cancel, for the sake of the newborn baby Jesus!&#8221; Outlook&#8217;s and Exchange&#8217;s equivalents merrily reply to any old bulk mailing list, leading to incredibly annoyed readers of the same address until someone takes matters into their own hands and either unsubscribes the offender or hunts them down, ties them to a post and shoots them in the head. Even the *nix <code>.vacation</code> is pretty grim, and you have to be careful not to set up some sort of nightmarish positive-feedback loop and bring down a server.</p>
<p>It occurred to me that it would be nice for subscription management systems to let you unsubscribe for a bit. The idea is that you&#8217;d let them tick a box at the point of unsubscription, and it would set a scheduled task to run in, say, two or three weeks&#8217; time and resubscribe them. That would in a sense trump all the current user experiences when it comes to making sure you&#8217;re absent from all your mailing lists for the vacation duration. It would be fairly easy to do, because after a prompt from cron on the right date it could pretty much run off all the existing subscription code by calling a URL internally (and hence not requiring CAPTCHA or validation).</p>
<p>And then I realised: the people who would best benefit from the functionality wouldn&#8217;t even think to look for it. They&#8217;d just keep on telling all their fellow readers that they want to unsubscibe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2007/12/17/unsubscibe-me-form-this-maling-list-for-a-bit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Distributed FM radio from a single digital signal</title>
		<link>http://www.jpstacey.info/blog/2007/11/25/distributed-fm-radio-from-a-single-digital-signal/</link>
		<comments>http://www.jpstacey.info/blog/2007/11/25/distributed-fm-radio-from-a-single-digital-signal/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 14:57:48 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

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

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

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

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

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://www.jpstacey.info/blog/2007/11/25/distributed-fm-radio-from-a-single-digital-signal/</guid>
		<description><![CDATA[There&#8217;s currently no plan to switch off FM stations. In fact, many radio bosses have said oh, for heaven&#8217;s sake to the very idea. There is, astonishingly, less of a plan for radio switchover than there is desire among the general public for TV switchover. So that must be some sort of record for nothingness.
Seriously: [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s currently <a href="http://www.frequencycast.co.uk/godigital.html">no plan to switch off FM stations</a>. In fact, many radio bosses have said <a href="http://www.guardian.co.uk/media/2004/jul/08/radio">oh, for heaven&#8217;s sake</a> to the very idea. There is, astonishingly, less of a plan for radio switchover than there is desire among the general public for TV switchover. So that must be some sort of record for nothingness.</p>
<p>Seriously: who among us is just itchy and fidgety, waiting for analogue TV signals to be switched off? Who wakes up of a morning thinking, ooh, Whitehaven have to buy Freeview boxes now! with a frisson of glee? Radio switchover would be even more disastrous, of course: whereas TVs normally have a gap between themselves and an aerial into which to insert a Freeview box and convert digital to analogue, most radios are monolithic: receiver, &#8220;decoder&#8221; and audio equipment all together. That means that the average of five radios per household would be simply landfill material, useless fizzing boxes capable of picking up nothing but static. Future generations will already find a sliver in the geological strata that they can classify as &#8220;analogue to digital&#8221;; FM switchoff would add a shiny, plasticky laminate to that layer.</p>
<p>Here&#8217;s a thought, though: how about a little digital-to-analogue converter for radio? It could be the size and construction of, say, a <a href="http://www.fon.com/">Fon</a>, and configurable over USB. It would transmit FM in the style of an <a href="http://en.wikipedia.org/wiki/ITrip">iTrip</a> to fill perhaps the room it&#8217;s kept in, plus neighbouring rooms. It could transmit multiple FM stations at the same time, and even mimic the frequencies of the analogue stations (if they were ever, say, switched off without anyone wanting them to be: God forbid!)</p>
<p>But what if your converter&#8217;s chosen frequencies conflict with next door? FM transmission depends on phase coherence, so even if your two boxes were within an electronic ace of each other frequency-wise, they&#8217;d still interfere with each other and cause all sorts of beating, flangeing and other dirtily-named auditory confusion. At least when someone passes you on the motorway and their phat BMW iPod transmitter briefly swamps yours then they&#8217;re gone quickly, hopefully to come to some sort of messy grief on the next bend. But if you&#8217;re stuck near someone who permanently foxes your radio listening&#8212;and it would only take maybe three or four such converters for a conflict to be inevitable in the narrow FM band&#8212;then what do you do?</p>
<p>Answer: <em>let the converter boxes know how to talk to each other</em>. Let them negotiate their frequency spreads. Let them, moreover, report back to you over what sort of understandings you and your neighbour&#8217;s radios can come to. Let them synchronize, if possible, on stations you both want to listen to, strengthening the signal and meaning both of your houses are entirely covered by the FM cloud. Exploit, don&#8217;t squash, the wisdom of the group.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2007/11/25/distributed-fm-radio-from-a-single-digital-signal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OpenSSH, Ubuntu popups and IPv6</title>
		<link>http://www.jpstacey.info/blog/2007/07/16/openssh-ubuntu-popups-and-ipv6/</link>
		<comments>http://www.jpstacey.info/blog/2007/07/16/openssh-ubuntu-popups-and-ipv6/#comments</comments>
		<pubDate>Mon, 16 Jul 2007 10:06:14 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

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

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://www.jpstacey.info/blog/2007/07/16/openssh-ubuntu-popups-and-ipv6/</guid>
		<description><![CDATA[I have a couple of on-login tasks doing various distributed office jobs for me: one brought in all the networked drives from machines in this and the other office; the other backed up my locally stored email to the office server. Because my work rarely spans offices I don&#8217;t pay much attention to the former; [...]]]></description>
			<content:encoded><![CDATA[<p>I have a couple of on-login tasks doing various distributed office jobs for me: one brought in all the networked drives from machines in this and the other office; the other backed up my locally stored email to the office server. Because my work rarely spans offices I don&#8217;t pay much attention to the former; I pay even less to the latter. For various reasons I&#8217;m using ssh to make these connections&#8212;sshfs and duplicity over ssh, respectively&#8212;and I&#8217;ve found it easy enough to set up using keys on the two servers in <code>~/.ssh/authorized_keys</code> .</p>
<p>Until very recently all seemed to be going well with these two jobs, until I suddenly found a rash of OpenSSH popups appearing as Ubuntu struggled in the face of them to start. Often enough of them would appear that GNOME would panic and warn me that my keyboard might have been taken over by, I don&#8217;t know, aliens, or lolcats.</p>
<p>It turned out that my machine was presenting itself as IPv6-addressed to one server, on which the authorised key was only set up with the domain name and IPv4 expected values. This was quick to fix: I added the IPv6 address to the entry in authorized_keys and hey! presto, the automated tasks are now running with nary a whisper.</p>
<p>What&#8217;s more worrying is that, from the looks of my mail backups, they haven&#8217;t run since March. Presumably it&#8217;s only been a recent update to ssh on Ubuntu that has directed these password requests to the screen: until now they were probably being lost to /dev/null . So a change that I initially thought was a pain and had reconfigured what ssh was declaring was my machine&#8217;s IP address, could actually just have been a tightening-up of the error reporting; in the end I was very glad ssh had annoyed me so much, as the annoyance has potentially saved my email backups.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2007/07/16/openssh-ubuntu-popups-and-ipv6/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New version of rmrip</title>
		<link>http://www.jpstacey.info/blog/2007/02/25/new-version-of-rmrip/</link>
		<comments>http://www.jpstacey.info/blog/2007/02/25/new-version-of-rmrip/#comments</comments>
		<pubDate>Sun, 25 Feb 2007 18:47:52 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://www.jpstacey.info/blog/2007/02/25/new-version-of-rmrip/</guid>
		<description><![CDATA[Following user requests, I&#8217;ve uploaded a new version of rmrip which takes a command-line argument specifying your configuration file:
./rmrip.py foo.conf

As the user himself implied, this has the added bonus of making it more crontab-friendly e.g. you can have a crontab entry saying:
0 2 * * 2 $HOME/rmrip/rmrip.py tuesday.conf

You can download rmrip as before from http://www.jpstacey.info/blog/files/code/rmrip.tgz. [...]]]></description>
			<content:encoded><![CDATA[<p>Following user requests, I&#8217;ve uploaded a new version of <a href="/blog/2006/12/06/realplayer-to-mp3-a-configurable-python-wrapper/">rmrip</a> which takes a command-line argument specifying your configuration file:</p>
<blockquote class="code"><p>./rmrip.py foo.conf</p>
</blockquote>
<p>As the user himself implied, this has the added bonus of making it more <a href="http://tldp.org/LDP/lame/LAME/linux-admin-made-easy/using-cron.html" title="Automating Tasks with Cron and Crontab files">crontab</a>-friendly e.g. you can have a crontab entry saying:</p>
<blockquote class="code"><p>0 2 * * 2 $HOME/rmrip/rmrip.py tuesday.conf</p>
</blockquote>
<p>You can download rmrip as before from <a href="http://www.jpstacey.info/blog/files/code/rmrip.tgz">http://www.jpstacey.info/blog/files/code/rmrip.tgz</a>. Thanks to <a href="http://www.bargolf.net">Matt</a> for the idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2007/02/25/new-version-of-rmrip/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installing on the Edge</title>
		<link>http://www.jpstacey.info/blog/2007/01/09/installing-on-the-edge/</link>
		<comments>http://www.jpstacey.info/blog/2007/01/09/installing-on-the-edge/#comments</comments>
		<pubDate>Tue, 09 Jan 2007 21:41:29 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

		<category><![CDATA[0&#215;8004041B]]></category>

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

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

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

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

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

		<category><![CDATA[raiser&#8217;s edge]]></category>

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

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

		<guid isPermaLink="false">http://www.jpstacey.info/blog/2007/01/09/installing-on-the-edge/</guid>
		<description><![CDATA[Happy new year, all. A short and relatively under-researched one to kick off 2007, as I&#8217;m suddenly very busy with multiple projects. Just to keep those Google fires burning&#8230;.
I&#8217;m currently taking over a maintenance project from a co-worker. The architecture in question integrates our CMS with Raiser&#8217;s Edge, the charity-oriented system from Blackbaud for tracking [...]]]></description>
			<content:encoded><![CDATA[<p>Happy new year, all. A short and relatively under-researched one to kick off 2007, as I&#8217;m suddenly very busy with multiple projects. Just to keep those Google fires burning&#8230;.</p>
<p>I&#8217;m currently taking over a maintenance project from a co-worker. The architecture in question integrates our CMS with <a href="http://www.blackbaud.com/products/fundraising/raisersedge.aspx">Raiser&#8217;s Edge</a>, the charity-oriented system from <a href="http://www.blackbaud.com/">Blackbaud</a> for tracking people, their donations, gifts, bequests etc. It&#8217;s a comprehensive but sprawling system, and because of licence limitations all data changes have to go through their equally sprawling API.</p>
<p>A prerequisite of development is that I install the RE client libraries on my machine: actually inside a Windows virtual machine sitting on my Linux box. The first time I tried this, it was over our between-offices ADSL line. That wasn&#8217;t terribly successful, owing to the enormous <code>.cab</code> archives included in the distribution. In fact, even stopping it half-way was unsuccessful because of the network delay, so the process had to be killed.</p>
<p>Unfortunately this meant that a later attempt at installation off a CD failed. The error report was, unhelpfully:</p>
<blockquote class="code"><p>
Error<br />
Error Number: 0&#215;8004041B<br />
Description: Unknown Error<br />
Setup will now terminate
</p>
</blockquote>
<p>There&#8217;s no clue as to what spoor the previous installation has left behind, nor is there any suggestion of what I might do to fix the problem. Although I&#8217;ve since found a solution for the error via Google, I thought it might be good to post it here, along with a possible reason for the error in the first place. Some of the reports of the solution are behind Blackbaud&#8217;s login system; <a title="Common Installation Errors for Raiser's Edge" href="http://kb.seattleu.edu/oit/Article.aspx?id=10097&#38;cNode=7P2D3M">some of them</a> are on web feeds that might expire.</p>
<p>The registry key stores something to do with the date that you&#8217;re making the installation. To resolve the error, set your computer&#8217;s&#x2014;or your virtual machine&#8217;s&#x2014;clock to January 31, 2006. It probably needs to just be set in the past, but that suggestion worked. Once you&#8217;ve changed the clock, perform the install, which ought to go without a hitch. Afterwards, reset the clock to whatever the current date might be.</p>
<p>Why the error popup couldn&#8217;t just say that, I don&#8217;t know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2007/01/09/installing-on-the-edge/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Realplayer to mp3: a configurable Python wrapper</title>
		<link>http://www.jpstacey.info/blog/2006/12/06/realplayer-to-mp3-a-configurable-python-wrapper/</link>
		<comments>http://www.jpstacey.info/blog/2006/12/06/realplayer-to-mp3-a-configurable-python-wrapper/#comments</comments>
		<pubDate>Wed, 06 Dec 2006 20:55:14 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://www.jpstacey.info/blog/2006/12/06/realplayer-to-mp3-a-configurable-python-wrapper/</guid>
		<description><![CDATA[It&#8217;s one of the worst-kept tech secrets in the world, but Real Audio streams can be downloaded using software such as mplayer and then converted to MP3 format with lame. Both of these are available in Ubuntu using the non-Ubuntu package manager Automatix. The possibility of doing this conversion implies that, although the BBC offer [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s one of the worst-kept tech secrets in the world, but Real Audio streams can be downloaded using software such as <code>mplayer</code> and then converted to MP3 format with <code>lame</code>. Both of these are available in Ubuntu using the non-Ubuntu package manager <a href="http://www.getautomatix.com/">Automatix</a>. The possibility of doing this conversion implies that, although the BBC offer all their programs in Real Audio and only a few as podcasts, you can in principle put any you like on your portable music device.</p>
<p>Similar solutions abound on the web: Tom Taylor has <a title="How to rip BBC radio streams to MP3" href="http://www.tomtaylor.co.uk/blog/2006/09/01/how-to-rip-bbc-radio-streams-to-mp3/">a method involving <code>mencoder</code></a>; other methods can be found <a title="Convert Real Audio to mp3" href="http://www.macosxhints.com/article.php?story=20050130184054216">all over the place</a>. However, these all involve a bit of <i>ad hoc</i> command-line intervention, or scripts which aren&#8217;t terribly configurable. There are GUI and proprietary commands, but they tend not to offer great support for command-line and therefore scheduled operation.</p>
<p>I&#8217;ve knocked together a Python application called <code>rmrip</code>: it&#8217;s available in a tar file from <a href="http://www.jpstacey.info/blog/files/code/rmrip.tgz">http://www.jpstacey.info/blog/files/code/rmrip.tgz</a>. If you unzip this to a directory you&#8217;ll find a number of <code>.py</code> files and a <code>config.conf</code> configuration file. Edit <code>config.conf</code> to match your system requirements and stream preferences, make sure <code>rmrip.py</code> is executable, then run it. mp3s should eventually appear in a subdirectory called YYYYMMDD unless you configure the system otherwise.</p>
<p>The application can in principle be run from a cronjob, so it could tick over late at night when everyone&#8217;s internet is otherwise nice and quiet. In addition, conversion works via a <a href="">named pipe</a>, which is a funky way of piping the intermediary, enormous <code>.wav</code> audio file straight into <code>lame</code>, rather than saving it to disk. This does unfortunately restrict the application to non-Windows machines, but it&#8217;s a great help for audiophiles with limited disk space: <code>.ra</code> and <code>.mp3</code> files can be in the hundreds of megabytes for many-hour programmes, but the associated <code>.wav</code> would take up gigabytes.</p>
<p>Current requirements include (please give any feedback on this!):</p>
<ul>
<li><code>mplayer</code> and <code>lame</code>: their locations are configurable</li>
<li>The <code>subprocess</code> module in Python</li>
</ul>
<p>Current file types supported:</p>
<ul>
<li>Direct rtsp://&#8230;.ra Real Audio stream links</li>
<li>http://&#8230;.ram references to Real Audio streams</li>
<li>http://&#8230;.rpm Real Audio playlists (BBC so far only format tested)</li>
</ul>
<p>To get you started, <a href="http://dave.org.uk/">dave.org.uk</a> has provided information on <a href="http://dave.org.uk/streams">how to get stream information</a> using a standalone Python program, and also has potentially out-of-date static pages detailing the current BBC streams.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2006/12/06/realplayer-to-mp3-a-configurable-python-wrapper/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dual-head on collision</title>
		<link>http://www.jpstacey.info/blog/2006/07/21/dual-head-on-collision/</link>
		<comments>http://www.jpstacey.info/blog/2006/07/21/dual-head-on-collision/#comments</comments>
		<pubDate>Fri, 21 Jul 2006 14:35:16 +0000</pubDate>
		<dc:creator>jps</dc:creator>
		
		<category><![CDATA[configuration]]></category>

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

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

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

		<category><![CDATA[dual-head]]></category>

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

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

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

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

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

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

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

		<category><![CDATA[xorg.conf]]></category>

		<guid isPermaLink="false">http://www.jpstacey.info/blog/2006/07/21/dual-head-on-collision/</guid>
		<description><![CDATA[One of the last tasks that moving to my new machine involves is to stretch the Ubuntu desktop across both of my monitors. Our sysadmin had very kindly set it up to work with the monitor card integral to the motherboard, so in principle I only had to tweak the configuration for X, the standard [...]]]></description>
			<content:encoded><![CDATA[<p>One of the last tasks that moving to my new machine involves is to stretch the <a title="Ubuntu Linux - for human beings" href="http://www.ubuntu.com/">Ubuntu </a>desktop across both of my monitors. <a title="Sysadmin whizz, OpenStreetMap fetishist" href="http://gagravarr.livejournal.com/">Our sysadmin</a> had very kindly set it up to work with the monitor card integral to the motherboard, so in principle I only had to tweak the configuration for X, the standard Linux GUI system.</p>
<p>Could I get this to work? Could I hell. xorg.conf configuration after configuration threw the error</p>
<blockquote class="code"><p>(WW) MGA: No matching Device section for instance (BusID PCI:5:0:0) found</p>
</blockquote>
<p>Once in a while there was a flicker from X. A couple of times my machine returned to its text-only state with text on both monitors. So something was happening, but not even the same thing every time.</p>
<p>Eventually, I began to grow suspicious. I finally did what I probably ought to have done earlier and read the <a title="Man(ual) pages, Linux's elderly help system" href="http://www.cs.mcgill.ca/~guide/help/man.html">man page</a> for xorg.conf. Yeah, I realise: RTFM; but when the X system seems to be both spread over so many different programs and also quite different from the old pre-Xorg layout that I remember, it&#8217;s difficult to second-guess which files will have man pages named after them and which won&#8217;t.</p>
<p>After some hunting, the following caught my eye:</p>
<blockquote><p>When  the  Xorg  server  is started by the &#8220;root&#8221; user, the config file search locations are as follows:</p>
<p>&#8230;<br />
$HOME/xorg.conf</p>
</blockquote>
<p>That&#8217;s it. I&#8217;d left an old xorg.conf hanging around in /root/, and being calledâ€”depending on how I instantiated my X session, and hence apparently not repeatablyâ€”in preference to the &#8220;standard&#8221; one in /etc/X11. So if I used the init.d script to start gdm it would ignore the dud xorg.conf; if I ran X or startx it wouldn&#8217;t; but if I then specified <code>-config /etc/X11/xorg.conf</code> on the command line I&#8217;d get flickers and pops from my monitors again. Sigh.</p>
<p>So, my rather ludicrous, meandering experiences aside, these are my humble recommendations for anyone trying to get similar hardware to mine working. I&#8217;m running <a title="Codename for Ubuntu Linux v6.06" href="http://www.ubuntu.com/download/releasenotes/606">Dapper Drake</a> <a title="Ubuntu - Linux for humans" href="http://www.ubuntu.com/">Ubuntu</a> including Xorg 7.0.0 on a dual-core 2&#215;3.0GHz <a title="Dell Computers" href="http://www.dell.com">Dell</a> <a title="Standard business computer from Dell" href="http://www1.euro.dell.com/content/products/productdetails.aspx/optix_gx520?c=uk&#38;l=en&#38;s=bsd&#38;cs=ukbsdt1">Optiplex GX520</a> with 1GB RAM and oh, so many GB HD. The monitor card is a Matrox G450 (VGA + DVI sockets), and with malice aforethought I&#8217;d probably install a similar-looking system as follows:</p>
<ol>
<li>Start X, wherever possible, using <code>/etc/init.d/gdm (re)start</code>. This prevents loading any <strong>stray xorg.conf files</strong>. Also, just don&#8217;t leave them lying around with the name xorg.conf!</li>
<li><code>sudo dpkg-reconfigure -phigh xserver-xorg</code> can be handy to <strong>version</strong> <code>/etc/X11/xorg.conf</code>, as it re-parses it to make sense for dpkg-reconfigure and saves the old version. Be aware that reparsing might modify any weird configuration that dpkg-reconfigure doesn&#8217;t understand.</li>
<li>Avoid older Matrox cards, such as the G200 or G250, for purely physical reasons: they don&#8217;t fit in some of the smaller Dell boxes.</li>
<li><strong>Matrox drivers </strong>come with Xorg 7.0.0, although I used <a title="Matrox drivers for the MGA G450 dual-head card" href="http://matrox.com/mga/support/drivers/files/lnx_43.cfm">Matrox&#8217;s own drivers</a> for reasons of not knowing beforehand. Given most people recommend the stability of former set of drivers, it looks like either might do.</li>
<li>Run <code>lspci</code> to see which location on the PCI bus is occupied by the Matrox card. The output lines begin with numbers like &#8220;0000:05:00.0&#8243;: these correspond to PCI addresses e.g. a <strong>BusID</strong> setting in xorg.conf of &#8220;PCI:5:0:0&#8243; in this case. I&#8217;ve read in some places that xorg.conf sometimes wants extra zeroes e.g. &#8220;PCI:05:0:0&#8243;, but I&#8217;ve not noticed that behaviour.</li>
<li>In xorg.conf, you&#8217;ll need <strong>two</strong> device entries, <strong>two</strong> screen entries and <strong>two</strong> monitor entries. You can get away with one monitor entry if both your monitors are the same, but two will future-proof you against any modifications to your hardware.</li>
<li>The G450, unlike some cards, only occupies <strong>one PCI address</strong>. This means you&#8217;ll need the &#8220;Screen 0&#8243; and &#8220;Screen 1&#8243; attributes to differentiate your two Device entries in xorg.conf</li>
<li>There are <strong>other options </strong>like Xinerama (standard multiple-head management drivers) that you ought to switch on, but without these X will at least recognise your monitors are there.</li>
<li>Screen sizes, sync rates etc. should be set <strong>conservatively </strong>at first: with most modern monitors you can probably leave sync rates out, but <em>caveat lector</em>: it&#8217;s possible to explode old monitors using funny sync settings.</li>
<li>For reference, my xorg.conf is available at  <a title="xorg.conf for a dual-head Ubuntu system" href="http://www.jpstacey.info/blog/files/code/xorg.conf">http://www.jpstacey.info/blog/files/code/xorg.conf</a>. Obviously check the sync and resolution settings with the above <em>caveat</em>, but you should only need to modify this slightly for your own setup, if the hardware is at all similar.</li>
</ol>
<p>The system works fine; really well, in fact. My old machine was dual-head, but it&#8217;s easy to get used to slowness caused (in that case) by the processing power of the machine and not realise those shackled were present. The graphics on this machine have a kind of OSX slickness to them that I&#8217;m still a little dazzled by. Now, if only I can get it to swap to kubuntu; gnome&#8217;s big buttons and stultified interface always remind me of primary school.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jpstacey.info/blog/2006/07/21/dual-head-on-collision/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
