« STIC:STIC I - Atelier technique 1 » : différence entre les versions

De EduTech Wiki
Aller à la navigation Aller à la recherche
 
(105 versions intermédiaires par 7 utilisateurs non affichées)
Ligne 4 : Ligne 4 :
== Programme ==
== Programme ==


Au programme (peut changer) :
Au programme :


* Introduction du [[STIC:STIC II - projet webmaster | projet Webmaster]] (évalué dans le cadre du cours STIC II)
* Introduction aux [[STIC:Ateliers techniques|ateliers techniques]] et leur intégration avec le domaine STIC (STIC I et STIC II)
* Ligne de commande
* Retour et extension de l'[[Introduction à la programmation]]
* Git/GitHub
* Activité de pseudo-codage
* Permission fichier sur serveur distant (s'il reste du temps)
* Introduction à [[JavaScript]] en prévision du cours STIC I de vendredi


== Projet Webmaster ==
== Ateliers techniques ==


Pour toute information voir :
Présentation des ateliers et leur utilité par rapport au domaine STIC ainsi que le Master MALTT plus en général :
* {{Goblock|[[STIC:STIC II - projet webmaster]]}}


En bref :
* '''Interaction entre compétences techniques et pédagogiques'''
** Les ateliers vous préparent d'un point de vue technique pour mieux exploiter les compétences/connaissances pédagogiques et centrées utilisateur/apprenant que vous acquérez dans les différents domaines du MALTT.
* '''Mettre en place un dispositif pédagogique de A à Z'''
** La combinaison entre ateliers techniques et STIC I et STIC II vous permet de mettre en place un dispositif pédagogique dans toutes les étapes : installation, configuration, déploiement, maintient, ...
* '''Outils de collaboration et de partage'''
** Découverte de plateforme et logiciels open-source que vous pouvez utiliser ou auxquels vous pouvez contribuer dans une perspective de collaboration et intelligence collective


* Travail qui sera évalué dans le cadre de l'ex16 du cours STIC II (fin de la première année)
== Introduction à la programmation ==
* Ce n'est pas un projet comme dans le sens des cours ERGO II, VIP II, ...
* Types de projets possibles :
*# '''Default''' : Installation et configuration d'un portail web (e.g. [[Word_press]], [[Moodle]], [[Mediawiki]])
*# '''Alternatif''' : Développement d'un site/application full stack (front-end + back-end) avec JavaScript (voir [[Node.js]], [[Express.js]], [[Socket.io]])
*# D'autres projets peuvent être envisagées (e.g. logiciel desktop avec [[Electron]], Internet/Web of things, etc.). Vous pouvez nous soumettre votre idée de projet.


Les ateliers techniques vous proposent des techniques/outils pour mener à bien ce(s) projet(s).
Retour sur :


=== Tâche pour le prochain Atelier ===
* {{Goblock | [[Introduction à la programmation]] }}


Réfléchir sur une idée de projet à développer pour le projet Webmaster. Pour inspiration voir les projets des étudiants des autres volées :
=== I/O et Computation ===


* Exercice 16 volée Wall-e
Schéma de base de la programmation :
* Exercice 14 ou Projet Webmaster pour les volées précédentes


'''Attention : pour des raisons de sécurité les projets webmaster des étudiants sont accessibles seulement sur le réseau de l'UNIGE ou via VPN'''
[[Fichier:R general functioning.png|800px|vignette|néant| Articulation entre Input, Computation et Output]]


== Ligne de commande ==
Avec les interfaces graphiques, ce schéma est mise à jour ''presqu'en temps réel'', ce qui rend la distinction plus difficile à saisir. Par exemple, quand vous tapez dans Word, il n'y a pratiquement pas de temps de latence entre input et output, et l'input correspond déjà beaucoup à l'output. Cependant, ce cycle est toujours présent et arriver à le saisir permet de mieux comprendre (et exploiter) le fonctionnement des dispositifs numériques. Voir par exemple :


=== Logiciel ===
{{ Goblock | [https://mafritz.ch/slides/fr/computation-avec-js/#/4 Computation des lettres] }}
Utilisation d'un logiciel pour accéder à la ligne de commande. '''Attention''' : l'utilisation de la ligne de commande peut générer des opérations irréversibles !


Logiciels :
=== ''F''(X) = Y ===


* Pour Windows utiliser [https://fr.wikipedia.org/wiki/Windows_PowerShell Windows PowerShell] en local et [http://www.putty.org/ PuTTY] pour le serveur distant
La computation consiste à formuler une '''fonction''' (dans le sens abstrait) qui ''mappe'' le input et le transforme en output.
* Pour Mac utiliser le [http://www.osxfacile.com/terminal.html Terminal]
* Pour Linux utiliser l’une des lignes de commandes disponibles selon la version.


Les commandes que nous allons voir par la suite fonctionnent sur toutes les plateformes, mais ce n'est pas toujours le cas, et même parmi les commandes illustrés par la suite il y a des différences entre Windows vs. Mac/Linux.
[[Fichier:IntroProgrammation fxy simple.png|800px|vignette|néant|''F''(X) = Y]]


=== Position actuelle ===
Cette ''fonction abstraite'' est le résultat de plusieurs ''petites'' fonctions qui travaillent en collaboration pour faire émerger une fonctionnalité plus large, comme par exemple un logiciel, une application, un ''learning management system'', un jeu, etc.


Lorsque vous utilisez la ligne de commande, '''faites toujours attention à la position actuelle dans le système''', que ce soit en local ou sur un serveur distant.
=== Numérique / ''Digital'' ===


[[Fichier:Node.js command position actuelle.png|none|thumb|600x600px|Toujours bien vérifier la position actuelle (i.e. le path) lorsqu'on utilise la ligne de commande. ]]
Tout est fait grâce au codage et encodage du :


Pour récupérer votre position actuelle si elle n'est pas visible, utilisez :
* Input
* Output
* '''Et des instructions...'''


pwd
en code binaire.


C'est l'acronyme de "Print Working Directory".
[[Fichier:IntroProgrammation fxy.png|800px|vignette|néant|Programmer signifie traduire les intentions du développeur afin que la machine les exécute conformément aux attentes. Adaptation de Denning & Martell (2015, p. 90, Fig. 5-3) ]]


=== Commandes principales ===
Cette étape est encore une fois ''cachée'' pour la plupart du temps, mais elle est déterminante sur deux versants qui s'influencent mutuellement :


Il y a eu un effort dans les dernières années pour uniformer certaines commandes dans les différentes plateforme (Win vs. Unix). Les commandes listées par la suite fonctionnent généralement sur tous les systèmes :
* '''Technique'''
*: On détermine qu'est-ce qu'on peut encoder, transformer et décoder, ainsi que comment encoder, transformer et décoder de l'information. Ce passage a notamment des implications sur la puissance computationnelle et les composantes ''hardware'' nécessaires, avec notamment des répercussions écologiques importantes. L'introduction d'objets connectées, de la robotique ou la conception et fabrication assistée par ordinateur élargie également les options de input et output à notre disposition.
* '''Sémantique'''
*: On détermine pourquoi certains informations ''méritent'' d'être encodées, transformées et décodées. Par exemple, en tant que ''instructional designer'', vous pouvez décider qu'un chapitre d'un livre puisse être résumé :
*:* Dans un document issue d'un logiciel de traitement de texte
*:* Dans un podcast audio
*:* Dans une présentation audio/vidéo
*:* Dans une page Wiki
*:* Dans une carte conceptuelle
*:* ...
*: Votre choix est guidé à la fois par des principes pédagogiques qui essaient de maximiser l'apprentissage du contenu du chapitre, mais également par les différentes techniques que vous avez à disposition, ou que vous aimeriez avoir à disposition !


;Changer de dossier
{{ bloc important | L'''algorithmisation/digitalisation'' d'information n'est jamais neutre, elle représente des opinions qui sont traduites en code informatique ! }}


cd
=== Concepts trop abstraits sans la pratique ===


C'est l'acronyme de Change Directory. On utilise cette commande avec des chemins absolus ou relatifs à la position actuelle.
Réussir à reconduire ces aspects très abstraits à des concepts concret qu'on puisse comprendre est très difficile, voir impossible sans la pratique. On va effectuer deux types de pratiques pour essayer de rendre ces concepts moins abstraits :


Vous pouvez faire référence aux différents niveaux de l'arborescence par rapport à la position actuelle avec les notations suivantes :
# Activité débranchée de pseudo-codage
# Activité de codage avec [[JavaScript]]


* <code>./</code> fait référence au dossier actuel
Les concepts valables pour JavaScript peuvent être ensuite transférés sur des applications web comme [[WordPress]], [[Mediawiki]] ou [[Moodle]] qui permettent de faire abstraction du niveau ''micro'' de la programmation, et se concentrer plus sur des aspects d'organisation et de scénarisation pédagogique du traitement (technique et cognitif) de l'information.
** '''attention''' à ne pas confondre avec <code>/</code> (sans point) qui fait référence à la '''racine de votre système''' où se trouvent des fichiers importants !
* <code>../</code> fait référence à un niveau supérieur
* <code>../../</code> fait référence à deux niveaux supérieurs
* etc.
* <code>~</code> fait référence au dossier utilisateur (dont la position peut varier selon le système d'exploitation).


Examples :
== Activité pseudo-code ==


* <code>cd documents</code>
Deux activités liées au pseudo-codage
* <code>cd ../stic-1/ex1/</code>
* <code>cd ~/Documents</code>
* <code>cd /home</code>


Hint:
=== Pseudo-coder un jeu ===


* vous pouvez vous aider avec la touche TAB pour complèter des noms des fichiers très longs. Cette pratique s'applique à toutes les commandes
Par groupes de 3-4 personnes, choisissez un jeu très simple et essayez de le définir en '''''pseudo-code''''' en vous inspirant de l'[[Introduction à la programmation#Les_fonctions|exemple du jeu du morpion]] dans la page [[Introduction à la programmation]]. Exemples de quelques jeux possibles :
* vous pouvez trainer un dossier depuis votre gestionnaire de fichiers dans le terminal de commande pour faire apparaître son chemin
* pour windows seulement : quand vous êtes au bon chemin dans votre gestionnaire de fichiers appuyez sur les touches <code>Ctrl + l</code> (comme lausanne) et tapez <code>powershell</code> dans la barre de l'adresse.


; Lister les fichiers
* Le pendu
 
* ''Guess my number''
ls
* Le jeu de la valise
 
* Pierre-papier-ciseaux
On utilise cette commande pour afficher une liste de dossiers/fichiers existants à un chemin donné. Si la commande n'a pas d'argument, la position actuelle sera prise en compte. Si non, il est possible de fournir :
 
* Un chemin absolu ou relatif, e.g. <code>ls /home</code> va lister tous les éléments contenu dans le dossier home qui se trouve à la racine du système
* Un critère de selection, e.g. <code>ls *.png</code> va lister tous les fichiers qui terminent avec .png
 
; Créer un dossier
 
mkdir nom-du-dossier
 
C'est l'acronyme de Make Directory. On utilise cette commande pour créer un nouveau dossier à un chemin donné (dans la position actuelle si on spécifie juste le nom du nouveau dossier).
 
Examples :
 
* <code>mkdir my-new-folder</code>
* <code>mkdir ~/Documents/atelier-webmaster</code>
 
; Copier un fichier/dossier
 
cp chemin-du-fichier-existant chemin-de-la-nouvelle-copie
 
On utilise cette commande pour créer une copie d'un fichier existant et la placer dans un autre endroit.
 
Examples :
 
* <code>cp documents documents-old</code>
* <code>cp file.txt /home/backup/file.txt</code>
 
; Déplacer un fichier/dossier
 
mv chemin-du-fichier-actuel nouveau-chemin-du-fichier
 
On utilise cette commande d'une manière similaire à <code>cp</code> avec la différence que le fichier lui-même sera déplacé à un nouveau endroit.
 
Examples :
 
* <code>mv stic-1/ex12/ stic-2/ex12/</code>
 
; Détruire des fichiers/dossiers
 
Il existe des commandes également pour détruire des fichiers/dossiers mais on les verra pas ici. Ces commandes sont en effet irreversibles (i.e. les fichiers ne sont pas mis dans la corbeille).
 
== Git/GitHub ==
 
Git (logiciel de gestion de version en local) et GitHub (extension online de Git) sont des outils qui sont très utilisés à présent et leur connaissance, au moins au niveau de base, peut être utile à plusieurs niveaux. En effet, ils ne sont pas utilisés exclusivement pour la programmation, mais également pour :
 
* Maintenir un site web
** voir [https://pages.github.com/ GitHub Pages]
* Écrire/maintenir de la documentation online
* Écrire des livres
* Mettre à disposition du matériel d'un cours (online)
* Créer une classe virtuelle avec des devoirs qui prévoient du codage
** voir [https://education.github.com/ GitHub Education]
** voir [https://classroom.github.com/ GitHub Classroom]
* Découvrir des projets existants et créer des liens avec d'autres personnes actives dans les projets
** voir [https://help.github.com/articles/be-social/ Be Social]
** voir [https://github.community/ GitHub Community Forum]
* ...
 
En plus, la participation dans des projets open-source disponibles sur GitHub ne se limite pas à l'écriture du code. Les projets recherchent souvent d'autres type de participation tels que :
 
* La gestion du projet
* Collecter/répondre aux "Issues" soulevées par les utilisateurs
* Tester/débugger les projets
* Corriger l'orthographe
* ...
* ...


=== Présentation ===
Une fois le jeu choisi :
 
[[Fichier:Git et GitHub dans un projet open-source.png|800px|vignette|néant|Git et GitHub dans un projet open-source]]
 
; À retenir :
 
* Git = système de version de fichiers en local. Vous pouvez travailler sur plusieurs versions de votre projets :
** Créer des "branches" pour tester des nouvelles fonctionnalités
** Revenir à une version précédente si quelque chose ne marche pas correctement
** ...
* GitHub = plateform de développement collaborative pour projets
** Vous pouvez travailler à plusieurs sur le même projet/repository
** Les projets peuvent être publics (default) ou privés (versions payante)
** Les projets peuvent être open-source ou pas
** Attention à ne pas confondre public = open-source et privé = non open-source, c'est la '''licence''' qui détermine le type de projet
 
; À savoir :
 
* On peut utiliser Git sans GitHub, mais c'est difficile de pouvoir utiliser GitHub sans Git (quoi que possible si on travail juste avec l'interface du site)
* On peut utiliser Git avec d'autres services online, e.g. :
** [https://bitbucket.org/ BitBucket]
** [https://www.visualstudio.com/fr/team-services/ Visual Studio Team Services]
* On peut utiliser Git et GitHub avec n'importe quel type de projet/fichier (pas que développement web)
 
; À éviter :


* '''Évitez''' de créer des projets/repository Git dans de dossiers locaux qui sont liés à un système de synchronisation de données (e.g. Dropbox, OneDrive, Google Drive)
# Essayez de formaliser le jeu dans des instructions '''les plus précises''' possibles, en utilisant un pseudo-langage que vous pouvez convenir vous-mêmes à l'intérieur du groupe (e.g. plus ou moins proche déjà d'un ''vrai'' langage de programmation).
* Faites attention à ne pas publier des données sensibles. Par exemple si vous publiez par erreur un mot de passe, pensez à le modifier tout de suite, il ne suffit pas de le faire disparaître de GitHub (entretemps quelqu'un peut l'avoir vu ou il peut rester dans la cache, etc.) - voir  [https://help.github.com/articles/removing-sensitive-data-from-a-repository/ Removing sensitive data from a repository]
# Partagez les instructions que vous avez créées dans le forum des activité de l'espace Moodle de l'Atelier technique.


=== Installation des logiciels ===
Vous pouvez voir la complexité d'un jeu en ''vrai'' code JavaScript (il existe toujours différentes manières pour implémenter un algorithme) dans [https://github.com/MALTT-STIC/stic-1-computation-with-javascript/blob/master/04-tic-tac-toe/01-tic-tac-toe-console.js l'exemple du jeu du morpion pour la console JavaScript].


==== Git ====
=== Créer un méta-pseudo-codage ===


# Installez le logiciel git depuis le site officiel : https://git-scm.com/
Suite au pseudo-codage d'un jeu spécifique, essayez de créer un pseudo-code qui peut fonctionner pour plusieurs jeux en même temps : une sorte de méta-pseudo-codage.
#* Suivre les instructions [[Git_et_Github#Installer_Git]]
# Il faudra configurer Git à travers la ligne de commande
#* '''Attention''' : utilisez le nom d'utilisateur et l'adresse email que vous avez utilisé pour créer votre account GitHub


; Nom d'utilisateur
Quelques conseils :


git config --global user.name "''votre username GitHub''"
# Essayez de trouver des patterns, des régularités dans les jeux
# Transformez ces régularités dans des instructions
# Formulez les instructions de manière à pouvoir les combiner entre elles


; Email
Si l'activité est trop abstraite, essayez de réduire à une catégorie de jeu plus spécifique.


git config --global user.email ''votre-email-account-github@domain.com''
== Introduction à JavaScript ==


Ces configurations vont permettre par la suite de reconnaître vos contributions, par exemple dans un projet commun.
[[JavaScript]] est un langage de scripting, qui nécessite donc un interpréteur. L'interpréteur peut se trouver à différents endroits, ou '''environnements''', dont le plus commun est le moteur JavaScript qui se trouve dans votre navigateur.


==== Optionnel : Git dans éditeur de texte ====
[[Fichier:JavaScript trois niveau js.png|néant|thumb|500px|Les trois niveaux du code JavaScript.]]


Il y a la possibilité d'ingérer git directement dans des éditeurs de texte, par exemple :
On peut diviser la programmation en deux niveaux :


* Installer [https://github.com/zaggino/brackets-git extension pour utiliser Git] directement dans [[Brackets]] ('''ça marche mais pas idéal''')
# '''Le langage de ''base'''''
* Installer [[Visual studio code]] qui a déjà Git intégré ('''préférable''' si vous comptez utiliser sérieusement Git)
#: Il est utile surtout pour le traitement de l'information (voir [[Tutoriel JavaScript de base]] et [[Computation avec JavaScript]] pour une référence). Sujet de cet Atelier.
** [https://code.visualstudio.com/Download Lien direct pour le download]
#:
# '''L'environnement'''  
#: Il détermine les possibilités d'échange en terme de I/O pour le traitement de l'information. Sujet de vendredi et du reste de STIC en relation avec l'[[interactivité avec JavaScript]] et le [[Tutoriel JavaScript côté client]]


==== GitHub ====
Le '''code source''', c'est-à-dire toutes les instructions qui forment un programme ou une application, est le résultat de l'intégration entre le langage de ''base'' et l'environnement.


# Créer un account sur le site https://github.com/ si pas fait lors de l'atelier [[MINIT]]
=== Le langage de ''base'' ===


==== GitHub Desktop ====
{{ Goblock | [https://mafritz.ch/slides/fr/computation-avec-js/ Slides sur la computation avec JavaScript] }}


# Installez GitHub Desktop https://desktop.github.com/
Le langage de base se divise en deux grandes catégories :


Documentation logiciel : https://help.github.com/desktop/guides/
# '''Les éléments littéraires''' : ils consistent dans l'introduction dans la logique de l'application d'informations (mots, chiffres, ....) d'intérêt pour les finalités de l'application
# '''Les éléments symboliques''' : ils consistent dans des ''références'' qui permettent à l'application d'effectuer les opérations nécessaires au processus de Input/Output. Les éléments symboliques se divisent en deux catégories :
#* '''Les éléments symboliques conventionnels''' : il s'agit d'éléments ''réservés'' par le langage, comme par exemple des mots clés ou des fonctions qui sont déjà mises à disposition par le langage
#* '''Les éléments symboliques arbitraires''' : il s'agit des choix des développeurs qui décident d'appeler un certain élément d'une certaine manière afin de l'utiliser de manière sémantique dans la logique de l'application


=== Activités prévues ===
En combinant éléments littéraires et symboliques, le langage de ''base'' a principalement trois fonctions :


====Tutoriel interactif====
# '''Identifier et stocker les données à travers des références symboliques'''
#: En JavaScript ceci se fait normalement à travers des variables ou des constantes :
#: <syntaxhighlight  lang="JavaScript">
// Affecter une variable
var score_actuelle = 156;


Bon tutoriel initial disponible directement dans le navigateur sur le site de GitHub. Suivre toutes les étapes :
//Définir une constante
const score_pour_gagner = 2000;


* {{Goblock|[https://try.github.io/levels/1/challenges/1 Git Tutorial - Try Git]}} sur le site GitHub.com
// Quel type de donnée ?
typeof score_actuelle
</syntaxhighlight>
#: Pour des données plus articulées, on peut utiliser des structures des données comme les arrays ou les objects
#: <syntaxhighlight  lang="JavaScript">
// Array simple
var countries = ["France", "Italy", "Switzerland", "Canada", "Nigeria", "China"];


==== Création d'un projet sur GitHub et le cloner avec GitHub Desktop ====
countries[2]; // Donne "Switzerland" car on commence à compter depuis 0


Créer un répositoire sur GitHub.com qui simule un projet public/open-source, cela permet de voir :
// Object
var stic_1 = {
  name: "Sciences et Technologies de l'Information et de la Communication I",
  short: "STIC I",
  semester: "A",
  credits: 6
}


* Utilisation du site [https://github.com GitHub.com]
stic_1.short; //Donne "STIC I"
* Utilisation de GitHub pour Desktop
</syntaxhighlight>
#:
# '''Fournir ou créer des procédures pour traiter les données'''
#: En JavaScript ceci se fait normalement à travers des fonctions
#: <syntaxhighlight  lang="JavaScript">
// Exemple générique
function myProcedure(input) {
  //Do something
  var output = input + " transformation";
  return output;
}


Pour plus d'info voir
// Inverser l'ordre des lettres d'un mot
function reverseWord(word) {
  return word.split('').reverse().join('');
}


* {{Goblock|[https://guides.github.com/activities/hello-world/ Hello World example sur GitHub.com]}}
reverseWord("STIC"); //Donne "CITS"
</syntaxhighlight>
#:
# '''Fournir des méta-éléments qui déterminent l'exécution du code'''
#: Par exemple :
#:* <syntaxhighlight  lang="JavaScript">
// Les boucles
for (let i = 0; i < 10; i++) {
  console.log(i);
}
</syntaxhighlight>
#:* <syntaxhighlight  lang="JavaScript">
// Les structures de contrôle
if (new Date().getHours() < 12) {
  console.log("Good morning!");
} else {
  console.log("Good afternoon!");
}
</syntaxhighlight>


; Première étape - Créer le projet sur GitHub.com
=== Utilisation de la Console JavaScript ===
Suivre les étapes suivantes :


# Sur le site GitHub.com, lorsque vous avez fait le login, cliquez sur le <code>+</code> et choisissez <code>New repository</code>
{{bloc important | Pour tester le code, faites du copier/coller dans la console du navigateur }}
# Saisissez les données requises (à vous de choisir des informations saillantes pour un potentiel projet open-source) en faisant attention à :
#* Cochez l'option '''Initialize this repository with a README'''
#* Choisir une option dans le menu déroulant '''Add a license''' (voir [https://choosealicense.com/ une page qui vous aide à choisir], si non vous pouvez mettre MIT pour cet exemple)
#*: [[Fichier:GitHub création d'un projet avec README et Licence.png|600px|vignette|néant|Création d'un projet avec README et Licence]]
# Cliquez sur <code>Create repository</code>, vous êtes redirigés sur la page de votre projet qui doit ressembler à celle-ci :
#: [[Fichier:GitHub page d'un projet créé.png|600px|vignette|néant|Page d'un projet créé à travers le site GitHub.com]]


Si vous cliquez sur le fichier LICENSE vous pouvez voir les détails des droits que vous avez spécifié pour votre projets.
Pour utiliser la Console :


; Deuxième étape - Cloner le projet sur votre ordinateur avec GitHub Desktop
* Internet Explorer : Menu Outils > Outils de développement (ou F12)
Suivre les étapes suivantes :
* Firefox : le scratchpad (SHIFT F4), sinon la console (F12) qui permet d'entrer une ligne.
* '''Chrome : Menu Outils > Console JavaScript (ou F12)'''
* Safari : D'abord dans les Options > Avancées cocher la case "Afficher le menu Développement dans la barre des menus", puis CTRL+Alt+I ou CTRL+Alt+C
* Opera: Menu Page > Outils de Développement > Opera Dragonfly (ou CTRL+Shift+I)


# Ouvrez le logiciel GitHub Desktop
[[Fichier:JavaScript tutoriel base console error.jpg|thumb|800px|none|Console des erreurs en Google Chrome]]
# Si vous l'ouvrez pour la première fois, il vous faudra vous loguer et confirmer les informations pour Git (Nom et Email)
# Ensuite cliquez sur le bouton <code>Clone a repository</code> ou faites <code>File > Clone repository...</code> si vous ne l'avez pas
# Choisissez le projet que vous venez de créer, décidez à quel endroit le mettre sur votre ordinateur et cliquez sur <code>Clone</code>
#: [[Fichier:GitHub Desktop cloner un projet en local.png|600px|vignette|néant|Cloner un projet en local avec GitHub Desktop]]
# Ouvrez le dossier en local avec votre Gestionnaire de fichiers, vous devez voir :
#* Un dossier caché qui s'appelle .git (si vous ne le voyez pas cherchez sur internet comment afficher les fichiers cachés dans votre ordinateur)
#* Le fichier LICENSE
#* Le fichier README.md
# Créez un fichier quelconque à l'intérieur de ce dossier (par exemple un fichier qui s'appelle first-contribution.txt)
# Revenez dans GitHub Desktop, le fichier que vous venez d'ajouter doit figurer dans l'onglet '''Changes'''. Il faudra à ce moment faire un '''commit''' pour incorporer ce nouveau fichier dans votre projet
## Insérez un ''summary'' de votre commit, par exemple ''Added my first file''
## Insérez une description (optionnelle) qui permet de mieux comprendre en quoi consiste le changement
## Cliquez sur <code>Commit do master</code>
##: [[Fichier:GitHub Desktop commit.png|600px|vignette|néant|Commit avec GitHub Desktop]]
# Enfin, cliquez sur <code>Push origin</code> pour envoyer les changements à GitHub
#: [[Fichier:GitHub Desktop push origin.png|600px|vignette|néant|Push origin permet d'envoyer les changements au repository de GitHub]]
# Contrôlez sur la page du projet sur GitHub.com que le nouveau fichier apparaît dans le projet


==== Participer à un projet déjà existant ====
La console JavaScript est un endroit très utile pour tester du code JavaScript pour deux raisons :


Petit hands-on sur comment on peut participer/contribuer à un projet déjà existant. En bref :
# On peut saisir directement du code dans la console et l'évaluer. Dans l'image suivante, les lignes précédées par > sont des lignes avec du code, et les lignes précédées par <- proposent le résultat de l'évaluation du code.
#:[[Fichier:JavaScript console code.png|none|frame|La console du navigateur évalue directement du code.]]
#:
# On peut communiquer avec la Console JavaScript. Par exemple la notation <code>console.log()</code> permet d'écrire un message dans la Console. Pour ceux qui ont utilisé Flash, cette instruction est similaire à la fonction trace() de Flash. Voici un exemple :
#:<syntaxhighlight lang="JavaScript">
for(let i = 0; i < 5; i++) {
    console.log("Cycle actuel : " + i);
}
</syntaxhighlight>
#:Le résultat de ce script dans la console JavaScript est le suivant :
#:[[Fichier:JavaScript tutoriel base console log.jpg|cadre|néant|La méthode log() de l'objet Console permet d'afficher des messages dans la console JavaScript.]]


* Fork du projet https://github.com/MALTT-STIC/stic-webmaster-test-xerneas
=== Activités code ===
* Créer un fichier VotreLoginCourt.md || VotreLoginGitHub.md dans la racine du projet
* Envoyer une pull request au projet initial pour incorporer le changement


Pour plus d'infos voir
'''À choix''' selon vos connaissances préalables en codage/programmation, vous pouvez décider si suivre des exemples guidés ou vous lancez directement dans un workshop avec des exemples/challenges/solution :


* {{Goblock|[https://guides.github.com/activities/forking/ Forking projects sur GitHub.com]}}
* '''Sans expérience préalable en programmation'''
*: Suivez les exemples de la page [[Computation avec JavaScript]] (lecture obligatoire pour travail à distance)
* '''Avec expérience préalable en programmation'''
*: Familiarisez-vous avec la syntaxe JavaScript avec des exemples et tâches disponibles dans les fichiers du workshop ''JavaScript essentials'' selon l'approche des autres workshop précédents


; Suivre les étapes suivantes :
==== Computation avec JavaScript ====


# Pointer à l'URL d'un repository/projet créé pour l'occasion https://github.com/MALTT-STIC/stic-webmaster-test-xerneas
{{bloc important | Entraînez une lecture sélective basée sur le code :  
# Cliquez sur le bouton '''Fork''' en haut à gauche, cette opération vous permet de '''créer une copie du projet dans votre account'''
# Lisez d'abord le bout de code correspondant
# Après le temps nécessaire, vous serez redirigés vers la page du fork du projet
# Si vous le comprenez (vraiment !) passez à l'étape suivante
#* Notez bien le nom du projet maintenant, il s'appelle '''''votre-login-github''/stic-webmaster-test-xerneas'''
# Si non, lisez les explications
#* Notez également que au-dessous du nom du projet apparaît '''forked from MALTT-STIC/stic-webmaster-test-xerneas'''
}}
# Cliquez sur le bouton <code>Create new file</code>
# Dans l'éditeur en ligne qui s'ouvre :
## Ajoutez un nom du fichier du type '''''votre-username-github''.md'''
## Ajoutez du contenu, pas important quoi (si jamais c'est du contenu de type [https://guides.github.com/features/mastering-markdown/ Markdown], une notation de marquage similaire au code wiki)
## Insérez une labellisation à votre commit
## Insérez une description pour votre commit (optionnelle)
## Laissez l'option Commit directly to the master branch cochée
## Cliquez sur <code>Commit new file</code>
# Vous êtes redirigés sur la page principale de votre projet où le nouveau fichier apparaît avec les autres fichiers. Cliquez maintenant sur <code>New pull request</code>
# Vous arrivez sur une page qui compare votre projet avec le projet original et vous informe que vous pouvez ''merge'' les deux sans conflits. Cliquez sur le bouton vert <code>Create pull request</code>
#: [[Fichier:GitHub create pull request.png|600px|vignette|néant|Créer une "Pull request" au projet d'origine]]
## Encore une fois, choisissez une labellisation qui définit votre changement
## Ajoutez également une explication qui permette aux propriétaires du projet originale de savoir pourquoi vous proposez ce changement
## Cliquez à nouveau sur le bouton vert <code>Create pull request</code>
##: [[Fichier:GitHub envoyer la pull request.png|600px|vignette|néant|Envoyer la pull request avec une explication pour les propriétaires du projet original]]
# Votre requête sera envoyée aux propriétaires du projet original qui pourront décider si l'accepter (et l'intégrer donc dans le projet) ou pas


==== Pour aller plus loin ====
Suivez les exemples étape par étape de la page :


Il existe beaucoup de commandes qui vous permettent de travailler à différentes versions de votre projet en local, comparer les différences, faire un ''merge'' entre deux branches, etc :
{{Goblock | [[Computation avec JavaScript]]  '''section 4''' }}


* git init
Pour manier directement le code dans [[Visual studio code]], vous pouvez télécharger les fichiers des exemples :
* git add [params]
* git commit [params]
* git branch [params]
* git checkout [params]
* ...


Pour plus d'infos voir [https://git-scm.com/docs Git - Reference sur le site officiel de Git]
* {{Goblock | [https://github.com/MALTT-STIC/stic-1-computation-with-javascript Repository MALTT-STIC/stic-1-computation-with-javascript]}}


== Ressources ==
Les sections avec les exemples proposent des exercices de consolidation que vous pouvez essayer d'effectuer.


=== Ligne de commande ===
'''Utilisez la console du navigateur pour tester le code.'''


* [[Commandes Unix]]
==== Workshop JavaScript de base ====
* [[Commandes Windows]]
* [[Commandes Mac]]


=== Git/GitHub ===
Le workshop suit la même logique des workshop sur HTML5 et CSS vus en [[MINIT]]


* [[Git et Github]]
Fichiers à télécharger :
* [https://guides.github.com/ Guides sur le site officiel GitHub]
* [https://help.github.com/articles/github-glossary/ Glossaire sur le site officiel GitHub]
* [https://www.youtube.com/githubguides GitHub Training & Guides sur YouTube]
* [https://pages.github.com/ GitHub Pages]
* [https://git-scm.com/book/fr/v2 Pro Git] version online (traduite en français) du livre


=== GitHub Education & Classroom ===
* {{Goblock | [https://github.com/MALTT-STIC/stic-1-javascript-essentials MALTT-STIC/stic-1-javascript-essentials]}}


* [https://education.github.com/ GitHub Education] : utilisation de GitHub dans l'éducation
'''Utilisez la console du navigateur pour tester votre code.'''
** Voir notamment [https://classroom.github.com GitHub Classroom] pour créer des "assignments" à travers GitHub


=== Open Source ===
== Références ==


* [https://opensource.org/ Open Source Initiative]
* {{Goblock | [[Tutoriel JavaScript de base]] }} (aspects formels et référence)
* [https://choosealicense.com/ Choose an open source licence] (synthèse et suggestions des licences proposées par GitHub)
*:
* {{Goblock | [[Computation avec JavaScript]] }} (aspects théoriques et exemples)

Dernière version du 27 octobre 2023 à 16:23

Cette page fait partie des cours STIC I et STIC II

Programme

Au programme :

Ateliers techniques

Présentation des ateliers et leur utilité par rapport au domaine STIC ainsi que le Master MALTT plus en général :

  • Interaction entre compétences techniques et pédagogiques
    • Les ateliers vous préparent d'un point de vue technique pour mieux exploiter les compétences/connaissances pédagogiques et centrées utilisateur/apprenant que vous acquérez dans les différents domaines du MALTT.
  • Mettre en place un dispositif pédagogique de A à Z
    • La combinaison entre ateliers techniques et STIC I et STIC II vous permet de mettre en place un dispositif pédagogique dans toutes les étapes : installation, configuration, déploiement, maintient, ...
  • Outils de collaboration et de partage
    • Découverte de plateforme et logiciels open-source que vous pouvez utiliser ou auxquels vous pouvez contribuer dans une perspective de collaboration et intelligence collective

Introduction à la programmation

Retour sur :

I/O et Computation

Schéma de base de la programmation :

Articulation entre Input, Computation et Output

Avec les interfaces graphiques, ce schéma est mise à jour presqu'en temps réel, ce qui rend la distinction plus difficile à saisir. Par exemple, quand vous tapez dans Word, il n'y a pratiquement pas de temps de latence entre input et output, et l'input correspond déjà beaucoup à l'output. Cependant, ce cycle est toujours présent et arriver à le saisir permet de mieux comprendre (et exploiter) le fonctionnement des dispositifs numériques. Voir par exemple :

F(X) = Y

La computation consiste à formuler une fonction (dans le sens abstrait) qui mappe le input et le transforme en output.

F(X) = Y

Cette fonction abstraite est le résultat de plusieurs petites fonctions qui travaillent en collaboration pour faire émerger une fonctionnalité plus large, comme par exemple un logiciel, une application, un learning management system, un jeu, etc.

Numérique / Digital

Tout est fait grâce au codage et encodage du :

  • Input
  • Output
  • Et des instructions...

en code binaire.

Programmer signifie traduire les intentions du développeur afin que la machine les exécute conformément aux attentes. Adaptation de Denning & Martell (2015, p. 90, Fig. 5-3)

Cette étape est encore une fois cachée pour la plupart du temps, mais elle est déterminante sur deux versants qui s'influencent mutuellement :

  • Technique
    On détermine qu'est-ce qu'on peut encoder, transformer et décoder, ainsi que comment encoder, transformer et décoder de l'information. Ce passage a notamment des implications sur la puissance computationnelle et les composantes hardware nécessaires, avec notamment des répercussions écologiques importantes. L'introduction d'objets connectées, de la robotique ou la conception et fabrication assistée par ordinateur élargie également les options de input et output à notre disposition.
  • Sémantique
    On détermine pourquoi certains informations méritent d'être encodées, transformées et décodées. Par exemple, en tant que instructional designer, vous pouvez décider qu'un chapitre d'un livre puisse être résumé :
    • Dans un document issue d'un logiciel de traitement de texte
    • Dans un podcast audio
    • Dans une présentation audio/vidéo
    • Dans une page Wiki
    • Dans une carte conceptuelle
    • ...
    Votre choix est guidé à la fois par des principes pédagogiques qui essaient de maximiser l'apprentissage du contenu du chapitre, mais également par les différentes techniques que vous avez à disposition, ou que vous aimeriez avoir à disposition !
L'algorithmisation/digitalisation d'information n'est jamais neutre, elle représente des opinions qui sont traduites en code informatique !

Concepts trop abstraits sans la pratique

Réussir à reconduire ces aspects très abstraits à des concepts concret qu'on puisse comprendre est très difficile, voir impossible sans la pratique. On va effectuer deux types de pratiques pour essayer de rendre ces concepts moins abstraits :

  1. Activité débranchée de pseudo-codage
  2. Activité de codage avec JavaScript

Les concepts valables pour JavaScript peuvent être ensuite transférés sur des applications web comme WordPress, Mediawiki ou Moodle qui permettent de faire abstraction du niveau micro de la programmation, et se concentrer plus sur des aspects d'organisation et de scénarisation pédagogique du traitement (technique et cognitif) de l'information.

Activité pseudo-code

Deux activités liées au pseudo-codage

Pseudo-coder un jeu

Par groupes de 3-4 personnes, choisissez un jeu très simple et essayez de le définir en pseudo-code en vous inspirant de l'exemple du jeu du morpion dans la page Introduction à la programmation. Exemples de quelques jeux possibles :

  • Le pendu
  • Guess my number
  • Le jeu de la valise
  • Pierre-papier-ciseaux
  • ...

Une fois le jeu choisi :

  1. Essayez de formaliser le jeu dans des instructions les plus précises possibles, en utilisant un pseudo-langage que vous pouvez convenir vous-mêmes à l'intérieur du groupe (e.g. plus ou moins proche déjà d'un vrai langage de programmation).
  2. Partagez les instructions que vous avez créées dans le forum des activité de l'espace Moodle de l'Atelier technique.

Vous pouvez voir la complexité d'un jeu en vrai code JavaScript (il existe toujours différentes manières pour implémenter un algorithme) dans l'exemple du jeu du morpion pour la console JavaScript.

Créer un méta-pseudo-codage

Suite au pseudo-codage d'un jeu spécifique, essayez de créer un pseudo-code qui peut fonctionner pour plusieurs jeux en même temps : une sorte de méta-pseudo-codage.

Quelques conseils :

  1. Essayez de trouver des patterns, des régularités dans les jeux
  2. Transformez ces régularités dans des instructions
  3. Formulez les instructions de manière à pouvoir les combiner entre elles

Si l'activité est trop abstraite, essayez de réduire à une catégorie de jeu plus spécifique.

Introduction à JavaScript

JavaScript est un langage de scripting, qui nécessite donc un interpréteur. L'interpréteur peut se trouver à différents endroits, ou environnements, dont le plus commun est le moteur JavaScript qui se trouve dans votre navigateur.

Les trois niveaux du code JavaScript.

On peut diviser la programmation en deux niveaux :

  1. Le langage de base
    Il est utile surtout pour le traitement de l'information (voir Tutoriel JavaScript de base et Computation avec JavaScript pour une référence). Sujet de cet Atelier.
  2. L'environnement
    Il détermine les possibilités d'échange en terme de I/O pour le traitement de l'information. Sujet de vendredi et du reste de STIC en relation avec l'interactivité avec JavaScript et le Tutoriel JavaScript côté client

Le code source, c'est-à-dire toutes les instructions qui forment un programme ou une application, est le résultat de l'intégration entre le langage de base et l'environnement.

Le langage de base

Le langage de base se divise en deux grandes catégories :

  1. Les éléments littéraires : ils consistent dans l'introduction dans la logique de l'application d'informations (mots, chiffres, ....) d'intérêt pour les finalités de l'application
  2. Les éléments symboliques : ils consistent dans des références qui permettent à l'application d'effectuer les opérations nécessaires au processus de Input/Output. Les éléments symboliques se divisent en deux catégories :
    • Les éléments symboliques conventionnels : il s'agit d'éléments réservés par le langage, comme par exemple des mots clés ou des fonctions qui sont déjà mises à disposition par le langage
    • Les éléments symboliques arbitraires : il s'agit des choix des développeurs qui décident d'appeler un certain élément d'une certaine manière afin de l'utiliser de manière sémantique dans la logique de l'application

En combinant éléments littéraires et symboliques, le langage de base a principalement trois fonctions :

  1. Identifier et stocker les données à travers des références symboliques
    En JavaScript ceci se fait normalement à travers des variables ou des constantes :
    // Affecter une variable
    var score_actuelle = 156;
    
    //Définir une constante
    const score_pour_gagner = 2000;
    
    // Quel type de donnée ?
    typeof score_actuelle
    
    Pour des données plus articulées, on peut utiliser des structures des données comme les arrays ou les objects
    // Array simple
    var countries = ["France", "Italy", "Switzerland", "Canada", "Nigeria", "China"];
    
    countries[2]; // Donne "Switzerland" car on commence à compter depuis 0
    
    // Object
    var stic_1 = {
      name: "Sciences et Technologies de l'Information et de la Communication I",
      short: "STIC I",
      semester: "A",
      credits: 6
    }
    
    stic_1.short; //Donne "STIC I"
    
  2. Fournir ou créer des procédures pour traiter les données
    En JavaScript ceci se fait normalement à travers des fonctions
    // Exemple générique
    function myProcedure(input) {
      //Do something
      var output = input + " transformation";
      return output;
    }
    
    // Inverser l'ordre des lettres d'un mot
    function reverseWord(word) {
      return word.split('').reverse().join('');
    }
    
    reverseWord("STIC"); //Donne "CITS"
    
  3. Fournir des méta-éléments qui déterminent l'exécution du code
    Par exemple :
    • // Les boucles
      for (let i = 0; i < 10; i++) {
        console.log(i);
      }
      
    • // Les structures de contrôle
      if (new Date().getHours() < 12) {
        console.log("Good morning!");
      } else {
        console.log("Good afternoon!");
      }
      

Utilisation de la Console JavaScript

Pour tester le code, faites du copier/coller dans la console du navigateur

Pour utiliser la Console :

  • Internet Explorer : Menu Outils > Outils de développement (ou F12)
  • Firefox : le scratchpad (SHIFT F4), sinon la console (F12) qui permet d'entrer une ligne.
  • Chrome : Menu Outils > Console JavaScript (ou F12)
  • Safari : D'abord dans les Options > Avancées cocher la case "Afficher le menu Développement dans la barre des menus", puis CTRL+Alt+I ou CTRL+Alt+C
  • Opera: Menu Page > Outils de Développement > Opera Dragonfly (ou CTRL+Shift+I)
Console des erreurs en Google Chrome

La console JavaScript est un endroit très utile pour tester du code JavaScript pour deux raisons :

  1. On peut saisir directement du code dans la console et l'évaluer. Dans l'image suivante, les lignes précédées par > sont des lignes avec du code, et les lignes précédées par <- proposent le résultat de l'évaluation du code.
    La console du navigateur évalue directement du code.
  2. On peut communiquer avec la Console JavaScript. Par exemple la notation console.log() permet d'écrire un message dans la Console. Pour ceux qui ont utilisé Flash, cette instruction est similaire à la fonction trace() de Flash. Voici un exemple :
    for(let i = 0; i < 5; i++) {
        console.log("Cycle actuel : " + i);
    }
    
    Le résultat de ce script dans la console JavaScript est le suivant :
    La méthode log() de l'objet Console permet d'afficher des messages dans la console JavaScript.

Activités code

À choix selon vos connaissances préalables en codage/programmation, vous pouvez décider si suivre des exemples guidés ou vous lancez directement dans un workshop avec des exemples/challenges/solution :

  • Sans expérience préalable en programmation
    Suivez les exemples de la page Computation avec JavaScript (lecture obligatoire pour travail à distance)
  • Avec expérience préalable en programmation
    Familiarisez-vous avec la syntaxe JavaScript avec des exemples et tâches disponibles dans les fichiers du workshop JavaScript essentials selon l'approche des autres workshop précédents

Computation avec JavaScript

Entraînez une lecture sélective basée sur le code :
  1. Lisez d'abord le bout de code correspondant
  2. Si vous le comprenez (vraiment !) passez à l'étape suivante
  3. Si non, lisez les explications

Suivez les exemples étape par étape de la page :

Pour manier directement le code dans Visual studio code, vous pouvez télécharger les fichiers des exemples :

Les sections avec les exemples proposent des exercices de consolidation que vous pouvez essayer d'effectuer.

Utilisez la console du navigateur pour tester le code.

Workshop JavaScript de base

Le workshop suit la même logique des workshop sur HTML5 et CSS vus en MINIT

Fichiers à télécharger :

Utilisez la console du navigateur pour tester votre code.

Références