Perlanet-0.56000755023422023422 011731176247 12250 5ustar00davedave000000000000Perlanet-0.56/README000444023422023422 272611731176247 13274 0ustar00davedave000000000000 Perlanet -------- NAME Perlanet DESCRIPTION WHAT IS Perlanet? Perlanet is a Perl module for aggregating web feeds. It allows you to aggregate a number of web feeds (both Atom and RSS) and to publish a web page and another web feed containing the aggregated content. HOW DO I INSTALL IT? Perlanet uses the standard Perl module architecture and can therefore by installed using the standard Perl method which, in brief, goes something like this: gzip -cd Perlanet-X.XX.tar.gz | tar xvf - cd Perlanet-X.XX perl Build.PL ./Build ./Build test ./Build install Where X.XX is the version number of the module which you are installing. You can also install it using either the 'cpan' or 'cpanp' command line programs. WHERE IS THE DOCUMENTATION? All of the documentation is in POD format. The most useful documentation is included with the 'perlanet' program that is part of this distributions. If you install the module using the standard method you should be able to read it by typing perldoc perlanet at a comand prompt. LATEST VERSION The latest version of this module will always be available from CPAN. COPYRIGHT Copyright (C) 2008, Magnum Solutions Ltd. All Rights Reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. ANYTHING ELSE? If you have any further questions, please contact the author. AUTHOR Dave Cross Perlanet-0.56/Build.PL000444023422023422 375211731176247 13710 0ustar00davedave000000000000use strict; use warnings; use Module::Build; my $build = Module::Build->new( license => 'perl', dist_author => 'Dave Cross ', module_name => 'Perlanet', requires => { 'perl' => '5.6.0', 'Encode' => 0, 'List::Util' => 0, 'URI::Fetch' => 0, 'XML::Feed' => '0.22', 'Template' => 0, 'DateTime' => 0, 'DateTime::Duration' => 0, 'YAML' => 0, 'HTML::Tidy' => 0, 'HTML::Scrubber' => 0, 'Moose' => 0, 'Try::Tiny' => 0, 'MooseX::Traits' => 0, }, recommends => { 'CHI' => 0, 'Compress::Zlib' => 0, 'XML::OPML::SimpleGen' => 0, 'MooseX::ConfigFromFile' => 0, }, build_requires => { 'Test::More' => 0, 'File::Path' => 0, 'MooseX::ConfigFromFile' => 0, }, build_recommends => { 'Test::Pod' => 0, 'Test::Pod::Coverage' => 0, }, create_makefile_pl => 'traditional', script_files => [ 'bin/perlanet' ], meta_merge => { resources => { repository => "git://github.com/davorg/perlanet.git", homepage => "http://code.mag-sol.com/Perlanet/", MailingList => "http://lists.mag-sol.com/mailman/listinfo/perlanet", }, keywords => [ qw( aggregate aggregator atom feed planet rss xml ), ], }, ); $build->create_build_script; Perlanet-0.56/META.json000444023422023422 615211731176247 14032 0ustar00davedave000000000000{ "abstract" : "A program for creating programs that aggregate web feeds (both\nRSS and Atom).", "author" : [ "Dave Cross " ], "dynamic_config" : 1, "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112621", "keywords" : [ "aggregate", "aggregator", "atom", "feed", "planet", "rss", "xml" ], "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "Perlanet", "prereqs" : { "build" : { "requires" : { "File::Path" : 0, "MooseX::ConfigFromFile" : 0, "Test::More" : 0 } }, "configure" : { "requires" : { "Module::Build" : "0.38" } }, "runtime" : { "recommends" : { "CHI" : 0, "Compress::Zlib" : 0, "MooseX::ConfigFromFile" : 0, "XML::OPML::SimpleGen" : 0 }, "requires" : { "DateTime" : 0, "DateTime::Duration" : 0, "Encode" : 0, "HTML::Scrubber" : 0, "HTML::Tidy" : 0, "List::Util" : 0, "Moose" : 0, "MooseX::Traits" : 0, "Template" : 0, "Try::Tiny" : 0, "URI::Fetch" : 0, "XML::Feed" : "0.22", "YAML" : 0, "perl" : "v5.6.0" } } }, "provides" : { "Perlanet" : { "file" : "lib/Perlanet.pm", "version" : "0.56" }, "Perlanet::Entry" : { "file" : "lib/Perlanet/Entry.pm", "version" : 0 }, "Perlanet::Feed" : { "file" : "lib/Perlanet/Feed.pm", "version" : 0 }, "Perlanet::Simple" : { "file" : "lib/Perlanet/Simple.pm", "version" : 0 }, "Perlanet::Trait::Cache" : { "file" : "lib/Perlanet/Trait/Cache.pm", "version" : 0 }, "Perlanet::Trait::FeedFile" : { "file" : "lib/Perlanet/Trait/FeedFile.pm", "version" : 0 }, "Perlanet::Trait::OPML" : { "file" : "lib/Perlanet/Trait/OPML.pm", "version" : 0 }, "Perlanet::Trait::Scrubber" : { "file" : "lib/Perlanet/Trait/Scrubber.pm", "version" : 0 }, "Perlanet::Trait::TemplateToolkit" : { "file" : "lib/Perlanet/Trait/TemplateToolkit.pm", "version" : 0 }, "Perlanet::Trait::Tidy" : { "file" : "lib/Perlanet/Trait/Tidy.pm", "version" : 0 }, "Perlanet::Trait::YAMLConfig" : { "file" : "lib/Perlanet/Trait/YAMLConfig.pm", "version" : 0 } }, "release_status" : "stable", "resources" : { "homepage" : "http://code.mag-sol.com/Perlanet/", "license" : [ "http://dev.perl.org/licenses/" ], "repository" : { "url" : "git://github.com/davorg/perlanet.git" }, "x_MailingList" : "http://lists.mag-sol.com/mailman/listinfo/perlanet" }, "version" : "0.56" } Perlanet-0.56/Changes000444023422023422 4341211731176247 13724 0ustar00davedave0000000000002012-03-17 Dave Cross * Build.PL, lib/Perlanet.pm: Switched from using TryCatch to Try::Tiny. Bumped version for release. 2012-03-14 Dave Cross * lib/Perlanet.pm: Bump version number for release. * Build.PL: Make MooseX::ConfigFromFile required for build (as it's used in the tests) * MANIFEST: Add META.json to MANIFEST. 2011-02-22 Dave Cross * lib/Perlanet.pm: Bump version for release. * lib/Perlanet/Trait/OPML.pm, t/01_basic.t: Fix support for OPML generation (make it _really_ optional). 2010-11-04 Dave Cross * lib/Perlanet.pm: Bump to version 0.53 for release. * t/pod_coverage.t: Added more subroutines to be skipped in the pod coverage tests. 2010-08-26 Dave Cross * lib/Perlanet/Entry.pm, lib/Perlanet/Feed.pm, lib/Perlanet/Trait/Cache.pm, lib/Perlanet/Trait/FeedFile.pm, lib/Perlanet/Trait/OPML.pm, lib/Perlanet/Trait/Scrubber.pm, lib/Perlanet/Trait/TemplateToolkit.pm, lib/Perlanet/Trait/Tidy.pm, lib/Perlanet/Trait/YAMLConfig.pm: Added 'use strict' and 'use warnings' to all modules. 2010-08-23 Dave Cross * lib/Perlanet.pm: Bump version number. * lib/Perlanet/Trait/TemplateToolkit.pm: Pass the whole Perlanet object to the template in a variable called 'cfg'. * lib/Perlanet/Feed.pm: Renamed the 'website' attribute to 'web' (in line with old config files). * lib/Perlanet.pm: Improved reporting for HTTP errors. 2010-08-22 Dave Cross * lib/Perlanet.pm: Bumped to version 0.51. Fixing more problems. * MANIFEST: Added more data files to MANIFEST * MANIFEST, t/04_mps.t, t/data/stevebaker.xml, t/data/talkcarswell.xml, t/mprc: Added some more tests. * lib/Perlanet/Trait/Tidy.pm: Minor reformatting. * lib/Perlanet.pm: Refactoring clean_entries method. * lib/Perlanet/Trait/YAMLConfig.pm: Documentation typo. * lib/Perlanet.pm: Fixed documentation. * lib/Perlanet/Trait/OPML.pm: Fixed broken OPML handling. * t/testrc: Added 'entries_per_feed' config option for tests. * lib/Perlanet.pm: Correct typo * MANIFEST, t/02_phases.t: Added tests for individual phases of the process. 2010-08-21 Dave Cross * lib/Perlanet.pm: Reinstating the "entries_per_feed" support. Not sure when it went missing. Renaming more config settings back to what they should be. * lib/Perlanet/Trait/OPML.pm: Fixed names of the attributes. * t/01_basic.t: Changed calls to reflect corrected config names. * lib/Perlanet.pm: Fix typo. * t/testrc: Fix config format. * lib/Perlanet/Simple.pm: Reformatting. * lib/Perlanet.pm: Bump to version 0.50. * lib/Perlanet/Simple.pm, lib/Perlanet/Trait/Cache.pm, lib/Perlanet/Trait/FeedFile.pm, lib/Perlanet/Trait/OPML.pm, lib/Perlanet/Trait/Scrubber.pm, lib/Perlanet/Trait/TemplateToolkit.pm, lib/Perlanet/Trait/Tidy.pm, lib/Perlanet/Trait/YAMLConfig.pm: Minor reformatting. * lib/Perlanet.pm: Reformatting. * lib/Perlanet.pm: Refactored the calls in the main run method. Now they seem to work. * t/testrc: Changes to reflect the new format for author details. 2010-08-19 Dave Cross * bin/perlanet, lib/Perlanet.pm, lib/Perlanet/Trait/FeedFile.pm, lib/Perlanet/Trait/TemplateToolkit.pm: Attempting to get perlanet comment-line program working again. 2010-08-18 Dave Cross * MANIFEST: Added missing files. * bin/perlanet: Command line program now uses Perlanet::Simple rather than Perlanet. * lib/Perlanet.pm: Bump to version 0.47 for release. * lib/Perlanet/Simple.pm: Fixed called to 'agent' method. Removed nasty typo. * lib/Perlanet.pm: Added 'agent' to list of attributes. * t/01_basic.t: Minor reformatting. * t/testrc: Renamed opml attribute to opml_file. * lib/Perlanet.pm: Better error reporting on XML parsing failures. 2010-07-18 Oliver Charles * lib/Perlanet/Simple.pm, lib/Perlanet/Trait/FeedFile.pm, lib/Perlanet/Trait/Scrubber.pm, lib/Perlanet/Trait/TemplateToolkit.pm, lib/Perlanet/Trait/Tidy.pm, lib/Perlanet/Trait/YAMLConfig.pm: 100% POD coverage * Build.PL: MooseX::ConfigFromFile is required for tests 2010-06-08 Oliver Charles * lib/Perlanet.pm: Be less strict about what properties the output feed must have 2010-06-06 Oliver Charles * lib/Perlanet/Simple.pm: Fix POD syntax errors * Build.PL: Update Build.PL with new dependencies * lib/Perlanet.pm, lib/Perlanet/Simple.pm, lib/Perlanet/Trait/YAMLConfig.pm, t/02_basic.t, t/03_noconf.t, t/04_moose_constr.t, t/05_cache.t: Pass all tests I have removed some fairly redundant tests for now. Now that Perlanet is much more segmented we need to rewrite these tests to do some *real* testing - but at least this gets us a green light for now. 2010-06-03 Oliver Charles * lib/Perlanet.pm, lib/Perlanet/Trait/Scrubber.pm, lib/Perlanet/Trait/Tidy.pm: Slightly change the procedure for cleaning IronMan needs the uncleaned posts and the cleaned posts. This allows us to by default clean all posts, but IronMan can take out the clean_entries routine and run clean_html itself * lib/Perlanet.pm, lib/Perlanet/Simple.pm, lib/Perlanet/Trait/Cache.pm, lib/Perlanet/Trait/FeedFile.pm, lib/Perlanet/Trait/OPML.pm, lib/Perlanet/Trait/Scrubber.pm, lib/Perlanet/Trait/TemplateToolkit.pm, lib/Perlanet/Trait/Tidy.pm, lib/Perlanet/Trait/YAMLConfig.pm, t/01_basic.t, t/testrc: Split more things up into traits. Improved some docs too * lib/Perlanet.pm: Removed any reference of cfg from core Perlanet * lib/Perlanet.pm, lib/Perlanet/Simple.pm: Drastically simplified run in Perlanet to act like a pipeline. The process now takes a list of original feeds, finds valid ones, selects entries, sorts and filters them, cleans them, then renders them. The original behaviour of each of these steps has moved to Perlanet::Simple * lib/Perlanet.pm, lib/Perlanet/Simple.pm, lib/Perlanet/Trait/Cache.pm, lib/Perlanet/Trait/OPML.pm, t/01_basic.t: Begin work separating Perlanet. Currently, Perlanet does too much work, which is making it hard to use for other uses (ie, IronMan). I have started splitting this apart into traits (OPML generation, caching) and a new Perlanet::Simple module that is mostly a DWIM-from-config module to do what Perlanet currently does. This turns the main Perlanet into a pretty dumb module, that's mostly a pipeline of fetch posts, clean them, and then do something with them - it's up to subclasses or roles to decide what each of these steps actually means. 2010-04-25 Dave Cross * lib/Perlanet.pm: Fix typo. * lib/Perlanet.pm: Bump to version 0.46. 2010-04-19 Dave Cross * lib/Perlanet/Entry.pm: Add 'author' to the list of fields that Perlanet::Entry delegates to XML::Feed::Entry. 2010-03-05 Dave Cross * lib/Perlanet.pm: Removed unnecessary 'or next' logic. 2010-01-05 Dave Cross * lib/Perlanet.pm: Fix the (horribly broken) entries_per_feed code. Bump to version 0.45. * lib/Perlanet.pm, lib/Perlanet/Entry.pm: Perlanet::Entry also delegates the link method to XML::Feed::Entry. Bump version to 0.44. * lib/Perlanet.pm: Don't ignore the sorted list of entries - it's there for a reason :-/ Bumped to version 0.43. * t/05_cache.t: Fixed the previous fix. * Build.PL, t/05_cache.t: Add File::Path to build requirements. Ensure cache is deleted at start of caching test. * MANIFEST, lib/Perlanet.pm, t/05_cache.t, t/cacherc, t/perlanetrc: Found a bug in caching support. Added a test and fixed bug. Bumped to version 0.42. 2010-01-04 Dave Cross * MANIFEST: More stuff missing from MANIFEST * MANIFEST: Add missing tests to MANIFEST * MANIFEST, lib/Perlanet.pm: Fixed MANIFEST. Bumped version. * Build.PL, lib/Perlanet.pm: Pod fix * lib/Perlanet.pm: Bump to version 0.40 (coz there are some quite big changes). 2009-12-24 Dave Cross * lib/Perlanet.pm: Bit of code tidying (including taking some advice from Perl::Critic). * lib/Perlanet.pm: Merge documentation patches from Jess Robinson. 2009-12-13 Oliver Charles * lib/Perlanet.pm, lib/Perlanet/Entry.pm, lib/Perlanet/Feed.pm: Pass 100% of tests * lib/Perlanet.pm, lib/Perlanet/Entry.pm, lib/Perlanet/Feed.pm: Go back to 2 spaces for identing, like Dave Cross * lib/Perlanet.pm: Fixes to call to convert format * lib/Perlanet.pm, lib/Perlanet/Feed.pm: Perlanet::Entry to represent posts, with a back link to the feed * lib/Perlanet.pm, lib/Perlanet/Entry.pm: Represent entries as Perlanet::Entry objects * lib/Perlanet.pm: Split cleaning out to work as a function * lib/Perlanet.pm, lib/Perlanet/Feed.pm: * Introduced Perlanet::Feed object, which abstracts the "feeds" configuration option * select_entries now takes a list of feeds to fetch entries from * lib/Perlanet.pm: Flexible cutoff date * lib/Perlanet.pm: Refactor rendering and saving * lib/Perlanet.pm: Formatting stuff * lib/Perlanet.pm: Split out the cleaning stuff * lib/Perlanet.pm: Done sorting/grepping entries * lib/Perlanet.pm: Split out fetching a feed and selecting entries * lib/Perlanet.pm: Refactor body of run loop to fetch feeds 2009-11-23 Dave Cross * lib/Perlanet.pm: Bump to version 0.37. * lib/Perlanet.pm: Add support for HTTP proxy. 2009-10-28 Dave Cross * lib/Perlanet.pm: Version 0.34. 2009-10-15 Dave Cross * MANIFEST: Added t/data/davblog.xml to MANIFEST so the tests work as expected. 2009-10-14 Dave Cross * lib/Perlanet.pm: Oops. One too many entries. * lib/Perlanet.pm: Sort individual feed entries before selecting ones to use. Fix really stupid date sort bug. Version 0.35. 2009-10-14 Dave Cross * bin/perlanet, lib/Perlanet.pm: Fix former change. And document it. * lib/Perlanet.pm: Support an 'entries_per_feed' config option. 2009-10-12 Dave Cross * Build.PL, lib/Perlanet.pm, t/01_basic.t, t/04_moose_constr.t: Make XML::OPML::SimpleGen optional. * lib/Perlanet.pm: Version 0.34. * lib/Perlanet.pm: Really make CHI optional. 2009-10-11 Dave Cross * lib/Perlanet.pm: Bumped to version 0.33. * lib/Perlanet.pm: Fixed stupid error where feeds weren't getting processed if they returned a 304 status. * lib/Perlanet.pm, t/perlanetrc, t/testrc: Couple of typos fixed. More test fixes. * t/01_basic.t, t/02_basic.t, t/03_noconf.t, t/04_moose_constr.t, t/data/davblog.xml, t/perlanetrc, t/testrc: Work to improve test coverage. 2009-10-10 Dave Cross * lib/Perlanet.pm: Bump version to 0.32 * lib/Perlanet.pm: Work around bug in POSIX::setlocale. * lib/Perlanet.pm: Force config file to be opened as utf8 * bin/perlanet: Perltidied. * lib/Perlanet.pm: Fixed typo * Build.PL: Added Moose as a requirement. * lib/Perlanet.pm: Improved error handling (used Carp). 2009-10-07 Dave Cross * Build.PL: Added CHI to recommended modules. Moved Compress::ZLib to recommended modules. * lib/Perlanet.pm: Sort by modified, then issued dates. 2009-10-05 Dave Cross * lib/Perlanet.pm: Add newline to the end of 'warn' call. * bin/perlanet: Added usage and version command line options. * lib/Perlanet.pm: Only show LWP progress if attached to a console. Show status of request for everything other than success. Bump to version 0.31. * bin/perlanet: Add documentation of cache facility. 2009-10-04 Dave Cross * lib/Perlanet.pm: Decided to bump to 0.30 as it's quite a big change. * lib/Perlanet.pm: fix typo * Build.PL, lib/Perlanet.pm: Use a number of kappa's fixes * lib/Perlanet.pm: Bump version in preparation for next release. * lib/Perlanet.pm: Attempted XML::Aton Unicode fix. 2009-09-02 Dave Cross * lib/Perlanet.pm: Version 0.21. * MANIFEST: Added t/index.tt back into MANIFEST 2009-08-10 Dave Cross * lib/Perlanet.pm, t/pod_coverage.t: Initial port to Moose. 2009-06-21 Shlomi Fish * Build.PL: Added meta-resources and keywords. * Build.PL: Added strict and warnings to Build.PL. 2009-06-15 Dave Cross * lib/Perlanet.pm: Force TT output to utf8. 2009-06-14 Dave Cross * .gitignore, README, README.xml: Renamed README.xml to README. * lib/Perlanet.pm: Bump version number for release. * bin/perlanet, lib/Perlanet.pm: Fixed links to wiki * bin/perlanet, lib/Perlanet.pm: Typos in documentation 2009-04-28 Dave Cross * bin/perlanet: Corrected link to trac 2009-04-09 Dave Cross * t/01_basic.t, t/testrc: (Slightly) Better tests * .gitignore, t/index.tt: Adding .gitignore. * lib/Perlanet.pm: Moved opml initialisation into constructor. * lib/Perlanet.pm: Cleaned up code for dealing with extra entries. * lib/Perlanet.pm: Moved UA initialisation into constructor. 2009-04-07 Dave Cross * lib/Perlanet.pm: Only convert feeds if necessary. Use LWP::UserAgent instead of LWP::Simple. * bin/perlanet: Documented new 'agent' configuration option. * Build.PL: Removed unnecessary version string. Replace dependency on LWP::Simple with LWP::UserAgent. * t/testrc: Added agent string to test configuration 2008-10-23 Dave Cross * Build.PL: Requier version 0.22 of XML::Feed. * Build.PL: Bump version number for release * lib/Perlanet.pm: Fixes to make use of the code fixes in the recent releases of XML::Feed. This, in turn, means that we are now generating valid Atom feeds. Rah! 2008-09-29 Dave Cross * Build.PL: Bumped version number for release 0.07 2008-09-28 Alex Kapranoff * lib/Perlanet.pm: 1. Stop htmltidy from ruining entities. 2. Add title to OPML outline elements for compatibility. 2008-09-21 Dave Cross * Build.PL: Bumped version for new release. * MANIFEST: Added README and Changes to MANIFEST * README.xml: Added README.xml 2008-09-20 Dave Cross * Build.PL: Bumped version number. * bin/perlanet: Added a lot of documentation * lib/Perlanet.pm: Improved documentation. 2008-09-19 Dave Cross * Build.PL, MANIFEST: Bump version number (by 2). Added MANIFEST. * t/01_basic.t, t/testrc: Added a testrc and made t/01_basic.t look in the right place for it. * index.tt, perlanetrc: Moved some files around * examples/index.tt, examples/perlanetrc: Added examples directory * lib/Perlanet.pm: Added pod for the methods. * t/01_basic.t, t/pod.t, t/pod_coverage.t: Added (basic) tests * Build.PL, Makefile.PL: Switch from Makefile.PL to Build.PL * bin/perlanet, lib/Perlanet.pm, perlanet: First cut at separating most of the code out into a module * perlanet: Applying patches suggested by Alex Kapranoff. I think we're getting closer - but it's still not quite there. * Makefile.PL, index.tt, perlanet: Applied patch from Stephen Steneker. * Added Makefile.PL * Added Pod and tweaked perlanet * Added explicit charset meta element to HTML template * perlanetrc: Some changes to sample perlnetrc (now taken from planet skeptic) 2008-09-17 Dave Cross * perlanet: Remove unfinished 'decode' function. * perlanet: Remove decode call * perlanet: Add "use open" line to specify encoding. 2008-09-01 Dave Cross * perlanetrc: Changed author section of sample config file to reflect latest version. * perlanet: Huge bodge to work around XML::Feed's shortcomings and set the author element correctly. * perlanet: Decode the data as it comes into the program * perlanet: Remove id attributes from spans as they are very unlikely to remain unique 2008-08-29 Dave Cross * perlanet: Add the ability to generate OPML files. * perlanet: Make previous fix into a global replacement * perlanet: Nasty hack (which really don't like) to get round blogspot problem. * perlanet: Reverse order of HTML::Scrub and HTML::Tidy (scrub before tidy now) as HTML::Scrub seems to undo some of HTML::Tidy's good work. Possibly because the output I'm generating from HTML::Tidy is XHTML, not HTML. 2008-07-23 Dave Cross * perlanet: Pass $cfg to tt to enable increased cleverness in templates. * perlanet: Tweaks to allow style attributes in HTML. 2008-07-22 Dave Cross * perlanet: Allow align tags on images. 2008-04-06 Dave Cross * perlanet: Only show entries that are dated less than a week in the future. 2008-03-25 Dave Cross * perlanet: Corrected check for content type * perlanet: Process template in utf8 mode 2008-03-24 Dave Cross * perlanet: Added HTML::Scrubber support. Use 'min' rather than 'max' number of entries (d'oh!) * perlanet: Don't try to output more entries than you have. 2008-03-22 Dave Cross * perlanet: HTML::Tidy support now works correctly. * perlanet: Added support for HTML::Tidy 2008-03-17 Dave Cross * index.tt: Better HTML output. * perlanet: Better error checking. 2008-03-11 Dave Cross * perlanet: Ignore any feeds we can't retrieve 2008-03-10 Dave Cross * perlanet: Deal with feeds with crappy dates. Actually output the feed in the required format. 2008-03-09 Dave Cross * index.tt, perlanet, perlanetrc: Initial import Perlanet-0.56/MANIFEST000444023422023422 117611731176247 13543 0ustar00davedave000000000000bin/perlanet Build.PL examples/index.tt examples/perlanetrc lib/Perlanet.pm lib/Perlanet/Entry.pm lib/Perlanet/Feed.pm lib/Perlanet/Simple.pm lib/Perlanet/Trait/Cache.pm lib/Perlanet/Trait/OPML.pm lib/Perlanet/Trait/TemplateToolkit.pm lib/Perlanet/Trait/YAMLConfig.pm lib/Perlanet/Trait/FeedFile.pm lib/Perlanet/Trait/Scrubber.pm lib/Perlanet/Trait/Tidy.pm Makefile.PL MANIFEST This list of files META.yml t/01_basic.t t/02_phases.t t/03_noconf.t t/04_mps.t t/05_cache.t t/pod.t t/pod_coverage.t t/testrc t/perlanetrc t/cacherc t/mprc t/index.tt README Changes t/data/davblog.xml t/data/stevebaker.xml t/data/talkcarswell.xml META.json Perlanet-0.56/META.yml000444023422023422 366411731176247 13667 0ustar00davedave000000000000--- abstract: "A program for creating programs that aggregate web feeds (both\nRSS and Atom)." author: - 'Dave Cross ' build_requires: File::Path: 0 MooseX::ConfigFromFile: 0 Test::More: 0 configure_requires: Module::Build: 0.38 dynamic_config: 1 generated_by: 'Module::Build version 0.38, CPAN::Meta::Converter version 2.112621' keywords: - aggregate - aggregator - atom - feed - planet - rss - xml license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: Perlanet provides: Perlanet: file: lib/Perlanet.pm version: 0.56 Perlanet::Entry: file: lib/Perlanet/Entry.pm version: 0 Perlanet::Feed: file: lib/Perlanet/Feed.pm version: 0 Perlanet::Simple: file: lib/Perlanet/Simple.pm version: 0 Perlanet::Trait::Cache: file: lib/Perlanet/Trait/Cache.pm version: 0 Perlanet::Trait::FeedFile: file: lib/Perlanet/Trait/FeedFile.pm version: 0 Perlanet::Trait::OPML: file: lib/Perlanet/Trait/OPML.pm version: 0 Perlanet::Trait::Scrubber: file: lib/Perlanet/Trait/Scrubber.pm version: 0 Perlanet::Trait::TemplateToolkit: file: lib/Perlanet/Trait/TemplateToolkit.pm version: 0 Perlanet::Trait::Tidy: file: lib/Perlanet/Trait/Tidy.pm version: 0 Perlanet::Trait::YAMLConfig: file: lib/Perlanet/Trait/YAMLConfig.pm version: 0 recommends: CHI: 0 Compress::Zlib: 0 MooseX::ConfigFromFile: 0 XML::OPML::SimpleGen: 0 requires: DateTime: 0 DateTime::Duration: 0 Encode: 0 HTML::Scrubber: 0 HTML::Tidy: 0 List::Util: 0 Moose: 0 MooseX::Traits: 0 Template: 0 Try::Tiny: 0 URI::Fetch: 0 XML::Feed: 0.22 YAML: 0 perl: v5.6.0 resources: homepage: http://code.mag-sol.com/Perlanet/ license: http://dev.perl.org/licenses/ repository: git://github.com/davorg/perlanet.git x_MailingList: http://lists.mag-sol.com/mailman/listinfo/perlanet version: 0.56 Perlanet-0.56/Makefile.PL000444023422023422 224411731176247 14361 0ustar00davedave000000000000# Note: this file was auto-generated by Module::Build::Compat version 0.3800 require 5.006000; use ExtUtils::MakeMaker; WriteMakefile ( 'NAME' => 'Perlanet', 'VERSION_FROM' => 'lib/Perlanet.pm', 'PREREQ_PM' => { 'DateTime' => 0, 'DateTime::Duration' => 0, 'Encode' => 0, 'File::Path' => 0, 'HTML::Scrubber' => 0, 'HTML::Tidy' => 0, 'List::Util' => 0, 'Moose' => 0, 'MooseX::ConfigFromFile' => 0, 'MooseX::Traits' => 0, 'Template' => 0, 'Test::More' => 0, 'Try::Tiny' => 0, 'URI::Fetch' => 0, 'XML::Feed' => '0.22', 'YAML' => 0 }, 'INSTALLDIRS' => 'site', 'EXE_FILES' => [ 'bin/perlanet' ], 'PL_FILES' => {} ) ; Perlanet-0.56/examples000755023422023422 011731176247 14066 5ustar00davedave000000000000Perlanet-0.56/examples/perlanetrc000444023422023422 243511731176247 16311 0ustar00davedave000000000000title: Planet Skeptic description: Question Everything url: http://skeptic.theplanetarium.org/ author: name: Dave Cross email: dave@dave.org.uk entries: 50 opml: opml.xml page: file: index.html template: index.tt feed: file: atom.xml format: Atom feeds: - url: http://www.badscience.net/?feed=atom title: Bad Science web: http://www.badscience.net/ - url: http://cectic.com/rss.xml title: Cectic web: http://cectic.com/ - url: http://www.climate-resistance.org/feed title: Climate Resistance web: http://www.climate-resistance.org/ - url: http://teenatheist.wordpress.com/feed/ title: Diary of a Teenage Atheist web: http://teenatheist.wordpress.com - url: http://www.mediawatchwatch.org.uk/wp-rss.php title: Media Watch Watch web: http://www.mediawatchwatch.org.uk/ - url: http://blog.newhumanist.org.uk/feeds/posts/default title: New Humanist Blog web: http://blog.newhumanist.org.uk/ - url: http://feeds.feedburner.com/scienceblogs/pharyngula title: Pharyngula web: http://scienceblogs.com/pharyngula/ - url: http://richarddawkins.net/feed.php title: Richard Dawkins Foundation web: http://richarddawkins.net/ - url: http://feeds.feedburner.com/SamHarris title: Sam Harris web: http://www.samharris.org/ Perlanet-0.56/examples/index.tt000444023422023422 147211731176247 15707 0ustar00davedave000000000000 [% feed.title %]

[% feed.title %]

[% feed.description %]

[% FOREACH entry IN feed.entries %]

[% entry.title | html %]

[% entry.content.body %] [% IF entry.author OR entry.issued %]

Published[% IF entry.author %] by [% entry.author | html; END %] [% IF entry.issued %] on [% entry.issued | html; END %]

[% END %] [% END %]
[% feed.author | html %] / [% feed.modified | html %]
Perlanet-0.56/t000755023422023422 011731176247 12513 5ustar00davedave000000000000Perlanet-0.56/t/pod_coverage.t000444023422023422 33311731176247 15451 0ustar00davedave000000000000use Test::More; eval "use Test::Pod::Coverage 1.00"; plan skip_all => "Test::Pod::Coverage 1.00 required for testing POD coverage" if $@; all_pod_coverage_ok({ also_private => [ qr/^(BUILD|LC_ALL|TIDY_WARNING)/ ] } ); Perlanet-0.56/t/perlanetrc000444023422023422 50011731176247 14705 0ustar00davedave000000000000title: planet test description: Testing stuff url: http://theplanetarium.org/ author: name: Dave Cross email: dave@dave.org.uk entries: 10 page: file: index.html template: index.tt feed: file: atom.xml format: Atom feeds: - url: file:data/davblog.xml title: davblog web: http://blogs.dave.org.uk/ Perlanet-0.56/t/02_phases.t000444023422023422 120611731176247 14620 0ustar00davedave000000000000use Test::More tests => 9; use FindBin qw($Bin); use_ok('Perlanet::Simple'); chdir $Bin; ok(my $p = Perlanet::Simple->new_with_config(configfile => 'testrc'), 'Object created'); isa_ok($p, 'Perlanet'); is(@{$p->feeds}, 1, 'One feed'); my @feeds = $p->fetch_feeds(@{$p->feeds}); is(@feeds, 1, 'One fetchable feed'); my @selected = $p->select_entries(@feeds); is(@selected, 1, 'One selected entry'); my @sorted = $p->sort_entries(@selected); is(@sorted, 1, 'One sorted entry'); my @cleaned = $p->clean_entries(@sorted); is(@cleaned, 1, 'One cleaned entry'); my $feed = $p->build_feed(@cleaned); isa_ok($feed, 'Perlanet::Feed', 'Got a feed'); Perlanet-0.56/t/03_noconf.t000444023422023422 36611731176247 14606 0ustar00davedave000000000000use Test::More tests => 2; use FindBin qw($Bin); use Perlanet::Simple; chdir $Bin; my $p = eval { Perlanet::Simple->new_with_config(configfile => 'missing') }; ok($@, 'Exception thrown'); like($@, qr(^Cannot open), 'Correct exception thrown'); Perlanet-0.56/t/mprc000444023422023422 103611731176247 13534 0ustar00davedave000000000000title: planet test description: Testing stuff url: http://theplanetarium.org/ self_link: http://theplanetarium.org/ agent: Testing Perlanet entries_per_feed: 1 author: name: Dave Cross email: dave@dave.org.uk entries: 20 page: file: index.html template: index.tt feed: file: rss.xml format: Atom feeds: - title: 'con: Wycombe: Steve Baker' url: file:data/stevebaker.xml web: http://www.stevebaker.info/ - title: 'co: Clacton: Douglas Carswell' url: file:data/talkcarswell.xml web: http://www.talkcarswell.com/ Perlanet-0.56/t/01_basic.t000444023422023422 132211731176247 14414 0ustar00davedave000000000000use Test::More tests => 6; use FindBin qw($Bin); use_ok('Perlanet::Simple'); chdir $Bin; ok(my $p = Perlanet::Simple->new_with_config(configfile => 'testrc'), 'Object created'); isa_ok($p, 'Perlanet'); if (-e $p->opml) { unlink $p->opml; } if (-e $p->feed->{file}) { unlink $p->feed->{file}; } if (-e $p->page->{file}) { unlink $p->page->{file}; } $p->run; ok(-e $p->feed->{file}, 'Feed created'); ok(-e $p->page->{file}, 'Page created'); SKIP: { skip 'XML::OPML::SimpleGen not installed', 1 unless $p->has_opml; ok(-e $p->opml, 'OPML created'); } if (-e $p->opml) { unlink $p->opml; } if (-e $p->feed->{file}) { unlink $p->feed->{file}; } if (-e $p->page->{file}) { unlink $p->page->{file}; } Perlanet-0.56/t/04_mps.t000444023422023422 121411731176247 14135 0ustar00davedave000000000000use Test::More tests => 9; use FindBin qw($Bin); use_ok('Perlanet::Simple'); chdir $Bin; ok(my $p = Perlanet::Simple->new_with_config(configfile => 'mprc'), 'Object created'); isa_ok($p, 'Perlanet'); is(@{$p->feeds}, 2, 'Two feeds'); my @feeds = $p->fetch_feeds(@{$p->feeds}); is(@feeds, 2, 'Two fetchable feeds'); my @selected = $p->select_entries(@feeds); is(@selected, 2, 'Two selected entries'); my @sorted = $p->sort_entries(@selected); is(@sorted, 2, 'Two sorted entries'); my @cleaned = $p->clean_entries(@sorted); is(@cleaned, 2, 'Two cleaned entries'); my $feed = $p->build_feed(@cleaned); isa_ok($feed, 'Perlanet::Feed', 'Got a feed'); Perlanet-0.56/t/cacherc000444023422023422 63411731176247 14146 0ustar00davedave000000000000title: planet test description: Testing stuff url: http://theplanetarium.org/ self_link: http://theplanetarium.org/ agent: Testing Perlanet author: name: Dave Cross email: dave@dave.org.uk entries: 20 cache_dir: cache opml: opml.xml page: file: index.html template: index.tt feed: file: rss.xml format: RSS feeds: - url: file:data/davblog.xml title: davblog web: http://blogs.dave.org.uk/ Perlanet-0.56/t/pod.t000444023422023422 20211731176247 13571 0ustar00davedave000000000000use Test::More; eval "use Test::Pod 1.00"; plan skip_all => "Test::Pod 1.00 required for testing POD" if $@; all_pod_files_ok(); Perlanet-0.56/t/05_cache.t000444023422023422 144611731176247 14411 0ustar00davedave000000000000use Test::More tests => 1; use FindBin qw($Bin); use File::Path; use Perlanet::Simple; chdir $Bin; eval { require CHI; }; SKIP: { skip 'CHI required for caching test', 1 if $@; chdir($Bin); my $p = Perlanet::Simple->new_with_config(configfile => 'cacherc'); rmtree($p->cache->root_dir); my @entries = $p->select_entries( $p->fetch_feeds( @{$p->feeds}, ), ); my $first_count = scalar @entries; @entries = $p->select_entries( $p->fetch_feeds( @{$p->feeds}, ), ); my $second_count = scalar @entries; # count should be the same on a second attempt is($first_count, $second_count, "$first_count == $second_count"); rmtree($p->cache->root_dir); } Perlanet-0.56/t/index.tt000444023422023422 147211731176247 14334 0ustar00davedave000000000000 [% feed.title %]

[% feed.title %]

[% feed.description %]

[% FOREACH entry IN feed.entries %]

[% entry.title | html %]

[% entry.content.body %] [% IF entry.author OR entry.issued %]

Published[% IF entry.author %] by [% entry.author | html; END %] [% IF entry.issued %] on [% entry.issued | html; END %]

[% END %] [% END %]
[% feed.author | html %] / [% feed.modified | html %]
Perlanet-0.56/t/testrc000444023422023422 64411731176247 14063 0ustar00davedave000000000000title: planet test description: Testing stuff url: http://theplanetarium.org/ self_link: http://theplanetarium.org/ agent: Testing Perlanet entries_per_feed: 1 author: name: Dave Cross email: dave@dave.org.uk max_entries: 20 opml: opml.xml page: file: index.html template: index.tt feed: file: rss.xml format: Atom feeds: - url: file:data/davblog.xml title: davblog web: http://blogs.dave.org.uk/ Perlanet-0.56/t/data000755023422023422 011731176247 13424 5ustar00davedave000000000000Perlanet-0.56/t/data/stevebaker.xml000444023422023422 3603211731176247 16462 0ustar00davedave000000000000 Steve Baker One life. Live it. 2010-08-22T08:52:00Z WordPress http://www.stevebaker.info/feed/atom/ Steve Baker http://www.stevebaker.info/ <![CDATA[Government urged to reveal ‘true’ national debt of £4.8 trillion – Telegraph]]> http://www.stevebaker.info/?p=7960 2010-08-22T08:52:00Z 2010-08-22T08:52:00Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[Rivlin, Understanding the Law]]> http://www.stevebaker.info/?p=7948 2010-08-20T20:15:09Z 2010-08-21T08:22:39Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[War planes mark 70th anniversary of Winston Churchill’s Battle of Britain speech – Telegraph]]> http://www.stevebaker.info/?p=7958 2010-08-20T20:21:33Z 2010-08-20T20:21:33Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[Heroes or victims?]]> http://www.stevebaker.info/?p=7944 2010-08-20T17:48:53Z 2010-08-20T17:48:03Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[Dr Eamonn Butler, Austrian Economics – A Primer]]> http://www.stevebaker.info/?p=7940 2010-08-18T17:50:19Z 2010-08-19T11:03:04Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[Alternatives to capitalism: Nikolai Bukharin on the division of labour]]> http://www.stevebaker.info/?p=3473 2010-08-18T09:35:29Z 2010-08-18T09:01:56Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[Thought for the day – Karl Popper on reason and critical discussion]]> http://www.stevebaker.info/?p=7936 2010-08-17T09:56:27Z 2010-08-17T09:56:27Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[Thought for the day – Bastiat]]> http://www.stevebaker.info/?p=7925 2010-08-11T08:47:12Z 2010-08-16T08:45:36Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[Thought for the day – Churchill]]> http://www.stevebaker.info/?p=7920 2010-08-13T07:05:59Z 2010-08-13T06:41:39Z 0 Steve Baker http://www.stevebaker.info/ <![CDATA[Labour’s legacy]]> http://www.stevebaker.info/?p=7930 2010-08-11T12:28:19Z 2010-08-12T07:00:19Z 0 Perlanet-0.56/t/data/davblog.xml000444023422023422 22304411731176247 15766 0ustar00davedave000000000000 davblog tag:blog.dave.org.uk,2008-05-16://1 2009-10-08T12:43:58Z In which someone you've never heard of writes about things you have no interest in Movable Type 4.32-en Updates from Jesusistan tag:blog.dave.org.uk,2009://1.1564 2009-10-08T12:16:05Z 2009-10-08T12:43:58Z Time for a couple of snippets of news from those lovable nutters on the American religious right.Firstly, take a look at this. The artist has created a "work of art" which sums up his view of contemporary America. And it's... Dave Cross http://dave.org.uk/
Firstly, take a look at this. The artist has created a "work of art" which sums up his view of contemporary America. And it's a pretty weird view. Well, perhaps it's not so weird if you're looking through American Taliban glasses. But for sane people there are some pretty... er... interesting things there. Be sure to move your mouse over each person in the picture to see the artist's descriptions. I particularly enjoyed the college lecturer clutching at his copy of "On The Origin of Species". Oh, and what is Thomas Paine (a confirmed Deist) doing worshipping Jesus?

[Note: Whilst writing this piece, I haven't been able to get a response from this web site. This picture has been the subject of much discussion on the web over the last few days. I think the web server isn't quite up to this level of interest.]

Secondly, let's all have a good laugh at the latest project from the intellectual powerhouses behind Conservapedia. They've decided that they don't like the bible much. Well, it's not the bible that they don't like, so much as every available translation of it. You see people keep quoting inconvenient bits of it at them. Bits that make Jesus seem like a hippy. All that "love thy neighbour" nonsense and stuff about "turning the other cheek" - it's not really what a good conservative wants to read in his holy book.

So when your holy book seems to be at odds with your ideals, what do you do? Changing your ideals is obviously out of the question. And you can't really start saying that your holy book is wrong, can you? They've picked on the weak link in the chain and have decided that all current translations are the results of liberal bias and are not to be trusted. And they've set up the Conservative Bible Project to produce their own translation of the bible. They're starting with the King James Version correcting the bits that contradict their philosophy. You can keep up with their work online.

I'm following closely. I'm particularly looking forward to their translation of Matthew 19:24. It's not there yet.

I wish them luck with the project. I'm sure it will be a ripe seam of comedy in the coming months.
]]>
Ernest Marples Closed Down tag:blog.dave.org.uk,2009://1.1563 2009-10-07T12:23:53Z The Ernest Marples web site has been closed down following threats of legal action from the Royal Mail. The web site had been providing a free postcode lookup service - you give them a postcode and they return the latitude... Dave Cross http://dave.org.uk/ Ernest Marples web site has been closed down following threats of legal action from the Royal Mail. The web site had been providing a free postcode lookup service - you give them a postcode and they return the latitude and longitude of a point within that postcode. This can be used in things like a "find your nearest..." service.

