Browse Source

Merge branch 'master' of github.com:01-edu/public

content-update
Christopher Fremond 5 years ago
parent
commit
e4480295c5
  1. 29
      docs/bios-configuration.md
  2. 190
      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. BIN
      docs/img/usb-configuration/1.png
  40. BIN
      docs/img/usb-configuration/2.png
  41. BIN
      docs/img/usb-configuration/3.png
  42. BIN
      docs/img/usb-configuration/4.png
  43. BIN
      docs/img/usb-configuration/5.png
  44. BIN
      docs/img/usb-configuration/6.png
  45. BIN
      docs/img/usb-configuration/7.png
  46. BIN
      docs/img/usb-configuration/8.png
  47. BIN
      docs/img/usb-configuration/9.png
  48. 142
      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. 44
      docs/usb-configuration.md
  62. 3
      scripts/dconfig.txt
  63. 2
      scripts/grub.sh
  64. 64
      scripts/install_client.sh
  65. 48
      scripts/kickstart.sh
  66. 9
      scripts/libreoffice.sh
  67. 2
      scripts/nodejs.sh
  68. 21
      scripts/preseed.cfg
  69. 7
      scripts/ssh.sh
  70. 47
      scripts/system/etc/gdm3/PostLogin/Default
  71. 14
      scripts/system/etc/gdm3/PostSession/Default
  72. BIN
      scripts/system/usr/share/backgrounds/01/background.png
  73. BIN
      scripts/system/usr/share/backgrounds/01/logo.png
  74. 2
      scripts/system/usr/share/initramfs-tools/scripts/init-premount/reformat
  75. 3
      scripts/ubuntu_tweaks.sh
  76. 6
      subjects/abort.en.md
  77. 6
      subjects/abort.fr.md
  78. 6
      subjects/activebits.en.md
  79. 6
      subjects/activebits.fr.md
  80. 16
      subjects/addprimesum.en.md
  81. 16
      subjects/addprimesum.fr.md
  82. 6
      subjects/advancedsortwordarr.en.md
  83. 6
      subjects/advancedsortwordarr.fr.md
  84. 2
      subjects/alphamirror.en.md
  85. 2
      subjects/alphamirror.fr.md
  86. 6
      subjects/any.en.md
  87. 6
      subjects/any.fr.md
  88. 6
      subjects/appendrange.en.md
  89. 6
      subjects/appendrange.fr.md
  90. 10
      subjects/atoi.en.md
  91. 10
      subjects/atoi.fr.md
  92. 6
      subjects/atoibase.en.md
  93. 18
      subjects/atoibase.fr.md
  94. 6
      subjects/basicatoi.en.md
  95. 6
      subjects/basicatoi.fr.md
  96. 6
      subjects/basicatoi2.en.md
  97. 8
      subjects/basicatoi2.fr.md
  98. 6
      subjects/basicjoin.en.md
  99. 6
      subjects/basicjoin.fr.md
  100. 19
      subjects/brackets.en.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/)

190
docs/event-management.md

