16:01:51 #startmeeting DaWGs aka Docs Working Group 16:01:51 Meeting started Tue Dec 15 16:01:51 2020 UTC. 16:01:51 This meeting is logged and archived in a public location. 16:01:51 The chair is acozine. Information about MeetBot at http://wiki.debian.org/MeetBot. 16:01:51 Useful Commands: #action #agreed #halp #info #idea #link #topic. 16:01:51 The meeting name has been set to 'dawgs_aka_docs_working_group' 16:01:55 #topic opening chatter 16:01:57 who's around? 16:02:06 #chair dmsimard samccann 16:02:06 Current chairs: acozine dmsimard samccann 16:02:14 \o 16:02:27 abadger1999 maybe :) 16:02:30 o/ 16:02:30 dmsimard: morning, and thanks for reporting the build errors 16:02:48 Good morning :-) 16:02:55 * dericcrago waves 16:03:28 abadger1999: dericcrago gundalow andersson007_ briantist cyberpear felixfontein madonius persysted tadeboro you chatting docs today? 16:03:36 #chair abadger1999 dericcrago 16:03:36 Current chairs: abadger1999 acozine dericcrago dmsimard samccann 16:03:39 good morning! 16:03:54 I'm around! 16:04:07 afternoon felixfontein! 16:04:10 #chair felixfontein 16:04:10 Current chairs: abadger1999 acozine dericcrago dmsimard felixfontein samccann 16:04:32 morning abadger1999! 16:04:59 * gundalow waves 16:05:13 good afternoon felixfontein ! 16:05:22 #chair gundalow 16:05:22 Current chairs: abadger1999 acozine dericcrago dmsimard felixfontein gundalow samccann 16:05:24 full house! 16:05:47 #topic holiday schedule 16:06:48 We will cancel the DaWGs meetings for the week of Dec. 28-Jan 1. 16:07:33 We can also cancel next week's meetings. Will anyone be around next Tuesday? I will be working, I know samccann will be out . . . 16:08:25 no idea actually :) 16:08:43 I'm probably around 16:09:02 okay, we can have a DaWGs Holiday Edition meeting, and see on the day if anyone turns up 16:09:21 if nothing else, I'll post my recipe for home-made egg nog 16:09:33 :) 16:10:18 #agreed Meetings cancelled Dec. 24, Dec. 29, and Dec. 31 16:10:29 * gundalow will not be here next week 16:10:35 :-) 16:10:41 I will be a passive lurker today since it looks like I managed to get a copy of that nasty COVID thingy. But I guess with my wife working in healthcare, this is kind of expected. 16:10:48 #agreed Meeting Dec. 22 will happen but will be very informal 16:11:05 tadeboro: sorry to hear that! take care of yourself 16:11:16 oh gosh.. take care tadeboro ! 16:11:50 tadeboro: Oh, I'm sorry that's happened :-( 16:12:27 tadeboro: take care :( 16:12:44 tadeboro: get well soon! 16:14:17 I'll be fine. Being a doctor in previous life (before mathematitian) helps in such situations. 16:14:45 And in previous life I mean "10 years ago when I switched careers". 16:14:49 nice backstory ! 16:14:50 :) 16:15:14 sadly IRC is not a good pipeline for sending soup ;-( 16:15:16 troubleshooting computers is easier than troubleshooting humans 16:15:53 computers are more consistent 16:16:21 #topic linking in module index pages 16:16:27 if they don't have bad electronics in them 16:16:42 acozine: at least you can get the letters, though you are missing the liquid part 16:16:56 #chair bcoca 16:16:56 Current chairs: abadger1999 acozine bcoca dericcrago dmsimard felixfontein gundalow samccann 16:17:38 words can be both comforting and heartening, but they aren't very nourishing 16:18:00 Ansible Chicken Soup for the Soul?? 16:18:07 but comfort, heart, and nourishment all help folks heal, so we'll do what we can 16:18:20 heh 16:18:37 let's go back on topic :D 16:18:54 does anyone know how to fix the failures on https://github.com/ansible/ansible/pull/72743 16:19:29 error is `docs/docsite/rst/collections/all_plugins.rst:0:0: File was not added to sdist` 16:21:12 it seems like https://github.com/ansible/ansible/pull/72743/files#diff-41d5a52589e0480be9c099d2bba7a8135b8b0d71bcbb8df3582a8df1c2295003 should fix the error 16:21:15 That's happening during the docs build? Or as part of the sanity tests? 16:21:22 but apparently it doesn't 16:21:45 abadger1999: sanity tests 16:21:47 abadger1999: the Azure Pipelines output is new to me, but it looks like it's happening in both places 16:21:57 * abadger1999 gets used to the azure interface 16:22:00 abadger1999: might also go wrong during release 16:22:53 oh, no, it's the same sanity-test failure in both places 16:23:51 Doesn't seem to be much information in the azure interface. 16:24:09 But I'll run the sanity test on that PR locally and see if I can figure it out 16:24:20 abadger1999: it's essentially the log output: https://dev.azure.com/ansible/ansible/_build/results?buildId=2103&view=logs&jobId=6b8fca62-2c63-5c74-2051-15ea31c8c104&j=6b8fca62-2c63-5c74-2051-15ea31c8c104&t=e6a77036-d6ac-54d6-bbbb-976ea775a86e 16:27:54 The test "Verifies that the combination of MANIFEST.in and package_data from setup.py properly installs data files from within lib/ansible" 16:28:07 but I don't think we want to install that file in lib/ansible 16:28:30 16:29:00 The test should be complaining only if the new file isn't included i nthe ansible-base tarball. 16:29:27 Explicitly adding it to the MANIFEST should *definitely* ensure that it is in the tarball. So something unexpected is happening. 16:29:37 I will troubleshoot this. 16:29:44 thanks abadger1999 16:29:47 abadger1999: thanks! 16:29:49 Up to you if you want to watch me do that during this meeting or move on :-) 16:30:00 let's see if we can fit some other topics in 16:30:16 I guess moving on is a good idea, since we have other topics? 16:30:40 my renders are ready to show fwiw 16:30:44 Most of them are follow-up 16:31:00 agenda: https://github.com/ansible/community/issues/521#issuecomment-741007843 16:31:20 dmsimard: remind us what those are? 16:31:42 action from last meeting: @dmsimard to draft 5 example renders of options in #521 (comment) + B(option)=C(value) to help vote at a later meeting 16:32:01 oh, awesome, that dovetails with the agenda 16:32:16 #topic update on module formatting for option: value 16:32:41 ok let me get copy/pasta ready 16:32:43 dmsimard: thanks for doing those! do you have a link? 16:33:02 so there were 5 options to look at and I added a 6th one for fun 16:33:17 the more the merrier at this stage 16:33:37 for reference (let's call it 0), the current docs: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/lineinfile_module.html 16:33:45 1. I(option=value) https://dmsimard.com/files/docsite/1/collections/ansible/builtin/lineinfile_module.html 16:33:50 * gundalow -> Other meeting 16:33:50 2. C(option=value) https://dmsimard.com/files/docsite/2/collections/ansible/builtin/lineinfile_module.html 16:33:55 3. I(option)=C(value) https://dmsimard.com/files/docsite/3/collections/ansible/builtin/lineinfile_module.html 16:34:01 4. I(option=)C(value) https://dmsimard.com/files/docsite/4/collections/ansible/builtin/lineinfile_module.html 16:34:06 5. B(option)=C(value) https://dmsimard.com/files/docsite/5/collections/ansible/builtin/lineinfile_module.html 16:34:42 6. C(option: value) but just found out my render failed :/ 16:34:52 okay, so the text to compare is `Used with state=present.` 16:35:03 yes, exactly 16:35:10 ignoring the fact that it should be `state: present` . . . but that's a different problem 16:35:19 this is all about how it looks! 16:35:45 so the current docs, at least for lineinfile, is format #2 16:36:40 it should be in format #1 according to our docs, though, right? 16:37:18 I like #2 (but would probably like #6 better if I could see it ;) ) 16:37:56 felixfontein: correct according to https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_documenting.html#linking-and-other-format-macros-within-module-documentation 16:38:07 option #5 is, if I recall, what IBM style guide says it should be 16:38:22 according to last weeks meeting minutes :-) 16:38:22 heh, well, #6 is the same as #2, just with updated text, right? or did you transform the existing text when you built it, so that `state=present` gets changed to `state: present` 16:38:43 acozine: yeah 6 would be the same replacing the "=" with ": " 16:38:50 the same as 2* 16:38:52 samccann: I think IBM style guide allows #2 "when text is meant to be copied and pasted" 16:39:16 ah yes, thanks,...phew 16:39:18 Is #6 going to be hard on editors (because it involves a colon which has syntactic meaning to yaml)? 16:39:25 dmsimard: I think we might get into trouble replacing every instance of `=` with `:` 16:39:32 cuz I prefer 2 to 5 for sure 16:39:41 when trying to do 6, the render failed with https://dmsimard.com/files/docsite/6/collections/ansible/builtin/lineinfile_module.html 16:39:53 (I'm guessing that's also why the render failed ;-) 16:40:00 * dmsimard nods 16:40:39 you probably needed to add quotes to keep the descriptions being strings, and not become dictionaries :) 16:40:52 Yeah, likely means that the summary of the option became a dict due to the colon instead of being a string 16:41:02 jinx :-) 16:41:10 not 100% sure I follow 16:41:18 so C(option: value) should be ... C("option: value") ? 16:41:19 that's one of the most common problems with changelog fragments and documentation ;) 16:41:23 yaml treats : special 16:41:30 dmsimard: no, `- "blabla C(option: value) blabla" 16:41:34 ` 16:41:38 ^ quotes needed 16:41:43 ah, that could be bothersome 16:41:53 s/could be/is/ 16:41:57 heh 16:42:23 so with that in mind my personal preference would be #2 16:42:36 mine too 16:42:45 let's see, how do we vote on something with 6 options? 16:42:58 mine is 3 or 4, to keep consistent formatting for option names and values 16:44:18 one question about 2. is how to actually write it in the documentation. using names like I/C/B, which are display indicators, for logical things like option name, option value etc. is really not great 16:44:20 don't we use `C(name)` for standalone option names elsewhere? 16:44:28 acozine: no, we use I(name) 16:44:30 acozine: can start by narrowing down options and eliminate those no one is in favor of :) 16:45:01 one of 3 and 4 should definitely go 16:45:47 4 includes the "=" into the italic whereas 3 doesn't 16:45:58 * acozine looks again at the current docs 16:46:08 ``` 16:46:10 erg 16:46:31 We currently say: `C() for files and option values. For example: If not set the environment variable C(ACME_PASSWORD) will be used. This displays with a mono-space font in the documentation.` 16:46:58 ah, okay, so that's meant only for VALUES 16:47:39 fwiw, I believe using the multiline options (like > | ) would get around the : rendering issue without quotes all over the place 16:48:03 dericcrago: it does, but it can blow up documentation (if it fitted into one line before) 16:48:37 OTOH it makes it clearer that a new item is in fact a new paragraph 16:48:57 (since there's more vertical separation between two list items then) 16:51:09 so let's recap: the current documented standard is option #1 I(option=value) https://dmsimard.com/files/docsite/1/collections/ansible/builtin/lineinfile_module.html (in spite of which upstream lineinfile is currently using #2) 16:51:51 yes 16:51:53 I sometimes wonder whether the standard switched in the past, because there are quite some modules which use(d) I and C reversed 16:51:54 is anyone in favor of #1 ? 16:52:21 #chair 16:52:21 Current chairs: abadger1999 acozine bcoca dericcrago dmsimard felixfontein gundalow samccann 16:52:25 I prefer #1 over #5 (if regular options stay with I) 16:53:13 do we need ranked choice voting? 16:53:46 heh 16:53:58 depending what 5 means for regular option names (without a value) 16:54:11 I don't dislike #5 because the options are bold already (like "state" in the Parameter column) 16:54:29 dmsimard: but they are not anywhere else in the documentation 16:54:56 and bold shouldn't be used excessively 16:55:03 I don't disagree 16:56:49 I like #2 because it makes the docs look the way a user's playbook would look 16:57:04 with the exception of s/=/: / 16:57:07 heh 16:57:20 yeah, there's that 16:57:35 If we bold the option names for this, I'd change the guideline of `I(option_name)` to `B(option_name)` for consistency 16:58:01 but we have the `=` => `:` problem no matter what formatting we use, right? 16:58:22 if we want to change all existing documentation, could we please stop using I/C/B for indicating semantics, and introduce new names, like O(...) for option names? 16:58:30 yes, I think so. 16:58:36 yes we should separate that out from the formatting discussion ( = vs : ) 16:58:45 felixfontein++ 16:58:49 felixfontein: 16:58:53 apologies for introducing that sixth option :) 16:58:59 that makes sense 16:59:13 felixfontein: agreed, so if we change our mind later we don't need to reformat everything 16:59:13 yes, if we are going to have to edit most modules for this - we should name them for what they are not what we render. Gives us the option to change rendering later 16:59:26 if we use O(...) for options consistently, we can easily change the look in the future without having to go through all documentation 16:59:28 dmsimard: it was worth a try! 16:59:43 dmsimard: samccann: exactly :) 16:59:51 felixfontein: how would that work in practice ? O(foo=bar) ? 17:00:12 or O(foo)=C(bar) ? 17:00:35 dmsimard: that we can define. `O(foo)` for option named `foo`, and converting `O(foo: bar)` or `O(foo=bar)` to something else can be done by the renderer (i.e. antsibull, ansible-doc, ...) 17:00:39 or even O(foo)=V(bar) <-- v for value 17:00:47 maybe `O(foo)` and `V(bar)`? 17:01:05 yes, something like that ^^ 17:01:10 dmsimard: yeah, if we want them to render differently 17:01:32 sounds good. then we can use C(...) for other stuff that's not a value, and also use I(...) and B(...) for proper formatting :) 17:01:34 still leave I/B/ for those who want italics and bold somewhere. But give the rest real names so to speak 17:01:51 i'm up in the air on C 17:02:05 what does it mean (besides what it renders as)? 17:02:14 I don't see a need to remove I/B/C as a result of doing this, they can stay 17:02:22 it's "render this as monospace code" 17:02:24 C for Code, i think 17:02:41 like I and B, I think that's a more-than-Ansible convention 17:03:03 it's equivalent to markdown ``this is code`` 17:03:27 rst too, in fact 17:03:29 the value of changing to O() and V() is we are naming things as they are. In the future, we can choose to render them differently w/o changing everything again 17:03:38 that's rst, in markdown it is `...` 17:03:53 ah, I might be mixing up my rst and md :) 17:03:59 yes, if we're changing everything (again) we should build in flexibility for the future 17:04:03 C() is code makes sense. But then how is C() used today? 17:04:42 samccann: it's essentially used for everything, like file names, environment variables, option values, generic code fragments, ... 17:04:42 does anyone object to creating `O()` and `V()` (or just `O()` if we want simplicity)? 17:05:04 -1 for simplicity 17:05:08 heh 17:05:11 :) 17:05:16 either we name them for what they are, or we stick w/ I/B/C 17:05:24 going 1/2 way doesn't solve much. 17:05:37 I'm fine if we want to stick to I/B/C. 17:06:09 I don't mind adding `V` as well 17:06:10 or if we want to call option=value something new/specific 17:06:14 samccann: C() usage: https://codesearch.recordsansible.org/?q=C%5C(&i=nope&files=&repos= 17:06:25 then C can be used for everything that's not an option value, like env variables, filenames, ... 17:06:32 er, my irc client borked the parsing of that link, might need to copy/paste 17:06:33 like 'use V(option:value)' and call it a day 17:07:18 samccann: hmm if you want to say that `option` has value `value`, that's not good 17:07:35 because there's no way to distinguish it from the option value `option:value` 17:09:00 There are drawbacks 17:09:07 if we want to specify both option + value, we should use O() for that 17:09:11 The parser for this stuff is extremely naive 17:09:16 It's just a pattern match 17:09:54 abadger1999: but it won't be worse than the current situation, right? 17:10:13 So right now, if I have "ABC(The ABC Corporation)" in my documentation string, it would get rendered as "AB
The ABC Corporation
" 17:10:23 What's our goal? Is it: "As a docs user, I should be able to tell the difference between option names and option values, and also distinguish both of those from other things like environment values or file names." 17:10:34 Adding more of these will increase the liklihood of conflicts 17:10:52 I thought the original issue was someone found the italics hard to read 17:11:08 I don't know if that's a big enough reason to not add more, but we should be aware of it whenever we add something. 17:11:32 felixfontein originally brought up the topic: https://github.com/ansible/community/issues/521#issuecomment-739263018 17:11:57 the original italics vs. comment was by sdoran 17:12:32 I have opinions. :) 17:12:38 #chair sdoran 17:12:38 Current chairs: abadger1999 acozine bcoca dericcrago dmsimard felixfontein gundalow samccann sdoran 17:12:55 abadger1999: the regex has a \b before the capital letter, so ABC(xxx) won't match 17:13:11 sdoran: if you scroll up a bit you have 5 options and links that I pasted -- have a look and see if there's one that stands out for you ? 17:14:50 ah, maybe I added that during hte big revamp for 2.10 17:15:03 or maybe I complained and someone else added it ;-) 17:15:11 heh 17:15:45 abadger1999: I think you did, but I don't remember that well anymore 17:16:18 How important is distinguishing between option names and option values? 17:16:23 in the docs, I mean 17:16:59 I feel like if we're making it semantic rather than purely formatting, O() vs V() is important. 17:17:00 when not specified together (`option=value` or `option: value`)? I think it is important. 17:17:26 need to step away momentarily, be back in a few 17:18:51 Like what if you have O(irc_nick)=V(abadger1999) when talking to abadger, V(felixfontein) if you need felixfontein, and V(acozine) to make sure acozine gets pinged. 17:19:35 yeah, we do have that in many places in the docs 17:19:36 and distinguishing between the option name O(force) and the option value V(force) can also be critical 17:19:38 I guess that's an example of felixfontein's thought 17:20:01 abadger1999: thanks :) 17:20:16 O(irc_nick=abadger1999) would also be ok IMO, since this can be automatically converted 17:20:23 Would V() be abused for more than option values? And do we care? 17:20:44 I tend to use words/sentence structure to make that clear, rather than formatting 17:21:02 but maybe formatting would be better 17:21:02 like, C(ANSIBLE_LIBRARY_PATH)=V(/usr/share/ansible/modules) 17:21:09 acozine: not everyone is that good at wording ;) 17:21:41 semantic labelling is common in techdocs for these very reasons 17:22:09 yeah, that makes sense 17:22:24 but then we have what is used in module docs vs what is used in rst docs 17:22:39 aka rst afaik doesn't have semantic labels either 17:22:57 it does for some things, I think 17:23:02 sphinx does have semantic labels 17:23:13 The sphinx way would be to use a domain/role 17:23:21 and we have some 70+ repositories now for all this info. This seems a big task 17:23:43 so my question is - is the effort worth the outcome? 17:23:45 like :py:class:`AnsibleModule` 17:24:17 samccann: if we use new names (O, V), at least progress is measurable :) 17:24:55 sdoran: you started us down this path, what do you think? 17:24:58 My main thought is that text formatting is meant to convey meaning. Italic and bold are meant to call attention to the reader for emphasis. Inline code formatting should be used to indicate values that will be used in YAML or on the command line. 17:25:04 I'm back 17:25:22 samccann: not just 70+ repositories, I guess we'd also need to go through maintained stable branches 17:25:35 I don't think it's particularly useful to distinguish between option and value in _formatting_, because they both get used in code or as a CLI arg. 17:27:16 And to be clearer, this only only for formatting within the Comments section or other prose where k=v, or k, or v is referenced. 17:27:16 So you'd be more inclined towards something like, "Change almost everything from C(), I(), and B() into C()' where almost everything is "things used verbatim in playbooks or on the CLI" 17:27:26 Ye 17:27:29 Yes. 17:27:40 To me, that's what the formatting is meant to convey. 17:28:08 so we could drop I and B, and convert every use of it to C in the pipeline rendering? 17:28:19 (as in not go back and fix it all?) 17:28:24 sdoran: so that'd be example #2 C(option=value) https://dmsimard.com/files/docsite/2/collections/ansible/builtin/lineinfile_module.html 17:29:09 I and B are useful for emphasis in other contexts. 17:29:41 dmsimard: Yes. Though I think `lsattr` and `chattr` should also be inline code rather than italic on that page as well. 17:30:58 Some things could be done at render time (ie: both O(option_name) and V(value) could be rendered inside of
, like C() is currently)   but  O(option_name)=V(value) would look a little funny if we did that at render time rather than in the docs themselves.
17:31:49  C(option=value) is easier for the writer to remember to do than having multiple pieces of markup.
17:32:34  I think that (O()=V()) would look funny. Probably not work the extra effort to distinguish the formatting.
17:32:57  s/work/worth
17:33:02  samccann: The O() & V() vs all C()   line would also apply to rendering I() and B() the same way as C() I think.
17:33:39  samccann: but that's probably a case where over half of the usage will look ifne and we just want to convert the other 30% or so when a user reports that the formatting is off.
17:34:48  samccann: Although..... I'm not sure if we should do that?  It means no one can get italics or bold to render in the docs until (if ever) we change the rendering back.
17:36:17  heh
17:36:18  Swtiching everything to C() does go against the trend in documentation to forgo explicit formatting in favor of semantic markup.
17:37:09  But I don't know enough about documentation theory to argue for or against in this case.
17:37:24  yep. just depends how far down the semantic path we want to go and will contributors unerstand it if we still have I and B
17:38:29  Can we figure out how many lines would need changing if we go to `C()` for all YAML-and/or-command-line-text and preserve the ability to make other text italic or bold?
17:39:29  If we create full-on semantic markup, we  would have to change everything
17:39:40  I don't like switching everything to C()
17:40:01  felixfontein: because of option names /values?
17:40:22  s/because of/ONLY because of
17:42:45  acozine: first that, and second I really like semantic markup
17:43:23  okay, can we create a proposal, with some idea of how much work it would be to move to full semantic markup?
17:43:50  It can also be "Old way, deprecated, new way, preferred"
17:44:04  yeah, we can implement over time
17:45:30  next steps?
17:45:36  we're at 1 hour 45
17:45:46  and I need a lunch break ;-)
17:46:58  So proposal should be easy.  Estimating work will be harder.
17:47:41  I could probably give statistics on how many `I()`, `C()` and `B()` entries there are i nthe ansible docs build
17:47:45  Does that sound good?
17:47:52  abadger1999: that sounds great
17:47:55  I'll take the action item if so.
17:48:18  #action abadger1999 to figure out how many formatted entries we have in the ansible docs build
17:48:24  Cool
17:49:25  I like semantic markup, it's clear and useful. However, it can be high-maintenance.
17:49:26  the advantage is that every collection that migrated to the new names can use I/C/B for other purposes without feeling guilty :)
17:49:40  true
17:49:51  all right, quick open floor
17:50:03  before I start eating my desk ;-)
17:50:10  #topic open floor
17:50:30  maybe we should have some kind of escape mechanism for V() and O(), to allow using brakets inside
17:50:34  all questions, comments, suggestions, problems, ideas, pull requests, issues welcome
17:50:38  adding that to C() is essentially impossible without breaking things
17:52:08  felixfontein: brackets? `{`? or colons? `:`?
17:52:33  if we could escape the `:` within `V()` that would be a big incentive to adopt it
17:53:30  acozine: why escape `:` in `V()`?
17:53:39  
17:53:58  so we could convert all the `var=val` to `var: val`
17:54:43  acozine: why not use O() for everything that involves option names? and V() just for values?
17:55:01  that would avoid a lot of complication, like when you actually want to use a `=` or `:` inside a value
17:55:08  (which can happen)
17:55:36  just think of docker_container's `volumes` option, where you specify `/path:/other/path:options` values.
17:55:57  heh, another reason to escape those pesky `:`s
17:56:23  I don't think we can escape :
17:56:28  sigh
17:56:44  because the order of parsing is python parsing, then yaml parsing, then the docs build parsing.
17:56:57  : is special to the yaml parsing.
17:57:07  So you have to use yaml escape methods to deal with it.
17:57:15  hmm, I think we are talking about different things here
17:57:23  heh, okay, quotation marks it is, or we stick with `=`
17:57:32  with escaping, I mean that I can write `a(b)` as a value.
17:57:44  right now, I cannot do that, since `)` is taken as the end of `C(`
17:57:52   Yeah.  that we can do
17:58:01  ':' is only a problem during the yaml parsing if it is followed by a space
17:58:04  so `C(a(b))` will end up as `a(b` formatted as code, and `)` formatted regularly
17:58:24  yeah, I've seen that in the docs, I thin
17:58:27  think
17:58:38  sorry, I have to end the meeting
17:58:56  we'll come back to this topic
17:59:02  either next week or in January
17:59:11  thanks abadger1999 bcoca dericcrago dmsimard felixfontein gundalow samccann sdoran
17:59:12  +1
17:59:17  thanks everyone as well!
17:59:22  #endmeeting