Unfortunately, use this data is controlled by the Royal Mail and they like to charge exorbitant fees for it. The people behind Ernest Marples haven't said where their data comes from but the Royal Mail are acting under the assumption that it's an unlicensed copy of their database and have threatened to take legal action if the service continues.

It's ridiculous that in the UK postcode data can be subject to usage restrictions like this. There have been a number of campaigns to free data like this but, so far, progress has been slow. I don't the people behind the Ernest Marples site, but I suspect that they knew it was just a matter of time before the Royal Mail came after them and I also suspect that they are hoping to shine a little light on the absurdity of the situation.

There are a couple of things you can do to help the situation. Firstly, sign the petition asking for free access to postcode data for non-profit web sites. Secondly, go to the Free The Postcode web site and give them your current postcode and location. They're trying to build up a list of postcodes and locations which doesn't rely on any data from the Royal Mail. Currently they have about 8,000 postcodes in their database There are about 1,800,000 in the country. So there is a long way to go. But every little helps. Please do your bit today.
]]>
Does God Exist? tag:blog.dave.org.uk,2009://1.1562 2009-10-06T18:48:04Z If you've travelled much on London Transport over the last few weeks, you'll have seen the new Alpha Course poster pictured on the left.If you're anything like me, you'll have experienced an almost irresistible urge to fill in the survey... Dave Cross http://dave.org.uk/ If you've travelled much on London Transport over the last few weeks, you'll have seen the new Alpha Course poster pictured on the left.

