Browse Source

Merge branch 'master' into fixReadMeLinkList

pull/260/head
LEEDASILVA 5 years ago committed by GitHub
parent
commit
38a5f974a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 29
      docs/bios-configuration.md
  2. 167
      docs/event-management.md
  3. BIN
      docs/img/4.png
  4. BIN
      docs/img/56507169-6505a500-6518-11e9-89bb-04c7fd9b41ca.png
  5. BIN
      docs/img/56507180-6afb8600-6518-11e9-97a5-4dcff8f0a069.png
  6. BIN
      docs/img/56507445-3936ef00-6519-11e9-90c8-d85056e9330b.png
  7. BIN
      docs/img/56517407-cb98bc00-6534-11e9-98d6-a2b1c0193a38.png
  8. BIN
      docs/img/56517421-d0f60680-6534-11e9-86ef-97fb9e59786e.png
  9. BIN
      docs/img/56518936-a1e19400-6538-11e9-81c7-520ffd365cff.png
  10. BIN
      docs/img/6.png
  11. BIN
      docs/img/63525316-64e0da80-c4f5-11e9-9e61-57d5a73da9b1.png
  12. BIN
      docs/img/63525543-c86b0800-c4f5-11e9-8820-60d9ff33994f.png
  13. BIN
      docs/img/63532891-9d87b080-c503-11e9-8ff2-46c7a5b19c12.png
  14. BIN
      docs/img/63533088-02430b00-c504-11e9-9675-bcab7bec825c.png
  15. BIN
      docs/img/63533145-21419d00-c504-11e9-8e80-fb4f53d93b00.png
  16. BIN
      docs/img/63533589-015ea900-c505-11e9-8b77-b45b620cd171.png
  17. BIN
      docs/img/63533613-0facc500-c505-11e9-90e8-94254cef5ce3.png
  18. BIN
      docs/img/63533641-1d624a80-c505-11e9-9cd1-e1d156dd7fc4.png
  19. BIN
      docs/img/7.png
  20. BIN
      docs/img/8.png
  21. BIN
      docs/img/9.png
  22. BIN
      docs/img/add-child-to-parent-object.png
  23. BIN
      docs/img/all-object-page.png
  24. BIN
      docs/img/child-capture.png
  25. BIN
      docs/img/children.png
  26. BIN
      docs/img/document-to-sign-step-example.png
  27. BIN
      docs/img/exam-object-attributes.png
  28. BIN
      docs/img/form-step-example.png
  29. BIN
      docs/img/go-to-objects.png
  30. BIN
      docs/img/object-attributes.png
  31. BIN
      docs/img/object-edit-overview.png
  32. BIN
      docs/img/piscine-object-attributes.png
  33. 0
      docs/img/ubuntu-installation/1.png
  34. 0
      docs/img/ubuntu-installation/2.png
  35. 0
      docs/img/ubuntu-installation/3.png
  36. BIN
      docs/img/ubuntu-installation/4.png
  37. 0
      docs/img/ubuntu-installation/5.png
  38. BIN
      docs/img/ubuntu-installation/6.png
  39. 0
      docs/img/usb-configuration/1.png
  40. 0
      docs/img/usb-configuration/2.png
  41. 0
      docs/img/usb-configuration/3.png
  42. 0
      docs/img/usb-configuration/4.png
  43. 0
      docs/img/usb-configuration/5.png
  44. 0
      docs/img/usb-configuration/6.png
  45. 0
      docs/img/usb-configuration/7.png
  46. 0
      docs/img/usb-configuration/8.png
  47. 0
      docs/img/usb-configuration/9.png
  48. 148
      docs/modular-steps-management.md
  49. 29
      docs/object-attribute-reference.md
  50. 11
      docs/object-attribute-system.md
  51. 49
      docs/object-child-creation.md
  52. 95
      docs/object-creation.md
  53. 30
      docs/object-edit.md
  54. 16
      docs/objects.md
  55. 30
      docs/os-deployment.md
  56. 288
      docs/piscine-go-curriculum.md
  57. 37
      docs/principles.md
  58. 31
      docs/responsibilities.md
  59. 11
      docs/tasks.md
  60. 67
      docs/ubuntu-installation.md
  61. 24
      docs/usb-configuration.md
  62. 1
      scripts/dconfig.txt
  63. 2
      scripts/grub.sh
  64. 60
      scripts/install_client.sh
  65. 48
      scripts/kickstart.sh
  66. 2
      scripts/nodejs.sh
  67. 21
      scripts/preseed.cfg
  68. 7
      scripts/ssh.sh
  69. 2
      scripts/system/etc/gdm3/PostLogin/Default
  70. 4
      scripts/system/etc/gdm3/PostSession/Default
  71. BIN
      scripts/system/usr/share/backgrounds/01/background.png
  72. BIN
      scripts/system/usr/share/backgrounds/01/logo.png
  73. 9
      scripts/ubuntu_tweaks.sh
  74. 6
      subjects/abort.en.md
  75. 6
      subjects/abort.fr.md
  76. 6
      subjects/activebits.en.md
  77. 6
      subjects/activebits.fr.md
  78. 10
      subjects/addprimesum.en.md
  79. 10
      subjects/addprimesum.fr.md
  80. 6
      subjects/advancedsortwordarr.en.md
  81. 6
      subjects/advancedsortwordarr.fr.md
  82. 6
      subjects/any.en.md
  83. 6
      subjects/any.fr.md
  84. 6
      subjects/appendrange.en.md
  85. 6
      subjects/appendrange.fr.md
  86. 6
      subjects/atoi.en.md
  87. 6
      subjects/atoi.fr.md
  88. 6
      subjects/atoibase.en.md
  89. 6
      subjects/atoibase.fr.md
  90. 6
      subjects/basicatoi.en.md
  91. 6
      subjects/basicatoi.fr.md
  92. 6
      subjects/basicatoi2.en.md
  93. 6
      subjects/basicatoi2.fr.md
  94. 6
      subjects/basicjoin.en.md
  95. 6
      subjects/basicjoin.fr.md
  96. 2
      subjects/btreeapplybylevel.en.md
  97. 6
      subjects/btreeapplyinorder.en.md
  98. 6
      subjects/btreeapplyinorder.fr.md
  99. 6
      subjects/btreeapplypostorder.en.md
  100. 6
      subjects/btreeapplypostorder.fr.md
  101. Some files were not shown because too many files changed in this diff diff.show_more

29
docs/bios-configuration.md