@ -0,0 +1,190 @@
# 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
> 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.
| 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="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.)
#### Edit the children
> 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.
##### 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.
> 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_
```json
{
"capacity": 400,
"eventDuration": 37440,
"registrationDuration": 43200,
"eventStartDelay": 240
}
```
This piscine object attributes look like this:
![piscine-object-attributes](img/piscine-object-attributes.png)
_Children_
> 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:
```json
{
"startAfter": 8160
}
```
This child attributes look like this:
![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_
```json
{
"eventDuration": 240,
"registrationDuration": 2160,
"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](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="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.
> 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
### 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="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**.
- **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.
#### Registration
<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.
#### Event
<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.
#### Children (facultative)
<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.

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

BIN
docs/img/usb-configuration/1.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 73 KiB

BIN
docs/img/usb-configuration/2.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 74 KiB

BIN
docs/img/usb-configuration/3.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 56 KiB

BIN
docs/img/usb-configuration/4.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 67 KiB

BIN
docs/img/usb-configuration/5.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 47 KiB

BIN
docs/img/usb-configuration/6.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 65 KiB

BIN
docs/img/usb-configuration/7.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 76 KiB

BIN
docs/img/usb-configuration/8.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 84 KiB

BIN
docs/img/usb-configuration/9.png

diff.bin_not_shown

After

Width:  |  Height:  |  Size: 63 KiB

142
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,17 +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 **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
@ -213,14 +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"
}
}
```
This 'document to sign' step would look like this:
NB : `target` & `download` are forwarded to the a html element as they are valid html properties
![document to sign step example](https://user-images.githubusercontent.com/35296671/56504782-8f079900-6511-11e9-9a0e-bb638b6d7d03.png)
This 'document to sign' step would look like this:
![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:/#
```

44
docs/usb-configuration.md

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

3
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'
@ -115,7 +116,7 @@ ambient-enabled=false
[org/gnome/shell]
enable-hot-corners=true
favorite-apps=['firefox.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Terminal.desktop', 'sublime_text.desktop', 'vscodium.desktop', 'org.gnome.Calculator.desktop', 'gnome-control-center.desktop', 'org.gnome.tweaks.desktop', 'lock_screen.desktop', 'suspend_session.desktop', 'yelp.desktop']
favorite-apps=['firefox.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Terminal.desktop', 'sublime_text.desktop', 'codium.desktop', 'org.gnome.Calculator.desktop', 'gnome-control-center.desktop', 'org.gnome.tweaks.desktop', 'lock_screen.desktop', 'suspend_session.desktop', 'yelp.desktop']
[org/gnome/system/location]
enabled=false

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

64
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
@ -38,6 +47,7 @@ apt-get -y autoremove --purge
. fx.sh
. sublime.sh
. vscode.sh
. libreoffice.sh
# Install additional packages
PKGS="
@ -60,23 +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
PART=$(lsblk -pro kname,partlabel | grep 01-tmp-system | cut -d' ' -f1)
sed -i -e "s|::PART::|$PART|g" usr/share/initramfs-tools/scripts/init-premount/reformat
apt-get -y install overlayroot
echo overlayroot=\"device:dev=$PART,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

9
scripts/libreoffice.sh

@ -0,0 +1,9 @@
#!/bin/bash
# Install VSCode
SCRIPT_DIR="$(cd -P "$(dirname "$BASH_SOURCE")" && pwd)"
cd $SCRIPT_DIR
. set.sh
apt-get -y install libreoffice

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

47
scripts/system/etc/gdm3/PostLogin/Default

@ -25,39 +25,24 @@ PS4='-\D{%F %T} '
# Print commands and their arguments as they are executed.
set -x
sleep 0.5
# Find the removable F2FS partition
PART=$(lsblk -pro kname,partlabel | grep 01-home | cut -d' ' -f1)
# Make sure the mountpoints are free
(
lsof -t $HOME | xargs kill -9
umount $HOME
umount /mnt
) || true
if test "$PART"
then
mount -o noatime "$PART" /mnt
kill $(lsof -t "$HOME" /mnt) ||:
umount "$HOME" /mnt ||:
if test -e /dev/disk/by-partlabel/01-home; then
mount -o noatime /dev/disk/by-partlabel/01-home /mnt
else
# No removable F2FS partition found
PART=$(lsblk -pro kname,partlabel | grep 01-tmp-home | cut -d' ' -f1)
if test -z "$PART"
then
# No local partition found, error
exit 1
fi
# We don't care about data consistency since the partition is temporary
/sbin/mke2fs -t ext4 -O ^has_journal -F "$PART"
mount -o noatime,nobarrier "$PART" /mnt
# Fails if no local partition is found
test -e /dev/disk/by-partlabel/01-tmp-home || exit 1
# We don't care about data consistency since the partition is temporary so disable journaling
/sbin/mke2fs -t ext4 -O ^has_journal -F /dev/disk/by-partlabel/01-tmp-home
mount -o noatime,nobarrier /dev/disk/by-partlabel/01-tmp-home /mnt
fi
USER_PATH=/mnt/.01/$USER
TEMP_PATH=/mnt/.01/tmp
user_path=/mnt/.01/user
temp_path=/mnt/.01/tmp
mkdir -p $USER_PATH $TEMP_PATH
chown -R $USER:$USER $USER_PATH $TEMP_PATH
mount -t overlay -o lowerdir=$HOME,upperdir=$USER_PATH,workdir=$TEMP_PATH overlay $HOME
mkdir -p "$user_path" "$temp_path"
chown -R "$USER":"$USER" "$user_path" "$temp_path"
mount -t overlay -o lowerdir="$HOME",upperdir="$user_path",workdir="$temp_path" overlay "$HOME"

14
scripts/system/etc/gdm3/PostSession/Default

@ -16,9 +16,11 @@ PS4='-\D{%F %T} '
# Print commands and their arguments as they are executed.
set -x
passwd -d $USER
sync
sleep 0.5
lsof -t $HOME | xargs kill || true
umount -l $HOME
umount -l /mnt
passwd -d "$USER" ||:
systemctl stop user@1000.service
# Make sure the mountpoints are free
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

2
scripts/system/usr/share/initramfs-tools/scripts/init-premount/reformat

@ -15,6 +15,6 @@ esac
. /scripts/functions
/bin/mke2fs -F -t ext4 -O ^has_journal ::PART:: > /dev/null 2>&1
/bin/mke2fs -F -t ext4 -O ^has_journal /dev/disk/by-partlabel/01-tmp-system > /dev/null 2>&1
exit 0

3
scripts/ubuntu_tweaks.sh

@ -39,6 +39,7 @@ swapoff /swapfile || true
rm -f /swapfile
sed -i '/swapfile/d' /etc/fstab
# Purge unused Ubuntu packages
PKGS="
apport
@ -87,7 +88,6 @@ systemctl disable $SERVICES
SERVICES="
grub-common.service
NetworkManager-wait-online.service
plymouth-quit-wait.service
"
systemctl mask $SERVICES
@ -104,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$
```

16
subjects/addprimesum.en.md

@ -2,19 +2,19 @@
### Instructions
Write a program that takes a positive integer as argument and displays the sum of all prime numbers inferior or equal to it followed by a newline.
Write a program that takes a positive integer as argument and displays the sum of all prime numbers inferior or equal to it followed by a newline(`'\n`').
- If the number of arguments is not 1, or if the argument is not a positive number, the program displays 0 followed by a newline.
- If the number of arguments is different from 1, or if the argument is not a positive number, the program displays `0` followed by a newline.
Examples of outputs :
### 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$
```

16
subjects/addprimesum.fr.md

@ -2,19 +2,19 @@
### Instructions
Write a program that takes a positive integer as argument and displays the sum of all prime numbers inferior or equal to it followed by a newline.
Écrire un programme qui prend un entier positif comme argument et qui affiche la somme de tous les nombres premiers inférieurs ou égaux à celui-ci, suivie d'un newline(`'\n`').
- If the number of arguments is not 1, or if the argument is not a positive number, the program displays 0 followed by a newline.
- Si le nombre d'arguments est différent de 1, ou si l'argument n'est pas un nombre positif, le programme affiche `0` suivi d'un newline.
Examples of outputs :
### 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$
```

2
subjects/alphamirror.en.md

@ -13,7 +13,7 @@ The case of the letter stays the same, for example :
The final result will be followed by a newline(`'\n'`).
If the number of arguments is not 1, the program displays only a newline(`'\n'`).
If the number of arguments is different from 1, the program displays only a newline(`'\n'`).
### Usage

2
subjects/alphamirror.fr.md

@ -11,7 +11,7 @@ Les majuscules restent des majuscules, de même pour le minuscules, par exemple
Le résultat final sera suivi d'un newline(`'\n'`).
Si le nombre d'arguments n'est pas 1, le programme affiche seulement un newline(`'\n'`).
Si le nombre d'arguments est différent de 1, le programme affiche seulement un newline(`'\n'`).
### Utilisation

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$
```

10
subjects/atoi.en.md

@ -4,13 +4,13 @@
- Write a [function](TODO-LINK) that simulates the behaviour of the `Atoi` function in Go. `Atoi` transforms a number represented as a `string` in a number represented as an `int`.
- Atoi returns `0` if the `string` is not considered as a valid number. For this exercise **non-valid `string` chains will be tested**. Some will contain non-digits characters.
- `Atoi` returns `0` if the `string` is not considered as a valid number. For this exercise **non-valid `string` chains will be tested**. Some will contain non-digits characters.
- For this exercise the handling of the signs + or - **does have** to be taken into account.
- This function will **only** have to return the `int` `nbr`. For this exercise the `error` return of atoi is not required.
### Format required
### Expected function
```go
func Atoi(s string) int {
@ -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$
```

10
subjects/atoi.fr.md

@ -2,9 +2,9 @@
### Instructions
- Écrire une fonction qui reproduit le comportement de la fonction atoi en Go. Atoi transforme un nombre représenté en `string` (chaîne de caractères) en `int` (entier).
- Écrire une fonction qui reproduit le comportement de la fonction `Atoi` en Go. `Atoi` transforme un nombre représenté en `string` (chaîne de caractères) en `int` (entier).
- Atoi retourne `0` si la `string` n'est pas considéré un nombre valide. Pour cet exercice des **`string` non valides seront testées!**. Certaines contiendront d'autres charactères que des chiffres.
- `Atoi` retourne `0` si la `string` n'est pas considéré un nombre valide. Pour cet exercice des **`string` non valides seront testées!**. Certaines contiendront d'autres caractères que des chiffres.
- Pour cet exercice la gestion des signes + ou - **doit être** prise en compte.
@ -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$
```

18
subjects/atoibase.fr.md

@ -2,15 +2,15 @@
### Instructions
Écrire une fonction qui prend un nombre `string` et sa base `string` en paramètres et retournes sa convertion en `int`.
Écrire une fonction qui prend un nombre `string` et sa base `string` en paramètres et retourne sa conversion en `int`.
Si la base n'est pas valide elle retournes `0`:
Si la base n'est pas valide elle retourne `0`:
Régles de validité d'une base :
Règles de validité d'une base :
- Une base doit contenir au moins 2 charactères.
- Chaque charactère d'une base doit être unique.
- Une base ne doit pas contenir les charactères `+` ou `-`.
- Une base doit contenir au moins 2 caractères.
- Chaque caractère d'une base doit être unique.
- Une base ne doit pas contenir les caractères `+` ou `-`.
Seuls des nombres en `string` valides seront testés.
@ -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$
```

8
subjects/basicatoi2.fr.md

@ -4,7 +4,7 @@
- Écrire une fonction qui reproduit le comportement de la fonction atoi en Go. Atoi transforme un nombre représenté en `string` (chaîne de caractères) en `int` (entier).
- Atoi retourne `0` si la `string` n'est pas considéré un nombre valide. Pour cet exercice des **`string` non valides seront testées!**. Certaines contiendront d'autres charactères que des chiffres.
- Atoi retourne `0` si la `string` n'est pas considérée comme un nombre valide. Pour cet exercice des **`string` non valides seront testées!**. Certaines contiendront d'autres caractères que des chiffres.
- Pour cet exercice la gestion des signes + ou - ne doit pas être prise en compte.
@ -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$
```

19
subjects/brackets.en.md

@ -2,23 +2,20 @@
### Instructions
Write a program that takes an undefined number of strings in arguments. For each
argument, the program prints on the standard output "OK" followed by a newline
if the expression is correctly bracketed, otherwise it prints "Error" followed by
Write a program that takes an undefined number of `strings` in arguments. For each
argument, if the expression is correctly bracketed, the program prints on the standard output `OK` followed by a newline(`'\n'`), otherwise it prints "Error" followed by
a newline.
Symbols considered as `brackets` are brackets `(` and `)`, square brackets `[`
and `]`and braces `{` and `}`. Every other symbols are simply ignored.
Symbols considered as `brackets` are parentheses `(` and `)`, square brackets `[`
and `]` and curly braces `{` and `}`. Every other symbols are simply ignored.
An opening bracket must always be closed by the good closing bracket in the
correct order. A string which do not contains any bracket is considered as a
correctly bracketed string.
If there is no arguments, the program must print only a newline.
correct order. A `string` which does not contain any bracket is considered as a
correctly bracketed `string`.
If there is no argument, the program must print only a newline.
Examples of outputs :
### Usage
```console
student@ubuntu:~/student/brackets$ go build

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

Loading…
Cancel
Save