File: WriteTutorials.rst

package info (click to toggle)
seqan2 2.5.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 228,748 kB
  • sloc: cpp: 257,602; ansic: 91,967; python: 8,326; sh: 1,056; xml: 570; makefile: 229; awk: 51; javascript: 21
file content (405 lines) | stat: -rw-r--r-- 13,005 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
.. sidebar:: ToC

    .. contents::

.. _infra-manage-write-tutorials:

Writing Tutorials
=================


At the bottom, you can find a `Tutorial Template`_ for starting a new tutorial.

Conventions
-----------

Wiki Conventions
----------------

* Use only one line per sentence. This increases the readability of the sources.

Naming Conventions
------------------

* Use `headline capitalization <https://www.newsletterfillers.com/archives/grammar/capitalization_headline.htm>`_ for headlines.
* Use the tutorial's title as the file name (e.g. ``/wiki/Tutorial/NameOfYourTutorial.rst``).
* Assignments are numbered in the order they appear in a tutorial (e.g. ``Assignment 5``).
  Do not use a section relative numbering but an absolute one.
  If, e.g., the last assignment of section 1 was assignment 3, the first assignment of section 2 is assignment 4).
* Place the assignment's solutions inline.

Design & Layout Conventions
---------------------------

* Use back ticks (``````) to denote names of variables, functions, etc. (e.g. ````append```` results in ``append``).
* Use bold font (``**word**``) to denote key concepts.
* Use ``item`` and ``menu > sub menu > item`` to denote GUI entries and menu paths.
* Use the following markup to include source code
  ::

      .. includefrags:: demos/tutorial/alignment/alignment_msa.cpp
         :fragment: init

  where ``demos/tutorial/tutorial/alignment/alignment_msa.cpp`` gives the source code file in the repository and ``init`` the fragment to include in the tutorial.
* You should always build and test the tutorials code snippets before using them.

  .. code-block:: console

     manual # make html

* Use the following markup to format screen output:
  ::

      ::

          # Hello World!

* Use the following markup to inform about **important bugs** or other relevant issues.
  The content (and thereby the box itself) is always of **temporary** nature and should **only be used thriftily**.:

  ::

      .. warning::

         Warning goes here.

* Use the following markup to give **important information**.

  These boxes contain information that **should be kept in mind** since the described phenomenon is very likely to be encountered by the reader again and again when working with SeqAn.
  In contrast to the ``.. warning::``, this box type is of **permanent** nature and the given information are valid for a long time.

  ::

      .. important::

         Important information goes here...


  Use the following markup to give further / **optional information**.
  These are information that support the understanding but are too distinct to be put in a normal paragraph.:

  ::

      .. hint::

         Optional information goes here.

* Use the following markup to format assignments (for further details see `Assignments`_):

  ::

       .. container:: assignment

          The assignment goes here.

* Use ``:dox:`DocItem``` to create links to the SeqAn API dox documentation.

  .. important::

     Note that this will mereley generate the URLs that **dddoc** would create but does not perform any checking.
     Some examples:

     * :dox:`String`
       (``:dox:`String```)
     * :dox:`AllocString`
       (``:dox:`AllocString```)
     * :dox:`AllocString Alloc String`
       (``:dox:`AllocString Alloc String```)
     * :dox:`StringConcept`
       (``:dox:`StringConcept```)

Structure
---------

Meta Information
----------------

Place the directives for the side bar and the link target for the tutorial page directly before the tutorial title.

::

    .. sidebar:: ToC

       .. contents::


    .. _tutorial-datastructures-sequences:

    Sequences
    ---------


Based on the `Tutorial Template`_, provide information regarding:

learning objective
  Describe the learning objective in your own words.

difficulty
  Valid values: Very basic, Basic, Average, Advanced, Very advanced

duration
  In average how much time will a user spend on absolving this tutorial?
  If you expect more than 90 minutes please split your tutorial up into multiple ones.

prerequisites
  A list of absolved tutorials and other requirements you expect your reader to fulfill.

Introduction
------------

In the next paragraph introductory information are given that answer the following questions:

* What is this tutorial about?
* Why are the information important?
* What are the communicated information used for?
* What can the reader expect to know after having absolved the tutorial?

Section
-------

Introduction
^^^^^^^^^^^^

In each section's introduction part you answer the following questions:

* What is this section about?
* What are the central concepts in this section?
* What is your partial learning objective?

Explanations / Examples
^^^^^^^^^^^^^^^^^^^^^^^

The main part consists of the description of the topic.
This is the space where enough knowledge is transmitted to **enable the reader to solve all assignments**.
Further details are contained in the `Tutorial Template`_ and in the didactics section.

Try not to get lost in details.
If you have useful but still optional information to give use a ``.. note::`` directive.

Assignments
^^^^^^^^^^^

The assignments' purpose in general is to support the reader's understanding of the topic in question.
For this each assignment is of a special type (Review, Application and Transfer), has an objective, hints and a link to the complete solution.

Depending on the type of assignment the reader is guided through the assignment solving by providing him with partial solutions.

There must always be an assignments of type Review.
Assignments must always appear in an ascending order concerning their types and no "type gap" must occur.

Thus the only valid orders are:

* Review
* Review, application
* Review, application, transfer

The order Review, transfer is invalid since a "type gap" (application type missing) occurred.

All assignments must be accompanied by a solution.

Further Section
^^^^^^^^^^^^^^^

as many further sections as you like

Didactics
---------

Type
^^^^