@ -0,0 +1,29 @@
# BIOS Configuration
## Steps
<kbd>F10</kbd> (Open Setup)
- _Security_
- _Create BIOS Administrator Password_ → Set password
- _Advanced_
- _Boot Options_
- _USB Storage Boot_ → Disabled
- _Fast Boot_ → Disabled (disturbs network boot)
- _Audio Alerts During Boot_ → Disabled (very noisy)
- _HP Sure Recover_
- _HP Sure Recover_ → Disabled (tries to restore Windows)
- _Secure Boot Configuration_
- _Configure Legacy Support and Secure Boot_ → «Legacy Support Disable and Secure Boot Disable» (**TODO**: use Secure Boot)
<kbd>F10</kbd> → Yes (Save changes & Reboot)
> Enter the code that the BIOS asks to disable the secure boot
## Automation
- Can be automated using Intel vPro/AMT (**TODO**)
- Can be partially automated with a USB programmable keyboard such as :
- [USB Rubber Ducky](https://shop.hak5.org/products/usb-rubber-ducky-deluxe)
- [XK-24 USB Programmable Keypad for Windows or Mac](https://www.amazon.com/gp/product/B003MB780E)
- [Cactus WHID: WiFi HID Injector USB Rubberducky](https://www.tindie.com/products/aprbrother/cactus-whid-wifi-hid-injector-usb-rubberducky/)

167
docs/event-management.md

@ -1,59 +1,66 @@
# Events management
## Usage
> An event is associated to an object when the usage of this object implies:
> * a limited capacity of people
> * a limited time
> Event management require:
> * Edition of the attributes of the object on which the event is based
> * Creation and settings of the event associated to the reference object
An event is associated to an object when the usage of this object implies:
- a limited capacity of people
- a limited time
Event management require:
- Edition of the attributes of the object on which the event is based
- Creation and settings of the event associated to the reference object
> Events are used for: `piscines`, `check-in`, `exams`, `rushes`, `hackatons`, `conferences`.
## Settings for the reference object
> Important indications:
> * Objects that doesn't have required attributes for event creation will not be open to event creation.
Important indications:
> | name | fullfillment |
> | -------------------- | --------- |
> | capacity | **required** |
> | eventDuration | **required** |
> | registrationDuration | **required** |
> | description | optionnal |
> | eventStartDelay | optionnal |
- Objects that doesn't have required attributes for event creation will not be open to event creation.
> * All the attributes filled in the object are used as values by default for event's creation; it can be overloaded for each event related to the reference object.
> * If the reference object has a child or children which are events itself, settings are also required for each event child.
| name | fullfillment |
| -------------------- | ------------ |
| capacity | **required** |
| eventDuration | **required** |
| registrationDuration | **required** |
| description | optionnal |
| eventStartDelay | optionnal |
- All the attributes filled in the object are used as values by default for event's creation; it can be overloaded for each event related to the reference object.
- If the reference object has a child or children which are events itself, settings are also required for each event child.
#### Edit the object attributes:
> in *Object attributes*
<img width="1073" alt="Capture d’écran 2019-08-22 à 11 40 34" src="https://user-images.githubusercontent.com/35296671/63525316-64e0da80-c4f5-11e9-9e61-57d5a73da9b1.png">
> in _Object attributes_
<img width="1073" alt="Capture d’écran 2019-08-22 à 11 40 34" src="img/63525316-64e0da80-c4f5-11e9-9e61-57d5a73da9b1.png">
* Add a new key **capacity** of type `Number` with the maximum number of persons you want for events related to the object by default
* Add a new key **eventDuration** of type `Number` with the duration in minutes you want for events related to the object by default
* Add a new key **registrationDuration** of type `Number` with the duration in minutes you want to allow to people to register to the event by default
* Add a new key **eventStartDelay** of type `Number`, if you want a default delay between the end of registration and the beginning of the event. This duration is expressed in minutes.
* Add a new key **description** of type `String`, if you need to associate some informations to your event (description, location, access, documents to provide, etc.)
- Add a new key **capacity** of type `Number` with the maximum number of persons you want for events related to the object by default
- Add a new key **eventDuration** of type `Number` with the duration in minutes you want for events related to the object by default
- Add a new key **registrationDuration** of type `Number` with the duration in minutes you want to allow to people to register to the event by default
- Add a new key **eventStartDelay** of type `Number`, if you want a default delay between the end of registration and the beginning of the event. This duration is expressed in minutes.
- Add a new key **description** of type `String`, if you need to associate some informations to your event (description, location, access, documents to provide, etc.)
#### Edit the children
> in *Children*
<img width="609" alt="Capture d’écran 2019-08-22 à 15 43 43" src="https://user-images.githubusercontent.com/35296671/63525543-c86b0800-c4f5-11e9-8820-60d9ff33994f.png">
> in _Children_
<img width="609" alt="Capture d’écran 2019-08-22 à 15 43 43" src="img/63525543-c86b0800-c4f5-11e9-8820-60d9ff33994f.png">
* Add a new key **startAfter** of type `Number`, with the default delay you want between the beginning of the event and the beginning of the child event. This duration is expressed in minutes.
- Add a new key **startAfter** of type `Number`, with the default delay you want between the beginning of the event and the beginning of the child event. This duration is expressed in minutes.
##### Example
Here is an example of the `Piscine Go` settings. It presents the settings of the object attributes `Piscine Go`, the settings of one of its child which is an event and the settings of the child object attributes itself.
Here is an example of the `Piscine Go` settings. It presents the settings of the object attributes `Piscine Go`, the settings of one of its child which is an event and the settings of the child object attributes itself.
> NB : this object settings are provided in the admin, in the curses section: 'Piscine Go' and in the exams section 'Exam 01'.
**Piscine Go**
*Object attributes*
_Object attributes_
```json
{
"capacity": 400,
@ -65,10 +72,11 @@ Here is an example of the `Piscine Go` settings. It presents the settings of the
This piscine object attributes look like this:
![piscine object attributes](https://user-images.githubusercontent.com/35296671/63526946-239dfa00-c4f8-11e9-8272-270c578f3fb8.png)
![piscine-object-attributes](img/piscine-object-attributes.png)
_Children_
*Children*
> In the `Piscine Go`, children of type *exam* and *rush* have events itself.
> In the `Piscine Go`, children of type _exam_ and _rush_ have events itself.
> A **startAfter** key has to be defined for each of them, in their parent object `Piscine Go`. For example, the exam-01 gets this key:
@ -80,12 +88,14 @@ This piscine object attributes look like this:
This child attributes look like this:
![piscine children attributes](https://user-images.githubusercontent.com/35296671/63525543-c86b0800-c4f5-11e9-8820-60d9ff33994f.png)
![piscine children attributes](img/63525543-c86b0800-c4f5-11e9-8820-60d9ff33994f.png)
**Exam 01**
> The object `Exam 01`, which is a child of `Piscine Go`, has its own *Object Attributes* filled in the child object.
*Object attributes*
> The object `Exam 01`, which is a child of `Piscine Go`, has its own _Object Attributes_ filled in the child object.
_Object attributes_
```json
{
"eventDuration": 240,
@ -93,85 +103,88 @@ This child attributes look like this:
"eventStartDelay": 60
}
```
> NB: the **capacity** attribute is herited from the parent object `Piscine Go` here.
This exam object attributes look like this:
![exam object attributes](https://user-images.githubusercontent.com/35296671/63527315-c3f41e80-c4f8-11e9-82da-d27c4c367323.png)
![exam-object-attributes](img/exam-object-attributes.png)
## Create the event
### Create a new event for your object
> (in *Admin* > *Manage events* > *Add new event*)
<img width="788" alt="Capture d’écran 2019-08-22 à 11 37 13" src="https://user-images.githubusercontent.com/35296671/63532891-9d87b080-c503-11e9-8ff2-46c7a5b19c12.png">
<img width="789" alt="Capture d’écran 2019-08-22 à 11 37 35" src="https://user-images.githubusercontent.com/35296671/63533088-02430b00-c504-11e9-9675-bcab7bec825c.png">
<img width="787" alt="Capture d’écran 2019-08-22 à 11 38 07" src="https://user-images.githubusercontent.com/35296671/63533145-21419d00-c504-11e9-8e80-fb4f53d93b00.png">
> (in _Admin_ > _Manage events_ > _Add new event_)
<img width="788" alt="Capture d’écran 2019-08-22 à 11 37 13" src="img/63532891-9d87b080-c503-11e9-8ff2-46c7a5b19c12.png">
<img width="789" alt="Capture d’écran 2019-08-22 à 11 37 35" src="img/63533088-02430b00-c504-11e9-9675-bcab7bec825c.png">
<img width="787" alt="Capture d’écran 2019-08-22 à 11 38 07" src="img/63533145-21419d00-c504-11e9-8e80-fb4f53d93b00.png">
* The **reference object** of your event is the object for which you need to create an event: `Check`, `Piscine Go`, etc.
* The **registration starts at** indicates when registration of the event begins.
* The **registration ends at** indicates when registration of the event ends.
* The **event starts at** indicates when the event begins.
- The **reference object** of your event is the object for which you need to create an event: `Check`, `Piscine Go`, etc.
- The **registration starts at** indicates when registration of the event begins.
- The **registration ends at** indicates when registration of the event ends.
- The **event starts at** indicates when the event begins.
> NB:
> * End of registration can't be before its beginning.
> * Start of event can't be before end of registration.
> * Date and Time input is not yet working in firefox but should be added soon by mozilla. In the mean while use chrome for adding events
>
> - End of registration can't be before its beginning.
> - Start of event can't be before end of registration.
> - Date and Time input is not yet working in firefox but should be added soon by mozilla. In the mean while use chrome for adding events
### Settings for you event
> In the event you have created, 3 categories must be checked:
>
> 1. General settings
> 2. Registration's settings
> 3. Event's settings
#### General settings
<img width="785" alt="Capture d’écran 2019-08-22 à 11 39 26" src="https://user-images.githubusercontent.com/35296671/63533589-015ea900-c505-11e9-8b77-b45b620cd171.png">
<img width="785" alt="Capture d’écran 2019-08-22 à 11 39 26" src="img/63533589-015ea900-c505-11e9-8b77-b45b620cd171.png">
General settings of your event can be set after creation of the event. By default, it is the values indicated in the **reference object**.
General settings of your event can be set after creation of the event. By default, it is the values indicated in the **reference object**.
* **Capacity**
* During the regitration, the capacity doesn't apply. When registration ends, we register the amount defined by the **capacity** to the event *(ordered by registration date)*.
* If someone unregister to the event during a registration, it release one place.
* During a registration, users can see if their place is guaranteed or if they are in waiting list.
* If the event has children which are event themselves, they will use by default the capacity of the parent event
- **Capacity**
- During the regitration, the capacity doesn't apply. When registration ends, we register the amount defined by the **capacity** to the event _(ordered by registration date)_.
- If someone unregister to the event during a registration, it release one place.
- During a registration, users can see if their place is guaranteed or if they are in waiting list.
- If the event has children which are event themselves, they will use by default the capacity of the parent event
if no capacity was defined on this child.
* **Description** (facultative)
* It can be used to describe the topic of the event, or to add some practical informations: location, documents to provide, accessibility, etc.
- **Description** (facultative)
- It can be used to describe the topic of the event, or to add some practical informations: location, documents to provide, accessibility, etc.
#### Registration
<img width="761" alt="Capture d’écran 2019-08-22 à 11 39 37" src="https://user-images.githubusercontent.com/35296671/63533613-0facc500-c505-11e9-90e8-94254cef5ce3.png">
<img width="761" alt="Capture d’écran 2019-08-22 à 11 39 37" src="img/63533613-0facc500-c505-11e9-90e8-94254cef5ce3.png">
* End of registration can't be after start of registration.
* Dates can't be updated after it's passed.
* The **registration duration** indicated in the **reference object** is reminded under the inputs to help you fill the informations.
* Same for the **event start delay**.
* The list of users in the registration, pending or accepeted, is accessible by clicking on the link 'N users registered', at the left bottom of this categrory.
- End of registration can't be after start of registration.
- Dates can't be updated after it's passed.
- The **registration duration** indicated in the **reference object** is reminded under the inputs to help you fill the informations.
- Same for the **event start delay**.
- The list of users in the registration, pending or accepeted, is accessible by clicking on the link 'N users registered', at the left bottom of this categrory.
#### Event
<img width="740" alt="Capture d’écran 2019-08-22 à 11 39 49" src="https://user-images.githubusercontent.com/35296671/63533641-1d624a80-c505-11e9-9cd1-e1d156dd7fc4.png">
<img width="740" alt="Capture d’écran 2019-08-22 à 11 39 49" src="img/63533641-1d624a80-c505-11e9-9cd1-e1d156dd7fc4.png">
* End of event can't be after start of event.
* Dates can't be updated after it's passed.
* The **end of event** is calculated by default by adding the **event duration** indicated in the **reference object** to the **start of event** date.
* If the event contains other events, the **end of event** can't be before the end of the last child event.
* The **event duration** indicated in the **reference object** is reminded under the inputs to help you fill the informations.
* If the event contains other events, the **minimum end of event** is indicated under the inputs to help you fill the informations.
* The list of users selected for the event at its creation is accessible by clicking on the link 'N users registered', at the left bottom of this categrory.
- End of event can't be after start of event.
- Dates can't be updated after it's passed.
- The **end of event** is calculated by default by adding the **event duration** indicated in the **reference object** to the **start of event** date.
- If the event contains other events, the **end of event** can't be before the end of the last child event.
- The **event duration** indicated in the **reference object** is reminded under the inputs to help you fill the informations.
- If the event contains other events, the **minimum end of event** is indicated under the inputs to help you fill the informations.
- The list of users selected for the event at its creation is accessible by clicking on the link 'N users registered', at the left bottom of this categrory.
#### Children (facultative)
<img width="1009" alt="Capture d’écran 2019-08-22 à 18 24 49" src="https://user-images.githubusercontent.com/35296671/63535788-29044000-c50a-11e9-835c-f8378558962c.png">
<img width="1009" alt="Capture d’écran 2019-08-22 à 18 24 49" src="img/63535788-29044000-c50a-11e9-835c-f8378558962c.png">
This category appears only if the event has children which are events itself.
* Children settings can't be overloaded.
* Each event child presents:
* Its **Start** and **end** (according to the children settings of the **reference object**)
* Its **capacity**
* Its **groups size**
* Reminder: in `hackatons` or `rushes`, candidates or students registered to the are divided in groups of N persons.
- Children settings can't be overloaded.
- Each event child presents:
- Its **Start** and **end** (according to the children settings of the **reference object**)
- Its **capacity**
- Its **groups size**
- Reminder: in `hackatons` or `rushes`, candidates or students registered to the are divided in groups of N persons.

BIN
docs/img/4.png

diff.bin_not_shown

Before

Width:  |  Height:  |  Size: 18 KiB

BIN
docs/img/56507169-6505a500-6518-11e9-89bb-04c7fd9b41ca.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 147 KiB

BIN
docs/img/56507180-6afb8600-6518-11e9-97a5-4dcff8f0a069.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/img/56507445-3936ef00-6519-11e9-90c8-d85056e9330b.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 146 KiB

BIN
docs/img/56517407-cb98bc00-6534-11e9-98d6-a2b1c0193a38.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 185 KiB

BIN
docs/img/56517421-d0f60680-6534-11e9-86ef-97fb9e59786e.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 189 KiB

BIN
docs/img/56518936-a1e19400-6538-11e9-81c7-520ffd365cff.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 117 KiB

BIN
docs/img/6.png

diff.bin_not_shown

Before

Width:  |  Height:  |  Size: 13 KiB

BIN
docs/img/63525316-64e0da80-c4f5-11e9-9e61-57d5a73da9b1.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 212 KiB

BIN
docs/img/63525543-c86b0800-c4f5-11e9-8820-60d9ff33994f.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 85 KiB

BIN
docs/img/63532891-9d87b080-c503-11e9-8ff2-46c7a5b19c12.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 145 KiB

BIN
docs/img/63533088-02430b00-c504-11e9-9675-bcab7bec825c.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 88 KiB

BIN
docs/img/63533145-21419d00-c504-11e9-8e80-fb4f53d93b00.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 25 KiB

BIN
docs/img/63533589-015ea900-c505-11e9-8b77-b45b620cd171.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 120 KiB

BIN
docs/img/63533613-0facc500-c505-11e9-90e8-94254cef5ce3.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 85 KiB

BIN
docs/img/63533641-1d624a80-c505-11e9-9cd1-e1d156dd7fc4.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 70 KiB

BIN
docs/img/7.png

diff.bin_not_shown

Before

Width:  |  Height:  |  Size: 22 KiB

BIN
docs/img/8.png

diff.bin_not_shown

Before

Width:  |  Height:  |  Size: 25 KiB

BIN
docs/img/9.png

diff.bin_not_shown

Before

Width:  |  Height:  |  Size: 7.5 KiB

BIN
docs/img/add-child-to-parent-object.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 136 KiB

BIN
docs/img/all-object-page.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 126 KiB

BIN
docs/img/child-capture.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 86 KiB

BIN
docs/img/children.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 53 KiB

BIN
docs/img/document-to-sign-step-example.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 100 KiB

BIN
docs/img/exam-object-attributes.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 135 KiB

BIN
docs/img/form-step-example.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 17 KiB

BIN
docs/img/go-to-objects.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 88 KiB

BIN
docs/img/object-attributes.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 49 KiB

BIN
docs/img/object-edit-overview.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 139 KiB

BIN
docs/img/piscine-object-attributes.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 135 KiB

0
docs/img/1.png → docs/img/ubuntu-installation/1.png

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

0
docs/img/2.png → docs/img/ubuntu-installation/2.png

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

0
docs/img/3.png → docs/img/ubuntu-installation/3.png

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

BIN
docs/img/ubuntu-installation/4.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 21 KiB

0
docs/img/5.png → docs/img/ubuntu-installation/5.png

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

BIN
docs/img/ubuntu-installation/6.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 16 KiB

0
docs/img/usb/1.png → docs/img/usb-configuration/1.png

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

0
docs/img/usb/2.png → docs/img/usb-configuration/2.png

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

0
docs/img/usb/3.png → docs/img/usb-configuration/3.png

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

0
docs/img/usb/4.png → docs/img/usb-configuration/4.png

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

0
docs/img/usb/5.png → docs/img/usb-configuration/5.png

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

0
docs/img/usb/6.png → docs/img/usb-configuration/6.png

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

0
docs/img/usb/7.png → docs/img/usb-configuration/7.png

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

0
docs/img/usb/8.png → docs/img/usb-configuration/8.png

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

0
docs/img/usb/9.png → docs/img/usb-configuration/9.png

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

148
docs/modular-steps-management.md

@ -1,77 +1,84 @@
# Sign up & onboarding's Administration section - Modular steps management
## Usage
> After their first authentication in the app, every candidate has to do his **sign up** and his **onboarding**. The steps that compose the **sign up** and the **administration** section of the onboarding are either:
> * Forms (identification, medical information, etc.)
> * Documents to sign (general conditions, charts, regulations, etc.)
>
> All the sections are modular: you can add, update, delete and order them as you wish.
>
> This documentation explains how to manage these steps.
After their first authentication in the app, every candidate has to do his **sign up** and his **onboarding**. The steps that compose the **sign up** and the **administration** section of the onboarding are either:
- Forms (identification, medical information, etc.)
- Documents to sign (general conditions, charts, regulations, etc.)
All the sections are modular: you can add, update, delete and order them as you wish.
This documentation explains how to manage these steps.
## Create your step child object
### Create a new object for your step in the admin
> Information is available for object's creation: [Object creation](https://github.com/01-edu/public/blob/master/doc/object-creation.md)
* This object must have the same type as its future parent object (*signup* or *onboarding*).
> Information is available for object's creation: [Object creation](object-creation.md)
- This object must have the same type as its future parent object (_signup_ or _onboarding_).
> Your step is then available in the *Admin*. You can find it in the section of its type (*SignUp* or *Onboarding*) or thanks to the search bar of the cursus object's page.
> Your step is then available in the _Admin_. You can find it in the section of its type (_SignUp_ or _Onboarding_) or thanks to the search bar of the cursus object's page.
### Add this new object as a child of your parent's object
* Edit the parent object: *Sign up* or *Administration*
- Edit the parent object: _Sign up_ or _Administration_
> Information is available for object's creation: [Child object creation](https://github.com/01-edu/public/blob/master/doc/child-object-creation.md)
> Information is available for object's creation: [Child object creation](object-child-creation.md)
## Settings for a `form` step
> In the step object you have created, 2 attributes must be filled:
> 1. Subtype
> 2. Form
In the step object you have created, 2 attributes must be filled:
1. Subtype
2. Form
### Description
#### Edit the step object you have created :
> in *Object attributes*
<img width="1073" alt="Capture d’écran 2019-04-22 à 15 59 33" src="https://user-images.githubusercontent.com/35296671/56507445-3936ef00-6519-11e9-90c8-d85056e9330b.png">
> in _Object attributes_
<img width="1073" alt="Capture d’écran 2019-04-22 à 15 59 33" src="img/56507445-3936ef00-6519-11e9-90c8-d85056e9330b.png">
* Add a new key **subtype** of type `String` with the exact value 'form-step'
* Add a new key **form** of type `Object`
* Form can have several sections. Each section is displayed with a title, and its inputs.
> NB: The submission of the form will check the required inputs of all the sections created for the form.
* To create a section, add a new key to the form object, of type `Object`, that contains:
* A **title** key of type `String`. The value of this property will be the title displayed in the top of the form section.
- Add a new key **subtype** of type `String` with the exact value 'form-step'
- Add a new key **form** of type `Object`
- Form can have several sections. Each section is displayed with a title, and its inputs.
> NB: The submission of the form will check the required inputs of all the sections created for the form.
- To create a section, add a new key to the form object, of type `Object`, that contains:
- A **title** key of type `String`. The value of this property will be the title displayed in the top of the form section.
> If there is only one section in the form step, and no section title is needed, this property can be ignored.
* An **inputs** key of type `Object`, which will contain all the inputs of the section. For each wanted input, add a new `Object` element in the "inputs" object.
> The key of this object will be used as the "name" attribute of your input.
- An **inputs** key of type `Object`, which will contain all the inputs of the section. For each wanted input, add a new `Object` element in the "inputs" object.
> The key of this object will be used as the "name" attribute of your input.
> The values will be considered as the properties of your input.
#### Defining an input:
* A **type** key of type `String` must be declared. It defines the type of the input : `tel`, `text`, `date`, `select`, `radio`, `switch`, `checkbox`, `textarea`, `countries`.
* All other attributes needed for the input can be added to the object, according to the input type: `placeholder`, `id`, `required`, `label`, `items`, `emptyItems`, `index`, etc...
#### Important indication:
* The **index** property is used to order the inputs. It will not be passed onto the input. Be mindful not to set the same index twice.
* The **type** property is required. It will be used to determine the kind of input should be generated. It is passed onto the input only if the input type attribute is required (type 'tel' or 'text' for example, but not for type 'select' - in this case, we will generate a select element)
* A special type 'countries' has been added to the classicals. It generate a `Select` (containing all the countries) with a search bar. 'Items' property is handled by the app.
* It's recommended to add 'min' and 'max' properties to input type 'date' (no default value are set).
* `onChange` prop are ignored as the event is handled by the app.
* For `switch` and `checkbox` input types, the default value has to be set as a boolean property named **value**.
* More information for each inputs is available in the design documentation:
* [textInput documentation](https://alem.01-edu.org/design/Components/FormInputs/TextInput) - used for inputs type 'text', 'tel', and 'date'
* [textArea documentation](https://alem.01-edu.org/design/Components/FormInputs/TextArea)
* [select documentation](https://alem.01-edu.org/design/Components/FormControls/Select)
* [radio button documentation](https://alem.01-edu.org/design/Components/FormControls/Radio)
* [switch documentation](https://alem.01-edu.org/design/Components/FormControls/Switch)
* [checkbox documentation](https://alem.01-edu.org/design/Components/FormControls/Checkbox)
- A **type** key of type `String` must be declared. It defines the type of the input : `tel`, `text`, `date`, `select`, `radio`, `switch`, `checkbox`, `textarea`, `countries`.
- All other attributes needed for the input can be added to the object, according to the input type: `placeholder`, `id`, `required`, `label`, `items`, `emptyItems`, `index`, etc...
#### Important indication:
- The **index** property is used to order the inputs. It will not be passed onto the input. Be mindful not to set the same index twice.
- The **type** property is required. It will be used to determine the kind of input should be generated. It is passed onto the input only if the input type attribute is required (type 'tel' or 'text' for example, but not for type 'select' - in this case, we will generate a select element)
- A special type 'countries' has been added to the classicals. It generate a `Select` (containing all the countries) with a search bar. 'Items' property is handled by the app.
- It's recommended to add 'min' and 'max' properties to input type 'date' (no default value are set).
- `onChange` prop are ignored as the event is handled by the app.
- For `switch` and `checkbox` input types, the default value has to be set as a boolean property named **value**.
- More information for each inputs is available in the design documentation:
- [textInput documentation](https://01.alem.school/design/Components/FormInputs/TextInput) - used for inputs type 'text', 'tel', and 'date'
- [textArea documentation](https://01.alem.school/design/Components/FormInputs/TextArea)
- [select documentation](https://01.alem.school/design/Components/FormControls/Select)
- [radio button documentation](https://01.alem.school/design/Components/FormControls/Radio)
- [switch documentation](https://01.alem.school/design/Components/FormControls/Switch)
- [checkbox documentation](https://01.alem.school/design/Components/FormControls/Checkbox)
### Examples
Here is an example of the form step's attributes. It presents a form with two sections, and an example of each kind of input type.
Here is an example of the form step's attributes. It presents a form with two sections, and an example of each kind of input type.
> NB : this example object is provided in the admin, in the onboarding section: 'Form step example'.
@ -173,14 +180,14 @@ Here is an example of the form step's attributes. It presents a form with two se
This 'form' step would look like this:
![form step example](https://user-images.githubusercontent.com/35296671/56816457-7cf06800-683b-11e9-9003-6f83b4545033.png)
![form-step-example](img/form-step-example.png)
## Settings for a `document to sign` step
The newly created child can be customized with these attributes :
| name | fullfillment |
| ---------- | --------- |
| ---------- | ------------ |
| subtype | **required** |
| text | **required** |
| buttonText | optionnal |
@ -191,21 +198,21 @@ The newly created child can be customized with these attributes :
#### To set up the child object you have created with these elements:
1. Edit you step object
2. Go to *Object attributes*
2. Go to _Object attributes_
3. Add the following attributes:
* Add a new key **subtype** of type `String` with the exact value 'sign-step'
* Add a new key **text** of type `String` with the text of your document to sign as value
* Add a new key **buttonText** of type `String` with the text that you want to display in the submit button of your step. Default value for this attribute is 'Sign'.
* Add a new key **checkbox** of type `Object`, if the user has to be forced to click on a checkbox before validating his document (ex: 'I have read and accepted the conditions'). In the checkbox object, the following attributes should be defined:
* A **label** key of type `String`, for the text associated to the checkbox
* A **required** key of type `Boolean`, set at true if the user has to check it
* A **name** key of type `String`
* All other attributes wanted for the checkbox.
* Add a new key **link** of type `Object`, if a link must be added to the step (ex: download of a .pdf version of the document to sign). In the link object, the following attributes should be defined:
* A **href** key of type `String`, with the link you want to add to the step
* A **label** key of type `String`, for the text displayed for the link (by default, '> Link to the document' is displayed)
* All other attributes wanted for the link.
- Add a new key **subtype** of type `String` with the exact value 'sign-step'
- Add a new key **text** of type `String` with the text of your document to sign as value
- Add a new key **buttonText** of type `String` with the text that you want to display in the submit button of your step. Default value for this attribute is 'Sign'.
- Add a new key **checkbox** of type `Object`, if the user has to be forced to click on a checkbox before validating his document (ex: 'I have read and accepted the conditions'). In the checkbox object, the following attributes should be defined:
- A **label** key of type `String`, for the text associated to the checkbox
- A **required** key of type `Boolean`, set at true if the user has to check it
- A **name** key of type `String`
- All other attributes wanted for the checkbox.
- Add a new key **link** of type `Object`, if a link must be added to the step (ex: download of a .pdf version of the document to sign). In the link object, the following attributes should be defined:
- A **href** key of type `String`, with the link you want to add to the step
- A **label** key of type `String`, for the text displayed for the link (by default, '> Link to the document' is displayed)
- All other attributes wanted for the link.
### Examples
@ -217,22 +224,21 @@ Here is an example of the structure a 'document to sign' step could have:
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ornare non sem eu pretium. Integer porttitor risus eget nibh iaculis, ac lacinia orci dictum. Nunc ullamcorper consequat enim in posuere. Aliquam volutpat est odio, vel maximus arcu maximus sit amet. Donec ultricies faucibus magna id luctus. Duis et dapibus elit. In vestibulum ipsum erat, at commodo tortor convallis vel. Nunc ut ultrices nulla. Etiam lorem justo, consequat a consectetur a, porttitor non turpis. Mauris eu mollis nisl, id dignissim quam. Curabitur condimentum sollicitudin rutrum. Aenean blandit, arcu nec ullamcorper rhoncus, lectus sem lacinia lorem, venenatis dignissim velit mi et sapien. Nullam posuere augue ut magna ullamcorper dignissim. Ut rhoncus sapien vel nulla commodo finibus. Cras non leo vel urna finibus volutpat. Praesent et ex eget diam tincidunt suscipit. Phasellus bibendum neque vel placerat iaculis. Vestibulum bibendum ultrices ipsum, non sodales lectus. Cras eget orci eget elit blandit scelerisque at ut nulla. Integer ligula eros, eleifend quis sodales a, porttitor sit amet neque. Fusce mollis magna at lectus varius, quis suscipit mi cursus. Etiam id imperdiet metus, in malesuada quam. Aliquam facilisis nunc non sapien condimentum, quis iaculis nisl auctor. Nunc lorem sapien, interdum vel efficitur ac, dapibus a diam. Ut ante urna, sodales in bibendum vel, lacinia ut mauris. In vel placerat leo. In libero dui, tincidunt at sem id, faucibus sollicitudin elit.",
"buttonText": "Sign chart",
"checkbox": {
"name":"acceptChart",
"label":"I have read and accepted the Chart 01",
"required":true
"name": "acceptChart",
"label": "I have read and accepted the Chart 01",
"required": true
},
"link": {
"label":"Download Chart 01",
"href":"https://help.github.com/en/articles/creating-an-issue",
"download":true,
"target":"_blank"
"label": "Download Chart 01",
"href": "https://help.github.com/en/articles/creating-an-issue",
"download": true,
"target": "_blank"
}
}
```
NB : ```target``` & ```download``` are forwarded to the a html element as they are valid html properties
NB : `target` & `download` are forwarded to the a html element as they are valid html properties
This 'document to sign' step would look like this:
![document to sign step example](https://user-images.githubusercontent.com/35296671/61788887-29c28d00-ae0b-11e9-872c-71a7d1ddbe09.png)
![document-to-sign-step-example](img/document-to-sign-step-example.png)

29
docs/object-attribute-reference.md

@ -1,20 +1,21 @@
# Object Attribute Reference
## List all **USABLE** preset object attributes
| Attribute | Type | Value | Description |
|-------------------|-----------|-------|-------------|
| `xp` | function | `exerciceExpCalculation`, `examExpCalculation` or `raidExpCalculation` | Amount of exeperience points that an object will give. |
| `correctionPrice` | function | `correctionPrice` | Amount of correction points needed to test an exercise. |
| `duration` | number | | |
| `time` | string | | |
| `info` | object | | |
| Attribute | Type | Value | Description |
| ----------------- | -------- | ---------------------------------------------------------------------- | ------------------------------------------------------- |
| `xp` | function | `exerciceExpCalculation`, `examExpCalculation` or `raidExpCalculation` | Amount of experience points that an object will give. |
| `correctionPrice` | function | `correctionPrice` | Amount of correction points needed to test an exercise. |
| `duration` | number | | |
| `time` | string | | |
| `info` | object | | |
## List all **RESERVED** preset object attributes
| Attribute | Type | Value | Description |
|-------------------|-----------|-------|-------------|
| `scopeStart` | function | | |
| `scopeEnd` | function | | |
| `startDay` | function | | |
| `status` | function | | |
| `week` | function | | |
| Attribute | Type | Value | Description |
| ------------ | -------- | ----- | ----------- |
| `scopeStart` | function | | |
| `scopeEnd` | function | | |
| `startDay` | function | | |
| `status` | function | | |
| `week` | function | | |

11
docs/object-attribute-system.md

@ -23,7 +23,7 @@ Once created, the new attributes appears right bellow and the ability to associa
Any attribute can be delete by clicking on the 'trash' icon on the right hand of it.
Here an example of how the section looks like.
![object-attributes](https://user-images.githubusercontent.com/15313830/56677487-88675600-66b8-11e9-9781-26dc0ee6301d.png)
![object-attributes](img/object-attributes.png)
## Attributes and RelationShips
@ -49,10 +49,10 @@ The following json shows how the object would be represented:
```
Children
![children](https://user-images.githubusercontent.com/15313830/56679319-b189e580-66bc-11e9-8f2a-3d51eb1486d4.png)
![children](img/children.png)
Child
![chilld-capture](https://user-images.githubusercontent.com/15313830/56679320-b189e580-66bc-11e9-90ab-c8f69f531876.png)
![child-capture](img/child-capture.png)
## Detailed example
@ -151,12 +151,15 @@ All done, now when rendering an object, attributes are merged like so:
```
First we apply the **default attributes** from the referenced object.
> Here `duration` and `language` are applied.
Then we apply the **children attributes** to every child.
> In this case we override every `duration` to 4800 and add the new `xp` attribute.
After that we apply the **relation attributes**, that are the most specific and as such,
override all others attributes.
> In this case only the `printalphabet` relation had attributes and so we apply
the given `duration` to the final merged object.
> the given `duration` to the final merged object.

49
docs/object-child-creation.md

@ -1,33 +1,40 @@
# Admin object's management - create a child object
## Usage
> Objects of the Admin can be configured :
> * By setting particular **attributes** to the object
> * By associating **children** to the object
>
> Children can be added, deleted, reordered in the list. Also, it's possible to configure it in a special way for the parent object, by setting children attributes for all the children.
>
> This documentation explains how to associate a child to a parent object.
Objects of the Admin can be configured :
- By setting particular **attributes** to the object
- By associating **children** to the object
Children can be added, deleted, reordered in the list. Also, it's possible to configure it in a special way for the parent object, by setting children attributes for all the children.
This documentation explains how to associate a child to a parent object.
### Create a new object for your child in the admin
> Information is available for object's creation: [Modular step management](https://github.com/01-edu/public/blob/master/doc/object-creation.md)
> Information is available for object's creation: [Object Creation](object-creation.md)
### Add this new object as a child of your parent's object
#### 1. Edit the parent object
<img width="640" alt="Capture d’écran 2019-04-22 à 19 24 23" src="https://user-images.githubusercontent.com/35296671/56517407-cb98bc00-6534-11e9-98d6-a2b1c0193a38.png">
<img width="640" alt="Capture d’écran 2019-04-22 à 19 24 10" src="https://user-images.githubusercontent.com/35296671/56517421-d0f60680-6534-11e9-86ef-97fb9e59786e.png">
#### 2. Go to *Children* > *Add a child*
![add child to parent object](https://user-images.githubusercontent.com/35296671/56506977-de50c800-6517-11e9-9c71-d19a1ec4e5cd.png)
<img width="640" alt="Capture d’écran 2019-04-22 à 19 24 23" src="img/56517407-cb98bc00-6534-11e9-98d6-a2b1c0193a38.png">
<img width="640" alt="Capture d’écran 2019-04-22 à 19 24 10" src="img/56517421-d0f60680-6534-11e9-86ef-97fb9e59786e.png">
#### 2. Go to _Children_ > _Add a child_
![add-child-to-parent-object](img/add-child-to-parent-object.png)
#### 3. Set up the new child:
* Enter its name in the input "Add a child name"
* Select your step object in the select input
* Click on "ADD"
> Your step is then related to its parent. You can see it in the *Children* section of the parent's object. There, you can now:
> * Delete the child from its parent (the actual object of your child will not be deleted).
> * Reorder it in the children's list, by dragging it to the place you want.
> * Update its original settings by clicking on the eye icon of its reference (redirection to object edit page of the child).
<img width="1229" alt="Capture d’écran 2019-04-22 à 19 51 12" src="https://user-images.githubusercontent.com/35296671/56518936-a1e19400-6538-11e9-81c7-520ffd365cff.png">
- Enter its name in the input "Add a child name"
- Select your step object in the select input
- Click on "ADD"
Your step is then related to its parent. You can see it in the _Children_ section of the parent's object. There, you can now:
- Delete the child from its parent (the actual object of your child will not be deleted).
- Reorder it in the children's list, by dragging it to the place you want.
- Update its original settings by clicking on the eye icon of its reference (redirection to object edit page of the child).
<img width="1229" alt="Capture d’écran 2019-04-22 à 19 51 12" src="img/56518936-a1e19400-6538-11e9-81c7-520ffd365cff.png">

95
docs/object-creation.md

@ -1,53 +1,58 @@
# Admin object's management - create an object
## Usage
> Elements of the app are managed through objects in *Admin*.
> Objects of the Admin are first created and defined:
> * By their **title**,
> * By their **type**.
Elements of the app are managed through objects in _Admin_.
> Then it can be configured through:
> * Attributes,
> * Children.
Objects of the Admin are first created and defined:
> This documentation explains how to create an object.
- By their **title**,
- By their **type**.
Then it can be configured through:
- Attributes,
- Children.
> This documentation explains how to create an object.
### Create a new object in the admin
> (in *Admin* > *Add new object*)
<img width="664" alt="Capture d’écran 2019-04-22 à 15 57 37" src="https://user-images.githubusercontent.com/35296671/56507169-6505a500-6518-11e9-89bb-04c7fd9b41ca.png">
<img width="450" alt="Capture d’écran 2019-04-22 à 15 58 21" src="https://user-images.githubusercontent.com/35296671/56507180-6afb8600-6518-11e9-97a5-4dcff8f0a069.png">
* The **title** of your object will be the title displayed to your candidates. Use an intellegible title for your user.
> NB: you can always edit it in the *Admin*
* The **type** depends on the nature of your object:
* **Campus** is used to declare a school.
* Examples: *Alem*, *Madeira*, etc.
* Campus can contains cursus: *Alem* contains for example *01-classical* and *Piscine Go*.
* **Cursus** is used to declare a course.
* Examples: *01-classical*, *Piscine Go*, etc.
* Cursuses can contains cursuses: the main cursus *01-classical*, for example, contains cursuses like *Piscine Go*, but also all the branches that the student have access to, as *Web*, *Security*, *Algorythm*, *Design*, etc.
* Cursuses can contains quests: *Piscine Go* of *01-classical* contains quests like *Quest 1* or *Quest 2*.
* **Quest** is used to declare a project.
* Examples: *Quest 1*, *Quest 2*, etc.
* Quest contains exercises: *Quest 1* of *Piscine Go* contains exercises like *printalphabet* or *printcomb*.
* Exercise is used to declare exercises
* Examples: *printalphabet*, *printcomb*, *atoi*, etc.
* Exercises doesn't contains any children.
* Signup is used to declare steps of the registration.
* Examples: *Using our services*, *Tell us more about you*, etc.
* One major object *Sign up* contains all the sign up's modular steps : *Using our services*, *Tell us more about you*, etc.
* Onbaording is used to declare steps of the onbaording.
* Examples: *Toad*, *Administration*, *Additional Informations*, *Chart 01*, etc.
* Three main objects define the major steps of the onboarding : *Toad*, *Administration*, *Piscine*.
* *Administration* contains modular steps: *Additional Informations*, *Chart 01*, etc.
> The child object is then available in the *Admin*. It can be found in the section of its type or thanks to the search bar of the cursus object's page.
> More information is available:
> * for setting attributes of an object: (soon available)
> * for setting children of an object: [Child object creation](https://github.com/01-edu/public/blob/master/doc/child-object-creation.md)
> * for creation of modular steps in Sign up and onboarding's Administration object: [Modular step management](https://github.com/01-edu/public/blob/master/doc/modular-steps-management.md)
> (in _Admin_ > _Add new object_)
<img width="664" alt="Capture d’écran 2019-04-22 à 15 57 37" src="img/56507169-6505a500-6518-11e9-89bb-04c7fd9b41ca.png">
<img width="450" alt="Capture d’écran 2019-04-22 à 15 58 21" src="img/56507180-6afb8600-6518-11e9-97a5-4dcff8f0a069.png">
- The **title** of your object will be the title displayed to your candidates. Use an intellegible title for your user.
> NB: you can always edit it in the _Admin_
- The **type** depends on the nature of your object:
- **Campus** is used to declare a school.
- Examples: _Alem_, _Madeira_, etc.
- Campus can contains cursus: _Alem_ contains for example _01-classical_ and _Piscine Go_.
- **Cursus** is used to declare a course.
- Examples: _01-classical_, _Piscine Go_, etc.
- Cursuses can contains cursuses: the main cursus _01-classical_, for example, contains cursuses like _Piscine Go_, but also all the branches that the student have access to, as _Web_, _Security_, _Algorythm_, _Design_, etc.
- Cursuses can contains quests: _Piscine Go_ of _01-classical_ contains quests like _Quest 1_ or _Quest 2_.
- **Quest** is used to declare a project.
- Examples: _Quest 1_, _Quest 2_, etc.
- Quest contains exercises: _Quest 1_ of _Piscine Go_ contains exercises like _printalphabet_ or _printcomb_.
- Exercise is used to declare exercises
- Examples: _printalphabet_, _printcomb_, _atoi_, etc.
- Exercises doesn't contains any children.
- Signup is used to declare steps of the registration.
- Examples: _Using our services_, _Tell us more about you_, etc.
- One major object _Sign up_ contains all the sign up's modular steps : _Using our services_, _Tell us more about you_, etc.
- Onbaording is used to declare steps of the onbaording.
- Examples: _Toad_, _Administration_, _Additional Informations_, _Chart 01_, etc.
- Three main objects define the major steps of the onboarding : _Toad_, _Administration_, _Piscine_.
- _Administration_ contains modular steps: _Additional Informations_, _Chart 01_, etc.
The child object is then available in the _Admin_. It can be found in the section of its type or thanks to the search bar of the cursus object's page.
More information is available:
- for setting attributes of an object: (soon available)
- for setting children of an object: [Child object creation](object-child-creation.md)
- for creation of modular steps in Sign up and onboarding's Administration object: [Modular step management](modular-steps-management.md)

30
docs/object-edit.md

@ -4,31 +4,31 @@
## Page Composition
![object-edit-overview](https://user-images.githubusercontent.com/15313830/56667480-ceff8500-66a5-11e9-98c7-792d598f2394.png)
![object-edit-overview](img/object-edit-overview.png)
### Pin 1
- Link back to the "Objects" page ;
- Editable name field, hit 'enter' or 'cmd + s' or click on the floppy-disk icon to save ;
- Major dependencies visualisation, (where my object is used as a child), click the label to navigate to the dependence ;
- External URL, this is an optional parameter, it's use to point at an other source of content or information needed by the object. We generaly use to point at a Git repository ;
- Link back to the "Objects" page ;
- Editable name field, hit 'enter' or 'cmd + s' or click on the floppy-disk icon to save ;
- Major dependencies visualisation, (where my object is used as a child), click the label to navigate to the dependence ;
- External URL, this is an optional parameter, it's use to point at an other source of content or information needed by the object. We generaly use to point at a Git repository ;
### Pin 2
- Delete Button, Warning there, it will destroy your object! ;
- Type of your Object (`organisation`, `campus`, `onboarding`, `cursus`, `quest`, `exercise`), save on select ;
- Status of your Object (`draft`, `online`, `offline`), save on select ;
- The first and last name of the original author ;
- Delete Button, Warning there, it will destroy your object! ;
- Type of your Object (`organisation`, `campus`, `onboarding`, `cursus`, `quest`, `exercise`), save on select ;
- Status of your Object (`draft`, `online`, `offline`), save on select ;
- The first and last name of the original author ;
### Pin 3
- Object Attribute edition area, manage all the attributes relative to this Object. These attributes will be exposed to its relationship ;
- Object Attribute edition area, manage all the attributes relative to this Object. These attributes will be exposed to its relationship ;
### Pin 4
- Object Children edition area ;
- Children Attributes edition area, these attributes impact and overload all the following children. Works the same way as standard attributes ;
- Add a child, allows to add a child to the children list, more information here -> [Object Child creation](https://github.com/01-edu/public/blob/master/doc/object-child-creation.md) ;
- Children List, allows you to reorganise, delete and edit child. Each child can be overload with its own attributes, the edition works the same way as the original attributes ;
- Object Children edition area ;
- Children Attributes edition area, these attributes impact and overload all the following children. Works the same way as standard attributes ;
- Add a child, allows to add a child to the children list, more information here -> [Object Child creation](object-child-creation.md) ;
- Children List, allows you to reorganise, delete and edit child. Each child can be overload with its own attributes, the edition works the same way as the original attributes ;
More informations about attribute overload system [here] ((https://github.com/01-edu/public/blob/master/doc/object-attribute-overload-system.md)
More informations about attribute overload system [here](object-attribute-system.md)

16
docs/objects.md

@ -11,19 +11,19 @@ It structure can be visualized in two parts. The first one is the definition of
This is the minimal structure of an object:
- name
- type (`organisation`, `campus`, `onboarding`, `cursus`, `quest`, `exercise`)
- status (`draft`, `online`, `offline`)
- attrs {}
- childrenAttrs {}
- children {}
- name
- type (`organisation`, `campus`, `onboarding`, `cursus`, `quest`, `exercise`)
- status (`draft`, `online`, `offline`)
- attrs {}
- childrenAttrs {}
- children {}
## Browse Objects:
To access your Objects, go to the admin dashboard and then click on the _manage object_ link within the "Object" card.
![go-to-objects](https://user-images.githubusercontent.com/15313830/56653756-46bdb780-6686-11e9-98ba-18e382987e9c.png)
![go-to-objects](img/go-to-objects.png)
Objects are sorted by type in different sections. This page offer a search bar that allow you query the objects by name. In the top-right corner, click the _add a new object_ button to create a new object. Fill a name, select a type and click _create_ to validate your creation. You will be redirected to the Object Edition page (document is here).
![all-object-page](https://user-images.githubusercontent.com/15313830/56654475-137c2800-6688-11e9-880b-75092397890d.png)
![all-object-page](img/all-object-page.png)

30
docs/os-deployment.md

@ -0,0 +1,30 @@
# OS Deployment
## Image creation steps
- [Installation of Ubuntu](ubuntu-installation.md)
- minimal OS installation (downloads ~200 MB)
- Software installation (downloads ~900 MB)
- Optimization
- improve speed
- reduce image size
- reduce power (CPU) & memory usage
- reduce surface of attack
- reduce bandwidth usage
- Customization
- machine-dependent (drivers, bug workarounds...)
- time zone of the school
- school scripts
- Cleaning
- logs
- temporary files
- histories
- caches
- auto-generated IDs
- Preparation of the disk image
- zero unallocated space of filesystem (~7 GB of data remains)
- (optional) create compressed image with [lz4](https://lz4.github.io/lz4) (the resulting image is ~3.2 GB)
## Network installation
- Boot through PXE [UDPcast](http://udpcast.linux.lu) which allows an efficient transfer of the disk image (using multicast or broadcast)

288
docs/piscine-go-curriculum.md

@ -12,27 +12,27 @@ Notions: basic usage and interaction with a command line terminal.
Videos:
- 1-2 Curl with the GitHub api and Example of Sh file | https://www.youtube.com/watch?v=A0Mqc215igw
- 1-3 Touch , Chmod and Echo | https://www.youtube.com/watch?v=21h-vsuXgDU
- 1-4 find and grep | https://www.youtube.com/watch?v=7a1JSWHhJlM
- 1-5 cut sed and tr | https://www.youtube.com/watch?v=Nil7rVP3eMI
- 1-6 jq and wc | https://www.youtube.com/watch?v=cQmcaOseuiA&
- 1-2 `curl` with the GitHub api and Example of shell file | https://www.youtube.com/watch?v=A0Mqc215igw
- 1-3 `touch`, `chmod` and `echo` | https://www.youtube.com/watch?v=21h-vsuXgDU
- 1-4 `find` and `grep` | https://www.youtube.com/watch?v=7a1JSWHhJlM
- 1-5 `cut`, `sed` and `tr` | https://www.youtube.com/watch?v=Nil7rVP3eMI
- 1-6 `jq` and `wc` | https://www.youtube.com/watch?v=cQmcaOseuiA&
Exercices:
- introduction | https://public.01-edu.org/subjects/introduction.en
- make-it-better | https://public.01-edu.org/subjects/make-it-better.en
- to-git-or-not-to-git | https://public.01-edu.org/subjects/to-git-or-not-to-git.en
- who-are-you | https://public.01-edu.org/subjects/who-are-you.en
- cl-camp1 | https://public.01-edu.org/subjects/cl-camp1.en
- cl-camp2 | https://public.01-edu.org/subjects/cl-camp2.en
- cl-camp3 | https://public.01-edu.org/subjects/cl-camp3.en
- cl-camp4 | https://public.01-edu.org/subjects/cl-camp4.en
- cl-camp5 | https://public.01-edu.org/subjects/cl-camp5.en
- cl-camp6 | https://public.01-edu.org/subjects/cl-camp6.en
- cl-camp7 | https://public.01-edu.org/subjects/cl-camp7.en
- cl-camp8 | https://public.01-edu.org/subjects/cl-camp8.en
- now-get-to-work | https://public.01-edu.org/subjects/now-get-to-work.en
- introduction | https://public.01-edu.org/subjects/introduction.en
- make-it-better | https://public.01-edu.org/subjects/make-it-better.en
- to-git-or-not-to-git | https://public.01-edu.org/subjects/to-git-or-not-to-git.en
- who-are-you | https://public.01-edu.org/subjects/who-are-you.en
- cl-camp1 | https://public.01-edu.org/subjects/cl-camp1.en
- cl-camp2 | https://public.01-edu.org/subjects/cl-camp2.en
- cl-camp3 | https://public.01-edu.org/subjects/cl-camp3.en
- cl-camp4 | https://public.01-edu.org/subjects/cl-camp4.en
- cl-camp5 | https://public.01-edu.org/subjects/cl-camp5.en
- cl-camp6 | https://public.01-edu.org/subjects/cl-camp6.en
- cl-camp7 | https://public.01-edu.org/subjects/cl-camp7.en
- cl-camp8 | https://public.01-edu.org/subjects/cl-camp8.en
- now-get-to-work | https://public.01-edu.org/subjects/now-get-to-work.en
### Quest 2
@ -42,21 +42,21 @@ Notions: Variables declaration, Loops, if and else statement, usage of z01.Print
Videos:
- 02-01-If and Else Statements in Go | https://www.youtube.com/watch?v=rnF1_SfeGE4
- 02-02-ForLoops | https://www.youtube.com/watch?v=Bt47lx6q2-4
- 02-03-PrintRune function | https://www.youtube.com/watch?v=o8JrvI3jqoM
- 02-04-Variables Declaration and ascii | https://www.youtube.com/watch?v=RCNOV8m0hJQ
- 02-01-If and Else Statements in Go | https://www.youtube.com/watch?v=rnF1_SfeGE4
- 02-02-ForLoops | https://www.youtube.com/watch?v=Bt47lx6q2-4
- 02-03-PrintRune function | https://www.youtube.com/watch?v=o8JrvI3jqoM
- 02-04-Variables Declaration and ascii | https://www.youtube.com/watch?v=RCNOV8m0hJQ
Exercices:
- printalphabet | https://public.01-edu.org/subjects/printalphabet.en
- printreversealphabet | https://public.01-edu.org/subjects/printreversealphabet.en
- prindigits | https://public.01-edu.org/subjects/printdigits.en
- isnegative | https://public.01-edu.org/subjects/isnegative.en
- printcomb | https://public.01-edu.org/subjects/printcomb.en
- printcomb2 | https://public.01-edu.org/subjects/printcomb2.en
- printnbr | https://public.01-edu.org/subjects/printnbr.en
- printcombn | https://public.01-edu.org/subjects/printcombn.en
- printalphabet | https://public.01-edu.org/subjects/printalphabet.en
- printreversealphabet | https://public.01-edu.org/subjects/printreversealphabet.en
- prindigits | https://public.01-edu.org/subjects/printdigits.en
- isnegative | https://public.01-edu.org/subjects/isnegative.en
- printcomb | https://public.01-edu.org/subjects/printcomb.en
- printcomb2 | https://public.01-edu.org/subjects/printcomb2.en
- printnbr | https://public.01-edu.org/subjects/printnbr.en
- printcombn | https://public.01-edu.org/subjects/printcombn.en
### Quest 3
@ -66,25 +66,25 @@ Notions: String Manupulation, Range Loops, Pointers, Modulo and Division relativ
Videos:
- 03-01-StringsManipulation | https://www.youtube.com/watch?v=8LplJN_8iOU
- 03-02-RangeLoop | https://www.youtube.com/watch?v=i89N4cjh1-g
- 03-03-Pointers on variables | https://www.youtube.com/watch?v=owVPa5b1BMc
- 03-04-Modulo and Division | https://www.youtube.com/watch?v=NVan-9-Ioec
- 03-01-StringsManipulation | https://www.youtube.com/watch?v=8LplJN_8iOU
- 03-02-RangeLoop | https://www.youtube.com/watch?v=i89N4cjh1-g
- 03-03-Pointers on variables | https://www.youtube.com/watch?v=owVPa5b1BMc
- 03-04-Modulo and Division | https://www.youtube.com/watch?v=NVan-9-Ioec
Exercices:
- pointone | https://public.01-edu.org/subjects/pointone.en
- ultimatepointone | https://public.01-edu.org/subjects/ultimatepointone.en
- divmod | https://public.01-edu.org/subjects/divmod.en
- ultimatedivmod | https://public.01-edu.org/subjects/ultimatedivmod.en
- printstr | https://public.01-edu.org/subjects/printstr.en
- strlen | https://public.01-edu.org/subjects/strlen.en
- swap | https://public.01-edu.org/subjects/swap.en
- strrev | https://public.01-edu.org/subjects/strrev.en
- basicatoi | https://public.01-edu.org/subjects/basicatoi.en
- basicatoi2 | https://public.01-edu.org/subjects/basicatoi2.en
- atoi | https://public.01-edu.org/subjects/atoi.en
- sortintegerable | https://public.01-edu.org/subjects/sortintegertable.en
- pointone | https://public.01-edu.org/subjects/pointone.en
- ultimatepointone | https://public.01-edu.org/subjects/ultimatepointone.en
- divmod | https://public.01-edu.org/subjects/divmod.en
- ultimatedivmod | https://public.01-edu.org/subjects/ultimatedivmod.en
- printstr | https://public.01-edu.org/subjects/printstr.en
- strlen | https://public.01-edu.org/subjects/strlen.en
- swap | https://public.01-edu.org/subjects/swap.en
- strrev | https://public.01-edu.org/subjects/strrev.en
- basicatoi | https://public.01-edu.org/subjects/basicatoi.en
- basicatoi2 | https://public.01-edu.org/subjects/basicatoi2.en
- atoi | https://public.01-edu.org/subjects/atoi.en
- sortintegerable | https://public.01-edu.org/subjects/sortintegertable.en
### Exam 1 (4hours)
@ -106,19 +106,19 @@ Notions: Iterative and recursive programmation
Videos:
- 04-01-Iterativity and Recursivity | https://www.youtube.com/watch?v=oCZDdAID5Ik
- 04-01-Iterativity and Recursivity | https://www.youtube.com/watch?v=oCZDdAID5Ik
Exercices:
- iterativefactorial | https://public.01-edu.org/subjects/iterativefactorial.en
- recursivefactorial | https://public.01-edu.org/subjects/recursivefactorial.en
- iterativepower | https://public.01-edu.org/subjects/iterativepower.en
- recursivepower | https://public.01-edu.org/subjects/recursivepower.en
- fibonacci | https://public.01-edu.org/subjects/fibonacci.en
- sqrt | https://public.01-edu.org/subjects/sqrt.en
- isprime | https://public.01-edu.org/subjects/isprime.en
- findnextprime | https://public.01-edu.org/subjects/findnextprime.en
- eightqueens | https://public.01-edu.org/subjects/eightqueens.en
- iterativefactorial | https://public.01-edu.org/subjects/iterativefactorial.en
- recursivefactorial | https://public.01-edu.org/subjects/recursivefactorial.en
- iterativepower | https://public.01-edu.org/subjects/iterativepower.en
- recursivepower | https://public.01-edu.org/subjects/recursivepower.en
- fibonacci | https://public.01-edu.org/subjects/fibonacci.en
- sqrt | https://public.01-edu.org/subjects/sqrt.en
- isprime | https://public.01-edu.org/subjects/isprime.en
- findnextprime | https://public.01-edu.org/subjects/findnextprime.en
- eightqueens | https://public.01-edu.org/subjects/eightqueens.en
### Quest 5
@ -128,28 +128,28 @@ Notions: String Manipulation and medium-advanced algorithmia
Videos:
- 05-01-Runes, Bytes and Strings | https://www.youtube.com/watch?v=-eIU5ISID64
- 05-01-Runes, Bytes and Strings | https://www.youtube.com/watch?v=-eIU5ISID64
Exercices:
- firstrune | https://public.01-edu.org/subjects/firstrune.en
- nrune | https://public.01-edu.org/subjects/nrune.en
- lastrune | https://public.01-edu.org/subjects/lastrune.en
- index | https://public.01-edu.org/subjects/index.en
- compare | https://public.01-edu.org/subjects/compare.en
- toupper | https://public.01-edu.org/subjects/toupper.en
- tolower | https://public.01-edu.org/subjects/tolower.en
- capitalize | https://public.01-edu.org/subjects/capitalize.en
- isalpha | https://public.01-edu.org/subjects/isalpha.en
- isnumeric | https://public.01-edu.org/subjects/isnumeric.en
- islower | https://public.01-edu.org/subjects/islower.en
- isupper | https://public.01-edu.org/subjects/isupper.en
- isprintable | https://public.01-edu.org/subjects/isprintable.en
- concat | https://public.01-edu.org/subjects/concat.en
- basicjoin | https://public.01-edu.org/subjects/basicjoin.en
- join | https://public.01-edu.org/subjects/join.en
- printnbrbase | https://public.01-edu.org/subjects/printnbrbase.en
- atoibase | https://public.01-edu.org/subjects/atoibase.en
- firstrune | https://public.01-edu.org/subjects/firstrune.en
- nrune | https://public.01-edu.org/subjects/nrune.en
- lastrune | https://public.01-edu.org/subjects/lastrune.en
- index | https://public.01-edu.org/subjects/index.en
- compare | https://public.01-edu.org/subjects/compare.en
- toupper | https://public.01-edu.org/subjects/toupper.en
- tolower | https://public.01-edu.org/subjects/tolower.en
- capitalize | https://public.01-edu.org/subjects/capitalize.en
- isalpha | https://public.01-edu.org/subjects/isalpha.en
- isnumeric | https://public.01-edu.org/subjects/isnumeric.en
- islower | https://public.01-edu.org/subjects/islower.en
- isupper | https://public.01-edu.org/subjects/isupper.en
- isprintable | https://public.01-edu.org/subjects/isprintable.en
- concat | https://public.01-edu.org/subjects/concat.en
- basicjoin | https://public.01-edu.org/subjects/basicjoin.en
- join | https://public.01-edu.org/subjects/join.en
- printnbrbase | https://public.01-edu.org/subjects/printnbrbase.en
- atoibase | https://public.01-edu.org/subjects/atoibase.en
### Quest 6
@ -159,14 +159,14 @@ Notions: Arguments manipulation in programs
Videos:
- 06-01-Os.Args | https://www.youtube.com/watch?v=I1xt_TLRhF0
- 06-01-Os.Args | https://www.youtube.com/watch?v=I1xt_TLRhF0
Exercices:
- printprogramname | https://public.01-edu.org/subjects/printprogramname.en
- printparams | https://public.01-edu.org/subjects/printparams.en
- revparams | https://public.01-edu.org/subjects/revparams.en
- sortparams | https://public.01-edu.org/subjects/sortparams.en
- printprogramname | https://public.01-edu.org/subjects/printprogramname.en
- printparams | https://public.01-edu.org/subjects/printparams.en
- revparams | https://public.01-edu.org/subjects/revparams.en
- sortparams | https://public.01-edu.org/subjects/sortparams.en
### Quest 7
@ -176,17 +176,17 @@ Notions: Usage of Make and Append
Videos:
- 07-01-Make and Append methods | https://www.youtube.com/watch?v=2HHVUM0YQuI
- 07-01-Make and Append methods | https://www.youtube.com/watch?v=2HHVUM0YQuI
Exercices:
- appendrange | https://public.01-edu.org/subjects/apprendrange.en
- makerange | https://public.01-edu.org/subjects/makerange.en
- concatparams | https://public.01-edu.org/subjects/concatparams.en
- splitwhitespaces | https://public.01-edu.org/subjects/splitwhitespaces.en
- printwordstables | https://public.01-edu.org/subjects/printwordstables.en
- convertbase | https://public.01-edu.org/subjects/converbase.en
- split | https://public.01-edu.org/subjects/split.en
- appendrange | https://public.01-edu.org/subjects/apprendrange.en
- makerange | https://public.01-edu.org/subjects/makerange.en
- concatparams | https://public.01-edu.org/subjects/concatparams.en
- splitwhitespaces | https://public.01-edu.org/subjects/splitwhitespaces.en
- printwordstables | https://public.01-edu.org/subjects/printwordstables.en
- convertbase | https://public.01-edu.org/subjects/converbase.en
- split | https://public.01-edu.org/subjects/split.en
### Exam 2 (4hours)
@ -208,16 +208,16 @@ Notions: Creation of struct types and file manipulation (Open, Read, Close metho
Videos:
- 08-01-Structures in Go | https://www.youtube.com/watch?v=-24M7r7VuLY
- 08-02-File Manipulation in go | https://www.youtube.com/watch?v=8vUgchQGhcQ
- 08-01-Structures in Go | https://www.youtube.com/watch?v=-24M7r7VuLY
- 08-02-File Manipulation in go | https://www.youtube.com/watch?v=8vUgchQGhcQ
Exercices:
- bool | https://public.01-edu.org/subjects/bool.en
- point | https://public.01-edu.org/subjects/point.en
- displayfile | https://public.01-edu.org/subjects/displayfile.en
- cat | https://public.01-edu.org/subjects/cat.en
- ztail | https://public.01-edu.org/subjects/ztail.en
- bool | https://public.01-edu.org/subjects/bool.en
- point | https://public.01-edu.org/subjects/point.en
- displayfile | https://public.01-edu.org/subjects/displayfile.en
- cat | https://public.01-edu.org/subjects/cat.en
- ztail | https://public.01-edu.org/subjects/ztail.en
### Quest 9
@ -227,18 +227,18 @@ Notions: Advance function prototyping
Videos:
- 09-01-Functions as Arguments | https://www.youtube.com/watch?v=lw8jUwsluAE
- 09-01-Functions as Arguments | https://www.youtube.com/watch?v=lw8jUwsluAE
Exercices:
- foreach | https://public.01-edu.org/subjects/foreach.en
- map | https://public.01-edu.org/subjects/map.en
- any | https://public.01-edu.org/subjects/any.en
- countif | https://public.01-edu.org/subjects/countif.en
- issorted | https://public.01-edu.org/subjects/issorted.en
- doop | https://public.01-edu.org/subjects/doop.en
- sortwordarr | https://public.01-edu.org/subjects/sortwordarr.en
- advancedsortwordarr | https://public.01-edu.org/subjects/advancedsortwordarr.en
- foreach | https://public.01-edu.org/subjects/foreach.en
- map | https://public.01-edu.org/subjects/map.en
- any | https://public.01-edu.org/subjects/any.en
- countif | https://public.01-edu.org/subjects/countif.en
- issorted | https://public.01-edu.org/subjects/issorted.en
- doop | https://public.01-edu.org/subjects/doop.en
- sortwordarr | https://public.01-edu.org/subjects/sortwordarr.en
- advancedsortwordarr | https://public.01-edu.org/subjects/advancedsortwordarr.en
### Quest 10
@ -248,18 +248,18 @@ Notions: All previously viewed concepts in team work
Exercices:
- rot14 | https://public.01-edu.org/subjects/rot14.en
- abort | https://public.01-edu.org/subjects/abort.en
- collatzcountdown | https://public.01-edu.org/subjects/collatzcountdown.en
- comcheck | https://public.01-edu.org/subjects/comcheck.en
- enigma | https://public.01-edu.org/subjects/enigma.en
- pilot | https://public.01-edu.org/subjects/pilot.en
- fixthemain | https://public.01-edu.org/subjects/fixthemain.en
- compact | https://public.01-edu.org/subjects/compact.en
- activebits | https://public.01-edu.org/subjects/activebits.en
- max | https://public.01-edu.org/subjects/max.en
- join | https://public.01-edu.org/subjects/join.en
- unmatch | https://public.01-edu.org/subjects/unmatch.en
- rot14 | https://public.01-edu.org/subjects/rot14.en
- abort | https://public.01-edu.org/subjects/abort.en
- collatzcountdown | https://public.01-edu.org/subjects/collatzcountdown.en
- comcheck | https://public.01-edu.org/subjects/comcheck.en
- enigma | https://public.01-edu.org/subjects/enigma.en
- pilot | https://public.01-edu.org/subjects/pilot.en
- fixthemain | https://public.01-edu.org/subjects/fixthemain.en
- compact | https://public.01-edu.org/subjects/compact.en
- activebits | https://public.01-edu.org/subjects/activebits.en
- max | https://public.01-edu.org/subjects/max.en
- join | https://public.01-edu.org/subjects/join.en
- unmatch | https://public.01-edu.org/subjects/unmatch.en
### Exam 3 (4hours)
@ -281,25 +281,25 @@ Notions: Pointers manipulation and data structure
Videos:
- 11-01-Linked Lists Introduction | https://www.youtube.com/watch?v=EPICVEbylU0
- 11-01-Linked Lists Introduction | https://www.youtube.com/watch?v=EPICVEbylU0
Exercices:
- listpushback | https://public.01-edu.org/subjects/listpushback.en
- listpushfront | https://public.01-edu.org/subjects/listpushfront.en
- listsize | https://public.01-edu.org/subjects/listsize.en
- listlast | https://public.01-edu.org/subjects/listlast.en
- listclear | https://public.01-edu.org/subjects/listclear.en
- listat | https://public.01-edu.org/subjects/listat.en
- listreverse | https://public.01-edu.org/subjects/listreverse.en
- listforeach | https://public.01-edu.org/subjects/listforeach.en
- listforeachif | https://public.01-edu.org/subjects/listforeachif.en
- listfind | https://public.01-edu.org/subjects/listfind.en
- listremoveif | https://public.01-edu.org/subjects/listremoveif.en
- listmerge | https://public.01-edu.org/subjects/listmerge.en
- listsort | https://public.01-edu.org/subjects/listsort.en
- sortlistinsert | https://public.01-edu.org/subjects/sortlistinsert.en
- sortedlistmerge | https://public.01-edu.org/subjects/sortedlistmerge.en
- listpushback | https://public.01-edu.org/subjects/listpushback.en
- listpushfront | https://public.01-edu.org/subjects/listpushfront.en
- listsize | https://public.01-edu.org/subjects/listsize.en
- listlast | https://public.01-edu.org/subjects/listlast.en
- listclear | https://public.01-edu.org/subjects/listclear.en
- listat | https://public.01-edu.org/subjects/listat.en
- listreverse | https://public.01-edu.org/subjects/listreverse.en
- listforeach | https://public.01-edu.org/subjects/listforeach.en
- listforeachif | https://public.01-edu.org/subjects/listforeachif.en
- listfind | https://public.01-edu.org/subjects/listfind.en
- listremoveif | https://public.01-edu.org/subjects/listremoveif.en
- listmerge | https://public.01-edu.org/subjects/listmerge.en
- listsort | https://public.01-edu.org/subjects/listsort.en
- sortlistinsert | https://public.01-edu.org/subjects/sortlistinsert.en
- sortedlistmerge | https://public.01-edu.org/subjects/sortedlistmerge.en
### Quest 12
@ -309,21 +309,21 @@ Notions: Advanced Data Structure using binary trees
Videos:
- 12-01-Introduction to Binary Trees | https://www.youtube.com/watch?v=3g2WCqWNIVs
- 12-01-Introduction to Binary Trees | https://www.youtube.com/watch?v=3g2WCqWNIVs
Exercices:
- btreeinsertdata | https://public.01-edu.org/subjects/btreeinsertdata.en
- btreeapplyinorder | https://public.01-edu.org/subjects/btreeapplyinorder.en
- btreeapplypreorder | https://public.01-edu.org/subjects/btreeapplypreorder.en
- btreesearchitem | https://public.01-edu.org/subjects/btreesearchitem.en
- btreelevelcount | https://public.01-edu.org/subjects/btreelevelcount.en
- btreeisbinary | https://public.01-edu.org/subjects/btreeisbinary.en
- btreeapplylevel | https://public.01-edu.org/subjects/btreeapplylevel.en
- btreemax | https://public.01-edu.org/subjects/btreemax.en
- btreemin | https://public.01-edu.org/subjects/btreemin.en
- btreetransplant | https://public.01-edu.org/subjects/btreetransplant.en
- btreedeletenode | https://public.01-edu.org/subjects/btreedeletenode.en
- btreeinsertdata | https://public.01-edu.org/subjects/btreeinsertdata.en
- btreeapplyinorder | https://public.01-edu.org/subjects/btreeapplyinorder.en
- btreeapplypreorder | https://public.01-edu.org/subjects/btreeapplypreorder.en
- btreesearchitem | https://public.01-edu.org/subjects/btreesearchitem.en
- btreelevelcount | https://public.01-edu.org/subjects/btreelevelcount.en
- btreeisbinary | https://public.01-edu.org/subjects/btreeisbinary.en
- btreeapplylevel | https://public.01-edu.org/subjects/btreeapplylevel.en
- btreemax | https://public.01-edu.org/subjects/btreemax.en
- btreemin | https://public.01-edu.org/subjects/btreemin.en
- btreetransplant | https://public.01-edu.org/subjects/btreetransplant.en
- btreedeletenode | https://public.01-edu.org/subjects/btreedeletenode.en
### Exam 4 - Final Exam (8hours)

37
docs/principles.md

@ -0,0 +1,37 @@
# Principles
## Make a simple system (less complexity)
Rationale :
- Reduce the number of potential bugs and problems
- The remaining bugs will be easier to identify/isolate & fix
- Easier maintenance
- Lower human capital required
## Limit security & filtering mechanisms
Especially during the launch, rationale :
- Reduce complexity (see above)
- Alem is a school, not a bank, so the security requirements are lower
- Some students will be able to bypass security systems in all cases
- And they will spread the word quickly
- The only reliable way to identify students will be security cameras and staff attention
- Students will share accounts and USB drives
- They will open connections to the outside and there is no definitive way to prevent this
- We will "hire" the students who have found vulnerabilities using technical skills and creativity
- We cannot anticipate every breach hundreds of students will find & exploit
- Focus on endpoint security rather than network security (firewall on each node)
- Reduce complexity of the network and make it more flexible
## Promote open, neutral network & technologies
Rationale :
- Students will spend more time learning things and exchanging ideas than bypassing censorship
- Students will have more extensive knowledge and skills
- It is better to make them aware of their situation than to try to stop them
- A student's motivation is very much influenced by his or her environment
- An environment with limitations will limit the spectrum of things that stimulate the student's curiosity
- A focus will made on increasing student's empowerement in order to make them feel accountable for their own actions. If the student cheats, he has to understand that he is only hindering his own progress.

31
docs/responsibilities.md

@ -0,0 +1,31 @@
# Responsibilities
## Alem
- Hardware
- Maintenance & replacement of parts
- HP machines
- Inventory (associates MAC address or other ID to the physical location of the machine)
- [BIOS configuration](bios-configuration.md)
- Connected on Ethernet network
- Audio & USB extension cables (to protect the PC ports)
- Computers & cables are physically attached to the table (to prevent stealing or damage)
- Monitor brightness (the default might be too high and it cannot be controlled by software)
- Server (virtualized with at least these dedicated resources)
- CPU : 8 threads
- RAM : 64 GB
- SSD : 512 GB
- NIC : pass-through or bridged ? (see with Vitalii)
- Software
- DHCP
- DNS
- PXE
- Image creation & deployment (with the help of team 01)
## 01
- Software maintenance
- Implement the features requested or identified at the Alem School
- Bug fix
- Technical advice
- Pedagogical support

11
docs/tasks.md

@ -0,0 +1,11 @@
# Tasks
- [x] Install, connect, check the server and the HP clients (_Alem_, _Vitalii_)
- [x] Check the settings of the virtual machine (_01_, _Vitalii_)
- [x] Install the server (_01_, _Vitalii_)
- [x] Tests & benchmark of the server (_01_)
- [x] Test the [OS deployment](https://github.com/01-edu/public/blob/master/docs/os-deployment.md) (_01_, _Vitalii_)
- [ ] Write process documentation (_01_, _Alem_, _Vitalii_)
- [ ] Ensure the tester only works inside the school (_01_, _Alem_)
- [ ] Ensure the exam app works as expected (_01_, _Alem_)
- [ ] Test the entire piscine (_01_, _Alem_)

67
docs/ubuntu-installation.md

@ -6,20 +6,18 @@ Download and boot the [last Ubuntu release](http://releases.ubuntu.com/19.04/ubu
Follow the steps :
![img1](img/1.png)
![img2](img/2.png)
![img3](img/3.png)
![img1](img/ubuntu-installation/1.png)
![img2](img/ubuntu-installation/2.png)
![img3](img/ubuntu-installation/3.png)
The partitioning is :
1) 256 MB : EFI partition
2) 20 GB : system partition
3) 32 GB : unused partition (will be used later)
4) rest : unused partition (will be used later)
1. 256 MB : EFI partition
2. 20 GB : system partition
![img4](img/4.png)
![img5](img/5.png)
![img6](img/6.png)
![img4](img/ubuntu-installation/4.png)
![img5](img/ubuntu-installation/5.png)
![img6](img/ubuntu-installation/6.png)
Remove the installation disk and then reboot.
@ -27,43 +25,42 @@ Skip the welcoming window.
Don't install updates if Ubuntu asks to. The scripts will.
Start the disk utility to name partitions so that OverlayFS can identify them.
## OS customization
3) 32 GB - **Partition 3** : `01-tmp-home`
4) rest - **Partition 4** : `01-tmp-system`
You can overwrite the files of the folder `system` by setting an environment variable named `OVERWRITE` with the format : `Destination folder;Git URL`.
The same procedure is required to make USB disk usable for the students, the partition name must be : `01-home`
For example to write the content of the repository [github.com/xpetit/custom](https://github.com/xpetit/custom) in the system folder :
![img7](img/7.png)
![img8](img/8.png)
![img9](img/9.png)
```shell
export OVERWRITE='.;https://github.com/xpetit/custom.git'
```
## OS configuration
Run a terminal and type these commands :
```shell
student@tmp-hostname:~$ wget github.com/01-edu/public/archive/master.zip
student@tmp-hostname:~$ unzip master.zip
student@tmp-hostname:~$ cd public-master/scripts
student@tmp-hostname:~$ sudo ./install_client.sh
[...]
Ask for student user password (will be removed later)
[...]
Ask to set the root password
[...]
Long installation/configuration process
[...]
student@tmp-hostname:~$ cat dconfig.txt | dconf load /
student@tmp-hostname:~$ reboot
unset HISTFILE
sudo apt-get -y install curl
bash <(curl -sSL raw.githubusercontent.com/01-edu/public/master/scripts/kickstart.sh)
```
The script will ask for student user password (which will be deleted after) and then after a long configuration process it will restart the computer.
The system is now read-only, every data is written to a temporary partition.
The session is password-less.
To gain a superuser terminal with read/write access to the filesystem, type these commands:
To gain a superuser terminal, use SSH :
```shell
student@tmp-hostname:~$ su -
Password:
root@tmp-hostname:~# overlayroot-chroot
```console
user@remote:~$ ssh -p521 root@IP_ADDRESS
```
To gain access with read/write access to the filesystem, use this command :
```console
root@ubuntu:~# overlayroot-chroot
INFO: Chrooting into [/media/root-ro]
root@ubuntu:/#
```

24
docs/usb-configuration.md

@ -2,45 +2,43 @@
Requirements :
1) 32 GB
3) interface type: 3.0
1. 32 GB
2. interface type: 3.0
Follow the steps :
> Execute the "disks" program
![img1](img/usb/1.png)
![img1](img/usb-configuration/1.png)
> Choose the usb drive to configure and press format disk
![img2](img/usb/2.png)
![img2](img/usb-configuration/2.png)
> Choose "Compatible with modern systems and hard disks > 2TB(GPT)"
![img3](img/usb/3.png)
![img3](img/usb-configuration/3.png)
![img4](img/usb/4.png)
![img4](img/usb-configuration/4.png)
> Create new partition (size == all memory)
![img5](img/usb/5.png)
![img5](img/usb-configuration/5.png)
> Volume name: any
> Erase: none
> Type: other
![img6](img/usb/6.png)
![img6](img/usb-configuration/6.png)
> Choose F2FS
![img7](img/usb/7.png)
![img7](img/usb-configuration/7.png)
> Format created partition
![img8](img/usb/8.png)
![img8](img/usb-configuration/8.png)
> The new name must be 01-home
![img9](img/usb/9.png)
![img9](img/usb-configuration/9.png)

1
scripts/dconfig.txt

@ -67,6 +67,7 @@ default-size-columns=160
[org/gnome/desktop/background]
show-desktop-icons=false
picture-uri='file:///usr/share/backgrounds/01/wallpaper.png'
[org/gnome/desktop/peripherals/mouse]
accel-profile='flat'

2
scripts/grub.sh

@ -8,8 +8,6 @@ cd $SCRIPT_DIR
DISK=$1
apt-get -y install grub-efi-amd64
sed -i -e 's/message=/message_null=/g' /etc/grub.d/10_linux
cat <<EOF>> /etc/default/grub

60
scripts/install_client.sh

@ -9,13 +9,6 @@ SCRIPT_DIR="$(cd -P "$(dirname "$BASH_SOURCE")" && pwd)"
cd $SCRIPT_DIR
. set.sh
# Set root password
passwd root
# Remove user password
passwd -d student
cp /etc/shadow /etc/shadow-
SSH_PORT=521
DISK=$(lsblk -o tran,kname,hotplug,type,fstype -pr |
grep -e nvme -e sata |
@ -24,10 +17,26 @@ DISK=$(lsblk -o tran,kname,hotplug,type,fstype -pr |
sort |
head -n1)
systemctl stop unattended-upgrades.service
sgdisk -n0:0:+32G "$DISK"
sgdisk -N0 "$DISK"
sgdisk -c3:01-tmp-home "$DISK"
sgdisk -c4:01-tmp-system "$DISK"
apt-get update
apt-get -y upgrade
apt-get -y autoremove --purge
# Remove outdated kernels
old_kernels=$(ls -1 /boot/config-* | sed '$d' | xargs -n1 basename | cut -d- -f2,3)
for old_kernel in $old_kernels; do
dpkg -P $(dpkg-query -f '${binary:Package}\n' -W *"$old_kernel"*)
done
apt-get -yf install
. bash_tweaks.sh
. ssh.sh
. firewall.sh
@ -61,20 +70,51 @@ rm /usr/share/initramfs-tools/hooks/fsck
cp -r system /tmp
cd /tmp/system
sed -i -e "s|::DISK::|$DISK|g" etc/udev/rules.d/10-local.rules
apt-get -y install overlayroot
echo overlayroot=\"device:dev=/dev/disk/by-partlabel/01-tmp-system,recurse=0\" >> /etc/overlayroot.conf
# Overwrite with custom files from Git repository
if test -v OVERWRITE; then
folder=$(echo "$OVERWRITE" | cut -d';' -f1)
url=$(echo "$OVERWRITE" | cut -d';' -f2)
if git ls-remote -q "$url" &>/dev/null; then
tmp=$(mktemp -d)
git clone --depth 1 "$url" "$tmp"
rm -rf "$tmp"/.git
cp -aT "$tmp" "$folder"
rm -rf "$tmp"
fi
fi
# Fix permissions
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
find . -type f -exec /bin/sh -c "file {} | grep -q 'shell script' && chmod +x {}" \;
find . -type f -exec /bin/sh -c "file {} | grep -q 'public key' && chmod 400 {}" \;
sed -i -e "s|::DISK::|$DISK|g" etc/udev/rules.d/10-local.rules
# Generate wallpaper
cd usr/share/backgrounds/01
test ! -e wallpaper.png && composite logo.png background.png wallpaper.png
cd /tmp/system
cp --preserve=mode -RT . /
cd $SCRIPT_DIR
rm -rf /tmp/system
apt-get -y install overlayroot
echo overlayroot=\"device:dev=/dev/disk/by-partlabel/01-tmp-system,recurse=0\" >> /etc/overlayroot.conf
update-initramfs -u
# Remove root & user password
passwd -d root
passwd -d student
cp /etc/shadow /etc/shadow-
# Remove user abilities
gpasswd -d student sudo
gpasswd -d student lpadmin
gpasswd -d student sambashare
. clean.sh

48
scripts/kickstart.sh

@ -0,0 +1,48 @@
#!/usr/bin/env bash
# Run me with:
#
# bash <(curl -Ss raw.githubusercontent.com/01-edu/public/master/scripts/kickstart.sh)
# Treat unset variables as an error when substituting.
set -u
# Exit immediately if a command exits with a non-zero status.
set -e
# Set the variable corresponding to the return value of a pipeline is the status
# of the last command to exit with a non-zero status, or zero if no command
# exited with a non-zero status
set -o pipefail
# Separate tokens on newlines only
IFS='
'
# The value of this parameter is expanded like PS1 and the expanded value is the
# prompt printed before the command line is echoed when the -x option is set
# (see The Set Builtin). The first character of the expanded value is replicated
# multiple times, as necessary, to indicate multiple levels of indirection.
# \D{%F %T} prints date like this : 2019-12-31 23:59:59
PS4='-\D{%F %T} '
# Print commands and their arguments as they are executed.
set -x
# Skip dialogs during apt-get install commands
export DEBIAN_FRONTEND=noninteractive # DEBIAN_PRIORITY=critical
gsettings set org.gnome.desktop.session idle-delay 0
gsettings set org.gnome.desktop.screensaver lock-enabled false
cd
wget github.com/01-edu/public/archive/master.zip
unzip master.zip
cd public-master/scripts
sudo -E ./install_client.sh
cat dconfig.txt | dconf load /
cd
rm -rf master.zip public-master
reboot

2
scripts/nodejs.sh

@ -6,5 +6,5 @@ SCRIPT_DIR="$(cd -P "$(dirname "$BASH_SOURCE")" && pwd)"
cd $SCRIPT_DIR
. set.sh
curl -sL https://deb.nodesource.com/setup_10.x | bash -
curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get -y install nodejs

21
scripts/preseed.cfg

@ -0,0 +1,21 @@
# d-i debconf/priority select critical
d-i anna/choose_modules string network-console
d-i preseed/early_command string anna-install network-console
d-i network-console/authorized_keys_url string https://raw.githubusercontent.com/xpetit/.ssh/master/id_ed25519.pub
d-i network-console/password-disabled boolean true
d-i debian-installer/locale string en_US
d-i console-keymaps-at/keymap select us
d-i keyboard-configuration/xkb-keymap select us
d-i mirror/country string manual
d-i mirror/http/hostname string deb.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
#d-i netcfg/choose_interface select auto
#d-i netcfg/get_hostname string debian
#d-i netcfg/get_domain string local
d-i hw-detect/load_firmware boolean true

7
scripts/ssh.sh

@ -16,10 +16,3 @@ Port $SSH_PORT
PasswordAuthentication no
AllowUsers root
EOF
mkdir -p /root/.ssh
chmod -f 700 /root/.ssh
# echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH30lZP4V26RVWWvAW91jM7UBSN68+xkuJc5cRionpMc' >> /root/.ssh/authorized_keys
chmod -f 600 /root/.ssh/authorized_keys || true
systemctl restart sshd.service

2
scripts/system/etc/gdm3/PostLogin/Default

@ -40,7 +40,7 @@ else
mount -o noatime,nobarrier /dev/disk/by-partlabel/01-tmp-home /mnt
fi
user_path=/mnt/.01/"$USER"
user_path=/mnt/.01/user
temp_path=/mnt/.01/tmp
mkdir -p "$user_path" "$temp_path"

4
scripts/system/etc/gdm3/PostSession/Default

@ -16,11 +16,11 @@ PS4='-\D{%F %T} '
# Print commands and their arguments as they are executed.
set -x
passwd -d $USER
passwd -d "$USER" ||:
systemctl stop user@1000.service
# Make sure the mountpoints are free
kill $(lsof -t "$HOME" /mnt) $(ps --no-headers -u student -o pid)
kill $(lsof -t "$HOME" /mnt) $(ps --no-headers -u "$USER" -o pid)
umount "$HOME" /mnt
umount /dev/disk/by-partlabel/01-home ||:
wipefs -a /dev/disk/by-partlabel/01-tmp-home

BIN
scripts/system/usr/share/backgrounds/01/background.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 249 KiB

BIN
scripts/system/usr/share/backgrounds/01/logo.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 8.6 KiB

9
scripts/ubuntu_tweaks.sh

@ -39,13 +39,6 @@ swapoff /swapfile || true
rm -f /swapfile
sed -i '/swapfile/d' /etc/fstab
# Network configuration
interface=$(ip route get 1.1.1.1 | head -1 | cut -d' ' -f5)
cat <<EOF>> /etc/network/interfaces
allow-hotplug $interface
iface $interface inet dhcp
EOF
# Purge unused Ubuntu packages
PKGS="
@ -62,7 +55,6 @@ gnome-power-manager
gnome-software
gnome-software-common
memtest86+
network-manager*
orca
popularity-contest
python3-update-manager
@ -112,6 +104,7 @@ gnome-calculator
gnome-system-monitor
gnome-tweaks
i3lock
imagemagick
mpv
zenity
"

6
subjects/abort.en.md

@ -33,8 +33,8 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
5
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/abort.fr.md

@ -33,8 +33,8 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
5
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/activebits.en.md

@ -33,8 +33,8 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
3
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/activebits.fr.md

@ -33,8 +33,8 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
3
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

10
subjects/addprimesum.en.md

@ -9,12 +9,12 @@ Write a program that takes a positive integer as argument and displays the sum o
### Usage
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test 5
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test 5
10
student@ubuntu:~/piscine/test$ ./test 7
student@ubuntu:~/piscine-go/test$ ./test 7
17
student@ubuntu:~/piscine/test$ ./test 57
student@ubuntu:~/piscine-go/test$ ./test 57
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

10
subjects/addprimesum.fr.md

@ -9,12 +9,12 @@
### Utilisation
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test 5
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test 5
10
student@ubuntu:~/piscine/test$ ./test 7
student@ubuntu:~/piscine-go/test$ ./test 7
17
student@ubuntu:~/piscine/test$ ./test 57
student@ubuntu:~/piscine-go/test$ ./test 57
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/advancedsortwordarr.en.md

@ -35,8 +35,8 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
[1 2 3 A B C a b c]
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/advancedsortwordarr.fr.md

@ -35,8 +35,8 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
[1 2 3 A B C a b c]
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/any.en.md

@ -40,9 +40,9 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
false
true
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/any.fr.md

@ -40,9 +40,9 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
false
true
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/appendrange.en.md

@ -40,9 +40,9 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
[5 6 7 8 9]
[]
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/appendrange.fr.md

@ -39,9 +39,9 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
[5 6 7 8 9]
[]
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/atoi.en.md

@ -63,8 +63,8 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
12345
12345
0
@ -73,5 +73,5 @@ student@ubuntu:~/piscine/test$ ./test
-1234
0
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/atoi.fr.md

@ -63,8 +63,8 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
12345
12345
0
@ -73,5 +73,5 @@ student@ubuntu:~/piscine/test$ ./test
-1234
0
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/atoibase.en.md

@ -48,12 +48,12 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
125
125
125
125
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/atoibase.fr.md

@ -48,12 +48,12 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
125
125
125
125
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/basicatoi.en.md

@ -48,10 +48,10 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
12345
12345
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/basicatoi.fr.md

@ -48,10 +48,10 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
12345
12345
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/basicatoi2.en.md

@ -52,11 +52,11 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
12345
12345
0
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/basicatoi2.fr.md

@ -52,11 +52,11 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
12345
12345
0
0
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/basicjoin.en.md

@ -33,8 +33,8 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
Hello! How are you?
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/basicjoin.fr.md

@ -33,8 +33,8 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
Hello! How are you?
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

2
subjects/btreeapplybylevel.en.md

@ -7,7 +7,7 @@ Write a function, `BTreeApplyByLevel`, that applies the function given by `fn` t
### Expected function
```go
func BTreeApplyByLevel(root *TreeNode, fn interface{}) {
func BTreeApplyByLevel(root *TreeNode, f func(...interface{}) (int, error)) {
}
```

6
subjects/btreeapplyinorder.en.md

@ -38,11 +38,11 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
1
4
5
7
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/btreeapplyinorder.fr.md

@ -38,11 +38,11 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
1
4
5
7
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/btreeapplypostorder.en.md

@ -37,11 +37,11 @@ func main() {
And its output :
```console
student@ubuntu:~/piscine/test$ go build
student@ubuntu:~/piscine/test$ ./test
student@ubuntu:~/piscine-go/test$ go build
student@ubuntu:~/piscine-go/test$ ./test
1
5
7
4
student@ubuntu:~/piscine/test$
student@ubuntu:~/piscine-go/test$
```

6
subjects/btreeapplypostorder.fr.md

@ -37,11 +37,11 @@ func main() {
Et son résultat :
```console
student@ubuntu:~/piscine/btreeinsertdata$ go build
student@ubuntu:~/piscine/btreeinsertdata$ ./btreeinsertdata
student@ubuntu:~/piscine-go/btreeinsertdata$ go build
student@ubuntu:~/piscine-go/btreeinsertdata$ ./btreeinsertdata
1
5
7
4
student@ubuntu:~/piscine/btreeinsertdata$
student@ubuntu:~/piscine-go/btreeinsertdata$
```

Some files were not shown because too many files changed in this diff diff.show_more

Loading…
Cancel
Save