CodeLab
IDE & Simulators


Un outil pédagogique pour apprendre à coder
avec bien plus que des interactions écran-clavier...

An educational tool to learn coding
with much more than screen-keyboard interactions...

Qu'est-ce que CodeLab ?

What is CodeLab?

CodeLab est un environnement pédagogique gratuit dédié à l'apprentissage de la programmation. Son originalité est qu'il propose des alternatives ludiques ou techniques aux traditionnelles interactions écran-clavier pour la conception des activités pédagogiques, au travers de l'utilisation de modules applicatifs. Ces modules, disponibles sous la forme de plugins, peuvent être des visualisations, des panneaux de contrôle, des simulateurs, et autres systèmes temps-réel. Chaque module est l'association d'une IHM (Interface Homme-Machine) et d'une interface de programmation applicative (souvent désignée par le terme API pour Application Programming Interface), disponible pour chacun des langages intégrés à CodeLab. Les apprenants peuvent ainsi se focaliser sur les aspects algorithmiques et sur le codage, tout en travaillant sur des applications qui possèdent des caractéristiques riches et motivantes.

D'un point de vue pédagogique, notre approche s'inspire du courant cognitiviste et des théories sur l'apprentissage de Jean Piaget en France, de Marvin Minsky et de Seymour Papert aux USA, lesquels ont donné naissance au langage Logo et à sa célèbre tortue (c'est pourquoi le premier module de CodeLab comporte une tortue). En 1985, Seymour Papert engage une collaboration avec le groupe LEGO afin de connecter des briques à un ordinateur et leur "donner vie". En 1998, la gamme Mindstorms est lancée, nommée ainsi pour honorer le livre de Papert intitulé Mindstorms: Children, Computers, and Powerful Ideas.

L'enfant programme l'ordinateur et, ce faisant, acquiert un sentiment de maîtrise d'un élément de la technologie la plus moderne et la plus puissante et établit un contact intime avec certaines des idées les plus profondes de la science, des mathématiques et de l'art de la construction de modèles intellectuels. S. Papert

Une autre caractéristique de CodeLab est de fournir aux pédagogues et aux apprenants un large spectre de paradigmes de programmation (impératif, fonctionnel, objet, déclaratif, etc.) et ce afin de répondre aux recommandations du programme de la spécialité NSI (Numérique et Sciences Informatiques) de première et de terminale. En plus des langages traditionnels, CodeLab intègre un langage "par assemblage de blocs" qui permet de découvrir les structures de programmation en s'abstrayant d'une syntaxe spécifique.

CodeLab is a free educational environment dedicated to learning programming. Its originality is that it offers playful or technical alternatives to traditional screen-keyboard interactions for the design of educational activities, through the use of applicative modules. These modules, available as plugins, can be visualizations, control panels, simulators, and other real-time systems. Each module is a combination of a HMI (Human Machine Interface) and an Application Programming Interface (often referred to as API), available for each language integrated in CodeLab. Learners can thus focus on algorithmic aspects and coding, while working on applications that have rich and motivating features.