If you're anything like me, you'll have experienced an almost irresistible urge to fill in the survey by ticking the 'no' box. It appears that doing so might be a somewhat dangerous proposition.

There's a discussion over on the Bad Science forum about someone who took that obvious action and was arrested by the London Transport Police for criminal damage. Apparently six police officers were present at the arrest.

It all seems rather an overreaction to a piece of harmless vandalism.

I mean, the poster asks a question. How can they object if someone gives them an answer?
]]>
1970 Calling tag:blog.dave.org.uk,2009://1.1561 Nadine Dorries seems to be writing her blog today from about forty years ago. She's talking about single mothers.I like the idea that we can introduce a structure that will capture 16 and 17 year old girls and teach them... Dave Cross http://dave.org.uk/ about forty years ago. She's talking about single mothers.

I like the idea that we can introduce a structure that will capture 16 and 17 year old girls and teach them parenting skills, help them to acquire the knowledge which will enable them to run a home, manage a budget, cook meals, feed and nurture a baby and learn to value and respect themselves.
How you got that? Parenting skills, running a home, cooking meals and looking after babies - that's all woman's work. Presumably the men are all too busy off hunting mammoths.

Oh, she mentions boys too. But only insofar as we should stop them getting young girls pregnant. Of course the whole thing is driven by Dorries' belief that the way to stop children having sex is to stop sex education classes in school. Because, of course, without measured and practical advice from school children would never get the idea to experiment with sex. I mean they'd never get that idea from, oh pretty much anywhere they look in society.

