ubuntu-bots team mailing list archive
-
ubuntu-bots team
-
Mailing list archive
-
Message #00027
[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"> <daubers></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"> <daubers></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"> <AlanBell></span> o/
+<a name="l-4"></a><span class="tm">19:01:47</span><span class="nk"> <dutchie></span> o/
+<a name="l-5"></a><span class="tm">19:01:54</span><span class="nk"> <brobostigon></span> o/
+<a name="l-6"></a><span class="tm">19:01:55</span><span class="nk"> <daubers></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"> <Yorvyk></span> o/
+<a name="l-8"></a><span class="tm">19:02:32</span><span class="nk"> <daubers></span> Anyone who's present say so please :)
+<a name="l-9"></a><span class="tm">19:02:42</span><span class="nk"> <brobostigon></span> present
+<a name="l-10"></a><span class="tm">19:02:43</span><span class="nk"> <MunkyJunky></span> present
+<a name="l-11"></a><span class="tm">19:02:44</span><span class="nk"> <BigRedS_></span> present
+<a name="l-12"></a><span class="tm">19:02:47</span><span class="nk"> <daubers></span> present
+<a name="l-13"></a><span class="tm">19:02:58</span><span class="nk"> <Yorvyk></span> present
+<a name="l-14"></a><span class="tm">19:03:14</span><span class="nk"> <freesitebuilder_></span> present
+<a name="l-15"></a><span class="tm">19:03:16</span><span class="nk"> <Azelphur></span> present
+<a name="l-16"></a><span class="tm">19:03:21</span><span class="nk"> <L0ki></span> present
+<a name="l-17"></a><span class="tm">19:03:31</span><span class="nk"> <daubers></span> ok
+<a name="l-18"></a><span class="tm">19:03:33</span><span class="nk"> <daubers></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"> <daubers></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"> <daubers></span> Daviey?
+<a name="l-21"></a><span class="tm">19:04:18</span><span class="nk"> <Daviey></span> \o
+<a name="l-22"></a><span class="tm">19:04:30</span><span class="nk"> <The_Toxic_Mite></span> oops, present
+<a name="l-23"></a><span class="tm">19:04:37</span><span class="nk"> <daubers></span> How goes said reporting?
+<a name="l-24"></a><span class="tm">19:04:41</span><span class="nk"> <Daviey></span> Ok, deadline for April is technically this Sunday
+<a name="l-25"></a><span class="tm">19:04:58</span><span class="nk"> <Daviey></span> I've today posted to the LoCo list
+<a name="l-26"></a><span class="tm">19:05:06</span><span class="nk"> <Daviey></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"> <Daviey></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"> <Daviey></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"> <Daviey></span> (or the LoCo)
+<a name="l-31"></a><span class="tm">19:06:24</span><span class="nk"> <Daviey></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"> <Daviey></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"> <daubers></span> Excellent :)
+<a name="l-34"></a><span class="tm">19:06:51</span><span class="nk"> <brobostigon></span> willdo Daviey
+<a name="l-35"></a><span class="tm">19:06:52</span><span class="nk"> <brobostigon></span> :)
+<a name="l-36"></a><span class="tm">19:07:11</span><span class="nk"> <daubers></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"> <brobostigon></span> :)
+<a name="l-38"></a><span class="tm">19:07:26</span><span class="nk"> <daubers></span> Shall we move on?
+<a name="l-39"></a><span class="tm">19:07:27</span><span class="nk"> <brobostigon></span> agreed.
+<a name="l-40"></a><span class="tm">19:07:41</span><span class="nk"> <daubers></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"> <AlanBell></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"> <Daviey></span> ta
+<a name="l-43"></a><span class="tm">19:07:54</span><span class="nk"> <Daviey></span> present btw :)
+<a name="l-44"></a><span class="tm">19:08:05</span><span class="nk"> <MunkyJunky></span> It did go well!
+<a name="l-45"></a><span class="tm">19:08:16</span><span class="nk"> <AlanBell></span> http://loco.ubuntu.com/events/team/51/detail/
+<a name="l-46"></a><span class="tm">19:08:36</span><span class="nk"> <daubers></span> Excellent, well done to those that organised it
+<a name="l-47"></a><span class="tm">19:09:12</span><span class="nk"> <daubers></span> Moving on?
+<a name="l-48"></a><span class="tm">19:09:15</span><span class="nk"> <AlanBell></span> yup
+<a name="l-49"></a><span class="tm">19:09:18</span><span class="nk"> <daubers></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"> <daubers></span> Daviey?
+<a name="l-51"></a><span class="tm">19:10:49</span><span class="nk"> <daubers></span> czajkowski?
+<a name="l-52"></a><span class="tm">19:11:05</span><span class="nk"> <Daviey></span> no action from here.
+<a name="l-53"></a><span class="tm">19:11:18</span><span class="nk"> <brobostigon></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"> <daubers></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"> <daubers></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"> <daubers></span> Ok, next
+<a name="l-57"></a><span class="tm">19:12:52</span><span class="nk"> <daubers></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"> <daubers></span> https://wiki.ubuntu.com/UKTeam/Support_Guidelines
+<a name="l-59"></a><span class="tm">19:13:07</span><span class="nk"> <brobostigon></span> :)
+<a name="l-60"></a><span class="tm">19:13:27</span><span class="nk"> <brobostigon></span> iam happy with it, right now.
+<a name="l-61"></a><span class="tm">19:13:29</span><span class="nk"> <daubers></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"> <daubers></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"> <daubers></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"> <daubers></span> [TOPIC] Daubers - Support Guidelines
+<a name="l-65"></a><span class="tm">19:14:04</span><span class="nk"> <brobostigon></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"> <daubers></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"> <brobostigon></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"> <AlanBell></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"> <daubers></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"> <brobostigon></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"> <daubers></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"> <daubers></span> Work, money and stuff are in the way
+<a name="l-73"></a><span class="tm">19:16:33</span><span class="nk"> <AlanBell></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"> <AlanBell></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"> <brobostigon></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"> <daubers></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"> <brobostigon></span> and good scruteny.
+<a name="l-78"></a><span class="tm">19:17:54</span><span class="nk"> <Yorvyk></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"> <AlanBell></span> an oggcamp session would be great
+<a name="l-80"></a><span class="tm">19:18:42</span><span class="nk"> <daubers></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"> <AlanBell></span> I am
+<a name="l-82"></a><span class="tm">19:18:57</span><span class="nk"> <daubers></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"> <daubers></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"> <daubers></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"> <brobostigon></span> ok.
+<a name="l-86"></a><span class="tm">19:19:57</span><span class="nk"> <AlanBell></span> ok
+<a name="l-87"></a><span class="tm">19:19:58</span><span class="nk"> <brobostigon></span> after review,yes.
+<a name="l-88"></a><span class="tm">19:20:00</span><span class="nk"> <The_Toxic_Mite></span> ok
+<a name="l-89"></a><span class="tm">19:20:21</span><span class="nk"> <brobostigon></span> not before.
+<a name="l-90"></a><span class="tm">19:20:58</span><span class="nk"> <daubers></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"> <BigRedS_></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"> <brobostigon></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"> <daubers></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"> <daubers></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"> <brobostigon></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"> <daubers></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"> <brobostigon></span> ok,
+<a name="l-98"></a><span class="tm">19:22:49</span><span class="nk"> <AlanBell></span> more of a beta than a release candidate
+<a name="l-99"></a><span class="tm">19:22:54</span><span class="nk"> <brobostigon></span> i am happy.
+<a name="l-100"></a><span class="tm">19:22:58</span><span class="nk"> <daubers></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"> <AlanBell></span> +1
+<a name="l-102"></a><span class="tm">19:23:08</span><span class="nk"> <daubers></span> +1
+<a name="l-103"></a><span class="tm">19:23:08</span><span class="nk"> <brobostigon></span> +1
+<a name="l-104"></a><span class="tm">19:23:12</span><span class="nk"> <BigRedS_></span> +1
+<a name="l-105"></a><span class="tm">19:23:14</span><span class="nk"> <Yorvyk></span> +1
+<a name="l-106"></a><span class="tm">19:23:19</span><span class="nk"> <freesitebuilder_></span> 0
+<a name="l-107"></a><span class="tm">19:23:27</span><span class="nk"> <Azelphur></span> -1
+<a name="l-108"></a><span class="tm">19:23:33</span><span class="nk"> <L0ki></span> +1
+<a name="l-109"></a><span class="tm">19:23:47</span><span class="nk"> <TonyP></span> +1
+<a name="l-110"></a><span class="tm">19:23:54</span><span class="nk"> <danfish></span> +1
+<a name="l-111"></a><span class="tm">19:24:07</span><span class="nk"> <The_Toxic_Mite></span> +1
+<a name="l-112"></a><span class="tm">19:24:16</span><span class="nk"> <daubers></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"> <daubers></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"> <daubers></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"> <daubers></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"> <daubers></span> Everyone happy?
+<a name="l-118"></a><span class="tm">19:25:04</span><span class="nk"> <brobostigon></span> yes.
+<a name="l-119"></a><span class="tm">19:25:12</span><span class="nk"> <daubers></span> Ok, moving the train along :)
+<a name="l-120"></a><span class="tm">19:25:21</span><span class="nk"> <daubers></span> [TOPIC] TBA - OGGCamp related bits
+<a name="l-121"></a><span class="tm">19:25:27</span><span class="nk"> <Azelphur></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"> <Yorvyk></span> Should the IRC channel be informed
+<a name="l-123"></a><span class="tm">19:25:40</span><span class="nk"> <daubers></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"> <Yorvyk></span> ok
+<a name="l-125"></a><span class="tm">19:25:53</span><span class="nk"> <Daviey></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"> <AlanBell></span> ok, so who is going to oggcamp?
+<a name="l-127"></a><span class="tm">19:26:05</span><span class="nk"> <Yorvyk></span> o/
+<a name="l-128"></a><span class="tm">19:26:06</span><span class="nk"> <dutchie></span> o/
+<a name="l-129"></a><span class="tm">19:26:07</span><span class="nk"> <AlanBell></span> o/
+<a name="l-130"></a><span class="tm">19:26:17</span><span class="nk"> <daubers></span> o/
+<a name="l-131"></a><span class="tm">19:26:26</span><span class="nk"> <daubers></span> <span class="hi">Daviey:</span> Yes please :)
+<a name="l-132"></a><span class="tm">19:26:49</span><span class="nk"> <daubers></span> sorry, I moved on a bit quick there
+<a name="l-133"></a><span class="tm">19:27:21</span><span class="nk"> <daubers></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"> <AlanBell></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"> <AlanBell></span> in particular look at the talks page
+<a name="l-136"></a><span class="tm">19:28:42</span><span class="nk"> <AlanBell></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"> <yamanickill_></span> have i missed the meeting
+<a name="l-138"></a><span class="tm">19:28:48</span><span class="nk"> <yamanickill_></span> ahhh that'll be a no
+<a name="l-139"></a><span class="tm">19:28:50</span><span class="nk"> <yamanickill_></span> good
+<a name="l-140"></a><span class="tm">19:28:58</span><span class="nk"> <daubers></span> Anyone considering a talk, do it! :)
+<a name="l-141"></a><span class="tm">19:28:59</span><span class="nk"> <AlanBell></span> <span class="hi">yamanickill_:</span> still proceeding
+<a name="l-142"></a><span class="tm">19:29:17</span><span class="nk"> <daubers></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"> <yamanickill_></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"> <daubers></span> Any other Oggcamp business people would like raised?
+<a name="l-145"></a><span class="tm">19:30:24</span><span class="nk"> <dutchie></span> go to oggcamp!
+<a name="l-146"></a><span class="tm">19:30:32</span><span class="nk"> <daubers></span> :) We'll move along then
+<a name="l-147"></a><span class="tm">19:30:41</span><span class="nk"> <daubers></span> Steaming through today
+<a name="l-148"></a><span class="tm">19:30:47</span><span class="nk"> <daubers></span> [TOPIC] TBA - UDS related bits
+<a name="l-149"></a><span class="tm">19:31:05</span><span class="nk"> <AlanBell></span> I am going to UDS
+<a name="l-150"></a><span class="tm">19:31:11</span><span class="nk"> <daubers></span> Anybody intending to attend UDS?
+<a name="l-151"></a><span class="tm">19:31:18</span><span class="nk"> <AlanBell></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"> <The_Toxic_Mite></span> No
+<a name="l-153"></a><span class="tm">19:31:37</span><span class="nk"> <daubers></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"> <Yorvyk></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"> <AlanBell></span> popey and Daviey are going, amongst others
+<a name="l-156"></a><span class="tm">19:31:54</span><span class="nk"> <brobostigon></span> writing a blueprint thoygh
+<a name="l-157"></a><span class="tm">19:32:25</span><span class="nk"> <AlanBell></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"> <AlanBell></span> or both
+<a name="l-159"></a><span class="tm">19:32:55</span><span class="nk"> <daubers></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"> <brobostigon></span> will do
+<a name="l-161"></a><span class="tm">19:33:36</span><span class="nk"> <daubers></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"> <AlanBell></span> no, don't think so
+<a name="l-163"></a><span class="tm">19:33:50</span><span class="nk"> <daubers></span> Ok
+<a name="l-164"></a><span class="tm">19:33:51</span><span class="nk"> <AlanBell></span> party on the Eurostar
+<a name="l-165"></a><span class="tm">19:34:04</span><span class="nk"> <daubers></span> Heh, just don't go starting any fires!
+<a name="l-166"></a><span class="tm">19:34:35</span><span class="nk"> <danfish></span> eggplant =! aubergine
+<a name="l-167"></a><span class="tm">19:34:38</span><span class="nk"> <daubers></span> [TOPIC] Any other business
+<a name="l-168"></a><span class="tm">19:34:49</span><span class="nk"> <daubers></span> Anyone like to raise something?
+<a name="l-169"></a><span class="tm">19:34:52</span><span class="nk"> <yamanickill_></span> want an update on scottish release party?
+<a name="l-170"></a><span class="tm">19:35:06</span><span class="nk"> <daubers></span> <span class="hi">yamanickill_:</span> Yes please!
+<a name="l-171"></a><span class="tm">19:35:10</span><span class="nk"> <daubers></span> I must have missed that
+<a name="l-172"></a><span class="tm">19:35:12</span><span class="nk"> <daubers></span> sorry :(
+<a name="l-173"></a><span class="tm">19:35:15</span><span class="nk"> <AlanBell></span> wasn't there a release parties [TOPIC]?
+<a name="l-174"></a><span class="tm">19:35:21</span><span class="nk"> <daubers></span> [TOPIC] Release Parties
+<a name="l-175"></a><span class="tm">19:35:21</span><span class="nk"> <yamanickill_></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"> <yamanickill_></span> i couldn't get onto irc
+<a name="l-177"></a><span class="tm">19:35:42</span><span class="nk"> <yamanickill_></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"> <yamanickill_></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"> <yamanickill_></span> and everything is going good :-
+<a name="l-181"></a><span class="tm">19:36:18</span><span class="nk"> <yamanickill_></span> :-)
+<a name="l-182"></a><span class="tm">19:36:21</span><span class="nk"> <The_Toxic_Mite></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"> <daubers></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"> <The_Toxic_Mite></span> <span class="hi">brobostigon:</span> ^_^
+<a name="l-186"></a><span class="tm">19:36:44</span><span class="nk"> <yamanickill_></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"> <yamanickill_></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"> <yamanickill_></span> you mean detailed info?
+<a name="l-189"></a><span class="tm">19:37:04</span><span class="nk"> <AlanBell></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"> <The_Toxic_Mite></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"> <daubers></span> <span class="hi">yamanickill_:</span> Yes please
+<a name="l-192"></a><span class="tm">19:37:27</span><span class="nk"> <yamanickill_></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"> <yamanickill_></span> http://www.evernote.com/pub/yamanickill/ubuntu
+<a name="l-194"></a><span class="tm">19:37:53</span><span class="nk"> <daubers></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"> <daubers></span> Awesome :)
+<a name="l-196"></a><span class="tm">19:38:20</span><span class="nk"> <Daviey></span> +1
+<a name="l-197"></a><span class="tm">19:38:21</span><span class="nk"> <daubers></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"> <AlanBell></span> ok, London party is tomorrow night
+<a name="l-199"></a><span class="tm">19:38:31</span><span class="nk"> <yamanickill_></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"> <brobostigon></span> <span class="hi">daubers:</span> banbury also please.:)
+<a name="l-201"></a><span class="tm">19:38:34</span><span class="nk"> <AlanBell></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"> <daubers></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"> <daubers></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"> <brobostigon></span> :)
+<a name="l-206"></a><span class="tm">19:39:16</span><span class="nk"> <brobostigon></span> i am eating, so give me a shout.
+<a name="l-207"></a><span class="tm">19:39:19</span><span class="nk"> <daubers></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"> <AlanBell></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"> <AlanBell></span> it is canonical organised, they sorted the venue
+<a name="l-210"></a><span class="tm">19:39:57</span><span class="nk"> <AlanBell></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"> <daubers></span> Excellent :)
+<a name="l-212"></a><span class="tm">19:40:14</span><span class="nk"> <AlanBell></span> not sure of the age limit
+<a name="l-213"></a><span class="tm">19:40:48</span><span class="nk"> <AlanBell></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"> <funkyHat></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"> <AlanBell></span> see you all tomorrow o/
+<a name="l-216"></a><span class="tm">19:41:24</span><span class="nk"> <daubers></span> Good good :)
+<a name="l-217"></a><span class="tm">19:41:28</span><span class="nk"> <daubers></span> So to Banbury
+<a name="l-218"></a><span class="tm">19:41:30</span><span class="nk"> <brobostigon></span> one sec.
+<a name="l-219"></a><span class="tm">19:41:51</span><span class="nk"> <daubers></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"> <brobostigon></span> okies
+<a name="l-221"></a><span class="tm">19:42:07</span><span class="nk"> <Azelphur></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"> <daubers></span> brobostigon, over to you
+<a name="l-224"></a><span class="tm">19:42:36</span><span class="nk"> <brobostigon></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"> <brobostigon></span> nothing to formal,
+<a name="l-226"></a><span class="tm">19:42:57</span><span class="nk"> <yamanickill_></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"> <daubers></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"> <brobostigon></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"> <brobostigon></span> reasonably*
+<a name="l-230"></a><span class="tm">19:43:33</span><span class="nk"> <daubers></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"> <brobostigon></span> around 7:30pm start,
+<a name="l-232"></a><span class="tm">19:43:40</span><span class="nk"> <yamanickill_></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"> <brobostigon></span> <span class="hi">daubers:</span> generally over 21.
+<a name="l-234"></a><span class="tm">19:44:03</span><span class="nk"> <daubers></span> Ok, and is there an event page?
+<a name="l-235"></a><span class="tm">19:44:21</span><span class="nk"> <brobostigon></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"> <brobostigon></span> ido have the paghe infront of me,
+<a name="l-237"></a><span class="tm">19:44:43</span><span class="nk"> <brobostigon></span> dont*
+<a name="l-238"></a><span class="tm">19:45:00</span><span class="nk"> <daubers></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"> <daubers></span> Looks to be the one
+<a name="l-240"></a><span class="tm">19:45:16</span><span class="nk"> <brobostigon></span> thats it.
+<a name="l-241"></a><span class="tm">19:45:29</span><span class="nk"> <daubers></span> http://loco.ubuntu.com/events/team/120/detail/
+<a name="l-242"></a><span class="tm">19:45:34</span><span class="nk"> <daubers></span> Thank you Mr Bot
+<a name="l-243"></a><span class="tm">19:45:43</span><span class="nk"> <daubers></span> Ok, any other release parties?
+<a name="l-244"></a><span class="tm">19:46:20</span><span class="nk"> <daubers></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"> <brobostigon></span> :)
+<a name="l-246"></a><span class="tm">19:46:31</span><span class="nk"> <Daviey></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"> <brobostigon></span> and good beer, :) as always,
+<a name="l-248"></a><span class="tm">19:46:43</span><span class="nk"> <daubers></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"> <Daviey></span> <span class="hi">daubers:</span> you may!
+<a name="l-250"></a><span class="tm">19:47:08</span><span class="nk"> <daubers></span> Ok :) Going back to AOB
+<a name="l-251"></a><span class="tm">19:47:14</span><span class="nk"> <daubers></span> [TOPIC] Any other Business
+<a name="l-252"></a><span class="tm">19:47:36</span><span class="nk"> <AlanBell></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"> <daubers></span> Anyone like to raise any issues?
+<a name="l-254"></a><span class="tm">19:48:05</span><span class="nk"> <dutchie></span> go to oggcamp!
+<a name="l-255"></a><span class="tm">19:48:05</span><span class="nk"> <brobostigon></span> generally over 18 is fine for banbury, aswell,
+<a name="l-256"></a><span class="tm">19:48:20</span><span class="nk"> <brobostigon></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"> <daubers></span> Okey dokey.
+<a name="l-258"></a><span class="tm">19:48:54</span><span class="nk"> <daubers></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"> <daubers></span> for the banbury party
+<a name="l-260"></a><span class="tm">19:49:14</span><span class="nk"> <brobostigon></span> <span class="hi">daubers:</span> yes, :)
+<a name="l-261"></a><span class="tm">19:49:16</span><span class="nk"> <daubers></span> action
+<a name="l-262"></a><span class="tm">19:49:33</span><span class="nk"> <daubers></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"> <daubers></span> No more business?
+<a name="l-264"></a><span class="tm">19:49:50</span><span class="nk"> <brobostigon></span> not from here, no.
+<a name="l-265"></a><span class="tm">19:50:14</span><span class="nk"> <AlanBell></span> May 6th, don't forget to vote
+<a name="l-266"></a><span class="tm">19:50:29</span><span class="nk"> <daubers></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"> <brobostigon></span> :) always,
+<a name="l-268"></a><span class="tm">19:50:40</span><span class="nk"> <Azelphur></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"> <daubers></span> Those who are eligable anyway
+<a name="l-270"></a><span class="tm">19:51:04</span><span class="nk"> <AlanBell></span> <span class="hi">Azelphur:</span> yes
+<a name="l-271"></a><span class="tm">19:51:07</span><span class="nk"> <Azelphur></span> i see
+<a name="l-272"></a><span class="tm">19:51:19</span><span class="nk"> <Azelphur></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"> <Azelphur></span> aboutmyvote.co.uk, rather
+<a name="l-274"></a><span class="tm">19:51:47</span><span class="nk"> <daubers></span> Ok, shall we organise the next meeting?
+<a name="l-275"></a><span class="tm">19:51:47</span><span class="nk"> <yamanickill_></span> ahh yes...the election
+<a name="l-276"></a><span class="tm">19:51:53</span><span class="nk"> <daubers></span> [TOPIC] Date of next meeting
+<a name="l-277"></a><span class="tm">19:52:07</span><span class="nk"> <yamanickill_></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"> <yamanickill_></span> apart from today obv
+<a name="l-279"></a><span class="tm">19:52:18</span><span class="nk"> <AlanBell></span> I think so
+<a name="l-280"></a><span class="tm">19:52:29</span><span class="nk"> <yamanickill_></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"> <daubers></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"> <daubers></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"> <brobostigon></span> sothree insted of two?
+<a name="l-286"></a><span class="tm">19:53:47</span><span class="nk"> <daubers></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"> <AlanBell></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"> <daubers></span> Ah, ok
+<a name="l-289"></a><span class="tm">19:54:19</span><span class="nk"> <brobostigon></span> true
+<a name="l-290"></a><span class="tm">19:54:31</span><span class="nk"> <AlanBell></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"> <AlanBell></span> oops, no
+<a name="l-292"></a><span class="tm">19:54:43</span><span class="nk"> <AlanBell></span> June 2nd
+<a name="l-293"></a><span class="tm">19:55:18</span><span class="nk"> <AlanBell></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"> <brobostigon></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"> <daubers></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"> <brobostigon></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"> <daubers></span> Which lets it run for 2 weeks
+<a name="l-298"></a><span class="tm">19:56:29</span><span class="nk"> <AlanBell></span> UDS is the week containing the 14th
+<a name="l-299"></a><span class="tm">19:56:35</span><span class="nk"> <daubers></span> Ah, ok, so the following week
+<a name="l-300"></a><span class="tm">19:56:47</span><span class="nk"> <AlanBell></span> sounds good
+<a name="l-301"></a><span class="tm">19:56:48</span><span class="nk"> <yamanickill_></span> is there internet at uds? :-P
+<a name="l-302"></a><span class="tm">19:56:59</span><span class="nk"> <brobostigon></span> sounds fine here.
+<a name="l-303"></a><span class="tm">19:57:19</span><span class="nk"> <daubers></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"> <brobostigon></span> i am hppy.
+<a name="l-305"></a><span class="tm">19:57:48</span><span class="nk"> <daubers></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"> <brobostigon></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"> <Yorvyk></span> April ??
+<a name="l-308"></a><span class="tm">19:58:24</span><span class="nk"> <AlanBell></span> danfish for chair?
+<a name="l-309"></a><span class="tm">19:58:37</span><span class="nk"> <daubers></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"> <yamanickill_></span> june...not july
+<a name="l-311"></a><span class="tm">19:58:42</span><span class="nk"> <daubers></span> and june
+<a name="l-312"></a><span class="tm">19:58:47</span><span class="nk"> <daubers></span> I'm rubbish at this!
+<a name="l-313"></a><span class="tm">19:58:55</span><span class="nk"> <yamanickill_></span> :-P
+<a name="l-314"></a><span class="tm">19:59:06</span><span class="nk"> <daubers></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"> <daubers></span> or yamanickill_ ?
+<a name="l-316"></a><span class="tm">19:59:32</span><span class="nk"> <Yorvyk></span> 19 may is a tuesday
+<a name="l-317"></a><span class="tm">19:59:56</span><span class="nk"> <daubers></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"> <Daviey></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"> <Yorvyk></span> OK wring Year
+<a name="l-320"></a><span class="tm">20:00:25</span><span class="nk"> <yamanickill_></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"> <daubers></span> <span class="hi">yamanickill_:</span> 7th of june :)
+<a name="l-322"></a><span class="tm">20:01:04</span><span class="nk"> <daubers></span> according to AlanBell
+<a name="l-323"></a><span class="tm">20:01:09</span><span class="nk"> <danfish></span> yep, I'll voluteer - flattered!
+<a name="l-324"></a><span class="tm">20:01:22</span><span class="nk"> <yamanickill_></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"> <yamanickill_></span> wow this is confusing just now
+<a name="l-326"></a><span class="tm">20:01:37</span><span class="nk"> <daubers></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"> <AlanBell></span> 2nd of June!
+<a name="l-328"></a><span class="tm">20:01:42</span><span class="nk"> <daubers></span> ok
+<a name="l-329"></a><span class="tm">20:01:58</span><span class="nk"> <daubers></span> Next meeting: 2nd of June
+<a name="l-330"></a><span class="tm">20:02:08</span><span class="nk"> <daubers></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"> <yamanickill_></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"> <yamanickill_></span> i'll take it some other time
+<a name="l-333"></a><span class="tm">20:02:51</span><span class="nk"> <daubers></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"> <daubers></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"> <Laney></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"> <MootBot></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"> <MootBot></span> Commands Available: [TOPIC], [IDEA], [ACTION], [AGREED], [LINK], [VOTE]
+<a name="l-4"></a><span class="tm">19:34:42</span><span class="nk"> <Daviey></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"> <Laney></span> NO I'MNOT
+<a name="l-6"></a><span class="tm">19:34:46</span><span class="nk"> <brobostigon></span> present
+<a name="l-7"></a><span class="tm">19:34:49</span><span class="nk"> <webpigeon></span> present
+<a name="l-8"></a><span class="tm">19:34:53</span><span class="nk"> <MooDoo></span> PRESENT
+<a name="l-9"></a><span class="tm">19:34:53</span><span class="nk"> <popey></span> present
+<a name="l-10"></a><span class="tm">19:34:54</span><span class="nk"> <popey></span> haha
+<a name="l-11"></a><span class="tm">19:34:55</span><span class="nk"> <ProfFalken></span> PRESENT
+<a name="l-12"></a><span class="tm">19:34:55</span><span class="nk"> <Daviey></span> gah, i was sureit was "%"
+<a name="l-13"></a><span class="tm">19:34:56</span><span class="nk"> <slarty></span> present
+<a name="l-14"></a><span class="tm">19:34:58</span><span class="nk"> <DJones></span> PRESENT
+<a name="l-15"></a><span class="tm">19:34:58</span><span class="nk"> <ProfFalken></span> lol
+<a name="l-16"></a><span class="tm">19:34:59</span><span class="nk"> <Ging></span> PRESENT
+<a name="l-17"></a><span class="tm">19:35:00</span><span class="nk"> <Daviey></span> present
+<a name="l-18"></a><span class="tm">19:35:00</span><span class="nk"> <daubers></span> present
+<a name="l-19"></a><span class="tm">19:35:02</span><span class="nk"> <Laney></span> PRESENT
+<a name="l-20"></a><span class="tm">19:35:03</span><span class="nk"> <gLAsgowMonkey></span> PRESENT
+<a name="l-21"></a><span class="tm">19:35:03</span><span class="nk"> <andy101></span> present
+<a name="l-22"></a><span class="tm">19:35:03</span><span class="nk"> <linux1></span> present
+<a name="l-23"></a><span class="tm">19:35:05</span><span class="nk"> <aos101></span> PRESENT
+<a name="l-24"></a><span class="tm">19:35:09</span><span class="nk"> <WastePotato></span> Present
+<a name="l-25"></a><span class="tm">19:35:12</span><span class="nk"> <technolalia></span> present
+<a name="l-26"></a><span class="tm">19:35:27</span><span class="nk"> <Laney></span> oh ffs
+<a name="l-27"></a><span class="tm">19:35:33</span><span class="nk"> <Daviey></span> Okay, thanks everyone for attending
+<a name="l-28"></a><span class="tm">19:35:33</span><span class="nk"> <WastePotato></span> xD
+<a name="l-29"></a><span class="tm">19:35:39</span><span class="nk"> <brobostigon></span> :)
+<a name="l-30"></a><span class="tm">19:35:39</span><span class="nk"> <Daviey></span> This is our first meeting of 2009
+<a name="l-31"></a><span class="tm">19:35:47</span><span class="nk"> <Daviey></span> and my first meeting as Leader / PoC
+<a name="l-32"></a><span class="tm">19:36:01</span><span class="nk"> <brobostigon></span> yay Daviey , good luck as leader
+<a name="l-33"></a><span class="tm">19:36:11</span><span class="nk"> <Daviey></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"> <Daviey></span> For the forthcomming year, agenda point #1
+<a name="l-35"></a><span class="tm">19:36:38</span><span class="nk"> <popey></span> # Plans for the year
+<a name="l-36"></a><span class="tm">19:36:41</span><span class="nk"> <Daviey></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"> <Laney></span> [TOPIC] Direction for 2009
+<a name="l-38"></a><span class="tm">19:36:48</span><span class="nk"> <MootBot></span> New Topic: Direction for 2009
+<a name="l-39"></a><span class="tm">19:37:19</span><span class="nk"> <Daviey></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"> <Daviey></span> which is brilliant news.
+<a name="l-41"></a><span class="tm">19:37:43</span><span class="nk"> <Daviey></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"> <Daviey></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"> <Daviey></span> The linux foundation compo, and such
+<a name="l-44"></a><span class="tm">19:38:18</span><span class="nk"> <Daviey></span> Does anyone have any views on this?
+<a name="l-45"></a><span class="tm">19:38:23</span><span class="nk"> <popey></span> yes
+<a name="l-46"></a><span class="tm">19:38:23</span><span class="nk"> <brobostigon></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"> <Daviey></span> <span class="hi">popey:</span> shoot
+<a name="l-48"></a><span class="tm">19:38:50</span><span class="nk"> <brobostigon></span> forget what i said
+<a name="l-49"></a><span class="tm">19:38:53</span><span class="nk"> <popey></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"> <popey></span> the example content replacement is another
+<a name="l-51"></a><span class="tm">19:39:13</span><span class="nk"> <popey></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"> <popey></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"> <brobostigon></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"> <popey></span> my question is..
+<a name="l-55"></a><span class="tm">19:39:29</span><span class="nk"> <Daviey></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"> <Laney></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"> <popey></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"> <MootBot></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"> <Daviey></span> (https://wiki.ubuntu.com/UbuntuFreeCultureShowcase)
+<a name="l-60"></a><span class="tm">19:40:19</span><span class="nk"> <popey></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"> <popey></span> if the person wins :)
+<a name="l-62"></a><span class="tm">19:40:26</span><span class="nk"> <Laney></span> [link] https://wiki.ubuntu.com/UbuntuFreeCultureShowcase
+<a name="l-63"></a><span class="tm">19:40:27</span><span class="nk"> <MootBot></span> LINK received: https://wiki.ubuntu.com/UbuntuFreeCultureShowcase
+<a name="l-64"></a><span class="tm">19:40:41</span><span class="nk"> <Daviey></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"> <popey></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"> <Daviey></span> aye
+<a name="l-67"></a><span class="tm">19:41:12</span><span class="nk"> <MooDoo></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"> <popey></span> but it needs an individual to drive it
+<a name="l-69"></a><span class="tm">19:41:21</span><span class="nk"> <brobostigon></span> what does the linux foundation do?
+<a name="l-70"></a><span class="tm">19:41:29</span><span class="nk"> <popey></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"> <Daviey></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"> <gLAsgowMonkey></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"> <popey></span> <span class="hi">brobostigon:</span> promotes linux
+<a name="l-74"></a><span class="tm">19:41:41</span><span class="nk"> <Daviey></span> <span class="hi">brobostigon:</span> good question
+<a name="l-75"></a><span class="tm">19:42:02</span><span class="nk"> <popey></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"> <brobostigon></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"> <popey></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"> <Daviey></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"> <popey></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"> <brobostigon></span> ok popey
+<a name="l-81"></a><span class="tm">19:42:42</span><span class="nk"> <MooDoo></span> <span class="hi">Daviey:</span> ah clever
+<a name="l-82"></a><span class="tm">19:43:03</span><span class="nk"> <popey></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"> <Daviey></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"> <popey></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"> <popey></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"> <Daviey></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"> <popey></span> get people talking about it
+<a name="l-88"></a><span class="tm">19:43:48</span><span class="nk"> <Daviey></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"> <MooDoo></span> +1 for a compilation of individual efforts...
+<a name="l-90"></a><span class="tm">19:43:55</span><span class="nk"> <popey></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"> <popey></span> rather than splinter
+<a name="l-92"></a><span class="tm">19:44:06</span><span class="nk"> <Laney></span> Right, vote time
+<a name="l-93"></a><span class="tm">19:44:20</span><span class="nk"> <popey></span> i dont think it is
+<a name="l-94"></a><span class="tm">19:44:25</span><span class="nk"> <Daviey></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"> <popey></span> have you seen the "whyubuntu.com" thread?
+<a name="l-96"></a><span class="tm">19:44:58</span><span class="nk"> <popey></span> they want LOTS of individual submissions
+<a name="l-97"></a><span class="tm">19:45:06</span><span class="nk"> <Daviey></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"> <popey></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"> <andy101></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"> <popey></span> <span class="hi">andy101:</span> ubuntu-marketing
+<a name="l-101"></a><span class="tm">19:45:23</span><span class="nk"> <Daviey></span> marketing
+<a name="l-102"></a><span class="tm">19:45:24</span><span class="nk"> <popey></span> !marketing
+<a name="l-103"></a><span class="tm">19:45:24</span><span class="nk"> <ubot5></span> Factoid 'marketing' not found
+<a name="l-104"></a><span class="tm">19:45:27</span><span class="nk"> <popey></span> bah
+<a name="l-105"></a><span class="tm">19:45:38</span><span class="nk"> <MooDoo></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"> <popey></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"> <Daviey></span> yeah
+<a name="l-108"></a><span class="tm">19:45:57</span><span class="nk"> <popey></span> yeah, its like that MooDoo
+<a name="l-109"></a><span class="tm">19:46:15</span><span class="nk"> <popey></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"> <popey></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"> <Daviey></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"> <MooDoo></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"> <popey></span> exactly MooDoo
+<a name="l-114"></a><span class="tm">19:47:08</span><span class="nk"> <Daviey></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"> <popey></span> yeah, a follow up to the list
+<a name="l-116"></a><span class="tm">19:47:30</span><span class="nk"> <popey></span> The Alans are working on something too
+<a name="l-117"></a><span class="tm">19:47:33</span><span class="nk"> <popey></span> "Don't Tell Bill"
+<a name="l-118"></a><span class="tm">19:47:39</span><span class="nk"> <Daviey></span> you damn Alan's
+<a name="l-119"></a><span class="tm">19:47:42</span><span class="nk"> <popey></span> might be worth talking to them too
+<a name="l-120"></a><span class="tm">19:47:53</span><span class="nk"> <Daviey></span> <span class="hi">AlanBell1:</span> oi
+<a name="l-121"></a><span class="tm">19:48:01</span><span class="nk"> <popey></span> <span class="hi">TheOpenSourcerer:</span> poke
+<a name="l-122"></a><span class="tm">19:48:38</span><span class="nk"> <Daviey></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"> <MooDoo></span> :)
+<a name="l-124"></a><span class="tm">19:48:54</span><span class="nk"> <Daviey></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"> <vixey></span> hi
+<a name="l-126"></a><span class="tm">19:49:08</span><span class="nk"> <sheepeatingtaz></span> Can I add a belated PRESENT?
+<a name="l-127"></a><span class="tm">19:49:15</span><span class="nk"> <Laney></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"> <Daviey></span> heh
+<a name="l-130"></a><span class="tm">19:49:29</span><span class="nk"> <sheepeatingtaz></span> <span class="hi">Laney:</span> please
+<a name="l-131"></a><span class="tm">19:49:33</span><span class="nk"> <sheepeatingtaz></span> :)
+<a name="l-132"></a><span class="tm">19:49:44</span><span class="nk"> <popey></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"> <Daviey></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"> <MooDoo></span> what about expos? lrl09?
+<a name="l-135"></a><span class="tm">19:50:04</span><span class="nk"> <Daviey></span> Camping + BBQ and hackfest in a field.
+<a name="l-136"></a><span class="tm">19:50:14</span><span class="nk"> <Daviey></span> support?
+<a name="l-137"></a><span class="tm">19:50:24</span><span class="nk"> <brobostigon></span> <span class="hi">Daviey:</span> interesting idea.
+<a name="l-138"></a><span class="tm">19:50:30</span><span class="nk"> <Daviey></span> schwuk and I are certainly on board. :)
+<a name="l-139"></a><span class="tm">19:50:42</span><span class="nk"> <Daviey></span> excite anybody else?
+<a name="l-140"></a><span class="tm">19:50:45</span><span class="nk"> <franki^></span> will there be intarwebs? :)
+<a name="l-141"></a><span class="tm">19:50:47</span><span class="nk"> <gord></span> pfft, theres no wifi in a field
+<a name="l-142"></a><span class="tm">19:50:47</span><span class="nk"> <Ging></span> yes
+<a name="l-143"></a><span class="tm">19:50:47</span><span class="nk"> <popey></span> yeah, I'd be up for that
+<a name="l-144"></a><span class="tm">19:50:48</span><span class="nk"> <daubers></span> +1
+<a name="l-145"></a><span class="tm">19:50:52</span><span class="nk"> <Ging></span> will there be girls?
+<a name="l-146"></a><span class="tm">19:50:54</span><span class="nk"> <Daviey></span> <span class="hi">gord:</span> 3g :)
+<a name="l-147"></a><span class="tm">19:50:54</span><span class="nk"> <brobostigon></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"> <popey></span> pubs have wifi
+<a name="l-149"></a><span class="tm">19:51:11</span><span class="nk"> <gord></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"> <franki^></span> :D
+<a name="l-151"></a><span class="tm">19:51:20</span><span class="nk"> <WastePotato></span> o_O
+<a name="l-152"></a><span class="tm">19:51:23</span><span class="nk"> <kalessin1></span> cows work?
+<a name="l-153"></a><span class="tm">19:51:28</span><span class="nk"> <popey></span> too busy looking at hotudders.com
+<a name="l-154"></a><span class="tm">19:51:30</span><span class="nk"> <Daviey></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"> <MooDoo></span> any local beer festivals?
+<a name="l-156"></a><span class="tm">19:51:38</span><span class="nk"> <andy101></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"> <popey></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"> <popey></span> not a hackfest
+<a name="l-159"></a><span class="tm">19:52:07</span><span class="nk"> <brobostigon></span> <span class="hi">MooDoo:</span> banury beer festival
+<a name="l-160"></a><span class="tm">19:52:18</span><span class="nk"> <brobostigon></span> banbury*
+<a name="l-161"></a><span class="tm">19:52:31</span><span class="nk"> <popey></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"> <popey></span> camping doesnt
+<a name="l-163"></a><span class="tm">19:52:39</span><span class="nk"> <Daviey></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"> <Daviey></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"> <brobostigon></span> true popey , so totally unfair on that front
+<a name="l-166"></a><span class="tm">19:52:54</span><span class="nk"> <popey></span> not totally brobostigon
+<a name="l-167"></a><span class="tm">19:52:56</span><span class="nk"> <andy101></span> what's a "hackfest" btw?
+<a name="l-168"></a><span class="tm">19:53:08</span><span class="nk"> <popey></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"> <Daviey></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"> <Daviey></span> packaging, and lessons
+<a name="l-171"></a><span class="tm">19:53:19</span><span class="nk"> <andy101></span> thanks
+<a name="l-172"></a><span class="tm">19:53:33</span><span class="nk"> <MooDoo></span> tutorials would be a good one.
+<a name="l-173"></a><span class="tm">19:53:54</span><span class="nk"> <gord></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"> <webpigeon></span> netsplit in the meeting :(
+<a name="l-175"></a><span class="tm">19:54:02</span><span class="nk"> <franki^></span> heh :|
+<a name="l-176"></a><span class="tm">19:54:02</span><span class="nk"> <MooDoo></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"> <WastePotato></span> Dammit.
+<a name="l-179"></a><span class="tm">19:54:18</span><span class="nk"> <WastePotato></span> Let's wait.
+<a name="l-180"></a><span class="tm">19:54:28</span><span class="nk"> <brobostigon></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"> <gord></span> we are supposed to point and laugh
+<a name="l-182"></a><span class="tm">19:54:29</span><span class="nk"> <MooDoo></span> can't do anything else :)
+<a name="l-183"></a><span class="tm">19:54:36</span><span class="nk"> <webpigeon></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"> <MooDoo></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"> <gord></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"> <brobostigon></span> <span class="hi">MooDoo:</span> south midlands
+<a name="l-187"></a><span class="tm">19:55:16</span><span class="nk"> <webpigeon></span> hazar!
+<a name="l-188"></a><span class="tm">19:55:25</span><span class="nk"> <franki^></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"> <brobostigon></span> north oxfordshire
+<a name="l-190"></a><span class="tm">19:55:30</span><span class="nk"> <MooDoo></span> :)
+<a name="l-191"></a><span class="tm">19:55:31</span><span class="nk"> <Ging></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"> <popey></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"> <daubers></span> Someone must have a generator
+<a name="l-194"></a><span class="tm">19:55:32</span><span class="nk"> <Daviey></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"> <Daviey></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"> <Ging></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"> <Daviey></span> so not in the Sunny south :(
+<a name="l-199"></a><span class="tm">19:55:35</span><span class="nk"> <popey></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"> <andy101></span> the south is NOT sunny!
+<a name="l-201"></a><span class="tm">19:55:35</span><span class="nk"> <DJones></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"> <andy101></span> somewhere with decent transport links (motorways, trains etc.)
+<a name="l-203"></a><span class="tm">19:55:59</span><span class="nk"> <gord></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"> <Daviey></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"> <popey></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"> <Daviey></span> I more wanted to gauge excitment about it
+<a name="l-207"></a><span class="tm">19:56:14</span><span class="nk"> <popey></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"> <daubers></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"> <Daviey></span> exactly!
+<a name="l-211"></a><span class="tm">19:56:33</span><span class="nk"> <popey></span> yeah
+<a name="l-212"></a><span class="tm">19:56:37</span><span class="nk"> <Daviey></span> Okay, shall we move on?
+<a name="l-213"></a><span class="tm">19:56:40</span><span class="nk"> <sheepeatingtaz></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"> <daubers></span> "I'm a cow and I use Ubuntu"
+<a name="l-215"></a><span class="tm">19:56:49</span><span class="nk"> <popey></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"> <kalessin1></span> <span class="hi">daubers:</span> oh, dear
+<a name="l-217"></a><span class="tm">19:56:59</span><span class="nk"> <brobostigon></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"> <technolalia></span> Surely cows use moobuntu?
+<a name="l-219"></a><span class="tm">19:57:04</span><span class="nk"> <gord></span> dress a scarecrow up like mark shuttleworth
+<a name="l-220"></a><span class="tm">19:57:06</span><span class="nk"> <Daviey></span> <span class="hi">popey:</span> i guess :(
+<a name="l-221"></a><span class="tm">19:57:10</span><span class="nk"> <Daviey></span> <span class="hi">gord:</span> hah
+<a name="l-222"></a><span class="tm">19:57:15</span><span class="nk"> <Daviey></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"> <james_w></span> hello everyone
+<a name="l-225"></a><span class="tm">19:57:37</span><span class="nk"> <Daviey></span> okay, shall we move on?
+<a name="l-226"></a><span class="tm">19:57:40</span><span class="nk"> <MooDoo></span> aye
+<a name="l-227"></a><span class="tm">19:57:49</span><span class="nk"> <Daviey></span> Did anyone else have any ideas for 2009?
+<a name="l-228"></a><span class="tm">19:57:49</span><span class="nk"> <technolalia></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"> <popey></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"> <ProfFalken></span> <span class="hi">Daviey:</span> SoftwareFreedomDay or similar?
+<a name="l-231"></a><span class="tm">19:58:25</span><span class="nk"> <webpigeon></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"> <webpigeon></span> s/si/is
+<a name="l-233"></a><span class="tm">19:58:40</span><span class="nk"> <popey></span> we already do something for software freedom day
+<a name="l-234"></a><span class="tm">19:58:40</span><span class="nk"> <popey></span> <span class="hi">webpigeon:</span> which wiki page?
+<a name="l-235"></a><span class="tm">19:58:40</span><span class="nk"> <Daviey></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"> <gord></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"> <webpigeon></span> popey, ubuntu-uk
+<a name="l-238"></a><span class="tm">19:59:00</span><span class="nk"> <Daviey></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"> <popey></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"> <webpigeon></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"> <Daviey></span> perhaps i'm being shortsighted?
+<a name="l-242"></a><span class="tm">19:59:10</span><span class="nk"> <ProfFalken></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"> <popey></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"> <Daviey></span> <span class="hi">popey:</span> as a LoCo?
+<a name="l-245"></a><span class="tm">19:59:22</span><span class="nk"> <popey></span> yes
+<a name="l-246"></a><span class="tm">19:59:34</span><span class="nk"> <Daviey></span> I thought that was more HantsLUG? :)
+<a name="l-247"></a><span class="tm">19:59:39</span><span class="nk"> <ProfFalken></span> lol
+<a name="l-248"></a><span class="tm">19:59:44</span><span class="nk"> <popey></span> bracknell isnt in hants :p
+<a name="l-249"></a><span class="tm">19:59:56</span><span class="nk"> <Daviey></span> heh
+<a name="l-250"></a><span class="tm">19:59:58</span><span class="nk"> <popey></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"> <popey></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"> <MooDoo></span> ooo t-shirts, stickers [sorry got carried away]
+<a name="l-254"></a><span class="tm">20:00:37</span><span class="nk"> <popey></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"> <popey></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"> <popey></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"> <Daviey></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"> <popey></span> I guess both are appropriate.
+<a name="l-259"></a><span class="tm">20:01:36</span><span class="nk"> <popey></span> other locos do it
+<a name="l-260"></a><span class="tm">20:01:41</span><span class="nk"> <`Chris></span> PRESENT - Or am I too late?
+<a name="l-261"></a><span class="tm">20:01:43</span><span class="nk"> <popey></span> and other lugs do it
+<a name="l-262"></a><span class="tm">20:01:45</span><span class="nk"> <sheepeatingtaz></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"> <Ging></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"> <Daviey></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"> <popey></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"> <sheepeatingtaz></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"> <Daviey></span> no, i'm not saying that
+<a name="l-269"></a><span class="tm">20:02:47</span><span class="nk"> <popey></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"> <sheepeatingtaz></span> but not to do *something*
+<a name="l-271"></a><span class="tm">20:02:49</span><span class="nk"> <popey></span> france?
+<a name="l-272"></a><span class="tm">20:03:03</span><span class="nk"> <ProfFalken></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"> <Daviey></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"> <Ging></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"> <popey></span> as opposed to a national event?
+<a name="l-276"></a><span class="tm">20:03:25</span><span class="nk"> <Daviey></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"> <Daviey></span> Well hwo can it be national?
+<a name="l-278"></a><span class="tm">20:03:40</span><span class="nk"> <gord></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"> <popey></span> indeed
+<a name="l-280"></a><span class="tm">20:04:00</span><span class="nk"> <Daviey></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"> <popey></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"> <ProfFalken></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"> <Daviey></span> ^ +1
+<a name="l-284"></a><span class="tm">20:04:34</span><span class="nk"> <gLAsgowMonkey></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"> <popey></span> requesting what?
+<a name="l-286"></a><span class="tm">20:04:54</span><span class="nk"> <gord></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"> <gLAsgowMonkey></span> media, stickers
+<a name="l-288"></a><span class="tm">20:05:06</span><span class="nk"> <popey></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"> <gLAsgowMonkey></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"> <Daviey></span> we have no "stuff" :)
+<a name="l-292"></a><span class="tm">20:05:59</span><span class="nk"> <gLAsgowMonkey></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"> <MooDoo></span> and Daviey is the poc :)
+<a name="l-294"></a><span class="tm">20:06:00</span><span class="nk"> <ProfFalken></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"> <Daviey></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"> <popey></span> we can get conference packs from canonical
+<a name="l-297"></a><span class="tm">20:06:20</span><span class="nk"> <popey></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"> <popey></span> providing t-shirts, caps, CDs, stickers
+<a name="l-299"></a><span class="tm">20:06:42</span><span class="nk"> <popey></span> we could improve / add-to that
+<a name="l-300"></a><span class="tm">20:06:46</span><span class="nk"> <gord></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"> <Daviey></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"> <popey></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"> <Daviey></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"> <gLAsgowMonkey></span> so we get any help from canonical
+<a name="l-307"></a><span class="tm">20:07:54</span><span class="nk"> <popey></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"> <gLAsgowMonkey></span> I mean marketing and promotion
+<a name="l-309"></a><span class="tm">20:08:15</span><span class="nk"> <Daviey></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"> <Daviey></span> So the LoCo marketting department should be repushed :)
+<a name="l-311"></a><span class="tm">20:08:46</span><span class="nk"> <gLAsgowMonkey></span> I understand it's a finite resource
+<a name="l-312"></a><span class="tm">20:09:11</span><span class="nk"> <Daviey></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"> <popey></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"> <gLAsgowMonkey></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"> <ProfFalken></span> <span class="hi">popey:</span> :o)
+<a name="l-316"></a><span class="tm">20:09:23</span><span class="nk"> <popey></span> given SFD is on a saturday
+<a name="l-317"></a><span class="tm">20:09:39</span><span class="nk"> <brobostigon></span> <span class="hi">popey:</span> good idea
+<a name="l-318"></a><span class="tm">20:09:41</span><span class="nk"> <MooDoo></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"> <Daviey></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"> <Ging></span> what is SFD ?
+<a name="l-321"></a><span class="tm">20:09:50</span><span class="nk"> <gord></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"> <Daviey></span> software freedom day
+<a name="l-323"></a><span class="tm">20:09:55</span><span class="nk"> <ProfFalken></span> <span class="hi">MooDoo:</span> lol, sounds great
+<a name="l-324"></a><span class="tm">20:09:57</span><span class="nk"> <webpigeon></span> Ging, http://softwarefreedomday.org/
+<a name="l-325"></a><span class="tm">20:10:07</span><span class="nk"> <daubers></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"> <daubers></span> it has a tendency to be fairly damp
+<a name="l-327"></a><span class="tm">20:10:16</span><span class="nk"> <Daviey></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"> <kalessin1></span> <span class="hi">duabers:</span> good point
+<a name="l-329"></a><span class="tm">20:10:22</span><span class="nk"> <Daviey></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"> <popey></span> yes
+<a name="l-331"></a><span class="tm">20:10:36</span><span class="nk"> <Daviey></span> cool, lets move on
+<a name="l-332"></a><span class="tm">20:10:44</span><span class="nk"> <Daviey></span> anything else for 2009 direction?
+<a name="l-333"></a><span class="tm">20:10:49</span><span class="nk"> <popey></span> more contribution!
+<a name="l-334"></a><span class="tm">20:10:58</span><span class="nk"> <MooDoo></span> https://wiki.ubuntu.com/UKTeam/IdeasPool
+<a name="l-335"></a><span class="tm">20:11:00</span><span class="nk"> <popey></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"> <daubers></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"> <popey></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"> <daubers></span> ok
+<a name="l-339"></a><span class="tm">20:11:34</span><span class="nk"> <Daviey></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"> <Daviey></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"> <MooDoo></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"> <popey></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"> <popey></span> there is no concerted effort
+<a name="l-345"></a><span class="tm">20:12:17</span><span class="nk"> <popey></span> we dont pimp is on the list
+<a name="l-346"></a><span class="tm">20:12:19</span><span class="nk"> <Daviey></span> txwikinger is doing really well IIRC
+<a name="l-347"></a><span class="tm">20:12:21</span><span class="nk"> <popey></span> we dont pimp the stats for example
+<a name="l-348"></a><span class="tm">20:12:22</span><span class="nk"> <Daviey></span> and james_w
+<a name="l-349"></a><span class="tm">20:12:34</span><span class="nk"> <popey></span> i was thinking more of non-canonical people :)
+<a name="l-350"></a><span class="tm">20:12:34</span><span class="nk"> <Laney></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"> <daubers></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"> <txwikinger></span> o/ Daviey
+<a name="l-354"></a><span class="tm">20:13:07</span><span class="nk"> <Daviey></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"> <gord></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"> <Daviey></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"> <Daviey></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"> <popey></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"> <webpigeon></span> "We are currently planning our presence at LugRadioLive2008." -.-
+<a name="l-361"></a><span class="tm">20:14:12</span><span class="nk"> <popey></span> <span class="hi">webpigeon:</span> edit it
+<a name="l-362"></a><span class="tm">20:14:22</span><span class="nk"> <webpigeon></span> popey, I will do :P
+<a name="l-363"></a><span class="tm">20:14:31</span><span class="nk"> <james_w></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"> <Daviey></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"> <popey></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"> <james_w></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"> <ProfFalken></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"> <james_w></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"> <gLAsgowMonkey></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"> <Daviey></span> woot!
+<a name="l-371"></a><span class="tm">20:15:23</span><span class="nk"> <Daviey></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"> <gord></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"> <james_w></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"> <popey></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"> <Daviey></span> agreed.
+<a name="l-376"></a><span class="tm">20:16:44</span><span class="nk"> <popey></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"> <Daviey></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"> <popey></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"> <technolalia></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"> <james_w></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"> <popey></span> farnborough, hampshire
+<a name="l-382"></a><span class="tm">20:17:39</span><span class="nk"> <Daviey></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"> <Daviey></span> But certainly a good idea
+<a name="l-384"></a><span class="tm">20:17:52</span><span class="nk"> <popey></span> yeah, bar stewards
+<a name="l-385"></a><span class="tm">20:18:00</span><span class="nk"> <popey></span> <span class="hi">james_w:</span> agreed
+<a name="l-386"></a><span class="tm">20:18:01</span><span class="nk"> <`Chris></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"> <james_w></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"> <Daviey></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"> <popey></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"> <james_w></span> <span class="hi">popey:</span> good idea
+<a name="l-391"></a><span class="tm">20:18:34</span><span class="nk"> <Daviey></span> popey has offered his gaff as a host
+<a name="l-392"></a><span class="tm">20:18:45</span><span class="nk"> <ProfFalken></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"> <popey></span> we should put a page up about venues
+<a name="l-394"></a><span class="tm">20:18:53</span><span class="nk"> <Daviey></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"> <popey></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"> <technolalia></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"> <Daviey></span> we could certainly have >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"> <popey></span> that would be cool technolalia
+<a name="l-400"></a><span class="tm">20:19:31</span><span class="nk"> <popey></span> <span class="hi">Daviey:</span> i disagree
+<a name="l-401"></a><span class="tm">20:19:33</span><span class="nk"> <`Chris></span> How far away (in time) is the bugjam?
+<a name="l-402"></a><span class="tm">20:19:38</span><span class="nk"> <popey></span> i think we _should_ split the experts up
+<a name="l-403"></a><span class="tm">20:19:44</span><span class="nk"> <popey></span> divide and conquer
+<a name="l-404"></a><span class="tm">20:19:49</span><span class="nk"> <Daviey></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"> <andylockran></span> howdy
+<a name="l-406"></a><span class="tm">20:19:56</span><span class="nk"> <james_w></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"> <james_w></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"> <Daviey></span> <span class="hi">andylockran:</span> o/
+<a name="l-410"></a><span class="tm">20:20:30</span><span class="nk"> <james_w></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"> <popey></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"> <Laney></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"> <popey></span> and come back in 1-2 weekas
+<a name="l-416"></a><span class="tm">20:20:52</span><span class="nk"> <ProfFalken></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"> <Daviey></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"> <popey></span> lets not start getting into location arguments :)
+<a name="l-419"></a><span class="tm">20:21:17</span><span class="nk"> <james_w></span> <span class="hi">Daviey:</span> yes sir!
+<a name="l-420"></a><span class="tm">20:21:21</span><span class="nk"> <popey></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"> <ProfFalken></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"> <`Chris></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"> <kalessin1></span> <span class="hi">ProfFalken:</span> I second that
+<a name="l-424"></a><span class="tm">20:21:51</span><span class="nk"> <popey></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"> <brobostigon></span> good idea popey
+<a name="l-426"></a><span class="tm">20:22:01</span><span class="nk"> <ProfFalken></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"> <Daviey></span> ---> moving on
+<a name="l-428"></a><span class="tm">20:22:11</span><span class="nk"> <ProfFalken></span> but SWLUG covers a fscking huge area...
+<a name="l-429"></a><span class="tm">20:22:12</span><span class="nk"> <gLAsgowMonkey></span> can we move on please
+<a name="l-430"></a><span class="tm">20:22:26</span><span class="nk"> <technolalia></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"> <Daviey></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"> <Daviey></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"> <brobostigon></span> or even alternative venues
+<a name="l-434"></a><span class="tm">20:23:02</span><span class="nk"> <popey></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"> <popey></span> when is the bug jam?
+<a name="l-436"></a><span class="tm">20:23:17</span><span class="nk"> <popey></span> its not long
+<a name="l-437"></a><span class="tm">20:23:23</span><span class="nk"> <james_w></span> end of Feb
+<a name="l-438"></a><span class="tm">20:23:27</span><span class="nk"> <james_w></span> 20thish
+<a name="l-439"></a><span class="tm">20:23:32</span><span class="nk"> <Daviey></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"> <popey></span> thats not long at all
+<a name="l-441"></a><span class="tm">20:23:42</span><span class="nk"> <Daviey></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"> <popey></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"> <Daviey></span> err does it clash with FOSDEM?
+<a name="l-444"></a><span class="tm">20:23:50</span><span class="nk"> <popey></span> no
+<a name="l-445"></a><span class="tm">20:23:54</span><span class="nk"> <popey></span> thats at the start of feb
+<a name="l-446"></a><span class="tm">20:24:01</span><span class="nk"> <popey></span> 7/8
+<a name="l-447"></a><span class="tm">20:24:06</span><span class="nk"> <Daviey></span> cool
+<a name="l-448"></a><span class="tm">20:24:22</span><span class="nk"> <webpigeon></span> Do we know where everyone is?
+<a name="l-449"></a><span class="tm">20:24:25</span><span class="nk"> <Daviey></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"> <popey></span> i think we should!
+<a name="l-451"></a><span class="tm">20:24:45</span><span class="nk"> <brobostigon></span> yep
+<a name="l-452"></a><span class="tm">20:24:52</span><span class="nk"> <Daviey></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"> <popey></span> get this stuff all tidied up
+<a name="l-454"></a><span class="tm">20:25:29</span><span class="nk"> <Daviey></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"> <Daviey></span> (woot)
+<a name="l-456"></a><span class="tm">20:25:39</span><span class="nk"> <Daviey></span> happen*
+<a name="l-457"></a><span class="tm">20:25:46</span><span class="nk"> <popey></span> yay
+<a name="l-458"></a><span class="tm">20:25:54</span><span class="nk"> <Daviey></span> okay, move on?
+<a name="l-459"></a><span class="tm">20:25:57</span><span class="nk"> <popey></span> yeah
+<a name="l-460"></a><span class="tm">20:26:02</span><span class="nk"> <`Chris></span> Last question!
+<a name="l-461"></a><span class="tm">20:26:07</span><span class="nk"> <`Chris></span> Venues - We bring own laptops yeah?
+<a name="l-462"></a><span class="tm">20:26:08</span><span class="nk"> <Daviey></span> <span class="hi">`Chris:</span> go
+<a name="l-463"></a><span class="tm">20:26:15</span><span class="nk"> <Daviey></span> hell yeah :)
+<a name="l-464"></a><span class="tm">20:26:19</span><span class="nk"> <`Chris></span> ok cool
+<a name="l-465"></a><span class="tm">20:26:31</span><span class="nk"> <Daviey></span> <span class="hi">Laney:</span> next topic?
+<a name="l-466"></a><span class="tm">20:26:34</span><span class="nk"> <popey></span> unless people have spare/extra ones
+<a name="l-467"></a><span class="tm">20:26:43</span><span class="nk"> <Laney></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"> <MooDoo></span> PRESENT :)
+<a name="l-470"></a><span class="tm">20:27:03</span><span class="nk"> <Laney></span> [topic] Free Media - MooDoo
+<a name="l-471"></a><span class="tm">20:27:04</span><span class="nk"> <MootBot></span> New Topic: Free Media - MooDoo
+<a name="l-472"></a><span class="tm">20:27:06</span><span class="nk"> <Laney></span> take it away
+<a name="l-473"></a><span class="tm">20:27:32</span><span class="nk"> <MooDoo></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"> <MooDoo></span> our own volunteer version of shipit :)
+<a name="l-475"></a><span class="tm">20:28:14</span><span class="nk"> <Daviey></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"> <`Chris></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"> <brobostigon></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"> <MooDoo></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"> <MooDoo></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"> <sheepeatingtaz></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"> <Daviey></span> Sounds like a worthy idea
+<a name="l-482"></a><span class="tm">20:29:20</span><span class="nk"> <popey></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"> <brobostigon></span> so 5 or less?
+<a name="l-484"></a><span class="tm">20:29:30</span><span class="nk"> <gord></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"> <popey></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"> <sheepeatingtaz></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"> <MooDoo></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"> <popey></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"> <brobostigon></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"> <MooDoo></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"> <popey></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"> <MooDoo></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"> <MooDoo></span> a form on the wiki for instance
+<a name="l-495"></a><span class="tm">20:31:06</span><span class="nk"> <popey></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"> <sheepeatingtaz></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"> <MooDoo></span> the details would be sorted later.
+<a name="l-498"></a><span class="tm">20:31:15</span><span class="nk"> <popey></span> <span class="hi">sheepeatingtaz:</span> thats rare
+<a name="l-499"></a><span class="tm">20:31:27</span><span class="nk"> <kalessin1></span> one problem
+<a name="l-500"></a><span class="tm">20:31:30</span><span class="nk"> <sheepeatingtaz></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"> <MooDoo></span> <span class="hi">kalessin1:</span> go :)
+<a name="l-502"></a><span class="tm">20:31:41</span><span class="nk"> <gLAsgowMonkey></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"> <popey></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"> <popey></span> I have 100 or so CDs here
+<a name="l-505"></a><span class="tm">20:31:56</span><span class="nk"> <kalessin1></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"> <Daviey></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"> <ProfFalken></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"> <ProfFalken></span> :oP
+<a name="l-509"></a><span class="tm">20:32:06</span><span class="nk"> <gLAsgowMonkey></span> haha
+<a name="l-510"></a><span class="tm">20:32:09</span><span class="nk"> <MooDoo></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"> <gLAsgowMonkey></span> it's the aspire keyboard honest
+<a name="l-512"></a><span class="tm">20:32:24</span><span class="nk"> <gord></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"> <MooDoo></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"> <ProfFalken></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"> <popey></span> holland
+<a name="l-516"></a><span class="tm">20:33:11</span><span class="nk"> <Daviey></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"> <gord></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"> <MooDoo></span> <span class="hi">Daviey:</span> disclaimers
+<a name="l-519"></a><span class="tm">20:33:44</span><span class="nk"> <popey></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"> <ProfFalken></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"> <MooDoo></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"> <`Chris></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"> <popey></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"> <popey></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"> <popey></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"> <popey></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"> <popey></span> I received about 350 of them
+<a name="l-529"></a><span class="tm">20:34:48</span><span class="nk"> <brobostigon></span> wow
+<a name="l-530"></a><span class="tm">20:35:14</span><span class="nk"> <popey></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"> <MooDoo></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"> <andylockran></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"> <Daviey></span> LTS or latest IMO
+<a name="l-534"></a><span class="tm">20:35:48</span><span class="nk"> <brobostigon></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"> <MooDoo></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"> <brobostigon></span> i *
+<a name="l-537"></a><span class="tm">20:35:55 </span><span class="nka">* franki^</span> <span class="ac">loves LTS <3</span>
+<a name="l-538"></a><span class="tm">20:36:07</span><span class="nk"> <popey></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"> <`Chris></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"> <popey></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"> <popey></span> <span class="hi">ProfFalken:</span> who pays?
+<a name="l-544"></a><span class="tm">20:36:28</span><span class="nk"> <Daviey></span> haha
+<a name="l-545"></a><span class="tm">20:36:37</span><span class="nk"> <popey></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"> <Daviey></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"> <popey></span> in batches of 5 for example
+<a name="l-548"></a><span class="tm">20:36:57</span><span class="nk"> <MooDoo></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"> <popey></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"> <`Chris></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"> <popey></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"> <popey></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"> <Daviey></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"> <popey></span> for low cost
+<a name="l-556"></a><span class="tm">20:37:49</span><span class="nk"> <popey></span> not entirely Daviey
+<a name="l-557"></a><span class="tm">20:38:00</span><span class="nk"> <MooDoo></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"> <popey></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"> <popey></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"> <Daviey></span> ahh, this isn't what ProfFalken suggested :)
+<a name="l-561"></a><span class="tm">20:38:28</span><span class="nk"> <popey></span> oh yeah
+<a name="l-562"></a><span class="tm">20:38:33</span><span class="nk"> <`Chris></span> Ideas can evolve :)
+<a name="l-563"></a><span class="tm">20:38:34</span><span class="nk"> <popey></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"> <Daviey></span> sounds promising
+<a name="l-565"></a><span class="tm">20:38:52</span><span class="nk"> <popey></span> thats 7 parcels once every 6 months
+<a name="l-566"></a><span class="tm">20:38:54</span><span class="nk"> <popey></span> maybe twice
+<a name="l-567"></a><span class="tm">20:38:56</span><span class="nk"> <popey></span> no more
+<a name="l-568"></a><span class="tm">20:39:12</span><span class="nk"> <popey></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"> <Daviey></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"> <popey></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"> <popey></span> that I am unsure of
+<a name="l-572"></a><span class="tm">20:39:39</span><span class="nk"> <popey></span> but you get them faster than anyone else
+<a name="l-573"></a><span class="tm">20:39:41</span><span class="nk"> <MooDoo></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"> <popey></span> I got intrepid CDs _real_ quick after release
+<a name="l-575"></a><span class="tm">20:39:49</span><span class="nk"> <Daviey></span> oh
+<a name="l-576"></a><span class="tm">20:39:58</span><span class="nk"> <`Chris></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"> <popey></span> date on the box is 4/11/08
+<a name="l-579"></a><span class="tm">20:40:16</span><span class="nk"> <popey></span> when did intrepid release?
+<a name="l-580"></a><span class="tm">20:40:18</span><span class="nk"> <popey></span> 25/10?
+<a name="l-581"></a><span class="tm">20:40:24</span><span class="nk"> <jono></span> hey Daviey :)
+<a name="l-582"></a><span class="tm">20:40:26</span><span class="nk"> <Daviey></span> yeah that is quick
+<a name="l-583"></a><span class="tm">20:40:34</span><span class="nk"> <popey></span> he's had his coffee
+<a name="l-584"></a><span class="tm">20:40:38</span><span class="nk"> <jono></span> hehe
+<a name="l-585"></a><span class="tm">20:40:42</span><span class="nk"> <jono></span> hows thing chaps?
+<a name="l-586"></a><span class="tm">20:40:44</span><span class="nk"> <jono></span> things
+<a name="l-587"></a><span class="tm">20:40:44</span><span class="nk"> <Daviey></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"> <jono></span> Daviey, :)
+<a name="l-589"></a><span class="tm">20:40:56</span><span class="nk"> <Daviey></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"> <jono></span> just working
+<a name="l-591"></a><span class="tm">20:41:00</span><span class="nk"> <jono></span> oh nice :)
+<a name="l-592"></a><span class="tm">20:41:16</span><span class="nk"> <popey></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"> <Daviey></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"> <Daviey></span> <span class="hi">jono:</span> ^
+<a name="l-595"></a><span class="tm">20:41:28</span><span class="nk"> <popey></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"> <jono></span> Daviey, cool :)
+<a name="l-598"></a><span class="tm">20:42:20</span><span class="nk"> <popey></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"> <Daviey></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"> <MooDoo></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"> <popey></span> seems shortsighted to me
+<a name="l-602"></a><span class="tm">20:42:47</span><span class="nk"> <gord></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"> <popey></span> yes gord
+<a name="l-604"></a><span class="tm">20:42:58</span><span class="nk"> <popey></span> i get throughj 300 or so
+<a name="l-605"></a><span class="tm">20:43:04</span><span class="nk"> <popey></span> events as well as postage
+<a name="l-606"></a><span class="tm">20:43:10</span><span class="nk"> <MooDoo></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"> <MooDoo></span> how many i have left is irrelevant
+<a name="l-608"></a><span class="tm">20:43:31</span><span class="nk"> <popey></span> its a potential waste
+<a name="l-609"></a><span class="tm">20:43:44</span><span class="nk"> <Nafallo></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"> <`Chris></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"> <popey></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"> <Daviey></span> ofc, we have to justify using them efficently
+<a name="l-613"></a><span class="tm">20:44:03</span><span class="nk"> <gord></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"> <`Chris></span> <span class="hi">Nafallo:</span> Only £2 extra
+<a name="l-615"></a><span class="tm">20:44:31</span><span class="nk"> <Nafallo></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"> <Daviey></span> okaaaaaaaaaaaaaaaaay, who would volunteer to do this?
+<a name="l-617"></a><span class="tm">20:44:45</span><span class="nk"> <Daviey></span> MooDoo
+<a name="l-618"></a><span class="tm">20:44:55</span><span class="nk"> <Nafallo></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"> <MooDoo></span> :)
+<a name="l-620"></a><span class="tm">20:45:07</span><span class="nk"> <Daviey></span> <span class="hi">Nafallo:</span> (topic)
+<a name="l-621"></a><span class="tm">20:45:09</span><span class="nk"> <brobostigon></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"> <popey></span> ok
+<a name="l-623"></a><span class="tm">20:45:21</span><span class="nk"> <popey></span> tell you what
+<a name="l-624"></a><span class="tm">20:45:30</span><span class="nk"> <popey></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"> <Daviey></span> chaps... can we close this topic first?
+<a name="l-626"></a><span class="tm">20:45:35</span><span class="nk"> <popey></span> i am
+<a name="l-627"></a><span class="tm">20:45:44</span><span class="nk"> <popey></span> trying to :)
+<a name="l-628"></a><span class="tm">20:45:49</span><span class="nk"> <popey></span> and we will see what the demand is?
+<a name="l-629"></a><span class="tm">20:45:53</span><span class="nk"> <brobostigon></span> ok popey :) good idea
+<a name="l-630"></a><span class="tm">20:45:54</span><span class="nk"> <Daviey></span> oh, very trying as ever popey :)
+<a name="l-631"></a><span class="tm">20:45:59</span><span class="nk"> <popey></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"> <popey></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"> <Daviey></span> sounds suitable to me :)
+<a name="l-634"></a><span class="tm">20:46:32</span><span class="nk"> <popey></span> Epic \/\/in
+<a name="l-635"></a><span class="tm">20:46:35</span><span class="nk"> <Daviey></span> can we all go home now?
+<a name="l-636"></a><span class="tm">20:46:37</span><span class="nk"> <Daviey></span> :)
+<a name="l-637"></a><span class="tm">20:46:55</span><span class="nk"> <daubers></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"> <popey></span> <span class="hi">MooDoo:</span> sound fair?
+<a name="l-639"></a><span class="tm">20:47:09</span><span class="nk"> <Daviey></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"> <MooDoo></span> <span class="hi">popey:</span> +1 :)
+<a name="l-641"></a><span class="tm">20:47:16</span><span class="nk"> <popey></span> and action points from this one :)
+<a name="l-642"></a><span class="tm">20:47:28</span><span class="nk"> <brobostigon></span> :)
+<a name="l-643"></a><span class="tm">20:47:44</span><span class="nk"> <popey></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"> <Daviey></span> okay, topic shift - Laney :)
+<a name="l-645"></a><span class="tm">20:47:58</span><span class="nk"> <Laney></span> that's it
+<a name="l-646"></a><span class="tm">20:48:01</span><span class="nk"> <Daviey></span> erm
+<a name="l-647"></a><span class="tm">20:48:01</span><span class="nk"> <Laney></span> [topic] AOB
+<a name="l-648"></a><span class="tm">20:48:02</span><span class="nk"> <MootBot></span> New Topic: AOB
+<a name="l-649"></a><span class="tm">20:48:21</span><span class="nk"> <webpigeon></span> AOB?
+<a name="l-650"></a><span class="tm">20:48:23</span><span class="nk"> <Daviey></span> nothing from me :)
+<a name="l-651"></a><span class="tm">20:48:26</span><span class="nk"> <andylockran></span> Any Other Business
+<a name="l-652"></a><span class="tm">20:48:27</span><span class="nk"> <Daviey></span> Any other Biz
+<a name="l-653"></a><span class="tm">20:48:33</span><span class="nk"> <webpigeon></span> ah :)
+<a name="l-654"></a><span class="tm">20:48:38</span><span class="nk"> <gLAsgowMonkey></span> AOCB
+<a name="l-655"></a><span class="tm">20:48:38</span><span class="nk"> <technolalia></span> <span class="hi">fosdem:</span> who's going?
+<a name="l-656"></a><span class="tm">20:48:48</span><span class="nk"> <popey></span> o/ possibly
+<a name="l-657"></a><span class="tm">20:48:49</span><span class="nk"> <Daviey></span> most likely o/
+<a name="l-658"></a><span class="tm">20:48:56</span><span class="nk"> <technolalia></span> definately - all booked
+<a name="l-659"></a><span class="tm">20:49:06</span><span class="nk"> <Daviey></span> <span class="hi">technolalia:</span> eurotunnel?
+<a name="l-660"></a><span class="tm">20:49:08</span><span class="nk"> <technolalia></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"> <franki^></span> what is fosdem? :)
+<a name="l-662"></a><span class="tm">20:49:15</span><span class="nk"> <popey></span> http://fosdem.org/
+<a name="l-663"></a><span class="tm">20:49:16</span><span class="nk"> <MootBot></span> LINK received: http://fosdem.org/
+<a name="l-664"></a><span class="tm">20:49:16</span><span class="nk"> <Daviey></span> <span class="hi">technolalia:</span> there normally is
+<a name="l-665"></a><span class="tm">20:49:18</span><span class="nk"> <popey></span> conference brussels
+<a name="l-666"></a><span class="tm">20:49:26</span><span class="nk"> <james_w></span> o/
+<a name="l-667"></a><span class="tm">20:49:30</span><span class="nk"> <technolalia></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"> <technolalia></span> yes, eurotunnel
+<a name="l-669"></a><span class="tm">20:50:06</span><span class="nk"> <Daviey></span> good -o
+<a name="l-670"></a><span class="tm">20:50:13</span><span class="nk"> <Daviey></span> any other AOB?
+<a name="l-671"></a><span class="tm">20:50:27</span><span class="nk"> <MooDoo></span> sorry chaps, got to go, baby calling......
+<a name="l-672"></a><span class="tm">20:50:33</span><span class="nk"> <Daviey></span> great, Laney topic shift - next meeting
+<a name="l-673"></a><span class="tm">20:50:34</span><span class="nk"> <Laney></span> going, going
+<a name="l-674"></a><span class="tm">20:50:36</span><span class="nk"> <popey></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"> <Laney></span> [topic] next meeting
+<a name="l-676"></a><span class="tm">20:50:40</span><span class="nk"> <MootBot></span> New Topic: next meeting
+<a name="l-677"></a><span class="tm">20:50:45</span><span class="nk"> <popey></span> so we know exactly whats happening?
+<a name="l-678"></a><span class="tm">20:50:54</span><span class="nk"> <popey></span> 20:47:44 < popey> 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"> <Daviey></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"> <`Chris></span> By the next meeting, find Bugjam venues?
+<a name="l-682"></a><span class="tm">20:51:13</span><span class="nk"> <Laney></span> rofl
+<a name="l-683"></a><span class="tm">20:51:22</span><span class="nk"> <`Chris></span> Especially find out about Wifi access? D:
+<a name="l-684"></a><span class="tm">20:51:33</span><span class="nk"> <Laney></span> yes, that sounds like a fine date
+<a name="l-685"></a><span class="tm">20:51:39</span><span class="nk"> <ProfFalken></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"> <Daviey></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"> <brobostigon></span> i am happy with the 15th
+<a name="l-688"></a><span class="tm">20:51:50</span><span class="nk"> <popey></span> stupid kde calendar
+<a name="l-689"></a><span class="tm">20:51:56</span><span class="nk"> <popey></span> wednesday 14th!
+<a name="l-690"></a><span class="tm">20:51:59</span><span class="nk"> <Laney></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"> <popey></span> ok
+<a name="l-692"></a><span class="tm">20:52:29</span><span class="nk"> <daubers></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"> <popey></span> next sunday is good by me too
+<a name="l-694"></a><span class="tm">20:52:40</span><span class="nk"> <popey></span> quicker the better IMO
+<a name="l-695"></a><span class="tm">20:52:47</span><span class="nk"> <gLAsgowMonkey></span> +1 for Sunday
+<a name="l-696"></a><span class="tm">20:52:50</span><span class="nk"> <popey></span> +1
+<a name="l-697"></a><span class="tm">20:52:52</span><span class="nk"> <Laney></span> one week from today?
+<a name="l-698"></a><span class="tm">20:52:53</span><span class="nk"> <Daviey></span> +1 Sunday
+<a name="l-699"></a><span class="tm">20:52:54</span><span class="nk"> <ProfFalken></span> +1
+<a name="l-700"></a><span class="tm">20:52:55</span><span class="nk"> <`Chris></span> +1 Wednesday
+<a name="l-701"></a><span class="tm">20:52:55</span><span class="nk"> <Daviey></span> yes
+<a name="l-702"></a><span class="tm">20:53:23</span><span class="nk"> <Laney></span> done
+<a name="l-703"></a><span class="tm">20:53:25</span><span class="nk"> <Daviey></span> okay, indifference prevails :)
+<a name="l-704"></a><span class="tm">20:53:27</span><span class="nk"> <popey></span> \o/
+<a name="l-705"></a><span class="tm">20:53:30</span><span class="nk"> <popey></span> wooot
+<a name="l-706"></a><span class="tm">20:53:31</span><span class="nk"> <Laney></span> thanks for attending all
+<a name="l-707"></a><span class="tm">20:53:38</span><span class="nk"> <Laney></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("&", "&").replace("<", "<").replace(">", ">")
+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