As already mentioned in the assignment structure description each assignment is of one type.

These levels are

Review
  knowledge fortification (mainly through repetition, optionally with slight variations)

Application
  supervised problem solving (finely grained step-by-step assignment with at least one hint and the interim solution per step)

Transfer
  knowledge transfer (problem solving in a related problem domain / class)

Based on the chosen level you should design your assignment.

Duration
^^^^^^^^

The time needed to absolve a tutorial must not exceed 90 minutes.
Split your tutorial up (e.g. Tutorial I, Tutorial II) if you want to provide more information.


Language
^^^^^^^^

Make use of a simple language.
This is neither about academic decadence nor about increasing the learning barrier.
You are not forced to over-simplify your subject but still try to use a language that is also appropriate for those who don't fully meet the tutorials prerequisites.

Mental Model
^^^^^^^^^^^^

When your describe and explain your topic give as many examples as possible.
Try to adopt the reader's perspective and imagine - based on your target group and prerequisites - your reader's mental model.
The mental model can be described as an imagination of the interaction of central concepts.
Try to support the reader in developing a mental model that fits best to your topic.

Integration
-----------

* Add a link to your tutorial to ``Tutorial.rst`` and add a link to the ``.. toctree``.
* Above you stated the tutorials your tutorial has as prerequisites.
  Add the link in a way that all required tutorials are listed above your tutorial.

Tutorial Template
-----------------

::

    .. sidebar:: ToC

       .. contents::


    .. _tutorial-tutorial-template:

    Tutorial Template
    =================

    Learning Objective
      Describe the learning objective in your own words.
      **Example:**
      You will be able to write a tutorial that meets our quality standards.

    Difficulty
      [Very basic, Basic, Average, Advanced, Very advanced]
      **Example:**
      Basic

    Duration
      In average how much time will a user spend on absolving this tutorial?
      If you expect more than 90 minutes please **split your tutorial up** into multiple ones.
      **Example:**
      1 h

    Prerequisites
      A list of absolved tutorials and other requirements you expect your reader to fulfill.
      **Example:** :ref:`tutorial-getting-started-first-steps-in-seqan`, :ref:`tutorial-algorithms-pattern-matching`, English language

    This is the place where introductory need to be in given, e.g. "This page constitutes the template for all future SeqAn tutorials".

    Use this and optional further paragraphs to give the following information:

    * What is this tutorial about?
    * Why are the information important?
    * What are the communicated information used for?
    * What can the reader expect to know after having absolved the tutorial?

    .. warning::

       This is a warning message.

       Here you can inform users about important bugs or other relevant issues.

    Section
    -------

    Use this and optional further paragraphs to give the following information:

    * What is this section about?
    * What are the central concepts in this section?
    * What is your partial learning objective?

    When your describe and explain your topic give **as many examples as possible**.
    Try to adopt the reader's perspective and imagine - based on your target group and prerequisites - your **reader's mental model**.
    The mental model can be described as an imagination of the interaction of central concepts.
    Use a **simple language** and try to support the reader in developing a mental model that fits best to your topic.

    .. tip::

       What are tips for?

       An ``.. tip`` ist useful to give information that are **optional** and thus don't need to be read.
       Typical information are **further details** that support the understanding but are too distinct to be put in a normal paragraph.

       In this example you could tell the reader more about didactics and give him some useful links.

    .. important::

       What are important blocks for?

       These boxes contain information that **should be kept in mind** since the described phenomenon is very likely to be encountered by the reader again and again when working with SeqAn.

    Subsection
    ^^^^^^^^^^

    If you give code examples tell the reader what he can see and what is crucial to your snippet.
    Link all classes and other resources to the SeqAn documentation system by using ``:dox:Item` (e.g. :dox:`String`).
    In order to include code snippets use ``.. includefrags:: path``.

    .. includefrags:: demos/tutorial/alignments/alignment_banded.cpp
       :fragment: alignment

    If possible also include the generated output by given code in the console.
    Here is one example:

    .. code-block:: console

       0: ACAG
       1: AGCC
       2: CCAG
       3: GCAG
       4: TCAG

    Now that you gave an overview of important concepts of your topic let the user play with it!
    Formulate **small assignments** to allow the reader to fortify his newly acquainted knowledge.

    Assignment 1
    """"""""""""

    .. container:: assignment

       Type
         [Review, Application, Transfer]

         Note that your readers will be in different phases of learning. For the sake of simplicity we restrict ourselves to the following three levels:

         #. knowledge fortification (mainly through repetition, optionally with slight variations)
         #. supervised problem solving (finely grained step-by-step assignment with at least one hint and the interim solution per step)
         #. knowledge transfer (problem solving in a related problem domain / class)

         **Example:** Application

       Objective
         The objective of the assignment.
         **Example:**
         Output all symbols a given alphabet can have.
         The output should look like this: ...

       Hints
         ...

       Solution
         .. container:: foldable

            Foldable solution with description.

         This part of the assignment is to give partial solutions.
         A partial solution starts with a sentence of what this step is about and gives the lines of code that are needed to implement this step.

         Solution Step 1
           .. container:: foldable
             The given sequence are of alphabet...
             Therefore, you have to...

             .. includefrags:: demos/tutorial/alignments/alignment_banded.cpp
                :fragment: main

         Solution Step 2
           .. container:: foldable
             The given sequence are of alphabet...
             Therefore, you have to...

             .. includefrags:: demos/tutorial/alignments/alignment_banded.cpp
                :fragment: fragment