The people of Mid Beds elected her to represent her. If she's at all representative, then I'm really glad I don't live in Mid Beds.

Oh look. Now I've gone and got all angry.

Update: A far more measured dissection from Sara Bedford.
]]>
Building Web Sites is Easy tag:blog.dave.org.uk,2009://1.1560 2009-09-29T20:37:11Z 2009-09-30T09:27:27Z The geek shall inherit the Earth. But the semi-geek won't be far behind.Back in April I wrote a piece about MPs' web sites. I came to the conclusion that a large number of MPs have web sites that are over-complex... Dave Cross http://dave.org.uk/
Back in April I wrote a piece about MPs' web sites. I came to the conclusion that a large number of MPs have web sites that are over-complex and therefore cost more money to build and maintain than they should have done. They also fail in supplying basic functionality to users (for example, many have invalid web feeds) because they are often written from scratch by people who don't really understand the web. I made the point that a real geek would have not written a new system, but would use some of the excellent open source or hosted services that are available.

I was reminded of this at the Open Tech conference in July[1]. There were a few talks that touched on this issue. In his "10 Cultures" talk, Bill Thompson discussed the differences between the geeks and the rest of the world and how the rest of the world is becoming dependent on the geeks. Immediately after Bill, Ben Goldacre's talk touched on many of his usual subjects (the dearth of good science journalism and the lack of scientific literacy in the general population) before coming back round to echo some of Bill's themes. Ben knows what tools he needs to build in order to fight his battles effectively and he knows that he's not geek enough to build them. He therefore put out a call for a "geek posse" to help him to build the tools that he wants.

Both of these talks got me thinking about the geek/non-geek divide, but it wasn't until I saw Will Perrin and Fran Sainsbury's talk "Spread the Web" that I started to draw comparisons with the MPs' sites that I'd written about earlier. Will and Fran talked about the problem of organisations who paid for expensive web sites many years ago and who are now left with a hard to maintainable system that doesn't give them a good presence on the web. This is exactly the same problem as I had recognised, but in a far wider context. It's not just MPs who spend too much money on crap web sites. Anyone can do it. And many organisations do. Will and Fran aren't hard-core geeks, but they know enough about Wordpress and other similar systems to help organisations to replace their nasty old web sites with some newer and simpler which works.

Two weeks ago Lloyd Shepherd wrote about how he had set up a web site for his wife's school using Wordpress. Like Will and Fran, Lloyd is no geek (as he freely admits) but he knows enough about the technology to identify the best technology for the job and wrangle it into a web site which is probably more usable than the majority of school web sites. In his article, Lloyd asked why more people don't do this and a really interesting discussion followed in the comments.

So here's what we know:

  • There are many organisations out there who want web sites but don't have the technical knowledge to decide how best to do it.
  • Many of these organisations (schools, charities and local groups would be good examples) are short of money.
  • The most effective way for these organisations to build web sites is often by using tools like Wordpress and Drupal.
  • The IT professionals that most of these organisations approach for advice don't seem to know about these solutions and end up proposing expensive proprietary monstrosities.
  • You don't need to be total geek to build these sites, "semi geeks" like Lloyd, Will and Fran are perfectly capable of doing it.
I think that the problem is that knowledge of the Wordpress or Drupal approach is pretty sparse outside of the geek (and semi geek) circles that I and most of my readers move in. Even most of the IT industry still seems unaware (or, perhaps, untrusting) of these open source solutions.

I don't have a solution. I'm just pointing out obvious problems here. I suppose there's some kind of education gap that needs to be filled. I'm considering asking my local council if I can run some kind of "building web sites" evening class to try to spread this knowledge.

But I think we also just need to offer to help. Do you know a cash-strapped charity or local school that could do with a bit of help rebuilding their web site? You don't need to be an expert. This stuff really isn't hard. And you'll be helping to make the world (well, the web at least) a better place.

If you're not a hard-core geek can you become a semi geek?

[1] I said I'd discuss it in more detail later - I didn't expect it would be almost three months!]]>
The Atheist's Guide to Christmas tag:blog.dave.org.uk,2009://1.1559 2009-09-27T10:55:14Z 2009-09-29T15:17:22Z I'm usually a big fan of keeping christmas in December, but I'm quite happy to make exceptions for a good cause. And this is a really good cause.Remember, the Atheist Bus Campaign? Well the people behind that campaign haven't stopped... Dave Cross http://dave.org.uk/ The Atheists Guide to ChristmasI'm usually a big fan of keeping christmas in December, but I'm quite happy to make exceptions for a good cause. And this is a really good cause.

Remember, the Atheist Bus Campaign? Well the people behind that campaign haven't stopped campaigning and their book The Atheist's Guide to Christmas is published this week. Ariane Sherine has gathered together contributions from dozens of well-known atheists. Contributors include Richard Dawkins, Ben Goldacre, Simon Singh, Charlie Brooker and Richard Herring. All proceeds from the book will go to the Terrance Higgins Trust.

Looks like it will be a great christmas present for all of your friends and family. But don't wait until December - buy your presents now.

Remember - there's probably almost certainly no god.
]]>
SW12 Social Network tag:blog.dave.org.uk,2009://1.1558 2009-09-17T18:29:27Z 2009-09-17T19:02:17Z One of the themes I picked up on at this year's Opentech conference was that of local social media. More and more people are using open source tools to build local online communities and this movement seems likely to grow.... Dave Cross http://dave.org.uk/ Opentech conference was that of local social media. More and more people are using open source tools to build local online communities and this movement seems likely to grow. I was particularly impressed with the work that Will Perrin and friends are doing over at TalkAboutLocal. I confess that Lloyd had mentioned the project to me some months ago, but I had forgotten about it until I saw Will speak at Opentech.

I've written about my interest in local sites before. You might remember me introducing Planet Balham and Balham Twits. I still think that both of those sites are useful, but they aren't very interactive. What I wanted was something that the local community would find more useful. I spent a few hours playing with Drupal. I think that Drupal would be a great tool, for building local sites, but I didn't have the time to spare learning how to get the best out of it, so in the end I went back to an earlier experiment.

A couple of years ago, I used Ning to build a simple social networking site for Balham. At the time I didn't have many local contacts so the site atrophied through lack of use. But this lunchtime I went back to have another look at the project.

And after only twenty minutes or so of fiddling, SW12.org was ready to go. The great thing about Ning is that it has all of the standard social networking features already available as modules that you can just drop into the site. As a start, I've picked a pretty standard-looking set of features (user profiles, blogs, disscussion forums, photos and videos) and have seeded the site with a few entries of my own. I'm sure things will grow and change if the site becomes popular.

Through my other web experiments (particulalry through Balham Twits) I've made contact with some Balham-based internet users, so hopefully this time the site will get a little more use. I'm planning to put in some work to promote it locally as well. Even if it means dropping leaflets through every door in Balham (ok, perhaps I won't go quite that far!)

It looks to me as though Ning is a great way to get a social network site up and running really quickly. I expect I'll be using it again for other similar sites in the future. If you're thinking of doing something similar then I recommend talking a look at it.

And if you're in or around Balham, please join up to the site.
]]>
Creation tag:blog.dave.org.uk,2009://1.1557 2009-09-13T10:51:15Z 2009-09-13T11:30:39Z According to the Sydney Morning Herald, a new film about Charles Darwin has failed to find a distribution deal in the US. The article suggests that this is because Darwin's work is still a rather contentious subject in the US.... Dave Cross http://dave.org.uk/ According to the Sydney Morning Herald, a new film about Charles Darwin has failed to find a distribution deal in the US. The article suggests that this is because Darwin's work is still a rather contentious subject in the US. They quote the christian film review site MovieGuide describing Darwin as "a racist, a bigot and 1800's naturalist whose legacy is mass murder" (although they don't point out that the quotation is taken from a book review and was not written in reference to this film).

