CodeWorld est un environnement éducatif utilisant Haskell. Il fournit un modèle mathématique simple pour les figures géométriques, les animations et les jeux interactifs et multi-joueurs. L'environnement de programmation Web soutient cette mission éducative avec un éditeur et un compilateur zéro-établissement, un partage facile et un stockage cloud de projets, et la possibilité d'exécuter des programmes directement dans le navigateur Web à l'aide de GHCJ.
Il existe plusieurs variantes de CodeWorld disponibles:
codeworld-api et blank-canvas .CodeWorld est stable et est utilisé dans les écoles depuis des années! Voir la page des utilisateurs pour une liste partielle. Nous améliorons constamment l'environnement. Les changements de rupture, si nécessaire, devraient se produire entre les semestres scolaires typiques (États-Unis) K-12, afin de minimiser la perturbation des classes existantes.
Google distribue le code de CodeWorld, mais CodeWorld n'est pas un projet Google officiel, et Google ne prend aucune prise en charge. Au lieu de cela, les questions sur le projet ou le code devraient être posées à la liste de diffusion des débuts de codéworld. Un forum de questions et réponses adapté aux étudiants est également disponible sur http://help.code.world pour des questions sur les programmes écrits à l'aide de CodeWorld, plutôt que de questions sur la création ou la modification de CodeWorld lui-même.
Visitez simplement https://code.world pour commencer.
Il n'est pas nécessaire de télécharger ou d'installer quoi que ce soit pour utiliser CodeWorld. Ce référentiel sera utile si vous préférez alimenter et modifier l'environnement CodeWorld ou contribuer des modifications.
Pour discuter et entendre des annonces sur CodeWorld, abonnez-vous à la liste de diffusion à https://groups.google.com/forum/#!forum/codeworld-discuss
La liste de diffusion doit être utilisée pour:
Pour signaler les bogues ou le fichier de demandes de fonctionnalités formelles, essayez https://github.com/google/codeworld/issues.
Il y a un peu de paperasse impliquée dans la contribution à CodeWorld. Vous devrez accepter un contrat de licence de contributeur. Voir CONTRIBUTING.md pour plus de détails.
La construction et l'exécution de CodeWorld peuvent être un processus long, mais est automatisé à l'aide des scripts d'installation dans le répertoire racine, qui fonctionnent sur la plupart des formes de Linux, y compris Debian, Ubuntu, Redhat et Centos. Les instructions étape par étape sont les suivantes:
./install.sh pour configurer le projet../run.sh pour démarrer le serveur.Vous pouvez désormais accéder au système CodeWorld sur http: // localhost: 8080.
Si vous apportez des modifications à CodeWorld, vous pouvez le reconstruire sans reconstruire les dépendances:
./build.sh pour recompiler Just CodeWorld lui-même, en utilisant des outils et des bibliothèques précédemment installés../run.sh pour démarrer le serveur.Il est également possible de créer et d'exécuter le serveur à l'aide de Docker. Ce n'est pas encore le moyen recommandé de se développer avec CodeWorld, mais il pourrait y arriver bientôt.
Commandes pour essayer Docker:
sudo docker build -t codeworld https://github.com/google/codeworld.git
sudo docker run -p 80:8080 -t codeworld
Pour l'instant, le conteneur Docker n'a aucun moyen d'accéder à un ID client, de monter un lecteur NFS partagé ou d'autres étapes de configuration. Cela fonctionnera, mais il ne sera pas complet. À l'avenir, cela devrait devenir le moyen standard de déployer CodeWorld.
Le stack.yaml dans la racine du projet est présent pour prendre en charge partiellement Intero et Travis CI. Sur Travis, les tests codeworld-compiler ne s'exécutent pas.
La construction et l'exécution de codeworld localement avec pile ne sont pas pris en charge, et en fait ne fonctionne pas. La pile ne peut pas encore remplacer les scripts de coque ou l'utilisation de Docker ci-dessus.
CodeWorld propose deux modes d'authentification ou la possibilité de s'exécuter avec l'authentification désactivée avec des fonctionnalités réduites. Les deux méthodes fournies sont les suivantes:
L'exécution de CodeWorld dans l'un de ces deux modes permet aux utilisateurs d'économiser et de gérer leurs projets et dossiers. Sans authentification activées, les utilisateurs peuvent écrire, créer et exécuter du code, mais perdre la possibilité d'économiser et de gérer les projets et les dossiers.
Pour que l'authentification Google fonctionne, vous devrez obtenir une clé API Google et la stocker dans web/clientId.txt .
Pour obtenir une clé API Google pour votre installation CodeWorld, veuillez consulter les ressources suivantes:
Une fois que vous avez une clé API Google, copiez-le et collez-le dans web/clientId.txt . Une instance CodeWorld en cours d'exécution ramassera immédiatement les modifications de ce fichier.
En général, le système d'authentification Google sera le système le plus simple à maintenir car aucun magasin de mots de passe local n'est requis. Ceci est le mécanisme utilisé par la version officielle en direct de CodeWorld.
Pour les applications dans lesquelles les dépendances externes, telles que les comptes Google, ne sont pas acceptables, nous fournissons un simple système d'authentification local:
Cela fournit un système d'authentification local avec des workflows très similaires à l'authentification Google (c.-à-d. Sessions côté client sans état). Actuellement, aucune interface administrative basée sur le Web n'est fournie. Au lieu de cela, vous pouvez utiliser l'outil CLI codeworld-auth pour gérer les comptes.
Le système d'authentification local peut être utile pour les situations où un instructeur ne peut pas s'attendre à ce que tous les étudiants aient un compte Google valide et dans lequel l'instructeur est disposé à déployer une pile de codeworld locale.
L'authentification locale sera activée si un fichier codeworld-auth.db est présent dans le répertoire racine de l'application. Pour créer cette base de données, exécutez ce qui suit à partir de la racine du référentiel GIT:
build/bin/codeworld-auth init-accounts -d codeworld-auth.db
Cela créera une base de données de compte vide sans comptes.
En supposant que vous avez déjà créé une base de données de compte comme décrit ci-dessus, vous pouvez créer un nouveau compte comme suit:
build/bin/codeworld-auth create-account -d codeworld-auth.db johndoe Expired
Cela créera un nouveau compte avec l'utilisateur id johndoe avec un mot de passe généré de manière aléatoire. Le compte sera défini sur "Expiré", ce qui signifie que l'utilisateur sera invité à saisir un nouveau mot de passe à la prochaine heure de connexion.
D'autres sous-commandes sont fournies pour mettre à jour et supprimer des comptes, etc. pour l'aide:
build/bin/codeworld-auth --help
Pour utiliser l'authentification locale, vous devrez également générer un secret JWT stocké dans un fichier nommé codeworld-auth.txt . Ceci est utilisé pour signer des jetons JWT passés dans les deux sens entre le serveur et le navigateur. Dans le répertoire racine du référentiel GIT, exécutez la commande suivante:
build/bin/codeworld-auth generate-secret -s codeworld-auth.txt
Cela générera une nouvelle clé de signature JWT aléatoire. Le serveur ne doit pas exposer ce secret aux utilisateurs externes.
Si vous installez CodeWorld sur un serveur virtuel, sachez que la RAM par défaut sur ces serveurs n'est souvent pas suffisante pour GHC. CodeWorld doit compiler de très grands projets Haskell lors de son installation. Les éléments suivants doivent être suffisants pour résoudre les problèmes hors mémoire que vous rencontrez:
$ sudo dd if=/dev/zero of=/swap bs=1024 count=2097152
$ sudo mkswap /swap
$ sudo swapon /swap
Cela crée un fichier d'échange de 2 Go pour augmenter la mémoire virtuelle disponible. L'installation avec un fichier d'échange peut être lente, mais elle réussira. (Sauf si vous avez l'intention d'écrire de très grands programmes dans CodeWorld, il est généralement sûr de supprimer le fichier d'échange après avoir exécuté le serveur pour la première fois.)