From a pedagogical point of view, our approach has been inspired by the cognitivist current and the learning theories of Jean Piaget in France, Marvin Minsky and Seymour Papert in the USA, who gave birth to the Logo language and its famous turtle (that's why the first module of CodeLab includes a turtle). In 1985, Seymour Papert started a collaboration with the LEGO group in order to connect bricks to a computer and "give them life". In 1998, the Mindstorms line was launched, named to honor Papert's book Mindstorms: Children, Computers, and Powerful Ideas.

The child programs the computer and, in doing so, both acquires a sense of mastery over a piece of the most modern and powerful technology and establishes an intimate contact with some of the deepest ideas from science, from mathematics, and from the art of intellectual model building. S. Papert

Another feature of CodeLab is to provide teachers and learners with a wide range of programming paradigms (imperative, functional, object, declarative, etc.) in order to meet the requirements of the NSI class (Numérique et Sciences Informatiques) in French educational system. In addition to traditional languages, CodeLab integrates a "block assembly" language that allows students to discover programming structures without the need of a specific syntax.



CodeLab est développé en Java et est de ce fait multi-plateforme : il peut être exécuté sur les systèmes Windows, MacOSX et Linux. Pas besoin d'installer Java sur votre machine, CodeLab arrive avec sa propre JVM. CodeLab est un logiciel jeune et a vocation a évoluer : nous avons des projets d'améliorations et d'extensions, dont certains sont en cours de développement. Toute nouvelle version disponible vous sera notifiée à l'ouverture, ainsi qu'une mise-à-jour le cas échant.

CodeLab is developed in Java and is therefore multi-platform: it can be run on Windows, MacOSX and Linux systems. No need to install Java on your machine, CodeLab comes with its own JVM. CodeLab is a young software and is bound to evolve: we have projects of improvements and extensions, some of which are already in development. Any new version available will be notified to you at the opening, as well as an update if necessary.

Modules applicatifs

Applicative modules

Le principe fondateur de CodeLab, et ce qui fait son originalité par rapport à d'autres IDE, est d'accepter des module applicatifs. Ces "modules PAC" — Plugins Applicatifs CodeLab — matérialisés sous la forme de fichiers ".pac", permettent d'accéder à de nouveaux environnements pilotables à partir des programmes, qu'ils soient écrits en C, Java, Python, etc. Chaque module PAC contient des APIs (Application Programming Interfaces) pour chacun des langages intégrés à CodeLab. Ces environnements peuvent être des visualisations, des panneaux de contrôle, des simulateurs, des systèmes temps-réel, etc.

La conception des modules PAC est facilitée par un ensemble de classes Java et d'outils qui assurent l'intégration du plugin au sein de l'architecture de CodeLab. Il est ainsi facile de développer un nouveau module, à condition de maîtriser les concepts objet et la POO en Java. Au final, il suffit juste de déposer le fichier ".pac" du module dans le dossier "modules" de CodeLab pour profiter d'un nouvel environnement, totalement intégré à CodeLab. Le développement des modules PAC est documenté et exemplifié dans ce site.

The founding principle of CodeLab, and what makes it original compared to other IDEs, is to accept applicative modules. These "PAC modules" — CodeLab Application Plugins — materialized in the form of ".pac" files, offer new environments controllable from the programs, whether they are written in C, Java, Python, etc. Each PAC module contains APIs (Application Programming Interfaces) for each languages integrated to CodeLab. These environments can be visualizations, control panels, simulators, real-time systems, etc.

The design of PAC modules is facilitated by a set of Java classes and tools that ensure the integration of the plugin within the CodeLab architecture. It is thus easy to develop a new module, provided that you master the object concepts and OOP in Java. Finally, you just have to put a ".pac" file of the module in the "modules" folder of CodeLab to take advantage of a new environment, totally integrated to CodeLab. The development of PAC modules is documented and exemplified in this site.

Modules applicatifs intégrés

Built-in applicative modules


Graphisme 2D + Tortue

2D Graphics + Turtle

Ce module permet de réaliser des tracés simples en 2D, et de piloter une "tortue" comme celle que propose le langage Logo, mais dans n'importe lequel des langages intégrés à CodeLab.

This module allows to make simple 2D drawings, and to drive a "turtle" like the one proposed by the Logo language, in any of the languages integrated in CodeLab


Robotique mobile

Mobile robotics

Ce module est un simulateur de robot mobile de type NXT. Il propose une plateforme mobile, un ensemble de capteurs, ainsi que des fonds permettant de réaliser différents types d'exercices.

This module is an NXT-robot simulator. It contains a mobile platform, a set of sensors, as well as a set of surfaces allowing to realize different types of exercises.


Robot industriel 5 axes

5 axis industrial robot

Ce module permet de piloter un robot industriel 5 axes, représenté en 3D. Il peut saisir des balles, vérifier leur couleur, dessiner dans l'espace. Il comprend une librairie de fonctions utilitaires.

This module allows to drive a 5 axis industrial robot, represented in 3D. It can pick up balls, check their color, draw in space. It includes a library of utility functions.

Exemples de modules plugins

Examples of plugin modules


Simulateur de moteur

Motor simulator

Ce petit module visualise et simule un moteur Lego NXT. Il comprend des instructions non-bloquantes de contrôle du moteur, et d'accès au compteur de rotation intégré.

This small module visualizes and simulates a Lego NXT engine. It includes non-blocking instructions to control the motor, and to access the integrated rotation counter.


Laboratoire de tri

Sorting lab.

Ce module visualise la distribution dans un tableau, et les opérations réalisées dans le cadre d'algorithmes de tri. Il permet notamment de régler la vitese d'exécution du tri.

This module visualizes the distribution in a table, and the operations performed in the framework of sorting algorithms. In particular, it allows you to set the speed of execution of the sorting.


Votre module ici...

Your module here...

CodeLab comprend un kit de développement de plugins qui vous permet de développer vos propres modules. Des tutoriels sont disponibles sur ce site. Nous attendons vos modules !

CodeLab includes a plugin development kit that allows you to develop your own modules. Tutorials are available on this site. We are waiting for your modules!

Périphériques d'entrée

Input devices

Une des motivations en informatique est de traiter des données et des événements extérieurs, éventuellement arrivant en temps réel. C'est la raison pour laquelle nous avons diversifié les sources de données dans CodeLab : événements en provenance de capteurs dans certains modules, de périphériques virtuels, et également de tout périphérique USB connecté à votre ordinateur. L'utilisation de dispositifs virtuels étant le principe fondateur de CodeLab, les possibilités d'extension ont vocation à être développées, en fonction des besoins et des demandes des utilisateurs.

One of the motivations in computer science is to process external data and events, possibly in real time. This is the reason why we have diversified the data sources in CodeLab: events coming from sensors, modules, virtual devices, and also from any USB device connected to your computer. The use of virtual devices being the founding principle of CodeLab, the possibilities of extension are intended to be developed, according to the needs and requests of the users.


Des capteurs virtuels

Virtual sensors

Certains modules proposent un éventail de capteurs virtuels : capteurs de contact, de distance, de couleur, de ligne, etc. Les données en provenance de ces capteurs sont visualisées à l'interface du module et accessibles via les API des langages de programmation.

Some modules offer a range of virtual sensors: contact, distance, color, line, etc. The data from these sensors are visualized on the module's interface and accessible via the APIs of the programming languages.


Des périphériques virtuels

Virtual devices

En plus des capteurs virtuels, des périphériques virtuels comme un clavier numérique ou un joystick peuvent être utilisés comme dispositifs d'entrée dans vos programmes. La palette de périphériques virtuels a vocation a être enrichie en fonction des demandes.

In addition to virtual sensors, virtual devices such as a numeric keypad or a joystick can be used as input devices in your programs. The range of virtual devices is intended to be expanded according to demand.


Tout périphérique USB

Any USB controller

Enfin, un mécanisme d'interception et de file d'attente permet de traiter de façon asynchrone les évènements en provenance de tout type de périphériques USB (claviers, souris, manettes de jeu, etc.), et ce quel que soit le langage utilisé.

Finally, an interception and queuing mechanism allows an asynchronous processing of events from all types of USB devices (keyboards, mice, joysticks, etc.), regardless of the language used.

Langages de programmation

Programming languages

Les langages supportés par CodeLab ont été choisis afin de couvrir un large spectre de paradigmes de programmation : impératif, fonctionnel, objet, déclaratif, certains langages étant multi-paradigmes. Aucune installation préalable n'est nécessaire, CodeLab embarquant les langages qu'il supporte, sauf le compilateur gcc sous Linux, qui fait généralement partie du système. Si vous souhaitez utiliser un interpréteur ou un compilateur installé sur votre machine, il est toujours possible de le spécifier dans un fichier de configuration. Attention : le langage CLIPS a été modifié et recompilé pour des besoins d'intégration dans l'environnement CodeLab. Tous les langages inclus dans CodeLab peuvent être utilisés pour piloter les modules applicatifs, sauf le langage Blocs qui est pour l'instant limité aux modules intégrés.

The languages supported by CodeLab have been chosen to cover a wide spectrum of programming paradigms: imperative, functional, object, declarative, some languages being multi-paradigm. No prior installation is necessary, CodeLab embeds the languages it supports, except the gcc compiler under Linux, which is part of the system. If you wish to use an interpreter or a compiler installed on your machine, it is always possible to specify it in a configuration file. Warning: the CLIPS language has been modified and recompiled for integration purposes in the CodeLab environment. All languages included in CodeLab can be used to drive the applicative modules, except the Blocs language which is for the moment limited to the built-in modules.

4 langages de programmation embarqués

4 embedded programming languages

C

C est un langage impératif généraliste de bas niveau. Inventé au début des années 70 pour écrire UNIX, il est devenu un des langages les plus utilisés, encore de nos jours. D'autres langages comme C++, C#, Java, PHP, Javascript, etc. ont repris sa syntaxe, et en partie sa logique.

C is a low-level general purpose imperative language. Invented in the early 70's to write UNIX, it has become one of the most used languages, and it still is today. Other languages such as C++, C#, Java, PHP, Javascript, etc. have adopted its syntax, and partly its logic.

Java

Java est un langage orienté objet créé dans les années 90 dans le but de concurrencer C++, considéré comme trop complexe. Les programmes écrits en Java sont compilés vers un "bytecode" nécessitant une machine virtuelle (JVM) afin de faire abstraction du système d'exploitation.

Java is an object-oriented language created in the 90's to compete with C++, considered too complex. Programs written in Java are compiled to a "bytecode" requiring a virtual machine (JVM) in order to abstract the operating system.

Python

Python est un langage de script multi-paradigmes et multiplateformes, conçu vers la fin des années 80. Visuellement épuré, il possède moins de constructions syntaxiques que d'autres langages structurés. De part sa concision, le code qui en résulte est qualifié de "Pythonique".

Python is a multi-paradigm and multi-platform scripting language, designed in the late 1980s. Visually clean, it has fewer syntactic constructs than other structured languages. Because of its conciseness, the resulting code is called "Pythonic".

CLIPS

CLIPS est un langage déclaratif et fonctionnel, développé à la NASA dans les années 80, et dédié à la conception des systèmes experts. Un programme CLIPS est composé d'un ensemble de règles qui opèrent sur une base de faits (connaissances) selon une logique non-monotonne.

CLIPS is a declarative and functional language, developed at NASA in the 1980s, dedicated to the design of expert systems. A CLIPS program is composed of a set of rules that operate on a fact base (knowledge) according to a non-monotonic logic.

Intégration de Numpy et du langage Processing

Integration of Numpy and the Processing language


Toujours dans le but de diversifier les possibilités de production, CodeLab intègre également Numpy-Matplotlib basé sur Python, ainsi que le language Processing basé sur la plateforme Java. Réputé dans le monde des arts visuels, Processing est tout particulièrement adapté à la création graphique interactive et au graphisme de données, mais sa simplicité d'utilisation en fait aussi un bon support pour l'apprentissage de la logique de la programmation. Basé sur OpenGL, Processing permet notamment de générer facilement des images 2D et 3D de grande qualité, ainsi que des animations extrêmement fluides.

In order to diversify the production possibilities, CodeLab also integrates Numpy-Matplotlib based on Python, and the Processing language based on the Java platform. Well known in the world of visual arts, Processing is particularly adapted to interactive graphic creation and data graphics, but its simplicity of use also makes it a good support for learning programming logic. Based on OpenGL, Processing makes it easy to generate high-quality 2D and 3D images, as well as extremely fluid animations.


 

Pixel Worm Hole by Che-Yu Wu


Rotating Arcs by Marius Watz

+ 1 langage de programmation par assemblage de blocs

+ 1 block-oriented programming language


Par ailleurs, CodeLab intègre un langage de programmation "par assemblage de blocs" qui permet de découvrir les structures de programmation en s'abstrayant d'une syntaxe spécifique. Programmer consiste alors à déplacer des blocs à l'aide de la souris, et à compléter les instructions grâce à des fenêtres de dialogue. Une fois les structures de blocs construites, il est possible d'en visualiser une traduction en langage Python. Cette fonctionnalité, qui permet une transition progressive Blocs-Python, a pour objectif de démystifier les langages textuels fondés sur une grammaire formelle.

In addition, CodeLab integrates a "block-assembly" programming language that allows you to discover programming structures without using a specific syntax. Then, programming consists in dragging and dropping blocks with the mouse, and completing the instructions thanks to dialog windows. This feature, which allows a progressive transition from Blocks to Python, aims to demystify textual languages based on a formal grammar.


 
 
 

Classes virtuelles

Virtual classrooms

Une fonctionnalité de CodeLab, reprise de l'environnement Hop3x mais également présente dans quelques IDEs en ligne, est de permettre la constitution de classes virtuelles (en présence ou à distance) grâce à une architecture client-serveur dédiée. Le modèle utilisateur / groupe / session permet la constitution de groupes de TP à géométrie variable, encadrés par un ou plusieurs tuteurs. Ces derniers peuvent suivre en temps réel le travail des apprenants, tester leurs programmes, communiquer avec eux par l’intermédiaire d’une messagerie instantanée intégrée, les déconnecter en fin de séance, etc. L’interface "tuteur" de CodeLab présente la liste des utilisateurs (connectés ou non) pour une session donnée, permet d’accéder à leur espace de travail, ainsi qu’à diverses informations les concernant (dernière heure de connexion, adresse IP, demande d’aide, etc.).

Tout utilisateur peut installer un serveur CodeLab sans compétence particulière. Le serveur est disponible sous la forme d'un dossier compressé comportant un exécutable Java, un JRE (machine virtuelle Java) ainsi que quelques scripts et fichiers de configuration. Un tutoriel décrivant la mise en oeuvre d'un serveur CodeLab personnalisé est accessible en cliquant sur ce lien.

A feature of CodeLab, taken from the Hop3x environment but also present in some online IDEs, is to allow the constitution of virtual classrooms (in presence or remotely) thanks to a dedicated client-server architecture. The user / group / session model allows the constitution of variable geometry TP groups, supervised by one or more tutors. Each tutor can follow the work of the students in real time, test their programs, communicate with them via an integrated instant messaging system, disconnect them at the end of the session, etc. The "tutor" interface of CodeLab contains the list of the users (connected or not) for a given session, allows access to their workspace, as well as to various information concerning them (last connection time, IP address, help request, etc.).

Any user can install a CodeLab server without any particular skill. The server is available as a compressed folder containing a Java executable, a JRE (Java virtual machine) and some scripts and configuration files. A tutorial for the implementation of a customized CodeLab server is available by clicking on this link.


Documentation et tutoriels

Documentation and tutorials

Pour les utilisateurs finaux

For end-users

Comment utiliser CodeLab ?

How to use CodeLab?

CodeLab est un IDE (environnement de développement intégré) dédié à l'apprentissage de la programmation. C'est pourquoi son ergonomie et les outils qu'il intègre ont été pensés pour favoriser la conception d'activités pédagogiques autour de la programmation, et surtout pour permettre de sortir des sempiternelles interactions écran-clavier. La documentation de CodeLab est composée d'un manuel utilisateur qui décrit son interface et son utilisation élémentaire, ainsi que de pages de documentation pour les API des langages intégrés à CodeLab. Comme pour le reste, cette documentation a vocation à évoluer et à être enrichie.

CodeLab is an IDE (integrated development environment) dedicated to learning programming. That's why its ergonomics and the tools it integrates have been designed to encourage the conception of educational activities around programming, and especially to allow to get out of the age-old screen-keyboard interactions. The CodeLab documentation is composed of a user's manual that describes its interface and its basic use, as well as documentation pages for the APIs of the languages integrated in CodeLab. As for the rest, this documentation is intended to evolve and to be completed.


API Langage C C Language API   API Langage Python Python Language API   API Langage Java Java Language API

Pour les développeurs

For developers

Développement de nouveaux modules PAC :

Development of new PAC modules:

Un Plugin Applicatif CodeLab (ou module PAC) permet d'accéder à un nouvel environnement pilotable à partir des programmes, qu'ils soient écrits en C, Java, Python, etc. Un module PAC contient une visualisation ou IHM (une représentation, un panneau de contrôle, un simulateur, etc.) ainsi qu'une API (Application Programming Interface) permettant de piloter cette IHM via les langages de programmation intégrés à CodeLab. La conception des modules PAC est facilitée par un ensemble de classes Java et d'outils qui assurent l'intégration du plugin au sein de l'architecture de CodeLab. Il est ainsi facile de développer un nouveau module, à condition de maîtriser les concepts objet et la POO en Java. Au final, il suffit juste de déposer le fichier ".pac" du module dans le dossier "modules" de CodeLab pour profiter d'un nouvel environnement, totalement intégré à CodeLab.

A CodeLab Applicative Plugin (or PAC module) provides access to a new environment that can be controlled from programs, whether they are written in C, Java, Python, etc. A PAC module contains a visualization or HMI (a representation, a control panel, a simulator, etc.) as well as an API (Application Programming Interface) allowing to drive this HMI via the programming languages integrated to CodeLab. The design of PAC modules is facilitated by a set of Java classes and tools that ensure the integration of the plugin within the CodeLab architecture. It is thus easy to develop a new module, provided that you master the object concepts and OOP in Java. Finally, you just have to put a ".pac" file of the module in the "modules" folder of CodeLab to take advantage of a new environment, totally integrated to CodeLab.

Activités pédagogiques

Educational activities

Un environnement comme CodeLab a vocation a permettre le développement d'activités pédagogiques, organisées en fonction d'objectifs et de niveaux. Pour l'instant, CodeLab est livré avec une banque d'examples et de templates, par module et par langage. Nous avons le projet, non seulement de travailler sur un modèle de progression en fonction d'objectifs, mais aussi de permettre la diffusion et le partage d'activités en provenance des utilisateurs pédagogues en informatique. Ce site web sera bientôt enrichi d'outils de partage (zone de dépôt, forum, etc.) afin de faciliter le travail pédagogique autour de CodeLab.

Vous êtes enseignant ? pédagogue ? vous avez des idées d'activités dédiées à la découverte ou à l'apprentissage de la programmation ? Nous serions ravis de travailler avec vous dans le but de construire et de fédérer une communauté d'utilisateurs-pédagogues autours de l'environnement CodeLab.

An environment like CodeLab is intended to allow the development of educational activities, organized according to objectives and levels. For the moment, CodeLab is delivered with a bank of examples and templates, by module and by language. We have the project, not only to work on a model of progression according to objectives, but also to allow the diffusion and the sharing of activities coming from pedagogical users in computer science. This website will soon be enriched with sharing tools (deposit zone, forum, etc.) in order to facilitate pedagogical work around CodeLab.

Are you a teacher? a pedagogue? do you have ideas for activities dedicated to discovering or learning programming? We would be delighted to work with you in order to build and federate a community of user-pedagogues around the CodeLab environment.


Contactez-nous !

Contact us!