On Pharyngula, PZ Myers has a slightly different theory. He says that the US's antipathy to evolution is only part of the story and suggests:

One reason it probably isn't getting picked up is that it isn't a blockbuster story — it's a small film with a personal story. That's not to say it's a bad movie, but it's not a Michael Bay noisemaker with car chases and explosions, or giant robots, or a remake of a 1970s cheesy TV show. That makes it a tougher sell.
Whilst I usually agree with PZ, I think he's wrong here. It's obvious that the film isn't a blockbuster and I agree that the blockbusters are what the US (and, indeed, much of the rest of the world) audiences want to see. But films still win distribution deals if they're not blockbusters. And I think that this film would have found a deal had it not been for the subject matter. Oh, and the title. I haven't mentioned the title yet. And I think the title is a direct attempt by the film-makers to grab some publicity by annoying the American creationist movement.

The film is called Creation.

I mean, come on. Nothing could have been more calculated to garner publicity in the US. It's not even an appropriate title for a film about Darwin. Darwin's ideas say nothing at all about creation, they only cover the creation of new species of life. Darwin had nothing to say about how life originally came into existence.

There's a common creationist misunderstanding about evolution. When they talk about "Darwinism" (as they like to call it) they are usually covering a far larger area of knowledge than the one that Darwin wrote about. Because they see Darwin's work as an opposing theory creationism, they assume that it must cover the same ground as their nonsense. They therefore assume that "Darwinism" tries to explain the creation of the universe, the creation of the solar system, the creation of the Earth, the beginnings of life on Earth and the diversity of life found on Earth. And, of course, it doesn't.

Obviously people who agree with Darwin's Theory of Evolution by Natural Selection will tend to also hold non-biblical views on the rest of the subjects in my list, Darwin's work only ever covered the last item on  the list. So to say that something you're calling "Darwinism" addresses all of these subjects is nonsense. So to call a film about Darwin's life and work "Creation" is equally nonsensical.

I don't know if Darwin ever did any research into the earlier items on my list. I've certainly never read anything by him where he discusses the origin of either the universe or the Earth. But creationists like to bundle all of these topics together so that "Darwinism" can be seen as being in direct opposition to their fairy stories.

This new film sounds very interesting to me. It looks at how Darwin's realised that his work explained the existence of so many different species on Earth without the need for divine intervention. It also examines how that knowledge effected his relationship with his deeply religious wife. I think that if more people in the US saw this film then it would help people to see that Darwin was a just a man doing his best to explain the natural world rather than the antichrist that creationist groups like to portray him as.

So it's a shame that more people in the US won't see this film. As I said before, I feel sure that the film-makers deliberately chose the title to court controversy. There's no other explanation - the title makes no sense. It seems that their scheme has backfired on them. They might have gained some more publicity for the film (although notice that the original story I linked to was from Australia), but appears that very few people in the US will get the chance to see their film.
]]>
Not A Broadcast Medium tag:blog.dave.org.uk,2009://1.1556 2009-09-08T11:52:46Z 2009-09-08T12:33:04Z How do you use Twitter? Do you see it as a tool for interacting with people, or do you simply use it as a broadcast medium? Is it a place for dialogue or monologue?I started thinking about this over the... Dave Cross http://dave.org.uk/ Twitter? Do you see it as a tool for interacting with people, or do you simply use it as a broadcast medium? Is it a place for dialogue or monologue?

I started thinking about this over the weekend whilst thinking about Nadine Dorries, the MP for Middle England. Back in May, Dorries had a very strong opinion on Twitter. She wrote:

In discussion over lunch today the conclusion was reached that twitters use twittering, by and large, to moan and complain. It’s a virtual gnashing of the teeth, or beating of the chest. A cyberspace ‘well I never’.
And:

Twittering has to be a symptom of a dysfunctional society.
Before reaching the conclusion:

Anyway, safe to say, I shan’t be joining the legions of twitters any day soon.
It was therefore surprising, to say the least, to see @NadineDorriesMP appear on Twitter late last week. She did, however, acknowledge her change of heart:

I did attack Twitter initially and for that I do eat humble pie, however, you will never know when the milk in my fridge is out of date or I've run out of tea bags, of that you can be sure.:)
Whether she'll be true to her word this time, only time will tell. But it's interesting to watch how she uses Twitter. Out of almost thirty tweets, only two of them have been replies to people. A few more mention other Twitter users. But the vast majority of her tweets are just a broadcast message and there's no evidence of her actually engaging in discussion with anyone over her opinions. Twitter search shows that there are plenty of people trying to engage with her, but she has so far chosen to ignore them.

You can also look at the number of people who she follows on Twitter. As I write, that's eleven. There are close three hundred people following her, but she's only interested in reading what eleven twitterers have to say. That's not a ratio which makes me think she's interested in hearing other points of view or getting involved in conversations.

That's when I realised that there are two different ways that people use Twitter. Most people (or, at least, most people I follow) see it as a powerful way to interact with people. Even people who have huge numbers of followers engage with at least some of their followers. Take, for example, three people who I follow who have huge followings - Tim O'Reilly, Stephen Fry and Neil Gaiman. If you look at their tweets, you'll see that they're full of replies and retweets. These are people who are using Twitter to build and deepen the relationships they have with their followers. You'll also notice that they all follow large numbers of people. They all know that the more people tweets that you read, the more interesting stuff you'll find and the more useful Twitter will become to you.

On the other hand, there are the people who see Twitter as just a broadcast medium. People who just speak and don't listen. People who only like the sound of their own voice - or, at least, don't mind giving that impression. These people (and Dorries is only the most recent example I've found - I won't embarrass any others by naming them) seem to only be using Twitter because it's the newest platform for getting their message out there. They seem to have no interest in talking about their ideas. They aren't interested in what we have to say in reply. That may not be a true representation of how they feel, but by not talking to people on Twitter that's the impression they are giving.

It's something that can be measured. I think there are three ways that you can measure someone's "socialability" on Twitter.

  • The ratio of the number of people they follow to the number of people who follow them
  • The percentage of their tweets that contain references to other twitterers
  • The percentage of their tweets that are retweets
Twitter makes it easy to get this data for all accounts. I think it would be an interesting project to rank Twitter users by how socialable they are. But like all good ideas, I'm sure that someone else has beaten me to it. I've done a quick bit of Googling, but I can't find anything obvious, so if anyone knows of a site that produces these stats, please let me know in the comments.

And to Nadine Dorries (if she ever reads this), please interact more.
]]>
Misunderstanding Time Travel tag:blog.dave.org.uk,2009://1.1555 2009-09-04T12:33:52Z 2009-09-04T13:24:50Z I promise I'll get round to a longer blog entry over the weekend, but I couldn't resist commenting briefly on this paragraph from Peter Bradshaw's review of The Time Traveler's Wife.It is very silly and of course cannot submit to... Dave Cross http://dave.org.uk/ review of The Time Traveler's Wife.

It is very silly and of course cannot submit to close inspection. Making brief visits to an unalterable past is one thing, but how about that pesky butterfly effect? Why doesn't he recognise Clare on their first meeting in the "present" - and why can't he "remember" his future journeys into the past?
Now I know that I've spent longer than most people either reading or watching stories about time travel. But I can't believe that anyone seriously doesn't know the answers to those questions. Why doesn't Henry recognise Clare when they first meet in the present? Because those meetings haven't yet taken place for him. Why can't he remember his future journeys into the past? The big clue is in the word "future".

Without understanding that, you're missing the fundamental paradox in the plot of the Time Traveler's Wife. If you really find it that confusing, I can understand why you would only give it two stars.

Do many people find basic time travel concepts like this hard to follow?
]]>
Not Dead tag:blog.dave.org.uk,2009://1.1554 2009-08-27T08:20:24Z 2009-08-27T08:22:58Z I know it's been very quiet round here, but I'm still here. I've just been off on holiday for a couple of weeks. I was cruising around the Baltic. There will be stories and photos arriving soon. I just need... Dave Cross http://dave.org.uk/ Baltic. There will be stories and photos arriving soon. I just need a couple of days to get a bit more organised.
]]>
Support From The Internet tag:blog.dave.org.uk,2009://1.1553 2009-08-03T19:18:53Z 2009-08-03T20:31:28Z I'm currently in Lisbon for YAPC Europe. I very nearly didn't make it. I flew out on Friday and on Friday morning, about three hours before I was supposed to leave the house, I discovered that my passport was missing.I... Dave Cross http://dave.org.uk/ YAPC Europe. I very nearly didn't make it. I flew out on Friday and on Friday morning, about three hours before I was supposed to leave the house, I discovered that my passport was missing.

I realise, of course, that looking for your passport on the day that you are planning to travel is a rather stupid way to organise your life. But that's not what I did. I made sure that I knew where my passport was two weeks before that. Except it turns out that wasn't my current passport. That was an old expired passport which, for reasons too boring to go into, hasn't had the corner cut off in the way that expired passports are supposed to.

Just before 9am, I twittered my predicament.

Hmmm... I appear to be having some slight difficulty tracking down my passport *FX: Mild panic*
An hour and a half later, I still sound calm (almost joking), but internally the panic was rising.

If I was a passport, where would I be hiding?
At that point I think that some of my Twitter followers realised that I was serious and started to send helpful suggestions.

@davorg in the cupboard where the cereals are [@davecampbell]
@davorg Old suit or jacket pockets? Maybe in a suitcase? [@OvidPerl]
@davorg Even reading that has me moving to check that mine is where I think it is. Hope it doesn't stay hidden for long! [@keiosu]
@davorg I found mine hiding under a stack of dirty dishes. [@__Abigail__]
@davorg sock drawer at ours usually [@gellyfish]
Every time I went back to Twitter, there were three or four new encouraging messages.

@davorg odds are you've packed it already [@SeanClarke]
@davorg My passport is in my dressing-gown pocket, but I suppose that's unlikely to help you. [@robinhouston]
@davorg sock drawer? bedside table? [@davehodg]
@davorg I remember a Perlmonks user finding his passport in a slipper [@larsen]
@davorg When did you last use your passport? Is it tucked in the carry-on bag you were using? Filing cabinet? Safe? [@rozallin]
@davorg buried in the middle of a pile of filing/paperwork .. or is that just my wifey that does that? [@chiselwright]
@davorg The trousers you were wearing when you last entered the country? [@theorbtwo]
A lot of the suggestions weren't particularly helpful, but by about 11am the support I was getting from Twitter was about the only thing that was keeping me sane. My stress is starting to show in typos.

Thanks for all the advice. The passport remains elusive, but I'm sure I@m getting closer. And I don't need to leave for an hour or so :-/
The advice kept on coming.

@davorg Drawer. Bedside table? [@antoniojl]
@davorg If I was a passport I would hide in a suitcase, ready to go. [@anniemaggiemay]
And then it started to take a different tack.

@davorg if we had id cards, you wouldn't need a passport :> [@pfig]
@davorg You're an EU citizen. Showing your ID isn't enough? My girlfriend says she can travel to Portugal on her French ID. [@OvidPerl]
@davorg you don't need passport to come to Portugal! I believe you are EU citizen :) [@braceta]
Unfortunately, I'd already eliminated that option.

Phoned Passport Agency and BA to see if there is any chance of travelling without it. Of course not.
Then, at 12:33:

Found it. It was in the scanner!!!
One day perhaps I'll find time to explain exactly why it was in the scanner. But for now I'll just say that I only found it because I was looking in random places that I knew it couldn't possibly be.

My Twitter followers were as happy as I was.

@davorg Hooray! [@mrvaidya]
@davorg heh and yay! [@chiselwright]
@davorg Of course! Bloody identity thieves! [@antoniojl]
Of course, the drama wasn't completely over. I still had to get to the airport in time for my plane. At 12:59, I wrote:

Inna taxi to LHR. Hurrah! Excitment not over yet. Might not get there in time.
Still more encouragement from Twitter.

@davorg i fel the sonic boom as you whizzed past :) [@rjw1]
I was too busy to tweet for a while, but finally at 14:35 I found time to write:

Made it. Sitting in departure lounge waiting to board. Thanks for all your help. Hope you all enjoyed the drama.
And I think everyone was as relieved as I was.

@davorg - just happy you're on the way safely. [@unixdaemon]
@davorg woo hoo - well done :) [@davecampbell]
@davorg Awesome! See you in Portugal on Sunday :) [@OvidPerl]
@davorg The HP techies here in the Bracknell office have been enthralled by yr mini soap opera. Glad you made it :-) [@edwenn]
@davorg Yay! Well done! [@antoniojl]
glad that @davorg found his passport in time. [@maokt]
@davorg Well done, and thanks for the entertainment! [@robinhouston]
@davorg w00t! U made it. Should have started a sweepstake in the office :) [@cyberdees]
My Twitter statuses are also fed through to my Facebook page. So friends were commenting there too. And I'm really grateful for all of the comments that I got from both places. It would have been really easy to have given up and cancelled the trip, but knowing that there were all these people out there rooting for me gave me the incentive to keep going.

