Skip to content

Commit 9a5cf7c

Browse files
committed
Initial version of Britnev, a program to generate icebreaker forms and labels for events, based on both a fixed set of questions, and questions based on participant demographics.
1 parent a3c90e4 commit 9a5cf7c

9 files changed

+1214
-1
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
src/__pycache__

README.md

+132-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,133 @@
11
# britnev
2-
Meeting/Conference Icebreaker program. Generates forms and matching labels for event participants.
2+
3+
Britnev, a meeting/conference Icebreaker program for generating icebreaker questionnaires for event participants. Questions can be a mix of ones driven by participant characteristics and ones that aren't. Generates forms and matching labels for event participants.
4+
5+
Reads a config file to determine which questions to generate. Both types of questions are also defined there.
6+
7+
Participant information is read in from a TSV spreadsheet of participants.
8+
9+
This produces
10+
11+
1. a list of pages that can be printed and then distributed to
12+
event participants. Each page contains a different mix of questions on it.
13+
How often a particular question appears on different questionnaires is a
14+
function of the participant data, and the question definitions in the
15+
config file.
16+
You can open this in a web browser and then save it to a PDF.
17+
1. A spreadsheet of participant data that can be fed into a mail merge that
18+
produces a column of mailing labels for each participant. This more or
19+
less assumes that the number of labels for each participant is equal to
20+
the number of rows on the printed label sheet.
21+
This should be imported into a spreadsheet program like Excel, and then
22+
used as a data source for a mail merge program such as Word.
23+
24+
The config file is JSON. See `config/britnev-config-example.json` for an example file.
25+
26+
## CONFIG FILE
27+
28+
Example:
29+
30+
```
31+
{
32+
"min_2b_tractable": 0.05,
33+
"max_2b_interesting": 0.30,
34+
"num_questions": 20,
35+
"label_columns": 4,
36+
"label_rows": 15,
37+
"labels_per_person": 15,
38+
"labels_fields": [
39+
"Last Name",
40+
"First Name",
41+
"Company",
42+
"Work City",
43+
"Work State",
44+
"Work Country"
45+
],
46+
"questions": {
47+
{
48+
"question": "Who has attended at least 3 previous GCCs",
49+
"penetrance": 0.05,
50+
"difficulty": 1.0
51+
},
52+
{
53+
"question": "Who is here representing a different GCCBOSC sponsor",
54+
"penetrance": 1.0,
55+
"difficulty": 0.05
56+
},
57+
},
58+
"data_questions": {
59+
{
60+
"input_item": "Country",
61+
"input_arity": "Singleton"
62+
"output_question": "Someone from"
63+
},
64+
{
65+
"input_item": "Affiliations",
66+
"input_arity": "list",
67+
"output_question": "Someone affiliated with"
68+
},
69+
}
70+
```
71+
72+
Explanation:
73+
74+
* Used with data-based questions.
75+
* `min_2b_tractable`:
76+
The minimum percentage of participants who need to have a particular value to ask that question. For example if this is 0.05 and only 4% of your participants are from Germany, then it will **not** ask to find someone from Germany.
77+
78+
* `max_2b_interesting`:
79+
The maximum percentage of participants who can have a particular value to ask that question. For example, if this is 0.30 and 40% of attendees are from the US, then it will **not** ask to find someone from the US.
80+
81+
* `label_columns`:
82+
How many columns will there be in each generated sheet of labels.
83+
84+
* `label_rows`:
85+
How many rows of labels are on each sheet?
86+
87+
* `labels_per_person`:
88+
How many labels to print per person. This should probably always equal `label_columns or label_rows`.
89+
90+
* `labels_fields`:
91+
List of columns from the participants spreadsheet that will be placed in the output labels spreadsheet. The values of these fields will eventually be printed on the generated labels
92+
93+
* `questions`:
94+
The list of questions that are not driven by participant data. Each question has these fields:
95+
* `question`:
96+
Full text of the question to ask.
97+
* `penetrance`:
98+
Floating point number between 0.00 and 1.00 that tells the program how often it should try to get the question in a questionnaire. There are two special values
99+
100+
* 0.00: Do not include this question on any questionnaires.
101+
* 1.00: Include this question on every questionnaire.
102+
* `difficulty`:
103+
Floating point number between 0.05 and 1.00 that gives the program an estimate of how hard this question is to answer. Difficulty is determined by two things:
104+
1. How hard is it to find out which other participants meet this criteria. For example, it's easy to find who is presenting a poster.
105+
2. How hard is to then find someone who meets the criteria. For example, if there are only 4 poster presenters then it would be hard to get to them before everyone else does.
106+
107+
* `data_questions`:
108+
This list of questions that are driven by participant data. Each question has these fields
109+
* `input_item`:
110+
Name of the column in the input spreadsheet that this question is based on.
111+
* `input_arity`:
112+
Is the value of the column a single value, or a list of values?
113+
Options are `Singleton` or `List`
114+
* `output_question`:
115+
The leading text of the question that will be generated from this input item. For example
116+
`Someone from`
117+
would become
118+
`Someone from Germany`
119+
120+
Penetrance and Difficulty are calculated for data questions, based on the actual data. Item values that are rare have low penetrance and high difficulty.
121+
122+
# Customizing for your event
123+
124+
## Customizing your Config File
125+
126+
You can use this with any CSV file that has column headings. All knowledge of the columns in the CSV is described in the config file. To run this, you will have to customize a config file for your inputs. You also describe your questions and data driven questions in the config file.
127+
128+
## Customizing your forms
129+
130+
This program produces an HTML file that can then be saved as a PDF and printed. The HTML contains two pages for each participant, meant to be printed back to back. One page is instructions, and the other has questions.
131+
132+
The content and look and feel of this form is determined by, and is hard-coded in the `htmlforms.py` file. You'll want to update this extensively to reflect the particulars of your event. The default is the text we used for GCCBOSC 2018.
133+

