← Back to team overview

ubuntu-bots team mailing list archive

[Merge] lp:~ubuntu-bots/ubuntu-bots/meetingology into lp:ubuntu-bots

 

Ben Donald-Wilson has proposed merging lp:~ubuntu-bots/ubuntu-bots/meetingology into lp:ubuntu-bots.

Requested reviews:
  Alan Bell (alanbell)

For more details, see:
https://code.launchpad.net/~ubuntu-bots/ubuntu-bots/meetingology/+merge/90562

Sorry about the long wait, I have fixed it and hopefully the diff is a lot smaller then the old one.
-- 
https://code.launchpad.net/~ubuntu-bots/ubuntu-bots/meetingology/+merge/90562
Your team Ubuntu IRC Bots is subscribed to branch lp:~ubuntu-bots/ubuntu-bots/meetingology.
=== added file 'README.txt'
--- README.txt	1970-01-01 00:00:00 +0000
+++ README.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,74 @@
+USAGE
+~~~~~
+http://wiki.ubuntu.com/ScribesTeam/MootBot
+
+Inspired by the original MeetBot, by Holger Levsen, which was itself a
+derivative of Mootbot (https://wiki.ubuntu.com/ScribesTeam/MootBot),
+by the Ubuntu Scribes team.
+
+/usr/share/doc/supybot/GETTING_STARTED.gz (on Debian systems) provides
+information on configuring supybot the first time, including taking
+ownership the first time.
+
+
+DESIGN DECISIONS
+~~~~~~~~~~~~~~~~
+The MeetBot plugin doesn't operate like a regular supybot plugin.  It
+bypasses the normal command system.  Instead it listens for all lines
+(it has to log them all anyway) and if it sees a command, it acts on it.
+
+- Separation of meeting code and plugin code.  This should make it
+  easy to port to other bots, and perhaps more importantly make it
+  easier to maintain, or rearrange, the structure within supybot.
+
+- Not making users have to register and have capabilities added.  The
+  original meetbot ran as a service to many channels not necessarily
+  connected to the original owner.
+
+- Makes it easier to replay stored logs.  I don't have to duplicate the
+  supybot command parsing logic, such as detecting the bot nick and
+  running the proper command.  Also, there might be command overlaps
+  with some preexisting plugins.
+
+
+INSTALLATION
+~~~~~~~~~~~~
+
+Requirements: 
+* pygments (debian package python-pygments) (for pretty IRC logs).
+* docutils (debian package python-docutils) (for restructured text to
+            HTML conversion)
+
+* Install supybot.  You can use supybot-wizard to make a bot 
+  configuration.
+
+  * Don't use a prefix character.  (disable this:
+      supybot.reply.whenAddressedBy.chars: 
+    in the config file - leave it blank afterwards.)
+
+* Move the MeetBot directory into your plugins directory of Supybot.
+
+* Make supybot join any channels you are interested in.  The wizard
+  handles this for the first part.  After that, I guess you have to
+  learn about supybot (I don't know enough yet...).  If the plugin is
+  loaded, it is active on ALL channels the bot is on.  You can also
+  command the bot after it's online.
+
+* Make sure the plugin is loaded.
+    supybot.plugins: Admin Misc User MeetBot Owner Config Channel
+  (can also control loading after the bot is started)
+
+Supybot does a lot, but I don't know much about it.  Hopefully Supybot
+expert users can enlighten me as to better ways to do things.
+
+In particular, supybot has a large configuration system, which I know
+nothing about.  It may be worth hooking MeetBot into that system.
+
+
+
+LICENSE
+~~~~~~~
+The MeetBot plugin is under the same license as supybot is, a 3-clause
+BSD.  The license is documented in each code file (and also applies to
+this README file).
+

=== renamed file 'README.txt' => 'README.txt.moved'
=== added file '__init__.py'
--- __init__.py	1970-01-01 00:00:00 +0000
+++ __init__.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,66 @@
+###
+# Copyright (c) 2009, Richard Darst
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions, and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions, and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#   * Neither the name of the author of this software nor the name of
+#     contributors to this software may be used to endorse or promote products
+#     derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+###
+
+"""
+Add a description of the plugin (to be presented to the user inside the wizard)
+here.  This should describe *what* the plugin does.
+"""
+
+import supybot
+import supybot.world as world
+
+# Use this for the version of this plugin.  You may wish to put a CVS keyword
+# in here if you're keeping the plugin in CVS or some similar system.
+__version__ = ""
+
+# XXX Replace this with an appropriate author or supybot.Author instance.
+__author__ = supybot.Author('Richard Darst', 'MrBeige', 'rkd@xxxxxxxx')
+
+# This is a dictionary mapping supybot.Author instances to lists of
+# contributions.
+__contributors__ = {}
+
+# This is a url where the most recent plugin package can be downloaded.
+__url__ = '' # 'http://supybot.com/Members/yourname/MeetBot/download'
+
+import config
+import plugin
+reload(plugin) # In case we're being reloaded.
+# Add more reloads here if you add third-party modules and want them to be
+# reloaded when this plugin is reloaded.  Don't forget to import them as well!
+
+if world.testing:
+    import test
+
+Class = plugin.Class
+configure = config.configure
+
+
+# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:

=== added directory 'conf'
=== added file 'conf/channels.conf'
=== added file 'conf/ignores.conf'
=== added file 'conf/userdata.conf'
=== added file 'conf/users.conf'
=== added file 'config.py'
--- config.py	1970-01-01 00:00:00 +0000
+++ config.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,53 @@
+###
+# Copyright (c) 2009, Richard Darst
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions, and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions, and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#   * Neither the name of the author of this software nor the name of
+#     contributors to this software may be used to endorse or promote products
+#     derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+###
+
+import supybot.conf as conf
+import supybot.registry as registry
+
+def configure(advanced):
+    # This will be called by supybot to configure this module.  advanced is
+    # a bool that specifies whether the user identified himself as an advanced
+    # user or not.  You should effect your configuration by manipulating the
+    # registry as appropriate.
+    from supybot.questions import expect, anything, something, yn
+    conf.registerPlugin('MeetBot', True)
+
+
+MeetBot = conf.registerPlugin('MeetBot')
+# This is where your configuration variables (if any) should go.  For example:
+# conf.registerGlobalValue(MeetBot, 'someConfigVariableName',
+#     registry.Boolean(False, """Help for someConfigVariableName."""))
+conf.registerGlobalValue(MeetBot, 'enableSupybotBasedConfig',
+    registry.Boolean(False, """Enable configuration via the supybot config """
+                            """mechanism."""))
+
+
+
+# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:

=== added file 'css-log-default.css'
--- css-log-default.css	1970-01-01 00:00:00 +0000
+++ css-log-default.css	2012-01-28 02:35:27 +0000
@@ -0,0 +1,15 @@
+/* For the .log.html */
+pre { /*line-height: 125%;*/
+      white-space: pre-wrap; }
+body { background: #f0f0f0; }
+
+body .tm  { color: #007020 }                      /* time */
+body .nk  { color: #062873; font-weight: bold }   /* nick, regular */
+body .nka { color: #007020; font-weight: bold }  /* action nick */
+body .ac  { color: #00A000 }                      /* action line */
+body .hi  { color: #4070a0 }                 /* hilights */
+/* Things to make particular MeetBot commands stick out */
+body .topic     { color: #007020; font-weight: bold }
+body .topicline { color: #000080; font-weight: bold }
+body .cmd       { color: #007020; font-weight: bold }
+body .cmdline  { font-weight: bold }

=== added file 'css-minutes-default.css'
--- css-minutes-default.css	1970-01-01 00:00:00 +0000
+++ css-minutes-default.css	2012-01-28 02:35:27 +0000
@@ -0,0 +1,34 @@
+/* This is for the .html in the HTML2 writer */
+body {
+    font-family: Helvetica, sans-serif;
+    font-size:14px;
+}
+h1 {
+    text-align: center;
+}
+a {
+    color:navy;
+    text-decoration: none;
+    border-bottom:1px dotted navy;
+}
+a:hover {
+    text-decoration:none;
+    border-bottom: 0;
+    color:#0000B9;
+}
+hr {
+    border: 1px solid #ccc;
+}
+/* The (nick, time) item pairs, and other body text things. */
+.details {
+    font-size: 12px;
+    font-weight:bold;
+}
+/* The 'AGREED:', 'IDEA', etc, prefix to lines. */
+.itemtype {
+    font-style: normal;    /* un-italics it */
+    font-weight: bold;
+}
+/* Example: change single item types.  Capitalized command name.
+/* .TOPIC  {  color:navy;  } */
+/* .AGREED {  color:lime;  } */

=== added directory 'data'
=== added directory 'data/tmp'
=== added directory 'doc'
=== added file 'doc/Manual.txt'
--- doc/Manual.txt	1970-01-01 00:00:00 +0000
+++ doc/Manual.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,866 @@
+====================================================
+MeetBot, a supybot plugin for IRC meeting notetaking
+====================================================
+
+
+
+MeetBot is a plugin to the IRC bot supybot to facilitate taking of
+notes during IRC meetings.  This allows you to better communicate with
+your project or groups after the IRC meeting, as well as keep the
+meeting more under control and on-topic.
+
+.. contents::
+
+
+
+
+Tutorial
+========
+
+Let's go through, step by step, how a typical meeting might run::
+
+  < MrBeige> #startmeeting
+
+We use the ``#startmeeting`` command to tell MeetBot to start the
+meeting.  The person who calls the command becomes the chair - having
+the power to guide the meeting.  However, by default MeetBot allows
+other participants to enter most things into the logs, since inviting
+contributions is generally a good thing.::
+
+  < MeetBot> Meeting started Wed Jun 17 05:00:49 2009 UTC.  The chair
+             is MrBeige.
+  < MeetBot> Information about MeetBot at
+             http://wiki.debian.org/MeetBot , Useful Commands: #action
+             #agreed #halp #info #idea #link #topic.
+
+MeetBot gives us a little bit of information about the meeting.::
+
+  < MrBeige> #topic should we release or not?
+  -!- MeetBot changed the topic of #meetbot-test to: should we release
+      or not?
+
+We use the ``#topic`` command to tell MeetBot to move to the first
+topic.  MeetBot sets the topic in the channel to the topic which is
+given on the line.  Don't worry, the topic will be restored at the end
+of the meeting.::
+
+  < MrBeige> #info we have two major blocking bugs: the character set
+             conversion, and the segfaults heisenbug in the save
+             routine.
+
+When there is important things said, we don't want them to be lost in
+the irclogs.  Thus, we use the ``#info`` command to make a note of
+it in the meeting minutes.  It is also highlighted in the irclogs
+which MeetBot takes.::
+
+  < MrBeige> #agreed we give one week to fix these (no other changes
+             accepted), and then release
+
+We also have the ``#agreed`` command to use.  This can only be used by
+the chairs of the meeting, and should (obviously) be used to document
+agreement.  The rest of the line goes into the minutes as the thing
+agreed on.::
+
+  < MrBeige> #action MrGreen and MrMauve work together to fix the bugs
+  < MrBeige> #action MrBeige releases when done
+
+We have the ``#action`` command.  This one is works just like the last
+two, but has one extra feature: at the end of the meeting, it makes a
+list of "Action Items", useful for being sure things get taken care
+of.  But there is more: it also makes a list of action items sorted by
+*nick*.  This can be used to easily see what is assigned to you.  In
+order for an item to be sorted by a nick, that nick has got to say
+something during the meeting (but also see the ``#nick`` command), and
+you have to use their nick exactly (use tab completion!).::
+
+  < MrBeige> #topic goals for release after next
+  -!- MeetBot changed the topic of #meetbot-test to: goals for release
+      after next
+
+Moving on to the next topic...::
+
+  ...
+  < MrBeige> #info make it better
+  ...
+  < MrBeige> #info release faster
+  ...
+
+Record some of the important items from this section.::
+
+  < MrBeige> #endmeeting
+
+Hit the ``#endmeeting`` command.  The meeting ends, and logs and
+minutes are saved::
+
+  -!- MeetBot changed the topic of #meetbot-test to: General
+      discussion of MeetBot
+  < MeetBot> Meeting ended Wed Jun 17 05:03:45 2009 UTC.  Information
+             about MeetBot at http://wiki.debian.org/MeetBot .
+  < MeetBot> Minutes: http://rkd.zgib.net/meetbot/meetbot-test/meetbot-test.html
+  < MeetBot> Log: http://rkd.zgib.net/meetbot/meetbot-test/meetbot-test.log.html
+
+MeetBot conveniently tells us where all of the logs are stored.  You
+can look at the `logs`_ and `minutes`_ online.
+
+.. _logs: http://rkd
+.. _minutes: http://rkd
+
+
+
+
+User reference
+==============
+
+Commands
+--------
+
+All commands are case-insensitive, and use the ``#`` prefix
+character.   Not all commands have output.  This might be confusing,
+because you don't know if it's been acted on or not.  However, this is
+a conscious design decision to try to keep out of the way and not
+distract from the real people.  If something goes wrong, you can
+adjust and have MeetBot re-process the logs later.
+
+#startmeeting
+  Starts a meeting.  The calling nick becomes the chair.  If any text
+  is given on the rest of the line, this becomes the meeting topic,
+  see ``#meetingtopic`` above.
+
+#endmeeting
+  End a meeting, save logs, restore previous topic, give links to
+  logs.  You know the drill.  (Chairs only.)
+
+#topic
+  Set the current topic of discussion.  MeetBot changes the topic in
+  the channel (saving the original topic to be restored at the end of
+  the meeting).  (Chairs only.)
+
+#agreed (alias #agree)
+  Mark something as agreed on.  The rest of the line is the details.
+  (Chairs only.)
+
+#chair and #unchair
+  Add new chairs to the meeting.  The rest of the line is a list of
+  nicks, separated by commas and/or spaces.  The nick which started
+  the meeting is the ``owner`` and can't be de-chaired.  The command
+  replies with a list of the current chairs, for verification (Chairs
+  only.)  Example::
+
+    < MrBeige> #chair MrGreen MsAlizarin
+    < MeetBot> Current chairs are: MsAlizarin MrBeige MrGreen
+
+#action
+
+  Add an ``ACTION`` item to the minutes.  Provide irc nicks of people
+  involved, and will be both a complete listing of action items, and a
+  listing of action items sorted by nick at the end of the meeting.
+  This is very useful for making sure this gets done.  Example::
+
+    < MrBeige> #action MrGreen will read the entire Internet to
+               determine why the hive cluster is under attack.
+
+  If MrGreen has said something during the meeting, this will be
+  automatically assigned to him.
+
+#info
+  Add an ``INFO`` item to the minutes.  Example::
+
+    < MrBeige> #info We need to spawn more overlords before the next
+               release.
+
+#link
+  Add a link to the minutes.  The URL must be the first thing on the
+  line, separated by a space from the rest of the line, and it will be
+  properly hyperlinked.  This command is automatically detected if the line
+  starts with http:, https:, mailto:, and some other common protocols
+  defined in the ``UrlProtocols`` configuration variable.  Examples::
+
+    < MrBeige> #link http://wiki.debian.org/MeetBot/ is the main page
+    < MrBeige> http://wiki.debian.org/MeetBot/ is the main page
+
+  Both of these two examples are equivalent, and will hyperlink
+  properly.  The first example below won't hyperlink properly, the
+  second one won't be automatically detected::
+
+    < MrBeige> #link the main page is http://wiki.debian.org/MeetBot/
+    < MrBeige> the main page is http://wiki.debian.org/MeetBot/
+
+
+
+
+Less-used commands
+------------------
+
+#meetingtopic
+  Sets the "meeting topic".  This will always appear in the topic in
+  the channel, even as the #topic changes.  The format of the IRCtopic
+  is "<topic> (Meeting Topic: <meeting topic>)".  (Chairs only.)
+
+#commands
+  List recognized supybot commands.  This is the actual "help" command.
+
+#idea
+  Add an ``IDEA`` to the minutes.
+
+#help (alias #halp)
+  Add a ``HELP`` item to the minutes.  Confusingly, this does *not* give
+  supybot help.  See #commands.
+
+#accepted (alias #accept)
+  Mark something as accepted.  The rest of the line is the details.
+  (Chairs only.)
+
+#rejected (alias #reject)
+  Mark something as rejected.  The rest of the line is the details.
+  (Chairs only.)
+
+#save
+  Write out the logs right now.  (Chairs only.)
+
+#nick
+  Make a nick be recognized by supybot, even though it hasn't said
+  anything.  This is only useful in order to make a list of action
+  items be grouped by this nick at the end of the meeting.
+
+#undo
+  Remove the last item from the meeting minutes.  Only applies to
+  commands which appear in the final output.  (Chairs only.)
+
+#restrictlogs
+  When logs are saved, remove the permissions specified in the
+  configuration variable ``RestrictPerm``.  (Chairs only.)
+
+#lurk and #unlurk
+  When ``lurk`` is set, MeetBot will only passively listen and take
+  notes (and save the notes), not reply or change the topic  This is
+  useful for when you don't want disruptions during the meeting.
+  (Chairs only.)
+
+#meetingname
+  Provide a friendly name which can be used as a variable in the
+  filename patterns.  For example, you can set
+  filenamePattern = '%(channel)s/%%Y/%(meetingname)s.%%F-%%H.%%M'
+  to allow #meetingname to categorize multiple types of meeting
+  occurring in one channel.
+
+  All spaces are removed from the rest of the line and the string is
+  converted to lowercase.  If ``meetingname`` is not provided, it
+  defaults to ``channel``.  (Chairs only.)
+
+
+
+
+Hints on how to run an effective meeting
+----------------------------------------
+
+*Please contribute to this section!*
+
+* Have an agenda.  Think about the agenda beforehand, so that
+  attendees are not tempted to jump ahead and discuss future items.
+  This will make it very hard to follow.
+* *Liberally* use the ``#action`` command, making sure to include the
+  nick of the person responsible.  It will produce an easy-to-scan
+  list of things to do, as well as a sorted-by-nick version.  This
+  will make these things more likely to get done.
+* In the same spirit, liberally use ``#info`` on important pieces of
+  data.  If you think you'll want to refer to it again, ``#info``
+  it.  Assigning someone to watch the meeting to ``#info`` other
+  people's lines (if they forget) usually pays off.
+* Don't be afraid to tell attendees to wait for a future topic to
+  discuss something.
+* Delegate where possible and have those interested discuss the
+  details after the meeting, where applicable.  No need to take
+  everyone's time if not everyone needs to decide.  (This only
+  applies to some types of meetings)
+* Sometimes one chair to manage the topic at hand, and one chair to
+  manage all people who are going off-topic, can help.
+
+
+
+
+Administrators
+==============
+
+Overview
+--------
+
+Unfortunately, MeetBot seems a bit complex to configure.  In order to
+keep things straight, keep this in mind: MeetBot has two distinct
+pieces.  The first (``meeting.py`` and friends) is the meeting parser
+and note/logfile generator.  This part can run independently,
+*without* the supybot plugin.  The second part interfaces the core
+``meeting.py`` to supybot, to make it usable via IRC.
+
+When reading about how to run MeetBot, keep this in mind, and if
+something is applicable to ``meeting.py`` features, just supybot
+features, or both.
+
+This design split greatly increases modularity (a "good thing"), and
+also allows the Replay functionality.  It should also allow other bot
+plugins to easily be written.
+
+
+
+
+Replay functionality
+--------------------
+
+Let's say you had a meeting which happened a while ago, and you would
+like to update the logs to a newer format.  If supybot was the only
+way to use MeetBot, you'd be out of luck.  Luckily, there is an
+independent way to replay meetings::
+
+    python /path/to/meeting.py replay /path/to/old_meeting.log.txt
+
+You run the meeting.py file as a script, giving the subcommand
+``replay`` and then a path to a ``.log.txt`` file from a previous
+meeting (or from some other source of IRC logs, it's essentially the
+irssi/xchat format).  It parses it and processes the meeting, and
+outputs all of the usual ``.html``, ``.log.html``, and so on files in
+the directory parallel to the input file.
+
+This is useful if you want to upgrade your output formats, MeetBot
+broke and you lost the realtime log and want to generate a summary
+using your own logfiles, remove or change something in the logs that
+was incorrect during the meeting.  As such, this is an important
+feature of MeetBot.
+
+However, this does make configuration changes harder.  Since the
+replay function works *independent* of supybot, any configuration that
+is done in supybot will be invisible to the replay function.  Thus, we
+have to have a non-supybot mechanism of configuring MeetBot.  There
+was a supybot way of configuring MeetBot added later, which can adjust
+most variables.  However, if something is configured here, it won't be
+seen if a file is replayed.  This might be OK, or it might not be,
+depending on the variable.
+
+
+
+
+Configuration
+-------------
+
+meetingLocalConfig.py configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This is the non-supybot method of configuration, and allows the most
+flexibility.  **It works for configuring supybot, too**, but requires
+shell access and a MeetBot reload to change.
+
+Configuration is done by creating a file ``meetingLocalConfig.py`` in
+the plugin directory, or somewhere in your PYTHONPATH.  It works by
+(automatically, not user-visible) subclassing the Config class.
+
+Here is a minimal usage example.  You need at *least* this much to
+make it run. Put this in ``meetingLocalConfig.py`` before you first
+start supybot::
+
+    class Config(object):
+        # These two are **required**:
+        logFileDir = '/home/richard/meetbot/'
+        logUrlPrefix = 'http://rkd.zgib.net/meetbot/'
+
+Two other more commonly used options are::
+
+        filenamePattern = '%(channel)s/%%Y/%(channel)s.%%F-%%H.%%M'
+        MeetBotInfoURL = 'http://some_other_side.tld'
+
+Place all of the configuration variables inside of the class
+body like this.
+
+``meetingLocalConfig.py`` is imported via python, so all the usual
+benefits and caveats of that apply.  It causes a subclass of the main
+Config object.  Thus, you can do some advanced (or just crazy) things
+like add a new meeting command, meeting agenda item type, or more.
+Some of these ideas are documented under the "Advanced configuration"
+section below.
+
+To reload a configuration in a running supybot, you can just reload
+the plugin in supybot --- the module is reloaded.  Specifically,
+``/msg YourBotName reload MeetBot``.
+
+
+
+Supybot-based config
+~~~~~~~~~~~~~~~~~~~~
+
+This is the system that configures MeetBot based on the supybot
+registry system.  Thus, it can be adjusted by anyone with the proper
+supybot capabilities.  However, the configuration in the supybot
+registry *won't* be used if the ``replay`` functionality is used (see
+above).  Thus, for example, if you configure the MediaWiki writer
+using ``supybot.plugins.MeetBot.writer_map``, and then ``replay`` the
+meeting, the MediaWiki output will *not* be updated.
+
+To enable this system, first the
+``supybot.plugins.MeetBot.enableSupybotBasedConfig`` variable must be
+set to True.  Then the MeetBot plugin must be reloaded::
+
+    /msg YourBot config supybot.plugins.MeetBot.enableSupybotBasedConfig True
+    /msg YourBot reload MeetBot
+
+Now you can list the values available for configuration (the list
+below may not be up to date)::
+
+    /msg YourBot config list supybot.plugins.MeetBot
+    ----> #endMeetingMessage, #filenamePattern, #input_codec,
+          #logFileDir, #logUrlPrefix, #MeetBotInfoURL, #output_codec,
+          #pygmentizeStyle, #specialChannelFilenamePattern,
+          #startMeetingMessage, #timeZone, #usefulCommands,
+          enableSupybotBasedConfig, and public
+
+Setting a value for a variable::
+
+    /msg YourBot config supybot.plugins.MeetBot.logUrlPrefix http://meetings.yoursite.net/
+
+Most variables (those with # prepended) can be set on a per-channel
+basis (they are set up as channel-specific variables).
+
+
+At present, not all variables are exported to supybot.  All string and
+boolean variables are, as well certain other variables for which a
+wrapper has been written (``writer_map`` in particular).  If a
+variable doesn't appear in the supybot registry, it can't be set via
+the registry.
+
+If you want to disable supybot-based config for security reasons, set
+``dontBotConfig`` to True in your custom configuration class in
+``meetingLocalConfig.py``.
+
+
+
+Required or important configuration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+These variables are set either in ``meetingLocalConfig.py`` (in the
+``Config`` class) or in the supybot registry.
+
+``logFileDir``
+    The filesystem directory in which the meeting outputs are stored,
+    defaulting to ".".  **Required**.
+
+``logUrlPrefix``
+    The URL corresponding to ``logFileDir``.  This is prepended to
+    filenames when giving end-of-meeting links in the channel.
+    **Required** or supybot's URLs will be missing.
+
+``filenamePattern``
+    This defaults to ``'%(channel)s/%%Y/%(channel)s.%%F-%%H.%%M'``,
+    and is the pattern used for replacements to identify the name of
+    the file basename (including possible sub-directories) in which to
+    store the meeting output files.  This is the suffix to
+    ``logFileDir`` and ``logUrlPrefix``.
+
+    Variables available for replacement using ``%(name)s`` include:
+    ``channel``, ``network``, ``meetingname``.  Double percent signs
+    (e.g.: ``%%Y`` are time formats, from ``time.strftime``.
+
+    You should *not* include filename extensions here.  Those are
+    found from the writers, via the variable ``writer_map``.
+
+Putting these all together, a set of variables could be:
+  1) ``logFileDir  =  /srv/www/meetings/``
+  2) ``%(channel)s/%%Y/%(channel)s.%%F-%%H.%%M``
+  3) (``.html``, ``.txt``, etc, extensions come from ``writers_map``)
+
+``MeetBotInfoURL``
+    This is a URL given in beginning and ending messages and minutes
+    files as a "go here for more information" link.
+
+
+writer_map configuration
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+``writer_map`` tells how we want to output the results of the meeting.
+It is, as you can guess, a mapping from filename extensions
+(``.html``, ``.log.html``, ...) to what we want to output to that file
+(``writers.HTML``, ``writers.HTMLlog``, ...)
+
+Using ``meetingLocalConfig.py``, it is python dictionary listing what
+output formats will be used to write our final results to a file,
+along with extensions to use.  For example, in
+``meetingLocalConfig.py``::
+
+    import writers
+
+    class Config:
+        writer_map = {
+            '.log.html':writers.HTMLlog,
+            '.html': writers.HTML,
+            '.txt': writers.RST,
+            '.mw':writers.MediaWiki,
+            }
+
+
+This *can* be configured through supybot.  To do this, set
+``supybot.plugins.MeetBot.writer_map`` to a space-separated list of
+``WriterName:.extension`` pairs (note the different ordering from the
+python dictionary).  For example, to list the current setting (in
+private message with the bot)::
+
+    <MrBeige> config plugins.MeetBot.writer_map
+    <MeetBot> HTML2:.html MediaWiki:.mw HTMLlog2:.log.html Text:.txt
+
+And to set it (again, in private message with the bot)::
+
+    <MrBeige> config plugins.MeetBot.writer_map HTML2:.html MediaWiki:.mw HTMLlog2:.log.html Text:.txt
+
+
+
+
+The available writers are (with default extensions, if enabled by
+default):
+
+``TextLog`` (``.log.txt``)
+    Plain-text logs suitable for replaying.  This does **not** have to
+    be explicitly enabled listed-- it is automatically enabled
+    whenever it is needed (currently, only when a meeting comes
+    realtime from supybot, not when being replayed)
+
+``HTMLlog`` (``.log.html``)
+    Alias for the current default HTML-pretty logs output format,
+    currently ``HTMLlog2``.
+
+``HTMLlog2``
+    Writes the logs in a HTML-pretty, CSS-customizable way (see section
+    below).
+
+``HTML`` (``.html``)
+    Alias for the current default HTML output format for the meeting
+    notes, currently ``HTML2``.
+
+``HTML2``
+    Meeting notes, in a numbered list HTML output format.
+    Configurable via CSS (see section below).
+
+``Text`` (``.txt``)
+    A meeting notes format, as a plain text file
+
+``MediaWiki``
+    MediaWiki output.  This doesn't upload *to* a MediaWiki instance,
+    but that could be added later.
+
+``PmWiki``
+    PmWiki output.  This doesn't upload *to* a PmWiki instance,
+    but that could be added later.
+
+Obsolete writers are:
+
+``HTMLlog1``
+    Old HTML writer.  This one requires the Python module ``pygments``
+    to be installed.  HTMLlog2 was written to remove this dependency.
+    HTMLlog2 is just as pretty as this is, and HTMLlog2 is
+    configurable via CSS.
+
+``HTML1``
+    Old, table-based HTML writer.
+
+``ReST``
+    ReStructured Text output.  Since ReStructured Text is a bit strict
+    in it's parser, user input from the IRC meeting will often mess up
+    the conversion, and thus this isn't recommended for true use until
+    better escape functions can be written.  (There is no security
+    risk from this plugin, ReST is run in secure mode).
+
+``HTMLfromReST``
+    This runs the ReStructured Text writer, and uses ``docutils`` to
+    convert it to HTML.  This requires the ``docutils`` package of
+    Python to be installed.
+
+
+
+Other config variables
+~~~~~~~~~~~~~~~~~~~~~~
+
+These variables are set either in ``meetingLocalConfig.py`` (in the
+``Config`` class) or in the supybot registry.
+
+``RestrictPerm``
+    An int listing which permissions to remove when using the
+    ``#restrictlogs`` command.  It is best to use the python ``stat``
+    module to set it::
+
+        RestrictPerm = stat.S_IRWXO|stat.S_IRWXG
+
+``specialChannels`` and ``specialChannelFilenamePattern``
+    When you are doing MeetBot testing, you would rather not have
+    nonstop different filenames each time you do a test meeting.
+    If a channel is in ``specialChannels``, it will use
+    ``specialChannelFilenamePattern`` instead of ``filenamePattern``
+    when storing logs.  ``specialChannels`` is a tuple listing channel
+    names.  Example: the defaults are ``("#meetbot-test",
+    "#meetbot-test2")`` and ``'%(channel)s/%(channel)s'`` (note that
+    there is no time-dependence in the name).
+
+``UrlProtocols``
+    Tuple of protocols to use to automatically detect link.  Example:
+    the default tuple is ``('http:', 'https:', 'irc:', 'ftp:',
+    'mailto:', 'ssh:')``.
+
+``command_RE``
+    How commands are detected.  See code.
+
+``pygmentizeStyle``
+    Style for the Pygments module to use to colorize the IRC logs.
+    The default is ``"friendly"``.
+
+``timeZone``
+    Timezone used in the bot.  Note: This will not yet work on a
+    per-channel basis.  The default is ``"UTC"``
+
+``update_realtime``
+    If this is set to true (default false), then upon each line being
+    input, the ``Text`` writer will rewrite the data.  This means that
+    people joining the meeting late can catch up on what they have
+    missed.  It doesn't play will with the #meetingname command, since
+    the filename would then change during the meeting, and it doesn't
+    delete the old filename(s).
+
+``startMeetingMessage``
+
+``endMeetingMessage``
+    Message printed at the beginning/end of the meetings.  Some
+    ``%(name)s`` replacements are available: ``chair``, ``starttime``,
+    ``timeZone``, ``endtime``, ``MeetBotInfoURL``, ``urlBasename``.
+
+``input_codec``
+
+``output_codec``
+    Input and output character set encodings.
+
+``writer_map``
+    See the description in the section above.
+
+``cssFile_minutes`` and ``cssFile_log``
+
+    If given, this is a file containing CSS for the .html and
+    .log.html outputs (HTML2 and HTMLlog2 writers).  Embedding control
+    is described below.
+
+    If this value is the null string or 'default', then the default
+    CSS is used (see css-\*-default.css in the MeetBot distribution).
+    If this value is 'none', then no stylesheet information is written
+    whatsoever.
+
+    Note that for when embedded (see below), ``cssFile`` should be a
+    filesystem path readable locally.  When you are *not* embedding,
+    ``cssFile`` should be the URL to the stylesheet, and this value
+    given is included literally to the output.
+
+``cssEmbed_minutes`` and ``cssEmbed_log``
+
+    If these are True, then the contents of ``cssFile`` (above) are
+    read and embedded into the HTML document.  If these are False,
+    then a stylesheet link is written.
+
+
+
+Advanced configuration
+~~~~~~~~~~~~~~~~~~~~~~
+
+This gives a few examples of things you can do via
+``meetingLocalConfig.py``.  Most people probably won't need these
+things, and they aren't thoroughly explained here.
+
+You can make a per-channel config::
+
+    class Config(object):
+        def init_hook(self):
+            if self.M.channel == '#some-channel':
+                self.logFileDir = '/some/directory'
+            else:
+                self.logFileDir = '/some/other/directory'
+
+Make a per-channel writer_map (note that you shouldn't change
+writer_map in place)::
+
+    import writers
+    class Config(object):
+        def init_hook(self):
+            if self.M.channel == '#some-channel':
+                self.writer_map = self.writer_map.copy()
+                self.writer_map['.mw'] = writers.MediaWiki
+
+
+The display styles (in html writers) can be modified also, by using
+the starthtml and endhtml attributes (put this in
+meetingLocalConfig.py::
+
+    import items
+    items.Agreed.starthtml = '<font color="red">'
+    items.Agreed.endhtml = '</font>'
+
+
+Adding a new custom command via ``meetingLocalConfig.py``.  (This
+likely won't make sense unless you examine the code a bit and know
+esoteric things about python method types)::
+
+    import types
+    class Config(object):
+        def init(self):
+            def do_party(self, nick, time_, **kwargs):
+                self.reply("We're having a party in this code!")
+                self.reply(("Owner, Chairs: %s %s"%(
+                                     self.owner,sorted(self.chairs.keys()))))
+            self.M.do_party = types.MethodType(
+                                           do_party, self.M, self.M.__class__)
+
+
+Make a command alias.  Make ``#weagree`` an alias for ``#agreed``::
+
+    class Config(object):
+        def init(self):
+	    self.M.do_weagree = self.M.do_agreed
+
+
+
+
+Supybot admin commands
+----------------------
+
+These commands are for the bot owners to manage all meetings served by
+their bot.  The expected use of these commands is when the bot is on
+many channels as a public service, and the bot owner sometimes needs
+to be able to monitor and adjust the overall situation, even if she is
+not the chair of a meeting.
+
+All of these are regular supybot commands (as opposed to the commands
+above).  That means that the supybot capability system applies, and
+they can be given either in any channel, either by direct address
+(``BotName: <command> <args> ...``) or with the bot prefix character
+(e.g. ``@<commandname> <args> ...``).  If there are commands with the
+same name in multiple plugins, you need to prefix the command with the
+plugin name (for example, ``BotName: meetbot recent`` instead of
+``BotName: recent``)
+
+These are restricted to anyone with the ``admin`` capability on the
+bot.
+
+``listmeetings``
+  List all meetings.
+
+``savemeetings``
+  Saves all active meetings on all channels and all networks.
+
+``addchair <channel> <network> <nick>``
+  Forcibly adds this nick as a chair on the giver channel on the given
+  network, if a meeting is active there.
+
+``deletemeeting <channel> <network> <saveit=True>``
+  Delete a meeting from the cache.  If save is given, save the meeting
+  first.  The default value of ``save`` is True.  This is useful for
+  when MeetBot becomes broken and is unable to properly save a
+  meeting, rendering the ``#endmeeting`` command non-functional.
+
+``recent``
+  Display the last ten or so started meetings, along with their
+  channels.  This is useful if you are the bot admin and want to see
+  just who all is using your bot, for example to better communicate
+  with those channels.
+
+To connect to multiple IRC networks, use the supybot ``Network``
+plugin to manage them.  First, load the ``Network`` plugin, then use
+the ``connect`` command to connect to the other network.  Finally, you
+need to tell supybot to join channels on the new.  To do
+that, you can use ``network command <other_network> join <channel>``.
+(Alternatively, you can /msg the bot through the other network, but
+you'll have to register your nick to it on the other network in order
+for it to accept commands from you.)
+
+
+
+
+Developers
+==========
+
+To speak with other developers and users, please join ``#meetbot`` on
+*irc.oftc.net*.
+
+Code contributions to MeetBot are encouraged, but you probably want to
+check with others in #meetbot first to discuss general plans.
+
+Architecture
+------------
+
+MeetBot is primarily used as a supybot plugin, however, it is designed
+to not be limited to use with supybot.  Thus, there are some design
+choices which are slightly more complicated.
+
+``meeting.py`` contains the core of the MeetBot code.  Most meeting
+functionality modifications would begin here.
+
+* The ``Meeting`` and ``MeetingCommands`` are the core of the meeting
+  loop.
+* The ``Config`` class stores all of the local configuration
+  information.  An implicit subclass of this done for local
+  configuration.  A proxy is set up for the ``Config`` class to engage
+  in the supybot-based configuration (``supybotconfig.py``).
+
+``items.py`` contains MeetingItem objects of different classes.  These
+hold data about different #commands, most importantly their formatting
+information.
+
+``writers.py`` contains the code to write the output files.  It
+depends on the objects in ``items.py`` to be able to format
+themselves, and the various classes in here
+
+``plugin.py``, ``config.py``, ``test.py``, ``__init__.py`` are all
+supybot based files.  (yes, the supybot/not-supybot split is not as
+rigorous as it should be).  All of the supybot commands to interact
+with the meeting and send lines to the ``Meeting`` object are in
+``plugin.py``.  If you want to add a *supybot*-based feature, this
+would be the place to start.
+
+
+Source control
+--------------
+
+To get a copy of the repo, the first time, use the **get** command::
+
+    darcs get http://code.zgib.net/MeetBot/                        # dev
+    darcs get http://darcs.debian.org/darcs/collab-maint/MeetBot/  # stable
+
+After that, to get code updates, use the **pull** command::
+
+    darcs get http://code.zgib.net/MeetBot/                        # dev
+    darcs get http://darcs.debian.org/darcs/collab-maint/MeetBot/  # stable
+
+Darcs truly supports "cherry-picking": you can pull patches from
+either branch at will (They will be kept synchronized enough so that
+this works).  You may skip any patches you do not desire, and pull any
+later patches as long as you have all earlier dependencies.
+
+To send code back, you can use ``darcs diff -u`` for a simple
+strategy, or you may record and send actual darcs patches.  To
+**record** darcs patches at first::
+
+    darcs record     # 1) interactively select the group of changes
+                     #    (y/n questions)
+                     # 2) Enter a patch name.  Say yes for entering a
+                     #    long coment
+                     # 3) Enter in a descriptive comment.  See other
+                     #    patches for a model, but I tend to use a
+                     #    bulleted list.
+
+The **send** command will send a patch to the developers via a HTTP
+POST::
+
+    darcs send http://code.zgib.net/MeetBot/
+
+If it is not signed with an authorized PGP key, it will be forwarded
+to the developers, and the developers can manually approve and apply
+the patch.  Developers can have their PGP key added.
+
+There are many other useful darcs commands.  Discuss on ``#meetbot``
+if you would like to find out more.
+
+The darcs **push** command is the counterpart to ``pull``, and used
+to move changes around when you have direct write access to the remote
+repository.
+
+
+
+Help and support
+================
+
+The channel ``#meetbot`` on *irc.oftc.net* is the best place to go.

=== added file 'doc/meetingLocalConfig-example.py'
--- doc/meetingLocalConfig-example.py	1970-01-01 00:00:00 +0000
+++ doc/meetingLocalConfig-example.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,19 @@
+# Richard Darst, July 2009
+#
+# Minimal meetingLocalConfig.py
+#
+# This file is released into the public domain, or released under the
+# supybot license in areas where releasing into the public domain is
+# not possible.
+#
+
+class Config(object):
+    # These are "required":
+    logFileDir = '/home/richard/meetbot/'
+    logUrlPrefix = 'http://rkd.zgib.net/meetbot/'
+
+    # These, you might want to change:
+    #MeetBotInfoURL = 'http://wiki.debian.org/MeetBot'
+    #filenamePattern = '%(channel)s/%%Y/%(channel)s.%%F-%%H.%%M'
+
+

=== added file 'items.py'
--- items.py	1970-01-01 00:00:00 +0000
+++ items.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,298 @@
+# Richard Darst, June 2009
+
+###
+# Copyright (c) 2009, Richard Darst
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions, and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions, and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#   * Neither the name of the author of this software nor the name of
+#     contributors to this software may be used to endorse or promote products
+#     derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+###
+
+import os
+import time
+
+import writers
+#from writers import html, rst
+import itertools
+
+def inbase(i, chars='abcdefghijklmnopqrstuvwxyz', place=0):
+    """Converts an integer into a postfix in base 26 using ascii chars.
+
+    This is used to make a unique postfix for ReStructured Text URL
+    references, which must be unique.  (Yes, this is over-engineering,
+    but keeps it short and nicely arranged, and I want practice
+    writing recursive functions.)
+    """
+    div, mod = divmod(i, len(chars)**(place+1))
+    if div == 0:
+        return chars[mod]
+    else:
+        return inbase2(div, chars=chars, place=place+1)+chars[mod]
+
+
+
+#
+# These are objects which we can add to the meeting minutes.  Mainly
+# they exist to aid in HTML-formatting.
+#
+class _BaseItem(object):
+    itemtype = None
+    starthtml = ''
+    endhtml = ''
+    startrst = ''
+    endrst = ''
+    starttext = ''
+    endtext = ''
+    startmw = ''
+    endmw = ''
+    startmoin = ''
+    endmoin = ''
+    def get_replacements(self, M, escapewith):
+        replacements = { }
+        for name in dir(self):
+            if name[0] == "_": continue
+            replacements[name] = getattr(self, name)
+        replacements['nick'] = escapewith(replacements['nick'])
+        replacements['link'] = self.logURL(M)
+        if 'line' in replacements:
+            replacements['line'] = escapewith(replacements['line'])
+        if 'topic' in replacements:
+            replacements['topic'] = escapewith(replacements['topic'])
+        if 'url' in replacements:
+            replacements['url_quoteescaped'] = \
+                                      escapewith(self.url.replace('"', "%22"))
+
+        return replacements
+    def template(self, M, escapewith):
+        template = { }
+        for k,v in self.get_replacements(M, escapewith).iteritems():
+            if k not in ('itemtype', 'line', 'topic',
+                         'url', 'url_quoteescaped',
+                         'nick', 'time', 'link', 'anchor'):
+                continue
+            template[k] = v
+        return template
+    def makeRSTref(self, M):
+        if self.nick[-1] == '_':
+            rstref = rstref_orig = "%s%s"%(self.nick, self.time)
+        else:
+            rstref = rstref_orig = "%s-%s"%(self.nick, self.time)
+        count = 0
+        while rstref in M.rst_refs:
+            rstref = rstref_orig + inbase(count)
+            count += 1
+        link = self.logURL(M)
+        M.rst_urls.append(".. _%s: %s"%(rstref, link+"#"+self.anchor))
+        M.rst_refs[rstref] = True
+        return rstref
+    @property
+    def anchor(self):
+        return 'l-'+str(self.linenum)
+    def logURL(self, M):
+        return M.config.basename+'.log.html'
+
+class Topic(_BaseItem):
+    itemtype = 'TOPIC'
+    html_template = """<tr><td><a href='%(link)s#%(anchor)s'>%(time)s</a></td>
+        <th colspan=3>%(starthtml)sTopic: %(topic)s%(endhtml)s</th>
+        </tr>"""
+    #html2_template = ("""<b>%(starthtml)s%(topic)s%(endhtml)s</b> """
+    #                  """(%(nick)s, <a href='%(link)s#%(anchor)s'>%(time)s</a>)""")
+    html2_template = ("""%(starthtml)s%(topic)s%(endhtml)s """
+                      """<span class="details">"""
+                      """(<a href='%(link)s#%(anchor)s'>%(nick)s</a>, """
+                      """%(time)s)"""
+                      """</span>""")
+    rst_template = """%(startrst)s%(topic)s%(endrst)s  (%(rstref)s_)"""
+    text_template = """%(starttext)s%(topic)s%(endtext)s  (%(nick)s, %(time)s)"""
+    mw_template = """%(startmw)s%(topic)s%(endmw)s  (%(nick)s, %(time)s)"""
+    moin_template = """%(startmoin)s%(topic)s%(endmoin)s  (%(nick)s, %(time)s)"""
+    moin_template = """ *%(topic)s"""
+
+    startrst = '**'
+    endrst = '**'
+    startmw = "'''"
+    endmw = "'''"
+    starthtml = '<b class="TOPIC">'
+    endhtml = '</b>'
+    startmoin = ''
+    endmoin = ''
+    def __init__(self, nick, line, linenum, time_):
+        self.nick = nick ; self.topic = line ; self.linenum = linenum
+        self.time = time.strftime("%H:%M:%S", time_)
+    def _htmlrepl(self, M):
+        repl = self.get_replacements(M, escapewith=writers.html)
+        repl['link'] = self.logURL(M)
+        return repl
+    def html(self, M):
+        return self.html_template%self._htmlrepl(M)
+    def html2(self, M):
+        return self.html2_template%self._htmlrepl(M)
+    def rst(self, M):
+        self.rstref = self.makeRSTref(M)
+        repl = self.get_replacements(M, escapewith=writers.rst)
+        if repl['topic']=='': repl['topic']=' '
+        repl['link'] = self.logURL(M)
+        return self.rst_template%repl
+    def text(self, M):
+        repl = self.get_replacements(M, escapewith=writers.text)
+        repl['link'] = self.logURL(M)
+        return self.text_template%repl
+    def mw(self, M):
+        repl = self.get_replacements(M, escapewith=writers.mw)
+        return self.mw_template%repl
+    def moin(self, M):
+        repl = self.get_replacements(M, escapewith=writers.moin)
+        return self.moin_template%repl
+
+class GenericItem(_BaseItem):
+    itemtype = ''
+    html_template = """<tr><td><a href='%(link)s#%(anchor)s'>%(time)s</a></td>
+        <td>%(itemtype)s</td><td>%(nick)s</td><td>%(starthtml)s%(line)s%(endhtml)s</td>
+        </tr>"""
+    #html2_template = ("""<i>%(itemtype)s</i>: %(starthtml)s%(line)s%(endhtml)s """
+    #                  """(%(nick)s, <a href='%(link)s#%(anchor)s'>%(time)s</a>)""")
+    html2_template = ("""<i class="itemtype">%(itemtype)s</i>: """
+                      """<span class="%(itemtype)s">"""
+                      """%(starthtml)s%(line)s%(endhtml)s</span> """
+                      """<span class="details">"""
+                      """(<a href='%(link)s#%(anchor)s'>%(nick)s</a>, """
+                      """%(time)s)"""
+                      """</span>""")
+    rst_template = """*%(itemtype)s*: %(startrst)s%(line)s%(endrst)s  (%(rstref)s_)"""
+    text_template = """%(itemtype)s: %(starttext)s%(line)s%(endtext)s  (%(nick)s, %(time)s)"""
+    mw_template = """''%(itemtype)s:'' %(startmw)s%(line)s%(endmw)s  (%(nick)s, %(time)s)"""
+    moin_template = """''%(itemtype)s:'' %(startmw)s%(line)s%(endmw)s  (%(nick)s, %(time)s)"""
+    def __init__(self, nick, line, linenum, time_):
+        self.nick = nick ; self.line = line ; self.linenum = linenum
+        self.time = time.strftime("%H:%M:%S", time_)
+    def _htmlrepl(self, M):
+        repl = self.get_replacements(M, escapewith=writers.html)
+        repl['link'] = self.logURL(M)
+        return repl
+    def html(self, M):
+        return self.html_template%self._htmlrepl(M)
+    def html2(self, M):
+        return self.html2_template%self._htmlrepl(M)
+    def rst(self, M):
+        self.rstref = self.makeRSTref(M)
+        repl = self.get_replacements(M, escapewith=writers.rst)
+        repl['link'] = self.logURL(M)
+        return self.rst_template%repl
+    def text(self, M):
+        repl = self.get_replacements(M, escapewith=writers.text)
+        repl['link'] = self.logURL(M)
+        return self.text_template%repl
+    def mw(self, M):
+        repl = self.get_replacements(M, escapewith=writers.mw)
+        return self.mw_template%repl
+    def moin(self, M):
+        repl = self.get_replacements(M, escapewith=writers.moin)
+        return self.moin_template%repl
+
+
+class Info(GenericItem):
+    itemtype = 'INFO'
+    html2_template = ("""<span class="%(itemtype)s">"""
+                      """%(starthtml)s%(line)s%(endhtml)s</span> """
+                      """<span class="details">"""
+                      """(<a href='%(link)s#%(anchor)s'>%(nick)s</a>, """
+                      """%(time)s)"""
+                      """</span>""")
+    rst_template = """%(startrst)s%(line)s%(endrst)s  (%(rstref)s_)"""
+    text_template = """%(starttext)s%(line)s%(endtext)s  (%(nick)s, %(time)s)"""
+    mw_template = """%(startmw)s%(line)s%(endmw)s  (%(nick)s, %(time)s)"""
+    moin_template = """%(startmoin)s%(line)s%(endmoin)s  (%(nick)s, %(time)s)"""
+class Idea(GenericItem):
+    itemtype = 'IDEA'
+class Agreed(GenericItem):
+    itemtype = 'AGREED'
+class Action(GenericItem):
+    itemtype = 'ACTION'
+class Subtopic(GenericItem):
+    itemtype = 'SUBTOPIC'
+    moin_template = """  *%(line)s  (%(nick)s, %(time)s)"""
+class Help(GenericItem):
+    itemtype = 'HELP'
+class Accepted(GenericItem):
+    itemtype = 'ACCEPTED'
+    starthtml = '<font color="green">'
+    endhtml = '</font>'
+class Rejected(GenericItem):
+    itemtype = 'REJECTED'
+    starthtml = '<font color="red">'
+    endhtml = '</font>'
+class Link(_BaseItem):
+    itemtype = 'LINK'
+    html_template = """<tr><td><a href='%(link)s#%(anchor)s'>%(time)s</a></td>
+        <td>%(itemtype)s</td><td>%(nick)s</td><td>%(starthtml)s<a href="%(url)s">%(url_readable)s</a> %(line)s%(endhtml)s</td>
+        </tr>"""
+    #html2_template = ("""<i>%(itemtype)s</i>: %(starthtml)s<a href="%(url)s">%(url_readable)s</a> %(line)s%(endhtml)s """
+    #                  """(%(nick)s, <a href='%(link)s#%(anchor)s'>%(time)s</a>)""")
+    #html2_template = ("""<i>%(itemtype)s</i>: %(starthtml)s<a href="%(url)s">%(url_readable)s</a> %(line)s%(endhtml)s """
+    #                  """(<a href='%(link)s#%(anchor)s'>%(nick)s</a>, %(time)s)""")
+    html2_template = ("""%(starthtml)s<a href="%(url)s">%(url_readable)s</a> %(line)s%(endhtml)s """
+                      """<span class="details">"""
+                      """(<a href='%(link)s#%(anchor)s'>%(nick)s</a>, """
+                      """%(time)s)"""
+                      """</span>""")
+    rst_template = """*%(itemtype)s*: %(startrst)s%(url)s %(line)s%(endrst)s  (%(rstref)s_)"""
+    text_template = """%(itemtype)s: %(starttext)s%(url)s %(line)s%(endtext)s  (%(nick)s, %(time)s)"""
+    mw_template = """''%(itemtype)s:'' %(startmw)s%(url)s %(line)s%(endmw)s  (%(nick)s, %(time)s)"""
+    moin_template = """''%(itemtype)s:'' %(startmw)s%(url)s %(line)s%(endmw)s  (%(nick)s, %(time)s)"""
+    def __init__(self, nick, line, linenum, time_):
+        self.nick = nick ; self.linenum = linenum
+        self.time = time.strftime("%H:%M:%S", time_)
+        self.url, self.line = (line+' ').split(' ', 1)
+        # URL-sanitization
+        self.url_readable = self.url # readable line version
+        self.url = self.url
+        self.line = self.line.strip()
+    def _htmlrepl(self, M):
+        repl = self.get_replacements(M, escapewith=writers.html)
+        # special: replace doublequote only for the URL.
+        repl['url'] = writers.html(self.url.replace('"', "%22"))
+        repl['url_readable'] = writers.html(self.url)
+        repl['link'] = self.logURL(M)
+        return repl
+    def html(self, M):
+        return self.html_template%self._htmlrepl(M)
+    def html2(self, M):
+        return self.html2_template%self._htmlrepl(M)
+    def rst(self, M):
+        self.rstref = self.makeRSTref(M)
+        repl = self.get_replacements(M, escapewith=writers.rst)
+        repl['link'] = self.logURL(M)
+        #repl['url'] = writers.rst(self.url)
+        return self.rst_template%repl
+    def text(self, M):
+        repl = self.get_replacements(M, escapewith=writers.text)
+        repl['link'] = self.logURL(M)
+        return self.text_template%repl
+    def mw(self, M):
+        repl = self.get_replacements(M, escapewith=writers.mw)
+        return self.mw_template%repl
+    def moin(self, M):
+        repl = self.get_replacements(M, escapewith=writers.moin)
+        return self.moin_template%repl

=== added file 'meeting.py'
--- meeting.py	1970-01-01 00:00:00 +0000
+++ meeting.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,785 @@
+# Richard Darst, May 2009
+
+###
+# Copyright (c) 2009, Richard Darst
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions, and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions, and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#   * Neither the name of the author of this software nor the name of
+#     contributors to this software may be used to endorse or promote products
+#     derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+###
+
+import time
+import os
+import re
+import stat
+import urllib
+
+import writers
+import items
+reload(writers)
+reload(items)
+
+__version__ = "0.1.5"
+
+class Config(object):
+    #
+    # Throw any overrides into meetingLocalConfig.py in this directory:
+    #
+    # Where to store files on disk
+    # Example:   logFileDir = '/home/richard/meetbot/'
+    logFileDir = '/var/www/mootbot/'
+    # The links to the logfiles are given this prefix
+    # Example:   logUrlPrefix = 'http://rkd.zgib.net/meetbot/'
+    logUrlPrefix = ''
+    # Give the pattern to save files into here.  Use %(channel)s for
+    # channel.  This will be sent through strftime for substituting it
+    # times, howover, for strftime codes you must use doubled percent
+    # signs (%%).  This will be joined with the directories above.
+    filenamePattern = '%(channel)s/%%Y/%(channel)s.%%F-%%H.%%M'
+    # Where to say to go for more information about MeetBot
+    MeetBotInfoURL = 'http://wiki.debian.org/MeetBot'
+    # This is used with the #restrict command to remove permissions from files.
+    RestrictPerm = stat.S_IRWXO|stat.S_IRWXG  # g,o perm zeroed
+    # RestrictPerm = stat.S_IRWXU|stat.S_IRWXO|stat.S_IRWXG  #u,g,o perm zeroed
+    # used to detect #link :
+    UrlProtocols = ('http:', 'https:', 'irc:', 'ftp:', 'mailto:', 'ssh:')
+    # regular expression for parsing commands.  First group is the cmd name,
+    # second group is the rest of the line.
+    command_RE = re.compile(r'#([\w]+)[ \t]*(.*)')
+    # The channels which won't have date/time appended to the filename.
+    specialChannels = ("#meetbot-test", "#meetbot-test2")
+    specialChannelFilenamePattern = '%(channel)s/%(channel)s'
+    # HTML irc log highlighting style.  `pygmentize -L styles` to list.
+    pygmentizeStyle = 'friendly'
+    # Timezone setting.  You can use friendly names like 'US/Eastern', etc.
+    # Check /usr/share/zoneinfo/ .  Or `man timezone`: this is the contents
+    # of the TZ environment variable.
+    timeZone = 'UTC'
+    # These are the start and end meeting messages, respectively.
+    # Some replacements are done before they are used, using the
+    # %(name)s syntax.  Note that since one replacement is done below,
+    # you have to use doubled percent signs.  Also, it gets split by
+    # '\n' and each part between newlines get said in a separate IRC
+    # message.
+    startMeetingMessage = ("Meeting started %(starttime)s %(timeZone)s.  "
+              "The chair is %(chair)s. Information about MeetBot at "
+              "%(MeetBotInfoURL)s.\n")
+    endMeetingMessage = ("Meeting ended %(endtime)s %(timeZone)s.  "
+                         "\n"
+                         "Minutes:        %(urlBasename)s.moin.txt")
+                         
+    #TODO: endMeetingMessage should get filenames from the writers
+
+    #should the bot talk in the channel
+    beNoisy=True
+    # Input/output codecs.
+    input_codec = 'utf-8'
+    output_codec = 'utf-8'
+    # Functions to do the i/o conversion.
+    def enc(self, text):
+        return text.encode(self.output_codec, 'replace')
+    def dec(self, text):
+        return text.decode(self.input_codec, 'replace')
+    # Write out select logfiles
+    update_realtime = True
+    # CSS configs:
+    cssFile_log      = 'default'
+    cssEmbed_log     = True
+    cssFile_minutes  = 'default'
+    cssEmbed_minutes = True
+
+    # This tells which writers write out which to extensions.
+    writer_map = {
+        '.log.html':writers.HTMLlog,
+        '.1.html': writers.HTML,
+        '.html': writers.HTML2,
+        '.rst': writers.ReST,
+        '.txt': writers.Text,
+        '.rst.html':writers.HTMLfromReST,
+        '.moin.txt':writers.Moin,
+        '.mw.txt':writers.MediaWiki,
+        }
+
+
+    def __init__(self, M, writeRawLog=False, safeMode=False,
+                 extraConfig={}):
+        self.M = M
+        self.writers = { }
+        # Update config values with anything we may have
+        for k,v in extraConfig.iteritems():
+            setattr(self, k, v)
+
+        if hasattr(self, "init_hook"):
+            self.init_hook()
+        if writeRawLog:
+            self.writers['.log.txt'] = writers.TextLog(self.M)
+        for extension, writer in self.writer_map.iteritems():
+            self.writers[extension] = writer(self.M)
+        self.safeMode = safeMode
+    def filename(self, url=False):
+        # provide a way to override the filename.  If it is
+        # overridden, it must be a full path (and the URL-part may not
+        # work.):
+        if getattr(self.M, '_filename', None):
+            return self.M._filename
+        # names useful for pathname formatting.
+        # Certain test channels always get the same name - don't need
+        # file prolifiration for them
+        if self.M.channel in self.specialChannels:
+            pattern = self.specialChannelFilenamePattern
+        else:
+            pattern = self.filenamePattern
+        channel = self.M.channel.strip('# ').lower().replace('/', '')
+        network = self.M.network.strip(' ').lower().replace('/', '')
+        if self.M._meetingname:
+            meetingname = self.M._meetingname.replace('/', '')
+        else:
+            meetingname = channel
+        path = pattern%{'channel':channel, 'network':network,
+                        'meetingname':meetingname}
+        path = time.strftime(path, self.M.starttime)
+        # If we want the URL name, append URL prefix and return
+        if url:
+            return os.path.join(self.logUrlPrefix, path)
+        path = os.path.join(self.logFileDir, path)
+        # make directory if it doesn't exist...
+        dirname = os.path.dirname(path)
+        if not url and dirname and not os.access(dirname, os.F_OK):
+            os.makedirs(dirname)
+        return path
+    @property
+    def basename(self):
+        return os.path.basename(self.M.config.filename())
+
+    def save(self, realtime_update=False):
+        """Write all output files.
+
+        If `realtime_update` is true, then this isn't a complete save,
+        it will only update those writers with the update_realtime
+        attribute true.  (default update_realtime=False for this method)"""
+        if realtime_update and not hasattr(self.M, 'starttime'):
+            return
+        rawname = self.filename()
+        # We want to write the rawlog (.log.txt) first in case the
+        # other methods break.  That way, we have saved enough to
+        # replay.
+        writer_names = list(self.writers.keys())
+        results = { }
+        if '.log.txt' in writer_names:
+            writer_names.remove('.log.txt')
+            writer_names = ['.log.txt'] + writer_names
+        for extension in writer_names:
+            writer = self.writers[extension]
+            # Why this?  If this is a realtime (step-by-step) update,
+            # then we only want to update those writers which say they
+            # should be updated step-by-step.
+            if (realtime_update and
+                ( not getattr(writer, 'update_realtime', False) or
+                  getattr(self, '_filename', None) )
+                ):
+                continue
+            # Parse embedded arguments
+            if '|' in extension:
+                extension, args = extension.split('|', 1)
+                args = args.split('|')
+                args = dict([a.split('=', 1) for a in args] )
+            else:
+                args = { }
+
+            text = writer.format(extension, **args)
+            results[extension] = text
+            # If the writer returns a string or unicode object, then
+            # we should write it to a filename with that extension.
+            # If it doesn't, then it's assumed that the write took
+            # care of writing (or publishing or emailing or wikifying)
+            # it itself.
+            if isinstance(text, unicode):
+                text = self.enc(text)
+            if isinstance(text, (str, unicode)):
+                # Have a way to override saving, so no disk files are written.
+                if getattr(self, "dontSave", False):
+                    continue
+                self.writeToFile(text, rawname+extension)
+        if hasattr(self, 'save_hook'):
+            self.save_hook(realtime_update=realtime_update)
+        return results
+    def writeToFile(self, string, filename):
+        """Write a given string to a file"""
+        # The reason we have this method just for this is to proxy
+        # through the _restrictPermissions logic.
+        f = open(filename, 'w')
+        if self.M._restrictlogs:
+            self.restrictPermissions(f)
+        f.write(string)
+        f.close()
+    def restrictPermissions(self, f):
+        """Remove the permissions given in the variable RestrictPerm."""
+        f.flush()
+        newmode = os.stat(f.name).st_mode & (~self.RestrictPerm)
+        os.chmod(f.name, newmode)
+
+
+
+# Set the timezone, using the variable above
+os.environ['TZ'] = Config.timeZone
+time.tzset()
+
+# load custom local configurations
+try:
+    import __main__
+    if getattr(__main__, 'running_tests', False): raise ImportError
+    if 'MEETBOT_RUNNING_TESTS' in os.environ: raise ImportError
+
+    import meetingLocalConfig
+    meetingLocalConfig = reload(meetingLocalConfig)
+    if hasattr(meetingLocalConfig, 'Config'):
+        Config = type('Config', (meetingLocalConfig.Config, Config), {})
+except ImportError:
+    pass
+
+
+
+class MeetingCommands(object):
+    # Command Definitions
+    # generic parameters to these functions:
+    #  nick=
+    #  line=    <the payload of the line>
+    #  linenum= <the line number, 1-based index (for logfile)>
+    #  time_=   <time it was said>
+    # Commands for Chairs:
+    def do_replay(self,nick,time_,line, **kwargs):
+        url=line.strip()
+        self.reply("looking for meetings in %s"%url)
+        sock = urllib.urlopen(url)
+        htmlSource = sock.read()
+        sock.close()
+        print htmlSource
+
+
+    def do_startmeeting(self, nick, time_, line, **kwargs):
+        """Begin a meeting."""
+        self.starttime = time_
+        repl = self.replacements()
+        message = self.config.startMeetingMessage%repl
+        for messageline in message.split('\n'):
+            self.reply(messageline)
+        self.do_commands()
+        if line.strip():
+            self.do_meetingtopic(nick=nick, line=line, time_=time_, **kwargs)
+
+    def do_endmeeting(self, nick, time_,line, **kwargs):
+        """End the meeting."""
+        if not self.isChair(nick): return
+        #close any open votes
+        if not self.activeVote=="":
+            self.do_endvote(nick=nick,line=line,**kwargs)
+        if self.oldtopic:
+            self.topic(self.oldtopic)
+        self.endtime = time_
+        self.config.save()
+        repl = self.replacements()
+        message = self.config.endMeetingMessage%repl
+        for messageline in message.split('\n'):
+            self.reply(messageline)
+        self._meetingIsOver = True
+
+        
+    def do_topic(self, nick, line, **kwargs):
+        """Set a new topic in the channel."""
+        if not self.isChair(nick): return
+        self.currenttopic = line
+        m = items.Topic(nick=nick, line=line, **kwargs)
+        self.additem(m)
+        self.settopic()
+        
+    def do_subtopic(self,nick,line,**kwargs):
+        """this is like a topic but less so"""
+        if not self.isChair(nick): return
+        m = items.Subtopic(nick=nick, line=line, **kwargs)
+        self.additem(m)
+
+    def do_progress(self,nick,line,**kwargs):
+        self.do_subtopic(nick,line,**kwargs)        
+        
+    def do_meetingtopic(self, nick, line, **kwargs):
+        """Set a meeting topic (included in all topics)"""
+        if not self.isChair(nick): return
+        line = line.strip()
+        if line == '' or line.lower() == 'none' or line.lower() == 'unset':
+            self._meetingTopic = None
+        else:
+            self._meetingTopic = line
+        self.settopic()
+    def do_save(self, nick, time_, **kwargs):
+        """Add a chair to the meeting."""
+        if not self.isChair(nick): return
+        self.endtime = time_
+        self.config.save()
+    def do_agreed(self, nick, line, **kwargs):
+        """Add aggreement to the minutes - chairs only."""
+        if not self.isChair(nick): return
+        m = items.Agreed(nick, **kwargs)
+        if self.config.beNoisy:
+            self.reply("AGREED: " + line.strip())
+        self.additem(m)
+    do_agree = do_agreed
+    def do_accepted(self, nick, **kwargs):
+        """Add aggreement to the minutes - chairs only."""
+        if not self.isChair(nick): return
+        m = items.Accepted(nick, **kwargs)
+        self.additem(m)
+    do_accept = do_accepted
+    def do_rejected(self, nick, **kwargs):
+        """Add aggreement to the minutes - chairs only."""
+        if not self.isChair(nick): return
+        m = items.Rejected(nick, **kwargs)
+        self.additem(m)
+    do_rejected = do_rejected
+    def do_chair(self, nick, line, **kwargs):
+        """Add a chair to the meeting."""
+        if not self.isChair(nick): return
+        for chair in re.split('[, ]+', line.strip()):
+            chair = chair.strip()
+            if not chair: continue
+            if chair not in self.chairs:
+                if self._channelNicks is not None and \
+                       ( chair.encode(self.config.input_codec)
+                         not in self._channelNicks()):
+                    self.reply("Warning: Nick not in channel: %s"%chair)
+                self.addnick(chair, lines=0)
+                self.chairs.setdefault(chair, True)
+        chairs = dict(self.chairs) # make a copy
+        chairs.setdefault(self.owner, True)
+        self.reply("Current chairs: %s"%(" ".join(sorted(chairs.keys()))))
+    def do_unchair(self, nick, line, **kwargs):
+        """Remove a chair to the meeting (founder can not be removed)."""
+        if not self.isChair(nick): return
+        for chair in line.strip().split():
+            chair = chair.strip()
+            if chair in self.chairs:
+                del self.chairs[chair]
+        chairs = dict(self.chairs) # make a copy
+        chairs.setdefault(self.owner, True)
+        self.reply("Current chairs: %s"%(" ".join(sorted(chairs.keys()))))
+    def do_undo(self, nick, **kwargs):
+        """Remove the last item from the minutes."""
+        if not self.isChair(nick): return
+        if len(self.minutes) == 0: return
+        self.reply("Removing item from minutes: %s"%str(self.minutes[-1]))
+        del self.minutes[-1]
+    def do_restrictlogs(self, nick, **kwargs):
+        """When saved, remove permissions from the files."""
+        if not self.isChair(nick): return
+        self._restrictlogs = True
+        self.reply("Restricting permissions on minutes: -%s on next #save"%\
+                   oct(RestrictPerm))
+    def do_lurk(self, nick, **kwargs):
+        """Don't interact in the channel."""
+        if not self.isChair(nick): return
+        self._lurk = True
+    def do_unlurk(self, nick, **kwargs):
+        """Do interact in the channel."""
+        if not self.isChair(nick): return
+        self._lurk = False
+    def do_meetingname(self, nick, time_, line, **kwargs):
+        """Set the variable (meetingname) which can be used in save.
+
+        If this isn't set, it defaults to the channel name."""
+        meetingname = line.strip().lower().replace(" ", "")
+        meetingname = "_".join(line.strip().lower().split())
+        self._meetingname = meetingname
+        self.reply("The meeting name has been set to '%s'"%meetingname)
+
+    def do_vote(self, nick,line,**kwargs):
+        if not self.isChair(nick): return
+        """start a voting process"""
+        if not self.activeVote=="":
+            self.reply("Voting still open on: " + self.activeVote)
+            return
+        self.reply("Please vote on: " + line.strip())
+        self.reply("Public votes can be registered by saying +1, +0 or -1 in channel, (private votes don't work yet, but when they do it will be by messaging the channel followed by +1/-1/+0 to me)")
+        self.activeVote=line.strip()
+        self.currentVote={}
+        #need to set up a structure to hold vote results
+        #people can vote by saying +1 0 or -1
+        #if voters have been specified then only they can vote
+        #there can be multiple votes called in a meeting
+    def do_votesrequired(self, nick, line, **kwargs):
+        """set the number of votes required to pass a motion - useful for council votes where 3 of 5 people need to +1 for example"""
+        if not self.isChair(nick): return
+        try:
+            self.votesrequired=int(line.strip())
+        except ValueError:
+            self.votesrequired=0
+        self.reply("votes now need %s to be passed"%self.votesrequired)
+    def do_endvote(self, nick, line, **kwargs):
+        if not self.isChair(nick): return
+        """this vote is over, record the results"""
+        if self.activeVote=="":
+            self.reply("No vote in progress")
+            return
+        self.reply("Voting ended on: "+self.activeVote)
+        #should probably just store the summary of the results
+        vfor=0
+        vagainst=0
+        vabstain=0
+        for v in self.currentVote:
+            if re.match("-1",self.currentVote[v]):
+                vagainst+=1
+            elif re.match("0|\+0",self.currentVote[v]):
+                vabstain+=1
+            elif re.match("\+1",self.currentVote[v]):
+                vfor+=1
+        self.reply("Votes for:"+str(vfor)+" Votes against:"+str(vagainst)+" Abstentions:"+str(vabstain))
+        if vfor-vagainst>self.votesrequired:
+            self.reply("Motion carried")
+        elif vfor-vagainst<self.votesrequired:
+            self.reply("Motion denied")
+        else:
+            if self.votesrequired==0:
+                self.reply("Deadlock, casting vote may be used")
+            else:
+                self.reply("Motion carried")
+        self.votes[self.activeVote]=[vfor,vabstain,vagainst]#store the results
+
+        self.activeVote=""#allow another vote to be called
+        self.currentVote={}
+    def do_voters(self, nick,line,**kwargs):
+        if not self.isChair(nick): return
+        """provide a list of authorised voters"""
+        #possibly should provide a means to change voters to everyone
+        for voter in re.split('[, ]+', line.strip()):
+            voter = voter.strip()
+            if voter in ['everyone','all','everybody']:
+                #clear the voter list
+                self.voters={}
+                voters=dict(self.voters)
+                self.reply("Everyone can now vote")
+                return
+            if not voter: continue
+            if voter not in self.voters:
+                if self._channelNicks is not None and \
+                       ( voter.encode(self.config.input_codec)
+                         not in self._channelNicks()):
+                    self.reply("Warning: Nick not in channel: %s"%voter)
+                self.addnick(voter, lines=0)
+                self.voters.setdefault(voter, True)
+        voters = dict(self.voters) # make a copy
+        #voters.setdefault(self.owner, True)#not sure about this if resetting voters to everyone - in fact why auto add the person calling #voters at all?
+        self.reply("Current voters: %s"%(" ".join(sorted(voters.keys()))))
+
+    # Commands for Anyone:
+    def do_action(self, **kwargs):
+        """Add action item to the minutes.
+
+        The line is searched for nicks, and a per-person action item
+        list is compiled after the meeting.  Only nicks which have
+        been seen during the meeting will have an action item list
+        made for them, but you can use the #nick command to cause a
+        nick to be seen."""
+        m = items.Action(**kwargs)
+        self.additem(m)
+        if self.config.beNoisy:
+            self.reply("ACTION: " + m.line)
+    def do_info(self, **kwargs):
+        """Add informational item to the minutes."""
+        m = items.Info(**kwargs)
+        self.additem(m)
+    def do_idea(self, **kwargs):
+        """Add informational item to the minutes."""
+        m = items.Idea(**kwargs)
+        self.additem(m)
+    def do_help(self, **kwargs):
+        """Add call for help to the minutes."""
+        m = items.Help(**kwargs)
+        self.additem(m)
+    do_halp = do_help
+    def do_nick(self, nick, line, **kwargs):
+        """Make meetbot aware of a nick which hasn't said anything.
+
+        To see where this can be used, see #action command"""
+        nicks = re.split('[, ]+', line.strip())
+        for nick in nicks:
+            nick = nick.strip()
+            if not nick: continue
+            self.addnick(nick, lines=0)
+    def do_link(self, **kwargs):
+        """Add informational item to the minutes."""
+        m = items.Link(**kwargs)
+        self.additem(m)
+    def do_commands(self, **kwargs):
+        commands = [ "#"+x[3:] for x in dir(self) if x[:3]=="do_" ]
+        commands.sort()
+        self.reply("Available commands: "+(" ".join(commands)))
+
+
+class Meeting(MeetingCommands, object):
+    _lurk = False
+    _restrictlogs = False
+    def __init__(self, channel, owner, oldtopic=None,
+                 filename=None, writeRawLog=False,
+                 setTopic=None, sendReply=None, getRegistryValue=None,
+                 safeMode=False, channelNicks=None,
+                 extraConfig={}, network='nonetwork'):
+        self.config = Config(self, writeRawLog=writeRawLog, safeMode=safeMode,
+                            extraConfig=extraConfig)
+        if getRegistryValue is not None:
+            self._registryValue = getRegistryValue
+        if sendReply is not None:
+            self._sendReply = sendReply
+        if setTopic is not None:
+            self._setTopic = setTopic
+        self.owner = owner
+        self.channel = channel
+        self.network = network
+        self.currenttopic = ""
+        if oldtopic:
+            self.oldtopic = self.config.dec(oldtopic)
+        else:
+            self.oldtopic = None
+        self.lines = [ ]
+        self.minutes = [ ]
+        self.attendees = {}
+        self.chairs = {}
+        self.voters = {}
+        self.votes={}
+        self.votesrequired=0
+        self.activeVote = ""
+        self._writeRawLog = writeRawLog
+        self._meetingTopic = None
+        self._meetingname = ""
+        self._meetingIsOver = False
+        self._channelNicks = channelNicks
+        if filename:
+            self._filename = filename
+
+    # These commands are callbacks to manipulate the IRC protocol.
+    # set self._sendReply and self._setTopic to an callback to do these things.
+    def reply(self, x):
+        """Send a reply to the IRC channel."""
+        if hasattr(self, '_sendReply') and not self._lurk:
+            self._sendReply(self.config.enc(x))
+        else:
+            print "REPLY:", self.config.enc(x)
+    def topic(self, x):
+        """Set the topic in the IRC channel."""
+        if hasattr(self, '_setTopic') and not self._lurk:
+            self._setTopic(self.config.enc(x))
+        else:
+            print "TOPIC:", self.config.enc(x)
+    def settopic(self):
+        "The actual code to set the topic"
+        if self._meetingTopic:
+            if "meeting" in self._meetingTopic.lower():
+                topic = '%s | %s | Current topic: %s'%(self.oldtopic, self._meetingTopic, self.currenttopic)
+            else:
+                topic = '%s | %s Meeting | Current topic: %s'%(self.oldtopic, self._meetingTopic, self.currenttopic)
+        else:
+            topic = self.currenttopic
+        self.topic(topic)
+    def addnick(self, nick, lines=1):
+        """This person has spoken, lines=<how many lines>"""
+        self.attendees[nick] = self.attendees.get(nick, 0) + lines
+    def isChair(self, nick):
+        """Is the nick a chair?"""
+        return (nick == self.owner  or  nick in self.chairs or self.isop)
+    def isop(self,nick):
+        return self.isop
+    def save(self, **kwargs):
+        return self.config.save(**kwargs)
+    # Primary entry point for new lines in the log:
+    def addline(self, nick, line,isop=False ,time_=None):
+        """This is the way to add lines to the Meeting object.
+        """
+        linenum = self.addrawline(nick, line, time_)
+
+        if time_ is None: time_ = time.localtime()
+        nick = self.config.dec(nick)
+        line = self.config.dec(line)
+        self.isop = isop
+        # Handle any commands given in the line.
+        matchobj = self.config.command_RE.match(line)
+        if matchobj is not None:
+            command, line = matchobj.groups()
+            command = command.lower()
+            # to define new commands, define a method do_commandname .
+            
+            if hasattr(self, "do_"+command):
+                getattr(self, "do_"+command)(nick=nick, line=line,
+                                             linenum=linenum, time_=time_)
+        else:
+            # Detect URLs automatically
+            if line.split('//')[0] in self.config.UrlProtocols:
+                self.do_link(nick=nick, line=line,
+                             linenum=linenum, time_=time_)
+        self.save(realtime_update=True)
+        if re.match("\+1|0|\+0|-1",line):
+            self.doCastVote(nick,line,time_)
+    def doCastVote(self, nick, line, time_=None):
+            """if a vote is underway and the nick is a registered voter
+            and has not already voted in this vote
+            add the voter name and record the vote
+            if the voter has already voted should it reject the second vote,
+            or allow them to change their vote?
+            """
+            if nick in self.voters or self.voters=={}:
+                if self.activeVote:
+                    self.currentVote[nick]=line
+                    self.reply(line + " received from " + nick)
+            #if the vote was in a private message - how do we do that??
+            #self.reply(line + " received from a private vote")
+            #we do record the voter name in the voting structure even if private, so they can't vote twice
+            #we don't print that to the minutes or summary
+
+    def addrawline(self, nick, line, time_=None):
+        """This adds a line to the log, bypassing command execution.
+        """
+        nick = self.config.dec(nick)
+        line = self.config.dec(line)
+        self.addnick(nick)
+        line = line.strip(' \x01') # \x01 is present in ACTIONs
+        # Setting a custom time is useful when replying logs,
+        # otherwise use our current time:
+        if time_ is None: time_ = time.localtime()
+
+        # Handle the logging of the line
+        if line[:6] == 'ACTION':
+            logline = "%s * %s %s"%(time.strftime("%H:%M:%S", time_),
+                                 nick, line[7:].strip())
+        else:
+            logline = "%s <%s> %s"%(time.strftime("%H:%M:%S", time_),
+                                 nick, line.strip())
+        self.lines.append(logline)
+        linenum = len(self.lines)
+        return linenum
+
+    def additem(self, m):
+        """Add an item to the meeting minutes list.
+        """
+        self.minutes.append(m)
+    def replacements(self):
+        repl = { }
+        repl['channel'] = self.channel
+        repl['network'] = self.network
+        repl['MeetBotInfoURL'] = self.config.MeetBotInfoURL
+        repl['timeZone'] = self.config.timeZone
+        repl['starttime'] = repl['endtime'] = "None"
+        if getattr(self, "starttime", None) is not None:
+            repl['starttime'] = time.asctime(self.starttime)
+        if getattr(self, "endtime", None) is not None:
+            repl['endtime'] = time.asctime(self.endtime)
+        repl['__version__'] = __version__
+        repl['chair'] = self.owner
+        repl['urlBasename'] = self.config.filename(url=True)
+        return repl
+
+
+
+
+
+def parse_time(time_):
+    try: return time.strptime(time_, "%H:%M:%S")
+    except ValueError: pass
+    try: return time.strptime(time_, "%H:%M")
+    except ValueError: pass
+logline_re = re.compile(r'\[?([0-9: ]*)\]? *<[@+]?([^>]+)> *(.*)')
+loglineAction_re = re.compile(r'\[?([0-9: ]*)\]? *\* *([^ ]+) *(.*)')
+
+
+def process_meeting(contents, channel, filename,
+                    extraConfig = {},
+                    dontSave=False,
+                    safeMode=True):
+    M = Meeting(channel=channel, owner=None,
+                filename=filename, writeRawLog=False, safeMode=safeMode,
+                extraConfig=extraConfig)
+    if dontSave:
+        M.config.dontSave = True
+    # process all lines
+    for line in contents.split('\n'):
+        # match regular spoken lines:
+        m = logline_re.match(line)
+        if m:
+            time_ = parse_time(m.group(1).strip())
+            nick = m.group(2).strip()
+            line = m.group(3).strip()
+            if M.owner is None:
+                M.owner = nick ; M.chairs = {nick:True}
+            M.addline(nick, line, time_=time_)
+        # match /me lines
+        m = loglineAction_re.match(line)
+        if m:
+            time_ = parse_time(m.group(1).strip())
+            nick = m.group(2).strip()
+            line = m.group(3).strip()
+            M.addline(nick, "ACTION "+line, time_=time_)
+    return M
+
+def replay_meeting(channel
+,                    extraConfig = {},
+                    dontSave=False,
+                    safeMode=True):
+    
+    M = Meeting(channel=channel, owner=None,
+                writeRawLog=False, safeMode=safeMode,
+                extraConfig=extraConfig)
+
+
+
+# None of this is very well refined.
+if __name__ == '__main__':
+    import sys
+    if sys.argv[1] == 'replay':
+        fname = sys.argv[2]
+        m = re.match('(.*)\.log\.txt', fname)
+        if m:
+            filename = m.group(1)
+        else:
+            filename = os.path.splitext(fname)[0]
+        print 'Saving to:', filename
+        channel = '#'+os.path.basename(sys.argv[2]).split('.')[0]
+
+        M = Meeting(channel=channel, owner=None,
+                    filename=filename, writeRawLog=False)
+        for line in file(sys.argv[2]):
+            # match regular spoken lines:
+            m = logline_re.match(line)
+            if m:
+                time_ = parse_time(m.group(1).strip())
+                nick = m.group(2).strip()
+                line = m.group(3).strip()
+                if M.owner is None:
+                    M.owner = nick ; M.chairs = {nick:True}
+                M.addline(nick, line, time_=time_)
+            # match /me lines
+            m = loglineAction_re.match(line)
+            if m:
+                time_ = parse_time(m.group(1).strip())
+                nick = m.group(2).strip()
+                line = m.group(3).strip()
+                M.addline(nick, "ACTION "+line, time_=time_)
+        #M.save() # should be done by #endmeeting in the logs!
+    else:
+        print 'Command "%s" not found.'%sys.argv[1]
+

=== added file 'meetingLocalConfig.py'
--- meetingLocalConfig.py	1970-01-01 00:00:00 +0000
+++ meetingLocalConfig.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,19 @@
+import writers
+import re
+class Config(object):
+    logFileDir = '/var/www/mootbot/'
+    filenamePattern = '%(channel)s/%%Y/%(channel)s.%%F-%%H.%%M'
+
+    logUrlPrefix = 'http://mootbot.libertus.co.uk/'
+    MeetBotInfoURL = 'http://wiki.ubuntu.com/AlanBell'
+    writer_map = {
+        #'.log.html':writers.HTMLlog,
+        #'.1.html': writers.HTML,
+        #'.html': writers.HTML2,
+        #'.rst': writers.ReST,
+        #'.txt': writers.Text,
+        #'.rst.html':writers.HTMLfromReST,
+        '.moin.txt':writers.Moin,
+        #'.mw.txt':writers.MediaWiki,
+        }
+    command_RE = re.compile(r'[#|\[]([\w]+)[\]]?[ \t]*(.*)')

=== added file 'plugin.py'
--- plugin.py	1970-01-01 00:00:00 +0000
+++ plugin.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,315 @@
+###
+# Copyright (c) 2009, Richard Darst
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions, and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions, and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#   * Neither the name of the author of this software nor the name of
+#     contributors to this software may be used to endorse or promote products
+#     derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+###
+
+import supybot.utils as utils
+from supybot.commands import *
+import supybot.plugins as plugins
+import supybot.ircutils as ircutils
+import supybot.callbacks as callbacks
+import supybot.ircmsgs as ircmsgs
+
+import time
+import meeting
+import supybotconfig
+# Because of the way we override names, we need to reload these in order.
+meeting = reload(meeting)
+supybotconfig = reload(supybotconfig)
+
+if supybotconfig.is_supybotconfig_enabled(meeting.Config):
+    supybotconfig.setup_config(meeting.Config)
+    meeting.Config = supybotconfig.get_config_proxy(meeting.Config)
+
+# By doing this, we can not lose all of our meetings across plugin
+# reloads.  But, of course, you can't change the source too
+# drastically if you do that!
+try:               meeting_cache
+except NameError:  meeting_cache = {}
+try:               recent_meetings
+except NameError:  recent_meetings = [ ]
+
+
+class MeetBot(callbacks.Plugin):
+    """Add the help for "@plugin help MeetBot" here
+    This should describe *how* to use this plugin."""
+
+    def __init__(self, irc):
+        self.__parent = super(MeetBot, self)
+        self.__parent.__init__(irc)
+                        
+    # Instead of using real supybot commands, I just listen to ALL
+    # messages coming in and respond to those beginning with our
+    # prefix char.  I found this helpful from a not duplicating logic
+    # standpoint (as well as other things).  Ask me if you have more
+    # questions.
+
+    # This captures all messages coming into the bot.
+    def doPrivmsg(self, irc, msg):
+        nick = msg.nick
+        channel = msg.args[0]
+        payload = msg.args[1]
+        network = irc.msg.tags['receivedOn']
+
+        # The following is for debugging.  It's excellent to get an
+        # interactive interperter inside of the live bot.  use
+        # code.interact instead of my souped-up version if you aren't
+        # on my computer:
+        #if payload == 'interact':
+        #    from rkddp.interact import interact ; interact()
+
+        # Get our Meeting object, if one exists.  Have to keep track
+        # of different servers/channels.
+        # (channel, network) tuple is our lookup key.
+        Mkey = (channel,network)
+        M = meeting_cache.get(Mkey, None)
+
+        # Start meeting if we are requested
+        if payload[:13] == '#startmeeting':
+            if M is not None:
+                irc.error("Can't start another meeting, one is in progress.")
+                return
+            # This callback is used to send data to the channel:
+            def _setTopic(x):
+                irc.sendMsg(ircmsgs.topic(channel, x))
+            def _sendReply(x):
+                irc.sendMsg(ircmsgs.privmsg(channel, x))
+            def _channelNicks():
+                return irc.state.channels[channel].users
+            M = meeting.Meeting(channel=channel, owner=nick,
+                                oldtopic=irc.state.channels[channel].topic,
+                                writeRawLog=True,
+                                setTopic = _setTopic, sendReply = _sendReply,
+                                getRegistryValue = self.registryValue,
+                                safeMode=True, channelNicks=_channelNicks,
+                                network=network,
+                                )
+            meeting_cache[Mkey] = M
+            recent_meetings.append(
+                (channel, network, time.ctime()))
+            if len(recent_meetings) > 10:
+                del recent_meetings[0]
+        if payload[:7]=='#replay':
+            if M is not None:
+                irc.error("Can't replay logs while a meeting is in progress.")
+                return
+            M = meeting.replay_meeting(channel=channel)
+            meeting_cache[Mkey] = M
+            recent_meetings.append(
+                (channel, network, time.ctime()))
+            if len(recent_meetings) > 10:
+                del recent_meetings[0]
+
+        # If there is no meeting going on, then we quit
+        if M is None: return
+        # Add line to our meeting buffer.
+        isop=(nick in irc.state.channels[channel].ops)
+        M.addline(nick, payload,isop)
+        # End meeting if requested:
+        if M._meetingIsOver:
+            #M.save()  # now do_endmeeting in M calls the save functions
+            del meeting_cache[Mkey]
+
+    def outFilter(self, irc, msg):
+        """Log outgoing messages from supybot.
+        """
+        # Catch supybot's own outgoing messages to log them.  Run the
+        # whole thing in a try: block to prevent all output from
+        # getting clobbered.
+        try:
+            if msg.command in ('PRIVMSG'):
+                # Note that we have to get our nick and network parameters
+                # in a slightly different way here, compared to doPrivmsg.
+                nick = irc.nick
+                channel = msg.args[0]
+                payload = msg.args[1]
+                Mkey = (channel,irc.network)
+                M = meeting_cache.get(Mkey, None)
+                if M is not None:
+                    M.addrawline(nick, payload)
+        except:
+            import traceback
+            print traceback.print_exc()
+            print "(above exception in outFilter, ignoring)"
+        return msg
+
+    # These are admin commands, for use by the bot owner when there
+    # are many channels which may need to be independently managed.
+
+    def listmeetings(self, irc, msg, args):
+        """
+
+        List all currently-active meetings."""
+        reply = ""
+        reply = ", ".join(str(x) for x in sorted(meeting_cache.keys()) )
+        if reply.strip() == '':
+            irc.reply("No currently active meetings.")
+        else:
+            irc.reply(reply)
+    listmeetings = wrap(listmeetings, ['admin'])
+    def savemeetings(self, irc, msg, args):
+        """
+
+        Save all currently active meetings."""
+        numSaved = 0
+        for M in meeting_cache.iteritems():
+            M.config.save()
+        irc.reply("Saved %d meetings."%numSaved)
+    savemeetings = wrap(savemeetings, ['admin'])
+    def addchair(self, irc, msg, args, channel, network, nick):
+        """<channel> <network> <nick>
+
+        Add a nick as a chair to the meeting."""
+        Mkey = (channel,network)
+        M = meeting_cache.get(Mkey, None)
+        if not M:
+            irc.reply("Meeting on channel %s, network %s not found"%(
+                channel, network))
+            return
+        M.chairs.setdefault(nick, True)
+        irc.reply("Chair added: %s on (%s, %s)."%(nick, channel, network))
+    addchair = wrap(addchair, ['admin', "channel", "something", "nick"])
+    def deletemeeting(self, irc, msg, args, channel, network, save):
+        """<channel> <network> <saveit=True>
+
+        Delete a meeting from the cache.  If save is given, save the
+        meeting first, defaults to saving."""
+        Mkey = (channel,network)
+        if Mkey not in meeting_cache:
+            irc.reply("Meeting on channel %s, network %s not found"%(
+                channel, network))
+            return
+        if save:
+            M = meeting_cache.get(Mkey, None)
+            import time
+            M.endtime = time.localtime()
+            M.config.save()
+        del meeting_cache[Mkey]
+        irc.reply("Deleted: meeting on (%s, %s)."%(channel, network))
+    deletemeeting = wrap(deletemeeting, ['admin', "channel", "something",
+                               optional("boolean", True)])
+    def recent(self, irc, msg, args):
+        """
+
+        List recent meetings for admin purposes.
+        """
+        reply = []
+        for channel, network, ctime in recent_meetings:
+            Mkey = (channel,network)
+            if Mkey in meeting_cache:   state = ", running"
+            else:                       state = ""
+            reply.append("(%s, %s, %s%s)"%(channel, network, ctime, state))
+        if reply:
+            irc.reply(" ".join(reply))
+        else:
+            irc.reply("No recent meetings in internal state.")
+    recent = wrap(recent, ['admin'])
+
+    def pingall(self, irc, msg, args, message):
+        """<text>
+
+        Send a broadcast ping to all users on the channel.
+
+        An message to be sent along with this ping must also be
+        supplied for this command to work.
+        """
+        nick = msg.nick
+        channel = msg.args[0]
+        payload = msg.args[1]
+
+        # We require a message to go out with the ping, we don't want
+        # to waste people's time:
+        if channel[0] != '#':
+            irc.reply("Not joined to any channel.")
+            return
+        if message is None:
+            irc.reply("You must supply a description with the `pingall` command.  We don't want to go wasting people's times looking for why they are pinged.")
+            return
+
+        # Send announcement message
+        irc.sendMsg(ircmsgs.privmsg(channel, message))
+        # ping all nicks in lines of about 256
+        nickline = ''
+        nicks = sorted(irc.state.channels[channel].users,
+                       key=lambda x: x.lower())
+        for nick in nicks:
+            nickline = nickline + nick + ' '
+            if len(nickline) > 256:
+                irc.sendMsg(ircmsgs.privmsg(channel, nickline))
+                nickline = ''
+        irc.sendMsg(ircmsgs.privmsg(channel, nickline))
+        # Send announcement message
+        irc.sendMsg(ircmsgs.privmsg(channel, message))
+
+    pingall = wrap(pingall, [optional('text', None)])
+
+    def __getattr__(self, name):
+        """Proxy between proper supybot commands and # MeetBot commands.
+
+        This allows you to use MeetBot: <command> <line of the command>
+        instead of the typical #command version.  However, it's disabled
+        by default as there are some possible unresolved issues with it.
+
+        To enable this, you must comment out a line in the main code.
+        It may be enabled in a future version.
+        """
+        # First, proxy to our parent classes (__parent__ set in __init__)
+        try:
+            return self.__parent.__getattr__(name)
+        except AttributeError:
+            pass
+        # Disabled for now.  Uncomment this if you want to use this.
+        raise AttributeError
+
+        if not hasattr(meeting.Meeting, "do_"+name):
+            raise AttributeError
+
+        def wrapped_function(self, irc, msg, args, message):
+            channel = msg.args[0]
+            payload = msg.args[1]
+
+            #from fitz import interactnow ; reload(interactnow)
+
+            #print type(payload)
+            payload = "#%s %s"%(name,message)
+            #print payload
+            import copy
+            msg = copy.copy(msg)
+            msg.args = (channel, payload)
+
+            self.doPrivmsg(irc, msg)
+        # Give it the signature we need to be a callable supybot
+        # command (it does check more than I'd like).  Heavy Wizardry.
+        instancemethod = type(self.__getattr__)
+        wrapped_function = wrap(wrapped_function, [optional('text', '')])
+        return instancemethod(wrapped_function, self, MeetBot)
+
+Class = MeetBot
+
+
+# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:

=== added file 'supybotconfig.py'
--- supybotconfig.py	1970-01-01 00:00:00 +0000
+++ supybotconfig.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,156 @@
+# Richard Darst, June 2009
+
+###
+# Copyright (c) 2009, Richard Darst
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions, and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions, and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#   * Neither the name of the author of this software nor the name of
+#     contributors to this software may be used to endorse or promote products
+#     derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+###
+
+
+import types
+
+import supybot.conf as conf
+import supybot.registry as registry
+
+import meeting
+import writers
+
+# The plugin group for configuration
+MeetBotConfigGroup = conf.registerPlugin('MeetBot')
+
+class WriterMap(registry.String):
+    """List of output formats to write.  This is a space-separated
+    list of 'WriterName:.ext' pairs.  WriterName must be from the
+    writers.py module, '.ext' must be a extension ending in a .
+    """
+    def set(self, s):
+        s = s.split()
+        writer_map = { }
+        for writer in s:
+            #from fitz import interact ; interact.interact()
+            writer, ext = writer.split(':')
+            if not hasattr(writers, writer):
+                raise ValueError("Writer name not found: %s"%writer)
+            #if len(ext) < 2 or ext[0] != '.':
+            #    raise ValueError("Extension must start with '.' and have "
+            #                     "at least one more character.")
+            writer_map[ext] = getattr(writers, writer)
+        self.setValue(writer_map)
+    def setValue(self, writer_map):
+        for e, w in writer_map.iteritems():
+            if not hasattr(w, "format"):
+                raise ValueError("Writer %s must have method .format()"%
+                                 w.__name__)
+            self.value = writer_map
+    def __str__(self):
+        writers_string = [ ]
+        for ext, w in self.value.iteritems():
+            name = w.__name__
+            writers_string.append("%s:%s"%(name, ext))
+        return " ".join(writers_string)
+
+
+class SupybotConfigProxy(object):
+    def __init__(self, *args, **kwargs):
+        """Do the regular default configuration, and sta"""
+        OriginalConfig = self.__OriginalConfig
+        self.__C = OriginalConfig(*args, **kwargs)
+    
+    def __getattr__(self, attrname):
+        """Try to get the value from the supybot registry.  If it's in
+        the registry, return it.  If it's not, then proxy it to th.
+        """
+        if attrname in settable_attributes:
+            value = self.__C.M._registryValue(attrname,
+                                              channel=self.__C.M.channel)
+            if not isinstance(value, (str, unicode)):
+                return value
+            # '.' is used to mean "this is not set, use the default
+            # value from the python config class.
+            if value != '.':
+                value = value.replace('\\n', '\n')
+                return value
+        # We don't have this value in the registry.  So, proxy it to
+        # the normal config object.  This is also the path that all
+        # functions take.
+        value = getattr(self.__C, attrname)
+        # If the value is an instance method, we need to re-bind it to
+        # the new config class so that we will get the data values
+        # defined in supydot (otherwise attribute lookups in the
+        # method will bypass the supybot proxy and just use default
+        # values).  This will slow things down a little bit, but
+        # that's just the cost of duing business.
+        if hasattr(value, 'im_func'):
+            return types.MethodType(value.im_func, self, value.im_class)
+        return value
+
+
+
+#conf.registerGlobalValue(MeetBot
+use_supybot_config = conf.registerGlobalValue(MeetBotConfigGroup,
+                                              'enableSupybotBasedConfig',
+                                              registry.Boolean(False, ''))
+def is_supybotconfig_enabled(OriginalConfig):
+    return (use_supybot_config.value and
+            not getattr(OriginalConfig, 'dontBotConfig', False))
+
+settable_attributes = [ ]
+def setup_config(OriginalConfig):
+    # Set all string variables in the default Config class as supybot
+    # registry variables.
+    for attrname in dir(OriginalConfig):
+        # Don't configure attributs starting with '_'
+        if attrname[0] == '_':
+            continue
+        attr = getattr(OriginalConfig, attrname)
+        # Don't configure attributes that aren't strings.
+        if isinstance(attr, (str, unicode)):
+            attr = attr.replace('\n', '\\n')
+            # For a global value: conf.registerGlobalValue and remove the
+            # channel= option from registryValue call above.
+            conf.registerChannelValue(MeetBotConfigGroup, attrname,
+                                      registry.String(attr,""))
+            settable_attributes.append(attrname)
+        if isinstance(attr, bool):
+            conf.registerChannelValue(MeetBotConfigGroup, attrname,
+                                      registry.Boolean(attr,""))
+            settable_attributes.append(attrname)
+
+    # writer_map
+    # (doing the commented out commands below will erase the previously
+    # stored value of a config variable)
+    #if 'writer_map' in MeetBotConfigGroup._children:
+    #    MeetBotConfigGroup.unregister('writer_map')
+    conf.registerChannelValue(MeetBotConfigGroup, 'writer_map',
+                      WriterMap(OriginalConfig.writer_map, ""))
+    settable_attributes.append('writer_map')
+
+def get_config_proxy(OriginalConfig):
+    # Here is where the real proxying occurs.
+    SupybotConfigProxy._SupybotConfigProxy__OriginalConfig = OriginalConfig
+    return SupybotConfigProxy
+
+

=== added file 'template.html'
--- template.html	1970-01-01 00:00:00 +0000
+++ template.html	2012-01-28 02:35:27 +0000
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
+<html xmlns:py="http://genshi.edgewall.org/";>
+<head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
+ <title>${meeting.title}</title>
+ <style type="text/css">
+/* This is for the .html in the HTML2 writer */
+body {
+    font-family: Helvetica, sans-serif;
+    font-size:14px;
+}
+h1 {
+    text-align: center;
+}
+a {
+    color:navy;
+    text-decoration: none;
+    border-bottom:1px dotted navy;
+}
+a:hover {
+    text-decoration:none;
+    border-bottom: 0;
+    color:#0000B9;
+}
+hr {
+    border: 1px solid #ccc;
+}
+/* The (nick, time) item pairs, and other body text things. */
+.details {
+    font-size: 12px;
+    font-weight:bold;
+}
+/* The 'AGREED:', 'IDEA', etc, prefix to lines. */
+.itemtype {
+    font-style: normal;    /* un-italics it */
+    font-weight: bold;
+}
+/* Example: change single item types.  Capitalized command name.
+/* .TOPIC  {  color:navy;  } */
+/* .AGREED {  color:lime;  } */
+
+ </style>
+</head>
+
+<body>
+ <h1>${meeting.title}</h1>
+ <span class="details"> Meeting started by ${meeting.owner} at ${time.start} ${time.timezone} (<a href="${meeting.logs}">full logs</a>).</span>
+
+ <h3>Meeting summary</h3>
+ <ol>
+  <li py:for="item in agenda">
+   <b class="TOPIC">${item.topic.topic}</b> <span py:if="item.topic.nick" class="details">(<a href='${meeting.logs}#${item.topic.anchor}'>${item.topic.nick}</a>, ${item.topic.time})</span>
+   <ol type="a">
+    <py:if test="len(item.notes) > 0">
+    <li py:for="note in item.notes">
+     <i class="itemtype">${note.itemtype}</i>: 
+     <py:choose>
+      <py:when test="note.itemtype == 'LINK'">
+      <span class="${note.itemtype}">
+       <a href="${note.url}">
+        <py:choose>
+         <py:when test="note.line">${note.line}</py:when>
+         <py:otherwise>${note.url}</py:otherwise>
+        </py:choose>
+       </a>
+      </span>
+      </py:when>
+      <py:otherwise>
+       <span class="${note.itemtype}">${note.line}</span>
+      </py:otherwise>
+     </py:choose>
+     <span class="details">(<a href='${meeting.logs}#${note.anchor}'>${note.nick}</a>, ${note.time})</span>
+    </li>
+    </py:if>
+   </ol>
+  </li>
+ </ol>
+
+ <span class="details">Meeting ended at ${time.end} ${time.timezone} (<a href="${meeting.logs}">full logs</a>).</span>
+
+ <h3>Action items</h3>
+ <ol>
+  <li py:for="action in actions">${action}</li>
+ </ol>
+
+ <h3>Action items, by person</h3>
+ <ol>
+  <li py:for="attendee in actions_person">${attendee.nick}
+   <ol>
+    <li py:for="action in attendee.actions">${action}</li>
+   </ol>
+  </li>
+ </ol>
+
+ <h3>People present (lines said)</h3>
+ <ol>
+  <li py:for="attendee in attendees">${attendee.nick} (${attendee.count})</li>
+ </ol>
+
+ <span class="details">Generated by <a href="${meetbot.url}">MeetBot</a> ${meetbot.version}.</span>
+</body>
+</html>

=== added file 'template.txt'
--- template.txt	1970-01-01 00:00:00 +0000
+++ template.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,55 @@
+{% python 
+    heading = "="*len(meeting['title'])
+
+    from textwrap import TextWrapper
+    def wrap(text, level):
+        return TextWrapper(width=72, initial_indent=' '*(level-1)*2, subsequent_indent=' '*level*2, break_long_words=False).fill(text)
+%}
+${heading}
+${meeting.title}
+${heading}
+
+
+${wrap("Meeting started by %s at %s %s. The full logs are available at %s ."%(meeting.owner, time.start, time.timezone, meeting.logsFullURL), 1)}
+
+
+
+Meeting summary
+---------------
+
+{% for item in agenda %}\
+{% choose %}
+{% when item.topic.nick %}${wrap("* %s  (%s, %s)"%(item.topic.topic, item.topic.nick, item.topic.time), 1)}{% end %}\
+{% otherwise %}${wrap("* %s"%(item.topic.topic), 1)}{% end %}
+{% end %}\
+{% for note in item.notes %}\
+{% choose %}\
+{% when note.itemtype == 'LINK' %}${wrap("* %s: %s %s  (%s, %s)"%(note.itemtype, note.url, note.line, note.nick, note.time), 2)}{% end %}\
+{% otherwise %}${wrap("* %s: %s  (%s, %s)"%(note.itemtype, note.line, note.nick, note.time), 2)}{% end %}
+{% end %}\
+{% end %}\
+{% end %}
+
+${wrap("Meeting ended at %s %s."%(time.end, time.timezone), 1)}
+
+
+
+Action items, by person
+-----------------------
+
+{% for attendee in actions_person %}\
+* ${attendee.nick}
+{% for action in attendee.actions %}\
+${wrap("* %s"%action, 2)}
+{% end %}
+{% end %}
+
+People present (lines said)
+---------------------------
+
+{% for attendee in attendees %}\
+* ${attendee.nick} (${attendee.count})
+{% end %}
+
+
+Generated by `MeetBot`_ ${meetbot.version}

=== added file 'test.py'
--- test.py	1970-01-01 00:00:00 +0000
+++ test.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,83 @@
+###
+# Copyright (c) 2009, Richard Darst
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions, and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions, and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#   * Neither the name of the author of this software nor the name of
+#     contributors to this software may be used to endorse or promote products
+#     derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+###
+
+from supybot.test import *
+
+import os
+import sys
+
+class MeetBotTestCase(ChannelPluginTestCase):
+    channel = "#testchannel"
+    plugins = ('MeetBot',)
+
+    def testRunMeeting(self):
+        test_script = file(os.path.join(os.path.dirname(__file__),
+                                        "tests/test-script-2.log.txt"))
+        for line in test_script:
+            # Normalize input lines somewhat.
+            line = line.strip()
+            if not line: continue
+            # This consists of input/output pairs we expect.  If it's
+            # not here, it's not checked for.
+            match_pairs = (('#startmeeting', 'Meeting started'),
+                           ('#endmeeting', 'Meeting ended'),
+                           ('#topic +(.*)', 1),
+                           ('#meetingtopic +(.*)', 1),
+                           ('#meetingname','The meeting name has been set to'),
+                           ('#chair', 'Current chairs:'),
+                           ('#unchair', 'Current chairs:'),
+                           )
+            # Run the command and get any possible output
+            reply = [ ]
+            self.feedMsg(line)
+            r = self.irc.takeMsg()
+            while r:
+                reply.append(r.args[1])
+                r = self.irc.takeMsg()
+            reply = "\n".join(reply)
+            # If our input line matches a test pattern, then insist
+            # that the output line matches the expected output
+            # pattern.
+            for test in match_pairs:
+                if re.search(test[0], line):
+                    groups = re.search(test[0], line).groups()
+                    # Output pattern depends on input pattern
+                    if isinstance(test[1], int):
+                        print groups[test[1]-1], reply
+                        assert re.search(re.escape(groups[test[1]-1]), reply),\
+                              'line "%s" gives output "%s"'%(line, reply)
+                    # Just match the given pattern.
+                    else:
+                        print test[1], reply
+                        assert re.search(test[1], reply.decode('utf-8')), \
+                               'line "%s" gives output "%s"'%(line, reply)
+
+
+# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:

=== added directory 'tests'
=== added file 'tests/run_test.py'
--- tests/run_test.py	1970-01-01 00:00:00 +0000
+++ tests/run_test.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,261 @@
+# Richard Darst, 2009
+
+import os
+import re
+import sys
+import tempfile
+import unittest
+
+os.environ['MEETBOT_RUNNING_TESTS'] = '1'
+import meeting
+import writers
+
+running_tests = True
+
+def process_meeting(contents, extraConfig={}):
+    return meeting.process_meeting(contents=contents,
+                                channel="#none",  filename='/dev/null',
+                                dontSave=True, safeMode=False,
+                                extraConfig=extraConfig)
+
+class MeetBotTest(unittest.TestCase):
+
+    def test_replay(self):
+        """Replay of a meeting, using __meeting__.
+        """
+        sys.argv[1:] = ["replay", "test-script-1.log.txt"]
+        sys.path.insert(0, "..")
+        try:
+            execfile("../meeting.py", {})
+        finally:
+            del sys.path[0]
+
+    def test_supybottests(self):
+        """Test by sending input to supybot, check responses.
+
+        Uses the external supybot-test command.  Unfortunantly, that
+        doesn't have a useful status code, so I need to parse the
+        output.
+        """
+        os.symlink("..", "MeetBot")
+        try:
+            output = os.popen("supybot-test ./MeetBot 2>&1").read()
+            print output
+            assert 'FAILED' not in output, "supybot-based tests failed."
+            assert '\nOK\n'     in output, "supybot-based tests failed."
+        finally:
+            os.unlink("MeetBot")
+
+    trivial_contents = """
+    10:10:10 <x> #startmeeting
+    10:10:10 <x> blah
+    10:10:10 <x> #endmeeting
+    """
+
+    full_writer_map = {
+        '.log.txt':     writers.TextLog,
+        '.log.1.html':  writers.HTMLlog1,
+        '.log.html':    writers.HTMLlog2,
+        '.1.html':      writers.HTML1,
+        '.html':        writers.HTML2,
+        '.rst':         writers.ReST,
+        '.rst.html':    writers.HTMLfromReST,
+        '.txt':         writers.Text,
+        '.mw':          writers.MediaWiki,
+        '.pmw':         writers.PmWiki,
+        '.tmp.txt|template=+template.txt':   writers.Template,
+        '.tmp.html|template=+template.html': writers.Template,
+        }
+
+    def M_trivial(self, contents=None, extraConfig={}):
+        if contents is None:
+            contents = self.trivial_contents
+        return process_meeting(contents=contents,
+                               extraConfig=extraConfig)
+
+    def test_script_1(self):
+        process_meeting(contents=file('test-script-1.log.txt').read(),
+                        extraConfig={'writer_map':self.full_writer_map})
+    #def test_script_3(self):
+    #   process_meeting(contents=file('test-script-3.log.txt').read(),
+    #                   extraConfig={'writer_map':self.full_writer_map})
+
+    all_commands_test_contents = """
+    10:10:10 <x> #startmeeting
+    10:10:10 <x> #topic h6k4orkac
+    10:10:10 <x> #info blaoulrao
+    10:10:10 <x> #idea alrkkcao4
+    10:10:10 <x> #help ntoircoa5
+    10:10:10 <x> #link http://bnatorkcao.net kroacaonteu
+    10:10:10 <x> http://jrotjkor.net krotroun
+    10:10:10 <x> #action xrceoukrc
+    10:10:10 <x> #nick okbtrokr
+
+    # Should not appear in non-log output
+    10:10:10 <x> #idea ckmorkont
+    10:10:10 <x> #undo
+
+    # Assert that chairs can change the topic, and non-chairs can't.
+    10:10:10 <x> #chair y
+    10:10:10 <y> #topic topic_doeschange
+    10:10:10 <z> #topic topic_doesntchange
+    10:10:10 <x> #unchair y
+    10:10:10 <y> #topic topic_doesnt2change
+
+    10:10:10 <x> #endmeeting
+    """
+    def test_contents_test2(self):
+        """Ensure that certain input lines do appear in the output.
+
+        This test ensures that the input to certain commands does
+        appear in the output.
+        """
+        M = process_meeting(contents=self.all_commands_test_contents,
+                            extraConfig={'writer_map':self.full_writer_map})
+        results = M.save()
+        for name, output in results.iteritems():
+            self.assert_('h6k4orkac' in output, "Topic failed for %s"%name)
+            self.assert_('blaoulrao' in output, "Info failed for %s"%name)
+            self.assert_('alrkkcao4' in output, "Idea failed for %s"%name)
+            self.assert_('ntoircoa5' in output, "Help failed for %s"%name)
+            self.assert_('http://bnatorkcao.net' in output,
+                                                  "Link(1) failed for %s"%name)
+            self.assert_('kroacaonteu' in output, "Link(2) failed for %s"%name)
+            self.assert_('http://jrotjkor.net' in output,
+                                        "Link detection(1) failed for %s"%name)
+            self.assert_('krotroun' in output,
+                                        "Link detection(2) failed for %s"%name)
+            self.assert_('xrceoukrc' in output, "Action failed for %s"%name)
+            self.assert_('okbtrokr' in output, "Nick failed for %s"%name)
+
+            # Things which should only appear or not appear in the
+            # notes (not the logs):
+            if 'log' not in name:
+                self.assert_( 'ckmorkont' not in output,
+                              "Undo failed for %s"%name)
+                self.assert_('topic_doeschange' in output,
+                             "Chair changing topic failed for %s"%name)
+                self.assert_('topic_doesntchange' not in output,
+                             "Non-chair not changing topic failed for %s"%name)
+                self.assert_('topic_doesnt2change' not in output,
+                            "Un-chaired was able to chang topic for %s"%name)
+
+    #def test_contents_test(self):
+    #    contents = open('test-script-3.log.txt').read()
+    #    M = process_meeting(contents=file('test-script-3.log.txt').read(),
+    #                        extraConfig={'writer_map':self.full_writer_map})
+    #    results = M.save()
+    #    for line in contents.split('\n'):
+    #        m = re.search(r'#(\w+)\s+(.*)', line)
+    #        if not m:
+    #            continue
+    #        type_ = m.group(1)
+    #        text = m.group(2)
+    #        text = re.sub('[^\w]+', '', text).lower()
+    #
+    #        m2 = re.search(t2, re.sub(r'[^\w\n]', '', results['.txt']))
+    #        import fitz.interactnow
+    #        print m.groups()
+
+    def t_css(self):
+        """Runs all CSS-related tests.
+        """
+        self.test_css_embed()
+        self.test_css_noembed()
+        self.test_css_file_embed()
+        self.test_css_file()
+        self.test_css_none()
+    def test_css_embed(self):
+        extraConfig={ }
+        results = self.M_trivial(extraConfig={}).save()
+        self.assert_('<link rel="stylesheet" ' not in results['.html'])
+        self.assert_('body {'                      in results['.html'])
+        self.assert_('<link rel="stylesheet" ' not in results['.log.html'])
+        self.assert_('body {'                      in results['.log.html'])
+    def test_css_noembed(self):
+        extraConfig={'cssEmbed_minutes':False,
+                     'cssEmbed_log':False,}
+        M = self.M_trivial(extraConfig=extraConfig)
+        results = M.save()
+        self.assert_('<link rel="stylesheet" '     in results['.html'])
+        self.assert_('body {'                  not in results['.html'])
+        self.assert_('<link rel="stylesheet" '     in results['.log.html'])
+        self.assert_('body {'                  not in results['.log.html'])
+    def test_css_file(self):
+        tmpf = tempfile.NamedTemporaryFile()
+        magic_string = '546uorck6o45tuo6'
+        tmpf.write(magic_string)
+        tmpf.flush()
+        extraConfig={'cssFile_minutes':  tmpf.name,
+                     'cssFile_log':      tmpf.name,}
+        M = self.M_trivial(extraConfig=extraConfig)
+        results = M.save()
+        self.assert_('<link rel="stylesheet" ' not in results['.html'])
+        self.assert_(magic_string                  in results['.html'])
+        self.assert_('<link rel="stylesheet" ' not in results['.log.html'])
+        self.assert_(magic_string                  in results['.log.html'])
+    def test_css_file_embed(self):
+        tmpf = tempfile.NamedTemporaryFile()
+        magic_string = '546uorck6o45tuo6'
+        tmpf.write(magic_string)
+        tmpf.flush()
+        extraConfig={'cssFile_minutes':  tmpf.name,
+                     'cssFile_log':      tmpf.name,
+                     'cssEmbed_minutes': False,
+                     'cssEmbed_log':     False,}
+        M = self.M_trivial(extraConfig=extraConfig)
+        results = M.save()
+        self.assert_('<link rel="stylesheet" '     in results['.html'])
+        self.assert_(tmpf.name                     in results['.html'])
+        self.assert_('<link rel="stylesheet" '     in results['.log.html'])
+        self.assert_(tmpf.name                     in results['.log.html'])
+    def test_css_none(self):
+        tmpf = tempfile.NamedTemporaryFile()
+        magic_string = '546uorck6o45tuo6'
+        tmpf.write(magic_string)
+        tmpf.flush()
+        extraConfig={'cssFile_minutes':  'none',
+                     'cssFile_log':      'none',}
+        M = self.M_trivial(extraConfig=extraConfig)
+        results = M.save()
+        self.assert_('<link rel="stylesheet" ' not in results['.html'])
+        self.assert_('<style type="text/css" ' not in results['.html'])
+        self.assert_('<link rel="stylesheet" ' not in results['.log.html'])
+        self.assert_('<style type="text/css" ' not in results['.log.html'])
+
+    def test_filenamevars(self):
+        def getM(fnamepattern):
+            M = meeting.Meeting(channel='somechannel',
+                                network='somenetwork',
+                                owner='nobody',
+                     extraConfig={'filenamePattern':fnamepattern})
+            M.addline('nobody', '#startmeeting')
+            return M
+        # Test the %(channel)s and %(network)s commands in supybot.
+        M = getM('%(channel)s-%(network)s')
+        assert M.config.filename().endswith('somechannel-somenetwork'), \
+               "Filename not as expected: "+M.config.filename()
+        # Test dates in filenames
+        M = getM('%(channel)s-%%F')
+        import time
+        assert M.config.filename().endswith(time.strftime('somechannel-%F')),\
+               "Filename not as expected: "+M.config.filename()
+        # Test #meetingname in filenames
+        M = getM('%(channel)s-%(meetingname)s')
+        M.addline('nobody', '#meetingname blah1234')
+        assert M.config.filename().endswith('somechannel-blah1234'),\
+               "Filename not as expected: "+M.config.filename()
+
+
+if __name__ == '__main__':
+    os.chdir(os.path.join(os.path.dirname(__file__), '.'))
+    if len(sys.argv) <= 1:
+        unittest.main()
+    else:
+        for testname in sys.argv[1:]:
+            print testname
+            if hasattr(MeetBotTest, testname):
+                MeetBotTest(methodName=testname).debug()
+            else:
+                MeetBotTest(methodName='test_'+testname).debug()
+

=== added file 'tests/test-script-1.log.txt'
--- tests/test-script-1.log.txt	1970-01-01 00:00:00 +0000
+++ tests/test-script-1.log.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,77 @@
+20:13:46 <MrBeige> #startmeeting
+
+20:13:50 <T-Rex> #info this command is just before the first topic
+
+20:13:50 <T-Rex> #topic Test of topics
+20:13:50 <T-Rex> #topic Second topic
+20:13:50 <T-Rex> #meetingtopic the meeting topic
+20:13:50 <T-Rex> #topic With áccents
+
+
+20:13:50 <MrBeige> #topic General command tests
+
+20:13:50 <MrBeige> #accepted we will include this new format if we so choose.
+20:13:50 <MrBeige> #rejected we will not include this new format.
+20:13:50 <MrBeige> #chair Utahraptor T-Rex not-here
+20:13:50 <MrBeige> #chair Utahraptor T-Rex
+20:13:50 <MrBeige> #nick someone-not-present
+20:13:50 <MrBeige> #chair áccents
+20:13:50 <MrBeige> #nick áccenẗs
+20:13:50 <MrBeige> #unchar not-here
+
+# all commands
+20:13:50 <MrBeige> #topic Test of all commands with different arguments
+20:13:50 <MrBeige> #topic
+20:13:50 <MrBeige> #idea
+20:13:50 <MrBeige> #info
+20:13:50 <MrBeige> #action
+20:13:50 <MrBeige> #agreed
+20:13:50 <MrBeige> #halp
+20:13:50 <MrBeige> #accepted
+20:13:50 <MrBeige> #rejected
+
+20:13:50 <MrBeige> #topic Commands with non-ascii
+20:13:50 <MrBeige> #topic    üáç€
+20:13:50 <MrBeige> #idea     üáç€
+20:13:50 <MrBeige> #info     üáç€
+20:13:50 <MrBeige> #action   üáç€
+20:13:50 <MrBeige> #agreed   üáç€
+20:13:50 <MrBeige> #halp     üáç€
+20:13:50 <MrBeige> #accepted üáç€
+20:13:50 <MrBeige> #rejected üáç€
+
+
+20:13:50 <MrBeige> #item blah
+20:13:50 <MrBeige> #idea blah
+20:13:50 <MrBeige> #action blah
+20:13:50 <Utahraptor> #agreed blah
+
+# escapes
+20:13:50 <MrBeige> #topic Escapes
+20:13:50 <Utahraptor> #nick <b>
+20:13:50 <Utahraptor> #nick **
+20:13:50 <Utahraptor> #idea blah_ blah_ ReST link reference...
+20:13:50 <ReST1_> #idea blah blah blah
+20:13:50 <ReST2_> this is some text
+20:13:50 <ReST2_> #idea under_score
+20:13:50 <Re_ST> #idea under_score
+20:13:50 <Re_ST> #idea under1_1score
+20:13:50 <Re_ST> #idea under1_score
+20:13:50 <Re_ST> #idea under_1score
+20:13:50 <Re_ST> #idea under-_score
+20:13:50 <Re_ST> #idea under_-score
+
+# links
+20:13:50 <MrBeige> #topic Links
+20:13:50 <Utahraptor> #link http://test<b>.zgib.net
+20:13:50 <Utahraptor> #link http://test.zgib.net/&testpage
+
+# accents
+20:13:50 <MrBeige> #topic Character sets
+20:13:50 <Üţáhraptõr> Nick with accents.
+20:13:50 <Üţáhraptõr> #idea Nick with accents.
+
+# actions in actions
+# 
+
+20:13:52 <MrBeige> #endmeeting

=== added file 'tests/test-script-2.log.txt'
--- tests/test-script-2.log.txt	1970-01-01 00:00:00 +0000
+++ tests/test-script-2.log.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,49 @@
+#startmeeting
+this is a test line
+hi
+blah
+#topic play with chairs some
+#chair Hydroxide
+#chair h01ger
+#unchair Hydroxide
+#topic test action items
+something to say
+#action MrBeige does something
+#action h01ger and MrBeige do something else
+#action NickThatIsntHere does something
+#action MrGreen acts awesome
+#nick MrGreen
+#topic test other commands
+#info no I won't
+#idea blah
+#link http://www.debian.org
+http://www.debian.org
+/me says hi
+#topic try to cause some problems
+evil code to mess up html <b><i><u>
+#info evil code to mess up html <b><i><u>
+#nick
+#nick 
+#chair
+#chair 
+#unchair
+#info
+#info 
+#idea
+#idea 
+#topic test removing item from the minutes (nothing should be here)
+#info this shouldn't appear in the minutes
+#undo
+#topic    üñìcöde stuff
+#chair    üñìcöde
+#unchair  üñìcöde
+#info     üñìcöde
+#idea     üñìcöde
+#help     üñìcöde
+#action   üñìcöde
+#agreed   üñìcöde
+#accepted üñìcöde
+#rejected üñìcöde
+#endmeeting
+
+

=== added file 'tests/ukmeet.1.html'
--- tests/ukmeet.1.html	1970-01-01 00:00:00 +0000
+++ tests/ukmeet.1.html	2012-01-28 02:35:27 +0000
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+<title>#ukmeet: this meeting</title>
+<style type="text/css">
+/* This is for the .html in the HTML2 writer */
+body {
+    font-family: Helvetica, sans-serif;
+    font-size:14px;
+}
+h1 {
+    text-align: center;
+}
+a {
+    color:navy;
+    text-decoration: none;
+    border-bottom:1px dotted navy;
+}
+a:hover {
+    text-decoration:none;
+    border-bottom: 0;
+    color:#0000B9;
+}
+hr {
+    border: 1px solid #ccc;
+}
+/* The (nick, time) item pairs, and other body text things. */
+.details {
+    font-size: 12px;
+    font-weight:bold;
+}
+/* The 'AGREED:', 'IDEA', etc, prefix to lines. */
+.itemtype {
+    font-style: normal;    /* un-italics it */
+    font-weight: bold;
+}
+/* Example: change single item types.  Capitalized command name.
+/* .TOPIC  {  color:navy;  } */
+/* .AGREED {  color:lime;  } */
+
+</style>
+</head>
+
+<body>
+<h1>#ukmeet: this meeting</h1>
+<span class="details">
+Meeting started by daubers at 19:00:00 UTC
+(<a href="ukmeet.log.html">full logs</a>).</span>
+
+<br><br>
+
+
+
+<h3>Meeting summary</h3>
+<ol>
+<li><b class="TOPIC">Review of action items from last meeting</b> <span class="details">(<a href='ukmeet.log.html#l-18'>daubers</a>, 19:03:33)</span>
+<ol type="a">
+  <li><a
+    href="https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html";>https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html</a>
+    <span class="details">(<a href='ukmeet.log.html#l-28'>Daviey</a>,
+    19:05:30)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">People who
+    have achieved something in April, please place it in the
+    report</span> <span class="details">(<a
+    href='ukmeet.log.html#l-36'>daubers</a>, 19:07:11)</span></li>
+  <li><a
+    href="http://loco.ubuntu.com/events/team/51/detail/";>http://loco.ubuntu.com/events/team/51/detail/</a>
+    <span class="details">(<a href='ukmeet.log.html#l-45'>AlanBell</a>,
+    19:08:16)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Daubers to
+    either poke czajkowski to or get himself to send a mail to the -uk
+    list this evning about the geeknic in Liverpool</span> <span
+    class="details">(<a href='ukmeet.log.html#l-55'>daubers</a>,
+    19:12:34)</span></li>
+  <li><a
+    href="https://wiki.ubuntu.com/UKTeam/Support_Guidelines";>https://wiki.ubuntu.com/UKTeam/Support_Guidelines</a>
+    <span class="details">(<a href='ukmeet.log.html#l-58'>daubers</a>,
+    19:13:01)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">Daubers - Support Guidelines</b> <span class="details">(<a href='ukmeet.log.html#l-64'>daubers</a>, 19:13:59)</span>
+<ol type="a">
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Daubers to
+    write a tal for Oggcamp on the proposed support guidelines</span>
+    <span class="details">(<a href='ukmeet.log.html#l-83'>daubers</a>,
+    19:19:20)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Daubers to
+    send a mail to the list explaining the guidelines</span> <span
+    class="details">(<a href='ukmeet.log.html#l-115'>daubers</a>,
+    19:24:40)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Daubers to
+    organise a meeting following the trial</span> <span
+    class="details">(<a href='ukmeet.log.html#l-116'>daubers</a>,
+    19:24:52)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">TBA - OGGCamp related bits</b> <span class="details">(<a href='ukmeet.log.html#l-120'>daubers</a>, 19:25:21)</span>
+<ol type="a">
+  <li><a href="http://ideas.oggcamp.org/";>http://ideas.oggcamp.org/</a>
+    is a collection of bits of oggcamp info <span class="details">(<a
+    href='ukmeet.log.html#l-134'>AlanBell</a>, 19:27:41)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">TBA - UDS related bits</b> <span class="details">(<a href='ukmeet.log.html#l-148'>daubers</a>, 19:30:47)</span>
+<br></li>
+<li><b class="TOPIC">Any other business</b> <span class="details">(<a href='ukmeet.log.html#l-167'>daubers</a>, 19:34:38)</span>
+<br></li>
+<li><b class="TOPIC">Release Parties</b> <span class="details">(<a href='ukmeet.log.html#l-174'>daubers</a>, 19:35:21)</span>
+<ol type="a">
+  <li><a
+    href="http://www.evernote.com/pub/yamanickill/ubuntu";>http://www.evernote.com/pub/yamanickill/ubuntu</a>
+    <span class="details">(<a
+    href='ukmeet.log.html#l-193'>yamanickill_</a>, 19:37:48)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Anyone in the
+    vicinity of the Scottish Release Party to go, be sociable and enjoy
+    themselves while celebrating Lucid</span> <span class="details">(<a
+    href='ukmeet.log.html#l-194'>daubers</a>, 19:37:53)</span></li>
+  <li><a
+    href="http://loco.ubuntu.com/events/team/121/detail/";>http://loco.ubuntu.com/events/team/121/detail/</a>
+    <span class="details">(<a href='ukmeet.log.html#l-201'>AlanBell</a>,
+    19:38:34)</span></li>
+  <li><a
+    href="http://loco.ubuntu.com/events/team/120/detail/";>http://loco.ubuntu.com/events/team/120/detail/</a>
+    <span class="details">(<a href='ukmeet.log.html#l-241'>daubers</a>,
+    19:45:29)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">Any other Business</b> <span class="details">(<a href='ukmeet.log.html#l-251'>daubers</a>, 19:47:14)</span>
+<br></li>
+<li><b class="TOPIC">Date of next meeting</b> <span class="details">(<a href='ukmeet.log.html#l-276'>daubers</a>, 19:51:53)</span>
+<br></li>
+<li><b class="TOPIC">Next meeting 2nd of June danfish to chair</b> <span class="details">(<a href='ukmeet.log.html#l-333'>daubers</a>, 20:02:51)</span>
+</li>
+</ol>
+<br><br>
+
+
+
+<span class="details">
+Meeting ended at 20:03:00 UTC
+(<a href="ukmeet.log.html">full logs</a>).</span>
+
+<br><br>
+
+
+
+<h3>Action items</h3>
+<ol>
+  <li>People who have achieved something in April, please place it in the report</li>
+  <li>Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool</li>
+  <li>Daubers to write a tal for Oggcamp on the proposed support guidelines</li>
+  <li>Daubers to send a mail to the list explaining the guidelines</li>
+  <li>Daubers to organise a meeting following the trial</li>
+  <li>Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid</li>
+</ol>
+<br><br>
+
+
+
+<h3>People present (lines said)</h3>
+<ol>
+  <li>daubers (132)</li>
+  <li>brobostigon (57)</li>
+  <li>AlanBell (49)</li>
+  <li>yamanickill_ (32)</li>
+  <li>Daviey (17)</li>
+  <li>Yorvyk (11)</li>
+  <li>The_Toxic_Mite (9)</li>
+  <li>Azelphur (8)</li>
+  <li>BigRedS_ (4)</li>
+  <li>dutchie (4)</li>
+  <li>danfish (3)</li>
+  <li>freesitebuilder_ (2)</li>
+  <li>L0ki (2)</li>
+  <li>MunkyJunky (2)</li>
+  <li>TonyP (1)</li>
+  <li>funkyHat (1)</li>
+</ol>
+<br><br>
+
+
+
+<span class="details">Generated by <a href="http://wiki.ubuntu.com/AlanBell";>MeetBot</a> 0.1.4.</span>
+</body></html>

=== added file 'tests/ukmeet.html'
--- tests/ukmeet.html	1970-01-01 00:00:00 +0000
+++ tests/ukmeet.html	2012-01-28 02:35:27 +0000
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+<title>#ukmeet: this meeting</title>
+<style type="text/css">
+/* This is for the .html in the HTML2 writer */
+body {
+    font-family: Helvetica, sans-serif;
+    font-size:14px;
+}
+h1 {
+    text-align: center;
+}
+a {
+    color:navy;
+    text-decoration: none;
+    border-bottom:1px dotted navy;
+}
+a:hover {
+    text-decoration:none;
+    border-bottom: 0;
+    color:#0000B9;
+}
+hr {
+    border: 1px solid #ccc;
+}
+/* The (nick, time) item pairs, and other body text things. */
+.details {
+    font-size: 12px;
+    font-weight:bold;
+}
+/* The 'AGREED:', 'IDEA', etc, prefix to lines. */
+.itemtype {
+    font-style: normal;    /* un-italics it */
+    font-weight: bold;
+}
+/* Example: change single item types.  Capitalized command name.
+/* .TOPIC  {  color:navy;  } */
+/* .AGREED {  color:lime;  } */
+
+</style>
+</head>
+
+<body>
+<h1>#ukmeet: this meeting</h1>
+<span class="details">
+Meeting started by daubers at 19:00:00 UTC
+(<a href="ukmeet.log.html">full logs</a>).</span>
+
+<br><br>
+
+
+
+<h3>Meeting summary</h3>
+<ol>
+<li><b class="TOPIC">Review of action items from last meeting</b> <span class="details">(<a href='ukmeet.log.html#l-18'>daubers</a>, 19:03:33)</span>
+<ol type="a">
+  <li><a
+    href="https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html";>https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html</a>
+    <span class="details">(<a href='ukmeet.log.html#l-28'>Daviey</a>,
+    19:05:30)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">People who
+    have achieved something in April, please place it in the
+    report</span> <span class="details">(<a
+    href='ukmeet.log.html#l-36'>daubers</a>, 19:07:11)</span></li>
+  <li><a
+    href="http://loco.ubuntu.com/events/team/51/detail/";>http://loco.ubuntu.com/events/team/51/detail/</a>
+    <span class="details">(<a href='ukmeet.log.html#l-45'>AlanBell</a>,
+    19:08:16)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Daubers to
+    either poke czajkowski to or get himself to send a mail to the -uk
+    list this evning about the geeknic in Liverpool</span> <span
+    class="details">(<a href='ukmeet.log.html#l-55'>daubers</a>,
+    19:12:34)</span></li>
+  <li><a
+    href="https://wiki.ubuntu.com/UKTeam/Support_Guidelines";>https://wiki.ubuntu.com/UKTeam/Support_Guidelines</a>
+    <span class="details">(<a href='ukmeet.log.html#l-58'>daubers</a>,
+    19:13:01)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">Daubers - Support Guidelines</b> <span class="details">(<a href='ukmeet.log.html#l-64'>daubers</a>, 19:13:59)</span>
+<ol type="a">
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Daubers to
+    write a tal for Oggcamp on the proposed support guidelines</span>
+    <span class="details">(<a href='ukmeet.log.html#l-83'>daubers</a>,
+    19:19:20)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Daubers to
+    send a mail to the list explaining the guidelines</span> <span
+    class="details">(<a href='ukmeet.log.html#l-115'>daubers</a>,
+    19:24:40)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Daubers to
+    organise a meeting following the trial</span> <span
+    class="details">(<a href='ukmeet.log.html#l-116'>daubers</a>,
+    19:24:52)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">TBA - OGGCamp related bits</b> <span class="details">(<a href='ukmeet.log.html#l-120'>daubers</a>, 19:25:21)</span>
+<ol type="a">
+  <li><a href="http://ideas.oggcamp.org/";>http://ideas.oggcamp.org/</a>
+    is a collection of bits of oggcamp info <span class="details">(<a
+    href='ukmeet.log.html#l-134'>AlanBell</a>, 19:27:41)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">TBA - UDS related bits</b> <span class="details">(<a href='ukmeet.log.html#l-148'>daubers</a>, 19:30:47)</span>
+<br></li>
+<li><b class="TOPIC">Any other business</b> <span class="details">(<a href='ukmeet.log.html#l-167'>daubers</a>, 19:34:38)</span>
+<br></li>
+<li><b class="TOPIC">Release Parties</b> <span class="details">(<a href='ukmeet.log.html#l-174'>daubers</a>, 19:35:21)</span>
+<ol type="a">
+  <li><a
+    href="http://www.evernote.com/pub/yamanickill/ubuntu";>http://www.evernote.com/pub/yamanickill/ubuntu</a>
+    <span class="details">(<a
+    href='ukmeet.log.html#l-193'>yamanickill_</a>, 19:37:48)</span></li>
+  <li><i class="itemtype">ACTION</i>: <span class="ACTION">Anyone in the
+    vicinity of the Scottish Release Party to go, be sociable and enjoy
+    themselves while celebrating Lucid</span> <span class="details">(<a
+    href='ukmeet.log.html#l-194'>daubers</a>, 19:37:53)</span></li>
+  <li><a
+    href="http://loco.ubuntu.com/events/team/121/detail/";>http://loco.ubuntu.com/events/team/121/detail/</a>
+    <span class="details">(<a href='ukmeet.log.html#l-201'>AlanBell</a>,
+    19:38:34)</span></li>
+  <li><a
+    href="http://loco.ubuntu.com/events/team/120/detail/";>http://loco.ubuntu.com/events/team/120/detail/</a>
+    <span class="details">(<a href='ukmeet.log.html#l-241'>daubers</a>,
+    19:45:29)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">Any other Business</b> <span class="details">(<a href='ukmeet.log.html#l-251'>daubers</a>, 19:47:14)</span>
+<br></li>
+<li><b class="TOPIC">Date of next meeting</b> <span class="details">(<a href='ukmeet.log.html#l-276'>daubers</a>, 19:51:53)</span>
+<br></li>
+<li><b class="TOPIC">Next meeting 2nd of June danfish to chair</b> <span class="details">(<a href='ukmeet.log.html#l-333'>daubers</a>, 20:02:51)</span>
+</li>
+</ol>
+<br><br>
+
+
+
+<span class="details">
+Meeting ended at 20:03:00 UTC
+(<a href="ukmeet.log.html">full logs</a>).</span>
+
+<br><br>
+
+
+
+<h3>Action items</h3>
+<ol>
+  <li>People who have achieved something in April, please place it in the report</li>
+  <li>Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool</li>
+  <li>Daubers to write a tal for Oggcamp on the proposed support guidelines</li>
+  <li>Daubers to send a mail to the list explaining the guidelines</li>
+  <li>Daubers to organise a meeting following the trial</li>
+  <li>Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid</li>
+</ol>
+<br><br>
+
+
+
+<h3>People present (lines said)</h3>
+<ol>
+  <li>daubers (132)</li>
+  <li>brobostigon (57)</li>
+  <li>AlanBell (49)</li>
+  <li>yamanickill_ (32)</li>
+  <li>Daviey (17)</li>
+  <li>Yorvyk (11)</li>
+  <li>The_Toxic_Mite (9)</li>
+  <li>Azelphur (8)</li>
+  <li>BigRedS_ (4)</li>
+  <li>dutchie (4)</li>
+  <li>danfish (3)</li>
+  <li>freesitebuilder_ (2)</li>
+  <li>L0ki (2)</li>
+  <li>MunkyJunky (2)</li>
+  <li>TonyP (1)</li>
+  <li>funkyHat (1)</li>
+</ol>
+<br><br>
+
+
+
+<span class="details">Generated by <a href="http://wiki.ubuntu.com/AlanBell";>MeetBot</a> 0.1.4.</span>
+</body></html>

=== added file 'tests/ukmeet.log'
--- tests/ukmeet.log	1970-01-01 00:00:00 +0000
+++ tests/ukmeet.log	2012-01-28 02:35:27 +0000
@@ -0,0 +1,336 @@
+19:00:00 <daubers> #startmeeting
+19:00:00 <daubers> #meetingtopic this meeting
+19:01:41 <AlanBell> o/
+19:01:47 <dutchie> o/
+19:01:54 <brobostigon> o/
+19:01:55 <daubers> Apologies if I muck up commands, my lappy screen is a bit small for two sets of crib sheets
+19:02:06 <Yorvyk> o/
+19:02:32 <daubers> Anyone who's present say so please :)
+19:02:42 <brobostigon> present
+19:02:43 <MunkyJunky> present
+19:02:44 <BigRedS_> present
+19:02:47 <daubers> present
+19:02:58 <Yorvyk> present
+19:03:14 <freesitebuilder_> present
+19:03:16 <Azelphur> present
+19:03:21 <L0ki> present
+19:03:31 <daubers> ok
+19:03:33 <daubers> #ToPic Review of action items from last meeting
+19:03:40 <daubers> #subtopic Daviey to kick off team reporting and find interested parties to do regular reports
+19:03:44 <daubers> Daviey?
+19:04:18 <Daviey> \o
+19:04:30 <The_Toxic_Mite> oops, present
+19:04:37 <daubers> How goes said reporting?
+19:04:41 <Daviey> Ok, deadline for April is technically this Sunday
+19:04:58 <Daviey> I've today posted to the LoCo list
+19:05:06 <Daviey> asking people to add activities
+19:05:20 * brobostigon read it.
+19:05:30 <Daviey> https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html
+19:05:54 <Daviey> Essentially, it's a call for people to add anything they have achieved in April
+19:06:02 <Daviey> (or the LoCo)
+19:06:24 <Daviey> I'm going to poke a few people that i know have achieved stuff
+19:06:39 <Daviey> if people present could do that also, it would be grand
+19:06:48 <daubers> Excellent :)
+19:06:51 <brobostigon> willdo Daviey
+19:06:52 <brobostigon> :)
+19:07:11 <daubers> [ACTION] People who have achieved something in April, please place it in the report
+19:07:21 <brobostigon> :)
+19:07:26 <daubers> Shall we move on?
+19:07:27 <brobostigon> agreed.
+19:07:41 <daubers> [PROGRESS REPORT] AlanBell to find out what happened at the manchester jam
+19:07:45 <AlanBell> the manchester jam occured and seems to have gone well, MunkyJunky talked about it on the full circle podcast
+19:07:45 <Daviey> ta
+19:07:54 <Daviey> present btw :)
+19:08:05 <MunkyJunky> It did go well!
+19:08:16 <AlanBell> http://loco.ubuntu.com/events/team/51/detail/
+19:08:36 <daubers> Excellent, well done to those that organised it
+19:09:12 <daubers> Moving on?
+19:09:15 <AlanBell> yup
+19:09:18 <daubers> [PROGRESS REPORT] Daviey and czajkowski to do more publicity on the geeknic
+19:09:41 <daubers> Daviey?
+19:10:49 <daubers> czajkowski?
+19:11:05 <Daviey> no action from here.
+19:11:18 <brobostigon> she was talking about it in #ubuntu-uk not long ago.
+19:11:36 <daubers> Ok, can we someone volunteer to post to the mailing list?
+19:12:34 <daubers> [ACTION] Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool
+19:12:42 <daubers> Ok, next
+19:12:52 <daubers> [PROGRESS REPORT] daubers to put support guidelines in a wiki page prior to next meeting
+19:13:01 <daubers> https://wiki.ubuntu.com/UKTeam/Support_Guidelines
+19:13:07 <brobostigon> :)
+19:13:27 <brobostigon> iam happy with it, right now.
+19:13:29 <daubers> I've popped these on the wiki now, and (think) I dropped an email to the list.
+19:13:38 <daubers> I'll go further into this in a second
+19:13:45 <daubers> since thats the end of the last meetings actions
+19:13:59 <daubers> [TOPIC] Daubers - Support Guidelines
+19:14:04 <brobostigon> Do we need to do a review of those proposedguidelines?
+19:14:46 <daubers> As I said these are now on the wiki, an I believe I emailed the mailing list. Do people want time to review them further and me to push them a bit more, or how would people like to proceed?
+19:15:13 <brobostigon> i would like to be able to review them, please.
+19:15:47 <AlanBell> would be good to share them about at UDS
+19:15:53 <daubers> Ok, are there any major failings in the proposed guidelines?
+19:16:13 <brobostigon> daubers: not that i can immediatly remember, no.
+19:16:16 <daubers> AlanBell: Would you be happy to do that? I'm not going
+19:16:29 <daubers> Work, money and stuff are in the way
+19:16:33 <AlanBell> I see no failures, but they can probably be expanded on over time
+19:16:52 <AlanBell> yes I can try and talk to other teams about them at UDS
+19:16:56 <brobostigon> I would be happier with review before proper adoption.
+19:17:18 <daubers> Awesome, if anyone thinks it would help, I'm happy to do a session at oggcamp
+19:17:21 <brobostigon> and good scruteny.
+19:17:54 <Yorvyk> I think they need to bee used to see if they work
+19:18:03 <AlanBell> an oggcamp session would be great
+19:18:42 <daubers> So, if I do an oggcamp session and write up some bits, are we happy to do a trial implimentation as of next week and then a review afterwards?
+19:18:56 <AlanBell> I am
+19:18:57 <daubers> See if I can organise a meeting dedicated to that [TOPIC]
+19:19:20 <daubers> [ACTION] Daubers to write a tal for Oggcamp on the proposed support guidelines
+19:19:44 <daubers> Do we want to vote on a trial implimentation?
+19:19:44 <brobostigon> ok.
+19:19:57 <AlanBell> ok
+19:19:58 <brobostigon> after review,yes.
+19:20:00 <The_Toxic_Mite> ok
+19:20:21 <brobostigon> not before.
+19:20:58 <daubers> brobostigon: Not sure there's a lot to review initially. They're set out fairly plainly in the wiki page. There will be a lot of wiggle room in the trial as well
+19:21:36 <BigRedS_> I'd suggest a trial to find out what needs adding. I've had a skim and there appears to be vagueness rather than anything likely disagreeable
+19:21:37 <brobostigon> daubers: i mean, for any big issues, thats all, or any possible additions or changes.
+19:21:53 <daubers> brobostigon: I think a trial would be best to hilight that (personally)
+19:22:10 <daubers> If it all fails during the trial then obviously it'll get pulled and discussed further
+19:22:22 <brobostigon> daubers: true, but a "not firm trial" rather thandefinate firm trial.
+19:22:35 <daubers> Yes, as I said, wit a lot of wiggle room
+19:22:46 <brobostigon> ok,
+19:22:49 <AlanBell> more of a beta than a release candidate
+19:22:54 <brobostigon> i am happy.
+19:22:58 <daubers> [VOTE] Should we have a beta trial of the support guidelines, followed by a meeting to review them?
+19:23:06 <AlanBell> +1
+19:23:08 <daubers> +1
+19:23:08 <brobostigon> +1
+19:23:12 <BigRedS_> +1
+19:23:14 <Yorvyk> +1
+19:23:19 <freesitebuilder_> 0
+19:23:27 <Azelphur> -1
+19:23:33 <L0ki> +1
+19:23:47 <TonyP> +1
+19:23:54 <danfish> +1
+19:24:07 <The_Toxic_Mite> +1
+19:24:16 <daubers> Blimey, I think we can take that as a yes
+19:24:21 <daubers> [ENDVOTE]
+19:24:31 * brobostigon goes to make a copy of the guidelines,
+19:24:40 <daubers> [ACTION] Daubers to send a mail to the list explaining the guidelines
+19:24:52 <daubers> [Action] Daubers to organise a meeting following the trial
+19:25:00 <daubers> Everyone happy?
+19:25:04 <brobostigon> yes.
+19:25:12 <daubers> Ok, moving the train along :)
+19:25:21 <daubers> [TOPIC] TBA - OGGCamp related bits
+19:25:27 <Azelphur> hehe, I did 99.9% of stuff that was in the guidelines anyway :)
+19:25:31 <Yorvyk> Should the IRC channel be informed
+19:25:40 <daubers> Yorvyk: I'll do that as well
+19:25:50 <Yorvyk> ok
+19:25:53 <Daviey> daubers: Wikipage + url to [TOPIC]?
+19:25:54 <AlanBell> ok, so who is going to oggcamp?
+19:26:05 <Yorvyk> o/
+19:26:06 <dutchie> o/
+19:26:07 <AlanBell> o/
+19:26:17 <daubers> o/
+19:26:26 <daubers> Daviey: Yes please :)
+19:26:49 <daubers> sorry, I moved on a bit quick there
+19:27:21 <daubers> Would Daviey or anyone like to say a few words about oggcamp?
+19:27:41 <AlanBell> http://ideas.oggcamp.org/ is a collection of bits of oggcamp info
+19:28:00 <AlanBell> in particular look at the talks page
+19:28:42 <AlanBell> and there is of course the geeknic on Friday afternoon
+19:28:45 <yamanickill_> have i missed the meeting
+19:28:48 <yamanickill_> ahhh that'll be a no
+19:28:50 <yamanickill_> good
+19:28:58 <daubers> Anyone considering a talk, do it! :)
+19:28:59 <AlanBell> yamanickill_: still proceeding
+19:29:17 <daubers> Also, anyone I've not yet met, come say hello!
+19:29:22 <yamanickill_> AlanBell: cool thanks, sorry if i missed my section
+19:29:53 <daubers> Any other Oggcamp business people would like raised?
+19:30:24 <dutchie> go to oggcamp!
+19:30:32 <daubers> :) We'll move along then
+19:30:41 <daubers> Steaming through today
+19:30:47 <daubers> [TOPIC] TBA - UDS related bits
+19:31:05 <AlanBell> I am going to UDS
+19:31:11 <daubers> Anybody intending to attend UDS?
+19:31:18 <AlanBell> and I found out today I am doing crew for it too
+19:31:19 <The_Toxic_Mite> No
+19:31:37 <daubers> AlanBell: \o/ Crew is the best thing to do at these things
+19:31:44 <Yorvyk> I am in the vacinty that week so might pop in
+19:31:47 <AlanBell> popey and Daviey are going, amongst others
+19:31:54 <brobostigon> writing a blueprint thoygh
+19:32:25 <AlanBell> if there is anything that you want raised with the wider community then fill in blueprints or hassle people who are going
+19:32:30 <AlanBell> or both
+19:32:55 <daubers> If poeple want help finding who to hassle or with blueprints please ask in the channel
+19:33:08 <brobostigon> will do
+19:33:36 <daubers> AlanBell: Anything else you wanted to cover here?
+19:33:46 <AlanBell> no, don't think so
+19:33:50 <daubers> Ok
+19:33:51 <AlanBell> party on the Eurostar
+19:34:04 <daubers> Heh, just don't go starting any fires!
+19:34:35 <danfish> eggplant =! aubergine
+19:34:38 <daubers> [TOPIC] Any other business
+19:34:49 <daubers> Anyone like to raise something?
+19:34:52 <yamanickill_> want an update on scottish release party?
+19:35:06 <daubers> yamanickill_: Yes please!
+19:35:10 <daubers> I must have missed that
+19:35:12 <daubers> sorry :(
+19:35:15 <AlanBell> wasn't there a release parties [TOPIC]?
+19:35:21 <daubers> [TOPIC] Release Parties
+19:35:21 <yamanickill_> AlanBell: yeah, but i wasn't here
+19:35:30 <yamanickill_> i couldn't get onto irc
+19:35:42 <yamanickill_> the planning for this party is going pretty well. 1 week to go until the party
+19:35:55 * The_Toxic_Mite smacks his head
+19:36:07 <yamanickill_> we have almost everything organised. didn't get any sponsors for beer, so we are just gonna let people BYOB
+19:36:15 <yamanickill_> and everything is going good :-
+19:36:18 <yamanickill_> :-)
+19:36:21 <The_Toxic_Mite> yamanickill_: Where's the party going to be?
+19:36:26 <daubers> yamanickill_: Got a link for your release party info?
+19:36:31 * brobostigon sneaks in banbury
+19:36:37 <The_Toxic_Mite> brobostigon: ^_^
+19:36:44 <yamanickill_> The_Toxic_Mite: it is in the Strathclyde university union
+19:36:57 <yamanickill_> daubers: erm its on the release parties page, me thinks
+19:37:02 <yamanickill_> you mean detailed info?
+19:37:04 <AlanBell> release parties should be now added to the loco directory
+19:37:06 <The_Toxic_Mite> yamanickill_: Ah. Glasgow's fairly inconvenient for me, and given that I have exams on, I may not be allowed to come
+19:37:09 <daubers> yamanickill_: Yes please
+19:37:27 <yamanickill_> ok, well the only detailed info that is public is the info on my evernote...2 secs lemme get the link
+19:37:48 <yamanickill_> http://www.evernote.com/pub/yamanickill/ubuntu
+19:37:53 <daubers> [ACTION] Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid
+19:38:11 <daubers> Awesome :)
+19:38:20 <Daviey> +1
+19:38:21 <daubers> yamanickill_: Can you make sure a reminder goes to the -uk list?
+19:38:28 <AlanBell> ok, London party is tomorrow night
+19:38:31 <yamanickill_> daubers: yep, will do that
+19:38:31 <brobostigon> daubers: banbury also please.:)
+19:38:34 <AlanBell> http://loco.ubuntu.com/events/team/121/detail/
+19:38:36 * The_Toxic_Mite checks timetables on nationalrail.co.uk
+19:38:42 <daubers> action yamanickill to send a reminder to the list
+19:38:56 <daubers> brobostigon: Once AlanBell is done with London we'll come to you
+19:39:04 <brobostigon> :)
+19:39:16 <brobostigon> i am eating, so give me a shout.
+19:39:19 <daubers> Was the London one organised by Canonical again this time around?
+19:39:21 <AlanBell> so the London party is in a wine bar in Pall Mall
+19:39:30 <AlanBell> it is canonical organised, they sorted the venue
+19:39:57 <AlanBell> but we had some input into it and it should be a bit classier than before :-)
+19:40:08 <daubers> Excellent :)
+19:40:14 <AlanBell> not sure of the age limit
+19:40:48 <AlanBell> anyone under 21 and intending to go might want to give them a call and check first
+19:41:02 <funkyHat> If only I didn't have college the following morning, I might have caught the train down from Northampton
+19:41:14 <AlanBell> see you all tomorrow o/
+19:41:24 <daubers> Good good :)
+19:41:28 <daubers> So to Banbury
+19:41:30 <brobostigon> one sec.
+19:41:51 <daubers> action People attending the London launch part to enjoy themselves immensley
+19:41:58 <brobostigon> okies
+19:42:07 <Azelphur> ...or else?
+19:42:11 * BigRedS_ will do his best
+19:42:20 <daubers> brobostigon, over to you
+19:42:36 <brobostigon> saturday night, may 1st, olde reindeer inn, more social.
+19:42:48 <brobostigon> nothing to formal,
+19:42:57 <yamanickill_> daubers: aw...can the scottish launch party people not enjoy themselves?
+19:43:07 <daubers> yamanickill_: That was already actioned
+19:43:11 <brobostigon> also need to be of the right age, and dress responably smart/casual.
+19:43:21 <brobostigon> reasonably*
+19:43:33 <daubers> brobostigon: What's the age limit?
+19:43:33 <brobostigon> around 7:30pm start,
+19:43:40 <yamanickill_> daubers: ha, nothing about fun tho :-P
+19:43:44 <brobostigon> daubers: generally over 21.
+19:44:03 <daubers> Ok, and is there an event page?
+19:44:21 <brobostigon> daubers: on loco.ubuntu.com and onthe wiki. yes.
+19:44:39 <brobostigon> ido have the paghe infront of me,
+19:44:43 <brobostigon> dont*
+19:45:00 <daubers> ok, http://loco.ubuntu.com/events/team/120/detail/
+19:45:11 <daubers> Looks to be the one
+19:45:16 <brobostigon> thats it.
+19:45:29 <daubers> http://loco.ubuntu.com/events/team/120/detail/
+19:45:34 <daubers> Thank you Mr Bot
+19:45:43 <daubers> Ok, any other release parties?
+19:46:20 <daubers> action People attending Banbury release party to enjoy themselves
+19:46:26 <brobostigon> :)
+19:46:31 <Daviey> I have a bottle of port waiting for my personal release party :)
+19:46:38 <brobostigon> and good beer, :) as always,
+19:46:43 <daubers> Daviey: May I suggest some cheese with that?
+19:47:05 <Daviey> daubers: you may!
+19:47:08 <daubers> Ok :) Going back to AOB
+19:47:14 <daubers> [TOPIC] Any other Business
+19:47:36 <AlanBell> I just phoned the London venue, it is over 18
+19:47:39 <daubers> Anyone like to raise any issues?
+19:48:05 <dutchie> go to oggcamp!
+19:48:05 <brobostigon> generally over 18 is fine for banbury, aswell,
+19:48:20 <brobostigon> but over 21 is there as a rule for certain peole.
+19:48:41 <daubers> Okey dokey.
+19:48:54 <daubers> brobostigon: Can you drop a reminder to the -uk list too please?
+19:49:08 <daubers> for the banbury party
+19:49:14 <brobostigon> daubers: yes, :)
+19:49:16 <daubers> action
+19:49:33 <daubers> action brobostigon to send reminder to mailing list re: banbury release party
+19:49:43 <daubers> No more business?
+19:49:50 <brobostigon> not from here, no.
+19:50:14 <AlanBell> May 6th, don't forget to vote
+19:50:29 <daubers> Oh yes, everybody remember to vote on the 6th
+19:50:37 <brobostigon> :) always,
+19:50:40 <Azelphur> AlanBell: oh cool, is that when the election is?
+19:50:43 <daubers> Those who are eligable anyway
+19:51:04 <AlanBell> Azelphur: yes
+19:51:07 <Azelphur> i see
+19:51:19 <Azelphur> I registered at aboutmyvote.org but never received any papers yet
+19:51:38 <Azelphur> aboutmyvote.co.uk, rather
+19:51:47 <daubers> Ok, shall we organise the next meeting?
+19:51:47 <yamanickill_> ahh yes...the election
+19:51:53 <daubers> [TOPIC] Date of next meeting
+19:52:07 <yamanickill_> are we continuing on the 1st wed of each month?
+19:52:10 <yamanickill_> apart from today obv
+19:52:18 <AlanBell> I think so
+19:52:29 <yamanickill_> i'm happy with that. not so good with the last wed
+19:52:57 <daubers> Is it ok for me to organise an out of sequence meeting the following week to chase support guidelines? Or would people rather we have it run for 2 weeks
+19:53:07 <daubers> (though that would be 2 weeks)
+19:53:29 * AlanBell is confused
+19:53:42 * yamanickill_ is also confused
+19:53:46 <brobostigon> sothree insted of two?
+19:53:47 <daubers> The first wednesday of the month would be next week
+19:54:10 <AlanBell> ok, this meeting was brought forward a week to be in front of release and oggcamp
+19:54:18 <daubers> Ah, ok
+19:54:19 <brobostigon> true
+19:54:31 <AlanBell> the next meeting I was expecting would be July 7th
+19:54:35 <AlanBell> oops, no
+19:54:43 <AlanBell> June 2nd
+19:55:18 <AlanBell> so when do you want the support guidelines meeting?
+19:55:29 <brobostigon> as long as not, tuesday evening, i amhappy, i play chess tuesday evening.
+19:55:33 <daubers> I'd like to run that on the week containing the 14th
+19:56:05 <brobostigon> i am happy to go with everyone else on this one, i am very free.
+19:56:09 <daubers> Which lets it run for 2 weeks
+19:56:29 <AlanBell> UDS is the week containing the 14th
+19:56:35 <daubers> Ah, ok, so the following week
+19:56:47 <AlanBell> sounds good
+19:56:48 <yamanickill_> is there internet at uds? :-P
+19:56:59 <brobostigon> sounds fine here.
+19:57:19 <daubers> action Daubers to organise support meeting on the 19th of April
+19:57:39 <brobostigon> i am hppy.
+19:57:48 <daubers> Can we have a chair for the meeting on the 7th of July? (as that is a general meeting)
+19:58:10 <brobostigon> count me out, my internet is not reliable right now, consistently.
+19:58:14 <Yorvyk> April ??
+19:58:24 <AlanBell> danfish for chair?
+19:58:37 <daubers> sorry :( I'll correct that in the minutes, I meant may
+19:58:38 <yamanickill_> june...not july
+19:58:42 <daubers> and june
+19:58:47 <daubers> I'm rubbish at this!
+19:58:55 <yamanickill_> :-P
+19:59:06 <daubers> danfish: Would you like to volunteer?
+19:59:22 <daubers> or yamanickill_ ?
+19:59:32 <Yorvyk> 19 may is a tuesday
+19:59:56 <daubers> Yorvyk: It's a wednesday according to my calender
+20:00:20 <Daviey> We can leave it without a chair, and get a volunteer prior to the start of the next
+20:00:23 <Yorvyk> OK wring Year
+20:00:25 <yamanickill_> i'll go for it if someone tells me what to do. i've no iea what to do. this is the 2nd of june, yeah?
+20:00:53 <daubers> yamanickill_: 7th of june :)
+20:01:04 <daubers> according to AlanBell
+20:01:09 <danfish> yep, I'll voluteer - flattered!
+20:01:22 <yamanickill_> 7th is a friday...that was the july one wasn't it?
+20:01:31 <yamanickill_> wow this is confusing just now
+20:01:37 <daubers> yamanickill_: 7th is a monday
+20:01:38 <AlanBell> 2nd of June!
+20:01:42 <daubers> ok
+20:01:58 <daubers> Next meeting: 2nd of June
+20:02:08 <daubers> danfish or yamanickill_: Who'd like to do it?
+20:02:38 <yamanickill_> danfish: you go for it
+20:02:49 <yamanickill_> i'll take it some other time
+20:02:51 <daubers> [TOPIC] Next meeting 2nd of June danfish to chair
+20:03:00 <daubers> #endmeeting
+
+

=== added file 'tests/ukmeet.log.html'
--- tests/ukmeet.log.html	1970-01-01 00:00:00 +0000
+++ tests/ukmeet.log.html	2012-01-28 02:35:27 +0000
@@ -0,0 +1,361 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+<title>#ukmeet log</title>
+<style type="text/css">
+/* For the .log.html */
+pre { /*line-height: 125%;*/
+      white-space: pre-wrap; }
+body { background: #f0f0f0; }
+
+body .tm  { color: #007020 }                      /* time */
+body .nk  { color: #062873; font-weight: bold }   /* nick, regular */
+body .nka { color: #007020; font-weight: bold }  /* action nick */
+body .ac  { color: #00A000 }                      /* action line */
+body .hi  { color: #4070a0 }                 /* hilights */
+/* Things to make particular MeetBot commands stick out */
+body .topic     { color: #007020; font-weight: bold }
+body .topicline { color: #000080; font-weight: bold }
+body .cmd       { color: #007020; font-weight: bold }
+body .cmdline  { font-weight: bold }
+
+</style>
+</head>
+
+<body>
+<pre><a name="l-1"></a><span class="tm">19:00:00</span><span class="nk"> &lt;daubers&gt;</span> <span class="cmd">#startmeeting</span><span class="cmdline"></span>
+<a name="l-2"></a><span class="tm">19:00:00</span><span class="nk"> &lt;daubers&gt;</span> <span class="cmd">#meetingtopic </span><span class="cmdline">this meeting</span>
+<a name="l-3"></a><span class="tm">19:01:41</span><span class="nk"> &lt;AlanBell&gt;</span> o/
+<a name="l-4"></a><span class="tm">19:01:47</span><span class="nk"> &lt;dutchie&gt;</span> o/
+<a name="l-5"></a><span class="tm">19:01:54</span><span class="nk"> &lt;brobostigon&gt;</span> o/
+<a name="l-6"></a><span class="tm">19:01:55</span><span class="nk"> &lt;daubers&gt;</span> Apologies if I muck up commands, my lappy screen is a bit small for two sets of crib sheets
+<a name="l-7"></a><span class="tm">19:02:06</span><span class="nk"> &lt;Yorvyk&gt;</span> o/
+<a name="l-8"></a><span class="tm">19:02:32</span><span class="nk"> &lt;daubers&gt;</span> Anyone who's present say so please :)
+<a name="l-9"></a><span class="tm">19:02:42</span><span class="nk"> &lt;brobostigon&gt;</span> present
+<a name="l-10"></a><span class="tm">19:02:43</span><span class="nk"> &lt;MunkyJunky&gt;</span> present
+<a name="l-11"></a><span class="tm">19:02:44</span><span class="nk"> &lt;BigRedS_&gt;</span> present
+<a name="l-12"></a><span class="tm">19:02:47</span><span class="nk"> &lt;daubers&gt;</span> present
+<a name="l-13"></a><span class="tm">19:02:58</span><span class="nk"> &lt;Yorvyk&gt;</span> present
+<a name="l-14"></a><span class="tm">19:03:14</span><span class="nk"> &lt;freesitebuilder_&gt;</span> present
+<a name="l-15"></a><span class="tm">19:03:16</span><span class="nk"> &lt;Azelphur&gt;</span> present
+<a name="l-16"></a><span class="tm">19:03:21</span><span class="nk"> &lt;L0ki&gt;</span> present
+<a name="l-17"></a><span class="tm">19:03:31</span><span class="nk"> &lt;daubers&gt;</span> ok
+<a name="l-18"></a><span class="tm">19:03:33</span><span class="nk"> &lt;daubers&gt;</span> <span class="cmd">#ToPic </span><span class="cmdline">Review of action items from last meeting</span>
+<a name="l-19"></a><span class="tm">19:03:40</span><span class="nk"> &lt;daubers&gt;</span> <span class="cmd">#subtopic </span><span class="cmdline">Daviey to kick off team reporting and find interested parties to do regular reports</span>
+<a name="l-20"></a><span class="tm">19:03:44</span><span class="nk"> &lt;daubers&gt;</span> Daviey?
+<a name="l-21"></a><span class="tm">19:04:18</span><span class="nk"> &lt;Daviey&gt;</span> \o
+<a name="l-22"></a><span class="tm">19:04:30</span><span class="nk"> &lt;The_Toxic_Mite&gt;</span> oops, present
+<a name="l-23"></a><span class="tm">19:04:37</span><span class="nk"> &lt;daubers&gt;</span> How goes said reporting?
+<a name="l-24"></a><span class="tm">19:04:41</span><span class="nk"> &lt;Daviey&gt;</span> Ok, deadline for April is technically this Sunday
+<a name="l-25"></a><span class="tm">19:04:58</span><span class="nk"> &lt;Daviey&gt;</span> I've today posted to the LoCo list
+<a name="l-26"></a><span class="tm">19:05:06</span><span class="nk"> &lt;Daviey&gt;</span> asking people to add activities
+<a name="l-27"></a><span class="tm">19:05:20 </span><span class="nka">* brobostigon</span> <span class="ac">read it.</span>
+<a name="l-28"></a><span class="tm">19:05:30</span><span class="nk"> &lt;Daviey&gt;</span> https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html
+<a name="l-29"></a><span class="tm">19:05:54</span><span class="nk"> &lt;Daviey&gt;</span> Essentially, it's a call for people to add anything they have achieved in April
+<a name="l-30"></a><span class="tm">19:06:02</span><span class="nk"> &lt;Daviey&gt;</span> (or the LoCo)
+<a name="l-31"></a><span class="tm">19:06:24</span><span class="nk"> &lt;Daviey&gt;</span> I'm going to poke a few people that i know have achieved stuff
+<a name="l-32"></a><span class="tm">19:06:39</span><span class="nk"> &lt;Daviey&gt;</span> if people present could do that also, it would be grand
+<a name="l-33"></a><span class="tm">19:06:48</span><span class="nk"> &lt;daubers&gt;</span> Excellent :)
+<a name="l-34"></a><span class="tm">19:06:51</span><span class="nk"> &lt;brobostigon&gt;</span> willdo Daviey
+<a name="l-35"></a><span class="tm">19:06:52</span><span class="nk"> &lt;brobostigon&gt;</span> :)
+<a name="l-36"></a><span class="tm">19:07:11</span><span class="nk"> &lt;daubers&gt;</span> [ACTION] People who have achieved something in April, please place it in the report
+<a name="l-37"></a><span class="tm">19:07:21</span><span class="nk"> &lt;brobostigon&gt;</span> :)
+<a name="l-38"></a><span class="tm">19:07:26</span><span class="nk"> &lt;daubers&gt;</span> Shall we move on?
+<a name="l-39"></a><span class="tm">19:07:27</span><span class="nk"> &lt;brobostigon&gt;</span> agreed.
+<a name="l-40"></a><span class="tm">19:07:41</span><span class="nk"> &lt;daubers&gt;</span> [PROGRESS REPORT] AlanBell to find out what happened at the manchester jam
+<a name="l-41"></a><span class="tm">19:07:45</span><span class="nk"> &lt;AlanBell&gt;</span> the manchester jam occured and seems to have gone well, MunkyJunky talked about it on the full circle podcast
+<a name="l-42"></a><span class="tm">19:07:45</span><span class="nk"> &lt;Daviey&gt;</span> ta
+<a name="l-43"></a><span class="tm">19:07:54</span><span class="nk"> &lt;Daviey&gt;</span> present btw :)
+<a name="l-44"></a><span class="tm">19:08:05</span><span class="nk"> &lt;MunkyJunky&gt;</span> It did go well!
+<a name="l-45"></a><span class="tm">19:08:16</span><span class="nk"> &lt;AlanBell&gt;</span> http://loco.ubuntu.com/events/team/51/detail/
+<a name="l-46"></a><span class="tm">19:08:36</span><span class="nk"> &lt;daubers&gt;</span> Excellent, well done to those that organised it
+<a name="l-47"></a><span class="tm">19:09:12</span><span class="nk"> &lt;daubers&gt;</span> Moving on?
+<a name="l-48"></a><span class="tm">19:09:15</span><span class="nk"> &lt;AlanBell&gt;</span> yup
+<a name="l-49"></a><span class="tm">19:09:18</span><span class="nk"> &lt;daubers&gt;</span> [PROGRESS REPORT] Daviey and czajkowski to do more publicity on the geeknic
+<a name="l-50"></a><span class="tm">19:09:41</span><span class="nk"> &lt;daubers&gt;</span> Daviey?
+<a name="l-51"></a><span class="tm">19:10:49</span><span class="nk"> &lt;daubers&gt;</span> czajkowski?
+<a name="l-52"></a><span class="tm">19:11:05</span><span class="nk"> &lt;Daviey&gt;</span> no action from here.
+<a name="l-53"></a><span class="tm">19:11:18</span><span class="nk"> &lt;brobostigon&gt;</span> she was talking about it in #ubuntu-uk not long ago.
+<a name="l-54"></a><span class="tm">19:11:36</span><span class="nk"> &lt;daubers&gt;</span> Ok, can we someone volunteer to post to the mailing list?
+<a name="l-55"></a><span class="tm">19:12:34</span><span class="nk"> &lt;daubers&gt;</span> [ACTION] Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool
+<a name="l-56"></a><span class="tm">19:12:42</span><span class="nk"> &lt;daubers&gt;</span> Ok, next
+<a name="l-57"></a><span class="tm">19:12:52</span><span class="nk"> &lt;daubers&gt;</span> [PROGRESS REPORT] daubers to put support guidelines in a wiki page prior to next meeting
+<a name="l-58"></a><span class="tm">19:13:01</span><span class="nk"> &lt;daubers&gt;</span> https://wiki.ubuntu.com/UKTeam/Support_Guidelines
+<a name="l-59"></a><span class="tm">19:13:07</span><span class="nk"> &lt;brobostigon&gt;</span> :)
+<a name="l-60"></a><span class="tm">19:13:27</span><span class="nk"> &lt;brobostigon&gt;</span> iam happy with it, right now.
+<a name="l-61"></a><span class="tm">19:13:29</span><span class="nk"> &lt;daubers&gt;</span> I've popped these on the wiki now, and (think) I dropped an email to the list.
+<a name="l-62"></a><span class="tm">19:13:38</span><span class="nk"> &lt;daubers&gt;</span> I'll go further into this in a second
+<a name="l-63"></a><span class="tm">19:13:45</span><span class="nk"> &lt;daubers&gt;</span> since thats the end of the last meetings actions
+<a name="l-64"></a><span class="tm">19:13:59</span><span class="nk"> &lt;daubers&gt;</span> [TOPIC] Daubers - Support Guidelines
+<a name="l-65"></a><span class="tm">19:14:04</span><span class="nk"> &lt;brobostigon&gt;</span> Do we need to do a review of those proposedguidelines?
+<a name="l-66"></a><span class="tm">19:14:46</span><span class="nk"> &lt;daubers&gt;</span> As I said these are now on the wiki, an I believe I emailed the mailing list. Do people want time to review them further and me to push them a bit more, or how would people like to proceed?
+<a name="l-67"></a><span class="tm">19:15:13</span><span class="nk"> &lt;brobostigon&gt;</span> i would like to be able to review them, please.
+<a name="l-68"></a><span class="tm">19:15:47</span><span class="nk"> &lt;AlanBell&gt;</span> would be good to share them about at UDS
+<a name="l-69"></a><span class="tm">19:15:53</span><span class="nk"> &lt;daubers&gt;</span> Ok, are there any major failings in the proposed guidelines?
+<a name="l-70"></a><span class="tm">19:16:13</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">daubers:</span> not that i can immediatly remember, no.
+<a name="l-71"></a><span class="tm">19:16:16</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">AlanBell:</span> Would you be happy to do that? I'm not going
+<a name="l-72"></a><span class="tm">19:16:29</span><span class="nk"> &lt;daubers&gt;</span> Work, money and stuff are in the way
+<a name="l-73"></a><span class="tm">19:16:33</span><span class="nk"> &lt;AlanBell&gt;</span> I see no failures, but they can probably be expanded on over time
+<a name="l-74"></a><span class="tm">19:16:52</span><span class="nk"> &lt;AlanBell&gt;</span> yes I can try and talk to other teams about them at UDS
+<a name="l-75"></a><span class="tm">19:16:56</span><span class="nk"> &lt;brobostigon&gt;</span> I would be happier with review before proper adoption.
+<a name="l-76"></a><span class="tm">19:17:18</span><span class="nk"> &lt;daubers&gt;</span> Awesome, if anyone thinks it would help, I'm happy to do a session at oggcamp
+<a name="l-77"></a><span class="tm">19:17:21</span><span class="nk"> &lt;brobostigon&gt;</span> and good scruteny.
+<a name="l-78"></a><span class="tm">19:17:54</span><span class="nk"> &lt;Yorvyk&gt;</span> I think they need to bee used to see if they work
+<a name="l-79"></a><span class="tm">19:18:03</span><span class="nk"> &lt;AlanBell&gt;</span> an oggcamp session would be great
+<a name="l-80"></a><span class="tm">19:18:42</span><span class="nk"> &lt;daubers&gt;</span> So, if I do an oggcamp session and write up some bits, are we happy to do a trial implimentation as of next week and then a review afterwards?
+<a name="l-81"></a><span class="tm">19:18:56</span><span class="nk"> &lt;AlanBell&gt;</span> I am
+<a name="l-82"></a><span class="tm">19:18:57</span><span class="nk"> &lt;daubers&gt;</span> See if I can organise a meeting dedicated to that [TOPIC]
+<a name="l-83"></a><span class="tm">19:19:20</span><span class="nk"> &lt;daubers&gt;</span> [ACTION] Daubers to write a tal for Oggcamp on the proposed support guidelines
+<a name="l-84"></a><span class="tm">19:19:44</span><span class="nk"> &lt;daubers&gt;</span> Do we want to vote on a trial implimentation?
+<a name="l-85"></a><span class="tm">19:19:44</span><span class="nk"> &lt;brobostigon&gt;</span> ok.
+<a name="l-86"></a><span class="tm">19:19:57</span><span class="nk"> &lt;AlanBell&gt;</span> ok
+<a name="l-87"></a><span class="tm">19:19:58</span><span class="nk"> &lt;brobostigon&gt;</span> after review,yes.
+<a name="l-88"></a><span class="tm">19:20:00</span><span class="nk"> &lt;The_Toxic_Mite&gt;</span> ok
+<a name="l-89"></a><span class="tm">19:20:21</span><span class="nk"> &lt;brobostigon&gt;</span> not before.
+<a name="l-90"></a><span class="tm">19:20:58</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">brobostigon:</span> Not sure there's a lot to review initially. They're set out fairly plainly in the wiki page. There will be a lot of wiggle room in the trial as well
+<a name="l-91"></a><span class="tm">19:21:36</span><span class="nk"> &lt;BigRedS_&gt;</span> I'd suggest a trial to find out what needs adding. I've had a skim and there appears to be vagueness rather than anything likely disagreeable
+<a name="l-92"></a><span class="tm">19:21:37</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">daubers:</span> i mean, for any big issues, thats all, or any possible additions or changes.
+<a name="l-93"></a><span class="tm">19:21:53</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">brobostigon:</span> I think a trial would be best to hilight that (personally)
+<a name="l-94"></a><span class="tm">19:22:10</span><span class="nk"> &lt;daubers&gt;</span> If it all fails during the trial then obviously it'll get pulled and discussed further
+<a name="l-95"></a><span class="tm">19:22:22</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">daubers:</span> true, but a "not firm trial" rather thandefinate firm trial.
+<a name="l-96"></a><span class="tm">19:22:35</span><span class="nk"> &lt;daubers&gt;</span> Yes, as I said, wit a lot of wiggle room
+<a name="l-97"></a><span class="tm">19:22:46</span><span class="nk"> &lt;brobostigon&gt;</span> ok,
+<a name="l-98"></a><span class="tm">19:22:49</span><span class="nk"> &lt;AlanBell&gt;</span> more of a beta than a release candidate
+<a name="l-99"></a><span class="tm">19:22:54</span><span class="nk"> &lt;brobostigon&gt;</span> i am happy.
+<a name="l-100"></a><span class="tm">19:22:58</span><span class="nk"> &lt;daubers&gt;</span> [VOTE] Should we have a beta trial of the support guidelines, followed by a meeting to review them?
+<a name="l-101"></a><span class="tm">19:23:06</span><span class="nk"> &lt;AlanBell&gt;</span> +1
+<a name="l-102"></a><span class="tm">19:23:08</span><span class="nk"> &lt;daubers&gt;</span> +1
+<a name="l-103"></a><span class="tm">19:23:08</span><span class="nk"> &lt;brobostigon&gt;</span> +1
+<a name="l-104"></a><span class="tm">19:23:12</span><span class="nk"> &lt;BigRedS_&gt;</span> +1
+<a name="l-105"></a><span class="tm">19:23:14</span><span class="nk"> &lt;Yorvyk&gt;</span> +1
+<a name="l-106"></a><span class="tm">19:23:19</span><span class="nk"> &lt;freesitebuilder_&gt;</span> 0
+<a name="l-107"></a><span class="tm">19:23:27</span><span class="nk"> &lt;Azelphur&gt;</span> -1
+<a name="l-108"></a><span class="tm">19:23:33</span><span class="nk"> &lt;L0ki&gt;</span> +1
+<a name="l-109"></a><span class="tm">19:23:47</span><span class="nk"> &lt;TonyP&gt;</span> +1
+<a name="l-110"></a><span class="tm">19:23:54</span><span class="nk"> &lt;danfish&gt;</span> +1
+<a name="l-111"></a><span class="tm">19:24:07</span><span class="nk"> &lt;The_Toxic_Mite&gt;</span> +1
+<a name="l-112"></a><span class="tm">19:24:16</span><span class="nk"> &lt;daubers&gt;</span> Blimey, I think we can take that as a yes
+<a name="l-113"></a><span class="tm">19:24:21</span><span class="nk"> &lt;daubers&gt;</span> [ENDVOTE]
+<a name="l-114"></a><span class="tm">19:24:31 </span><span class="nka">* brobostigon</span> <span class="ac">goes to make a copy of the guidelines,</span>
+<a name="l-115"></a><span class="tm">19:24:40</span><span class="nk"> &lt;daubers&gt;</span> [ACTION] Daubers to send a mail to the list explaining the guidelines
+<a name="l-116"></a><span class="tm">19:24:52</span><span class="nk"> &lt;daubers&gt;</span> [Action] Daubers to organise a meeting following the trial
+<a name="l-117"></a><span class="tm">19:25:00</span><span class="nk"> &lt;daubers&gt;</span> Everyone happy?
+<a name="l-118"></a><span class="tm">19:25:04</span><span class="nk"> &lt;brobostigon&gt;</span> yes.
+<a name="l-119"></a><span class="tm">19:25:12</span><span class="nk"> &lt;daubers&gt;</span> Ok, moving the train along :)
+<a name="l-120"></a><span class="tm">19:25:21</span><span class="nk"> &lt;daubers&gt;</span> [TOPIC] TBA - OGGCamp related bits
+<a name="l-121"></a><span class="tm">19:25:27</span><span class="nk"> &lt;Azelphur&gt;</span> hehe, I did 99.9% of stuff that was in the guidelines anyway :)
+<a name="l-122"></a><span class="tm">19:25:31</span><span class="nk"> &lt;Yorvyk&gt;</span> Should the IRC channel be informed
+<a name="l-123"></a><span class="tm">19:25:40</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">Yorvyk:</span> I'll do that as well
+<a name="l-124"></a><span class="tm">19:25:50</span><span class="nk"> &lt;Yorvyk&gt;</span> ok
+<a name="l-125"></a><span class="tm">19:25:53</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">daubers:</span> Wikipage + url to [TOPIC]?
+<a name="l-126"></a><span class="tm">19:25:54</span><span class="nk"> &lt;AlanBell&gt;</span> ok, so who is going to oggcamp?
+<a name="l-127"></a><span class="tm">19:26:05</span><span class="nk"> &lt;Yorvyk&gt;</span> o/
+<a name="l-128"></a><span class="tm">19:26:06</span><span class="nk"> &lt;dutchie&gt;</span> o/
+<a name="l-129"></a><span class="tm">19:26:07</span><span class="nk"> &lt;AlanBell&gt;</span> o/
+<a name="l-130"></a><span class="tm">19:26:17</span><span class="nk"> &lt;daubers&gt;</span> o/
+<a name="l-131"></a><span class="tm">19:26:26</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">Daviey:</span> Yes please :)
+<a name="l-132"></a><span class="tm">19:26:49</span><span class="nk"> &lt;daubers&gt;</span> sorry, I moved on a bit quick there
+<a name="l-133"></a><span class="tm">19:27:21</span><span class="nk"> &lt;daubers&gt;</span> Would Daviey or anyone like to say a few words about oggcamp?
+<a name="l-134"></a><span class="tm">19:27:41</span><span class="nk"> &lt;AlanBell&gt;</span> http://ideas.oggcamp.org/ is a collection of bits of oggcamp info
+<a name="l-135"></a><span class="tm">19:28:00</span><span class="nk"> &lt;AlanBell&gt;</span> in particular look at the talks page
+<a name="l-136"></a><span class="tm">19:28:42</span><span class="nk"> &lt;AlanBell&gt;</span> and there is of course the geeknic on Friday afternoon
+<a name="l-137"></a><span class="tm">19:28:45</span><span class="nk"> &lt;yamanickill_&gt;</span> have i missed the meeting
+<a name="l-138"></a><span class="tm">19:28:48</span><span class="nk"> &lt;yamanickill_&gt;</span> ahhh that'll be a no
+<a name="l-139"></a><span class="tm">19:28:50</span><span class="nk"> &lt;yamanickill_&gt;</span> good
+<a name="l-140"></a><span class="tm">19:28:58</span><span class="nk"> &lt;daubers&gt;</span> Anyone considering a talk, do it! :)
+<a name="l-141"></a><span class="tm">19:28:59</span><span class="nk"> &lt;AlanBell&gt;</span> <span class="hi">yamanickill_:</span> still proceeding
+<a name="l-142"></a><span class="tm">19:29:17</span><span class="nk"> &lt;daubers&gt;</span> Also, anyone I've not yet met, come say hello!
+<a name="l-143"></a><span class="tm">19:29:22</span><span class="nk"> &lt;yamanickill_&gt;</span> <span class="hi">AlanBell:</span> cool thanks, sorry if i missed my section
+<a name="l-144"></a><span class="tm">19:29:53</span><span class="nk"> &lt;daubers&gt;</span> Any other Oggcamp business people would like raised?
+<a name="l-145"></a><span class="tm">19:30:24</span><span class="nk"> &lt;dutchie&gt;</span> go to oggcamp!
+<a name="l-146"></a><span class="tm">19:30:32</span><span class="nk"> &lt;daubers&gt;</span> :) We'll move along then
+<a name="l-147"></a><span class="tm">19:30:41</span><span class="nk"> &lt;daubers&gt;</span> Steaming through today
+<a name="l-148"></a><span class="tm">19:30:47</span><span class="nk"> &lt;daubers&gt;</span> [TOPIC] TBA - UDS related bits
+<a name="l-149"></a><span class="tm">19:31:05</span><span class="nk"> &lt;AlanBell&gt;</span> I am going to UDS
+<a name="l-150"></a><span class="tm">19:31:11</span><span class="nk"> &lt;daubers&gt;</span> Anybody intending to attend UDS?
+<a name="l-151"></a><span class="tm">19:31:18</span><span class="nk"> &lt;AlanBell&gt;</span> and I found out today I am doing crew for it too
+<a name="l-152"></a><span class="tm">19:31:19</span><span class="nk"> &lt;The_Toxic_Mite&gt;</span> No
+<a name="l-153"></a><span class="tm">19:31:37</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">AlanBell:</span> \o/ Crew is the best thing to do at these things
+<a name="l-154"></a><span class="tm">19:31:44</span><span class="nk"> &lt;Yorvyk&gt;</span> I am in the vacinty that week so might pop in
+<a name="l-155"></a><span class="tm">19:31:47</span><span class="nk"> &lt;AlanBell&gt;</span> popey and Daviey are going, amongst others
+<a name="l-156"></a><span class="tm">19:31:54</span><span class="nk"> &lt;brobostigon&gt;</span> writing a blueprint thoygh
+<a name="l-157"></a><span class="tm">19:32:25</span><span class="nk"> &lt;AlanBell&gt;</span> if there is anything that you want raised with the wider community then fill in blueprints or hassle people who are going
+<a name="l-158"></a><span class="tm">19:32:30</span><span class="nk"> &lt;AlanBell&gt;</span> or both
+<a name="l-159"></a><span class="tm">19:32:55</span><span class="nk"> &lt;daubers&gt;</span> If poeple want help finding who to hassle or with blueprints please ask in the channel
+<a name="l-160"></a><span class="tm">19:33:08</span><span class="nk"> &lt;brobostigon&gt;</span> will do
+<a name="l-161"></a><span class="tm">19:33:36</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">AlanBell:</span> Anything else you wanted to cover here?
+<a name="l-162"></a><span class="tm">19:33:46</span><span class="nk"> &lt;AlanBell&gt;</span> no, don't think so
+<a name="l-163"></a><span class="tm">19:33:50</span><span class="nk"> &lt;daubers&gt;</span> Ok
+<a name="l-164"></a><span class="tm">19:33:51</span><span class="nk"> &lt;AlanBell&gt;</span> party on the Eurostar
+<a name="l-165"></a><span class="tm">19:34:04</span><span class="nk"> &lt;daubers&gt;</span> Heh, just don't go starting any fires!
+<a name="l-166"></a><span class="tm">19:34:35</span><span class="nk"> &lt;danfish&gt;</span> eggplant =! aubergine
+<a name="l-167"></a><span class="tm">19:34:38</span><span class="nk"> &lt;daubers&gt;</span> [TOPIC] Any other business
+<a name="l-168"></a><span class="tm">19:34:49</span><span class="nk"> &lt;daubers&gt;</span> Anyone like to raise something?
+<a name="l-169"></a><span class="tm">19:34:52</span><span class="nk"> &lt;yamanickill_&gt;</span> want an update on scottish release party?
+<a name="l-170"></a><span class="tm">19:35:06</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">yamanickill_:</span> Yes please!
+<a name="l-171"></a><span class="tm">19:35:10</span><span class="nk"> &lt;daubers&gt;</span> I must have missed that
+<a name="l-172"></a><span class="tm">19:35:12</span><span class="nk"> &lt;daubers&gt;</span> sorry :(
+<a name="l-173"></a><span class="tm">19:35:15</span><span class="nk"> &lt;AlanBell&gt;</span> wasn't there a release parties [TOPIC]?
+<a name="l-174"></a><span class="tm">19:35:21</span><span class="nk"> &lt;daubers&gt;</span> [TOPIC] Release Parties
+<a name="l-175"></a><span class="tm">19:35:21</span><span class="nk"> &lt;yamanickill_&gt;</span> <span class="hi">AlanBell:</span> yeah, but i wasn't here
+<a name="l-176"></a><span class="tm">19:35:30</span><span class="nk"> &lt;yamanickill_&gt;</span> i couldn't get onto irc
+<a name="l-177"></a><span class="tm">19:35:42</span><span class="nk"> &lt;yamanickill_&gt;</span> the planning for this party is going pretty well. 1 week to go until the party
+<a name="l-178"></a><span class="tm">19:35:55 </span><span class="nka">* The_Toxic_Mite</span> <span class="ac">smacks his head</span>
+<a name="l-179"></a><span class="tm">19:36:07</span><span class="nk"> &lt;yamanickill_&gt;</span> we have almost everything organised. didn't get any sponsors for beer, so we are just gonna let people BYOB
+<a name="l-180"></a><span class="tm">19:36:15</span><span class="nk"> &lt;yamanickill_&gt;</span> and everything is going good :-
+<a name="l-181"></a><span class="tm">19:36:18</span><span class="nk"> &lt;yamanickill_&gt;</span> :-)
+<a name="l-182"></a><span class="tm">19:36:21</span><span class="nk"> &lt;The_Toxic_Mite&gt;</span> <span class="hi">yamanickill_:</span> Where's the party going to be?
+<a name="l-183"></a><span class="tm">19:36:26</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">yamanickill_:</span> Got a link for your release party info?
+<a name="l-184"></a><span class="tm">19:36:31 </span><span class="nka">* brobostigon</span> <span class="ac">sneaks in banbury</span>
+<a name="l-185"></a><span class="tm">19:36:37</span><span class="nk"> &lt;The_Toxic_Mite&gt;</span> <span class="hi">brobostigon:</span> ^_^
+<a name="l-186"></a><span class="tm">19:36:44</span><span class="nk"> &lt;yamanickill_&gt;</span> <span class="hi">The_Toxic_Mite:</span> it is in the Strathclyde university union
+<a name="l-187"></a><span class="tm">19:36:57</span><span class="nk"> &lt;yamanickill_&gt;</span> <span class="hi">daubers:</span> erm its on the release parties page, me thinks
+<a name="l-188"></a><span class="tm">19:37:02</span><span class="nk"> &lt;yamanickill_&gt;</span> you mean detailed info?
+<a name="l-189"></a><span class="tm">19:37:04</span><span class="nk"> &lt;AlanBell&gt;</span> release parties should be now added to the loco directory
+<a name="l-190"></a><span class="tm">19:37:06</span><span class="nk"> &lt;The_Toxic_Mite&gt;</span> <span class="hi">yamanickill_:</span> Ah. Glasgow's fairly inconvenient for me, and given that I have exams on, I may not be allowed to come
+<a name="l-191"></a><span class="tm">19:37:09</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">yamanickill_:</span> Yes please
+<a name="l-192"></a><span class="tm">19:37:27</span><span class="nk"> &lt;yamanickill_&gt;</span> ok, well the only detailed info that is public is the info on my evernote...2 secs lemme get the link
+<a name="l-193"></a><span class="tm">19:37:48</span><span class="nk"> &lt;yamanickill_&gt;</span> http://www.evernote.com/pub/yamanickill/ubuntu
+<a name="l-194"></a><span class="tm">19:37:53</span><span class="nk"> &lt;daubers&gt;</span> [ACTION] Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid
+<a name="l-195"></a><span class="tm">19:38:11</span><span class="nk"> &lt;daubers&gt;</span> Awesome :)
+<a name="l-196"></a><span class="tm">19:38:20</span><span class="nk"> &lt;Daviey&gt;</span> +1
+<a name="l-197"></a><span class="tm">19:38:21</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">yamanickill_:</span> Can you make sure a reminder goes to the -uk list?
+<a name="l-198"></a><span class="tm">19:38:28</span><span class="nk"> &lt;AlanBell&gt;</span> ok, London party is tomorrow night
+<a name="l-199"></a><span class="tm">19:38:31</span><span class="nk"> &lt;yamanickill_&gt;</span> <span class="hi">daubers:</span> yep, will do that
+<a name="l-200"></a><span class="tm">19:38:31</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">daubers:</span> banbury also please.:)
+<a name="l-201"></a><span class="tm">19:38:34</span><span class="nk"> &lt;AlanBell&gt;</span> http://loco.ubuntu.com/events/team/121/detail/
+<a name="l-202"></a><span class="tm">19:38:36 </span><span class="nka">* The_Toxic_Mite</span> <span class="ac">checks timetables on nationalrail.co.uk</span>
+<a name="l-203"></a><span class="tm">19:38:42</span><span class="nk"> &lt;daubers&gt;</span> action yamanickill to send a reminder to the list
+<a name="l-204"></a><span class="tm">19:38:56</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">brobostigon:</span> Once AlanBell is done with London we'll come to you
+<a name="l-205"></a><span class="tm">19:39:04</span><span class="nk"> &lt;brobostigon&gt;</span> :)
+<a name="l-206"></a><span class="tm">19:39:16</span><span class="nk"> &lt;brobostigon&gt;</span> i am eating, so give me a shout.
+<a name="l-207"></a><span class="tm">19:39:19</span><span class="nk"> &lt;daubers&gt;</span> Was the London one organised by Canonical again this time around?
+<a name="l-208"></a><span class="tm">19:39:21</span><span class="nk"> &lt;AlanBell&gt;</span> so the London party is in a wine bar in Pall Mall
+<a name="l-209"></a><span class="tm">19:39:30</span><span class="nk"> &lt;AlanBell&gt;</span> it is canonical organised, they sorted the venue
+<a name="l-210"></a><span class="tm">19:39:57</span><span class="nk"> &lt;AlanBell&gt;</span> but we had some input into it and it should be a bit classier than before :-)
+<a name="l-211"></a><span class="tm">19:40:08</span><span class="nk"> &lt;daubers&gt;</span> Excellent :)
+<a name="l-212"></a><span class="tm">19:40:14</span><span class="nk"> &lt;AlanBell&gt;</span> not sure of the age limit
+<a name="l-213"></a><span class="tm">19:40:48</span><span class="nk"> &lt;AlanBell&gt;</span> anyone under 21 and intending to go might want to give them a call and check first
+<a name="l-214"></a><span class="tm">19:41:02</span><span class="nk"> &lt;funkyHat&gt;</span> If only I didn't have college the following morning, I might have caught the train down from Northampton
+<a name="l-215"></a><span class="tm">19:41:14</span><span class="nk"> &lt;AlanBell&gt;</span> see you all tomorrow o/
+<a name="l-216"></a><span class="tm">19:41:24</span><span class="nk"> &lt;daubers&gt;</span> Good good :)
+<a name="l-217"></a><span class="tm">19:41:28</span><span class="nk"> &lt;daubers&gt;</span> So to Banbury
+<a name="l-218"></a><span class="tm">19:41:30</span><span class="nk"> &lt;brobostigon&gt;</span> one sec.
+<a name="l-219"></a><span class="tm">19:41:51</span><span class="nk"> &lt;daubers&gt;</span> action People attending the London launch part to enjoy themselves immensley
+<a name="l-220"></a><span class="tm">19:41:58</span><span class="nk"> &lt;brobostigon&gt;</span> okies
+<a name="l-221"></a><span class="tm">19:42:07</span><span class="nk"> &lt;Azelphur&gt;</span> ...or else?
+<a name="l-222"></a><span class="tm">19:42:11 </span><span class="nka">* BigRedS_</span> <span class="ac">will do his best</span>
+<a name="l-223"></a><span class="tm">19:42:20</span><span class="nk"> &lt;daubers&gt;</span> brobostigon, over to you
+<a name="l-224"></a><span class="tm">19:42:36</span><span class="nk"> &lt;brobostigon&gt;</span> saturday night, may 1st, olde reindeer inn, more social.
+<a name="l-225"></a><span class="tm">19:42:48</span><span class="nk"> &lt;brobostigon&gt;</span> nothing to formal,
+<a name="l-226"></a><span class="tm">19:42:57</span><span class="nk"> &lt;yamanickill_&gt;</span> <span class="hi">daubers:</span> aw...can the scottish launch party people not enjoy themselves?
+<a name="l-227"></a><span class="tm">19:43:07</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">yamanickill_:</span> That was already actioned
+<a name="l-228"></a><span class="tm">19:43:11</span><span class="nk"> &lt;brobostigon&gt;</span> also need to be of the right age, and dress responably smart/casual.
+<a name="l-229"></a><span class="tm">19:43:21</span><span class="nk"> &lt;brobostigon&gt;</span> reasonably*
+<a name="l-230"></a><span class="tm">19:43:33</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">brobostigon:</span> What's the age limit?
+<a name="l-231"></a><span class="tm">19:43:33</span><span class="nk"> &lt;brobostigon&gt;</span> around 7:30pm start,
+<a name="l-232"></a><span class="tm">19:43:40</span><span class="nk"> &lt;yamanickill_&gt;</span> <span class="hi">daubers:</span> ha, nothing about fun tho :-P
+<a name="l-233"></a><span class="tm">19:43:44</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">daubers:</span> generally over 21.
+<a name="l-234"></a><span class="tm">19:44:03</span><span class="nk"> &lt;daubers&gt;</span> Ok, and is there an event page?
+<a name="l-235"></a><span class="tm">19:44:21</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">daubers:</span> on loco.ubuntu.com and onthe wiki. yes.
+<a name="l-236"></a><span class="tm">19:44:39</span><span class="nk"> &lt;brobostigon&gt;</span> ido have the paghe infront of me,
+<a name="l-237"></a><span class="tm">19:44:43</span><span class="nk"> &lt;brobostigon&gt;</span> dont*
+<a name="l-238"></a><span class="tm">19:45:00</span><span class="nk"> &lt;daubers&gt;</span> ok, http://loco.ubuntu.com/events/team/120/detail/
+<a name="l-239"></a><span class="tm">19:45:11</span><span class="nk"> &lt;daubers&gt;</span> Looks to be the one
+<a name="l-240"></a><span class="tm">19:45:16</span><span class="nk"> &lt;brobostigon&gt;</span> thats it.
+<a name="l-241"></a><span class="tm">19:45:29</span><span class="nk"> &lt;daubers&gt;</span> http://loco.ubuntu.com/events/team/120/detail/
+<a name="l-242"></a><span class="tm">19:45:34</span><span class="nk"> &lt;daubers&gt;</span> Thank you Mr Bot
+<a name="l-243"></a><span class="tm">19:45:43</span><span class="nk"> &lt;daubers&gt;</span> Ok, any other release parties?
+<a name="l-244"></a><span class="tm">19:46:20</span><span class="nk"> &lt;daubers&gt;</span> action People attending Banbury release party to enjoy themselves
+<a name="l-245"></a><span class="tm">19:46:26</span><span class="nk"> &lt;brobostigon&gt;</span> :)
+<a name="l-246"></a><span class="tm">19:46:31</span><span class="nk"> &lt;Daviey&gt;</span> I have a bottle of port waiting for my personal release party :)
+<a name="l-247"></a><span class="tm">19:46:38</span><span class="nk"> &lt;brobostigon&gt;</span> and good beer, :) as always,
+<a name="l-248"></a><span class="tm">19:46:43</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">Daviey:</span> May I suggest some cheese with that?
+<a name="l-249"></a><span class="tm">19:47:05</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">daubers:</span> you may!
+<a name="l-250"></a><span class="tm">19:47:08</span><span class="nk"> &lt;daubers&gt;</span> Ok :) Going back to AOB
+<a name="l-251"></a><span class="tm">19:47:14</span><span class="nk"> &lt;daubers&gt;</span> [TOPIC] Any other Business
+<a name="l-252"></a><span class="tm">19:47:36</span><span class="nk"> &lt;AlanBell&gt;</span> I just phoned the London venue, it is over 18
+<a name="l-253"></a><span class="tm">19:47:39</span><span class="nk"> &lt;daubers&gt;</span> Anyone like to raise any issues?
+<a name="l-254"></a><span class="tm">19:48:05</span><span class="nk"> &lt;dutchie&gt;</span> go to oggcamp!
+<a name="l-255"></a><span class="tm">19:48:05</span><span class="nk"> &lt;brobostigon&gt;</span> generally over 18 is fine for banbury, aswell,
+<a name="l-256"></a><span class="tm">19:48:20</span><span class="nk"> &lt;brobostigon&gt;</span> but over 21 is there as a rule for certain peole.
+<a name="l-257"></a><span class="tm">19:48:41</span><span class="nk"> &lt;daubers&gt;</span> Okey dokey.
+<a name="l-258"></a><span class="tm">19:48:54</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">brobostigon:</span> Can you drop a reminder to the -uk list too please?
+<a name="l-259"></a><span class="tm">19:49:08</span><span class="nk"> &lt;daubers&gt;</span> for the banbury party
+<a name="l-260"></a><span class="tm">19:49:14</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">daubers:</span> yes, :)
+<a name="l-261"></a><span class="tm">19:49:16</span><span class="nk"> &lt;daubers&gt;</span> action
+<a name="l-262"></a><span class="tm">19:49:33</span><span class="nk"> &lt;daubers&gt;</span> action brobostigon to send reminder to mailing list re: banbury release party
+<a name="l-263"></a><span class="tm">19:49:43</span><span class="nk"> &lt;daubers&gt;</span> No more business?
+<a name="l-264"></a><span class="tm">19:49:50</span><span class="nk"> &lt;brobostigon&gt;</span> not from here, no.
+<a name="l-265"></a><span class="tm">19:50:14</span><span class="nk"> &lt;AlanBell&gt;</span> May 6th, don't forget to vote
+<a name="l-266"></a><span class="tm">19:50:29</span><span class="nk"> &lt;daubers&gt;</span> Oh yes, everybody remember to vote on the 6th
+<a name="l-267"></a><span class="tm">19:50:37</span><span class="nk"> &lt;brobostigon&gt;</span> :) always,
+<a name="l-268"></a><span class="tm">19:50:40</span><span class="nk"> &lt;Azelphur&gt;</span> <span class="hi">AlanBell:</span> oh cool, is that when the election is?
+<a name="l-269"></a><span class="tm">19:50:43</span><span class="nk"> &lt;daubers&gt;</span> Those who are eligable anyway
+<a name="l-270"></a><span class="tm">19:51:04</span><span class="nk"> &lt;AlanBell&gt;</span> <span class="hi">Azelphur:</span> yes
+<a name="l-271"></a><span class="tm">19:51:07</span><span class="nk"> &lt;Azelphur&gt;</span> i see
+<a name="l-272"></a><span class="tm">19:51:19</span><span class="nk"> &lt;Azelphur&gt;</span> I registered at aboutmyvote.org but never received any papers yet
+<a name="l-273"></a><span class="tm">19:51:38</span><span class="nk"> &lt;Azelphur&gt;</span> aboutmyvote.co.uk, rather
+<a name="l-274"></a><span class="tm">19:51:47</span><span class="nk"> &lt;daubers&gt;</span> Ok, shall we organise the next meeting?
+<a name="l-275"></a><span class="tm">19:51:47</span><span class="nk"> &lt;yamanickill_&gt;</span> ahh yes...the election
+<a name="l-276"></a><span class="tm">19:51:53</span><span class="nk"> &lt;daubers&gt;</span> [TOPIC] Date of next meeting
+<a name="l-277"></a><span class="tm">19:52:07</span><span class="nk"> &lt;yamanickill_&gt;</span> are we continuing on the 1st wed of each month?
+<a name="l-278"></a><span class="tm">19:52:10</span><span class="nk"> &lt;yamanickill_&gt;</span> apart from today obv
+<a name="l-279"></a><span class="tm">19:52:18</span><span class="nk"> &lt;AlanBell&gt;</span> I think so
+<a name="l-280"></a><span class="tm">19:52:29</span><span class="nk"> &lt;yamanickill_&gt;</span> i'm happy with that. not so good with the last wed
+<a name="l-281"></a><span class="tm">19:52:57</span><span class="nk"> &lt;daubers&gt;</span> Is it ok for me to organise an out of sequence meeting the following week to chase support guidelines? Or would people rather we have it run for 2 weeks
+<a name="l-282"></a><span class="tm">19:53:07</span><span class="nk"> &lt;daubers&gt;</span> (though that would be 2 weeks)
+<a name="l-283"></a><span class="tm">19:53:29 </span><span class="nka">* AlanBell</span> <span class="ac">is confused</span>
+<a name="l-284"></a><span class="tm">19:53:42 </span><span class="nka">* yamanickill_</span> <span class="ac">is also confused</span>
+<a name="l-285"></a><span class="tm">19:53:46</span><span class="nk"> &lt;brobostigon&gt;</span> sothree insted of two?
+<a name="l-286"></a><span class="tm">19:53:47</span><span class="nk"> &lt;daubers&gt;</span> The first wednesday of the month would be next week
+<a name="l-287"></a><span class="tm">19:54:10</span><span class="nk"> &lt;AlanBell&gt;</span> ok, this meeting was brought forward a week to be in front of release and oggcamp
+<a name="l-288"></a><span class="tm">19:54:18</span><span class="nk"> &lt;daubers&gt;</span> Ah, ok
+<a name="l-289"></a><span class="tm">19:54:19</span><span class="nk"> &lt;brobostigon&gt;</span> true
+<a name="l-290"></a><span class="tm">19:54:31</span><span class="nk"> &lt;AlanBell&gt;</span> the next meeting I was expecting would be July 7th
+<a name="l-291"></a><span class="tm">19:54:35</span><span class="nk"> &lt;AlanBell&gt;</span> oops, no
+<a name="l-292"></a><span class="tm">19:54:43</span><span class="nk"> &lt;AlanBell&gt;</span> June 2nd
+<a name="l-293"></a><span class="tm">19:55:18</span><span class="nk"> &lt;AlanBell&gt;</span> so when do you want the support guidelines meeting?
+<a name="l-294"></a><span class="tm">19:55:29</span><span class="nk"> &lt;brobostigon&gt;</span> as long as not, tuesday evening, i amhappy, i play chess tuesday evening.
+<a name="l-295"></a><span class="tm">19:55:33</span><span class="nk"> &lt;daubers&gt;</span> I'd like to run that on the week containing the 14th
+<a name="l-296"></a><span class="tm">19:56:05</span><span class="nk"> &lt;brobostigon&gt;</span> i am happy to go with everyone else on this one, i am very free.
+<a name="l-297"></a><span class="tm">19:56:09</span><span class="nk"> &lt;daubers&gt;</span> Which lets it run for 2 weeks
+<a name="l-298"></a><span class="tm">19:56:29</span><span class="nk"> &lt;AlanBell&gt;</span> UDS is the week containing the 14th
+<a name="l-299"></a><span class="tm">19:56:35</span><span class="nk"> &lt;daubers&gt;</span> Ah, ok, so the following week
+<a name="l-300"></a><span class="tm">19:56:47</span><span class="nk"> &lt;AlanBell&gt;</span> sounds good
+<a name="l-301"></a><span class="tm">19:56:48</span><span class="nk"> &lt;yamanickill_&gt;</span> is there internet at uds? :-P
+<a name="l-302"></a><span class="tm">19:56:59</span><span class="nk"> &lt;brobostigon&gt;</span> sounds fine here.
+<a name="l-303"></a><span class="tm">19:57:19</span><span class="nk"> &lt;daubers&gt;</span> action Daubers to organise support meeting on the 19th of April
+<a name="l-304"></a><span class="tm">19:57:39</span><span class="nk"> &lt;brobostigon&gt;</span> i am hppy.
+<a name="l-305"></a><span class="tm">19:57:48</span><span class="nk"> &lt;daubers&gt;</span> Can we have a chair for the meeting on the 7th of July? (as that is a general meeting)
+<a name="l-306"></a><span class="tm">19:58:10</span><span class="nk"> &lt;brobostigon&gt;</span> count me out, my internet is not reliable right now, consistently.
+<a name="l-307"></a><span class="tm">19:58:14</span><span class="nk"> &lt;Yorvyk&gt;</span> April ??
+<a name="l-308"></a><span class="tm">19:58:24</span><span class="nk"> &lt;AlanBell&gt;</span> danfish for chair?
+<a name="l-309"></a><span class="tm">19:58:37</span><span class="nk"> &lt;daubers&gt;</span> sorry :( I'll correct that in the minutes, I meant may
+<a name="l-310"></a><span class="tm">19:58:38</span><span class="nk"> &lt;yamanickill_&gt;</span> june...not july
+<a name="l-311"></a><span class="tm">19:58:42</span><span class="nk"> &lt;daubers&gt;</span> and june
+<a name="l-312"></a><span class="tm">19:58:47</span><span class="nk"> &lt;daubers&gt;</span> I'm rubbish at this!
+<a name="l-313"></a><span class="tm">19:58:55</span><span class="nk"> &lt;yamanickill_&gt;</span> :-P
+<a name="l-314"></a><span class="tm">19:59:06</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">danfish:</span> Would you like to volunteer?
+<a name="l-315"></a><span class="tm">19:59:22</span><span class="nk"> &lt;daubers&gt;</span> or yamanickill_ ?
+<a name="l-316"></a><span class="tm">19:59:32</span><span class="nk"> &lt;Yorvyk&gt;</span> 19 may is a tuesday
+<a name="l-317"></a><span class="tm">19:59:56</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">Yorvyk:</span> It's a wednesday according to my calender
+<a name="l-318"></a><span class="tm">20:00:20</span><span class="nk"> &lt;Daviey&gt;</span> We can leave it without a chair, and get a volunteer prior to the start of the next
+<a name="l-319"></a><span class="tm">20:00:23</span><span class="nk"> &lt;Yorvyk&gt;</span> OK wring Year
+<a name="l-320"></a><span class="tm">20:00:25</span><span class="nk"> &lt;yamanickill_&gt;</span> i'll go for it if someone tells me what to do. i've no iea what to do. this is the 2nd of june, yeah?
+<a name="l-321"></a><span class="tm">20:00:53</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">yamanickill_:</span> 7th of june :)
+<a name="l-322"></a><span class="tm">20:01:04</span><span class="nk"> &lt;daubers&gt;</span> according to AlanBell
+<a name="l-323"></a><span class="tm">20:01:09</span><span class="nk"> &lt;danfish&gt;</span> yep, I'll voluteer - flattered!
+<a name="l-324"></a><span class="tm">20:01:22</span><span class="nk"> &lt;yamanickill_&gt;</span> 7th is a friday...that was the july one wasn't it?
+<a name="l-325"></a><span class="tm">20:01:31</span><span class="nk"> &lt;yamanickill_&gt;</span> wow this is confusing just now
+<a name="l-326"></a><span class="tm">20:01:37</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">yamanickill_:</span> 7th is a monday
+<a name="l-327"></a><span class="tm">20:01:38</span><span class="nk"> &lt;AlanBell&gt;</span> 2nd of June!
+<a name="l-328"></a><span class="tm">20:01:42</span><span class="nk"> &lt;daubers&gt;</span> ok
+<a name="l-329"></a><span class="tm">20:01:58</span><span class="nk"> &lt;daubers&gt;</span> Next meeting: 2nd of June
+<a name="l-330"></a><span class="tm">20:02:08</span><span class="nk"> &lt;daubers&gt;</span> danfish or yamanickill_: Who'd like to do it?
+<a name="l-331"></a><span class="tm">20:02:38</span><span class="nk"> &lt;yamanickill_&gt;</span> <span class="hi">danfish:</span> you go for it
+<a name="l-332"></a><span class="tm">20:02:49</span><span class="nk"> &lt;yamanickill_&gt;</span> i'll take it some other time
+<a name="l-333"></a><span class="tm">20:02:51</span><span class="nk"> &lt;daubers&gt;</span> [TOPIC] Next meeting 2nd of June danfish to chair
+<a name="l-334"></a><span class="tm">20:03:00</span><span class="nk"> &lt;daubers&gt;</span> <span class="cmd">#endmeeting</span><span class="cmdline"></span></pre>
+</body></html>

=== added file 'tests/ukmeet.moin.txt'
--- tests/ukmeet.moin.txt	1970-01-01 00:00:00 +0000
+++ tests/ukmeet.moin.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,764 @@
+#title #ukmeet: this meeting
+
+Meeting started by daubers at 19:00:00 UTC.  The full logs are available
+at tests/ukmeet.log.html .
+
+
+
+== Meeting summary ==
+
+ * *Review of action items from last meeting
+  *  *Daviey to kick off team reporting and find interested parties to do regular reports  (daubers, 19:03:40)
+  *''LINK:'' https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html   (Daviey, 19:05:30)
+  *''ACTION:'' People who have achieved something in April, please place it in the report  (daubers, 19:07:11)
+  *  *REPORT] AlanBell to find out what happened at the manchester jam  (daubers, 19:07:41)
+  *''LINK:'' http://loco.ubuntu.com/events/team/51/detail/   (AlanBell, 19:08:16)
+  *  *REPORT] Daviey and czajkowski to do more publicity on the geeknic  (daubers, 19:09:18)
+  *''ACTION:'' Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool  (daubers, 19:12:34)
+  *  *REPORT] daubers to put support guidelines in a wiki page prior to next meeting  (daubers, 19:12:52)
+  *''LINK:'' https://wiki.ubuntu.com/UKTeam/Support_Guidelines   (daubers, 19:13:01)
+
+ * *Daubers - Support Guidelines
+  *''ACTION:'' Daubers to write a tal for Oggcamp on the proposed support guidelines  (daubers, 19:19:20)
+  *''ACTION:'' Daubers to send a mail to the list explaining the guidelines  (daubers, 19:24:40)
+  *''ACTION:'' Daubers to organise a meeting following the trial  (daubers, 19:24:52)
+
+ * *TBA - OGGCamp related bits
+  *''LINK:'' http://ideas.oggcamp.org/ is a collection of bits of oggcamp info  (AlanBell, 19:27:41)
+
+ * *TBA - UDS related bits
+
+ * *Any other business
+
+ * *Release Parties
+  *''LINK:'' http://www.evernote.com/pub/yamanickill/ubuntu   (yamanickill_, 19:37:48)
+  *''ACTION:'' Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid  (daubers, 19:37:53)
+  *''LINK:'' http://loco.ubuntu.com/events/team/121/detail/   (AlanBell, 19:38:34)
+  *''LINK:'' http://loco.ubuntu.com/events/team/120/detail/   (daubers, 19:45:29)
+
+ * *Any other Business
+
+ * *Date of next meeting
+
+ * *Next meeting 2nd of June danfish to chair
+
+
+
+Meeting ended at 20:03:00 UTC.
+
+
+
+== Votes ==
+
+
+ * Should we have a beta trial of the support guidelines, followed by a meeting to review them?
+   For: 9 Against: 1 Abstained: 1
+
+
+
+== Action items ==
+
+ * People who have achieved something in April, please place it in the report
+ * Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool
+ * Daubers to write a tal for Oggcamp on the proposed support guidelines
+ * Daubers to send a mail to the list explaining the guidelines
+ * Daubers to organise a meeting following the trial
+ * Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid
+
+
+
+== People present (lines said) ==
+
+ * daubers (132)
+ * brobostigon (57)
+ * AlanBell (49)
+ * yamanickill_ (32)
+ * Daviey (17)
+ * Yorvyk (11)
+ * The_Toxic_Mite (9)
+ * Azelphur (8)
+ * BigRedS_ (4)
+ * dutchie (4)
+ * danfish (3)
+ * freesitebuilder_ (2)
+ * L0ki (2)
+ * MunkyJunky (2)
+ * TonyP (1)
+ * funkyHat (1)
+
+
+
+== Full Log ==
+
+
+ 19:00:00 <daubers> #startmeeting
+
+ 19:00:00 <daubers> #meetingtopic this meeting
+
+ 19:01:41 <AlanBell> o/
+
+ 19:01:47 <dutchie> o/
+
+ 19:01:54 <brobostigon> o/
+
+ 19:01:55 <daubers> Apologies if I muck up commands, my lappy screen is a bit small for two sets of crib sheets
+
+ 19:02:06 <Yorvyk> o/
+
+ 19:02:32 <daubers> Anyone who's present say so please :)
+
+ 19:02:42 <brobostigon> present
+
+ 19:02:43 <MunkyJunky> present
+
+ 19:02:44 <BigRedS_> present
+
+ 19:02:47 <daubers> present
+
+ 19:02:58 <Yorvyk> present
+
+ 19:03:14 <freesitebuilder_> present
+
+ 19:03:16 <Azelphur> present
+
+ 19:03:21 <L0ki> present
+
+ 19:03:31 <daubers> ok
+
+ 19:03:33 <daubers> #ToPic Review of action items from last meeting
+
+ 19:03:40 <daubers> #subtopic Daviey to kick off team reporting and find interested parties to do regular reports
+
+ 19:03:44 <daubers> Daviey?
+
+ 19:04:18 <Daviey> \o
+
+ 19:04:30 <The_Toxic_Mite> oops, present
+
+ 19:04:37 <daubers> How goes said reporting?
+
+ 19:04:41 <Daviey> Ok, deadline for April is technically this Sunday
+
+ 19:04:58 <Daviey> I've today posted to the LoCo list
+
+ 19:05:06 <Daviey> asking people to add activities
+
+ 19:05:20 * brobostigon read it.
+
+ 19:05:30 <Daviey> https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html
+
+ 19:05:54 <Daviey> Essentially, it's a call for people to add anything they have achieved in April
+
+ 19:06:02 <Daviey> (or the LoCo)
+
+ 19:06:24 <Daviey> I'm going to poke a few people that i know have achieved stuff
+
+ 19:06:39 <Daviey> if people present could do that also, it would be grand
+
+ 19:06:48 <daubers> Excellent :)
+
+ 19:06:51 <brobostigon> willdo Daviey
+
+ 19:06:52 <brobostigon> :)
+
+ 19:07:11 <daubers> [ACTION] People who have achieved something in April, please place it in the report
+
+ 19:07:21 <brobostigon> :)
+
+ 19:07:26 <daubers> Shall we move on?
+
+ 19:07:27 <brobostigon> agreed.
+
+ 19:07:41 <daubers> [PROGRESS REPORT] AlanBell to find out what happened at the manchester jam
+
+ 19:07:45 <AlanBell> the manchester jam occured and seems to have gone well, MunkyJunky talked about it on the full circle podcast
+
+ 19:07:45 <Daviey> ta
+
+ 19:07:54 <Daviey> present btw :)
+
+ 19:08:05 <MunkyJunky> It did go well!
+
+ 19:08:16 <AlanBell> http://loco.ubuntu.com/events/team/51/detail/
+
+ 19:08:36 <daubers> Excellent, well done to those that organised it
+
+ 19:09:12 <daubers> Moving on?
+
+ 19:09:15 <AlanBell> yup
+
+ 19:09:18 <daubers> [PROGRESS REPORT] Daviey and czajkowski to do more publicity on the geeknic
+
+ 19:09:41 <daubers> Daviey?
+
+ 19:10:49 <daubers> czajkowski?
+
+ 19:11:05 <Daviey> no action from here.
+
+ 19:11:18 <brobostigon> she was talking about it in #ubuntu-uk not long ago.
+
+ 19:11:36 <daubers> Ok, can we someone volunteer to post to the mailing list?
+
+ 19:12:34 <daubers> [ACTION] Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool
+
+ 19:12:42 <daubers> Ok, next
+
+ 19:12:52 <daubers> [PROGRESS REPORT] daubers to put support guidelines in a wiki page prior to next meeting
+
+ 19:13:01 <daubers> https://wiki.ubuntu.com/UKTeam/Support_Guidelines
+
+ 19:13:07 <brobostigon> :)
+
+ 19:13:27 <brobostigon> iam happy with it, right now.
+
+ 19:13:29 <daubers> I've popped these on the wiki now, and (think) I dropped an email to the list.
+
+ 19:13:38 <daubers> I'll go further into this in a second
+
+ 19:13:45 <daubers> since thats the end of the last meetings actions
+
+ 19:13:59 <daubers> [TOPIC] Daubers - Support Guidelines
+
+ 19:14:04 <brobostigon> Do we need to do a review of those proposedguidelines?
+
+ 19:14:46 <daubers> As I said these are now on the wiki, an I believe I emailed the mailing list. Do people want time to review them further and me to push them a bit more, or how would people like to proceed?
+
+ 19:15:13 <brobostigon> i would like to be able to review them, please.
+
+ 19:15:47 <AlanBell> would be good to share them about at UDS
+
+ 19:15:53 <daubers> Ok, are there any major failings in the proposed guidelines?
+
+ 19:16:13 <brobostigon> daubers: not that i can immediatly remember, no.
+
+ 19:16:16 <daubers> AlanBell: Would you be happy to do that? I'm not going
+
+ 19:16:29 <daubers> Work, money and stuff are in the way
+
+ 19:16:33 <AlanBell> I see no failures, but they can probably be expanded on over time
+
+ 19:16:52 <AlanBell> yes I can try and talk to other teams about them at UDS
+
+ 19:16:56 <brobostigon> I would be happier with review before proper adoption.
+
+ 19:17:18 <daubers> Awesome, if anyone thinks it would help, I'm happy to do a session at oggcamp
+
+ 19:17:21 <brobostigon> and good scruteny.
+
+ 19:17:54 <Yorvyk> I think they need to bee used to see if they work
+
+ 19:18:03 <AlanBell> an oggcamp session would be great
+
+ 19:18:42 <daubers> So, if I do an oggcamp session and write up some bits, are we happy to do a trial implimentation as of next week and then a review afterwards?
+
+ 19:18:56 <AlanBell> I am
+
+ 19:18:57 <daubers> See if I can organise a meeting dedicated to that [TOPIC]
+
+ 19:19:20 <daubers> [ACTION] Daubers to write a tal for Oggcamp on the proposed support guidelines
+
+ 19:19:44 <daubers> Do we want to vote on a trial implimentation?
+
+ 19:19:44 <brobostigon> ok.
+
+ 19:19:57 <AlanBell> ok
+
+ 19:19:58 <brobostigon> after review,yes.
+
+ 19:20:00 <The_Toxic_Mite> ok
+
+ 19:20:21 <brobostigon> not before.
+
+ 19:20:58 <daubers> brobostigon: Not sure there's a lot to review initially. They're set out fairly plainly in the wiki page. There will be a lot of wiggle room in the trial as well
+
+ 19:21:36 <BigRedS_> I'd suggest a trial to find out what needs adding. I've had a skim and there appears to be vagueness rather than anything likely disagreeable
+
+ 19:21:37 <brobostigon> daubers: i mean, for any big issues, thats all, or any possible additions or changes.
+
+ 19:21:53 <daubers> brobostigon: I think a trial would be best to hilight that (personally)
+
+ 19:22:10 <daubers> If it all fails during the trial then obviously it'll get pulled and discussed further
+
+ 19:22:22 <brobostigon> daubers: true, but a "not firm trial" rather thandefinate firm trial.
+
+ 19:22:35 <daubers> Yes, as I said, wit a lot of wiggle room
+
+ 19:22:46 <brobostigon> ok,
+
+ 19:22:49 <AlanBell> more of a beta than a release candidate
+
+ 19:22:54 <brobostigon> i am happy.
+
+ 19:22:58 <daubers> [VOTE] Should we have a beta trial of the support guidelines, followed by a meeting to review them?
+
+ 19:23:06 <AlanBell> +1
+
+ 19:23:08 <daubers> +1
+
+ 19:23:08 <brobostigon> +1
+
+ 19:23:12 <BigRedS_> +1
+
+ 19:23:14 <Yorvyk> +1
+
+ 19:23:19 <freesitebuilder_> 0
+
+ 19:23:27 <Azelphur> -1
+
+ 19:23:33 <L0ki> +1
+
+ 19:23:47 <TonyP> +1
+
+ 19:23:54 <danfish> +1
+
+ 19:24:07 <The_Toxic_Mite> +1
+
+ 19:24:16 <daubers> Blimey, I think we can take that as a yes
+
+ 19:24:21 <daubers> [ENDVOTE]
+
+ 19:24:31 * brobostigon goes to make a copy of the guidelines,
+
+ 19:24:40 <daubers> [ACTION] Daubers to send a mail to the list explaining the guidelines
+
+ 19:24:52 <daubers> [Action] Daubers to organise a meeting following the trial
+
+ 19:25:00 <daubers> Everyone happy?
+
+ 19:25:04 <brobostigon> yes.
+
+ 19:25:12 <daubers> Ok, moving the train along :)
+
+ 19:25:21 <daubers> [TOPIC] TBA - OGGCamp related bits
+
+ 19:25:27 <Azelphur> hehe, I did 99.9% of stuff that was in the guidelines anyway :)
+
+ 19:25:31 <Yorvyk> Should the IRC channel be informed
+
+ 19:25:40 <daubers> Yorvyk: I'll do that as well
+
+ 19:25:50 <Yorvyk> ok
+
+ 19:25:53 <Daviey> daubers: Wikipage + url to [TOPIC]?
+
+ 19:25:54 <AlanBell> ok, so who is going to oggcamp?
+
+ 19:26:05 <Yorvyk> o/
+
+ 19:26:06 <dutchie> o/
+
+ 19:26:07 <AlanBell> o/
+
+ 19:26:17 <daubers> o/
+
+ 19:26:26 <daubers> Daviey: Yes please :)
+
+ 19:26:49 <daubers> sorry, I moved on a bit quick there
+
+ 19:27:21 <daubers> Would Daviey or anyone like to say a few words about oggcamp?
+
+ 19:27:41 <AlanBell> http://ideas.oggcamp.org/ is a collection of bits of oggcamp info
+
+ 19:28:00 <AlanBell> in particular look at the talks page
+
+ 19:28:42 <AlanBell> and there is of course the geeknic on Friday afternoon
+
+ 19:28:45 <yamanickill_> have i missed the meeting
+
+ 19:28:48 <yamanickill_> ahhh that'll be a no
+
+ 19:28:50 <yamanickill_> good
+
+ 19:28:58 <daubers> Anyone considering a talk, do it! :)
+
+ 19:28:59 <AlanBell> yamanickill_: still proceeding
+
+ 19:29:17 <daubers> Also, anyone I've not yet met, come say hello!
+
+ 19:29:22 <yamanickill_> AlanBell: cool thanks, sorry if i missed my section
+
+ 19:29:53 <daubers> Any other Oggcamp business people would like raised?
+
+ 19:30:24 <dutchie> go to oggcamp!
+
+ 19:30:32 <daubers> :) We'll move along then
+
+ 19:30:41 <daubers> Steaming through today
+
+ 19:30:47 <daubers> [TOPIC] TBA - UDS related bits
+
+ 19:31:05 <AlanBell> I am going to UDS
+
+ 19:31:11 <daubers> Anybody intending to attend UDS?
+
+ 19:31:18 <AlanBell> and I found out today I am doing crew for it too
+
+ 19:31:19 <The_Toxic_Mite> No
+
+ 19:31:37 <daubers> AlanBell: \o/ Crew is the best thing to do at these things
+
+ 19:31:44 <Yorvyk> I am in the vacinty that week so might pop in
+
+ 19:31:47 <AlanBell> popey and Daviey are going, amongst others
+
+ 19:31:54 <brobostigon> writing a blueprint thoygh
+
+ 19:32:25 <AlanBell> if there is anything that you want raised with the wider community then fill in blueprints or hassle people who are going
+
+ 19:32:30 <AlanBell> or both
+
+ 19:32:55 <daubers> If poeple want help finding who to hassle or with blueprints please ask in the channel
+
+ 19:33:08 <brobostigon> will do
+
+ 19:33:36 <daubers> AlanBell: Anything else you wanted to cover here?
+
+ 19:33:46 <AlanBell> no, don't think so
+
+ 19:33:50 <daubers> Ok
+
+ 19:33:51 <AlanBell> party on the Eurostar
+
+ 19:34:04 <daubers> Heh, just don't go starting any fires!
+
+ 19:34:35 <danfish> eggplant =! aubergine
+
+ 19:34:38 <daubers> [TOPIC] Any other business
+
+ 19:34:49 <daubers> Anyone like to raise something?
+
+ 19:34:52 <yamanickill_> want an update on scottish release party?
+
+ 19:35:06 <daubers> yamanickill_: Yes please!
+
+ 19:35:10 <daubers> I must have missed that
+
+ 19:35:12 <daubers> sorry :(
+
+ 19:35:15 <AlanBell> wasn't there a release parties [TOPIC]?
+
+ 19:35:21 <daubers> [TOPIC] Release Parties
+
+ 19:35:21 <yamanickill_> AlanBell: yeah, but i wasn't here
+
+ 19:35:30 <yamanickill_> i couldn't get onto irc
+
+ 19:35:42 <yamanickill_> the planning for this party is going pretty well. 1 week to go until the party
+
+ 19:35:55 * The_Toxic_Mite smacks his head
+
+ 19:36:07 <yamanickill_> we have almost everything organised. didn't get any sponsors for beer, so we are just gonna let people BYOB
+
+ 19:36:15 <yamanickill_> and everything is going good :-
+
+ 19:36:18 <yamanickill_> :-)
+
+ 19:36:21 <The_Toxic_Mite> yamanickill_: Where's the party going to be?
+
+ 19:36:26 <daubers> yamanickill_: Got a link for your release party info?
+
+ 19:36:31 * brobostigon sneaks in banbury
+
+ 19:36:37 <The_Toxic_Mite> brobostigon: ^_^
+
+ 19:36:44 <yamanickill_> The_Toxic_Mite: it is in the Strathclyde university union
+
+ 19:36:57 <yamanickill_> daubers: erm its on the release parties page, me thinks
+
+ 19:37:02 <yamanickill_> you mean detailed info?
+
+ 19:37:04 <AlanBell> release parties should be now added to the loco directory
+
+ 19:37:06 <The_Toxic_Mite> yamanickill_: Ah. Glasgow's fairly inconvenient for me, and given that I have exams on, I may not be allowed to come
+
+ 19:37:09 <daubers> yamanickill_: Yes please
+
+ 19:37:27 <yamanickill_> ok, well the only detailed info that is public is the info on my evernote...2 secs lemme get the link
+
+ 19:37:48 <yamanickill_> http://www.evernote.com/pub/yamanickill/ubuntu
+
+ 19:37:53 <daubers> [ACTION] Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid
+
+ 19:38:11 <daubers> Awesome :)
+
+ 19:38:20 <Daviey> +1
+
+ 19:38:21 <daubers> yamanickill_: Can you make sure a reminder goes to the -uk list?
+
+ 19:38:28 <AlanBell> ok, London party is tomorrow night
+
+ 19:38:31 <yamanickill_> daubers: yep, will do that
+
+ 19:38:31 <brobostigon> daubers: banbury also please.:)
+
+ 19:38:34 <AlanBell> http://loco.ubuntu.com/events/team/121/detail/
+
+ 19:38:36 * The_Toxic_Mite checks timetables on nationalrail.co.uk
+
+ 19:38:42 <daubers> action yamanickill to send a reminder to the list
+
+ 19:38:56 <daubers> brobostigon: Once AlanBell is done with London we'll come to you
+
+ 19:39:04 <brobostigon> :)
+
+ 19:39:16 <brobostigon> i am eating, so give me a shout.
+
+ 19:39:19 <daubers> Was the London one organised by Canonical again this time around?
+
+ 19:39:21 <AlanBell> so the London party is in a wine bar in Pall Mall
+
+ 19:39:30 <AlanBell> it is canonical organised, they sorted the venue
+
+ 19:39:57 <AlanBell> but we had some input into it and it should be a bit classier than before :-)
+
+ 19:40:08 <daubers> Excellent :)
+
+ 19:40:14 <AlanBell> not sure of the age limit
+
+ 19:40:48 <AlanBell> anyone under 21 and intending to go might want to give them a call and check first
+
+ 19:41:02 <funkyHat> If only I didn't have college the following morning, I might have caught the train down from Northampton
+
+ 19:41:14 <AlanBell> see you all tomorrow o/
+
+ 19:41:24 <daubers> Good good :)
+
+ 19:41:28 <daubers> So to Banbury
+
+ 19:41:30 <brobostigon> one sec.
+
+ 19:41:51 <daubers> action People attending the London launch part to enjoy themselves immensley
+
+ 19:41:58 <brobostigon> okies
+
+ 19:42:07 <Azelphur> ...or else?
+
+ 19:42:11 * BigRedS_ will do his best
+
+ 19:42:20 <daubers> brobostigon, over to you
+
+ 19:42:36 <brobostigon> saturday night, may 1st, olde reindeer inn, more social.
+
+ 19:42:48 <brobostigon> nothing to formal,
+
+ 19:42:57 <yamanickill_> daubers: aw...can the scottish launch party people not enjoy themselves?
+
+ 19:43:07 <daubers> yamanickill_: That was already actioned
+
+ 19:43:11 <brobostigon> also need to be of the right age, and dress responably smart/casual.
+
+ 19:43:21 <brobostigon> reasonably*
+
+ 19:43:33 <daubers> brobostigon: What's the age limit?
+
+ 19:43:33 <brobostigon> around 7:30pm start,
+
+ 19:43:40 <yamanickill_> daubers: ha, nothing about fun tho :-P
+
+ 19:43:44 <brobostigon> daubers: generally over 21.
+
+ 19:44:03 <daubers> Ok, and is there an event page?
+
+ 19:44:21 <brobostigon> daubers: on loco.ubuntu.com and onthe wiki. yes.
+
+ 19:44:39 <brobostigon> ido have the paghe infront of me,
+
+ 19:44:43 <brobostigon> dont*
+
+ 19:45:00 <daubers> ok, http://loco.ubuntu.com/events/team/120/detail/
+
+ 19:45:11 <daubers> Looks to be the one
+
+ 19:45:16 <brobostigon> thats it.
+
+ 19:45:29 <daubers> http://loco.ubuntu.com/events/team/120/detail/
+
+ 19:45:34 <daubers> Thank you Mr Bot
+
+ 19:45:43 <daubers> Ok, any other release parties?
+
+ 19:46:20 <daubers> action People attending Banbury release party to enjoy themselves
+
+ 19:46:26 <brobostigon> :)
+
+ 19:46:31 <Daviey> I have a bottle of port waiting for my personal release party :)
+
+ 19:46:38 <brobostigon> and good beer, :) as always,
+
+ 19:46:43 <daubers> Daviey: May I suggest some cheese with that?
+
+ 19:47:05 <Daviey> daubers: you may!
+
+ 19:47:08 <daubers> Ok :) Going back to AOB
+
+ 19:47:14 <daubers> [TOPIC] Any other Business
+
+ 19:47:36 <AlanBell> I just phoned the London venue, it is over 18
+
+ 19:47:39 <daubers> Anyone like to raise any issues?
+
+ 19:48:05 <dutchie> go to oggcamp!
+
+ 19:48:05 <brobostigon> generally over 18 is fine for banbury, aswell,
+
+ 19:48:20 <brobostigon> but over 21 is there as a rule for certain peole.
+
+ 19:48:41 <daubers> Okey dokey.
+
+ 19:48:54 <daubers> brobostigon: Can you drop a reminder to the -uk list too please?
+
+ 19:49:08 <daubers> for the banbury party
+
+ 19:49:14 <brobostigon> daubers: yes, :)
+
+ 19:49:16 <daubers> action
+
+ 19:49:33 <daubers> action brobostigon to send reminder to mailing list re: banbury release party
+
+ 19:49:43 <daubers> No more business?
+
+ 19:49:50 <brobostigon> not from here, no.
+
+ 19:50:14 <AlanBell> May 6th, don't forget to vote
+
+ 19:50:29 <daubers> Oh yes, everybody remember to vote on the 6th
+
+ 19:50:37 <brobostigon> :) always,
+
+ 19:50:40 <Azelphur> AlanBell: oh cool, is that when the election is?
+
+ 19:50:43 <daubers> Those who are eligable anyway
+
+ 19:51:04 <AlanBell> Azelphur: yes
+
+ 19:51:07 <Azelphur> i see
+
+ 19:51:19 <Azelphur> I registered at aboutmyvote.org but never received any papers yet
+
+ 19:51:38 <Azelphur> aboutmyvote.co.uk, rather
+
+ 19:51:47 <daubers> Ok, shall we organise the next meeting?
+
+ 19:51:47 <yamanickill_> ahh yes...the election
+
+ 19:51:53 <daubers> [TOPIC] Date of next meeting
+
+ 19:52:07 <yamanickill_> are we continuing on the 1st wed of each month?
+
+ 19:52:10 <yamanickill_> apart from today obv
+
+ 19:52:18 <AlanBell> I think so
+
+ 19:52:29 <yamanickill_> i'm happy with that. not so good with the last wed
+
+ 19:52:57 <daubers> Is it ok for me to organise an out of sequence meeting the following week to chase support guidelines? Or would people rather we have it run for 2 weeks
+
+ 19:53:07 <daubers> (though that would be 2 weeks)
+
+ 19:53:29 * AlanBell is confused
+
+ 19:53:42 * yamanickill_ is also confused
+
+ 19:53:46 <brobostigon> sothree insted of two?
+
+ 19:53:47 <daubers> The first wednesday of the month would be next week
+
+ 19:54:10 <AlanBell> ok, this meeting was brought forward a week to be in front of release and oggcamp
+
+ 19:54:18 <daubers> Ah, ok
+
+ 19:54:19 <brobostigon> true
+
+ 19:54:31 <AlanBell> the next meeting I was expecting would be July 7th
+
+ 19:54:35 <AlanBell> oops, no
+
+ 19:54:43 <AlanBell> June 2nd
+
+ 19:55:18 <AlanBell> so when do you want the support guidelines meeting?
+
+ 19:55:29 <brobostigon> as long as not, tuesday evening, i amhappy, i play chess tuesday evening.
+
+ 19:55:33 <daubers> I'd like to run that on the week containing the 14th
+
+ 19:56:05 <brobostigon> i am happy to go with everyone else on this one, i am very free.
+
+ 19:56:09 <daubers> Which lets it run for 2 weeks
+
+ 19:56:29 <AlanBell> UDS is the week containing the 14th
+
+ 19:56:35 <daubers> Ah, ok, so the following week
+
+ 19:56:47 <AlanBell> sounds good
+
+ 19:56:48 <yamanickill_> is there internet at uds? :-P
+
+ 19:56:59 <brobostigon> sounds fine here.
+
+ 19:57:19 <daubers> action Daubers to organise support meeting on the 19th of April
+
+ 19:57:39 <brobostigon> i am hppy.
+
+ 19:57:48 <daubers> Can we have a chair for the meeting on the 7th of July? (as that is a general meeting)
+
+ 19:58:10 <brobostigon> count me out, my internet is not reliable right now, consistently.
+
+ 19:58:14 <Yorvyk> April ??
+
+ 19:58:24 <AlanBell> danfish for chair?
+
+ 19:58:37 <daubers> sorry :( I'll correct that in the minutes, I meant may
+
+ 19:58:38 <yamanickill_> june...not july
+
+ 19:58:42 <daubers> and june
+
+ 19:58:47 <daubers> I'm rubbish at this!
+
+ 19:58:55 <yamanickill_> :-P
+
+ 19:59:06 <daubers> danfish: Would you like to volunteer?
+
+ 19:59:22 <daubers> or yamanickill_ ?
+
+ 19:59:32 <Yorvyk> 19 may is a tuesday
+
+ 19:59:56 <daubers> Yorvyk: It's a wednesday according to my calender
+
+ 20:00:20 <Daviey> We can leave it without a chair, and get a volunteer prior to the start of the next
+
+ 20:00:23 <Yorvyk> OK wring Year
+
+ 20:00:25 <yamanickill_> i'll go for it if someone tells me what to do. i've no iea what to do. this is the 2nd of june, yeah?
+
+ 20:00:53 <daubers> yamanickill_: 7th of june :)
+
+ 20:01:04 <daubers> according to AlanBell
+
+ 20:01:09 <danfish> yep, I'll voluteer - flattered!
+
+ 20:01:22 <yamanickill_> 7th is a friday...that was the july one wasn't it?
+
+ 20:01:31 <yamanickill_> wow this is confusing just now
+
+ 20:01:37 <daubers> yamanickill_: 7th is a monday
+
+ 20:01:38 <AlanBell> 2nd of June!
+
+ 20:01:42 <daubers> ok
+
+ 20:01:58 <daubers> Next meeting: 2nd of June
+
+ 20:02:08 <daubers> danfish or yamanickill_: Who'd like to do it?
+
+ 20:02:38 <yamanickill_> danfish: you go for it
+
+ 20:02:49 <yamanickill_> i'll take it some other time
+
+ 20:02:51 <daubers> [TOPIC] Next meeting 2nd of June danfish to chair
+
+ 20:03:00 <daubers> #endmeeting
+
+
+
+Generated by MeetBot 0.1.4 (http://wiki.ubuntu.com/AlanBell)
\ No newline at end of file

=== added file 'tests/ukmeet.mw.txt'
--- tests/ukmeet.mw.txt	1970-01-01 00:00:00 +0000
+++ tests/ukmeet.mw.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,80 @@
+= #ukmeet: this meeting =
+
+
+Meeting started by daubers at 19:00:00 UTC.  The full logs are available
+at tests/ukmeet.log.html .
+
+
+
+== Meeting summary ==
+
+* '''Review of action items from last meeting'''  (daubers, 19:03:33)
+** ''LINK:'' https://lists.ubuntu.com/archives/ubuntu-uk/2010-April/023790.html   (Daviey, 19:05:30)
+** ''ACTION:'' People who have achieved something in April, please place it in the report  (daubers, 19:07:11)
+** ''LINK:'' http://loco.ubuntu.com/events/team/51/detail/   (AlanBell, 19:08:16)
+** ''ACTION:'' Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool  (daubers, 19:12:34)
+** ''LINK:'' https://wiki.ubuntu.com/UKTeam/Support_Guidelines   (daubers, 19:13:01)
+
+* '''Daubers - Support Guidelines'''  (daubers, 19:13:59)
+** ''ACTION:'' Daubers to write a tal for Oggcamp on the proposed support guidelines  (daubers, 19:19:20)
+** ''ACTION:'' Daubers to send a mail to the list explaining the guidelines  (daubers, 19:24:40)
+** ''ACTION:'' Daubers to organise a meeting following the trial  (daubers, 19:24:52)
+
+* '''TBA - OGGCamp related bits'''  (daubers, 19:25:21)
+** ''LINK:'' http://ideas.oggcamp.org/ is a collection of bits of oggcamp info  (AlanBell, 19:27:41)
+
+* '''TBA - UDS related bits'''  (daubers, 19:30:47)
+
+* '''Any other business'''  (daubers, 19:34:38)
+
+* '''Release Parties'''  (daubers, 19:35:21)
+** ''LINK:'' http://www.evernote.com/pub/yamanickill/ubuntu   (yamanickill_, 19:37:48)
+** ''ACTION:'' Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid  (daubers, 19:37:53)
+** ''LINK:'' http://loco.ubuntu.com/events/team/121/detail/   (AlanBell, 19:38:34)
+** ''LINK:'' http://loco.ubuntu.com/events/team/120/detail/   (daubers, 19:45:29)
+
+* '''Any other Business'''  (daubers, 19:47:14)
+
+* '''Date of next meeting'''  (daubers, 19:51:53)
+
+* '''Next meeting 2nd of June danfish to chair'''  (daubers, 20:02:51)
+
+
+
+Meeting ended at 20:03:00 UTC.
+
+
+
+== Action items ==
+
+* People who have achieved something in April, please place it in the report
+* Daubers to either poke czajkowski to or get himself to send a mail to the -uk list this evning about the geeknic in Liverpool
+* Daubers to write a tal for Oggcamp on the proposed support guidelines
+* Daubers to send a mail to the list explaining the guidelines
+* Daubers to organise a meeting following the trial
+* Anyone in the vicinity of the Scottish Release Party to go, be sociable and enjoy themselves while celebrating Lucid
+
+
+
+== People present (lines said) ==
+
+* daubers (132)
+* brobostigon (57)
+* AlanBell (49)
+* yamanickill_ (32)
+* Daviey (17)
+* Yorvyk (11)
+* The_Toxic_Mite (9)
+* Azelphur (8)
+* BigRedS_ (4)
+* dutchie (4)
+* danfish (3)
+* freesitebuilder_ (2)
+* L0ki (2)
+* MunkyJunky (2)
+* TonyP (1)
+* funkyHat (1)
+
+
+
+Generated by MeetBot 0.1.4 (http://wiki.ubuntu.com/AlanBell)
\ No newline at end of file

=== added file 'tests/ukmeet2.1.html'
--- tests/ukmeet2.1.html	1970-01-01 00:00:00 +0000
+++ tests/ukmeet2.1.html	2012-01-28 02:35:27 +0000
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+<title>#ukmeet2 Meeting</title>
+<style type="text/css">
+/* This is for the .html in the HTML2 writer */
+body {
+    font-family: Helvetica, sans-serif;
+    font-size:14px;
+}
+h1 {
+    text-align: center;
+}
+a {
+    color:navy;
+    text-decoration: none;
+    border-bottom:1px dotted navy;
+}
+a:hover {
+    text-decoration:none;
+    border-bottom: 0;
+    color:#0000B9;
+}
+hr {
+    border: 1px solid #ccc;
+}
+/* The (nick, time) item pairs, and other body text things. */
+.details {
+    font-size: 12px;
+    font-weight:bold;
+}
+/* The 'AGREED:', 'IDEA', etc, prefix to lines. */
+.itemtype {
+    font-style: normal;    /* un-italics it */
+    font-weight: bold;
+}
+/* Example: change single item types.  Capitalized command name.
+/* .TOPIC  {  color:navy;  } */
+/* .AGREED {  color:lime;  } */
+
+</style>
+</head>
+
+<body>
+<h1>#ukmeet2 Meeting</h1>
+<span class="details">
+Meeting started by Laney at 19:34:00 UTC
+(<a href="ukmeet2.log.html">full logs</a>).</span>
+
+<br><br>
+
+
+
+<h3>Meeting summary</h3>
+<ol>
+<li><b class="TOPIC">Direction for 2009</b> <span class="details">(<a href='ukmeet2.log.html#l-37'>Laney</a>, 19:36:47)</span>
+<ol type="a">
+  <li><a
+    href="http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest";>http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest</a>
+    <span class="details">(<a href='ukmeet2.log.html#l-56'>Laney</a>,
+    19:39:48)</span></li>
+  <li><a
+    href="https://wiki.ubuntu.com/UbuntuFreeCultureShowcase";>https://wiki.ubuntu.com/UbuntuFreeCultureShowcase</a>
+    <span class="details">(<a href='ukmeet2.log.html#l-62'>Laney</a>,
+    19:40:26)</span></li>
+  <li><a
+    href="https://lists.ubuntu.com/archives/ubuntu-marketing/2008-December/thread.html";>https://lists.ubuntu.com/archives/ubuntu-marketing/2008-December/thread.html</a>
+    <span class="details">(<a href='ukmeet2.log.html#l-106'>popey</a>,
+    19:45:50)</span></li>
+  <li><a
+    href="https://wiki.ubuntu.com/UKTeam/IdeasPool";>https://wiki.ubuntu.com/UKTeam/IdeasPool</a>
+    <span class="details">(<a href='ukmeet2.log.html#l-334'>MooDoo</a>,
+    20:10:58)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">Free Media - MooDoo</b> <span class="details">(<a href='ukmeet2.log.html#l-470'>Laney</a>, 20:27:03)</span>
+<br></li>
+<li><b class="TOPIC">AOB</b> <span class="details">(<a href='ukmeet2.log.html#l-647'>Laney</a>, 20:48:01)</span>
+<ol type="a">
+  <li><a href="http://fosdem.org/";>http://fosdem.org/</a>  <span
+    class="details">(<a href='ukmeet2.log.html#l-662'>popey</a>,
+    20:49:15)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">next meeting</b> <span class="details">(<a href='ukmeet2.log.html#l-675'>Laney</a>, 20:50:39)</span>
+</li>
+</ol>
+<br><br>
+
+
+
+<span class="details">
+Meeting ended at 20:53:38 UTC
+(<a href="ukmeet2.log.html">full logs</a>).</span>
+
+<br><br>
+
+
+
+<h3>Action items</h3>
+<ol>
+  <li>(none)</li>
+</ol>
+<br><br>
+
+
+
+<h3>People present (lines said)</h3>
+<ol>
+  <li>popey (212)</li>
+  <li>Daviey (174)</li>
+  <li>MooDoo (47)</li>
+  <li>brobostigon (32)</li>
+  <li>ProfFalken (30)</li>
+  <li>Laney (27)</li>
+  <li>`Chris (19)</li>
+  <li>gord (19)</li>
+  <li>gLAsgowMonkey (17)</li>
+  <li>james_w (15)</li>
+  <li>webpigeon (14)</li>
+  <li>sheepeatingtaz (13)</li>
+  <li>daubers (12)</li>
+  <li>technolalia (11)</li>
+  <li>MootBot (9)</li>
+  <li>Ging (8)</li>
+  <li>jono (8)</li>
+  <li>andy101 (7)</li>
+  <li>franki^ (6)</li>
+  <li>kalessin1 (6)</li>
+  <li>WastePotato (5)</li>
+  <li>andylockran (4)</li>
+  <li>Nafallo (3)</li>
+  <li>DJones (2)</li>
+  <li>linux1 (1)</li>
+  <li>vixey (1)</li>
+  <li>slarty (1)</li>
+  <li>ubot5 (1)</li>
+  <li>sigh* (1)</li>
+  <li>aos101 (1)</li>
+  <li>txwikinger (1)</li>
+</ol>
+<br><br>
+
+
+
+<span class="details">Generated by <a href="http://wiki.ubuntu.com/AlanBell";>MeetBot</a> 0.1.4.</span>
+</body></html>

=== added file 'tests/ukmeet2.html'
--- tests/ukmeet2.html	1970-01-01 00:00:00 +0000
+++ tests/ukmeet2.html	2012-01-28 02:35:27 +0000
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+<title>#ukmeet2 Meeting</title>
+<style type="text/css">
+/* This is for the .html in the HTML2 writer */
+body {
+    font-family: Helvetica, sans-serif;
+    font-size:14px;
+}
+h1 {
+    text-align: center;
+}
+a {
+    color:navy;
+    text-decoration: none;
+    border-bottom:1px dotted navy;
+}
+a:hover {
+    text-decoration:none;
+    border-bottom: 0;
+    color:#0000B9;
+}
+hr {
+    border: 1px solid #ccc;
+}
+/* The (nick, time) item pairs, and other body text things. */
+.details {
+    font-size: 12px;
+    font-weight:bold;
+}
+/* The 'AGREED:', 'IDEA', etc, prefix to lines. */
+.itemtype {
+    font-style: normal;    /* un-italics it */
+    font-weight: bold;
+}
+/* Example: change single item types.  Capitalized command name.
+/* .TOPIC  {  color:navy;  } */
+/* .AGREED {  color:lime;  } */
+
+</style>
+</head>
+
+<body>
+<h1>#ukmeet2 Meeting</h1>
+<span class="details">
+Meeting started by Laney at 19:34:00 UTC
+(<a href="ukmeet2.log.html">full logs</a>).</span>
+
+<br><br>
+
+
+
+<h3>Meeting summary</h3>
+<ol>
+<li><b class="TOPIC">Direction for 2009</b> <span class="details">(<a href='ukmeet2.log.html#l-37'>Laney</a>, 19:36:47)</span>
+<ol type="a">
+  <li><a
+    href="http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest";>http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest</a>
+    <span class="details">(<a href='ukmeet2.log.html#l-56'>Laney</a>,
+    19:39:48)</span></li>
+  <li><a
+    href="https://wiki.ubuntu.com/UbuntuFreeCultureShowcase";>https://wiki.ubuntu.com/UbuntuFreeCultureShowcase</a>
+    <span class="details">(<a href='ukmeet2.log.html#l-62'>Laney</a>,
+    19:40:26)</span></li>
+  <li><a
+    href="https://lists.ubuntu.com/archives/ubuntu-marketing/2008-December/thread.html";>https://lists.ubuntu.com/archives/ubuntu-marketing/2008-December/thread.html</a>
+    <span class="details">(<a href='ukmeet2.log.html#l-106'>popey</a>,
+    19:45:50)</span></li>
+  <li><a
+    href="https://wiki.ubuntu.com/UKTeam/IdeasPool";>https://wiki.ubuntu.com/UKTeam/IdeasPool</a>
+    <span class="details">(<a href='ukmeet2.log.html#l-334'>MooDoo</a>,
+    20:10:58)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">Free Media - MooDoo</b> <span class="details">(<a href='ukmeet2.log.html#l-470'>Laney</a>, 20:27:03)</span>
+<br></li>
+<li><b class="TOPIC">AOB</b> <span class="details">(<a href='ukmeet2.log.html#l-647'>Laney</a>, 20:48:01)</span>
+<ol type="a">
+  <li><a href="http://fosdem.org/";>http://fosdem.org/</a>  <span
+    class="details">(<a href='ukmeet2.log.html#l-662'>popey</a>,
+    20:49:15)</span></li>
+</ol>
+<br></li>
+<li><b class="TOPIC">next meeting</b> <span class="details">(<a href='ukmeet2.log.html#l-675'>Laney</a>, 20:50:39)</span>
+</li>
+</ol>
+<br><br>
+
+
+
+<span class="details">
+Meeting ended at 20:53:38 UTC
+(<a href="ukmeet2.log.html">full logs</a>).</span>
+
+<br><br>
+
+
+
+<h3>Action items</h3>
+<ol>
+  <li>(none)</li>
+</ol>
+<br><br>
+
+
+
+<h3>People present (lines said)</h3>
+<ol>
+  <li>popey (212)</li>
+  <li>Daviey (174)</li>
+  <li>MooDoo (47)</li>
+  <li>brobostigon (32)</li>
+  <li>ProfFalken (30)</li>
+  <li>Laney (27)</li>
+  <li>`Chris (19)</li>
+  <li>gord (19)</li>
+  <li>gLAsgowMonkey (17)</li>
+  <li>james_w (15)</li>
+  <li>webpigeon (14)</li>
+  <li>sheepeatingtaz (13)</li>
+  <li>daubers (12)</li>
+  <li>technolalia (11)</li>
+  <li>MootBot (9)</li>
+  <li>Ging (8)</li>
+  <li>jono (8)</li>
+  <li>andy101 (7)</li>
+  <li>franki^ (6)</li>
+  <li>kalessin1 (6)</li>
+  <li>WastePotato (5)</li>
+  <li>andylockran (4)</li>
+  <li>Nafallo (3)</li>
+  <li>DJones (2)</li>
+  <li>linux1 (1)</li>
+  <li>vixey (1)</li>
+  <li>slarty (1)</li>
+  <li>ubot5 (1)</li>
+  <li>sigh* (1)</li>
+  <li>aos101 (1)</li>
+  <li>txwikinger (1)</li>
+</ol>
+<br><br>
+
+
+
+<span class="details">Generated by <a href="http://wiki.ubuntu.com/AlanBell";>MeetBot</a> 0.1.4.</span>
+</body></html>

=== added file 'tests/ukmeet2.log'
--- tests/ukmeet2.log	1970-01-01 00:00:00 +0000
+++ tests/ukmeet2.log	2012-01-28 02:35:27 +0000
@@ -0,0 +1,747 @@
+19:34:00 < Laney> #startmeeting
+19:34:40 < MootBot> Meeting started at 13:34. The chair is Laney.
+19:34:40 < MootBot> Commands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE]
+19:34:42 < Daviey> Laney: the bot isn't here, we'll do without
+19:34:45 < Laney> NO I'MNOT
+19:34:46 < brobostigon> present
+19:34:49 < webpigeon> present
+19:34:53 < MooDoo> PRESENT
+19:34:53 < popey> present
+19:34:54 < popey> haha
+19:34:55 < ProfFalken> PRESENT
+19:34:55 < Daviey> gah, i was sureit was "%"
+19:34:56 < slarty> present
+19:34:58 < DJones> PRESENT
+19:34:58 < ProfFalken> lol
+19:34:59 < Ging> PRESENT
+19:35:00 < Daviey> present
+19:35:00 < daubers> present
+19:35:02 < Laney> PRESENT
+19:35:03 < gLAsgowMonkey> PRESENT
+19:35:03 < andy101> present
+19:35:03 < linux1> present
+19:35:05 < aos101> PRESENT
+19:35:09 < WastePotato> Present
+19:35:12 < technolalia> present
+19:35:27 < Laney> oh ffs
+19:35:33 < Daviey> Okay, thanks everyone for attending
+19:35:33 < WastePotato> xD
+19:35:39 < brobostigon> :)
+19:35:39 < Daviey> This is our first meeting of 2009
+19:35:45 -!- hellocatfood [n=Antonio@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+19:35:47 < Daviey> and my first meeting as Leader / PoC
+19:36:01 < brobostigon> yay Daviey , good luck as leader
+19:36:11 < Daviey> This meeting has a rather light agenda, but i would like us to try and help make direction
+19:36:23 < Daviey> For the forthcomming year, agenda point #1
+19:36:38 < popey> # Plans for the year
+19:36:41 < Daviey> Laney: can you [TOPIC] Direction for 2009
+19:36:44 -!- Pierz [n=piers@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has quit [Remote closed the connection]
+19:36:47 < Laney> [TOPIC] Direction for 2009
+19:36:48 < MootBot> New Topic:  Direction for 2009
+19:37:19 < Daviey> Firstly, we have a great attendance at this meeting - that to me is an indication of the Loco getting larger
+19:37:24 < Daviey> which is brilliant news.
+19:37:43 < Daviey> I would like us to discuss what "can" we do this year?
+19:37:59 < Daviey> The first idea i would like to throw out in the pool, is "video"
+19:38:11 < Daviey> The linux foundation compo, and such
+19:38:18 < Daviey> Does anyone have any views on this?
+19:38:23 < popey> yes
+19:38:23 < brobostigon> i had the idea, that as i meet alot of engineers in my local, we coul start adverstising in those kinds of places aswell
+19:38:38 < Daviey> popey: shoot
+19:38:50 < brobostigon> forget what i said
+19:38:53 < popey> there are multiple options for creating videos at the moment.. the linux foundation is one..
+19:38:59 -!- Pierz [n=piers@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+19:39:03 < popey> the example content replacement is another
+19:39:13 < popey> and there is a strategy on the marketing mailing list brewing
+19:39:24 < popey> so there are lots of potential areas where "we" could focus
+19:39:25 < brobostigon> i would support an alternative method of delivery than flash
+19:39:26 < popey> my question is..
+19:39:29 < Daviey> (http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest)
+19:39:46 -!- hellocatfood [n=Antonio@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has left #ubuntu-uk []
+19:39:48 < Laney> [link] http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest
+19:39:48 < popey> should "we" do this, or should individuals, and if "we" do it, which should we focus on?
+19:39:49 < MootBot> LINK received:  http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest
+19:40:02 < Daviey> (https://wiki.ubuntu.com/UbuntuFreeCultureShowcase)
+19:40:19 < popey> yeah, the free culture showcase is a great idea, great way to get a nice video on the ubuntu cd..
+19:40:23 < popey> if the person wins :)
+19:40:26 < Laney> [link] https://wiki.ubuntu.com/UbuntuFreeCultureShowcase
+19:40:27 < MootBot> LINK received:  https://wiki.ubuntu.com/UbuntuFreeCultureShowcase
+19:40:41 < Daviey> I'm certainly a fan of a Loco team effort for the Linux foundation
+19:41:07 < popey> unfortunately many of these video things don't happen by committee
+19:41:11 < Daviey> aye
+19:41:12 < MooDoo> Daviey: the only problem i forsee is peoples location.
+19:41:13 < popey> but it needs an individual to drive it
+19:41:21 < brobostigon> what does the linux foundation do?
+19:41:29 < popey> MooDoo: if it's planned well i suspect a 30 second video could be recorded in a weekend
+19:41:29 < Daviey> I was about to say that, i'm not a video editing expert and would welcome someone to lead it that is
+19:41:35 < gLAsgowMonkey> I don't think this will work as a group
+19:41:40 < popey> brobostigon: promotes linux
+19:41:41 < Daviey> brobostigon: good question
+19:42:02 < popey> it would be a linux video - not an ubuntu video - for the linux foundation however
+19:42:11 < brobostigon> popey: thats a good aim, but also a difficult one
+19:42:21 < popey> whereas there are two opportunities for ubuntu specific videos.. the marketing team one, and the free software showcase one
+19:42:24 < Daviey> MooDoo: if LoCo members submit a snip to go to the "editor", location is irreleavnt
+19:42:34 < popey> brobostigon: not our problem, that's what they do
+19:42:40 < brobostigon> ok popey
+19:42:42 < MooDoo> Daviey: ah clever
+19:43:03 < popey> i have had a few video ideas that need storyboarding
+19:43:18 < Daviey> So, can we have a quick vote on a LoCo team effort - or individual?
+19:43:21 < popey> (nothing to do with microsoft or apple campaigns by the way)
+19:43:30 < popey> Daviey: i would say we throw it to the list
+19:43:31 < Daviey> Then discuss which ones, or both we should enter
+19:43:33 < popey> get people talking about it
+19:43:48 < Daviey> sounds wise, but we need to get a move on tho
+19:43:53 < MooDoo> +1 for a compilation of individual efforts...
+19:43:55 < popey> or.. if people are interested in the marketing team one, point them to the marketing team mailing list?
+19:43:58 < popey> rather than splinter
+19:44:06 < Laney> Right, vote time
+19:44:20 < popey> i dont think it is
+19:44:25 < Daviey> hmm, splinter - i would like to see a ubuntu-uk effort to submit to the marketting team
+19:44:50 < popey> have you seen the "whyubuntu.com" thread?
+19:44:58 < popey> they want LOTS of individual submissions
+19:45:06 < Daviey> yeah, not read all entries - but i do fear that might end with not much :S
+19:45:07 < popey> we could organise ourselves and get the whole loco to make a lot of them?
+19:45:07 < andy101> popey: which list was that on?
+19:45:21 < popey> andy101: ubuntu-marketing
+19:45:23 < Daviey> marketing
+19:45:24 < popey> !marketing
+19:45:24 < ubot5> Factoid 'marketing' not found
+19:45:27 < popey> bah
+19:45:38 < MooDoo> any one remember the small vids people made?  "hi my name is xxxx and i pronouce ubuntu - UBUNTU"?
+19:45:42 -!- imexil [n=dietmarw@xxxxxxxxxxxxxxxxxxxxxxxxxxx] has quit [Connection timed out]
+19:45:50 < popey> https://lists.ubuntu.com/archives/ubuntu-marketing/2008-December/thread.html
+19:45:51 < Daviey> yeah
+19:45:57 < popey> yeah, its like that MooDoo
+19:46:15 < popey> but they want "My name is foo and I do X with Ubuntu" or "My name is foo and I am Ubuntu"
+19:46:23 < popey> the whole I am Ubuntu is a bit ropey IMO
+19:46:27 < Daviey> okay, will kick a thread off on the LoCo list
+19:46:43 < MooDoo> sounds to much like the I'm a pc and i don't wear a shirt vids :)
+19:46:57 < popey> exactly MooDoo
+19:47:08 < Daviey> i would further propose that we have an extra ordianry meeting in say 1.5 weeks away to realy get cracking on the video stuff.
+19:47:18 < popey> yeah, a follow up to the list
+19:47:30 < popey> The Alans are working on something too
+19:47:33 < popey> "Don't Tell Bill"
+19:47:39 < Daviey> you damn Alan's
+19:47:42 < popey> might be worth talking to them too
+19:47:53 < Daviey> AlanBell1: oi
+19:48:01 < popey> TheOpenSourcerer: poke
+19:48:38 < Daviey> ah well, we'll get this moving on the list and have a dedicated meeting to direction of this in a week or 2.
+19:48:46 < MooDoo> :)
+19:48:54 < Daviey> Anyone else have anything to add to this part?
+19:49:04 < vixey> hi
+19:49:08 < sheepeatingtaz> Can I add a belated PRESENT?
+19:49:15 < Laney> is it for me?
+19:49:22  * Laney shakes the box
+19:49:27 < Daviey> heh
+19:49:29 < sheepeatingtaz> Laney: please
+19:49:33 < sheepeatingtaz> :)
+19:49:44 < popey> so thats one thing for the year ahead.. what else can we do?
+19:49:49 < Daviey> Okay, other things I have been thinking about for 2009.
+19:49:55 < MooDoo> what about expos?  lrl09?
+19:50:04 < Daviey> Camping + BBQ and hackfest in a field.
+19:50:14 < Daviey> support?
+19:50:24 < brobostigon> Daviey: interesting idea.
+19:50:30 < Daviey> schwuk and I are certainly on board. :)
+19:50:42 < Daviey> excite anybody else?
+19:50:45 < franki^> will there be intarwebs? :)
+19:50:47 < gord> pfft, theres no wifi in a field
+19:50:47 < Ging> yes
+19:50:47 < popey> yeah, I'd be up for that
+19:50:48 < daubers> +1
+19:50:52 < Ging> will there be girls?
+19:50:54 < Daviey> gord: 3g :)
+19:50:54 < brobostigon> Daviey: it depends on where it is going to be for me, but i spupport said idea.
+19:50:56 < popey> pubs have wifi
+19:51:11 < gord> if there were wifi in fields, cows would never get any work done
+19:51:18 < franki^> :D
+19:51:20 < WastePotato> o_O
+19:51:23 < kalessin1> cows work?
+19:51:28 < popey> too busy looking at hotudders.com
+19:51:30 < Daviey> gord: one reason i suggested camping, it's easy for multiple smeely geeks to be one location, rather than hotels etc
+19:51:32 < MooDoo> any local beer festivals?
+19:51:38 < andy101> that's why we don't give cows laptops
+19:52:02 < popey> the problem with beer festivals is that it becomes a social-only thing really
+19:52:07 < popey> not a hackfest
+19:52:07 < brobostigon> MooDoo: banury beer festival
+19:52:18 < brobostigon> banbury*
+19:52:31 < popey> and it excludes those who dont drink or cant drink
+19:52:33 < popey> camping doesnt
+19:52:33 -!- tuxxy__ [n=tux@unaffiliated/tuxxy/x-678465] has quit ["WeeChat 0.2.6"]
+19:52:39 < Daviey> Well it can be either, for me, it's just nice to have a real life meeting weekend - and hackfest seems constructive
+19:52:47 < Daviey> but there should be a decent supply of beer :)
+19:52:47 < brobostigon> true popey , so totally unfair on that front
+19:52:54 < popey> not totally brobostigon
+19:52:56 < andy101> what's a "hackfest" btw?
+19:53:08 < popey> andy101: people sit around with computers and do "stuff"
+19:53:14 < Daviey> andy101: bug work, fixing , reporting
+19:53:19 < Daviey> packaging, and lessons
+19:53:19 < andy101> thanks
+19:53:33 -!- Netsplit kornbluth.freenode.net <-> irc.freenode.net quits: tom_, popey, cs278|laptop, SlimeyPete, cs278, slarty, kalessin1, swat___, 
+          technolalia, vixey,  (+55 more, use /NETSPLIT to show all of them)
+19:53:33 < MooDoo> tutorials would be a good one.
+19:53:54 < gord> first time we get anything done here and we netsplit...
+19:53:55 < webpigeon> netsplit in the meeting :(
+19:54:02 < franki^> heh :|
+19:54:02 < MooDoo> *sigh*
+19:54:16 < WastePotato> Dammit.
+19:54:18 < WastePotato> Let's wait.
+19:54:28 < brobostigon> Daviey: i am going to suggest, i wil find somewhere near me, so if this does go forward,i will find a place.
+19:54:28 < gord> we are supposed to point and laugh
+19:54:29 < MooDoo> can't do anything else :)
+19:54:36 < webpigeon> i've never seen the channel so empty :P
+19:54:41 < MooDoo> brobostigon: but where are you?
+19:55:04 < gord> y'know where is a great place to camp? the creepy moors where all those teenagers got murdered
+19:55:08 -!- Netsplit over, joins: bjwebb, Moniker42, pvelkovski, Hornet, livingdaylight, spiderz, Daviey, Ging, jpds, chalcedony (+55 more)
+19:55:08 < brobostigon> MooDoo: south midlands
+19:55:16 < webpigeon> hazar!
+19:55:25 < franki^> hmm, ubuntu-related tutorials in a field sounds great to me :)
+19:55:30 < brobostigon> north oxfordshire
+19:55:30 < MooDoo> :)
+19:55:31 < Ging> how do you know we're not the splitting slackers?
+19:55:31 < popey> i suspect power would be more of an issue than connectivity
+19:55:31 < daubers> Someone must have a generator
+19:55:32 -!- pvelkovski [n=pvelkovs@77.28.56.99] has quit [Connection timed out]
+19:55:32 < Daviey> Okay, this is obviously in the early stages of thought
+19:55:34 < Daviey> but i was thinking, Summer(ry) and a 'fair' location
+19:55:34  * popey returns
+19:55:34 < Ging> maybe you could make it happen at a lan party
+19:55:34 < Daviey> so not in the Sunny south :(
+19:55:35 < popey> daubers: we could hire one :)
+19:55:35 < andy101> the south is NOT sunny!
+19:55:35 < DJones> A lot of caravan/camp sites have electric points some also have wifi access
+19:55:55 < andy101> somewhere with decent transport links (motorways, trains etc.)
+19:55:58 -!- ashley_ [n=ashley@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+19:55:59 < gord> anywhere more north than london is nice for me, my heart always sighs when people get together in london, just a tad too far/spensive to 
+                 get to
+19:56:00 < Daviey> Yeah, we'll hammer location out further in the future
+19:56:03 < popey> lets not get bogged down in the location argument
+19:56:08 < Daviey> I more wanted to gauge excitment about it
+19:56:14 < popey> it never ends and never keeps everyone happy
+19:56:22  * MooDoo shows his excitement :)
+19:56:23 < daubers> Could always do lightning talks in a field kinda thing
+19:56:29 < Daviey> exactly!
+19:56:33 < popey> yeah
+19:56:37 < Daviey> Okay, shall we move on?
+19:56:40 < sheepeatingtaz> I think it's a great idea, but won't be going. Maybe make it an annual thing?
+19:56:44 < daubers> "I'm a cow and I use Ubuntu"
+19:56:49 < popey> Daviey: is that another mailing list thread? :)
+19:56:54 < kalessin1> daubers: oh, dear
+19:56:59 < brobostigon> Daviey: ok great idea, i support it, but locatin is sensitive for me,
+19:57:04 < technolalia> Surely cows use moobuntu?
+19:57:04 < gord> dress a scarecrow up like mark shuttleworth
+19:57:06 < Daviey> popey: i guess :(
+19:57:08 -!- james_w [n=james_w@xxxxxxxxxxxxxxx] has joined #ubuntu-uk
+19:57:10 < Daviey> gord: hah
+19:57:15 < Daviey> james_w: better late than never
+19:57:19  * ProfFalken is up for that, re-wifi  in a field: psand.net have a large truck powered by a few bicycles that we could probably get hold of (see 
+          www.bristolwireless.net and search for big-green gathering...)
+19:57:20 < james_w> hello everyone
+19:57:37 < Daviey> okay, shall we move on?
+19:57:40 < MooDoo> aye
+19:57:49 < Daviey> Did anyone else have any ideas for 2009?
+19:57:49 < technolalia> is this the moment to mention the bug jam?
+19:57:56 < popey> technolalia: its on the agenda
+19:58:15 < ProfFalken> Daviey: SoftwareFreedomDay or similar?
+19:58:25 < webpigeon> Is it just me or si the wiki page a bit outdated?
+19:58:40 < webpigeon> s/si/is
+19:58:40 < popey> we already do something for software freedom day
+19:58:40 < popey> webpigeon: which wiki page?
+19:58:40 < Daviey> ProfFalken: ah, that one is always troublesome for a LoCo - being our stretched outness (sp?)
+19:58:44 < gord> feel free to fix it up webpigeon, its a wiki
+19:58:45 < webpigeon> popey, ubuntu-uk
+19:59:00 < Daviey> personally, id like to see people helping a LUG Software Freedom Day
+19:59:00 < popey> webpigeon: it _is_ a wiki! :)
+19:59:03 < webpigeon> i never know what to put on it, hence why i dont :)
+19:59:07 < Daviey> perhaps i'm being shortsighted?
+19:59:10 < ProfFalken> Daviey: fiar enough, however it Ubuntu-UK teamed up with regional LUGs...
+19:59:11 < popey> Daviey: we have done something for the last two years!
+19:59:19 < Daviey> popey: as a LoCo?
+19:59:22 < popey> yes
+19:59:34 < Daviey> I thought that was more HantsLUG? :)
+19:59:39 < ProfFalken> lol
+19:59:44 < popey> bracknell isnt in hants :p
+19:59:56 < Daviey> heh
+19:59:58 < popey> Alan Cocks does it on behalf of Ubuntu UK LoCo
+20:00:20 < popey> we certainly promote it around the lugs in the area
+20:00:25  * Daviey did not know this.  But in any sense i wouldn't exactly call Bracknell a national effort :)
+20:00:31 < MooDoo> ooo t-shirts, stickers [sorry got carried away]
+20:00:37 < popey> but he's the only person (I'm aware of) within the LoCo who did anything
+20:00:46 < popey> Daviey: feel free to volunteer to do something next year then
+20:00:53 < popey> he's the only person who got off his arse and did something
+20:01:12 < Daviey> well this is what i'm saying, is it something the LoCo should be doing, or supporting the LoCo members to help do a LUG one?
+20:01:15 -!- `Chris [n=chris@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+20:01:26 < popey> I guess both are appropriate.
+20:01:36 < popey> other locos do it
+20:01:41 < `Chris> PRESENT - Or am I too late?
+20:01:43 < popey> and other lugs do it
+20:01:45 < sheepeatingtaz> I for one would feel more inclined to help a loco one
+20:01:57 < Ging> `Chris, i thought you were boycotting
+20:02:13  * ProfFalken would look to ubuntu-uk for literature etc to support a regional effort (a number of LUGs/other interested parties)
+20:02:18 < Daviey> However, our LoCo has a larger geographical spread than some of the US (example) LoCo's making it more difficult
+20:02:34 < popey> i dont think we can use that as a reason not to do stuff
+20:02:39 < sheepeatingtaz> Daviey: maybe more difficult to get together
+20:02:45 < Daviey> no, i'm not saying that
+20:02:47 < popey> we are nowhere near as large as many other countries
+20:02:47 < sheepeatingtaz> but not to do *something*
+20:02:49 < popey> france?
+20:03:03 < ProfFalken> Daviey: if we could put together a "resource pack" for other groups to use on SFD should they wish, then I think that would be a 
+                       start?
+20:03:09 < Daviey> What i am saying is better support LoCo members to do a LUG  /regional one
+20:03:20 < Ging> they have much better trains than us in france
+20:03:21 < popey> as opposed to a national event?
+20:03:25 < Daviey> ie, more local LUG members than spread out LoCo members
+20:03:30 < Daviey> Well hwo can it be national?
+20:03:40 < gord> i don't really get the point of this, its not like anyone is saying that the loco is barred from doing anything. if people from the loco 
+                 want to get together to do something, great! if people from the loco want to get together with their LUG and do something, great! its not 
+                 like the loco can choose for us
+20:03:51 < popey> indeed
+20:04:00 < Daviey> I would suggest we provide better literature and CD's (maybe) to LoCo members for regional SFD's
+20:04:06 < popey> just because something happens in bracknell, doesn't stop it being a national event
+20:04:23 < ProfFalken> resource pack could include CDs, Flyers, Stickers etc that are Ubuntu-UK orientated but underpin SFD's principles
+20:04:31 < Daviey> ^ +1
+20:04:34 < gLAsgowMonkey> Daviey I don't think we have a clear contact for requesting this
+20:04:46 < popey> requesting what?
+20:04:54 < gord> yeah it would be great if we could set up some sort of pack that (pdfs, that kinda thing) that people could use, offical ubuntu-uk software 
+                 freedom day literature
+20:04:55 < gLAsgowMonkey> media, stickers
+20:05:06 < popey> gLAsgowMonkey: i thought ProfFalken was propsing we create it
+20:05:15  * Daviey also
+20:05:43 < gLAsgowMonkey> popey: yes but a pack but at present there is no clear contact for "stuff"
+20:05:51 < Daviey> we have no "stuff" :)
+20:05:59 < gLAsgowMonkey> so having a pack is not much use unless requests are funnelled
+20:06:00 < MooDoo> and Daviey is the poc :)
+20:06:00 < ProfFalken> popey: correct (although I'm sure someone could poke Jono and see what he can provide?)
+20:06:05 < Daviey> CD's sure, but adhoc from shipit is often easier
+20:06:13 < popey> we can get conference packs from canonical
+20:06:20 < popey> i have done for Alan when he runs the SFD in Bracknell
+20:06:33 < popey> providing t-shirts, caps, CDs, stickers
+20:06:42 < popey> we could improve / add-to that
+20:06:46 < gord> we don't need to provide CD's or really anything else generic. we need to provide UK specific stuff surely? people can get the other stuff 
+                 themself?
+20:07:03 < Daviey> I was about to say, you don't get enough - so we should look at making ther eown
+20:07:08  * Daviey points towards the French LoCo's mugs
+20:07:08 < popey> we can get the CDs gord that's not a problem, and Alan Cocks has created some leaflets
+20:07:18 < Daviey> However, then we get down the £££ disucssion
+20:07:44  * ProfFalken wonders if the material already exists on various people's HDDs and just needs collating...
+20:07:44 < gLAsgowMonkey> so we get any help from canonical
+20:07:54 < popey> gLAsgowMonkey: we do get some yes
+20:07:56 < gLAsgowMonkey> I mean marketing and promotion
+20:08:01 -!- windmill [n=windmill@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+20:08:15 < Daviey> gLAsgowMonkey: Not as much as would be required
+20:08:45 < Daviey> So the LoCo marketting department should be repushed :)
+20:08:46 < gLAsgowMonkey> I understand it's a finite resource
+20:09:11 < Daviey> okay, can we try and bring this point to a head?
+20:09:12 < popey> what if we tied the bbq/hackfest up with something like SFD, rather than have multiple events through the year with low turnout, throw all 
+                  our eggs at that one event?
+20:09:18 < gLAsgowMonkey> Daviey: I think so, but in turn we *may* need some help
+20:09:20 < ProfFalken> popey: :o)
+20:09:23 < popey> given SFD is on a saturday
+20:09:39 < brobostigon> popey: good idea
+20:09:41 < MooDoo> why not just make it a bring a bottle, burger and distro day :)
+20:09:42 < Daviey> popey: that is certainlly an idea
+20:09:47 < Ging> what is SFD ?
+20:09:50 < gord> careful, we might end up with egg on our faces... actually i agree but puns are fun.
+20:09:53 < Daviey> software freedom day
+20:09:55 < ProfFalken> MooDoo: lol, sounds great
+20:09:57 < webpigeon> Ging, http://softwarefreedomday.org/
+20:10:07 < daubers> Uhhh... is being in a field in september a good idea?
+20:10:15 < daubers> it has a tendency to be fairly damp
+20:10:16 < Daviey> okay, this point needs further discussion - and a thread would be excellant
+20:10:17 < kalessin1> duabers: good point
+20:10:22 < Daviey> popey: can you do that one?
+20:10:26 < popey> yes
+20:10:36 < Daviey> cool, lets move on
+20:10:44 < Daviey> anything else for 2009 direction?
+20:10:49 < popey> more contribution!
+20:10:58 < MooDoo> https://wiki.ubuntu.com/UKTeam/IdeasPool
+20:11:00 < popey> we need to be more active at doing bugs / launchpad answers / forums etc
+20:11:02 < daubers> popey: Wasn't there some event happening in Farnborough?
+20:11:13 < popey> daubers: yeah, not heard back yet, supposed to be early august
+20:11:25 < daubers> ok
+20:11:34 < Daviey> The UK is doing "pretty" well for 5-a-day
+20:11:59 < Daviey> With the current stats, i can't see a reason the UK couldn't be #1 for a team effort
+20:11:59 < MooDoo> Daviey: is there a select few or is it all across the board?
+20:11:59 < popey> only as individuals
+20:12:02  * sheepeatingtaz needs to read up on 5 a day
+20:12:05 < popey> there is no concerted effort
+20:12:17 < popey> we dont pimp is on the list
+20:12:19 < Daviey> txwikinger is doing really well IIRC
+20:12:21 < popey> we dont pimp the stats for example
+20:12:22 < Daviey> and james_w
+20:12:34 < popey> i was thinking more of non-canonical people :)
+20:12:34 < Laney> I never submit to it ¬_¬
+20:12:36  * Laney is naughty
+20:12:38 < daubers> How long does the 5-a day take? half an hour?
+20:12:39 < txwikinger> o/ Daviey
+20:13:07 < Daviey> daubers: i'm not the best person to ask tbh - my 5-a-day isn't quite 5-a-day :)
+20:13:15 < gord> I do the answer tracker when i can, but that doesn't get as much kudos, it can also use peoples support
+20:13:16 < Daviey> txwikinger: \o
+20:13:18  * ProfFalken is going self-employed this month and hopes to be able to add to launchpad soon...
+20:14:01 < Daviey> How can the LoCo try and get people more into 5-a-day and LP answers?
+20:14:02 < popey> so basically I'd like to see us have a co-ordinated effort towards contribution in our team
+20:14:02 < webpigeon> "We are currently planning our presence at LugRadioLive2008." -.-
+20:14:12 < popey> webpigeon: edit it
+20:14:22 < webpigeon> popey, I will do :P
+20:14:31 < james_w> we could run some sessions on how to get started with 5-a-day, answers, etc.
+20:14:39 < Daviey> james_w: online or RL?
+20:14:52 < popey> that leads nicely onto the subject of bug jam really?
+20:14:55 < james_w> Daviey: either would work, but I was thinking online
+20:14:57 < ProfFalken> Daviey: either - I really don't know where to start... :o(
+20:15:00 < james_w> we can do RL ones at the bug jam
+20:15:06 < gLAsgowMonkey> we could tie that in with a "how to file a bug report" and related topics
+20:15:07 < Daviey> woot!
+20:15:23 < Daviey> Shall we move onto the topic of "Bug Jam"?
+20:15:24 < gord> How can you have a co-ordinated effort? I mean maybe we could have a bot use the LP api to print out the highest rollers on 5aday and such 
+                 but apart from that i don't really see how
+20:15:52 < james_w> the classroom team would certainly appreciate any sessions we can run
+20:15:58 < popey> gord: talking about it helps
+20:16:24 < Daviey> agreed.
+20:16:44 < popey> Daviey: we could do a talk at the LUG about it?
+20:16:45 < Daviey> The global bug jam is soon, and that could be something we do - lessons in RL?
+20:17:21 < popey> As I said on the mailing list I'd be happy to host a Bug Jam event here at my place
+20:17:24 -!- Alasdair_ [n=alasdair@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+20:17:32 < technolalia> popey: where is your place?
+20:17:34 < james_w> for the bug jam we could start off with an overview, and then "mentor" people as needed through the rest of the event
+20:17:39 < popey> farnborough, hampshire
+20:17:39 < Daviey> popey: Sure, i'm always twitchy about Ubuntu specific stuff asking for extra effort at a LUG.  The other disto'ers don't like it for some 
+                   reason :S
+20:17:45 < Daviey> But certainly a good idea
+20:17:52 < popey> yeah, bar stewards
+20:18:00 < popey> james_w: agreed
+20:18:01 < `Chris> Daviey: I would love to participate in the bugjam, I've been trying to work out how to use the 5aday thing from D. Holbach. I'm kinda 
+                   lost, where would the lessons be situated?
+20:18:20 < james_w> I could probably get a venue in Bristol for the bug jam
+20:18:23 < Daviey> `Chris: well what we are currently thinking both Online and somewhere rea life
+20:18:24 < popey> I was thinking that at the bug jam we could have groups of people, some doing bugs, some doing launchpad answers, others learning..
+20:18:34 < james_w> popey: good idea
+20:18:34 < Daviey> popey has offered his gaff as a host
+20:18:45 < ProfFalken> james_w: +1 for bristol, I'm in Monmouth
+20:18:50 < popey> we should put a page up about venues
+20:18:53 < Daviey> james_w: what sort of venue are you thinking?
+20:18:59 < popey> how many people they can take, facilities etc
+20:19:09  * `Chris is located in S. Wales, nothing over 100miles preferably :)
+20:19:16 < technolalia> I could contact the University of Westminster, as used by GLLUG
+20:19:21 < Daviey> we could certainly have >1 venue- but it would be a shame to split the experts too much - especailly two in southern england
+20:19:24 < popey> that would be cool technolalia
+20:19:31 < popey> Daviey: i disagree
+20:19:33 < `Chris> How far away (in time) is the bugjam?
+20:19:38 < popey> i think we _should_ split the experts up
+20:19:44 < popey> divide and conquer
+20:19:49 < Daviey> popey: two venues in southern england?
+20:19:52 < andylockran> howdy
+20:19:56 < james_w> Daviey: there's a couple of caffs, but you obviously have to keep buying things. There's an independenct cinema, the center used my 
+                    Bristol wireless, the uni, a couple of other places.
+20:19:57  * Daviey considers Bristol and Farn' quite close together
+20:20:12 < james_w> Daviey: I've not done much research, but there must be somewhere.
+20:20:14 < Daviey> andylockran: o/
+20:20:30 < james_w> I'm more than happy to go to popey's, I just wanted to provide him with an alternative.
+20:20:31 < popey> how about we ask people to go forth and find locations - promptly
+20:20:31  * sheepeatingtaz would offer his house, but a) it's small, and b) it's in the north :)
+20:20:37  * andylockran is just catching up on your conversation..
+20:20:43 < Laney> The London one sounds like the best option to me
+20:20:52 < popey> and come back in 1-2 weekas
+20:20:52 < ProfFalken> Daviey: ??? Bristol is 45 minutes from my house, farnborough is 2.5 hrs...
+20:21:06 < Daviey> okay, james_w can you hit the mailing list - asking for people to find location and add them to the wiki?
+20:21:13 < popey> lets not start getting into location arguments :)
+20:21:17 < james_w> Daviey: yes sir!
+20:21:21 < popey> lets just all start finding decent places and pitch them :)
+20:21:23 < ProfFalken> james_w: st. werbs would be good...
+20:21:42 < `Chris> I have a few decent places around S. Wales thanks to the SWLUG but no-one is from around here, is there?
+20:21:48 < kalessin1> ProfFalken: I second that
+20:21:51 < popey> yeah, a wiki page detailing the basics of a location would be good
+20:21:58 -!- jono_ [n=jono@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+20:21:59 < brobostigon> good idea popey
+20:22:01 < ProfFalken> `Chris: I'm in Monmouth...
+20:22:09 < Daviey> ---> moving on
+20:22:11 < ProfFalken> but SWLUG covers a fscking huge area...
+20:22:12 < gLAsgowMonkey> can we move on please
+20:22:26 < technolalia> Chris: I have family in Swansea
+20:22:35 < Daviey> okay, we also need to gauage attendance at A or multiple venus
+20:22:52 < Daviey> we'll do this in a future meeting + mailing list + wiki (or similar page)
+20:22:57 < brobostigon> or even alternative venues
+20:23:02 < popey> yeah, it might actually make sense to have multiple (even in the south) as some people are not willing to travel far or have low budgets
+20:23:08 < popey> when is the bug jam?
+20:23:17 < popey> its not long
+20:23:23 < james_w> end of Feb
+20:23:27 < james_w> 20thish
+20:23:32 < Daviey> sure, we'll need to do this "at large" - wiki showing locations and possible attendance of names
+20:23:33 < popey> thats not long at all
+20:23:42 < Daviey> but we can't do that directly in this meeting
+20:23:45 < popey> I'd say we need to discuss this weekly as it's so soon
+20:23:47 < Daviey> err does it clash with FOSDEM?
+20:23:50 < popey> no
+20:23:54 < popey> thats at the start of feb
+20:24:01 < popey> 7/8
+20:24:06 < Daviey> cool
+20:24:22 < webpigeon> Do we know where everyone is?
+20:24:25 < Daviey> Okay, i think we already have enough content for a meeting next week!
+20:24:38 < popey> i think we should!
+20:24:45 < brobostigon> yep
+20:24:52 < Daviey> i think we should hit this topic on the mailing list, a formulate an attack plan next week
+20:24:53 < popey> get this stuff all tidied up
+20:25:29 < Daviey> But Bug Jam looks like it will happend, and sounds like it'll be successful!
+20:25:32 < Daviey> (woot)
+20:25:39 -!- jono_ is now known as jono
+20:25:39 < Daviey> happen*
+20:25:46 < popey> yay
+20:25:54 < Daviey> okay, move on?
+20:25:57 < popey> yeah
+20:26:02 < `Chris> Last question!
+20:26:07 < `Chris> Venues - We bring own laptops yeah?
+20:26:08 < Daviey> `Chris: go
+20:26:15 < Daviey> hell yeah :)
+20:26:19 < `Chris> ok cool
+20:26:31 < Daviey> Laney: next topic?
+20:26:34 < popey> unless people have spare/extra ones
+20:26:43 < Laney> MooDoo: Are you here?
+20:26:46  * popey pokes MooDoo 
+20:26:53 < MooDoo> PRESENT :)
+20:27:03 < Laney> [topic] Free Media - MooDoo
+20:27:04 < MootBot> New Topic:  Free Media - MooDoo
+20:27:06 < Laney> take it away
+20:27:32 < MooDoo> ok my idea is a simple one, create a group of individuals who would at a request ship ubuntu media - 
+                   https://wiki.ubuntu.com/UKTeam/IdeasPool/Free_Media
+20:27:42 < MooDoo> our own volunteer version of shipit :)
+20:28:14 < Daviey> MooDoo: would it offer more than shipit?
+20:28:29 < `Chris> Daviey: I assume faster delivery times is a bonus
+20:28:36 < brobostigon> MooDoo: do you envision small amounts, or the large amounts lugs and those kind of people would need?
+20:28:42 < MooDoo> Daviey: depends on the individual, as cost would be a factor
+20:29:06 < MooDoo> brobostigon: i'm really thinking low volume, as it's voluteer based.
+20:29:16 < sheepeatingtaz> I can't see that there would be a huge demand
+20:29:19 < Daviey> Sounds like a worthy idea
+20:29:20 < popey> worth noting that the loco team leader can order a large number of CDs, and could distribute them somehow
+20:29:24 < brobostigon> so 5 or less?
+20:29:30 < gord> I'm not sure how much need there is for this, its not like the mailing list is full of people requesting cd's or anything and surely if 
+                 someone requested on the mailing list now someone would be kind enough?
+20:29:44 < popey> I suspect it's more useful for people outside the UK
+20:30:01 < sheepeatingtaz> In which case, probably won't be much quicker than shipit?
+20:30:07 < MooDoo> brobostigon: depends on the person, how much they want to spend on cd's and postag,
+20:30:09 < popey> we (loco council) have already been asked if it's possible for other LoCos to send them (in Africa) some CDs or a hard disk containing a 
+                  copy of the current repo
+20:30:31 < brobostigon> MooDoo: and ofcourse a donation if its a larger amount?
+20:30:31  * ProfFalken used shippit a while back.  it took nearly six weeks for the CDs to arrive...
+20:30:33 < MooDoo> sheepeatingtaz: shipit sends next day?
+20:30:38 < popey> someone asked me on irc a while ago where they could get some CDs and I posted some to them
+20:30:52 < MooDoo> popey: that's exactly what i'm on about.
+20:31:00 < MooDoo> a form on the wiki for instance
+20:31:06 < popey> i just put them in a jiffy bag and posted them - didnt cost much
+20:31:07 < sheepeatingtaz> MooDoo: not sure, last time I ordered from shipit, I got within a week or so
+20:31:13 -!- sam___ [n=Sami__@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+20:31:14 < MooDoo> the details would be sorted later.
+20:31:15 < popey> sheepeatingtaz: thats rare
+20:31:27 < kalessin1> one problem
+20:31:30 < sheepeatingtaz> popey: last time, good couple of years ago...
+20:31:40 < MooDoo> kalessin1: go :)
+20:31:41 < gLAsgowMonkey> would it be possible to shit some boxes of branded cd's to these volunteers
+20:31:44 < popey> maybe we could improve the system we have already?
+20:31:49 < popey> I have 100 or so CDs here
+20:31:56 < kalessin1> anyone looking for media would probably find shipit long before this
+20:31:59 < Daviey> gLAsgowMonkey: i guess you mean ship* :)
+20:32:03 < ProfFalken> gLAsgowMonkey: may I suggest s/shit/shift ?
+20:32:05 < ProfFalken> :oP
+20:32:06 < gLAsgowMonkey> haha
+20:32:09 < MooDoo> kalessin1: it's in addition not a replacement
+20:32:21 < gLAsgowMonkey> it's the aspire keyboard honest
+20:32:24 < gord> there are resellers that will send you ubuntu cd's for like a pound as well, quickly
+20:32:41 < MooDoo> gord: i'd do it free if it got ubuntu out there.
+20:32:47 < ProfFalken> does anyone know where ship-it is based location wise? is there a ship-it depot in the UK?
+20:32:55 < popey> holland
+20:33:11 < Daviey> Something that could be a concern - what if demand for this is huge, and we can't keep up at all?
+20:33:23 < gord> its not the cost that i'm going on about, im just not sure if there is a need
+20:33:24 < MooDoo> Daviey: disclaimers
+20:33:44 < popey> it comes on the cover of linux format regularly
+20:33:51 < ProfFalken> ok, so is it worth talking to canonical and see if there can be a few volunteers in the UK that hold a stock of CDs and post out 
+                       requests to the the UK from the UK under the shipit "brand"?
+20:33:53 < MooDoo> it's only volunteer based, i'd have no problem posting a cd to someone free if they requested it
+20:33:56 < `Chris> gord: I often need to use shipit, since my internet is rather slow and my burner is messed up to say the least
+20:34:08 < popey> ProfFalken: i do have some stock
+20:34:17 < popey> this is what I've been saying for the last 10 mins :)
+20:34:24 < popey> the loco team leader gets to order in bulk
+20:34:30  * Daviey has an amount, not sure how many
+20:34:36 < popey> I ordered and got some intrepid CDs very soon after release
+20:34:41 < popey> I received about 350 of them
+20:34:48 < brobostigon> wow
+20:35:14 < popey> some have gone to events, others I have posted out, others I have given to people running events (like Alan Cocks at SFD)
+20:35:14 < MooDoo> well there is a wiki page on the idea, https://wiki.ubuntu.com/UKTeam/IdeasPool/Free_Media :)
+20:35:26 < andylockran> other thing is whether should send the LTS releases, or any release ?
+20:35:40 < Daviey> LTS or latest IMO
+20:35:48 < brobostigon> andylockran: u would be happier with just LTS
+20:35:52 < MooDoo> andylockran: you would as a volunteer let people know what you're willing to send out....you may have all versions
+20:35:53 < brobostigon> i *
+20:35:55  * franki^ loves LTS <3
+20:36:07 < popey> i still have some LTS ones that have the ssh vuln on!
+20:36:09 < `Chris> Same as Daviey however, there are some who would need LTS since they just want a stable distro without the need for major updating
+20:36:10 < popey> nobody wants them
+20:36:11  * ProfFalken proposes that we use the LoCo POC to order the CDs for a number of volunteers that then send them out to those that request them
+20:36:24  * ProfFalken uses latest for desktop, LTS for server...
+20:36:25 < popey> ProfFalken: who pays?
+20:36:28 < Daviey> haha
+20:36:37 < popey> I will happy post out the ones I have
+20:36:40 < Daviey> ProfFalken: I won't be able to post multiple cd's per day :(
+20:36:42 < popey> in batches of 5 for example
+20:36:57 < MooDoo> i will happily pay for a box of cd's every few months for ubuntu cd's for requests.
+20:37:04 < popey> i doubt you'd get that many requests Daviey
+20:37:04 < `Chris> 5 is a moderate number but can be changed depending on the demand?
+20:37:06  * ProfFalken realises that his proposal might not be such a good idea after all...
+20:37:32 < popey> multiples of 5 keeps it easy, 5 keeps it cheap
+20:37:41 < popey> you can post them in a "large letter" envelope
+20:37:41 < Daviey> popey: This will be turning it from a LoCo team effort which MooDoo is suggesting, to the PoC / Leaders responsibility
+20:37:43 < popey> for low cost
+20:37:49 < popey> not entirely Daviey
+20:38:00 < MooDoo> i'm thinking that someone emails a form, the form details get posted to a page and a volunteer see it and makes it as "i'll send that"
+20:38:06 < popey> if you got 350 from canonical, and then give them out in batches of 50, then they gave them out in batches of 10 etc
+20:38:17 < popey> then it's only a little initial work for you
+20:38:20 < Daviey> ahh, this isn't what ProfFalken suggested :)
+20:38:28 < popey> oh yeah
+20:38:33 < `Chris> Ideas can evolve :)
+20:38:34 < popey> but you would only do it right when they arrive
+20:38:51 < Daviey> sounds promising
+20:38:52 < popey> thats 7 parcels once every 6 months
+20:38:54 < popey> maybe twice
+20:38:56 < popey> no more
+20:39:12 < popey> I would happily kick the ball off by packaging up the ones I have
+20:39:19 < Daviey> however, is it any more benefical than the volunteer ordering 10 fromshipit and just holding them for requests?
+20:39:19 < popey> and sending them to 2 or 3 people to then pass out
+20:39:34 < popey> that I am unsure of
+20:39:39 < popey> but you get them faster than anyone else
+20:39:41 < MooDoo> Daviey: i've only been able to order 1 at a time
+20:39:48 < popey> I got intrepid CDs _real_ quick after release
+20:39:49 < Daviey> oh
+20:39:58 < `Chris> With shipit, you need to order 1 at a time, unless you want delays and having to explain yourself to Canonical
+20:40:09  * Daviey glares at jono :)
+20:40:12 < popey> date on the box is 4/11/08
+20:40:16 < popey> when did intrepid release?
+20:40:18 < popey> 25/10?
+20:40:24 < jono> hey Daviey :)
+20:40:26 < Daviey> yeah that is quick
+20:40:34 < popey> he's had his coffee
+20:40:38 < jono> hehe
+20:40:42 < jono> hows thing chaps?
+20:40:44 < jono> things
+20:40:44 < Daviey> jono: didn't expect you to be here
+20:40:54 < jono> Daviey, :)
+20:40:56 < Daviey> jono: just having a LoCo meeting
+20:40:57 < jono> just working
+20:41:00 < jono> oh nice :)
+20:41:16 < popey> i would say I've got about 100 or so CDs left
+20:41:24 < Daviey> talking about direction, bug jam and helping shipit from a volunteer idea
+20:41:27 < Daviey> jono: ^
+20:41:28 < popey> mostly desktop, some server some kubuntu
+20:41:42  * Daviey has far too many server ones
+20:42:02 < jono> Daviey, cool :)
+20:42:20 < popey> shame they dont make the 64-bit desktop ones any more :(
+20:42:25 < Daviey> okay, do people think this will really help Ubuntu 'get out there'?
+20:42:26 < MooDoo> i would like a box of 100 desktop cd's then when someone wants a copy from a form [or similar] on the ubuntu-uk site, can post it to 
+                   them....simple as  :)
+20:42:27 < popey> seems shortsighted to me
+20:42:34 -!- Pierz [n=piers@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has quit [Remote closed the connection]
+20:42:47 < gord> you really think you'll get though 100 cd's in 6 months?
+20:42:53 < popey> yes gord
+20:42:58 < popey> i get throughj 300 or so
+20:43:04 < popey> events as well as postage
+20:43:10 < MooDoo> gord: not the point, the point is that i can send a cd when someone wants them
+20:43:22 < MooDoo> how many i have left is irrelevant
+20:43:31 < popey> its a potential waste
+20:43:44 < Nafallo> I bought 1GB usb sticks from the Canonical store and put intrepid on them... given one to my flatmate already :-)
+20:43:46 < `Chris> Humanity to others I guess does include environmental effects too?
+20:43:48 < popey> as are the ones sat on the floor next to me if nobody orders them by april
+20:43:48 < Daviey> ofc, we have to justify using them efficently
+20:44:03 < gord> y'know you can get 4gb usb sticks from the canonical store with ubuntu pre-loaded onto them Nafallo
+20:44:16 < `Chris> Nafallo: Only £2 extra
+20:44:31 < Nafallo> gord: doesn't look as good and neat IMO :-)
+20:44:38 < Daviey> okaaaaaaaaaaaaaaaaay, who would volunteer to do this?
+20:44:45 < Daviey> MooDoo
+20:44:53 -!- Pierz [n=piers@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has joined #ubuntu-uk
+20:44:55 < Nafallo> also, the 1GB ones are on special pricing at the moment ;-)
+20:45:05 < MooDoo> :)
+20:45:07 < Daviey> Nafallo: (topic)
+20:45:09 < brobostigon> popey: well any fairly recent cds, that nobody wants anymore, i am happy to take of anyoes hands, and try to distribute and market.
+20:45:20 < popey> ok
+20:45:21 < popey> tell you what
+20:45:30 < popey> I'll mail the list and let people know how many I have left
+20:45:31 < Daviey> chaps... can we close this topic first?
+20:45:35 < popey> i am
+20:45:44 < popey> trying to :)
+20:45:49 < popey> and we will see what the demand is?
+20:45:53 < brobostigon> ok popey :) good idea
+20:45:54 < Daviey> oh, very trying as ever popey :)
+20:45:59 < popey> I will post them out in batches of 5/10 or whatever
+20:46:16 < popey> and if there is sufficient demand than kick MooDoo into action and Daviey can order another box and jono can okay it :)
+20:46:31 < Daviey> sounds suitable to me :)
+20:46:32 < popey> Epic \/\/in
+20:46:35 < Daviey> can we all go home now?
+20:46:37 < Daviey> :)
+20:46:55 < daubers> Daviey: Don't we need an aob?
+20:46:56 < popey> MooDoo: sound fair?
+20:47:09 < Daviey> daubers: yep, and plan next meeting
+20:47:12 < MooDoo> popey: +1 :)
+20:47:16 < popey> and action points from this one :)
+20:47:28 < brobostigon> :)
+20:47:43 -!- Pierz [n=piers@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has quit [Remote closed the connection]
+20:47:44 < popey> i propose the next meeting for Wednesday 15th Jan @ 19:30
+20:47:48 < Daviey> okay, topic shift - Laney :)
+20:47:58 < Laney> that's it
+20:48:01 < Daviey> erm
+20:48:01 < Laney> [topic] AOB
+20:48:02 < MootBot> New Topic:  AOB
+20:48:21 < webpigeon> AOB?
+20:48:23 < Daviey> nothing from me :)
+20:48:26 < andylockran> Any Other Business
+20:48:27 < Daviey> Any other Biz
+20:48:33 < webpigeon> ah :)
+20:48:38 < gLAsgowMonkey> AOCB
+20:48:38 < technolalia> fosdem: who's going?
+20:48:48 < popey> o/ possibly
+20:48:49 < Daviey> most likely  o/
+20:48:56 < technolalia> definately - all booked
+20:49:06 < Daviey> technolalia: eurotunnel?
+20:49:08 < technolalia> there will be an ubuntu stall of some sort there, I've heard
+20:49:08 < franki^> what is fosdem? :)
+20:49:15 < popey> http://fosdem.org/
+20:49:16 < MootBot> LINK received:  http://fosdem.org/
+20:49:16 < Daviey> technolalia: there normally is
+20:49:18 < popey> conference brussels
+20:49:26 < james_w> o/
+20:49:30 < technolalia> and various people from other loco teams are planning to attend
+20:49:44 < technolalia> yes, eurotunnel
+20:50:06 < Daviey> good -o
+20:50:13 < Daviey> any other AOB?
+20:50:27 < MooDoo> sorry chaps, got to go, baby calling......
+20:50:33 < Daviey> great, Laney topic shift - next meeting
+20:50:34 < Laney> going, going
+20:50:36 < popey> can i ask that whoever puts the info on the wiki - can then outline the action items?
+20:50:39 < Laney> [topic] next meeting
+20:50:40 < MootBot> New Topic:  next meeting
+20:50:44 -!- MooDoo [n=paulmell@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] has left #ubuntu-uk []
+20:50:45 < popey> so we know exactly whats happening?
+20:50:54 < popey> 20:47:44 < popey> i propose the next meeting for Wednesday 15th Jan @ 19:30
+20:51:00 < Daviey> popey: sounds like the chair'sjob :)
+20:51:10  * popey nudges Laney :)
+20:51:12 < `Chris> By the next meeting, find Bugjam venues?
+20:51:13 < Laney> rofl
+20:51:22 < `Chris> Especially find out about Wifi access? D:
+20:51:33 < Laney> yes, that sounds like a fine date
+20:51:39 < ProfFalken> popey: Weds 14th or Thurs 15th? ;o)
+20:51:46 < Daviey> i might suggest next Sunday might be long enough for the mailing list threads to get moving
+20:51:49 < brobostigon> i am happy with the 15th
+20:51:50 < popey> stupid kde calendar
+20:51:56 < popey> wednesday 14th!
+20:51:59 < Laney> If people can post their threads in the next couple of days
+20:52:20 < popey> ok
+20:52:29 < daubers> I won't have any interwebs for the next week, but will try and attend through other means
+20:52:36 < popey> next sunday is good by me too
+20:52:40 < popey> quicker the better IMO
+20:52:47 < gLAsgowMonkey> +1 for Sunday
+20:52:50 < popey> +1
+20:52:52 < Laney> one week from today?
+20:52:53 < Daviey> +1 Sunday
+20:52:54 < ProfFalken> +1
+20:52:55 < `Chris> +1 Wednesday
+20:52:55 < Daviey> yes
+20:53:23 < Laney> done
+20:53:25 < Daviey> okay, indifference prevails :)
+20:53:27 < popey> \o/
+20:53:30 < popey> wooot
+20:53:31 < Laney> thanks for attending all
+20:53:38 < Laney> #endmeeting
+20:53:38 < MootBot> Meeting finished at 14:53.
+

=== added file 'tests/ukmeet2.log.html'
--- tests/ukmeet2.log.html	1970-01-01 00:00:00 +0000
+++ tests/ukmeet2.log.html	2012-01-28 02:35:27 +0000
@@ -0,0 +1,734 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+<title>#ukmeet2 log</title>
+<style type="text/css">
+/* For the .log.html */
+pre { /*line-height: 125%;*/
+      white-space: pre-wrap; }
+body { background: #f0f0f0; }
+
+body .tm  { color: #007020 }                      /* time */
+body .nk  { color: #062873; font-weight: bold }   /* nick, regular */
+body .nka { color: #007020; font-weight: bold }  /* action nick */
+body .ac  { color: #00A000 }                      /* action line */
+body .hi  { color: #4070a0 }                 /* hilights */
+/* Things to make particular MeetBot commands stick out */
+body .topic     { color: #007020; font-weight: bold }
+body .topicline { color: #000080; font-weight: bold }
+body .cmd       { color: #007020; font-weight: bold }
+body .cmdline  { font-weight: bold }
+
+</style>
+</head>
+
+<body>
+<pre><a name="l-1"></a><span class="tm">19:34:00</span><span class="nk"> &lt;Laney&gt;</span> <span class="cmd">#startmeeting</span><span class="cmdline"></span>
+<a name="l-2"></a><span class="tm">19:34:40</span><span class="nk"> &lt;MootBot&gt;</span> Meeting started at 13:34. The chair is Laney.
+<a name="l-3"></a><span class="tm">19:34:40</span><span class="nk"> &lt;MootBot&gt;</span> Commands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE]
+<a name="l-4"></a><span class="tm">19:34:42</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">Laney:</span> the bot isn't here, we'll do without
+<a name="l-5"></a><span class="tm">19:34:45</span><span class="nk"> &lt;Laney&gt;</span> NO I'MNOT
+<a name="l-6"></a><span class="tm">19:34:46</span><span class="nk"> &lt;brobostigon&gt;</span> present
+<a name="l-7"></a><span class="tm">19:34:49</span><span class="nk"> &lt;webpigeon&gt;</span> present
+<a name="l-8"></a><span class="tm">19:34:53</span><span class="nk"> &lt;MooDoo&gt;</span> PRESENT
+<a name="l-9"></a><span class="tm">19:34:53</span><span class="nk"> &lt;popey&gt;</span> present
+<a name="l-10"></a><span class="tm">19:34:54</span><span class="nk"> &lt;popey&gt;</span> haha
+<a name="l-11"></a><span class="tm">19:34:55</span><span class="nk"> &lt;ProfFalken&gt;</span> PRESENT
+<a name="l-12"></a><span class="tm">19:34:55</span><span class="nk"> &lt;Daviey&gt;</span> gah, i was sureit was "%"
+<a name="l-13"></a><span class="tm">19:34:56</span><span class="nk"> &lt;slarty&gt;</span> present
+<a name="l-14"></a><span class="tm">19:34:58</span><span class="nk"> &lt;DJones&gt;</span> PRESENT
+<a name="l-15"></a><span class="tm">19:34:58</span><span class="nk"> &lt;ProfFalken&gt;</span> lol
+<a name="l-16"></a><span class="tm">19:34:59</span><span class="nk"> &lt;Ging&gt;</span> PRESENT
+<a name="l-17"></a><span class="tm">19:35:00</span><span class="nk"> &lt;Daviey&gt;</span> present
+<a name="l-18"></a><span class="tm">19:35:00</span><span class="nk"> &lt;daubers&gt;</span> present
+<a name="l-19"></a><span class="tm">19:35:02</span><span class="nk"> &lt;Laney&gt;</span> PRESENT
+<a name="l-20"></a><span class="tm">19:35:03</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> PRESENT
+<a name="l-21"></a><span class="tm">19:35:03</span><span class="nk"> &lt;andy101&gt;</span> present
+<a name="l-22"></a><span class="tm">19:35:03</span><span class="nk"> &lt;linux1&gt;</span> present
+<a name="l-23"></a><span class="tm">19:35:05</span><span class="nk"> &lt;aos101&gt;</span> PRESENT
+<a name="l-24"></a><span class="tm">19:35:09</span><span class="nk"> &lt;WastePotato&gt;</span> Present
+<a name="l-25"></a><span class="tm">19:35:12</span><span class="nk"> &lt;technolalia&gt;</span> present
+<a name="l-26"></a><span class="tm">19:35:27</span><span class="nk"> &lt;Laney&gt;</span> oh ffs
+<a name="l-27"></a><span class="tm">19:35:33</span><span class="nk"> &lt;Daviey&gt;</span> Okay, thanks everyone for attending
+<a name="l-28"></a><span class="tm">19:35:33</span><span class="nk"> &lt;WastePotato&gt;</span> xD
+<a name="l-29"></a><span class="tm">19:35:39</span><span class="nk"> &lt;brobostigon&gt;</span> :)
+<a name="l-30"></a><span class="tm">19:35:39</span><span class="nk"> &lt;Daviey&gt;</span> This is our first meeting of 2009
+<a name="l-31"></a><span class="tm">19:35:47</span><span class="nk"> &lt;Daviey&gt;</span> and my first meeting as Leader / PoC
+<a name="l-32"></a><span class="tm">19:36:01</span><span class="nk"> &lt;brobostigon&gt;</span> yay Daviey , good luck as leader
+<a name="l-33"></a><span class="tm">19:36:11</span><span class="nk"> &lt;Daviey&gt;</span> This meeting has a rather light agenda, but i would like us to try and help make direction
+<a name="l-34"></a><span class="tm">19:36:23</span><span class="nk"> &lt;Daviey&gt;</span> For the forthcomming year, agenda point #1
+<a name="l-35"></a><span class="tm">19:36:38</span><span class="nk"> &lt;popey&gt;</span> # Plans for the year
+<a name="l-36"></a><span class="tm">19:36:41</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">Laney:</span> can you [TOPIC] Direction for 2009
+<a name="l-37"></a><span class="tm">19:36:47</span><span class="nk"> &lt;Laney&gt;</span> [TOPIC] Direction for 2009
+<a name="l-38"></a><span class="tm">19:36:48</span><span class="nk"> &lt;MootBot&gt;</span> New Topic:  Direction for 2009
+<a name="l-39"></a><span class="tm">19:37:19</span><span class="nk"> &lt;Daviey&gt;</span> Firstly, we have a great attendance at this meeting - that to me is an indication of the Loco getting larger
+<a name="l-40"></a><span class="tm">19:37:24</span><span class="nk"> &lt;Daviey&gt;</span> which is brilliant news.
+<a name="l-41"></a><span class="tm">19:37:43</span><span class="nk"> &lt;Daviey&gt;</span> I would like us to discuss what "can" we do this year?
+<a name="l-42"></a><span class="tm">19:37:59</span><span class="nk"> &lt;Daviey&gt;</span> The first idea i would like to throw out in the pool, is "video"
+<a name="l-43"></a><span class="tm">19:38:11</span><span class="nk"> &lt;Daviey&gt;</span> The linux foundation compo, and such
+<a name="l-44"></a><span class="tm">19:38:18</span><span class="nk"> &lt;Daviey&gt;</span> Does anyone have any views on this?
+<a name="l-45"></a><span class="tm">19:38:23</span><span class="nk"> &lt;popey&gt;</span> yes
+<a name="l-46"></a><span class="tm">19:38:23</span><span class="nk"> &lt;brobostigon&gt;</span> i had the idea, that as i meet alot of engineers in my local, we coul start adverstising in those kinds of places aswell
+<a name="l-47"></a><span class="tm">19:38:38</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> shoot
+<a name="l-48"></a><span class="tm">19:38:50</span><span class="nk"> &lt;brobostigon&gt;</span> forget what i said
+<a name="l-49"></a><span class="tm">19:38:53</span><span class="nk"> &lt;popey&gt;</span> there are multiple options for creating videos at the moment.. the linux foundation is one..
+<a name="l-50"></a><span class="tm">19:39:03</span><span class="nk"> &lt;popey&gt;</span> the example content replacement is another
+<a name="l-51"></a><span class="tm">19:39:13</span><span class="nk"> &lt;popey&gt;</span> and there is a strategy on the marketing mailing list brewing
+<a name="l-52"></a><span class="tm">19:39:24</span><span class="nk"> &lt;popey&gt;</span> so there are lots of potential areas where "we" could focus
+<a name="l-53"></a><span class="tm">19:39:25</span><span class="nk"> &lt;brobostigon&gt;</span> i would support an alternative method of delivery than flash
+<a name="l-54"></a><span class="tm">19:39:26</span><span class="nk"> &lt;popey&gt;</span> my question is..
+<a name="l-55"></a><span class="tm">19:39:29</span><span class="nk"> &lt;Daviey&gt;</span> (http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest)
+<a name="l-56"></a><span class="tm">19:39:48</span><span class="nk"> &lt;Laney&gt;</span> [link] http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest
+<a name="l-57"></a><span class="tm">19:39:48</span><span class="nk"> &lt;popey&gt;</span> should "we" do this, or should individuals, and if "we" do it, which should we focus on?
+<a name="l-58"></a><span class="tm">19:39:49</span><span class="nk"> &lt;MootBot&gt;</span> LINK received:  http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest
+<a name="l-59"></a><span class="tm">19:40:02</span><span class="nk"> &lt;Daviey&gt;</span> (https://wiki.ubuntu.com/UbuntuFreeCultureShowcase)
+<a name="l-60"></a><span class="tm">19:40:19</span><span class="nk"> &lt;popey&gt;</span> yeah, the free culture showcase is a great idea, great way to get a nice video on the ubuntu cd..
+<a name="l-61"></a><span class="tm">19:40:23</span><span class="nk"> &lt;popey&gt;</span> if the person wins :)
+<a name="l-62"></a><span class="tm">19:40:26</span><span class="nk"> &lt;Laney&gt;</span> [link] https://wiki.ubuntu.com/UbuntuFreeCultureShowcase
+<a name="l-63"></a><span class="tm">19:40:27</span><span class="nk"> &lt;MootBot&gt;</span> LINK received:  https://wiki.ubuntu.com/UbuntuFreeCultureShowcase
+<a name="l-64"></a><span class="tm">19:40:41</span><span class="nk"> &lt;Daviey&gt;</span> I'm certainly a fan of a Loco team effort for the Linux foundation
+<a name="l-65"></a><span class="tm">19:41:07</span><span class="nk"> &lt;popey&gt;</span> unfortunately many of these video things don't happen by committee
+<a name="l-66"></a><span class="tm">19:41:11</span><span class="nk"> &lt;Daviey&gt;</span> aye
+<a name="l-67"></a><span class="tm">19:41:12</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">Daviey:</span> the only problem i forsee is peoples location.
+<a name="l-68"></a><span class="tm">19:41:13</span><span class="nk"> &lt;popey&gt;</span> but it needs an individual to drive it
+<a name="l-69"></a><span class="tm">19:41:21</span><span class="nk"> &lt;brobostigon&gt;</span> what does the linux foundation do?
+<a name="l-70"></a><span class="tm">19:41:29</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">MooDoo:</span> if it's planned well i suspect a 30 second video could be recorded in a weekend
+<a name="l-71"></a><span class="tm">19:41:29</span><span class="nk"> &lt;Daviey&gt;</span> I was about to say that, i'm not a video editing expert and would welcome someone to lead it that is
+<a name="l-72"></a><span class="tm">19:41:35</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> I don't think this will work as a group
+<a name="l-73"></a><span class="tm">19:41:40</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">brobostigon:</span> promotes linux
+<a name="l-74"></a><span class="tm">19:41:41</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">brobostigon:</span> good question
+<a name="l-75"></a><span class="tm">19:42:02</span><span class="nk"> &lt;popey&gt;</span> it would be a linux video - not an ubuntu video - for the linux foundation however
+<a name="l-76"></a><span class="tm">19:42:11</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">popey:</span> thats a good aim, but also a difficult one
+<a name="l-77"></a><span class="tm">19:42:21</span><span class="nk"> &lt;popey&gt;</span> whereas there are two opportunities for ubuntu specific videos.. the marketing team one, and the free software showcase one
+<a name="l-78"></a><span class="tm">19:42:24</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">MooDoo:</span> if LoCo members submit a snip to go to the "editor", location is irreleavnt
+<a name="l-79"></a><span class="tm">19:42:34</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">brobostigon:</span> not our problem, that's what they do
+<a name="l-80"></a><span class="tm">19:42:40</span><span class="nk"> &lt;brobostigon&gt;</span> ok popey
+<a name="l-81"></a><span class="tm">19:42:42</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">Daviey:</span> ah clever
+<a name="l-82"></a><span class="tm">19:43:03</span><span class="nk"> &lt;popey&gt;</span> i have had a few video ideas that need storyboarding
+<a name="l-83"></a><span class="tm">19:43:18</span><span class="nk"> &lt;Daviey&gt;</span> So, can we have a quick vote on a LoCo team effort - or individual?
+<a name="l-84"></a><span class="tm">19:43:21</span><span class="nk"> &lt;popey&gt;</span> (nothing to do with microsoft or apple campaigns by the way)
+<a name="l-85"></a><span class="tm">19:43:30</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">Daviey:</span> i would say we throw it to the list
+<a name="l-86"></a><span class="tm">19:43:31</span><span class="nk"> &lt;Daviey&gt;</span> Then discuss which ones, or both we should enter
+<a name="l-87"></a><span class="tm">19:43:33</span><span class="nk"> &lt;popey&gt;</span> get people talking about it
+<a name="l-88"></a><span class="tm">19:43:48</span><span class="nk"> &lt;Daviey&gt;</span> sounds wise, but we need to get a move on tho
+<a name="l-89"></a><span class="tm">19:43:53</span><span class="nk"> &lt;MooDoo&gt;</span> +1 for a compilation of individual efforts...
+<a name="l-90"></a><span class="tm">19:43:55</span><span class="nk"> &lt;popey&gt;</span> or.. if people are interested in the marketing team one, point them to the marketing team mailing list?
+<a name="l-91"></a><span class="tm">19:43:58</span><span class="nk"> &lt;popey&gt;</span> rather than splinter
+<a name="l-92"></a><span class="tm">19:44:06</span><span class="nk"> &lt;Laney&gt;</span> Right, vote time
+<a name="l-93"></a><span class="tm">19:44:20</span><span class="nk"> &lt;popey&gt;</span> i dont think it is
+<a name="l-94"></a><span class="tm">19:44:25</span><span class="nk"> &lt;Daviey&gt;</span> hmm, splinter - i would like to see a ubuntu-uk effort to submit to the marketting team
+<a name="l-95"></a><span class="tm">19:44:50</span><span class="nk"> &lt;popey&gt;</span> have you seen the "whyubuntu.com" thread?
+<a name="l-96"></a><span class="tm">19:44:58</span><span class="nk"> &lt;popey&gt;</span> they want LOTS of individual submissions
+<a name="l-97"></a><span class="tm">19:45:06</span><span class="nk"> &lt;Daviey&gt;</span> yeah, not read all entries - but i do fear that might end with not much :S
+<a name="l-98"></a><span class="tm">19:45:07</span><span class="nk"> &lt;popey&gt;</span> we could organise ourselves and get the whole loco to make a lot of them?
+<a name="l-99"></a><span class="tm">19:45:07</span><span class="nk"> &lt;andy101&gt;</span> <span class="hi">popey:</span> which list was that on?
+<a name="l-100"></a><span class="tm">19:45:21</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">andy101:</span> ubuntu-marketing
+<a name="l-101"></a><span class="tm">19:45:23</span><span class="nk"> &lt;Daviey&gt;</span> marketing
+<a name="l-102"></a><span class="tm">19:45:24</span><span class="nk"> &lt;popey&gt;</span> !marketing
+<a name="l-103"></a><span class="tm">19:45:24</span><span class="nk"> &lt;ubot5&gt;</span> Factoid 'marketing' not found
+<a name="l-104"></a><span class="tm">19:45:27</span><span class="nk"> &lt;popey&gt;</span> bah
+<a name="l-105"></a><span class="tm">19:45:38</span><span class="nk"> &lt;MooDoo&gt;</span> any one remember the small vids people made?  "hi my name is xxxx and i pronouce ubuntu - UBUNTU"?
+<a name="l-106"></a><span class="tm">19:45:50</span><span class="nk"> &lt;popey&gt;</span> https://lists.ubuntu.com/archives/ubuntu-marketing/2008-December/thread.html
+<a name="l-107"></a><span class="tm">19:45:51</span><span class="nk"> &lt;Daviey&gt;</span> yeah
+<a name="l-108"></a><span class="tm">19:45:57</span><span class="nk"> &lt;popey&gt;</span> yeah, its like that MooDoo
+<a name="l-109"></a><span class="tm">19:46:15</span><span class="nk"> &lt;popey&gt;</span> but they want "My name is foo and I do X with Ubuntu" or "My name is foo and I am Ubuntu"
+<a name="l-110"></a><span class="tm">19:46:23</span><span class="nk"> &lt;popey&gt;</span> the whole I am Ubuntu is a bit ropey IMO
+<a name="l-111"></a><span class="tm">19:46:27</span><span class="nk"> &lt;Daviey&gt;</span> okay, will kick a thread off on the LoCo list
+<a name="l-112"></a><span class="tm">19:46:43</span><span class="nk"> &lt;MooDoo&gt;</span> sounds to much like the I'm a pc and i don't wear a shirt vids :)
+<a name="l-113"></a><span class="tm">19:46:57</span><span class="nk"> &lt;popey&gt;</span> exactly MooDoo
+<a name="l-114"></a><span class="tm">19:47:08</span><span class="nk"> &lt;Daviey&gt;</span> i would further propose that we have an extra ordianry meeting in say 1.5 weeks away to realy get cracking on the video stuff.
+<a name="l-115"></a><span class="tm">19:47:18</span><span class="nk"> &lt;popey&gt;</span> yeah, a follow up to the list
+<a name="l-116"></a><span class="tm">19:47:30</span><span class="nk"> &lt;popey&gt;</span> The Alans are working on something too
+<a name="l-117"></a><span class="tm">19:47:33</span><span class="nk"> &lt;popey&gt;</span> "Don't Tell Bill"
+<a name="l-118"></a><span class="tm">19:47:39</span><span class="nk"> &lt;Daviey&gt;</span> you damn Alan's
+<a name="l-119"></a><span class="tm">19:47:42</span><span class="nk"> &lt;popey&gt;</span> might be worth talking to them too
+<a name="l-120"></a><span class="tm">19:47:53</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">AlanBell1:</span> oi
+<a name="l-121"></a><span class="tm">19:48:01</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">TheOpenSourcerer:</span> poke
+<a name="l-122"></a><span class="tm">19:48:38</span><span class="nk"> &lt;Daviey&gt;</span> ah well, we'll get this moving on the list and have a dedicated meeting to direction of this in a week or 2.
+<a name="l-123"></a><span class="tm">19:48:46</span><span class="nk"> &lt;MooDoo&gt;</span> :)
+<a name="l-124"></a><span class="tm">19:48:54</span><span class="nk"> &lt;Daviey&gt;</span> Anyone else have anything to add to this part?
+<a name="l-125"></a><span class="tm">19:49:04</span><span class="nk"> &lt;vixey&gt;</span> hi
+<a name="l-126"></a><span class="tm">19:49:08</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> Can I add a belated PRESENT?
+<a name="l-127"></a><span class="tm">19:49:15</span><span class="nk"> &lt;Laney&gt;</span> is it for me?
+<a name="l-128"></a><span class="tm">19:49:22 </span><span class="nka">* Laney</span> <span class="ac">shakes the box</span>
+<a name="l-129"></a><span class="tm">19:49:27</span><span class="nk"> &lt;Daviey&gt;</span> heh
+<a name="l-130"></a><span class="tm">19:49:29</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> <span class="hi">Laney:</span> please
+<a name="l-131"></a><span class="tm">19:49:33</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> :)
+<a name="l-132"></a><span class="tm">19:49:44</span><span class="nk"> &lt;popey&gt;</span> so thats one thing for the year ahead.. what else can we do?
+<a name="l-133"></a><span class="tm">19:49:49</span><span class="nk"> &lt;Daviey&gt;</span> Okay, other things I have been thinking about for 2009.
+<a name="l-134"></a><span class="tm">19:49:55</span><span class="nk"> &lt;MooDoo&gt;</span> what about expos?  lrl09?
+<a name="l-135"></a><span class="tm">19:50:04</span><span class="nk"> &lt;Daviey&gt;</span> Camping + BBQ and hackfest in a field.
+<a name="l-136"></a><span class="tm">19:50:14</span><span class="nk"> &lt;Daviey&gt;</span> support?
+<a name="l-137"></a><span class="tm">19:50:24</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">Daviey:</span> interesting idea.
+<a name="l-138"></a><span class="tm">19:50:30</span><span class="nk"> &lt;Daviey&gt;</span> schwuk and I are certainly on board. :)
+<a name="l-139"></a><span class="tm">19:50:42</span><span class="nk"> &lt;Daviey&gt;</span> excite anybody else?
+<a name="l-140"></a><span class="tm">19:50:45</span><span class="nk"> &lt;franki^&gt;</span> will there be intarwebs? :)
+<a name="l-141"></a><span class="tm">19:50:47</span><span class="nk"> &lt;gord&gt;</span> pfft, theres no wifi in a field
+<a name="l-142"></a><span class="tm">19:50:47</span><span class="nk"> &lt;Ging&gt;</span> yes
+<a name="l-143"></a><span class="tm">19:50:47</span><span class="nk"> &lt;popey&gt;</span> yeah, I'd be up for that
+<a name="l-144"></a><span class="tm">19:50:48</span><span class="nk"> &lt;daubers&gt;</span> +1
+<a name="l-145"></a><span class="tm">19:50:52</span><span class="nk"> &lt;Ging&gt;</span> will there be girls?
+<a name="l-146"></a><span class="tm">19:50:54</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">gord:</span> 3g :)
+<a name="l-147"></a><span class="tm">19:50:54</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">Daviey:</span> it depends on where it is going to be for me, but i spupport said idea.
+<a name="l-148"></a><span class="tm">19:50:56</span><span class="nk"> &lt;popey&gt;</span> pubs have wifi
+<a name="l-149"></a><span class="tm">19:51:11</span><span class="nk"> &lt;gord&gt;</span> if there were wifi in fields, cows would never get any work done
+<a name="l-150"></a><span class="tm">19:51:18</span><span class="nk"> &lt;franki^&gt;</span> :D
+<a name="l-151"></a><span class="tm">19:51:20</span><span class="nk"> &lt;WastePotato&gt;</span> o_O
+<a name="l-152"></a><span class="tm">19:51:23</span><span class="nk"> &lt;kalessin1&gt;</span> cows work?
+<a name="l-153"></a><span class="tm">19:51:28</span><span class="nk"> &lt;popey&gt;</span> too busy looking at hotudders.com
+<a name="l-154"></a><span class="tm">19:51:30</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">gord:</span> one reason i suggested camping, it's easy for multiple smeely geeks to be one location, rather than hotels etc
+<a name="l-155"></a><span class="tm">19:51:32</span><span class="nk"> &lt;MooDoo&gt;</span> any local beer festivals?
+<a name="l-156"></a><span class="tm">19:51:38</span><span class="nk"> &lt;andy101&gt;</span> that's why we don't give cows laptops
+<a name="l-157"></a><span class="tm">19:52:02</span><span class="nk"> &lt;popey&gt;</span> the problem with beer festivals is that it becomes a social-only thing really
+<a name="l-158"></a><span class="tm">19:52:07</span><span class="nk"> &lt;popey&gt;</span> not a hackfest
+<a name="l-159"></a><span class="tm">19:52:07</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">MooDoo:</span> banury beer festival
+<a name="l-160"></a><span class="tm">19:52:18</span><span class="nk"> &lt;brobostigon&gt;</span> banbury*
+<a name="l-161"></a><span class="tm">19:52:31</span><span class="nk"> &lt;popey&gt;</span> and it excludes those who dont drink or cant drink
+<a name="l-162"></a><span class="tm">19:52:33</span><span class="nk"> &lt;popey&gt;</span> camping doesnt
+<a name="l-163"></a><span class="tm">19:52:39</span><span class="nk"> &lt;Daviey&gt;</span> Well it can be either, for me, it's just nice to have a real life meeting weekend - and hackfest seems constructive
+<a name="l-164"></a><span class="tm">19:52:47</span><span class="nk"> &lt;Daviey&gt;</span> but there should be a decent supply of beer :)
+<a name="l-165"></a><span class="tm">19:52:47</span><span class="nk"> &lt;brobostigon&gt;</span> true popey , so totally unfair on that front
+<a name="l-166"></a><span class="tm">19:52:54</span><span class="nk"> &lt;popey&gt;</span> not totally brobostigon
+<a name="l-167"></a><span class="tm">19:52:56</span><span class="nk"> &lt;andy101&gt;</span> what's a "hackfest" btw?
+<a name="l-168"></a><span class="tm">19:53:08</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">andy101:</span> people sit around with computers and do "stuff"
+<a name="l-169"></a><span class="tm">19:53:14</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">andy101:</span> bug work, fixing , reporting
+<a name="l-170"></a><span class="tm">19:53:19</span><span class="nk"> &lt;Daviey&gt;</span> packaging, and lessons
+<a name="l-171"></a><span class="tm">19:53:19</span><span class="nk"> &lt;andy101&gt;</span> thanks
+<a name="l-172"></a><span class="tm">19:53:33</span><span class="nk"> &lt;MooDoo&gt;</span> tutorials would be a good one.
+<a name="l-173"></a><span class="tm">19:53:54</span><span class="nk"> &lt;gord&gt;</span> first time we get anything done here and we netsplit...
+<a name="l-174"></a><span class="tm">19:53:55</span><span class="nk"> &lt;webpigeon&gt;</span> netsplit in the meeting :(
+<a name="l-175"></a><span class="tm">19:54:02</span><span class="nk"> &lt;franki^&gt;</span> heh :|
+<a name="l-176"></a><span class="tm">19:54:02</span><span class="nk"> &lt;MooDoo&gt;</span> *sigh*
+<a name="l-177"></a><span class="tm">18:03:01 </span><span class="nka">* sigh*</span> <span class="ac"></span>
+<a name="l-178"></a><span class="tm">19:54:16</span><span class="nk"> &lt;WastePotato&gt;</span> Dammit.
+<a name="l-179"></a><span class="tm">19:54:18</span><span class="nk"> &lt;WastePotato&gt;</span> Let's wait.
+<a name="l-180"></a><span class="tm">19:54:28</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">Daviey:</span> i am going to suggest, i wil find somewhere near me, so if this does go forward,i will find a place.
+<a name="l-181"></a><span class="tm">19:54:28</span><span class="nk"> &lt;gord&gt;</span> we are supposed to point and laugh
+<a name="l-182"></a><span class="tm">19:54:29</span><span class="nk"> &lt;MooDoo&gt;</span> can't do anything else :)
+<a name="l-183"></a><span class="tm">19:54:36</span><span class="nk"> &lt;webpigeon&gt;</span> i've never seen the channel so empty :P
+<a name="l-184"></a><span class="tm">19:54:41</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">brobostigon:</span> but where are you?
+<a name="l-185"></a><span class="tm">19:55:04</span><span class="nk"> &lt;gord&gt;</span> y'know where is a great place to camp? the creepy moors where all those teenagers got murdered
+<a name="l-186"></a><span class="tm">19:55:08</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">MooDoo:</span> south midlands
+<a name="l-187"></a><span class="tm">19:55:16</span><span class="nk"> &lt;webpigeon&gt;</span> hazar!
+<a name="l-188"></a><span class="tm">19:55:25</span><span class="nk"> &lt;franki^&gt;</span> hmm, ubuntu-related tutorials in a field sounds great to me :)
+<a name="l-189"></a><span class="tm">19:55:30</span><span class="nk"> &lt;brobostigon&gt;</span> north oxfordshire
+<a name="l-190"></a><span class="tm">19:55:30</span><span class="nk"> &lt;MooDoo&gt;</span> :)
+<a name="l-191"></a><span class="tm">19:55:31</span><span class="nk"> &lt;Ging&gt;</span> how do you know we're not the splitting slackers?
+<a name="l-192"></a><span class="tm">19:55:31</span><span class="nk"> &lt;popey&gt;</span> i suspect power would be more of an issue than connectivity
+<a name="l-193"></a><span class="tm">19:55:31</span><span class="nk"> &lt;daubers&gt;</span> Someone must have a generator
+<a name="l-194"></a><span class="tm">19:55:32</span><span class="nk"> &lt;Daviey&gt;</span> Okay, this is obviously in the early stages of thought
+<a name="l-195"></a><span class="tm">19:55:34</span><span class="nk"> &lt;Daviey&gt;</span> but i was thinking, Summer(ry) and a 'fair' location
+<a name="l-196"></a><span class="tm">19:55:34 </span><span class="nka">* popey</span> <span class="ac">returns</span>
+<a name="l-197"></a><span class="tm">19:55:34</span><span class="nk"> &lt;Ging&gt;</span> maybe you could make it happen at a lan party
+<a name="l-198"></a><span class="tm">19:55:34</span><span class="nk"> &lt;Daviey&gt;</span> so not in the Sunny south :(
+<a name="l-199"></a><span class="tm">19:55:35</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">daubers:</span> we could hire one :)
+<a name="l-200"></a><span class="tm">19:55:35</span><span class="nk"> &lt;andy101&gt;</span> the south is NOT sunny!
+<a name="l-201"></a><span class="tm">19:55:35</span><span class="nk"> &lt;DJones&gt;</span> A lot of caravan/camp sites have electric points some also have wifi access
+<a name="l-202"></a><span class="tm">19:55:55</span><span class="nk"> &lt;andy101&gt;</span> somewhere with decent transport links (motorways, trains etc.)
+<a name="l-203"></a><span class="tm">19:55:59</span><span class="nk"> &lt;gord&gt;</span> anywhere more north than london is nice for me, my heart always sighs when people get together in london, just a tad too far/spensive to
+<a name="l-204"></a><span class="tm">19:56:00</span><span class="nk"> &lt;Daviey&gt;</span> Yeah, we'll hammer location out further in the future
+<a name="l-205"></a><span class="tm">19:56:03</span><span class="nk"> &lt;popey&gt;</span> lets not get bogged down in the location argument
+<a name="l-206"></a><span class="tm">19:56:08</span><span class="nk"> &lt;Daviey&gt;</span> I more wanted to gauge excitment about it
+<a name="l-207"></a><span class="tm">19:56:14</span><span class="nk"> &lt;popey&gt;</span> it never ends and never keeps everyone happy
+<a name="l-208"></a><span class="tm">19:56:22 </span><span class="nka">* MooDoo</span> <span class="ac">shows his excitement :)</span>
+<a name="l-209"></a><span class="tm">19:56:23</span><span class="nk"> &lt;daubers&gt;</span> Could always do lightning talks in a field kinda thing
+<a name="l-210"></a><span class="tm">19:56:29</span><span class="nk"> &lt;Daviey&gt;</span> exactly!
+<a name="l-211"></a><span class="tm">19:56:33</span><span class="nk"> &lt;popey&gt;</span> yeah
+<a name="l-212"></a><span class="tm">19:56:37</span><span class="nk"> &lt;Daviey&gt;</span> Okay, shall we move on?
+<a name="l-213"></a><span class="tm">19:56:40</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> I think it's a great idea, but won't be going. Maybe make it an annual thing?
+<a name="l-214"></a><span class="tm">19:56:44</span><span class="nk"> &lt;daubers&gt;</span> "I'm a cow and I use Ubuntu"
+<a name="l-215"></a><span class="tm">19:56:49</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">Daviey:</span> is that another mailing list thread? :)
+<a name="l-216"></a><span class="tm">19:56:54</span><span class="nk"> &lt;kalessin1&gt;</span> <span class="hi">daubers:</span> oh, dear
+<a name="l-217"></a><span class="tm">19:56:59</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">Daviey:</span> ok great idea, i support it, but locatin is sensitive for me,
+<a name="l-218"></a><span class="tm">19:57:04</span><span class="nk"> &lt;technolalia&gt;</span> Surely cows use moobuntu?
+<a name="l-219"></a><span class="tm">19:57:04</span><span class="nk"> &lt;gord&gt;</span> dress a scarecrow up like mark shuttleworth
+<a name="l-220"></a><span class="tm">19:57:06</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> i guess :(
+<a name="l-221"></a><span class="tm">19:57:10</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">gord:</span> hah
+<a name="l-222"></a><span class="tm">19:57:15</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">james_w:</span> better late than never
+<a name="l-223"></a><span class="tm">19:57:19 </span><span class="nka">* ProfFalken</span> <span class="ac">is up for that, re-wifi  in a field: psand.net have a large truck powered by a few bicycles that we could probably get hold of (see</span>
+<a name="l-224"></a><span class="tm">19:57:20</span><span class="nk"> &lt;james_w&gt;</span> hello everyone
+<a name="l-225"></a><span class="tm">19:57:37</span><span class="nk"> &lt;Daviey&gt;</span> okay, shall we move on?
+<a name="l-226"></a><span class="tm">19:57:40</span><span class="nk"> &lt;MooDoo&gt;</span> aye
+<a name="l-227"></a><span class="tm">19:57:49</span><span class="nk"> &lt;Daviey&gt;</span> Did anyone else have any ideas for 2009?
+<a name="l-228"></a><span class="tm">19:57:49</span><span class="nk"> &lt;technolalia&gt;</span> is this the moment to mention the bug jam?
+<a name="l-229"></a><span class="tm">19:57:56</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">technolalia:</span> its on the agenda
+<a name="l-230"></a><span class="tm">19:58:15</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">Daviey:</span> SoftwareFreedomDay or similar?
+<a name="l-231"></a><span class="tm">19:58:25</span><span class="nk"> &lt;webpigeon&gt;</span> Is it just me or si the wiki page a bit outdated?
+<a name="l-232"></a><span class="tm">19:58:40</span><span class="nk"> &lt;webpigeon&gt;</span> s/si/is
+<a name="l-233"></a><span class="tm">19:58:40</span><span class="nk"> &lt;popey&gt;</span> we already do something for software freedom day
+<a name="l-234"></a><span class="tm">19:58:40</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">webpigeon:</span> which wiki page?
+<a name="l-235"></a><span class="tm">19:58:40</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">ProfFalken:</span> ah, that one is always troublesome for a LoCo - being our stretched outness (sp?)
+<a name="l-236"></a><span class="tm">19:58:44</span><span class="nk"> &lt;gord&gt;</span> feel free to fix it up webpigeon, its a wiki
+<a name="l-237"></a><span class="tm">19:58:45</span><span class="nk"> &lt;webpigeon&gt;</span> popey, ubuntu-uk
+<a name="l-238"></a><span class="tm">19:59:00</span><span class="nk"> &lt;Daviey&gt;</span> personally, id like to see people helping a LUG Software Freedom Day
+<a name="l-239"></a><span class="tm">19:59:00</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">webpigeon:</span> it _is_ a wiki! :)
+<a name="l-240"></a><span class="tm">19:59:03</span><span class="nk"> &lt;webpigeon&gt;</span> i never know what to put on it, hence why i dont :)
+<a name="l-241"></a><span class="tm">19:59:07</span><span class="nk"> &lt;Daviey&gt;</span> perhaps i'm being shortsighted?
+<a name="l-242"></a><span class="tm">19:59:10</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">Daviey:</span> fiar enough, however it Ubuntu-UK teamed up with regional LUGs...
+<a name="l-243"></a><span class="tm">19:59:11</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">Daviey:</span> we have done something for the last two years!
+<a name="l-244"></a><span class="tm">19:59:19</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> as a LoCo?
+<a name="l-245"></a><span class="tm">19:59:22</span><span class="nk"> &lt;popey&gt;</span> yes
+<a name="l-246"></a><span class="tm">19:59:34</span><span class="nk"> &lt;Daviey&gt;</span> I thought that was more HantsLUG? :)
+<a name="l-247"></a><span class="tm">19:59:39</span><span class="nk"> &lt;ProfFalken&gt;</span> lol
+<a name="l-248"></a><span class="tm">19:59:44</span><span class="nk"> &lt;popey&gt;</span> bracknell isnt in hants :p
+<a name="l-249"></a><span class="tm">19:59:56</span><span class="nk"> &lt;Daviey&gt;</span> heh
+<a name="l-250"></a><span class="tm">19:59:58</span><span class="nk"> &lt;popey&gt;</span> Alan Cocks does it on behalf of Ubuntu UK LoCo
+<a name="l-251"></a><span class="tm">20:00:20</span><span class="nk"> &lt;popey&gt;</span> we certainly promote it around the lugs in the area
+<a name="l-252"></a><span class="tm">20:00:25 </span><span class="nka">* Daviey</span> <span class="ac">did not know this.  But in any sense i wouldn't exactly call Bracknell a national effort :)</span>
+<a name="l-253"></a><span class="tm">20:00:31</span><span class="nk"> &lt;MooDoo&gt;</span> ooo t-shirts, stickers [sorry got carried away]
+<a name="l-254"></a><span class="tm">20:00:37</span><span class="nk"> &lt;popey&gt;</span> but he's the only person (I'm aware of) within the LoCo who did anything
+<a name="l-255"></a><span class="tm">20:00:46</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">Daviey:</span> feel free to volunteer to do something next year then
+<a name="l-256"></a><span class="tm">20:00:53</span><span class="nk"> &lt;popey&gt;</span> he's the only person who got off his arse and did something
+<a name="l-257"></a><span class="tm">20:01:12</span><span class="nk"> &lt;Daviey&gt;</span> well this is what i'm saying, is it something the LoCo should be doing, or supporting the LoCo members to help do a LUG one?
+<a name="l-258"></a><span class="tm">20:01:26</span><span class="nk"> &lt;popey&gt;</span> I guess both are appropriate.
+<a name="l-259"></a><span class="tm">20:01:36</span><span class="nk"> &lt;popey&gt;</span> other locos do it
+<a name="l-260"></a><span class="tm">20:01:41</span><span class="nk"> &lt;`Chris&gt;</span> PRESENT - Or am I too late?
+<a name="l-261"></a><span class="tm">20:01:43</span><span class="nk"> &lt;popey&gt;</span> and other lugs do it
+<a name="l-262"></a><span class="tm">20:01:45</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> I for one would feel more inclined to help a loco one
+<a name="l-263"></a><span class="tm">20:01:57</span><span class="nk"> &lt;Ging&gt;</span> `Chris, i thought you were boycotting
+<a name="l-264"></a><span class="tm">20:02:13 </span><span class="nka">* ProfFalken</span> <span class="ac">would look to ubuntu-uk for literature etc to support a regional effort (a number of LUGs/other interested parties)</span>
+<a name="l-265"></a><span class="tm">20:02:18</span><span class="nk"> &lt;Daviey&gt;</span> However, our LoCo has a larger geographical spread than some of the US (example) LoCo's making it more difficult
+<a name="l-266"></a><span class="tm">20:02:34</span><span class="nk"> &lt;popey&gt;</span> i dont think we can use that as a reason not to do stuff
+<a name="l-267"></a><span class="tm">20:02:39</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> <span class="hi">Daviey:</span> maybe more difficult to get together
+<a name="l-268"></a><span class="tm">20:02:45</span><span class="nk"> &lt;Daviey&gt;</span> no, i'm not saying that
+<a name="l-269"></a><span class="tm">20:02:47</span><span class="nk"> &lt;popey&gt;</span> we are nowhere near as large as many other countries
+<a name="l-270"></a><span class="tm">20:02:47</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> but not to do *something*
+<a name="l-271"></a><span class="tm">20:02:49</span><span class="nk"> &lt;popey&gt;</span> france?
+<a name="l-272"></a><span class="tm">20:03:03</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">Daviey:</span> if we could put together a "resource pack" for other groups to use on SFD should they wish, then I think that would be a
+<a name="l-273"></a><span class="tm">20:03:09</span><span class="nk"> &lt;Daviey&gt;</span> What i am saying is better support LoCo members to do a LUG  /regional one
+<a name="l-274"></a><span class="tm">20:03:20</span><span class="nk"> &lt;Ging&gt;</span> they have much better trains than us in france
+<a name="l-275"></a><span class="tm">20:03:21</span><span class="nk"> &lt;popey&gt;</span> as opposed to a national event?
+<a name="l-276"></a><span class="tm">20:03:25</span><span class="nk"> &lt;Daviey&gt;</span> ie, more local LUG members than spread out LoCo members
+<a name="l-277"></a><span class="tm">20:03:30</span><span class="nk"> &lt;Daviey&gt;</span> Well hwo can it be national?
+<a name="l-278"></a><span class="tm">20:03:40</span><span class="nk"> &lt;gord&gt;</span> i don't really get the point of this, its not like anyone is saying that the loco is barred from doing anything. if people from the loco
+<a name="l-279"></a><span class="tm">20:03:51</span><span class="nk"> &lt;popey&gt;</span> indeed
+<a name="l-280"></a><span class="tm">20:04:00</span><span class="nk"> &lt;Daviey&gt;</span> I would suggest we provide better literature and CD's (maybe) to LoCo members for regional SFD's
+<a name="l-281"></a><span class="tm">20:04:06</span><span class="nk"> &lt;popey&gt;</span> just because something happens in bracknell, doesn't stop it being a national event
+<a name="l-282"></a><span class="tm">20:04:23</span><span class="nk"> &lt;ProfFalken&gt;</span> resource pack could include CDs, Flyers, Stickers etc that are Ubuntu-UK orientated but underpin SFD's principles
+<a name="l-283"></a><span class="tm">20:04:31</span><span class="nk"> &lt;Daviey&gt;</span> ^ +1
+<a name="l-284"></a><span class="tm">20:04:34</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> Daviey I don't think we have a clear contact for requesting this
+<a name="l-285"></a><span class="tm">20:04:46</span><span class="nk"> &lt;popey&gt;</span> requesting what?
+<a name="l-286"></a><span class="tm">20:04:54</span><span class="nk"> &lt;gord&gt;</span> yeah it would be great if we could set up some sort of pack that (pdfs, that kinda thing) that people could use, offical ubuntu-uk software
+<a name="l-287"></a><span class="tm">20:04:55</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> media, stickers
+<a name="l-288"></a><span class="tm">20:05:06</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">gLAsgowMonkey:</span> i thought ProfFalken was propsing we create it
+<a name="l-289"></a><span class="tm">20:05:15 </span><span class="nka">* Daviey</span> <span class="ac">also</span>
+<a name="l-290"></a><span class="tm">20:05:43</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> <span class="hi">popey:</span> yes but a pack but at present there is no clear contact for "stuff"
+<a name="l-291"></a><span class="tm">20:05:51</span><span class="nk"> &lt;Daviey&gt;</span> we have no "stuff" :)
+<a name="l-292"></a><span class="tm">20:05:59</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> so having a pack is not much use unless requests are funnelled
+<a name="l-293"></a><span class="tm">20:06:00</span><span class="nk"> &lt;MooDoo&gt;</span> and Daviey is the poc :)
+<a name="l-294"></a><span class="tm">20:06:00</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">popey:</span> correct (although I'm sure someone could poke Jono and see what he can provide?)
+<a name="l-295"></a><span class="tm">20:06:05</span><span class="nk"> &lt;Daviey&gt;</span> CD's sure, but adhoc from shipit is often easier
+<a name="l-296"></a><span class="tm">20:06:13</span><span class="nk"> &lt;popey&gt;</span> we can get conference packs from canonical
+<a name="l-297"></a><span class="tm">20:06:20</span><span class="nk"> &lt;popey&gt;</span> i have done for Alan when he runs the SFD in Bracknell
+<a name="l-298"></a><span class="tm">20:06:33</span><span class="nk"> &lt;popey&gt;</span> providing t-shirts, caps, CDs, stickers
+<a name="l-299"></a><span class="tm">20:06:42</span><span class="nk"> &lt;popey&gt;</span> we could improve / add-to that
+<a name="l-300"></a><span class="tm">20:06:46</span><span class="nk"> &lt;gord&gt;</span> we don't need to provide CD's or really anything else generic. we need to provide UK specific stuff surely? people can get the other stuff
+<a name="l-301"></a><span class="tm">20:07:03</span><span class="nk"> &lt;Daviey&gt;</span> I was about to say, you don't get enough - so we should look at making ther eown
+<a name="l-302"></a><span class="tm">20:07:08 </span><span class="nka">* Daviey</span> <span class="ac">points towards the French LoCo's mugs</span>
+<a name="l-303"></a><span class="tm">20:07:08</span><span class="nk"> &lt;popey&gt;</span> we can get the CDs gord that's not a problem, and Alan Cocks has created some leaflets
+<a name="l-304"></a><span class="tm">20:07:18</span><span class="nk"> &lt;Daviey&gt;</span> However, then we get down the £££ disucssion
+<a name="l-305"></a><span class="tm">20:07:44 </span><span class="nka">* ProfFalken</span> <span class="ac">wonders if the material already exists on various people's HDDs and just needs collating...</span>
+<a name="l-306"></a><span class="tm">20:07:44</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> so we get any help from canonical
+<a name="l-307"></a><span class="tm">20:07:54</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">gLAsgowMonkey:</span> we do get some yes
+<a name="l-308"></a><span class="tm">20:07:56</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> I mean marketing and promotion
+<a name="l-309"></a><span class="tm">20:08:15</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">gLAsgowMonkey:</span> Not as much as would be required
+<a name="l-310"></a><span class="tm">20:08:45</span><span class="nk"> &lt;Daviey&gt;</span> So the LoCo marketting department should be repushed :)
+<a name="l-311"></a><span class="tm">20:08:46</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> I understand it's a finite resource
+<a name="l-312"></a><span class="tm">20:09:11</span><span class="nk"> &lt;Daviey&gt;</span> okay, can we try and bring this point to a head?
+<a name="l-313"></a><span class="tm">20:09:12</span><span class="nk"> &lt;popey&gt;</span> what if we tied the bbq/hackfest up with something like SFD, rather than have multiple events through the year with low turnout, throw all
+<a name="l-314"></a><span class="tm">20:09:18</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> <span class="hi">Daviey:</span> I think so, but in turn we *may* need some help
+<a name="l-315"></a><span class="tm">20:09:20</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">popey:</span> :o)
+<a name="l-316"></a><span class="tm">20:09:23</span><span class="nk"> &lt;popey&gt;</span> given SFD is on a saturday
+<a name="l-317"></a><span class="tm">20:09:39</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">popey:</span> good idea
+<a name="l-318"></a><span class="tm">20:09:41</span><span class="nk"> &lt;MooDoo&gt;</span> why not just make it a bring a bottle, burger and distro day :)
+<a name="l-319"></a><span class="tm">20:09:42</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> that is certainlly an idea
+<a name="l-320"></a><span class="tm">20:09:47</span><span class="nk"> &lt;Ging&gt;</span> what is SFD ?
+<a name="l-321"></a><span class="tm">20:09:50</span><span class="nk"> &lt;gord&gt;</span> careful, we might end up with egg on our faces... actually i agree but puns are fun.
+<a name="l-322"></a><span class="tm">20:09:53</span><span class="nk"> &lt;Daviey&gt;</span> software freedom day
+<a name="l-323"></a><span class="tm">20:09:55</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">MooDoo:</span> lol, sounds great
+<a name="l-324"></a><span class="tm">20:09:57</span><span class="nk"> &lt;webpigeon&gt;</span> Ging, http://softwarefreedomday.org/
+<a name="l-325"></a><span class="tm">20:10:07</span><span class="nk"> &lt;daubers&gt;</span> Uhhh... is being in a field in september a good idea?
+<a name="l-326"></a><span class="tm">20:10:15</span><span class="nk"> &lt;daubers&gt;</span> it has a tendency to be fairly damp
+<a name="l-327"></a><span class="tm">20:10:16</span><span class="nk"> &lt;Daviey&gt;</span> okay, this point needs further discussion - and a thread would be excellant
+<a name="l-328"></a><span class="tm">20:10:17</span><span class="nk"> &lt;kalessin1&gt;</span> <span class="hi">duabers:</span> good point
+<a name="l-329"></a><span class="tm">20:10:22</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> can you do that one?
+<a name="l-330"></a><span class="tm">20:10:26</span><span class="nk"> &lt;popey&gt;</span> yes
+<a name="l-331"></a><span class="tm">20:10:36</span><span class="nk"> &lt;Daviey&gt;</span> cool, lets move on
+<a name="l-332"></a><span class="tm">20:10:44</span><span class="nk"> &lt;Daviey&gt;</span> anything else for 2009 direction?
+<a name="l-333"></a><span class="tm">20:10:49</span><span class="nk"> &lt;popey&gt;</span> more contribution!
+<a name="l-334"></a><span class="tm">20:10:58</span><span class="nk"> &lt;MooDoo&gt;</span> https://wiki.ubuntu.com/UKTeam/IdeasPool
+<a name="l-335"></a><span class="tm">20:11:00</span><span class="nk"> &lt;popey&gt;</span> we need to be more active at doing bugs / launchpad answers / forums etc
+<a name="l-336"></a><span class="tm">20:11:02</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">popey:</span> Wasn't there some event happening in Farnborough?
+<a name="l-337"></a><span class="tm">20:11:13</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">daubers:</span> yeah, not heard back yet, supposed to be early august
+<a name="l-338"></a><span class="tm">20:11:25</span><span class="nk"> &lt;daubers&gt;</span> ok
+<a name="l-339"></a><span class="tm">20:11:34</span><span class="nk"> &lt;Daviey&gt;</span> The UK is doing "pretty" well for 5-a-day
+<a name="l-340"></a><span class="tm">20:11:59</span><span class="nk"> &lt;Daviey&gt;</span> With the current stats, i can't see a reason the UK couldn't be #1 for a team effort
+<a name="l-341"></a><span class="tm">20:11:59</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">Daviey:</span> is there a select few or is it all across the board?
+<a name="l-342"></a><span class="tm">20:11:59</span><span class="nk"> &lt;popey&gt;</span> only as individuals
+<a name="l-343"></a><span class="tm">20:12:02 </span><span class="nka">* sheepeatingtaz</span> <span class="ac">needs to read up on 5 a day</span>
+<a name="l-344"></a><span class="tm">20:12:05</span><span class="nk"> &lt;popey&gt;</span> there is no concerted effort
+<a name="l-345"></a><span class="tm">20:12:17</span><span class="nk"> &lt;popey&gt;</span> we dont pimp is on the list
+<a name="l-346"></a><span class="tm">20:12:19</span><span class="nk"> &lt;Daviey&gt;</span> txwikinger is doing really well IIRC
+<a name="l-347"></a><span class="tm">20:12:21</span><span class="nk"> &lt;popey&gt;</span> we dont pimp the stats for example
+<a name="l-348"></a><span class="tm">20:12:22</span><span class="nk"> &lt;Daviey&gt;</span> and james_w
+<a name="l-349"></a><span class="tm">20:12:34</span><span class="nk"> &lt;popey&gt;</span> i was thinking more of non-canonical people :)
+<a name="l-350"></a><span class="tm">20:12:34</span><span class="nk"> &lt;Laney&gt;</span> I never submit to it ¬_¬
+<a name="l-351"></a><span class="tm">20:12:36 </span><span class="nka">* Laney</span> <span class="ac">is naughty</span>
+<a name="l-352"></a><span class="tm">20:12:38</span><span class="nk"> &lt;daubers&gt;</span> How long does the 5-a day take? half an hour?
+<a name="l-353"></a><span class="tm">20:12:39</span><span class="nk"> &lt;txwikinger&gt;</span> o/ Daviey
+<a name="l-354"></a><span class="tm">20:13:07</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">daubers:</span> i'm not the best person to ask tbh - my 5-a-day isn't quite 5-a-day :)
+<a name="l-355"></a><span class="tm">20:13:15</span><span class="nk"> &lt;gord&gt;</span> I do the answer tracker when i can, but that doesn't get as much kudos, it can also use peoples support
+<a name="l-356"></a><span class="tm">20:13:16</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">txwikinger:</span> \o
+<a name="l-357"></a><span class="tm">20:13:18 </span><span class="nka">* ProfFalken</span> <span class="ac">is going self-employed this month and hopes to be able to add to launchpad soon...</span>
+<a name="l-358"></a><span class="tm">20:14:01</span><span class="nk"> &lt;Daviey&gt;</span> How can the LoCo try and get people more into 5-a-day and LP answers?
+<a name="l-359"></a><span class="tm">20:14:02</span><span class="nk"> &lt;popey&gt;</span> so basically I'd like to see us have a co-ordinated effort towards contribution in our team
+<a name="l-360"></a><span class="tm">20:14:02</span><span class="nk"> &lt;webpigeon&gt;</span> "We are currently planning our presence at LugRadioLive2008." -.-
+<a name="l-361"></a><span class="tm">20:14:12</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">webpigeon:</span> edit it
+<a name="l-362"></a><span class="tm">20:14:22</span><span class="nk"> &lt;webpigeon&gt;</span> popey, I will do :P
+<a name="l-363"></a><span class="tm">20:14:31</span><span class="nk"> &lt;james_w&gt;</span> we could run some sessions on how to get started with 5-a-day, answers, etc.
+<a name="l-364"></a><span class="tm">20:14:39</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">james_w:</span> online or RL?
+<a name="l-365"></a><span class="tm">20:14:52</span><span class="nk"> &lt;popey&gt;</span> that leads nicely onto the subject of bug jam really?
+<a name="l-366"></a><span class="tm">20:14:55</span><span class="nk"> &lt;james_w&gt;</span> <span class="hi">Daviey:</span> either would work, but I was thinking online
+<a name="l-367"></a><span class="tm">20:14:57</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">Daviey:</span> either - I really don't know where to start... :o(
+<a name="l-368"></a><span class="tm">20:15:00</span><span class="nk"> &lt;james_w&gt;</span> we can do RL ones at the bug jam
+<a name="l-369"></a><span class="tm">20:15:06</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> we could tie that in with a "how to file a bug report" and related topics
+<a name="l-370"></a><span class="tm">20:15:07</span><span class="nk"> &lt;Daviey&gt;</span> woot!
+<a name="l-371"></a><span class="tm">20:15:23</span><span class="nk"> &lt;Daviey&gt;</span> Shall we move onto the topic of "Bug Jam"?
+<a name="l-372"></a><span class="tm">20:15:24</span><span class="nk"> &lt;gord&gt;</span> How can you have a co-ordinated effort? I mean maybe we could have a bot use the LP api to print out the highest rollers on 5aday and such
+<a name="l-373"></a><span class="tm">20:15:52</span><span class="nk"> &lt;james_w&gt;</span> the classroom team would certainly appreciate any sessions we can run
+<a name="l-374"></a><span class="tm">20:15:58</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">gord:</span> talking about it helps
+<a name="l-375"></a><span class="tm">20:16:24</span><span class="nk"> &lt;Daviey&gt;</span> agreed.
+<a name="l-376"></a><span class="tm">20:16:44</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">Daviey:</span> we could do a talk at the LUG about it?
+<a name="l-377"></a><span class="tm">20:16:45</span><span class="nk"> &lt;Daviey&gt;</span> The global bug jam is soon, and that could be something we do - lessons in RL?
+<a name="l-378"></a><span class="tm">20:17:21</span><span class="nk"> &lt;popey&gt;</span> As I said on the mailing list I'd be happy to host a Bug Jam event here at my place
+<a name="l-379"></a><span class="tm">20:17:32</span><span class="nk"> &lt;technolalia&gt;</span> <span class="hi">popey:</span> where is your place?
+<a name="l-380"></a><span class="tm">20:17:34</span><span class="nk"> &lt;james_w&gt;</span> for the bug jam we could start off with an overview, and then "mentor" people as needed through the rest of the event
+<a name="l-381"></a><span class="tm">20:17:39</span><span class="nk"> &lt;popey&gt;</span> farnborough, hampshire
+<a name="l-382"></a><span class="tm">20:17:39</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> Sure, i'm always twitchy about Ubuntu specific stuff asking for extra effort at a LUG.  The other disto'ers don't like it for some
+<a name="l-383"></a><span class="tm">20:17:45</span><span class="nk"> &lt;Daviey&gt;</span> But certainly a good idea
+<a name="l-384"></a><span class="tm">20:17:52</span><span class="nk"> &lt;popey&gt;</span> yeah, bar stewards
+<a name="l-385"></a><span class="tm">20:18:00</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">james_w:</span> agreed
+<a name="l-386"></a><span class="tm">20:18:01</span><span class="nk"> &lt;`Chris&gt;</span> <span class="hi">Daviey:</span> I would love to participate in the bugjam, I've been trying to work out how to use the 5aday thing from D. Holbach. I'm kinda
+<a name="l-387"></a><span class="tm">20:18:20</span><span class="nk"> &lt;james_w&gt;</span> I could probably get a venue in Bristol for the bug jam
+<a name="l-388"></a><span class="tm">20:18:23</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">`Chris:</span> well what we are currently thinking both Online and somewhere rea life
+<a name="l-389"></a><span class="tm">20:18:24</span><span class="nk"> &lt;popey&gt;</span> I was thinking that at the bug jam we could have groups of people, some doing bugs, some doing launchpad answers, others learning..
+<a name="l-390"></a><span class="tm">20:18:34</span><span class="nk"> &lt;james_w&gt;</span> <span class="hi">popey:</span> good idea
+<a name="l-391"></a><span class="tm">20:18:34</span><span class="nk"> &lt;Daviey&gt;</span> popey has offered his gaff as a host
+<a name="l-392"></a><span class="tm">20:18:45</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">james_w:</span> +1 for bristol, I'm in Monmouth
+<a name="l-393"></a><span class="tm">20:18:50</span><span class="nk"> &lt;popey&gt;</span> we should put a page up about venues
+<a name="l-394"></a><span class="tm">20:18:53</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">james_w:</span> what sort of venue are you thinking?
+<a name="l-395"></a><span class="tm">20:18:59</span><span class="nk"> &lt;popey&gt;</span> how many people they can take, facilities etc
+<a name="l-396"></a><span class="tm">20:19:09 </span><span class="nka">* `Chris</span> <span class="ac">is located in S. Wales, nothing over 100miles preferably :)</span>
+<a name="l-397"></a><span class="tm">20:19:16</span><span class="nk"> &lt;technolalia&gt;</span> I could contact the University of Westminster, as used by GLLUG
+<a name="l-398"></a><span class="tm">20:19:21</span><span class="nk"> &lt;Daviey&gt;</span> we could certainly have &gt;1 venue- but it would be a shame to split the experts too much - especailly two in southern england
+<a name="l-399"></a><span class="tm">20:19:24</span><span class="nk"> &lt;popey&gt;</span> that would be cool technolalia
+<a name="l-400"></a><span class="tm">20:19:31</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">Daviey:</span> i disagree
+<a name="l-401"></a><span class="tm">20:19:33</span><span class="nk"> &lt;`Chris&gt;</span> How far away (in time) is the bugjam?
+<a name="l-402"></a><span class="tm">20:19:38</span><span class="nk"> &lt;popey&gt;</span> i think we _should_ split the experts up
+<a name="l-403"></a><span class="tm">20:19:44</span><span class="nk"> &lt;popey&gt;</span> divide and conquer
+<a name="l-404"></a><span class="tm">20:19:49</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> two venues in southern england?
+<a name="l-405"></a><span class="tm">20:19:52</span><span class="nk"> &lt;andylockran&gt;</span> howdy
+<a name="l-406"></a><span class="tm">20:19:56</span><span class="nk"> &lt;james_w&gt;</span> <span class="hi">Daviey:</span> there's a couple of caffs, but you obviously have to keep buying things. There's an independenct cinema, the center used my
+<a name="l-407"></a><span class="tm">20:19:57 </span><span class="nka">* Daviey</span> <span class="ac">considers Bristol and Farn' quite close together</span>
+<a name="l-408"></a><span class="tm">20:20:12</span><span class="nk"> &lt;james_w&gt;</span> <span class="hi">Daviey:</span> I've not done much research, but there must be somewhere.
+<a name="l-409"></a><span class="tm">20:20:14</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">andylockran:</span> o/
+<a name="l-410"></a><span class="tm">20:20:30</span><span class="nk"> &lt;james_w&gt;</span> I'm more than happy to go to popey's, I just wanted to provide him with an alternative.
+<a name="l-411"></a><span class="tm">20:20:31</span><span class="nk"> &lt;popey&gt;</span> how about we ask people to go forth and find locations - promptly
+<a name="l-412"></a><span class="tm">20:20:31 </span><span class="nka">* sheepeatingtaz</span> <span class="ac">would offer his house, but a) it's small, and b) it's in the north :)</span>
+<a name="l-413"></a><span class="tm">20:20:37 </span><span class="nka">* andylockran</span> <span class="ac">is just catching up on your conversation..</span>
+<a name="l-414"></a><span class="tm">20:20:43</span><span class="nk"> &lt;Laney&gt;</span> The London one sounds like the best option to me
+<a name="l-415"></a><span class="tm">20:20:52</span><span class="nk"> &lt;popey&gt;</span> and come back in 1-2 weekas
+<a name="l-416"></a><span class="tm">20:20:52</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">Daviey:</span> ??? Bristol is 45 minutes from my house, farnborough is 2.5 hrs...
+<a name="l-417"></a><span class="tm">20:21:06</span><span class="nk"> &lt;Daviey&gt;</span> okay, james_w can you hit the mailing list - asking for people to find location and add them to the wiki?
+<a name="l-418"></a><span class="tm">20:21:13</span><span class="nk"> &lt;popey&gt;</span> lets not start getting into location arguments :)
+<a name="l-419"></a><span class="tm">20:21:17</span><span class="nk"> &lt;james_w&gt;</span> <span class="hi">Daviey:</span> yes sir!
+<a name="l-420"></a><span class="tm">20:21:21</span><span class="nk"> &lt;popey&gt;</span> lets just all start finding decent places and pitch them :)
+<a name="l-421"></a><span class="tm">20:21:23</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">james_w:</span> st. werbs would be good...
+<a name="l-422"></a><span class="tm">20:21:42</span><span class="nk"> &lt;`Chris&gt;</span> I have a few decent places around S. Wales thanks to the SWLUG but no-one is from around here, is there?
+<a name="l-423"></a><span class="tm">20:21:48</span><span class="nk"> &lt;kalessin1&gt;</span> <span class="hi">ProfFalken:</span> I second that
+<a name="l-424"></a><span class="tm">20:21:51</span><span class="nk"> &lt;popey&gt;</span> yeah, a wiki page detailing the basics of a location would be good
+<a name="l-425"></a><span class="tm">20:21:59</span><span class="nk"> &lt;brobostigon&gt;</span> good idea popey
+<a name="l-426"></a><span class="tm">20:22:01</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">`Chris:</span> I'm in Monmouth...
+<a name="l-427"></a><span class="tm">20:22:09</span><span class="nk"> &lt;Daviey&gt;</span> ---&gt; moving on
+<a name="l-428"></a><span class="tm">20:22:11</span><span class="nk"> &lt;ProfFalken&gt;</span> but SWLUG covers a fscking huge area...
+<a name="l-429"></a><span class="tm">20:22:12</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> can we move on please
+<a name="l-430"></a><span class="tm">20:22:26</span><span class="nk"> &lt;technolalia&gt;</span> <span class="hi">Chris:</span> I have family in Swansea
+<a name="l-431"></a><span class="tm">20:22:35</span><span class="nk"> &lt;Daviey&gt;</span> okay, we also need to gauage attendance at A or multiple venus
+<a name="l-432"></a><span class="tm">20:22:52</span><span class="nk"> &lt;Daviey&gt;</span> we'll do this in a future meeting + mailing list + wiki (or similar page)
+<a name="l-433"></a><span class="tm">20:22:57</span><span class="nk"> &lt;brobostigon&gt;</span> or even alternative venues
+<a name="l-434"></a><span class="tm">20:23:02</span><span class="nk"> &lt;popey&gt;</span> yeah, it might actually make sense to have multiple (even in the south) as some people are not willing to travel far or have low budgets
+<a name="l-435"></a><span class="tm">20:23:08</span><span class="nk"> &lt;popey&gt;</span> when is the bug jam?
+<a name="l-436"></a><span class="tm">20:23:17</span><span class="nk"> &lt;popey&gt;</span> its not long
+<a name="l-437"></a><span class="tm">20:23:23</span><span class="nk"> &lt;james_w&gt;</span> end of Feb
+<a name="l-438"></a><span class="tm">20:23:27</span><span class="nk"> &lt;james_w&gt;</span> 20thish
+<a name="l-439"></a><span class="tm">20:23:32</span><span class="nk"> &lt;Daviey&gt;</span> sure, we'll need to do this "at large" - wiki showing locations and possible attendance of names
+<a name="l-440"></a><span class="tm">20:23:33</span><span class="nk"> &lt;popey&gt;</span> thats not long at all
+<a name="l-441"></a><span class="tm">20:23:42</span><span class="nk"> &lt;Daviey&gt;</span> but we can't do that directly in this meeting
+<a name="l-442"></a><span class="tm">20:23:45</span><span class="nk"> &lt;popey&gt;</span> I'd say we need to discuss this weekly as it's so soon
+<a name="l-443"></a><span class="tm">20:23:47</span><span class="nk"> &lt;Daviey&gt;</span> err does it clash with FOSDEM?
+<a name="l-444"></a><span class="tm">20:23:50</span><span class="nk"> &lt;popey&gt;</span> no
+<a name="l-445"></a><span class="tm">20:23:54</span><span class="nk"> &lt;popey&gt;</span> thats at the start of feb
+<a name="l-446"></a><span class="tm">20:24:01</span><span class="nk"> &lt;popey&gt;</span> 7/8
+<a name="l-447"></a><span class="tm">20:24:06</span><span class="nk"> &lt;Daviey&gt;</span> cool
+<a name="l-448"></a><span class="tm">20:24:22</span><span class="nk"> &lt;webpigeon&gt;</span> Do we know where everyone is?
+<a name="l-449"></a><span class="tm">20:24:25</span><span class="nk"> &lt;Daviey&gt;</span> Okay, i think we already have enough content for a meeting next week!
+<a name="l-450"></a><span class="tm">20:24:38</span><span class="nk"> &lt;popey&gt;</span> i think we should!
+<a name="l-451"></a><span class="tm">20:24:45</span><span class="nk"> &lt;brobostigon&gt;</span> yep
+<a name="l-452"></a><span class="tm">20:24:52</span><span class="nk"> &lt;Daviey&gt;</span> i think we should hit this topic on the mailing list, a formulate an attack plan next week
+<a name="l-453"></a><span class="tm">20:24:53</span><span class="nk"> &lt;popey&gt;</span> get this stuff all tidied up
+<a name="l-454"></a><span class="tm">20:25:29</span><span class="nk"> &lt;Daviey&gt;</span> But Bug Jam looks like it will happend, and sounds like it'll be successful!
+<a name="l-455"></a><span class="tm">20:25:32</span><span class="nk"> &lt;Daviey&gt;</span> (woot)
+<a name="l-456"></a><span class="tm">20:25:39</span><span class="nk"> &lt;Daviey&gt;</span> happen*
+<a name="l-457"></a><span class="tm">20:25:46</span><span class="nk"> &lt;popey&gt;</span> yay
+<a name="l-458"></a><span class="tm">20:25:54</span><span class="nk"> &lt;Daviey&gt;</span> okay, move on?
+<a name="l-459"></a><span class="tm">20:25:57</span><span class="nk"> &lt;popey&gt;</span> yeah
+<a name="l-460"></a><span class="tm">20:26:02</span><span class="nk"> &lt;`Chris&gt;</span> Last question!
+<a name="l-461"></a><span class="tm">20:26:07</span><span class="nk"> &lt;`Chris&gt;</span> Venues - We bring own laptops yeah?
+<a name="l-462"></a><span class="tm">20:26:08</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">`Chris:</span> go
+<a name="l-463"></a><span class="tm">20:26:15</span><span class="nk"> &lt;Daviey&gt;</span> hell yeah :)
+<a name="l-464"></a><span class="tm">20:26:19</span><span class="nk"> &lt;`Chris&gt;</span> ok cool
+<a name="l-465"></a><span class="tm">20:26:31</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">Laney:</span> next topic?
+<a name="l-466"></a><span class="tm">20:26:34</span><span class="nk"> &lt;popey&gt;</span> unless people have spare/extra ones
+<a name="l-467"></a><span class="tm">20:26:43</span><span class="nk"> &lt;Laney&gt;</span> <span class="hi">MooDoo:</span> Are you here?
+<a name="l-468"></a><span class="tm">20:26:46 </span><span class="nka">* popey</span> <span class="ac">pokes MooDoo</span>
+<a name="l-469"></a><span class="tm">20:26:53</span><span class="nk"> &lt;MooDoo&gt;</span> PRESENT :)
+<a name="l-470"></a><span class="tm">20:27:03</span><span class="nk"> &lt;Laney&gt;</span> [topic] Free Media - MooDoo
+<a name="l-471"></a><span class="tm">20:27:04</span><span class="nk"> &lt;MootBot&gt;</span> New Topic:  Free Media - MooDoo
+<a name="l-472"></a><span class="tm">20:27:06</span><span class="nk"> &lt;Laney&gt;</span> take it away
+<a name="l-473"></a><span class="tm">20:27:32</span><span class="nk"> &lt;MooDoo&gt;</span> ok my idea is a simple one, create a group of individuals who would at a request ship ubuntu media -
+<a name="l-474"></a><span class="tm">20:27:42</span><span class="nk"> &lt;MooDoo&gt;</span> our own volunteer version of shipit :)
+<a name="l-475"></a><span class="tm">20:28:14</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">MooDoo:</span> would it offer more than shipit?
+<a name="l-476"></a><span class="tm">20:28:29</span><span class="nk"> &lt;`Chris&gt;</span> <span class="hi">Daviey:</span> I assume faster delivery times is a bonus
+<a name="l-477"></a><span class="tm">20:28:36</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">MooDoo:</span> do you envision small amounts, or the large amounts lugs and those kind of people would need?
+<a name="l-478"></a><span class="tm">20:28:42</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">Daviey:</span> depends on the individual, as cost would be a factor
+<a name="l-479"></a><span class="tm">20:29:06</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">brobostigon:</span> i'm really thinking low volume, as it's voluteer based.
+<a name="l-480"></a><span class="tm">20:29:16</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> I can't see that there would be a huge demand
+<a name="l-481"></a><span class="tm">20:29:19</span><span class="nk"> &lt;Daviey&gt;</span> Sounds like a worthy idea
+<a name="l-482"></a><span class="tm">20:29:20</span><span class="nk"> &lt;popey&gt;</span> worth noting that the loco team leader can order a large number of CDs, and could distribute them somehow
+<a name="l-483"></a><span class="tm">20:29:24</span><span class="nk"> &lt;brobostigon&gt;</span> so 5 or less?
+<a name="l-484"></a><span class="tm">20:29:30</span><span class="nk"> &lt;gord&gt;</span> I'm not sure how much need there is for this, its not like the mailing list is full of people requesting cd's or anything and surely if
+<a name="l-485"></a><span class="tm">20:29:44</span><span class="nk"> &lt;popey&gt;</span> I suspect it's more useful for people outside the UK
+<a name="l-486"></a><span class="tm">20:30:01</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> In which case, probably won't be much quicker than shipit?
+<a name="l-487"></a><span class="tm">20:30:07</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">brobostigon:</span> depends on the person, how much they want to spend on cd's and postag,
+<a name="l-488"></a><span class="tm">20:30:09</span><span class="nk"> &lt;popey&gt;</span> we (loco council) have already been asked if it's possible for other LoCos to send them (in Africa) some CDs or a hard disk containing a
+<a name="l-489"></a><span class="tm">20:30:31</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">MooDoo:</span> and ofcourse a donation if its a larger amount?
+<a name="l-490"></a><span class="tm">20:30:31 </span><span class="nka">* ProfFalken</span> <span class="ac">used shippit a while back.  it took nearly six weeks for the CDs to arrive...</span>
+<a name="l-491"></a><span class="tm">20:30:33</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">sheepeatingtaz:</span> shipit sends next day?
+<a name="l-492"></a><span class="tm">20:30:38</span><span class="nk"> &lt;popey&gt;</span> someone asked me on irc a while ago where they could get some CDs and I posted some to them
+<a name="l-493"></a><span class="tm">20:30:52</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">popey:</span> that's exactly what i'm on about.
+<a name="l-494"></a><span class="tm">20:31:00</span><span class="nk"> &lt;MooDoo&gt;</span> a form on the wiki for instance
+<a name="l-495"></a><span class="tm">20:31:06</span><span class="nk"> &lt;popey&gt;</span> i just put them in a jiffy bag and posted them - didnt cost much
+<a name="l-496"></a><span class="tm">20:31:07</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> <span class="hi">MooDoo:</span> not sure, last time I ordered from shipit, I got within a week or so
+<a name="l-497"></a><span class="tm">20:31:14</span><span class="nk"> &lt;MooDoo&gt;</span> the details would be sorted later.
+<a name="l-498"></a><span class="tm">20:31:15</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">sheepeatingtaz:</span> thats rare
+<a name="l-499"></a><span class="tm">20:31:27</span><span class="nk"> &lt;kalessin1&gt;</span> one problem
+<a name="l-500"></a><span class="tm">20:31:30</span><span class="nk"> &lt;sheepeatingtaz&gt;</span> <span class="hi">popey:</span> last time, good couple of years ago...
+<a name="l-501"></a><span class="tm">20:31:40</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">kalessin1:</span> go :)
+<a name="l-502"></a><span class="tm">20:31:41</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> would it be possible to shit some boxes of branded cd's to these volunteers
+<a name="l-503"></a><span class="tm">20:31:44</span><span class="nk"> &lt;popey&gt;</span> maybe we could improve the system we have already?
+<a name="l-504"></a><span class="tm">20:31:49</span><span class="nk"> &lt;popey&gt;</span> I have 100 or so CDs here
+<a name="l-505"></a><span class="tm">20:31:56</span><span class="nk"> &lt;kalessin1&gt;</span> anyone looking for media would probably find shipit long before this
+<a name="l-506"></a><span class="tm">20:31:59</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">gLAsgowMonkey:</span> i guess you mean ship* :)
+<a name="l-507"></a><span class="tm">20:32:03</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">gLAsgowMonkey:</span> may I suggest s/shit/shift ?
+<a name="l-508"></a><span class="tm">20:32:05</span><span class="nk"> &lt;ProfFalken&gt;</span> :oP
+<a name="l-509"></a><span class="tm">20:32:06</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> haha
+<a name="l-510"></a><span class="tm">20:32:09</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">kalessin1:</span> it's in addition not a replacement
+<a name="l-511"></a><span class="tm">20:32:21</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> it's the aspire keyboard honest
+<a name="l-512"></a><span class="tm">20:32:24</span><span class="nk"> &lt;gord&gt;</span> there are resellers that will send you ubuntu cd's for like a pound as well, quickly
+<a name="l-513"></a><span class="tm">20:32:41</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">gord:</span> i'd do it free if it got ubuntu out there.
+<a name="l-514"></a><span class="tm">20:32:47</span><span class="nk"> &lt;ProfFalken&gt;</span> does anyone know where ship-it is based location wise? is there a ship-it depot in the UK?
+<a name="l-515"></a><span class="tm">20:32:55</span><span class="nk"> &lt;popey&gt;</span> holland
+<a name="l-516"></a><span class="tm">20:33:11</span><span class="nk"> &lt;Daviey&gt;</span> Something that could be a concern - what if demand for this is huge, and we can't keep up at all?
+<a name="l-517"></a><span class="tm">20:33:23</span><span class="nk"> &lt;gord&gt;</span> its not the cost that i'm going on about, im just not sure if there is a need
+<a name="l-518"></a><span class="tm">20:33:24</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">Daviey:</span> disclaimers
+<a name="l-519"></a><span class="tm">20:33:44</span><span class="nk"> &lt;popey&gt;</span> it comes on the cover of linux format regularly
+<a name="l-520"></a><span class="tm">20:33:51</span><span class="nk"> &lt;ProfFalken&gt;</span> ok, so is it worth talking to canonical and see if there can be a few volunteers in the UK that hold a stock of CDs and post out
+<a name="l-521"></a><span class="tm">20:33:53</span><span class="nk"> &lt;MooDoo&gt;</span> it's only volunteer based, i'd have no problem posting a cd to someone free if they requested it
+<a name="l-522"></a><span class="tm">20:33:56</span><span class="nk"> &lt;`Chris&gt;</span> <span class="hi">gord:</span> I often need to use shipit, since my internet is rather slow and my burner is messed up to say the least
+<a name="l-523"></a><span class="tm">20:34:08</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">ProfFalken:</span> i do have some stock
+<a name="l-524"></a><span class="tm">20:34:17</span><span class="nk"> &lt;popey&gt;</span> this is what I've been saying for the last 10 mins :)
+<a name="l-525"></a><span class="tm">20:34:24</span><span class="nk"> &lt;popey&gt;</span> the loco team leader gets to order in bulk
+<a name="l-526"></a><span class="tm">20:34:30 </span><span class="nka">* Daviey</span> <span class="ac">has an amount, not sure how many</span>
+<a name="l-527"></a><span class="tm">20:34:36</span><span class="nk"> &lt;popey&gt;</span> I ordered and got some intrepid CDs very soon after release
+<a name="l-528"></a><span class="tm">20:34:41</span><span class="nk"> &lt;popey&gt;</span> I received about 350 of them
+<a name="l-529"></a><span class="tm">20:34:48</span><span class="nk"> &lt;brobostigon&gt;</span> wow
+<a name="l-530"></a><span class="tm">20:35:14</span><span class="nk"> &lt;popey&gt;</span> some have gone to events, others I have posted out, others I have given to people running events (like Alan Cocks at SFD)
+<a name="l-531"></a><span class="tm">20:35:14</span><span class="nk"> &lt;MooDoo&gt;</span> well there is a wiki page on the idea, https://wiki.ubuntu.com/UKTeam/IdeasPool/Free_Media :)
+<a name="l-532"></a><span class="tm">20:35:26</span><span class="nk"> &lt;andylockran&gt;</span> other thing is whether should send the LTS releases, or any release ?
+<a name="l-533"></a><span class="tm">20:35:40</span><span class="nk"> &lt;Daviey&gt;</span> LTS or latest IMO
+<a name="l-534"></a><span class="tm">20:35:48</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">andylockran:</span> u would be happier with just LTS
+<a name="l-535"></a><span class="tm">20:35:52</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">andylockran:</span> you would as a volunteer let people know what you're willing to send out....you may have all versions
+<a name="l-536"></a><span class="tm">20:35:53</span><span class="nk"> &lt;brobostigon&gt;</span> i *
+<a name="l-537"></a><span class="tm">20:35:55 </span><span class="nka">* franki^</span> <span class="ac">loves LTS &lt;3</span>
+<a name="l-538"></a><span class="tm">20:36:07</span><span class="nk"> &lt;popey&gt;</span> i still have some LTS ones that have the ssh vuln on!
+<a name="l-539"></a><span class="tm">20:36:09</span><span class="nk"> &lt;`Chris&gt;</span> Same as Daviey however, there are some who would need LTS since they just want a stable distro without the need for major updating
+<a name="l-540"></a><span class="tm">20:36:10</span><span class="nk"> &lt;popey&gt;</span> nobody wants them
+<a name="l-541"></a><span class="tm">20:36:11 </span><span class="nka">* ProfFalken</span> <span class="ac">proposes that we use the LoCo POC to order the CDs for a number of volunteers that then send them out to those that request them</span>
+<a name="l-542"></a><span class="tm">20:36:24 </span><span class="nka">* ProfFalken</span> <span class="ac">uses latest for desktop, LTS for server...</span>
+<a name="l-543"></a><span class="tm">20:36:25</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">ProfFalken:</span> who pays?
+<a name="l-544"></a><span class="tm">20:36:28</span><span class="nk"> &lt;Daviey&gt;</span> haha
+<a name="l-545"></a><span class="tm">20:36:37</span><span class="nk"> &lt;popey&gt;</span> I will happy post out the ones I have
+<a name="l-546"></a><span class="tm">20:36:40</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">ProfFalken:</span> I won't be able to post multiple cd's per day :(
+<a name="l-547"></a><span class="tm">20:36:42</span><span class="nk"> &lt;popey&gt;</span> in batches of 5 for example
+<a name="l-548"></a><span class="tm">20:36:57</span><span class="nk"> &lt;MooDoo&gt;</span> i will happily pay for a box of cd's every few months for ubuntu cd's for requests.
+<a name="l-549"></a><span class="tm">20:37:04</span><span class="nk"> &lt;popey&gt;</span> i doubt you'd get that many requests Daviey
+<a name="l-550"></a><span class="tm">20:37:04</span><span class="nk"> &lt;`Chris&gt;</span> 5 is a moderate number but can be changed depending on the demand?
+<a name="l-551"></a><span class="tm">20:37:06 </span><span class="nka">* ProfFalken</span> <span class="ac">realises that his proposal might not be such a good idea after all...</span>
+<a name="l-552"></a><span class="tm">20:37:32</span><span class="nk"> &lt;popey&gt;</span> multiples of 5 keeps it easy, 5 keeps it cheap
+<a name="l-553"></a><span class="tm">20:37:41</span><span class="nk"> &lt;popey&gt;</span> you can post them in a "large letter" envelope
+<a name="l-554"></a><span class="tm">20:37:41</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> This will be turning it from a LoCo team effort which MooDoo is suggesting, to the PoC / Leaders responsibility
+<a name="l-555"></a><span class="tm">20:37:43</span><span class="nk"> &lt;popey&gt;</span> for low cost
+<a name="l-556"></a><span class="tm">20:37:49</span><span class="nk"> &lt;popey&gt;</span> not entirely Daviey
+<a name="l-557"></a><span class="tm">20:38:00</span><span class="nk"> &lt;MooDoo&gt;</span> i'm thinking that someone emails a form, the form details get posted to a page and a volunteer see it and makes it as "i'll send that"
+<a name="l-558"></a><span class="tm">20:38:06</span><span class="nk"> &lt;popey&gt;</span> if you got 350 from canonical, and then give them out in batches of 50, then they gave them out in batches of 10 etc
+<a name="l-559"></a><span class="tm">20:38:17</span><span class="nk"> &lt;popey&gt;</span> then it's only a little initial work for you
+<a name="l-560"></a><span class="tm">20:38:20</span><span class="nk"> &lt;Daviey&gt;</span> ahh, this isn't what ProfFalken suggested :)
+<a name="l-561"></a><span class="tm">20:38:28</span><span class="nk"> &lt;popey&gt;</span> oh yeah
+<a name="l-562"></a><span class="tm">20:38:33</span><span class="nk"> &lt;`Chris&gt;</span> Ideas can evolve :)
+<a name="l-563"></a><span class="tm">20:38:34</span><span class="nk"> &lt;popey&gt;</span> but you would only do it right when they arrive
+<a name="l-564"></a><span class="tm">20:38:51</span><span class="nk"> &lt;Daviey&gt;</span> sounds promising
+<a name="l-565"></a><span class="tm">20:38:52</span><span class="nk"> &lt;popey&gt;</span> thats 7 parcels once every 6 months
+<a name="l-566"></a><span class="tm">20:38:54</span><span class="nk"> &lt;popey&gt;</span> maybe twice
+<a name="l-567"></a><span class="tm">20:38:56</span><span class="nk"> &lt;popey&gt;</span> no more
+<a name="l-568"></a><span class="tm">20:39:12</span><span class="nk"> &lt;popey&gt;</span> I would happily kick the ball off by packaging up the ones I have
+<a name="l-569"></a><span class="tm">20:39:19</span><span class="nk"> &lt;Daviey&gt;</span> however, is it any more benefical than the volunteer ordering 10 fromshipit and just holding them for requests?
+<a name="l-570"></a><span class="tm">20:39:19</span><span class="nk"> &lt;popey&gt;</span> and sending them to 2 or 3 people to then pass out
+<a name="l-571"></a><span class="tm">20:39:34</span><span class="nk"> &lt;popey&gt;</span> that I am unsure of
+<a name="l-572"></a><span class="tm">20:39:39</span><span class="nk"> &lt;popey&gt;</span> but you get them faster than anyone else
+<a name="l-573"></a><span class="tm">20:39:41</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">Daviey:</span> i've only been able to order 1 at a time
+<a name="l-574"></a><span class="tm">20:39:48</span><span class="nk"> &lt;popey&gt;</span> I got intrepid CDs _real_ quick after release
+<a name="l-575"></a><span class="tm">20:39:49</span><span class="nk"> &lt;Daviey&gt;</span> oh
+<a name="l-576"></a><span class="tm">20:39:58</span><span class="nk"> &lt;`Chris&gt;</span> With shipit, you need to order 1 at a time, unless you want delays and having to explain yourself to Canonical
+<a name="l-577"></a><span class="tm">20:40:09 </span><span class="nka">* Daviey</span> <span class="ac">glares at jono :)</span>
+<a name="l-578"></a><span class="tm">20:40:12</span><span class="nk"> &lt;popey&gt;</span> date on the box is 4/11/08
+<a name="l-579"></a><span class="tm">20:40:16</span><span class="nk"> &lt;popey&gt;</span> when did intrepid release?
+<a name="l-580"></a><span class="tm">20:40:18</span><span class="nk"> &lt;popey&gt;</span> 25/10?
+<a name="l-581"></a><span class="tm">20:40:24</span><span class="nk"> &lt;jono&gt;</span> hey Daviey :)
+<a name="l-582"></a><span class="tm">20:40:26</span><span class="nk"> &lt;Daviey&gt;</span> yeah that is quick
+<a name="l-583"></a><span class="tm">20:40:34</span><span class="nk"> &lt;popey&gt;</span> he's had his coffee
+<a name="l-584"></a><span class="tm">20:40:38</span><span class="nk"> &lt;jono&gt;</span> hehe
+<a name="l-585"></a><span class="tm">20:40:42</span><span class="nk"> &lt;jono&gt;</span> hows thing chaps?
+<a name="l-586"></a><span class="tm">20:40:44</span><span class="nk"> &lt;jono&gt;</span> things
+<a name="l-587"></a><span class="tm">20:40:44</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">jono:</span> didn't expect you to be here
+<a name="l-588"></a><span class="tm">20:40:54</span><span class="nk"> &lt;jono&gt;</span> Daviey, :)
+<a name="l-589"></a><span class="tm">20:40:56</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">jono:</span> just having a LoCo meeting
+<a name="l-590"></a><span class="tm">20:40:57</span><span class="nk"> &lt;jono&gt;</span> just working
+<a name="l-591"></a><span class="tm">20:41:00</span><span class="nk"> &lt;jono&gt;</span> oh nice :)
+<a name="l-592"></a><span class="tm">20:41:16</span><span class="nk"> &lt;popey&gt;</span> i would say I've got about 100 or so CDs left
+<a name="l-593"></a><span class="tm">20:41:24</span><span class="nk"> &lt;Daviey&gt;</span> talking about direction, bug jam and helping shipit from a volunteer idea
+<a name="l-594"></a><span class="tm">20:41:27</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">jono:</span> ^
+<a name="l-595"></a><span class="tm">20:41:28</span><span class="nk"> &lt;popey&gt;</span> mostly desktop, some server some kubuntu
+<a name="l-596"></a><span class="tm">20:41:42 </span><span class="nka">* Daviey</span> <span class="ac">has far too many server ones</span>
+<a name="l-597"></a><span class="tm">20:42:02</span><span class="nk"> &lt;jono&gt;</span> Daviey, cool :)
+<a name="l-598"></a><span class="tm">20:42:20</span><span class="nk"> &lt;popey&gt;</span> shame they dont make the 64-bit desktop ones any more :(
+<a name="l-599"></a><span class="tm">20:42:25</span><span class="nk"> &lt;Daviey&gt;</span> okay, do people think this will really help Ubuntu 'get out there'?
+<a name="l-600"></a><span class="tm">20:42:26</span><span class="nk"> &lt;MooDoo&gt;</span> i would like a box of 100 desktop cd's then when someone wants a copy from a form [or similar] on the ubuntu-uk site, can post it to
+<a name="l-601"></a><span class="tm">20:42:27</span><span class="nk"> &lt;popey&gt;</span> seems shortsighted to me
+<a name="l-602"></a><span class="tm">20:42:47</span><span class="nk"> &lt;gord&gt;</span> you really think you'll get though 100 cd's in 6 months?
+<a name="l-603"></a><span class="tm">20:42:53</span><span class="nk"> &lt;popey&gt;</span> yes gord
+<a name="l-604"></a><span class="tm">20:42:58</span><span class="nk"> &lt;popey&gt;</span> i get throughj 300 or so
+<a name="l-605"></a><span class="tm">20:43:04</span><span class="nk"> &lt;popey&gt;</span> events as well as postage
+<a name="l-606"></a><span class="tm">20:43:10</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">gord:</span> not the point, the point is that i can send a cd when someone wants them
+<a name="l-607"></a><span class="tm">20:43:22</span><span class="nk"> &lt;MooDoo&gt;</span> how many i have left is irrelevant
+<a name="l-608"></a><span class="tm">20:43:31</span><span class="nk"> &lt;popey&gt;</span> its a potential waste
+<a name="l-609"></a><span class="tm">20:43:44</span><span class="nk"> &lt;Nafallo&gt;</span> I bought 1GB usb sticks from the Canonical store and put intrepid on them... given one to my flatmate already :-)
+<a name="l-610"></a><span class="tm">20:43:46</span><span class="nk"> &lt;`Chris&gt;</span> Humanity to others I guess does include environmental effects too?
+<a name="l-611"></a><span class="tm">20:43:48</span><span class="nk"> &lt;popey&gt;</span> as are the ones sat on the floor next to me if nobody orders them by april
+<a name="l-612"></a><span class="tm">20:43:48</span><span class="nk"> &lt;Daviey&gt;</span> ofc, we have to justify using them efficently
+<a name="l-613"></a><span class="tm">20:44:03</span><span class="nk"> &lt;gord&gt;</span> y'know you can get 4gb usb sticks from the canonical store with ubuntu pre-loaded onto them Nafallo
+<a name="l-614"></a><span class="tm">20:44:16</span><span class="nk"> &lt;`Chris&gt;</span> <span class="hi">Nafallo:</span> Only £2 extra
+<a name="l-615"></a><span class="tm">20:44:31</span><span class="nk"> &lt;Nafallo&gt;</span> <span class="hi">gord:</span> doesn't look as good and neat IMO :-)
+<a name="l-616"></a><span class="tm">20:44:38</span><span class="nk"> &lt;Daviey&gt;</span> okaaaaaaaaaaaaaaaaay, who would volunteer to do this?
+<a name="l-617"></a><span class="tm">20:44:45</span><span class="nk"> &lt;Daviey&gt;</span> MooDoo
+<a name="l-618"></a><span class="tm">20:44:55</span><span class="nk"> &lt;Nafallo&gt;</span> also, the 1GB ones are on special pricing at the moment ;-)
+<a name="l-619"></a><span class="tm">20:45:05</span><span class="nk"> &lt;MooDoo&gt;</span> :)
+<a name="l-620"></a><span class="tm">20:45:07</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">Nafallo:</span> (topic)
+<a name="l-621"></a><span class="tm">20:45:09</span><span class="nk"> &lt;brobostigon&gt;</span> <span class="hi">popey:</span> well any fairly recent cds, that nobody wants anymore, i am happy to take of anyoes hands, and try to distribute and market.
+<a name="l-622"></a><span class="tm">20:45:20</span><span class="nk"> &lt;popey&gt;</span> ok
+<a name="l-623"></a><span class="tm">20:45:21</span><span class="nk"> &lt;popey&gt;</span> tell you what
+<a name="l-624"></a><span class="tm">20:45:30</span><span class="nk"> &lt;popey&gt;</span> I'll mail the list and let people know how many I have left
+<a name="l-625"></a><span class="tm">20:45:31</span><span class="nk"> &lt;Daviey&gt;</span> chaps... can we close this topic first?
+<a name="l-626"></a><span class="tm">20:45:35</span><span class="nk"> &lt;popey&gt;</span> i am
+<a name="l-627"></a><span class="tm">20:45:44</span><span class="nk"> &lt;popey&gt;</span> trying to :)
+<a name="l-628"></a><span class="tm">20:45:49</span><span class="nk"> &lt;popey&gt;</span> and we will see what the demand is?
+<a name="l-629"></a><span class="tm">20:45:53</span><span class="nk"> &lt;brobostigon&gt;</span> ok popey :) good idea
+<a name="l-630"></a><span class="tm">20:45:54</span><span class="nk"> &lt;Daviey&gt;</span> oh, very trying as ever popey :)
+<a name="l-631"></a><span class="tm">20:45:59</span><span class="nk"> &lt;popey&gt;</span> I will post them out in batches of 5/10 or whatever
+<a name="l-632"></a><span class="tm">20:46:16</span><span class="nk"> &lt;popey&gt;</span> and if there is sufficient demand than kick MooDoo into action and Daviey can order another box and jono can okay it :)
+<a name="l-633"></a><span class="tm">20:46:31</span><span class="nk"> &lt;Daviey&gt;</span> sounds suitable to me :)
+<a name="l-634"></a><span class="tm">20:46:32</span><span class="nk"> &lt;popey&gt;</span> Epic \/\/in
+<a name="l-635"></a><span class="tm">20:46:35</span><span class="nk"> &lt;Daviey&gt;</span> can we all go home now?
+<a name="l-636"></a><span class="tm">20:46:37</span><span class="nk"> &lt;Daviey&gt;</span> :)
+<a name="l-637"></a><span class="tm">20:46:55</span><span class="nk"> &lt;daubers&gt;</span> <span class="hi">Daviey:</span> Don't we need an aob?
+<a name="l-638"></a><span class="tm">20:46:56</span><span class="nk"> &lt;popey&gt;</span> <span class="hi">MooDoo:</span> sound fair?
+<a name="l-639"></a><span class="tm">20:47:09</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">daubers:</span> yep, and plan next meeting
+<a name="l-640"></a><span class="tm">20:47:12</span><span class="nk"> &lt;MooDoo&gt;</span> <span class="hi">popey:</span> +1 :)
+<a name="l-641"></a><span class="tm">20:47:16</span><span class="nk"> &lt;popey&gt;</span> and action points from this one :)
+<a name="l-642"></a><span class="tm">20:47:28</span><span class="nk"> &lt;brobostigon&gt;</span> :)
+<a name="l-643"></a><span class="tm">20:47:44</span><span class="nk"> &lt;popey&gt;</span> i propose the next meeting for Wednesday 15th Jan @ 19:30
+<a name="l-644"></a><span class="tm">20:47:48</span><span class="nk"> &lt;Daviey&gt;</span> okay, topic shift - Laney :)
+<a name="l-645"></a><span class="tm">20:47:58</span><span class="nk"> &lt;Laney&gt;</span> that's it
+<a name="l-646"></a><span class="tm">20:48:01</span><span class="nk"> &lt;Daviey&gt;</span> erm
+<a name="l-647"></a><span class="tm">20:48:01</span><span class="nk"> &lt;Laney&gt;</span> [topic] AOB
+<a name="l-648"></a><span class="tm">20:48:02</span><span class="nk"> &lt;MootBot&gt;</span> New Topic:  AOB
+<a name="l-649"></a><span class="tm">20:48:21</span><span class="nk"> &lt;webpigeon&gt;</span> AOB?
+<a name="l-650"></a><span class="tm">20:48:23</span><span class="nk"> &lt;Daviey&gt;</span> nothing from me :)
+<a name="l-651"></a><span class="tm">20:48:26</span><span class="nk"> &lt;andylockran&gt;</span> Any Other Business
+<a name="l-652"></a><span class="tm">20:48:27</span><span class="nk"> &lt;Daviey&gt;</span> Any other Biz
+<a name="l-653"></a><span class="tm">20:48:33</span><span class="nk"> &lt;webpigeon&gt;</span> ah :)
+<a name="l-654"></a><span class="tm">20:48:38</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> AOCB
+<a name="l-655"></a><span class="tm">20:48:38</span><span class="nk"> &lt;technolalia&gt;</span> <span class="hi">fosdem:</span> who's going?
+<a name="l-656"></a><span class="tm">20:48:48</span><span class="nk"> &lt;popey&gt;</span> o/ possibly
+<a name="l-657"></a><span class="tm">20:48:49</span><span class="nk"> &lt;Daviey&gt;</span> most likely  o/
+<a name="l-658"></a><span class="tm">20:48:56</span><span class="nk"> &lt;technolalia&gt;</span> definately - all booked
+<a name="l-659"></a><span class="tm">20:49:06</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">technolalia:</span> eurotunnel?
+<a name="l-660"></a><span class="tm">20:49:08</span><span class="nk"> &lt;technolalia&gt;</span> there will be an ubuntu stall of some sort there, I've heard
+<a name="l-661"></a><span class="tm">20:49:08</span><span class="nk"> &lt;franki^&gt;</span> what is fosdem? :)
+<a name="l-662"></a><span class="tm">20:49:15</span><span class="nk"> &lt;popey&gt;</span> http://fosdem.org/
+<a name="l-663"></a><span class="tm">20:49:16</span><span class="nk"> &lt;MootBot&gt;</span> LINK received:  http://fosdem.org/
+<a name="l-664"></a><span class="tm">20:49:16</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">technolalia:</span> there normally is
+<a name="l-665"></a><span class="tm">20:49:18</span><span class="nk"> &lt;popey&gt;</span> conference brussels
+<a name="l-666"></a><span class="tm">20:49:26</span><span class="nk"> &lt;james_w&gt;</span> o/
+<a name="l-667"></a><span class="tm">20:49:30</span><span class="nk"> &lt;technolalia&gt;</span> and various people from other loco teams are planning to attend
+<a name="l-668"></a><span class="tm">20:49:44</span><span class="nk"> &lt;technolalia&gt;</span> yes, eurotunnel
+<a name="l-669"></a><span class="tm">20:50:06</span><span class="nk"> &lt;Daviey&gt;</span> good -o
+<a name="l-670"></a><span class="tm">20:50:13</span><span class="nk"> &lt;Daviey&gt;</span> any other AOB?
+<a name="l-671"></a><span class="tm">20:50:27</span><span class="nk"> &lt;MooDoo&gt;</span> sorry chaps, got to go, baby calling......
+<a name="l-672"></a><span class="tm">20:50:33</span><span class="nk"> &lt;Daviey&gt;</span> great, Laney topic shift - next meeting
+<a name="l-673"></a><span class="tm">20:50:34</span><span class="nk"> &lt;Laney&gt;</span> going, going
+<a name="l-674"></a><span class="tm">20:50:36</span><span class="nk"> &lt;popey&gt;</span> can i ask that whoever puts the info on the wiki - can then outline the action items?
+<a name="l-675"></a><span class="tm">20:50:39</span><span class="nk"> &lt;Laney&gt;</span> [topic] next meeting
+<a name="l-676"></a><span class="tm">20:50:40</span><span class="nk"> &lt;MootBot&gt;</span> New Topic:  next meeting
+<a name="l-677"></a><span class="tm">20:50:45</span><span class="nk"> &lt;popey&gt;</span> so we know exactly whats happening?
+<a name="l-678"></a><span class="tm">20:50:54</span><span class="nk"> &lt;popey&gt;</span> 20:47:44 &lt; popey&gt; i propose the next meeting for Wednesday 15th Jan @ 19:30
+<a name="l-679"></a><span class="tm">20:51:00</span><span class="nk"> &lt;Daviey&gt;</span> <span class="hi">popey:</span> sounds like the chair'sjob :)
+<a name="l-680"></a><span class="tm">20:51:10 </span><span class="nka">* popey</span> <span class="ac">nudges Laney :)</span>
+<a name="l-681"></a><span class="tm">20:51:12</span><span class="nk"> &lt;`Chris&gt;</span> By the next meeting, find Bugjam venues?
+<a name="l-682"></a><span class="tm">20:51:13</span><span class="nk"> &lt;Laney&gt;</span> rofl
+<a name="l-683"></a><span class="tm">20:51:22</span><span class="nk"> &lt;`Chris&gt;</span> Especially find out about Wifi access? D:
+<a name="l-684"></a><span class="tm">20:51:33</span><span class="nk"> &lt;Laney&gt;</span> yes, that sounds like a fine date
+<a name="l-685"></a><span class="tm">20:51:39</span><span class="nk"> &lt;ProfFalken&gt;</span> <span class="hi">popey:</span> Weds 14th or Thurs 15th? ;o)
+<a name="l-686"></a><span class="tm">20:51:46</span><span class="nk"> &lt;Daviey&gt;</span> i might suggest next Sunday might be long enough for the mailing list threads to get moving
+<a name="l-687"></a><span class="tm">20:51:49</span><span class="nk"> &lt;brobostigon&gt;</span> i am happy with the 15th
+<a name="l-688"></a><span class="tm">20:51:50</span><span class="nk"> &lt;popey&gt;</span> stupid kde calendar
+<a name="l-689"></a><span class="tm">20:51:56</span><span class="nk"> &lt;popey&gt;</span> wednesday 14th!
+<a name="l-690"></a><span class="tm">20:51:59</span><span class="nk"> &lt;Laney&gt;</span> If people can post their threads in the next couple of days
+<a name="l-691"></a><span class="tm">20:52:20</span><span class="nk"> &lt;popey&gt;</span> ok
+<a name="l-692"></a><span class="tm">20:52:29</span><span class="nk"> &lt;daubers&gt;</span> I won't have any interwebs for the next week, but will try and attend through other means
+<a name="l-693"></a><span class="tm">20:52:36</span><span class="nk"> &lt;popey&gt;</span> next sunday is good by me too
+<a name="l-694"></a><span class="tm">20:52:40</span><span class="nk"> &lt;popey&gt;</span> quicker the better IMO
+<a name="l-695"></a><span class="tm">20:52:47</span><span class="nk"> &lt;gLAsgowMonkey&gt;</span> +1 for Sunday
+<a name="l-696"></a><span class="tm">20:52:50</span><span class="nk"> &lt;popey&gt;</span> +1
+<a name="l-697"></a><span class="tm">20:52:52</span><span class="nk"> &lt;Laney&gt;</span> one week from today?
+<a name="l-698"></a><span class="tm">20:52:53</span><span class="nk"> &lt;Daviey&gt;</span> +1 Sunday
+<a name="l-699"></a><span class="tm">20:52:54</span><span class="nk"> &lt;ProfFalken&gt;</span> +1
+<a name="l-700"></a><span class="tm">20:52:55</span><span class="nk"> &lt;`Chris&gt;</span> +1 Wednesday
+<a name="l-701"></a><span class="tm">20:52:55</span><span class="nk"> &lt;Daviey&gt;</span> yes
+<a name="l-702"></a><span class="tm">20:53:23</span><span class="nk"> &lt;Laney&gt;</span> done
+<a name="l-703"></a><span class="tm">20:53:25</span><span class="nk"> &lt;Daviey&gt;</span> okay, indifference prevails :)
+<a name="l-704"></a><span class="tm">20:53:27</span><span class="nk"> &lt;popey&gt;</span> \o/
+<a name="l-705"></a><span class="tm">20:53:30</span><span class="nk"> &lt;popey&gt;</span> wooot
+<a name="l-706"></a><span class="tm">20:53:31</span><span class="nk"> &lt;Laney&gt;</span> thanks for attending all
+<a name="l-707"></a><span class="tm">20:53:38</span><span class="nk"> &lt;Laney&gt;</span> <span class="cmd">#endmeeting</span><span class="cmdline"></span></pre>
+</body></html>

=== added file 'tests/ukmeet2.moin.txt'
--- tests/ukmeet2.moin.txt	1970-01-01 00:00:00 +0000
+++ tests/ukmeet2.moin.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,72 @@
+= #ukmeet2 Meeting =
+
+
+Meeting started by Laney at 19:34:00 UTC.  The full logs are available
+at tests/ukmeet2.log.html .
+
+
+
+== Meeting summary ==
+
+* '''Direction for 2009'''  (Laney, 19:36:47)
+** ''LINK:'' http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest   (Laney, 19:39:48)
+** ''LINK:'' https://wiki.ubuntu.com/UbuntuFreeCultureShowcase   (Laney, 19:40:26)
+** ''LINK:'' https://lists.ubuntu.com/archives/ubuntu-marketing/2008-December/thread.html   (popey, 19:45:50)
+** ''LINK:'' https://wiki.ubuntu.com/UKTeam/IdeasPool   (MooDoo, 20:10:58)
+
+* '''Free Media - MooDoo'''  (Laney, 20:27:03)
+
+* '''AOB'''  (Laney, 20:48:01)
+** ''LINK:'' http://fosdem.org/   (popey, 20:49:15)
+
+* '''next meeting'''  (Laney, 20:50:39)
+
+
+
+Meeting ended at 20:53:38 UTC.
+
+
+
+== Action items ==
+
+* (none)
+
+
+
+== People present (lines said) ==
+
+* popey (212)
+* Daviey (174)
+* MooDoo (47)
+* brobostigon (32)
+* ProfFalken (30)
+* Laney (27)
+* `Chris (19)
+* gord (19)
+* gLAsgowMonkey (17)
+* james_w (15)
+* webpigeon (14)
+* sheepeatingtaz (13)
+* daubers (12)
+* technolalia (11)
+* MootBot (9)
+* Ging (8)
+* jono (8)
+* andy101 (7)
+* franki^ (6)
+* kalessin1 (6)
+* WastePotato (5)
+* andylockran (4)
+* Nafallo (3)
+* DJones (2)
+* linux1 (1)
+* vixey (1)
+* slarty (1)
+* ubot5 (1)
+* sigh* (1)
+* aos101 (1)
+* txwikinger (1)
+
+
+
+Generated by MeetBot 0.1.4 (http://wiki.ubuntu.com/AlanBell)
\ No newline at end of file

=== added file 'tests/ukmeet2.mw.txt'
--- tests/ukmeet2.mw.txt	1970-01-01 00:00:00 +0000
+++ tests/ukmeet2.mw.txt	2012-01-28 02:35:27 +0000
@@ -0,0 +1,72 @@
+= #ukmeet2 Meeting =
+
+
+Meeting started by Laney at 19:34:00 UTC.  The full logs are available
+at tests/ukmeet2.log.html .
+
+
+
+== Meeting summary ==
+
+* '''Direction for 2009'''  (Laney, 19:36:47)
+** ''LINK:'' http://video.linuxfoundation.org/category/video-category/-linux-foundation-video-contest   (Laney, 19:39:48)
+** ''LINK:'' https://wiki.ubuntu.com/UbuntuFreeCultureShowcase   (Laney, 19:40:26)
+** ''LINK:'' https://lists.ubuntu.com/archives/ubuntu-marketing/2008-December/thread.html   (popey, 19:45:50)
+** ''LINK:'' https://wiki.ubuntu.com/UKTeam/IdeasPool   (MooDoo, 20:10:58)
+
+* '''Free Media - MooDoo'''  (Laney, 20:27:03)
+
+* '''AOB'''  (Laney, 20:48:01)
+** ''LINK:'' http://fosdem.org/   (popey, 20:49:15)
+
+* '''next meeting'''  (Laney, 20:50:39)
+
+
+
+Meeting ended at 20:53:38 UTC.
+
+
+
+== Action items ==
+
+* (none)
+
+
+
+== People present (lines said) ==
+
+* popey (212)
+* Daviey (174)
+* MooDoo (47)
+* brobostigon (32)
+* ProfFalken (30)
+* Laney (27)
+* `Chris (19)
+* gord (19)
+* gLAsgowMonkey (17)
+* james_w (15)
+* webpigeon (14)
+* sheepeatingtaz (13)
+* daubers (12)
+* technolalia (11)
+* MootBot (9)
+* Ging (8)
+* jono (8)
+* andy101 (7)
+* franki^ (6)
+* kalessin1 (6)
+* WastePotato (5)
+* andylockran (4)
+* Nafallo (3)
+* DJones (2)
+* linux1 (1)
+* vixey (1)
+* slarty (1)
+* ubot5 (1)
+* sigh* (1)
+* aos101 (1)
+* txwikinger (1)
+
+
+
+Generated by MeetBot 0.1.4 (http://wiki.ubuntu.com/AlanBell)
\ No newline at end of file

=== added file 'writers.py'
--- writers.py	1970-01-01 00:00:00 +0000
+++ writers.py	2012-01-28 02:35:27 +0000
@@ -0,0 +1,1323 @@
+# Richard Darst, June 2009
+
+###
+# Copyright (c) 2009, Richard Darst
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#   * Redistributions of source code must retain the above copyright notice,
+#     this list of conditions, and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright notice,
+#     this list of conditions, and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#   * Neither the name of the author of this software nor the name of
+#     contributors to this software may be used to endorse or promote products
+#     derived from this software without specific prior written consent.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+###
+
+import os
+import re
+import textwrap
+import time
+
+#from meeting import timeZone, meetBotInfoURL
+
+# Needed for testing with isinstance() for properly writing.
+#from items import Topic, Action
+import items
+
+# Data sanitizing for various output methods
+def html(text):
+    """Escape bad sequences (in HTML) in user-generated lines."""
+    return text.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
+rstReplaceRE = re.compile('_( |-|$)')
+def rst(text):
+    """Escapes bad sequences in reST"""
+    return rstReplaceRE.sub(r'\_\1', text)
+def text(text):
+    """Escapes bad sequences in text (not implemented yet)"""
+    return text
+def mw(text):
+    """Escapes bad sequences in MediaWiki markup (not implemented yet)"""
+    return text
+def moin(text):
+    """Escapes bad sequences in Moin Moin wiki markup (not implemented yet)"""
+    return text
+
+
+
+# wraping functions (for RST)
+class TextWrapper(textwrap.TextWrapper):
+    wordsep_re = re.compile(r'(\s+)')
+def wrapList(item, indent=0):
+    return TextWrapper(width=72, initial_indent=' '*indent,
+                       subsequent_indent= ' '*(indent+2),
+                       break_long_words=False).fill(item)
+def replaceWRAP(item):
+    re_wrap = re.compile(r'sWRAPs(.*)eWRAPe', re.DOTALL)
+    def repl(m):
+        return TextWrapper(width=72, break_long_words=False).fill(m.group(1))
+    return re_wrap.sub(repl, item)
+
+
+def MeetBotVersion():
+    import meeting
+    if hasattr(meeting, '__version__'):
+        return ' '+meeting.__version__
+    else:
+        return ''
+
+
+class _BaseWriter(object):
+    def __init__(self, M, **kwargs):
+        self.M = M
+
+    def format(self, extension=None):
+        """Override this method to implement the formatting.
+
+        For file output writers, the method should return a unicode
+        object containing the contents of the file to write.
+
+        The argument 'extension' is the key from `writer_map`.  For
+        file writers, this can (and should) be ignored.  For non-file
+        outputs, this can be used to This can be used to pass data,
+        """
+        raise NotImplementedError
+
+    @property
+    def pagetitle(self):
+        if self.M._meetingTopic:
+            return "%s: %s"%(self.M.channel, self.M._meetingTopic)
+        return "%s Meeting"%self.M.channel
+
+    def replacements(self):
+        return {'pageTitle':self.pagetitle,
+                'owner':self.M.owner,
+                'starttime':time.strftime("%H:%M:%S", self.M.starttime),
+                'endtime':time.strftime("%H:%M:%S", self.M.endtime),
+                'timeZone':self.M.config.timeZone,
+                'fullLogs':self.M.config.basename+'.log.html',
+                'fullLogsFullURL':self.M.config.filename(url=True)+'.log.html',
+                'MeetBotInfoURL':self.M.config.MeetBotInfoURL,
+                'MeetBotVersion':MeetBotVersion(),
+             }
+    def iterNickCounts(self):
+        nicks = [ (n,c) for (n,c) in self.M.attendees.iteritems() ]
+        nicks.sort(key=lambda x: x[1], reverse=True)
+        return nicks
+
+    def iterActionItemsNick(self):
+        for nick in sorted(self.M.attendees.keys(), key=lambda x: x.lower()):
+            def nickitems():
+                for m in self.M.minutes:
+                    # The hack below is needed because of pickling problems
+                    if m.itemtype != "ACTION": continue
+                    if m.line.find(nick) == -1: continue
+                    m.assigned = True
+                    yield m
+            yield nick, nickitems()
+    def iterActionItemsUnassigned(self):
+        for m in self.M.minutes:
+            if m.itemtype != "ACTION": continue
+            if getattr(m, 'assigned', False): continue
+            yield m
+
+    def get_template(self, escape=lambda s: s):
+        M = self.M
+        repl = self.replacements()
+
+
+        MeetingItems = [ ]
+        # We can have initial items with NO initial topic.  This
+        # messes up the templating, so, have this null topic as a
+        # stopgap measure.
+        nextTopic = {'topic':{'itemtype':'TOPIC', 'topic':'Prologue',
+                              'nick':'',
+                              'time':'', 'link':'', 'anchor':''},
+                     'items':[] }
+        haveTopic = False
+        for m in M.minutes:
+            if m.itemtype == "TOPIC":
+                if nextTopic['topic']['nick'] or nextTopic['items']:
+                    MeetingItems.append(nextTopic)
+                nextTopic = {'topic':m.template(M, escape), 'items':[] }
+                haveTopic = True
+            else:
+                nextTopic['items'].append(m.template(M, escape))
+        MeetingItems.append(nextTopic)
+        repl['MeetingItems'] = MeetingItems
+        # Format of MeetingItems:
+        # [ {'topic': {item_dict},
+        #    'items': [item_dict, item_object, item_object, ...]
+        #    },
+        #   { 'topic':...
+        #     'items':...
+        #    },
+        #   ....
+        # ]
+        #
+        # an item_dict has:
+        # item_dict = {'itemtype': TOPIC, ACTION, IDEA, or so on...
+        #              'line': the actual line that was said
+        #              'nick': nick of who said the line
+        #              'time': 10:53:15, for example, the time
+        #              'link': ${link}#${anchor} is the URL to link to.
+        #                      (page name, and bookmark)
+        #              'anchor': see above
+        #              'topic': if itemtype is TOPIC, 'line' is not given,
+        #                      instead we have 'topic'
+        #              'url':  if itemtype is LINK, the line should be created
+        #                      by "${link} ${line}", where 'link' is the URL
+        #                      to link to, and 'line' is the rest of the line
+        #                      (that isn't a URL)
+        #              'url_quoteescaped': 'url' but with " escaped for use in
+        #                                  <a href="$url_quoteescaped">
+        ActionItems = [ ]
+        for m in M.minutes:
+            if m.itemtype != "ACTION": continue
+            ActionItems.append(escape(m.line))
+        repl['ActionItems'] = ActionItems
+        # Format of ActionItems: It's just a very simple list of lines.
+        # [line, line, line, ...]
+        # line = (string of what it is)
+
+
+        ActionItemsPerson = [ ]
+        numberAssigned = 0
+        for nick, items in self.iterActionItemsNick():
+            thisNick = {'nick':escape(nick), 'items':[ ] }
+            for m in items:
+                numberAssigned += 1
+                thisNick['items'].append(escape(m.line))
+            if len(thisNick['items']) > 0:
+                ActionItemsPerson.append(thisNick)
+        # Work on the unassigned nicks.
+        thisNick = {'nick':'UNASSIGNED', 'items':[ ] }
+        for m in self.iterActionItemsUnassigned():
+            thisNick['items'].append(escape(m.line))
+        if len(thisNick['items']) > 1:
+            ActionItemsPerson.append(thisNick)
+        #if numberAssigned == 0:
+        #    ActionItemsPerson = None
+        repl['ActionItemsPerson'] = ActionItemsPerson
+        # Format of ActionItemsPerson
+        # ActionItemsPerson =
+        #  [ {'nick':nick_of_person,
+        #     'items': [item1, item2, item3, ...],
+        #    },
+        #   ...,
+        #   ...,
+        #    {'nick':'UNASSIGNED',
+        #     'items': [item1, item2, item3, ...],
+        #    }
+        #  ]
+
+
+        PeoplePresent = []
+        # sort by number of lines spoken
+        for nick, count in self.iterNickCounts():
+            PeoplePresent.append({'nick':escape(nick),
+                                  'count':count})
+        repl['PeoplePresent'] = PeoplePresent
+        # Format of PeoplePresent
+        # [{'nick':the_nick, 'count':count_of_lines_said},
+        #  ...,
+        #  ...,
+        # ]
+
+        return repl
+
+    def get_template2(self, escape=lambda s: s):
+        # let's make the data structure easier to use in the template
+        repl = self.get_template(escape=escape)
+        repl = {
+        'time':           { 'start': repl['starttime'], 'end': repl['endtime'], 'timezone': repl['timeZone'] },
+        'meeting':        { 'title': repl['pageTitle'], 'owner': repl['owner'], 'logs': repl['fullLogs'], 'logsFullURL': repl['fullLogsFullURL'] },
+        'attendees':      [ person for person in repl['PeoplePresent'] ],
+        'agenda':         [ { 'topic': item['topic'], 'notes': item['items'] } for item in repl['MeetingItems'] ],
+        'actions':        [ action for action in repl['ActionItems'] ],
+        'actions_person': [ { 'nick': attendee['nick'], 'actions': attendee['items'] } for attendee in repl['ActionItemsPerson'] ],
+        'meetbot':        { 'version': repl['MeetBotVersion'], 'url': repl['MeetBotInfoURL'] },
+        }
+        return repl
+
+
+class Template(_BaseWriter):
+    """Format a notes file using the genshi templating engine
+
+    Send an argument template=<filename> to specify which template to
+    use.  If `template` begins in '+', then it is relative to the
+    MeetBot source directory.  Included templates are:
+      +template.html
+      +template.txt
+
+    Some examples of using these options are:
+      writer_map['.txt|template=+template.html'] = writers.Template
+      writer_map['.txt|template=/home/you/template.txt] = writers.Template
+
+    If a template ends in .txt, parse with a text-based genshi
+    templater.  Otherwise, parse with a HTML-based genshi templater.
+    """
+    def format(self, extension=None, template='+template.html'):
+        repl = self.get_template2()
+
+        # If `template` begins in '+', then it in relative to the
+        # MeetBot source directory.
+        if template[0] == '+':
+            template = os.path.join(os.path.dirname(__file__), template[1:])
+        # If we don't test here, it might fail in the try: block
+        # below, then f.close() will fail and mask the original
+        # exception
+        if not os.access(template, os.F_OK):
+            raise IOError('File not found: %s'%template)
+
+        # Do we want to use a text template or HTML ?
+        import genshi.template
+        if template[-4:] in ('.txt', '.rst'):
+            Template = genshi.template.NewTextTemplate   # plain text
+        else:
+            Template = genshi.template.MarkupTemplate    # HTML-like
+
+        # Do the actual templating work
+        try:
+            f = open(template, 'r')
+            tmpl = Template(f.read())
+            stream = tmpl.generate(**repl)
+        finally:
+            f.close()
+
+        return stream.render()
+
+
+
+class _CSSmanager(object):
+    _css_head = textwrap.dedent('''\
+        <style type="text/css">
+        %s
+        </style>
+        ''')
+    def getCSS(self, name):
+        cssfile = getattr(self.M.config, 'cssFile_'+name, '')
+        if cssfile.lower() == 'none':
+            # special string 'None' means no style at all
+            return ''
+        elif cssfile in ('', 'default'):
+            # default CSS file
+            css_fname = os.path.join(os.path.dirname(__file__),
+                                     'css-'+name+'-default.css')
+        else:
+            css_fname = cssfile
+        try:
+            # Stylesheet specified
+            if getattr(self.M.config, 'cssEmbed_'+name, True):
+                # external stylesheet
+                css = file(css_fname).read()
+                return self._css_head%css
+            else:
+                # linked stylesheet
+                css_head = ('''<link rel="stylesheet" type="text/css" '''
+                            '''href="%s">'''%cssfile)
+                return css_head
+        except Exception, exc:
+            if not self.M.config.safeMode:
+                raise
+            import traceback
+            traceback.print_exc()
+            print "(exception above ignored, continuing)"
+            try:
+                css_fname = os.path.join(os.path.dirname(__file__),
+                                         'css-'+name+'-default.css')
+                css = open(css_fname).read()
+                return self._css_head%css
+            except:
+                if not self.M.config.safeMode:
+                    raise
+                import traceback
+                traceback.print_exc()
+                return ''
+
+
+class TextLog(_BaseWriter):
+    def format(self, extension=None):
+        M = self.M
+        """Write raw text logs."""
+        return "\n".join(M.lines)
+    update_realtime = True
+
+
+
+class HTMLlog1(_BaseWriter):
+    def format(self, extension=None):
+        """Write pretty HTML logs."""
+        M = self.M
+        # pygments lexing setup:
+        # (pygments HTML-formatter handles HTML-escaping)
+        import pygments
+        from pygments.lexers import IrcLogsLexer
+        from pygments.formatters import HtmlFormatter
+        import pygments.token as token
+        from pygments.lexer import bygroups
+        # Don't do any encoding in this function with pygments.
+        # That's only right before the i/o functions in the Config
+        # object.
+        formatter = HtmlFormatter(lineanchors='l',
+                                  full=True, style=M.config.pygmentizeStyle,
+                                  outencoding=self.M.config.output_codec)
+        Lexer = IrcLogsLexer
+        Lexer.tokens['msg'][1:1] = \
+           [ # match:   #topic commands
+            (r"(\#topic[ \t\f\v]*)(.*\n)",
+             bygroups(token.Keyword, token.Generic.Heading), '#pop'),
+             # match:   #command   (others)
+            (r"(\#[^\s]+[ \t\f\v]*)(.*\n)",
+             bygroups(token.Keyword, token.Generic.Strong), '#pop'),
+           ]
+        lexer = Lexer()
+        #from rkddp.interact import interact ; interact()
+        out = pygments.highlight("\n".join(M.lines), lexer, formatter)
+        # Hack it to add "pre { white-space: pre-wrap; }", which make
+        # it wrap the pygments html logs.  I think that in a newer
+        # version of pygmetns, the "prestyles" HTMLFormatter option
+        # would do this, but I want to maintain compatibility with
+        # lenny.  Thus, I do these substitution hacks to add the
+        # format in.  Thanks to a comment on the blog of Francis
+        # Giannaros (http://francis.giannaros.org) for the suggestion
+        # and instructions for how.
+        out,n = re.subn(r"(\n\s*pre\s*\{[^}]+;\s*)(\})",
+                        r"\1\n      white-space: pre-wrap;\2",
+                        out, count=1)
+        if n == 0:
+            out = re.sub(r"(\n\s*</style>)",
+                         r"\npre { white-space: pre-wrap; }\1",
+                         out, count=1)
+        return out
+
+class HTMLlog2(_BaseWriter, _CSSmanager):
+    def format(self, extension=None):
+        """Write pretty HTML logs."""
+        M = self.M
+        lines = [ ]
+        line_re = re.compile(r"""\s*
+            (?P<time> \[?[0-9:\s]*\]?)\s*
+            (?P<nick>\s+<[@+\s]?[^>]+>)\s*
+            (?P<line>.*)
+        """, re.VERBOSE)
+        action_re = re.compile(r"""\s*
+            (?P<time> \[?[0-9:\s]*\]?)\s*
+            (?P<nick>\*\s+[@+\s]?[^\s]+)\s*
+            (?P<line>.*)
+        """,re.VERBOSE)
+        command_re = re.compile(r"(#[^\s]+[ \t\f\v]*)(.*)")
+        command_topic_re = re.compile(r"(#topic[ \t\f\v]*)(.*)")
+        hilight_re = re.compile(r"([^\s]+:)( .*)")
+        lineNumber = 0
+        for l in M.lines:
+            lineNumber += 1  # starts from 1
+            # is it a regular line?
+            m = line_re.match(l)
+            if m is not None:
+                line = m.group('line')
+                # Match #topic
+                m2 = command_topic_re.match(line)
+                if m2 is not None:
+                    outline = ('<span class="topic">%s</span>'
+                               '<span class="topicline">%s</span>'%
+                               (html(m2.group(1)),html(m2.group(2))))
+                # Match other #commands
+                if m2 is None:
+                  m2 = command_re.match(line)
+                  if m2 is not None:
+                    outline = ('<span class="cmd">%s</span>'
+                               '<span class="cmdline">%s</span>'%
+                               (html(m2.group(1)),html(m2.group(2))))
+                # match hilights
+                if m2 is None:
+                  m2 = hilight_re.match(line)
+                  if m2 is not None:
+                    outline = ('<span class="hi">%s</span>'
+                               '%s'%
+                               (html(m2.group(1)),html(m2.group(2))))
+                if m2 is None:
+                    outline = html(line)
+                lines.append('<a name="l-%(lineno)s"></a>'
+                             '<span class="tm">%(time)s</span>'
+                             '<span class="nk">%(nick)s</span> '
+                             '%(line)s'%{'lineno':lineNumber,
+                                         'time':html(m.group('time')),
+                                         'nick':html(m.group('nick')),
+                                         'line':outline,})
+                continue
+            m = action_re.match(l)
+            # is it a action line?
+            if m is not None:
+                lines.append('<a name="l-%(lineno)s"></a>'
+                             '<span class="tm">%(time)s</span>'
+                             '<span class="nka">%(nick)s</span> '
+                             '<span class="ac">%(line)s</span>'%
+                               {'lineno':lineNumber,
+                                'time':html(m.group('time')),
+                                'nick':html(m.group('nick')),
+                                'line':html(m.group('line')),})
+                continue
+            print l
+            print m.groups()
+            print "**error**", l
+
+        css = self.getCSS(name='log')
+        return html_template%{'pageTitle':"%s log"%html(M.channel),
+                              #'body':"<br>\n".join(lines),
+                              'body':"<pre>"+("\n".join(lines))+"</pre>",
+                              'headExtra':css,
+                              }
+HTMLlog = HTMLlog2
+
+
+
+html_template = textwrap.dedent('''\
+    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+    <html>
+    <head>
+    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+    <title>%(pageTitle)s</title>
+    %(headExtra)s</head>
+
+    <body>
+    %(body)s
+    </body></html>
+    ''')
+
+
+class HTML1(_BaseWriter):
+
+    body = textwrap.dedent('''\
+    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+    <html>
+    <head>
+    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+    <title>%(pageTitle)s</title>
+    </head>
+    <body>
+    <h1>%(pageTitle)s</h1>
+    Meeting started by %(owner)s at %(starttime)s %(timeZone)s.
+    (<a href="%(fullLogs)s">full logs</a>)<br>
+
+
+    <table border=1>
+    %(MeetingItems)s
+    </table>
+    Meeting ended at %(endtime)s %(timeZone)s.
+    (<a href="%(fullLogs)s">full logs</a>)
+
+    <br><br><br>
+
+    <b>Action Items</b><ol>
+    %(ActionItems)s
+    </ol>
+    <br>
+
+    <b>Action Items, by person</b>
+    <ol>
+    %(ActionItemsPerson)s
+    </ol><br>
+
+    <b>People Present (lines said):</b><ol>
+    %(PeoplePresent)s
+    </ol>
+
+    <br>
+    Generated by <a href="%(MeetBotInfoURL)s">MeetBot</a>%(MeetBotVersion)s.
+    </body></html>
+    ''')
+
+    def format(self, extension=None):
+        """Write the minutes summary."""
+        M = self.M
+
+        # Add all minute items to the table
+        MeetingItems = [ ]
+        for m in M.minutes:
+            MeetingItems.append(m.html(M))
+        MeetingItems = "\n".join(MeetingItems)
+
+        # Action Items
+        ActionItems = [ ]
+        for m in M.minutes:
+            # The hack below is needed because of pickling problems
+            if m.itemtype != "ACTION": continue
+            ActionItems.append("  <li>%s</li>"%html(m.line))
+        if len(ActionItems) == 0:
+            ActionItems.append("  <li>(none)</li>")
+        ActionItems = "\n".join(ActionItems)
+
+        # Action Items, by person (This could be made lots more efficient)
+        ActionItemsPerson = [ ]
+        for nick, items in self.iterActionItemsNick():
+            headerPrinted = False
+            for m in items:
+                if not headerPrinted:
+                    ActionItemsPerson.append("  <li> %s <ol>"%html(nick))
+                    headerPrinted = True
+                ActionItemsPerson.append("    <li>%s</li>"%html(m.line))
+            if headerPrinted:
+                ActionItemsPerson.append("  </ol></li>")
+        # unassigned items:
+        ActionItemsPerson.append("  <li><b>UNASSIGNED</b><ol>")
+        numberUnassigned = 0
+        for m in self.iterActionItemsUnassigned():
+            ActionItemsPerson.append("    <li>%s</li>"%html(m.line))
+            numberUnassigned += 1
+        if numberUnassigned == 0:
+            ActionItemsPerson.append("    <li>(none)</li>")
+        ActionItemsPerson.append('  </ol>\n</li>')
+        ActionItemsPerson = "\n".join(ActionItemsPerson)
+
+        # People Attending
+        PeoplePresent = [ ]
+        # sort by number of lines spoken
+        for nick, count in self.iterNickCounts():
+            PeoplePresent.append('  <li>%s (%s)</li>'%(html(nick), count))
+        PeoplePresent = "\n".join(PeoplePresent)
+
+        # Actual formatting and replacement
+        repl = self.replacements()
+        repl.update({'MeetingItems':MeetingItems,
+                     'ActionItems': ActionItems,
+                     'ActionItemsPerson': ActionItemsPerson,
+                     'PeoplePresent':PeoplePresent,
+                     })
+        body = self.body
+        body = body%repl
+        body = replaceWRAP(body)
+        return body
+
+
+
+class HTML2(_BaseWriter, _CSSmanager):
+    """HTML formatter without tables.
+    """
+    def meetingItems(self):
+        """Return the main 'Meeting minutes' block."""
+        M = self.M
+
+        # Add all minute items to the table
+        MeetingItems = [ ]
+        MeetingItems.append(self.heading('Meeting summary'))
+        MeetingItems.append("<ol>")
+
+        haveTopic = None
+        inSublist = False
+        for m in M.minutes:
+            item = '<li>'+m.html2(M)
+            if m.itemtype == "TOPIC":
+                if inSublist:
+                    MeetingItems.append("</ol>")
+                    inSublist = False
+                if haveTopic:
+                    MeetingItems.append("<br></li>")
+                item = item
+                haveTopic = True
+            else:
+                if not inSublist:
+                    if not haveTopic:
+                        MeetingItems.append('<li>')
+                        haveTopic = True
+                    MeetingItems.append('<ol type="a">')
+                    inSublist = True
+                if haveTopic: item = wrapList(item, 2)+"</li>"
+                else:         item = wrapList(item, 0)+"</li>"
+            MeetingItems.append(item)
+            #MeetingItems.append("</li>")
+
+        if inSublist:
+            MeetingItems.append("</ol>")
+        if haveTopic:
+            MeetingItems.append("</li>")
+
+        MeetingItems.append("</ol>")
+        MeetingItems = "\n".join(MeetingItems)
+        return MeetingItems
+
+    def actionItems(self):
+        """Return the 'Action items' block."""
+        M = self.M
+        # Action Items
+        ActionItems = [ ]
+        ActionItems.append(self.heading('Action items'))
+        ActionItems.append('<ol>')
+        numActionItems = 0
+        for m in M.minutes:
+            # The hack below is needed because of pickling problems
+            if m.itemtype != "ACTION": continue
+            ActionItems.append("  <li>%s</li>"%html(m.line))
+            numActionItems += 1
+        if numActionItems == 0:
+            ActionItems.append("  <li>(none)</li>")
+        ActionItems.append('</ol>')
+        ActionItems = "\n".join(ActionItems)
+        return ActionItems
+    def actionItemsPerson(self):
+        """Return the 'Action items, by person' block."""
+        M = self.M
+        # Action Items, by person (This could be made lots more efficient)
+        ActionItemsPerson = [ ]
+        ActionItemsPerson.append(self.heading('Action items, by person'))
+        ActionItemsPerson.append('<ol>')
+        numberAssigned = 0
+        for nick, items in self.iterActionItemsNick():
+            headerPrinted = False
+            for m in items:
+                numberAssigned += 1
+                if not headerPrinted:
+                    ActionItemsPerson.append("  <li> %s <ol>"%html(nick))
+                    headerPrinted = True
+                ActionItemsPerson.append("    <li>%s</li>"%html(m.line))
+            if headerPrinted:
+                ActionItemsPerson.append("  </ol></li>")
+        # unassigned items:
+        if len(ActionItemsPerson) == 0:
+            doActionItemsPerson = False
+        else:
+            doActionItemsPerson = True
+        Unassigned = [ ]
+        Unassigned.append("  <li><b>UNASSIGNED</b><ol>")
+        numberUnassigned = 0
+        for m in self.iterActionItemsUnassigned():
+            Unassigned.append("    <li>%s</li>"%html(m.line))
+            numberUnassigned += 1
+        if numberUnassigned == 0:
+            Unassigned.append("    <li>(none)</li>")
+        Unassigned.append('  </ol>\n</li>')
+        if numberUnassigned > 1:
+            ActionItemsPerson.extend(Unassigned)
+        ActionItemsPerson.append('</ol>')
+        ActionItemsPerson = "\n".join(ActionItemsPerson)
+
+        # Only return anything if there are assigned items.
+        if numberAssigned == 0:
+            return None
+        else:
+            return ActionItemsPerson
+    def peoplePresent(self):
+        """Return the 'People present' block."""
+        # People Attending
+        PeoplePresent = []
+        PeoplePresent.append(self.heading('People present (lines said)'))
+        PeoplePresent.append('<ol>')
+        # sort by number of lines spoken
+        for nick, count in self.iterNickCounts():
+            PeoplePresent.append('  <li>%s (%s)</li>'%(html(nick), count))
+        PeoplePresent.append('</ol>')
+        PeoplePresent = "\n".join(PeoplePresent)
+        return PeoplePresent
+    def heading(self, name):
+        return '<h3>%s</h3>'%name
+
+    def format(self, extension=None):
+        """Write the minutes summary."""
+        M = self.M
+
+        repl = self.replacements()
+
+        body = [ ]
+        body.append(textwrap.dedent("""\
+            <h1>%(pageTitle)s</h1>
+            <span class="details">
+            Meeting started by %(owner)s at %(starttime)s %(timeZone)s
+            (<a href="%(fullLogs)s">full logs</a>).</span>
+            """%repl))
+        body.append(self.meetingItems())
+        body.append(textwrap.dedent("""\
+            <span class="details">
+            Meeting ended at %(endtime)s %(timeZone)s
+            (<a href="%(fullLogs)s">full logs</a>).</span>
+            """%repl))
+        body.append(self.actionItems())
+        body.append(self.actionItemsPerson())
+        body.append(self.peoplePresent())
+        body.append("""<span class="details">"""
+                    """Generated by <a href="%(MeetBotInfoURL)s">MeetBot</a>"""
+                    """%(MeetBotVersion)s.</span>"""%repl)
+        body = [ b for b in body if b is not None ]
+        body = "\n<br><br>\n\n\n\n".join(body)
+        body = replaceWRAP(body)
+
+
+        css = self.getCSS(name='minutes')
+        repl.update({'body': body,
+                     'headExtra': css,
+                     })
+        html = html_template % repl
+
+        return html
+HTML = HTML2
+
+
+class ReST(_BaseWriter):
+
+    body = textwrap.dedent("""\
+    %(titleBlock)s
+    %(pageTitle)s
+    %(titleBlock)s
+
+
+    sWRAPsMeeting started by %(owner)s at %(starttime)s %(timeZone)s.
+    The `full logs`_ are available.eWRAPe
+
+    .. _`full logs`: %(fullLogs)s
+
+
+
+    Meeting summary
+    ---------------
+    %(MeetingItems)s
+
+    Meeting ended at %(endtime)s %(timeZone)s.
+
+
+
+
+    Action Items
+    ------------
+    %(ActionItems)s
+
+
+
+
+    Action Items, by person
+    -----------------------
+    %(ActionItemsPerson)s
+
+
+
+
+    People Present (lines said)
+    ---------------------------
+    %(PeoplePresent)s
+
+
+
+
+    Generated by `MeetBot`_%(MeetBotVersion)s
+
+    .. _`MeetBot`: %(MeetBotInfoURL)s
+    """)
+
+    def format(self, extension=None):
+        """Return a ReStructured Text minutes summary."""
+        M = self.M
+
+        # Agenda items
+        MeetingItems = [ ]
+        M.rst_urls = [ ]
+        M.rst_refs = { }
+        haveTopic = None
+        for m in M.minutes:
+            item = "* "+m.rst(M)
+            if m.itemtype == "TOPIC":
+                if haveTopic:
+                    MeetingItems.append("")
+                item = wrapList(item, 0)
+                haveTopic = True
+            else:
+                if haveTopic: item = wrapList(item, 2)
+                else:         item = wrapList(item, 0)
+            MeetingItems.append(item)
+        MeetingItems = '\n\n'.join(MeetingItems)
+        MeetingURLs = "\n".join(M.rst_urls)
+        del M.rst_urls, M.rst_refs
+        MeetingItems = MeetingItems + '\n\n'+MeetingURLs
+
+        # Action Items
+        ActionItems = [ ]
+        for m in M.minutes:
+            # The hack below is needed because of pickling problems
+            if m.itemtype != "ACTION": continue
+            #already escaped
+            ActionItems.append(wrapList("* %s"%rst(m.line), indent=0))
+        ActionItems = "\n\n".join(ActionItems)
+
+        # Action Items, by person (This could be made lots more efficient)
+        ActionItemsPerson = [ ]
+        for nick in sorted(M.attendees.keys(), key=lambda x: x.lower()):
+            headerPrinted = False
+            for m in M.minutes:
+                # The hack below is needed because of pickling problems
+                if m.itemtype != "ACTION": continue
+                if m.line.find(nick) == -1: continue
+                if not headerPrinted:
+                    ActionItemsPerson.append("* %s"%rst(nick))
+                    headerPrinted = True
+                ActionItemsPerson.append(wrapList("* %s"%rst(m.line), 2))
+                m.assigned = True
+        # unassigned items:
+        Unassigned = [ ]
+        Unassigned.append("* **UNASSIGNED**")
+        numberUnassigned = 0
+        for m in M.minutes:
+            if m.itemtype != "ACTION": continue
+            if getattr(m, 'assigned', False): continue
+            Unassigned.append(wrapList("* %s"%rst(m.line), 2))
+            numberUnassigned += 1
+        if numberUnassigned == 0:
+            Unassigned.append("  * (none)")
+        if numberUnassigned > 1:
+            ActionItemsPerson.extend(Unassigned)
+        ActionItemsPerson = "\n\n".join(ActionItemsPerson)
+
+        # People Attending
+        PeoplePresent = [ ]
+        # sort by number of lines spoken
+        for nick, count in self.iterNickCounts():
+            PeoplePresent.append('* %s (%s)'%(rst(nick), count))
+        PeoplePresent = "\n\n".join(PeoplePresent)
+
+        # Actual formatting and replacement
+        repl = self.replacements()
+        repl.update({'titleBlock':('='*len(repl['pageTitle'])),
+                     'MeetingItems':MeetingItems,
+                     'ActionItems': ActionItems,
+                     'ActionItemsPerson': ActionItemsPerson,
+                     'PeoplePresent':PeoplePresent,
+                     })
+        body = self.body
+        body = body%repl
+        body = replaceWRAP(body)
+        return body
+
+class HTMLfromReST(_BaseWriter):
+
+    def format(self, extension=None):
+        M = self.M
+        import docutils.core
+        rst = ReST(M).format(extension)
+        rstToHTML = docutils.core.publish_string(rst, writer_name='html',
+                             settings_overrides={'file_insertion_enabled': 0,
+                                                 'raw_enabled': 0,
+                                'output_encoding':self.M.config.output_codec})
+        return rstToHTML
+
+
+
+class Text(_BaseWriter):
+
+    def meetingItems(self):
+        M = self.M
+
+        # Agenda items
+        MeetingItems = [ ]
+        MeetingItems.append(self.heading('Meeting summary'))
+        haveTopic = None
+        for m in M.minutes:
+            item = "* "+m.text(M)
+            if m.itemtype == "TOPIC":
+                if haveTopic:
+                    MeetingItems.append("")
+                item = wrapList(item, 0)
+                haveTopic = True
+            else:
+                if haveTopic: item = wrapList(item, 2)
+                else:         item = wrapList(item, 0)
+            MeetingItems.append(item)
+        MeetingItems = '\n'.join(MeetingItems)
+        return MeetingItems
+
+    def actionItems(self):
+        M = self.M
+        # Action Items
+        ActionItems = [ ]
+        numActionItems = 0
+        ActionItems.append(self.heading('Action items'))
+        for m in M.minutes:
+            # The hack below is needed because of pickling problems
+            if m.itemtype != "ACTION": continue
+            #already escaped
+            ActionItems.append(wrapList("* %s"%text(m.line), indent=0))
+            numActionItems += 1
+        if numActionItems == 0:
+            ActionItems.append("* (none)")
+        ActionItems = "\n".join(ActionItems)
+
+    def actionItemsPerson(self):
+        M = self.M
+        # Action Items, by person (This could be made lots more efficient)
+        ActionItemsPerson = [ ]
+        ActionItemsPerson.append(self.heading('Action items, by person'))
+        numberAssigned = 0
+        for nick in sorted(M.attendees.keys(), key=lambda x: x.lower()):
+            headerPrinted = False
+            for m in M.minutes:
+                # The hack below is needed because of pickling problems
+                if m.itemtype != "ACTION": continue
+                if m.line.find(nick) == -1: continue
+                if not headerPrinted:
+                    ActionItemsPerson.append("* %s"%text(nick))
+                    headerPrinted = True
+                ActionItemsPerson.append(wrapList("* %s"%text(m.line), 2))
+                numberAssigned += 1
+                m.assigned = True
+        # unassigned items:
+        Unassigned = [ ]
+        Unassigned.append("* **UNASSIGNED**")
+        numberUnassigned = 0
+        for m in M.minutes:
+            if m.itemtype != "ACTION": continue
+            if getattr(m, 'assigned', False): continue
+            Unassigned.append(wrapList("* %s"%text(m.line), 2))
+            numberUnassigned += 1
+        if numberUnassigned == 0:
+            Unassigned.append("  * (none)")
+        if numberUnassigned > 1:
+            ActionItemsPerson.extend(Unassigned)
+        ActionItemsPerson = "\n".join(ActionItemsPerson)
+
+        if numberAssigned == 0:
+            return None
+        else:
+            return ActionItemsPerson
+
+    def peoplePresent(self):
+        M = self.M
+        # People Attending
+        PeoplePresent = [ ]
+        PeoplePresent.append(self.heading('People present (lines said)'))
+        # sort by number of lines spoken
+        for nick, count in self.iterNickCounts():
+            PeoplePresent.append('* %s (%s)'%(text(nick), count))
+        PeoplePresent = "\n".join(PeoplePresent)
+        return PeoplePresent
+
+    def heading(self, name):
+        return '%s\n%s\n'%(name, '-'*len(name))
+
+
+    def format(self, extension=None):
+        """Return a plain text minutes summary."""
+        M = self.M
+
+        # Actual formatting and replacement
+        repl = self.replacements()
+        repl.update({'titleBlock':('='*len(repl['pageTitle'])),
+                     })
+
+
+        body = [ ]
+        body.append(textwrap.dedent("""\
+            %(titleBlock)s
+            %(pageTitle)s
+            %(titleBlock)s
+
+
+            sWRAPsMeeting started by %(owner)s at %(starttime)s
+            %(timeZone)s.  The full logs are available at
+            %(fullLogsFullURL)s .eWRAPe"""%repl))
+        body.append(self.meetingItems())
+        body.append(textwrap.dedent("""\
+            Meeting ended at %(endtime)s %(timeZone)s."""%repl))
+        body.append(self.actionItems())
+        body.append(self.actionItemsPerson())
+        body.append(self.peoplePresent())
+        body.append(textwrap.dedent("""\
+            Generated by `MeetBot`_%(MeetBotVersion)s"""%repl))
+        body = [ b for b in body if b is not None ]
+        body = "\n\n\n\n".join(body)
+        body = replaceWRAP(body)
+
+        return body
+
+
+class MediaWiki(_BaseWriter):
+    """Outputs MediaWiki formats.
+    """
+    def meetingItems(self):
+        M = self.M
+
+        # Agenda items
+        MeetingItems = [ ]
+        MeetingItems.append(self.heading('Meeting summary'))
+        haveTopic = None
+        for m in M.minutes:
+            item = "* "+m.mw(M)
+            if m.itemtype == "TOPIC":
+                if haveTopic:
+                    MeetingItems.append("") # line break
+                haveTopic = True
+            else:
+                if haveTopic: item = "*"+item
+            MeetingItems.append(item)
+        MeetingItems = '\n'.join(MeetingItems)
+        return MeetingItems
+
+    def actionItems(self):
+        M = self.M
+        # Action Items
+        ActionItems = [ ]
+        numActionItems = 0
+        ActionItems.append(self.heading('Action items'))
+        for m in M.minutes:
+            # The hack below is needed because of pickling problems
+            if m.itemtype != "ACTION": continue
+            #already escaped
+            ActionItems.append("* %s"%mw(m.line))
+            numActionItems += 1
+        if numActionItems == 0:
+            ActionItems.append("* (none)")
+        ActionItems = "\n".join(ActionItems)
+        return ActionItems
+
+    def actionItemsPerson(self):
+        M = self.M
+        # Action Items, by person (This could be made lots more efficient)
+        ActionItemsPerson = [ ]
+        ActionItemsPerson.append(self.heading('Action items, by person'))
+        numberAssigned = 0
+        for nick in sorted(M.attendees.keys(), key=lambda x: x.lower()):
+            headerPrinted = False
+            for m in M.minutes:
+                # The hack below is needed because of pickling problems
+                if m.itemtype != "ACTION": continue
+                if m.line.find(nick) == -1: continue
+                if not headerPrinted:
+                    ActionItemsPerson.append("* %s"%mw(nick))
+                    headerPrinted = True
+                ActionItemsPerson.append("** %s"%mw(m.line))
+                numberAssigned += 1
+                m.assigned = True
+        # unassigned items:
+        Unassigned = [ ]
+        Unassigned.append("* **UNASSIGNED**")
+        numberUnassigned = 0
+        for m in M.minutes:
+            if m.itemtype != "ACTION": continue
+            if getattr(m, 'assigned', False): continue
+            Unassigned.append("** %s"%mw(m.line))
+            numberUnassigned += 1
+        if numberUnassigned == 0:
+            Unassigned.append("  * (none)")
+        if numberUnassigned > 1:
+            ActionItemsPerson.extend(Unassigned)
+        ActionItemsPerson = "\n".join(ActionItemsPerson)
+
+        if numberAssigned == 0:
+            return None
+        else:
+            return ActionItemsPerson
+
+    def peoplePresent(self):
+        M = self.M
+        # People Attending
+        PeoplePresent = [ ]
+        PeoplePresent.append(self.heading('People present (lines said)'))
+        # sort by number of lines spoken
+        for nick, count in self.iterNickCounts():
+            PeoplePresent.append('* %s (%s)'%(mw(nick), count))
+        PeoplePresent = "\n".join(PeoplePresent)
+        return PeoplePresent
+
+    def heading(self, name, level=1):
+        return '%s %s %s\n'%('='*(level+1), name, '='*(level+1))
+
+
+    body_start = textwrap.dedent("""\
+            %(pageTitleHeading)s
+
+            sWRAPsMeeting started by %(owner)s at %(starttime)s
+            %(timeZone)s.  The full logs are available at
+            %(fullLogsFullURL)s .eWRAPe""")
+    def format(self, extension=None):
+        """Return a MediaWiki formatted minutes summary."""
+        M = self.M
+
+        # Actual formatting and replacement
+        repl = self.replacements()
+        repl.update({'titleBlock':('='*len(repl['pageTitle'])),
+                     'pageTitleHeading':self.heading(repl['pageTitle'],level=0)
+                     })
+
+
+        body = [ ]
+        body.append(self.body_start%repl)
+        body.append(self.meetingItems())
+        body.append(textwrap.dedent("""\
+            Meeting ended at %(endtime)s %(timeZone)s."""%repl))
+        body.append(self.actionItems())
+        body.append(self.actionItemsPerson())
+        body.append(self.peoplePresent())
+        body.append(textwrap.dedent("""\
+            Generated by MeetBot%(MeetBotVersion)s (%(MeetBotInfoURL)s)"""%repl))
+        body = [ b for b in body if b is not None ]
+        body = "\n\n\n\n".join(body)
+        body = replaceWRAP(body)
+
+        return body
+
+class PmWiki(MediaWiki, object):
+    def heading(self, name, level=1):
+        return '%s %s\n'%('!'*(level+1), name)
+    def replacements(self):
+        #repl = super(PmWiki, self).replacements(self) # fails, type checking
+        repl = MediaWiki.replacements.im_func(self)
+        repl['pageTitleHeading'] = self.heading(repl['pageTitle'],level=0)
+        return repl
+
+class Moin(_BaseWriter):
+    """Outputs MoinMoin formats.
+    """
+    def meetingItems(self):
+        M = self.M
+
+        # Agenda items
+        MeetingItems = [ ]
+        MeetingItems.append(self.heading('Meeting summary'))
+        haveTopic = None
+        for m in M.minutes:
+            item = ""+m.moin(M)
+            if m.itemtype == "TOPIC":
+                if haveTopic:
+                    MeetingItems.append("") # line break
+                haveTopic = True
+            else:
+                if haveTopic: item = ""+item
+            MeetingItems.append(item)
+        MeetingItems = '\n'.join(MeetingItems)
+        return MeetingItems
+
+    def fullLog(self):
+        M=self.M
+        lines=[ ]
+        lines.append(self.heading('Full Log'))
+        for l in M.lines:
+            lines.append( ' '+l)
+        lines='\n\n'.join(lines)
+        return lines    
+        
+    def votes(self):
+        M = self.M
+        # Votes
+        Votes = [ ]
+        Votes.append(self.heading('Votes'))
+        for m in M.votes:
+            #differentiate denied votes somehow, strikethrough perhaps?
+            Votes.append("\n * "+m)
+            Votes.append("   For: "+str(M.votes[m][0])+" Against: "+str(M.votes[m][2])+" Abstained: "+str(M.votes[m][1]))
+        Votes = "\n".join(Votes)
+        return Votes
+
+    def actionItems(self):
+        M = self.M
+        # Action Items
+        ActionItems = [ ]
+        numActionItems = 0
+        ActionItems.append(self.heading('Action items'))
+        for m in M.minutes:
+            # The hack below is needed because of pickling problems
+            if m.itemtype != "ACTION": continue
+            #already escaped
+            ActionItems.append(" * %s"%moin(m.line))
+            numActionItems += 1
+        if numActionItems == 0:
+            ActionItems.append(" * (none)")
+        ActionItems = "\n".join(ActionItems)
+        return ActionItems
+
+    def actionItemsPerson(self):
+        M = self.M
+        # Action Items, by person (This could be made lots more efficient)
+        ActionItemsPerson = [ ]
+        ActionItemsPerson.append(self.heading('Action items, by person'))
+        numberAssigned = 0
+        for nick in sorted(M.attendees.keys(), key=lambda x: x.lower()):
+            headerPrinted = False
+            for m in M.minutes:
+                # The hack below is needed because of pickling problems
+                if m.itemtype != "ACTION": continue
+                if m.line.find(nick) == -1: continue
+                if not headerPrinted:
+                    ActionItemsPerson.append(" * %s"%moin(nick))
+                    headerPrinted = True
+                ActionItemsPerson.append(" ** %s"%moin(m.line))
+                numberAssigned += 1
+                m.assigned = True
+        # unassigned items:
+        Unassigned = [ ]
+        Unassigned.append("* **UNASSIGNED**")
+        numberUnassigned = 0
+        for m in M.minutes:
+            if m.itemtype != "ACTION": continue
+            if getattr(m, 'assigned', False): continue
+            Unassigned.append(" ** %s"%moin(m.line))
+            numberUnassigned += 1
+        if numberUnassigned == 0:
+            Unassigned.append(" * (none)")
+        if numberUnassigned > 1:
+            ActionItemsPerson.extend(Unassigned)
+        ActionItemsPerson = "\n".join(ActionItemsPerson)
+
+        if numberAssigned == 0:
+            return None
+        else:
+            return ActionItemsPerson
+
+    def peoplePresent(self):
+        M = self.M
+        # People Attending
+        PeoplePresent = [ ]
+        PeoplePresent.append(self.heading('People present (lines said)'))
+        # sort by number of lines spoken
+        for nick, count in self.iterNickCounts():
+            PeoplePresent.append(' * %s (%s)'%(moin(nick), count))
+        PeoplePresent = "\n".join(PeoplePresent)
+        return PeoplePresent
+
+    def heading(self, name, level=1):
+        return '%s %s %s\n'%('='*(level+1), name, '='*(level+1))
+
+
+    body_start = textwrap.dedent("""\
+            %(pageTitleHeading)s
+
+            sWRAPsMeeting started by %(owner)s at %(starttime)s
+            %(timeZone)s.  The full logs are available at
+            %(fullLogsFullURL)s .eWRAPe""")
+    def format(self, extension=None):
+        """Return a MoinMoin formatted minutes summary."""
+        M = self.M
+
+        # Actual formatting and replacement
+        repl = self.replacements()
+        repl.update({'titleBlock':('='*len(repl['pageTitle'])),
+                     'pageTitleHeading':('#title '+repl['pageTitle'])
+                     })
+
+
+        body = [ ]
+        body.append(self.body_start%repl)
+        body.append(self.meetingItems())
+        body.append(textwrap.dedent("""\
+            Meeting ended at %(endtime)s %(timeZone)s."""%repl))
+        body.append(self.votes())
+        body.append(self.actionItems())
+        body.append(self.actionItemsPerson())
+        body.append(self.peoplePresent())
+        body.append(self.fullLog())
+        body.append(textwrap.dedent("""\
+            Generated by MeetBot%(MeetBotVersion)s (%(MeetBotInfoURL)s)"""%repl))
+        body = [ b for b in body if b is not None ]
+        body = "\n\n\n\n".join(body)
+        body = replaceWRAP(body)
+
+        return body
+


Follow ups