I can categorically state that in this instance both Twitter and Facebook were wonderful systems.

Thanks to everyone who commented.
]]>
Headphones on the G1 tag:blog.dave.org.uk,2009://1.1552 2009-07-30T12:05:28Z 2009-07-30T13:34:04Z [This is here as a public service to other frustrated G1 owners]In December, when I wrote about my first impressions of the G1, one of my biggest complaints was that it had a completely non-standard socket for headphones. It came... Dave Cross http://dave.org.uk/
In December, when I wrote about my first impressions of the G1, one of my biggest complaints was that it had a completely non-standard socket for headphones. It came with a set of headphones which fitted the socket, but they were some of the worst and most uncomfortable headphones that I had ever tried. I lasted less than an hour using them.

But soon after I got my G1, I started to hear from other people who had got a different headphone adapter in the box. Instead of a pair of headphones with the dodgy "not quite USB" plug on them, they got a pair of headphones with a standard 3.5mm plug togther with an adapter to convert from 3.5mm to the dodgy "not quite USB" socket. This is clearly a better package as it allows you to use any headphones with the G1.

I emailed T-Mobile customer support to see if they could sent me the nice adapter. They said that I could get one from a T-Mobile shop. I went into three or four shops. None of them knew what I was talking about. In one of them the manager unboxed three G1s to see what was in the box. In all three cases it was the crappy old connection that I already had.

I emailed T-Mobile customer support again explaining what had happened and asking why they had sent me on a wild goose chase. They apologised and promised to look into it.

At this point, I should point out that T-Mobile customer support really aren't very good. You've got a good chance of getting someone in a call centre in India who really hasn't got much of a clue about what you're talking about. They have an intensely irritating habit of repeating a paraphrased version of your query back to you in the mistaken believe (I assume) that this will somehow be useful to you. They are also told to reply to all requests with a phone call. Even ones that they receive by email. Even ones, I've discovered, that start with "PLEASE REPLY BY EMAIL - DO NOT PHONE ME". I like to deal with customer support by email so that I have a permanent record of what I have been told.

Sorry about that diversion. I found it theraputic. Where was I? Oh yes. They promised to look into it. Then they promptly forgot about it. Three months later I wrote to them again, explaining that when someone tells me that they are looking into something, then I expect to get a follow-up at some point.

They replied, apologised and said that they would look into it and get back to me. Which, to their credit, they did. A couple of days later I got a mail saying that they couldn't change the offer they had made me. This was strange as they hadn't actually made me an offer. They went on to say that if I bought myself the adaptor that I wanted, they would refund the cost.

Before they could change their mind, I went onto the HTC web site and bought one of these. I forwarded the order confirmation to T-Mobile and they phoned me (grr!) to tell me that they had credited the amount to my account.

So there's the happy ending to the story. After about six months of trying, many visits to T-Mobile shops and many frustrating email conversations with T-Mobile customer support I got what I wanted. I can now listen to music on my G1 using my favourite headphones.

If you're trying to get a decent headphone adapter out of them, feel free to point them at this blog entry. If they do it for one person, they should really do it for everyone who asks. If by writing this I can make someone's interaction with T-Mobile less painful then that would make me very happy.

Let me know how you get on.

Update: I should mention that there's another option. The G1 supports stereo bluetooth headphones - so just buy something like this and there's no need to plug anything in.
]]>
Very Cellular Songs tag:blog.dave.org.uk,2009://1.1551 2009-07-23T11:56:43Z 2009-07-23T12:21:03Z On Sunday evening I was at the Barbican Centre for Very Cellular Songs - The Music of the Incredible String Band. This featured a number of performers singing and playing Incredible String Band songs. The performers included Mike Heron and... Dave Cross http://dave.org.uk/ Very Cellular Songs - The Music of the Incredible String Band. This featured a number of performers singing and playing Incredible String Band songs. The performers included Mike Heron and Clive Palmer who were original members of the band. According to Joe Boyd, who curated and introduced the show, the third original member, Robin Williamson, isn't keen on being involved with such retrospectives. The best known performers were probably Richard Thompson, Robyn Hitchcock and Green Gartside but all of the performers were very impressive.

I've never really explored the ISB's music. I've had a copy of The Hangman's Beautiful Daughter for a while but I can't have listened to it more than a handful of times. I can't really explain why I haven't listened to them much. I suppose that going to this gig was an attempt to work out for once and for all whether or not I liked them. And I'm really glad that I did because I had a great time. It's now four days later and I still have snippets of their songs going round my head.

One of the problems with this kind of show is that because the line-up changes with each song, there's a bit of an extended pause whilst the previous performers leave the stage and the new ones come on. This was slightly exacerbated by the fact that Clive Palmer was walking with a stick and it took him rather a long time to get on and off the stage. But as Richard Thompson pointed out, compared to some of the ISB gigs in the sixties, this was really slick.

I also found myself realising why I used to enjoy going to the Cambridge Folk Festival so much. It was a great way to find new bands. There were a number of performers who I'd never heard of and I'll certainly be be investigating more music by Abigail Washburn, Alasdair Roberts and the Trembling Bells.

It was a very enjoyable night. I'm rather hoping that it was recorded in some way so that I can relive it. If, like me, the music of the ISB is a bit of a closed book to you, then I recommend listening to A Very Cellular Song or (if you prefer something a little less out there) Everything's Fine Right Now.
]]>
Apollo Introspection tag:blog.dave.org.uk,2009://1.1550 2009-07-22T12:44:34Z 2009-07-22T13:27:10Z Last night I celebrated the 40th anniversary of the first Moon walk by going to the Science Museum to see a live performance of Brian Eno's Apollo. The music was played by Icebreaker who were largely out of sight... Dave Cross http://dave.org.uk/ Apollo Space Suit Last night I celebrated the 40th anniversary of the first Moon walk by going to the Science Museum to see a live performance of Brian Eno's Apollo. The music was played by Icebreaker who were largely out of sight below the screen while extracts from For All Mankind were broadcast on the IMAX screen. It seems I chose the wrong night to go as Eno himself introduced the performance on Monday night (the 40th anniversary of the first Moon landing), but that doesn't really matter - the show was still great. I'd recommend you see it, but that was the final performance.

I'm old enough that I remember the original events. My parents dragged me out of bed early in the morning of July 21st 1969 to watch Neil Armstrong leave the Eagle and become the first man to walk on the Moon. My memory is hazy and no doubt clouded by the innumerable times that I've seen the footage since, but I definitely remember being obsessed by all things Apollo at the time.

Mine was the first generation to whom spaceflight was a reality. I was born five years after Sputnik 1 and about eighteen months after Yuri Gagarin's spaceflight. People of my age were the first people to grow up in a world where it seemed that the space travel of science fiction might not remain fiction for much longer. By the time of Apollo 11 we were sure that we were going to be the first generation to take our holidays on the Moon. If you had told that six-year-old boy that the chances of him ever visiting the Moon were as slim as they now seem, he would have laughed at you.

I'm not usually prone to introspection, but this anniversary has effected me in a strange way. I suppose I've known it for years, but I've finally had to face the fact that I won't be travelling to the Moon. There's an outside chance that I might get rich enough or prices might fall enough that I'll one day take a "space tourist" flight to Earth orbit. But that's likely to be about as far as I'll get. And that makes me sad.

I know, of course, all of the reasons why the Apollo project was cancelled. And why no-one has gone further than the International Space Station in the last thirty-five years. But understanding the rationale doesn't stop it from being a huge disappointment to me. I'm glad to here people starting to talk about going back to the Moon and the Apollo 11 astronauts encouraging NASA to consider missions to Mars, but I'm just going to have to accept that there is no chance that I'll be involved in any of those projects.