config/britnev-config-example.json

+228
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
{
2+
"min_2b_tractable": 0.033,
3+
"max_2b_interesting": 0.70,
4+
"num_questions": 15,
5+
"label_columns": 4,
6+
"label_rows": 15,
7+
"labels_per_person": 15,
8+
"labels_fields": [
9+
"Last Name",
10+
"First Name",
11+
"Company",
12+
"Work City",
13+
"Work State",
14+
"Work Country"
15+
],
16+
"questions": [
17+
{
18+
"question": "you have never met before, <em>in person or online</em>",
19+
"penetrance": 1.0,
20+
"difficulty": 0.10
21+
},
22+
{
23+
"question": "you have never met before <em>in person</em>",
24+
"penetrance": 1.0,
25+
"difficulty": 0.10
26+
},
27+
{
28+
"question": "is a poster presenter",
29+
"penetrance": 0.50,
30+
"difficulty": 0.05
31+
},
32+
{
33+
"question": "is a lightning talk presenter",
34+
"penetrance": 0.30,
35+
"difficulty": 0.10
36+
},
37+
{
38+
"question": "is a demo presenter",
39+
"penetrance": 0.25,
40+
"difficulty": 0.05
41+
},
42+
{
43+
"question": "has contributed code, doc, translations, <em>or anything</em> to any of the OBF Bio* projects",
44+
"penetrance": 0.25,
45+
"difficulty": 0.95
46+
},
47+
{
48+
"question": "is an accepted (long) talk presenter",
49+
"penetrance": 0.15,
50+
"difficulty": 0.10
51+
},
52+
{
53+
"question": "is a training session instructor",
54+
"penetrance": 0.12,
55+
"difficulty": 0.20
56+
},
57+
{
58+
"question": "is a BoF organizer",
59+
"penetrance": 0.10,
60+
"difficulty": 0.20
61+
},
62+
{
63+
"question": "has attended an OBF CodeFest before",
64+
"penetrance": 0.10,
65+
"difficulty": 0.6
66+
},
67+
{
68+
"question": "has attended a Galaxy-related hackathan/contribution fest before ",
69+
"penetrance": 0.10,
70+
"difficulty": 0.6
71+
},
72+
{
73+
"question": "this is the first BOSC or GCC they have attended",
74+
"penetrance": 0.10,
75+
"difficulty": 0.8
76+
},
77+
{
78+
"question": "has updated the OBF wiki",
79+
"penetrance": 0.10,
80+
"difficulty": 0.60
81+
},
82+
{
83+
"question": "has contributed code to any project in github.com/galaxyproject",
84+
"penetrance": 0.1,
85+
"difficulty": 0.9
86+
},
87+
{
88+
"question": "has submitted doc to the GalaxyProject.org hub, or the wiki that preceded it",
89+
"penetrance": 0.1,
90+
"difficulty": 0.9
91+
},
92+
{
93+
"question": "has attended at least 3 previous GCCs",
94+
"penetrance": 0.05,
95+
"difficulty": 0.95
96+
},
97+
{
98+
"question": "has attended at least 4 previous BOSCs",
99+
"penetrance": 0.05,
100+
"difficulty": 0.95
101+
},
102+
{
103+
"question": "is a member of the Scientific Program Committees for BOSC or GCC 2018",
104+
"penetrance": 0.05,
105+
"difficulty": 0.30
106+
},
107+
{
108+
"question": "is on the GCCBOSC organizing committee",
109+
"penetrance": 0.05,
110+
"difficulty": 0.20
111+
},
112+
{
113+
"question": "has contributed at least one tool to the Galaxy Tool Shed",
114+
"penetrance": 0.05,
115+
"difficulty": 0.95
116+
},
117+
118+
119+
{
120+
"question": "is representing a GCCBOSC sponsor",
121+
"penetrance": 1.0,
122+
"difficulty": 0.05
123+
},
124+
{
125+
"question": "is on the Platinum Sponsor X team",
126+
"penetrance": 1.0,
127+
"difficulty": 0.5
128+
},
129+
{
130+
"question": "is with Sponsor Y",
131+
"penetrance": 0.5,
132+
"difficulty": 0.05
133+
},
134+
{
135+
"question": "is with Sponsor Z",
136+
"penetrance": 0.25,
137+
"difficulty": 0.5
138+
},
139+
{
140+
"question": "is or has worked at or attended University Sponsor A",
141+
"penetrance": 0.25,
142+
"difficulty": 0.85
143+
},
144+
{
145+
"question": "has published in <em>Sponsor Journal B</em>",
146+
"penetrance": 0.25,
147+
"difficulty": 0.75
148+
},
149+
{
150+
"question": "has published a paper in <em>Sponsor Journal C</em>",
151+
"penetrance": 0.125,
152+
"difficulty": 0.75
153+
},
154+
{
155+
"question": "has published slides or a poster in the online repository at <em>Sponsor E</em>",
156+
"penetrance": 0.125,
157+
"difficulty": 0.5
158+
},
159+
{
160+
"question": "has published in <em>Journal Sponsor D</em>",
161+
"penetrance": 0.25,
162+
"difficulty": 0.75
163+
},
164+
{
165+
"question": "has published an article in <em>Journal Sponsor F</em>",
166+
"penetrance": 0.125,
167+
"difficulty": 0.75
168+
}
169+
170+
],
171+
"data_questions": [
172+
{
173+
"input_item": "Work City",
174+
"input_arity": "Singleton",
175+
"output_question": "from the city/area of"
176+
},
177+
{
178+
"input_item": "Work State",
179+
"input_arity": "Singleton",
180+
"output_question": "from the state/province of"
181+
},
182+
{
183+
"input_item": "Work Country",
184+
"input_arity": "Singleton",
185+
"output_question": "from"
186+
},
187+
{
188+
"input_item": "Company",
189+
"input_arity": "Singleton",
190+
"output_question": "affiliated with"
191+
},
192+
{
193+
"input_item": "CollaborationFest: Core, Fri-Sat, June 29-30",
194+
"input_arity": "Singleton",
195+
"output_question": "registered for"
196+
},
197+
{
198+
"input_item": "Continent",
199+
"input_arity": "Singleton",
200+
"output_question": "from"
201+
},
202+
{
203+
"input_item": "Industry",
204+
"input_arity": "Singleton",
205+
"output_question": "works in"
206+
},
207+
{
208+
"input_item": "University",
209+
"input_arity": "Singleton",
210+
"output_question": "is affiliated with a"
211+
},
212+
{
213+
"input_item": "Hospital / Medical school",
214+
"input_arity": "Singleton",
215+
"output_question": "is affiliated with a"
216+
},
217+
{
218+
"input_item": "Hospital / Medical school",
219+
"input_arity": "Singleton",
220+
"output_question": "works at a"
221+
},
222+
{
223+
"input_item": "Training",
224+
"input_arity": "List",
225+
"output_question": "<strong>registered</strong> for the training:"
226+
}
227+
]
228+
}

0 commit comments

Comments
 (0)