Astronauts are largely younger than me these days. I sailed past both my thirtieth and fortieth birthdays without experiencing the morose introspection that those birthdays traditionally trigger. But I think that what I've been feeling over the last few days is a very similar effect.


]]>
Perlanet-0.56/t/data/talkcarswell.xml000444023422023422 10520011731176247 17031 0ustar00davedave000000000000TalkCarswell RSS Feedhttp://www.talkcarswell.comThe latest blog entries from Douglas Carswell(c) 2010 Douglas CarswellSat, 21 Aug 2010 09:37:00 GMT1545Australian election knife-edge <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt"> Polling shows that today&#8217;s Australian election is a neck-and-neck contest between Labor and the centre-right Liberal Party.&#160;Even if&#160;Tony Abbott, the Liberal leader, doesn&#8217;t quite make it to become Australia&#8217;s next Prime Minister, this has been a striking turnabout for him and his party.</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Some experts attribute this revival of Ozzie centre right fortunes to the modernising strategy Abbott and his tight-knit clique of advisers have&#160;followed since he took over as leader.&#160;&#8220;The break-through came when we made it clear we no longer believed in our traditional agenda&#8221; explained one Canberra insider yesterday.</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">&#8220;By ditching that old &#8220;right wing&#8221; agenda that used to focus on immigration,&#160;lower taxes and&#160;smaller government, we&#8217;ve stormed ahead with folk who&#8217;d never vote for us anyway&#8221;.</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Instead, the closed clique of Canberra advisers decided to put&#160;tackling climate change at the centre of their&#160;agenda&#160;- and have seen a sharp increase in the Liberal's&#160;appeal as a consequence, think&#160;some.&#160;&#160;&#160; </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Arch modernisers have also put special focus on community engagement.&#160;&#8220;We&#8217;ve been sending teams of our activists out to Fiji to teach the kids ping pong.&#160;It&#8217;s win-win.&#160;They get to improve their forehand and back spin.&#160;In doing so, we get to show how we can make a difference in key suburban constituencies in Sydney and Melbourne, and maybe even in Broome, too.&#160;We hope&#8221; explained one.&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Faced with the most hopelessly divided, incompetent and badly led Labor party in a generation one key strategist explained &#8220;If we don&#8217;t win, we&#8217;ll focus on making the&#160;AV electoral system the issue.&#160;We will demand a referendum on adopting first-past-the-post, rather than face up to why it is we stuffed up&#8221;.</span> </p> http://www.talkcarswell.com/show.aspx?id=1545http://www.talkcarswell.com/show.aspx?id=1545Sat, 21 Aug 2010 09:37:00 GMT1544The internet gives us unprecedented freedom <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">The Guardian&#8217;s&#160;<a style="color: #0000ff" href="http://www.guardian.co.uk/commentisfree/2010/aug/19/the-anglosphere-is-interesting-enough">Martin Kettle has an interesting article</a> suggesting that the internet is having a profound cultural impact on the UK, leading to a &#8220;national mental disengagement with Europe&#8221;. &#160; </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">With the whole planet just a few clicks away, &#8220;it is hard to recall a time&#8221; he laments&#8221; when the national .... mind was less informed about or engaged with Europe than it is today. &#160;.... Being in Europe has never impinged less.&#8221; </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Boo hoo.&#160;How tragic. </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Perhaps the left is about to discover a broader truth;&#160;the internet makes it impossible for elites to try to shape the planet, and the people on it, according to their own preconceived notions of how the world should be.&#160;The dispersed, democratic medium that is the internet doesn&#8217;t produce a shiny new Euro-identity because that shiny new Euro-identity is the bogus product of a remote elite.&#160;And it&#8217;s not only top down Euro elitism that is threatened by the web.&#160; </span> </p> <p style="color: red"> <span style="font-family: 'Verdana', 'sans-serif'; color: red; font-size: 11pt">The internet frees us as citizens from politicians, as communities from the centralised state, as producers and consumers from mega corporations, and as people from our geography.&#160;&#160;&#160;That's pretty&#160;catastrophic if you happen to be a Fabian supporter of&#160;centralised&#160;public service provision, who wants a regulated economy and see yourself as a&#160;Euro citizen.&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Bad news for Guardianistas.&#160;Good news for the rest of the planet. </span> </p> http://www.talkcarswell.com/show.aspx?id=1544http://www.talkcarswell.com/show.aspx?id=1544Fri, 20 Aug 2010 10:24:00 GMT1543Leon Brittan to advise on trade <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Leon Brittan has been appointed as a trade adviser to the government.&#160;Not that the UK government has any real say over UK trade policy.&#160;As an ex-Eurocrat, I&#8217;m sure Lord Brittan knows that already.&#160;&#160;&#160; </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">But still, why not appoint as a trade adviser a man whose career saw him help&#160;lock UK trade ever more tightly into the sclerotic, high tax / high regulation Eurozone?&#160;It could be just the thing to&#160;stimulate trade with India&#160;and China. <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">The fact Lord L&#160;happens to have been explicitly hostile to the Tory cause in the run up to the last set of Euro elections even gives his elevation an uber moderniser, welcome-to-the-Big-Tent twist.&#160;&#160;&#160; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Something tells me that his &#163;500 per day&#160;review (according to the BBC) is unlikely conclude that we&#160;should boost our global trade by&#160;having less interference from Europe.&#160;Nor, if I was a gambling sort, would I put money on an ex-official ever proposing fewer officials, less regulation and lower taxation.&#160;Instead, I imagine any proposals will somehow offer the opposite - coordinated trade strategies, picking winners, and&#160;bigger export credit subsidies for big corporations .....&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Perhaps Leon&#160;might&#160;be asked to lobby his former Eurocrat colleagues to ask if we might be allowed to have the sort of trade policy we need?&#160; It is after all they, not anyone you voted for, who now decides.&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Enough about technocratic appointments.&#160;How are those Coalition proposals to make government more accountable to Parliament coming along? <o:p></o:p></span> </p> http://www.talkcarswell.com/show.aspx?id=1543http://www.talkcarswell.com/show.aspx?id=1543Thu, 19 Aug 2010 15:21:00 GMT1542AV referendum - it doesn't have to be this way <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Perhaps like me, you sense there&#8217;s something not right with our political system.&#160;&#160;Yet you can't quite see how&#160;AV is the solution.&#160; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Maybe, when the Coalition was first formed, you found yourself&#160;pleasantly surprised.&#160;So much so,&#160;that when Dave and Nick announced a referendum on electoral reform, you thought &#8220;why not?&#8221; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Over the summer, I&#8217;ve been looking hard to see how AV is the answer to anything.&#160;I still don't get it. <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">AV does nothing to solve the problem of &#8220;safe seat&#8221; party fiefdoms, which make so many MPs answer inward to party whips, rather than outward to local people. <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Far from making our politicians more accountable, surely AV actually allows them to disregard large chunks of opinion?&#160; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">For a generation or so, we have been moving from a political system dominated by two-and-a-half parties, towards one with a spectrum of choice.&#160; Voters want representation that is&#160;niche, distinctive, particular and local.&#160;Big political parties that only do generic brand politics, built on centrally controlled messages and parroted scripts, have lost market share as a consequence. <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">A cynic might see AV as the Westminster village&#8217;s response to its collective loss of market share.&#160;</span> <span style="font-family: 'Verdana', 'sans-serif'; color: red; font-size: 11pt">With elections decided on&#160;second preferences, people's votes will eventually go to&#160;the established parties.&#160; The established parties won't have quite the same need to go after people's votes.&#160;</span> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">&#160;The results will favour the generic and&#160;bland &#160;&#8211; and maybe even the mediocrities, too.&#160; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">I remain puzzled as to why the Coalition is proposing a referendum on AV when neither the Tories nor the Lib Dems offered AV in their manifestos.&#160;Whatever thought process went into Coalition haggling, surely the point is that the people &#8211; not politicians - should have the final say over any change.&#160;So why not ensure that any referendum offers voters real choice, including the option of multi-member seats?&#160;Why not include Disraeli&#8217;s idea of three member boroughs?&#160;Irish-style STV? <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: red; font-size: 11pt">The referendum on electoral reform must allow people to make a choice based on all the options &#8211; including multi-member seats - not merely the politicians&#8217; preferences.</span> </p> <p> <span style="color: #0000ff"> <span style="color: #0000ff"> <span style="font-family: 'Verdana', 'sans-serif'; font-size: 11pt"> <o:p>UPDATE:&#160; One of my readers points out that STV in Ireland doesn't work, apparently.&#160; It "creates a parliament of local interests ... focused on thier constituency".&#160; The horror! ...&#160;when you can have a</o:p> </span> </span> </span> <span style="color: #0000ff"> <span style="color: #0000ff"> <span style="font-family: 'Verdana', 'sans-serif'; font-size: 11pt"> <o:p>parliament of party interests in which MPs focus on&#160;gaining promotion from&#160;whips.&#160; </o:p> </span> </span> </span> </p> <p> <span style="color: #0000ff"> <span style="color: #0000ff"> <span style="font-family: 'Verdana', 'sans-serif'; font-size: 11pt"> <o:p> </o:p> </span> </span> </span> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt"> <o:p> <span style="color: #0000ff">And worse, there's "pork barrel" in Ireland, too, apparently.&#160; Thank&#160;goodness&#160;schools, hospitals and defence contracts are never dished out in&#160;certain constituencies for political considerations under our electoral system ....</span> </o:p> </span> </p> http://www.talkcarswell.com/show.aspx?id=1542http://www.talkcarswell.com/show.aspx?id=1542Wed, 18 Aug 2010 09:51:00 GMT1541How to stop the cowboy clampers? <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Rogue car clampers are a real menace.&#160;Hardly a week goes by without a constituent complaining that they&#8217;ve been forced to pay &#163; hundreds for momentarily pulling onto a bit of pavement outside an empty shop.&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">It&#8217;s also driving trade out of towns like Clacton.&#160;Pensioners stung with big bills, and confronted by foul-mouthed thugs, are hardly likely to shop in town again. <u1:p></u1:p><o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Something needs to be done.&#160;But what? <u1:p></u1:p><o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">One idea would be to regulate those permitted to wheel clamp - and the fees they charge.&#160;But something tells me that&#160;putting an IPSA-type quango in charge&#160;is never an effective&#160;solution to anything. <u1:p></u1:p><o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Another proposal is a&#160;blanket ban on clamping&#160;vehicles on private land.&#160;It&#8217;s been suggested that this form part of the Freedom Bill.&#160; A Freedom Bill that bans things is a novel idea, but not one that I&#8217;m sure is going to be 100% effective.&#160;I imagine that the thugs that extort money at present would be perfectly capable of doing so with a ticketing system that permitted them to demand payment, without actually having to use clamps.&#160; <u1:p></u1:p><o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">The heart of the problem is caused by the legal right of the cowboy clampers to demand payment, rather than the physical use of clamps.&#160;Ending this form of extortion means addressing the fact that the cowboy clampers are only able to extort money because the private landowner has signed a contract permitting them to do so. &#160; <u1:p></u1:p><o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Unless one is proposing to&#160;ban the right of landowners to charge payment, why not allow those who have had vast sums taken off them (sometimes by extortion and threats)&#160;sue the landowner? <u1:p></u1:p><o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">If we lived in a society where ordinary folk, rather than just the rich and the reckless, had access to justice in the courts, I imagine a private landowner that allowed cowboy clampers would soon find themselves of the receiving end of a writ.&#160;Unless a landowner had a specific and persistent problem with people parking on their land, they&#8217;d not want to sign a contract with a cowboy clamper without thinking through the potential liabilities very carefully &#8211; especially if threatening and aggressive behaviour were involved.&#160;After a couple of court cases, I imagine the problem would disappear. <u1:p></u1:p><o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Giving ordinary folk access to justice in the courts?&#160;Now that really is a radical idea for the Coalition to ponder.&#160;And it&#8217;d solve more than just the problem of unscrupulous car clampers .... <u1:p></u1:p><o:p></o:p></span> </p> http://www.talkcarswell.com/show.aspx?id=1541http://www.talkcarswell.com/show.aspx?id=1541Tue, 17 Aug 2010 11:53:00 GMT1540Government appoints MP adviser - shock <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">In a surprise new move, ministers are expected to announce that a backbench MP will be made a government adviser.&#160; The new &#8220;policy czar&#8221; will be brought in specifically to express opinions and make suggestions. </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Whitehall sources confirm the role will be&#160;unpaid, and&#160;are keen to emphasize that ministers will&#160;not be under any&#160;obligation to take the MP&#8217;s advice.&#160; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">This latest appointment is seen as a major coup for the&#160;government.&#160; It follows a&#160;string of appointments that have seen&#160;big names enticed into the Coalition &#8220;Big Tent&#8221;, such as&#160;retail magnate, Philip Green, BP boss, Lord Browne, as well as Will Hutton, Alan Milburn and David Halpern. <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">A government source said &#8220;Giving backbenchers a say in government is a new departure.&#160; Normally Dave just sends them a Christmas card and stuff.&#160;Sometimes whips are required to imply that a job might be offered at some unspecified time in the future.&#160;But even when we&#8217;re left with no choice but to dish something out, it&#8217;s vital not to give them a role that involves deciding things" <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">&#8220;But the new politics means recognizing that our backbenchers aren&#8217;t just there to work in their constituencies and then vote the way we say.&#160; Their views can count too.&#8221; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">The new policy czar is expected to produce a major report that will look at the so-called &#8220;policy postcode lottery&#8221;.&#160;According to some think tankers, the policy postcode lottery means those with addresses in certain&#160;swanky parts of London are more likely to have a say&#160;compared to others.&#160; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Some special advisers, however, are understood to oppose the move, and will want assurances before the new appointment can be confirmed. <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">&#8220;Obviously we need to reach out to&#160;former Blairites and celebrity people.&#160; They are cool and having&#160;them on board&#160;helps show how much government has changed "said one.&#160;"But if we have to start having backbenchers involved, they must not be allowed to disrupt the smooth running of government, or say embarrassing things, or get on their high horse just because they&#160;got elected to the Commons&#8221;. <o:p></o:p></span> </p> http://www.talkcarswell.com/show.aspx?id=1540http://www.talkcarswell.com/show.aspx?id=1540Mon, 16 Aug 2010 13:05:00 GMT1539Matt d'Ancona's curious case for a graduate tax <p> <span style="font-family: Verdana; color: black; font-size: 11pt">A curious&#160;piece in&#160;<a style="color: #0000ff" href="http://www.telegraph.co.uk/comment/columnists/matthewd_ancona/7946148/The-graduate-tax-is-a-Tory-idea-whose-time-has-come.html">today's Telegraph</a> has&#160;(the normally brilliant) Matthew d'Ancona claiming that a graduate tax is a Tory idea.&#160; </span> </p> <p> <span style="font-family: Verdana; color: black; font-size: 11pt">His justification for saying so appears to be that before the 1992 General Election a Tory minister privately told him he favoured such a scheme.</span> </p> <p> <span style="font-family: Verdana; color: black; font-size: 11pt">Before the 1992 election, you could find all manner of Tory ministers privately telling you they favoured all sorts of daft things - from joining the Euro to putting VAT on fuel.&#160; It was one of the reasons&#160;the centre right lost its way so disastrously in&#160;the years that followed. </span> </p> <p> <span style="font-family: Verdana; color: black; font-size: 11pt">A graduate tax is </span> <em> <span style="font-family: Verdana; color: black; font-size: 11pt">not</span> </em> <span style="font-family: Verdana; color: black; font-size: 11pt">a Conservative idea.&#160; Far from helping the Big Society, it would do the opposite, drawing civic institutions and seats of learning ever more tightly under centralised state supervision. </span> </p> <p> <span style="font-family: Verdana; color: black; font-size: 11pt">Matthew is absolutely right that in order to&#160;maintain world class universities, we need to raise more money to fund them.&#160; He is also correct in his assumption that those who benefit from a world class university education should contribute towards the costs.&#160; </span> </p> <p> <span style="font-family: Verdana; color: black; font-size: 11pt">But that is an argument for freeing universities to set fees themselves.&#160;That way the extra money is collected by universities for courses provided by&#160;universities&#160;without&#160;having to have politicians,&#160;quangocrats and the architecture of Big Government get in the way.&#160; </span> </p> <p> <span style="font-family: Verdana; color: black; font-size: 11pt">It is certainly not an argument for raising the tax burden on the most productive&#160;part of the work force in perpetuity , and making universities eternally dependent on state-hand outs . </span> </p> http://www.talkcarswell.com/show.aspx?id=1539http://www.talkcarswell.com/show.aspx?id=1539Sun, 15 Aug 2010 10:45:00 GMT1538Decentralising from the centre: the limits to Whitehall's localism <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Eric Pickles wants to ban local councils hiring lobbyists.&#160; This follows his brilliant idea that councils should stop spending money on self-promotional newspapers.&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Three cheers to such sentiments.&#160; However, I'm not sure that a blanket ban from&#160;Whitehall is the way to achieve&#160;it.</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">That town halls&#160;spend&#160;money on PR and self-promotion is symptomatic of a more fundamental problem;&#160;a lack of local&#160;accountability over tax and spend decisions.&#160; Instead of further restricting how councils can spend money, we ought to be giving them much greater control over how they raise it.&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">If a local council was largely self-financing, with most revenue raised from a local tax-base, local folk would not tolerate it if their money was spent wastefully - because they'd recognise it as their money.&#160;&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Unless there was a pretty compelling case for doing so, spending on PR and self-promotion&#160;would stop.&#160;</span> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">And because it was local folk on polling day, not remote officials, who&#160;decided what did or did not constitute&#160;wasteful spending, you might even see more people&#160;vote.&#160;&#160;&#160;&#160; </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">If serious about localism, ministers need to address the fact that&#160;something like&#160;93% of&#160;all UK tax revenue&#160;is collected centrally.&#160; With so&#160;little raised locally,&#160;folk have less&#160;sense of ownership over what the town hall does with it.&#160;&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">By imposing (yet another)&#160;restriction on what local authorities can do with public money, Whitehall is once again saying that they&#160;are better able to decide&#160;than&#160;local people.&#160; Where&#8217;s the localism in that? &#160;&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">In the early 1970s, a Conservative government came to office intending to decentralise control over the economy (Selsdon man).&#160;They soon discovered that you cannot easily decentralise from the centre.&#160;You cannot use the levers of executive power to hand power away.</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">(PS. For ideas on how&#160;in government one might hand power away, see the ironically titled book, <em>The Plan</em>.)&#160;</span>&#160;</p> http://www.talkcarswell.com/show.aspx?id=1538http://www.talkcarswell.com/show.aspx?id=1538Sat, 14 Aug 2010 15:11:00 GMT1537John Redwood's blog <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">On quiet Fridays &#8211; or when charging around the constituency, as I am today - I often link to other blogs.</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Today I link to <a style="color: #0000ff" href="http://www.johnredwoodsdiary.com/?p=6803">another&#160;excellent blog entry by John Redwood</a>, my highly respected colleague.&#160; He makes some points that those who merely rehash&#160;the tried-but-failed King Charles Street orthodoxy about Britain and the EU would do well read.<o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt"> <a href="http://www.johnredwoodsdiary.com/?p=6803"> <span style="font-family: 'Verdana', 'sans-serif'; color: #0000ff; font-size: 11pt">Read it here</span> </a>.<o:p></o:p></span> </p> http://www.talkcarswell.com/show.aspx?id=1537http://www.talkcarswell.com/show.aspx?id=1537Fri, 13 Aug 2010 13:43:00 GMT1536Fox reforms at MoD <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Liam Fox is expected to announce <a style="color: #0000ff" href="http://www.bbc.co.uk/news/uk-10960440">major reform at the Ministry of Defence</a>.&#160; Good.</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">The armed forces themselves, as opposed to thousands of MoD pen-pushers, are likely to be able to make decisions over what kit to buy.&#160; Excellent.&#160; </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Apparently, Lord Levene will head up a Defence Reform Unit.&#160; Even better.<o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">In the mid-1980s,&#160;Levene&#160;instigated reforms that&#160;increased&#160;competition for MoD contracts.&#160; </span> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">Since then,&#160;some of the&#160;progress has been&#160;undone by the&#160;way that&#160;the Defence Industrial Strategy has developed - and, some might suggest,&#160;too close a relationship between&#160;buyer (MoD) and&#160;seller (contractors).&#160;&#160;&#160;</span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt">The contractors can be relied upon to argue against it, but&#160;Levene seems to&#160;understand how&#160;competition brings&#160;better value from&#160;a finite defence&#160;budget.&#160;&#160;&#160; <o:p></o:p></span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt"> <span style="color: #ff0000"> <span style="font-family: 'Verdana', 'sans-serif'; font-size: 11pt">If Levene is to&#160;bring real choice and competition to defence procurement,&#160;it is hard to see how&#160;the current protectionist system&#160;can survive.&#160; </span> </span> </span> </p> <p> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt"> <span style="color: #ff0000"> </span> </span> <span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 11pt"> <span style="color: #ff0000"> <span style="font-family: 'Verdana', 'sans-serif'; font-size: 11pt">Good bye protectionist purchasing and&#160;hello off-the-shelf?&#160; We shall soon see.&#160;&#160;</span> </span>&#160;</span> </p> http://www.talkcarswell.com/show.aspx?id=1536http://www.talkcarswell.com/show.aspx?id=1536Fri, 13 Aug 2010 07:35:00 GMTPerlanet-0.56/lib000755023422023422 011731176247 13016 5ustar00davedave000000000000Perlanet-0.56/lib/Perlanet.pm000555023422023422 2156211731176247 15314 0ustar00davedave000000000000package Perlanet; use strict; use warnings; use Moose; use namespace::autoclean; use Carp; use DateTime::Duration; use DateTime; use Perlanet::Entry; use Perlanet::Feed; use Try::Tiny; use URI::Fetch; use XML::Feed; use vars qw{$VERSION}; BEGIN { $VERSION = '0.56'; } with 'MooseX::Traits'; $XML::Atom::ForceUnicode = 1; has 'ua' => ( is => 'rw', isa => 'LWP::UserAgent', lazy_build => 1 ); sub _build_ua { my $self = shift; my $ua = LWP::UserAgent->new( agent => "Perlanet/$VERSION" ); $ua->show_progress(1) if -t STDOUT; $ua->env_proxy; return $ua; } has 'cutoff' => ( isa => 'DateTime', is => 'ro', default => sub { DateTime->now + DateTime::Duration->new(weeks => 1); } ); has 'entries' => ( isa => 'Int', is => 'rw', default => 10, ); has 'entries_per_feed' => ( isa => 'Int', is => 'rw', default => 5, ); has 'feeds' => ( isa => 'ArrayRef', is => 'ro', default => sub { [] } ); has 'author' => ( isa => 'HashRef', is => 'ro', ); has $_ => ( isa => 'Str', is => 'ro', ) for qw( self_link title description url agent ); =head1 NAME Perlanet - A program for creating programs that aggregate web feeds (both RSS and Atom). =head1 SYNOPSIS my $perlanet = Perlanet->new; $perlanet->run; =head1 DESCRIPTION Perlanet is a program for creating programs that aggregate web feeds (both RSS and Atom). Web pages like this are often called "Planets" after the Python software which originally popularised them. Perlanet is a planet builder written in Perl - hence "Perlanet". You are probably interested in L to get started straight out of the box, batteries included style. Perlanet itself is the driving force behind everything, however. Perlanet reads a series of web feeds (filtering only those that are valid), sorts and selects entries from these web feeds, and then creates a new aggregate feed and renders this aggregate feed. Perlanet allows the user to customize all of these steps through subclassing and roles. For most uses, you probably don't want to use the Perlanet module. The L command line program is far more likely to be useful. =head1 CONSTRUCTOR =head2 new my $perlanet = Perlanet->new The constructor method. Can be passed a hashref of initialisers. See L below for details of the key/value pairs to pass in. =head1 ATTRIBUTES =over =item ua An instance of L. Defaults to a simple agent using C<< $cfg->{agent} >> as the user agent name, or C< Perlanet/$VERSION >. =item cutoff An instance of L which represents the earliest date for which feed posts will be fetched/shown. =item feeds An arrayref of L objects representing the feeds to collect data from. =back =head1 METHODS =head2 fetch_page Attempt to fetch a web page and a returns a L object. =cut sub fetch_page { my ($self, $url) = @_; return URI::Fetch->fetch( $url, UserAgent => $self->ua, ForceResponse => 1, ); } =head2 fetch_feeds Called internally by L and passed the list of feeds in L. Attempt to download all given feeds, as specified in the C attribute. Returns a list of L objects, with the actual feed data loaded. NB: This method also modifies the contents of L. =cut sub fetch_feeds { my ($self, @feeds) = @_; my @valid_feeds; for my $feed (@feeds) { my $response = $self->fetch_page($feed->url); if ($response->is_error) { carp 'Error retrieving ' . $feed->url; carp $response->http_response->status_line; next; } unless (length $response->content) { carp 'No data returned from ' . $feed->url; next; } try { my $data = $response->content; my $xml_feed = XML::Feed->parse(\$data); $feed->_xml_feed($xml_feed); $feed->title($xml_feed->title) unless $feed->title; push @valid_feeds, $feed; } catch { carp 'Errors parsing ' . $feed->url; carp $_ if defined $_; }; } return @valid_feeds; } =head2 select_entries Called internally by L and passed the list of feeds from L. Returns a combined list of L objects from all given feeds. =cut sub select_entries { my ($self, @feeds) = @_; my @feed_entries; for my $feed (@feeds) { my @entries = $feed->_xml_feed->entries; if ($self->entries_per_feed and @entries > $self->entries_per_feed) { $#entries = $self->entries_per_feed - 1; } push @feed_entries, map { $_->title($feed->title . ': ' . $_->title); # Problem with XML::Feed's conversion of RSS to Atom if ($_->issued && ! $_->modified) { $_->modified($_->issued); } Perlanet::Entry->new( _entry => $_, feed => $feed ); } @entries; } return @feed_entries; } =head2 sort_entries Called internally by L and passed the list of entries from L. Sort the given list of entries into created/modified order for aggregation, and filters them if necessary. Takes a list of Ls, and returns an ordered list. =cut sub sort_entries { my ($self, @entries) = @_; my $day_zero = DateTime->from_epoch(epoch => 0); @entries = grep { ($_->issued || $_->modified || $day_zero) < $self->cutoff } sort { ($b->modified || $b->issued || $day_zero) <=> ($a->modified || $a->issued || $day_zero) } @entries; # Only need so many entries if ($self->entries && @entries > $self->entries) { $#entries = $self->entries - 1; } return @entries; } =head2 build_feed Called internally by L and passed the list of entries from L. Takes a list of Ls, and returns a L that is the actual feed for the planet. =cut sub build_feed { my ($self, @entries) = @_; my $self_url = $self->self_link; my $f = Perlanet::Feed->new( modified => DateTime->now ); $f->title($self->title) if defined $self->title; $f->url($self->url) if defined $self->url; $f->description($self->description) if defined $self->description; $f->author($self->author->{name}) if defined $self->author->{name}; $f->email($self->author->{email}) if defined $self->author->{email}; $f->self_link($self->url) if defined $self->url; $f->id($self->url) if defined $self->url; $f->add_entry($_) for @entries; return $f; } =head2 clean_html Clean a HTML string so it is suitable for display. Takes a HTML string and returns a "cleaned" HTML string. =cut sub clean_html { my ($self, $entry) = @_; return $entry; } =head2 clean_entries Clean all entries for the planet. Takes a list of entries, runs them through C and returns a list of cleaned entries. =cut sub clean_entries { my ($self, @entries) = @_; my @clean_entries; foreach (@entries) { if (my $body = $_->content->body) { my $cleaned = $self->clean_html($body); $_->content->body($cleaned); } if (my $summary = $_->summary->body) { my $cleaned = $self->clean_html($summary); $_->summary->body($cleaned); } push @clean_entries, $_; } return @clean_entries; } =head2 render Called internally by L and passed the feed from L. This is the hook where you generate some type of page to display the result of aggregating feeds together (ie, inserting the posts into a database, running a HTML templating library, etc) Takes a L as input (as generated by L. =cut sub render { my ($self, $feed) = @_; } =head2 run The main method which runs the perlanet process. =cut sub run { my $self = shift; my @feeds = $self->fetch_feeds(@{$self->feeds}); my @selected = $self->select_entries(@feeds); my @sorted = $self->sort_entries(@selected); my @cleaned = $self->clean_entries(@sorted); my $feed = $self->build_feed(@cleaned); $self->render($feed); } =head1 TO DO See http://wiki.github.com/davorg/perlanet =head1 SUPPORT There is a mailing list which acts as both a place for developers to talk about maintaining and improving Perlanet and also for users to get support. You can sign up to this list at L To report bugs in Perlanet, please use the CPAN request tracker. You can either use the web page at L or send an email to bug-Perlanet@rt.cpan.org. =head1 SEE ALSO =over 4 =item * L =item * L =back =head1 AUTHOR Dave Cross, =head1 COPYRIGHT AND LICENSE Copyright (c) 2010 by Magnum Solutions Ltd. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available. =cut 1; Perlanet-0.56/lib/Perlanet000755023422023422 011731176247 14570 5ustar00davedave000000000000Perlanet-0.56/lib/Perlanet/Entry.pm000444023422023422 103311731176247 16361 0ustar00davedave000000000000package Perlanet::Entry; use strict; use warnings; use Moose; =head1 NAME Perlanet::Entry - represents an entry in a feed =head1 DESCRIPTION This is a wrapper around L with support for linking back to the feed from the entry =cut has '_entry' => ( isa => 'XML::Feed::Entry', is => 'ro', required => 1, handles => [qw( title link issued body summary content modified author )] ); has 'feed' => ( isa => 'Perlanet::Feed', is => 'ro', required => 1 ); no Moose; __PACKAGE__->meta->make_immutable; 1; Perlanet-0.56/lib/Perlanet/Feed.pm000444023422023422 254411731176247 16133 0ustar00davedave000000000000package Perlanet::Feed; use strict; use warnings; use Moose; use XML::Feed; =head1 NAME Perlanet::Feed - represents a feed =cut has 'title' => ( isa => 'Str', is => 'rw', ); has 'url' => ( isa => 'Str', is => 'rw', ); has 'web' => ( isa => 'Str', is => 'rw', ); has 'format' => ( is => 'rw', ); has 'description' => ( is => 'rw', ); has 'author' => ( is => 'rw', ); has 'email' => ( is => 'rw', ); has '_xml_feed' => ( isa => 'XML::Feed', is => 'rw', ); has 'id' => ( is => 'rw', ); has 'self_link' => ( is => 'rw', ); has 'modified' => ( is => 'rw', ); has 'entries' => ( isa => 'ArrayRef', is => 'rw', default => sub { [] }, traits => [ 'Array' ], handles => { add_entry => 'push', } ); =head1 METHODS =head2 as_xml Returns a string containing the XML for this feed and all its entries =cut sub as_xml { my ($self, $format) = @_; my $feed = XML::Feed->new($format); $feed->title($self->title); $feed->link($self->url); $feed->description($self->description); $feed->author($self->author); if ($format eq 'Atom') { $feed->{atom}->author->email($self->email); } $feed->modified($self->modified); $feed->self_link($self->self_link); $feed->id($self->id); $feed->add_entry($_->_entry) for @{ $self->entries }; return $feed->as_xml; } no Moose; __PACKAGE__->meta->make_immutable; 1; Perlanet-0.56/lib/Perlanet/Simple.pm000444023422023422 332411731176247 16516 0ustar00davedave000000000000package Perlanet::Simple; use strict; use warnings; use Moose; use namespace::autoclean; use Carp; use YAML 'LoadFile'; extends 'Perlanet'; with qw( Perlanet::Trait::Cache Perlanet::Trait::OPML Perlanet::Trait::Scrubber Perlanet::Trait::Tidy Perlanet::Trait::YAMLConfig Perlanet::Trait::TemplateToolkit Perlanet::Trait::FeedFile ); =head1 NAME Perlanet::Simple - a DWIM Perlanet =head1 SYNOPSIS my $perlanet = Perlanet::Simple->new_with_config('perlanet.yaml') $perlanet->run; =head1 DESCRIPTION L provides the driving force behind all Perlanet applications, but it doesn't do a whole lot, which means you would normally have to write the functionality you require. However, in the motive of simplicity, Perlanet::Simple glues enough stuff together to allow you to get a very quick planet working out of the box. Perlanet::Simple takes the standard Perlanet module, and adds support for caching, OPML feed generation, and L