Git Product home page Git Product logo

naereen / peut-on-coder-avec-ocaml-python-et-c-par-sms Goto Github PK

View Code? Open in Web Editor NEW
7.0 3.0 1.0 1.92 MB

Je souhaite répondre à la question suivante : peut on coder avec OCaml, Python et C par SMS ? Oui ! Attention, proof of concept à héberger soi-même localement, et c'est payant avec Twilio.com, et très expérimental ! Mais amusant !

Home Page: https://perso.crans.org/besson/publis/Peut-on-coder-avec-OCaml-Python-et-C-par-SMS.git/

License: MIT License

Makefile 8.38% Python 77.78% C 1.21% Shell 11.82% Standard ML 0.04% OCaml 0.77%
python ocaml c sms-messages experimental fun teaching wtf flask-application twilio

peut-on-coder-avec-ocaml-python-et-c-par-sms's Introduction

🇫🇷 ☎️ Peut on coder avec OCaml, Python et C par SMS ? Oui !

J'ai répondu à la question suivante : peut on coder avec OCaml, Python ou C par SMS ? Spoiler alert: oui ! TL;DR: Voici un schéma d'explication :

./screenshots/proof-of-concept-explanation.png

Quel objectif ?

Je souhaitais pouvoir faire ça, depuis mon téléphone :

  1. J'envoie un texto qui content « pw:PASSWORD python: print("Hello world from Python!") » à 0612345678 (un numéro spécifique, pas le vrai), depuis mon téléphone (sans appli, sans Internet, sans rien d'autre que des vieux SMS en GSM) ;

  2. Quelques secondes plus tard, je reçois de ce numéro 0612345678 un SMS qui content « Python:Out[1] Hello world from Python! » ;

  3. Je veux que ça marche pour des petits programmes en Python 3, OCaml 4.05+ et C11 ;

  4. Je veux les fonctionnalités suivantes :

    • qu'il y ait ce mot de passe ;
    • qu'il y ait un numéro incrémental de cellule sortie : trois requêtes de suite seront Out[1]: ..., Out[2]: ..., Out[3]: ..., etc.
    • que ça fonctionne sans problème pour ces trois langages (voir plus ?) ;
    • que l'exécution soit sécurisée, et isolée (avec camisole dans une VM) ;
  1. Premières étapes :
    • que le code soit exécuté sur ma machine (ou sur un serveur distant quand ce sera prêt) ;
    • je veux devoir lancer manuellement le serveur, et afficher dans une console ce qui se passe ;

Solution ?

Ce dépôt GitHub contient un petit script Python 3 (avec un serveur Flask) pour expérimenter et essayer cela.

Quelques questions et réponse :

  1. Quel numéro de SMS ? Avec un compte payant sur Twilio (voir les prix) ;

  2. Quel architecture logicielle ?

    • Localement sur mon ordinateur, je vais lancer une petite application Web écrite avec Flask.
    • Cette application écoute un webhook local (qui peut être ouvert sur l'Internet global avec ngrok).
    • Quand un message arrive sur ce webhook, l'application Flask répond en renvoyant un SMS avec le résultat de l'exécution du code soumis par la requête au webhook.
    • Avec l'API de Twilio, on peut connecter cette appli (ouverte avec ngrok) au numéro de téléphone (payant) fourni par le compte Twilio.
    • Avec tout ça, je peux exécuter (et voir la sortie et le code de retour) en envoyant un SMS à ce numéro.
  3. Où ça en est ?

    1. Juste une idée pour l'instant.
    2. C'était une idée le vendredi 19 février vers 13h, c'était quasiment terminé le soir même !
    3. Testé et fonctionnel avec toutes les fonctionnalités que j'espérais, en C, Python et OCaml !
    4. TODO: il reste quelques trucs à faire, regardez les tickets ouverts, et les TODO: dans ce fichier. (et le code), mais bon le "proof of concept" est terminé, moi ça me suffit.

Exemples

Usage "simple"

Attention, ces explications sont aussi complètes que possible, mais tout ce projet est très expérimental ! Je ne saurai être tenu responsable du moindre problème sur votre machine, faites attention ! hic sunt dracones!

  1. Installer ce projet (détails plus bas) ;
  2. Créer un compte Twilio, il faut un email valide, et un numéro de téléphone valide pour vérifier que vous n'êtes pas un robot !
  3. créer un numéro de téléphone Twilio (payant mais 15€ offert, cela permet d'essayer le service pour environ 12/0.14=85 essais, c'est déjà pas mal !) ;
  4. Lancer le serveur Flask local, avec avec make local, tester le ;
  5. Si ça marche, essayez le serveur distant avec make ngrok et allez ajouter l'adresse ngrok du webhook dans le panneau de contrôle Twilio, attention à bien la mettre sous la forme https://TRUC.ngrok.io/twilio (j'oublie le /twilio une fois sur deux !) ;
  6. Tester avec des exemples :
    • Par exemple test pour tester, ou Langages ? pour recevoir la liste des langages (possiblement) supportés...
    • Par exemple pw:PASSWORD python: print("Hello world from Python!") (avec le mot de passe choisi, remplaçant PASSWORD), comme montré plus bas ;
    • Cela va vous envoyer un texto contenant la réponse de l'exécution de ce programme, si tout est bien configuré !
    • Mais n'en abusez pas trop, ⚠️ chaque SMS envoyé et reçu coûte ~0.07€ ! C'est vraiment juste conçu pour « l'effet démo woooooaaa 😍 » !
  7. Soyez tout content 👍 ! Et ajouter une petite étoile ⭐ à ce projet ! Parlez en à vos collègues ou à vos camarades, je suis curieux de vos avis et vos idées !

ca marche en langage OCaml aussi

Tester votre configuration

Essayez les SMS suivants :

Input: test
Output: It works!
Input: Bonjour
Output: Bien le bonjour depuis Python !
Input: Langages ?
Output: La liste des langues prises en charge est : c, ocaml, python

Messages de tests sans Camisole backend juste dire bonjour et liste des langages

Aide

Tout se fait avec un Makefile (de GNU Make), donc l'aide aussi :

$ make help
Help for utilities (by Lilian BESSON, https://github.com/Naereen/Peut-on-coder-avec-OCaml-Python-et-C-par-SMS.git)
Please use 'make <target>' where <target> is one of
  setupvenv  to set-up and install requirements in a Python3 virtualenv
  server     to do everything
  local      to do local only
  test_hello_api connects and tests Camisole backend
  test_api   connects and tests Camisole backend
  notify     to notify that the server is ready
  clean      to clean the temp files.
  ngrok      if the local server is ready, open it to the world with https://ngrok.com

Cas d'échec

Les scripts sont écrits en anglais, et ils devraient afficher des messages d'erreurs clairs selon les causes d'échec. Merci de signaler des bugs si vous en rencontrez, en précisant quelle version de Camisole, Flask, Twillio, et Python vous utilisez, et en incluant le message d'erreur entier. Merci d'avance 🙏 !


Installation

Uniquement testé quelques minutes sur ma machine, avec Ubuntu 18.04.

  • Ca ne marchera PAS sous Windows ou Mac.
  • Ca marchera peut-être sous d'autres GNU/Linux, ou *NIX-like... mais je ne sais pas.

Prérequis

Commencez par suivre ces instructions :

  • Il faut avoir Python 3, et virtualenv (dans la librairie standard) ;
  • Il faut avoir curl et GNU make (normalement présent, sinon sudo apt get curl make) ;
  • Il faut suivre les instructions d'installation de Camisole, avec l'option la plus sécurisée qui est avec une VM ;
  • Démarrez la VM, connectez-vous, changez le mot de passe ($ passwd, ancien mot de passe, nouveau mot de passe deux fois) ;
  • Depuis votre bureau (pas depuis la VM), vérifiez que http://localhost:42920/ est bien accessible, que http://localhost:42920/languages donne une liste de langages avec au moins Python, C et OCaml, et que http://localhost:42920/system est cohérent ;
  • Faites make test_api pour vérifier que la VM peut bien exécuter des petits codes Python, OCaml et C ;
  • Si tout est bon, étape suivante !

Cette application Flask

Facile à lancer ! Clonez ce dépôt, allez dans le dossier, et utilisez le directement, sans le copier ailleurs.

  • Première exécution :

    cd /tmp/
    git clone https://GitHub.com/Naereen/Peut-on-coder-avec-OCaml-Python-et-C-par-SMS
    cd Peut-on-coder-avec-OCaml-Python-et-C-par-SMS/
    # set-up and install everything in a Python3 virtualenv
    make setupvenv
    # starts the Flask API, connects to and tests Camisole backend, and notify you of success
    make local
    # check that it works by going to http//localhost:5000 it should say hi and direct you to your https://www.twilio.com/console/ dashboard, and activate redirect to https://CHANGE.ngrok.io/
  • Remarque : si le mot de passe n'existe pas encore, il faudra le créer lors du premier lancement du service. Le Makefile automatise cela, mais si jamais :

    echo "PASSWORD" | base64 > .password.b64
  • Maintenant, si tout a bien marché, ouvrez votre navigateur sur http://localhost:5000/test/python, http://localhost:5000/test/ocaml ou http://localhost:5000/test/c pour tester l'exécution de code via Camisole. Démonstration :

./screenshots/demo-documentation-API-localhost.png

Si ça marche, vous êtes prêt-e à passer à l'étape suivante :

  • Exécutions suivantes :

    # if this works, kill it, and restart with launching ngrok
    make server
    # add ngrok webhook to https://www.twilio.com/console/phone-numbers
    # test it, using phone number!
    

    Maintenant, si tout a bien marché, ouvrez votre navigateur sur https://TRUC.ngrok.io/test/python, https://TRUC.ngrok.io/test/ocaml ou https://TRUC.ngrok.io/test/c pour tester l'exécution de code via Camisole, depuis N'IMPORTE QUEL APPAREIL CONNECTÉ à Internet ! Gardez ce lien toujours privé ! Bon de toutes façons, il n'est valable que 2h avec l'offre gratuite de ngrok... mais en 2h, quelqu'un qui voudrait casser votre machine pourrait réussir !

Demonstration :

./screenshots/demo-documentation-API-behind-ngrok.png

Connexion avec Twilio

Si ça marche, vous êtes prêt-e à passer à l'étape suivante :

Lisez l'article https://www.fullstackpython.com/blog/respond-sms-text-messages-python-flask.html pour plus de détails.

  • Créez un compte d'essai Twilio. Il faut un mail valide, et un numéro de téléphone valide.

  • Créer un numéro de téléphone Twilio. Il faut remplir quelques informations légales et téléverser une preuve d'identité, e.g., un passeport (ou un échantillon sanguin 🤔).

  • Accédez à l'écran de gestion des numéros de téléphone et cliquez sur le numéro de téléphone que vous souhaitez configurer pour répondre aux messages texte entrants.

  • Faites défiler vers le bas jusqu'à près du bas de la page et recherchez l'en-tête "Messagging". Modifiez la zone de texte "A Message Comes in" afin qu'elle ait votre URL de transfert ngrok plus la route "/twilio", comme indiqué dans cette capture d'écran.

respond-sms-python-flask/number-configuration

  • Relancez l'appli Flask, tout en ayant encore la VM Camisole ouverte, évidemment :
# if this works, kill it, and restart with launching ngrok
make server
# test it, using phone number!

🚀 Des SMS qui exécutent du code

Maintenant, si tout a bien marché, 🎉 vous pouvez envoyer un SMS au format suivant au numéro Twilio, et l'appli Flask va vous répondre, en passant par le tunnel ngrok !

pw:PASSWORD python: print("Hello world from Python!")
pw:PASSWORD ocaml: print_endline "Hello world from OCaml!";;
pw:PASSWORD c:
#include <stdio.h>
/* Say hello */
int main(void) {
printf("Hello world from C!");
return 0;
}

ca marche en langage C aussi

J'ai pu tester dimanche 21/02/2021 cette partie, je l'ai fais dès que mon numéro Twilio avait été activé, environ 32h après la demande (cf ticket #1) !

Si quelque chose ne fonctionne pas bien, merci de signaler un problème 👏 !

D'autres trucs

  • Au lancement de l'appli Flask, le programme vérifie que le mot de passe (encodé en base64 comme un fichier local) est bien présent dans .password.b64 : ne le donnez à personne, ne l'envoyez pas sur un Git, ou en ligne ;
  • Au lancement, l'appli teste pour voir que la connexion avec la VM Camisole fonctionne bien, et qu'elle est capable d'exécuter du code Python, OCaml et C .
  • Quand quelque chose se passe mal, la console dans laquelle on a lancé l'appli Flask affiche plein de choses. Essayez de régler ça vous même, sinon ouvrez un ticket !
  • Malgré la VM, et les précautions, ce n'est PAS DU TOUT SÉCURISÉ ! Ne testez pas les limites du système, je ne saurai tenu responsable de RIEN !
  • Regardez Tests.md pour plus d'informations sur des entrées/sorties qui devraient être sécurisées ! TODO: tester ça !

Que reste-t-il à faire ?

  • Ça me semble déjà génial, pour une petite expérience, terminée en 48 heures !
  • C'est un bon "proof of concept"...
  • A montrer à des élèves quand on parle de langages de programmation, interprété ou compilé... et de sémantique !
  • Pour autant que je sache, derrière ce truc par SMS y'a juste mon pote avec sa calculatrice !

💥 TODO

GitHub issues GitHub issues-closed Average time to resolve an issue Percentage of issues still open

  • TODO: More tests from json_tests/ folder ;
  • TODO: Automate creation of .json files from .python, .ocaml, .c files (for these json_tests);
  • TODO: When reading input() for password, use a "hidden" input like real password on UNIX ? Useless, but fun to try!
  • TODO: Allow any language supported by Camisole (Ada, C, C#, C++, D, Go, Haskell, Java, Javascript, Lua, OCaml, PHP, Pascal, Perl, Prolog, Python, Ruby, Rust, Scheme) ? This is okay from backend, but frontend so far is manual.
  • DONE: Clean up code? It's already not bad 👌!

More TODO?

  • Write a wrapper script like run-camisoled, that can read a file in Python/OCaml/C, and safely pass it to Camisole VM, and pretty-print its JSON results! For my teaching next year this would be veryyy useful!

Avec pip ? Non.

Ce projet ne sera pas distribué sur le dépôt de packet Pypi, et je ne souhaite pas qu'il puisse être installé directement depuis GitHub avec pip.

PyPI implementation TODO


Comparaison à d'autres projets

Si je me suis embêté amusé à faire ça moi-même, croyez bien que c'est parce que je n'ai rien trouvé d'équivalent ! Mais je suis curieux, envoyez moi un mail ou ouvrez un ticket si vous connaissez une autre solution !

  • TODO

À propos 📓

Langage et version(s) ?

Écrit en Python v3.6+ (version CPython), et bien en se basant sur de super projets libres et gratuits :

📜 Licence ? GitHub licence

Ce projet et cette documentation sont distribuées en accès libre selon les conditions de la licence MIT (cf le fichier LICENSE en anglais). © Lilian Besson, 2021.

made-with-python Bash Shell HitCount

Maintenance Demandez moi n'importe quoi ! ForTheBadge uses-badges ForTheBadge uses-git forthebadge made-with-python ForTheBadge built-with-swag

peut-on-coder-avec-ocaml-python-et-c-par-sms's People

Contributors

naereen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

peut-on-coder-avec-ocaml-python-et-c-par-sms's Issues

Use this knowledge of Camisole to try to write "bull-proof multi-language script launcher" for my teaching activites

I want to write a wrapper script like run-camisoled, that can read a file in Python/OCaml/C, and safely pass it to Camisole VM, and pretty-print its JSON results!

For my teaching next year this would be veryyy useful!.
TODO: read https://github.com/mcandre/linters and https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis and about sandboxing in general

Overview of the goal

  • Imagine you gave a Python exam to a large group of student (15-400).
  • You don't have any automated tests, you'll basically have to run every file, and then open it to add some comments, and finally grade it.
  • Students are expected to include examples and tests in their files, to save their figures to local image files, etc.
  • Oh, and at least one student has written a very evil program that will read your entire home folder, compress it and send it over the network to his Dropbox folder, then will delete and burn your laptop to ashes. 💣 one of your student is a secret Nazi hacker!

So the setup is like this:

$ ls TP1_etudiants/
Etudiant1.py Etudiant2.py ... Etudiant49.py
$ python EtudiantHackeur.py
==> all your data belogns to us!
==> destroying your laptop
==> cry and just quit your job already, old man!

To avoid such catastrophy, the solution would be

$ run-camisoled EtudiantHackeur.py
print output of this script, but ran from a FULLY secure isolated environment!

I want to have this "multi-language" launcher script that can execute Python3, OCaml 4.05+, C11 (and more) code, in a safe and secure environment.

A few reasons for that:

  • I should assume that every file submitted by a student is a very dangerous virus, and any attempt to execute/interpret/compile it locally will make my computer explode ;
  • Every student's file can generate a few figures, or temporary files, and I don't want to have ~139 figures and ~153 temporary files after having executed 50 Python scripts in the same folder!
    • one easy solution is to move each file to its sub-folder!
  • I don't want to think about which languages it is written in, because for the same exam some students will have the choice between C, OCaml and Python!
  • I want to keep a local database, in every folder like this, for each student at each time I run their script, showing what their script shows.

So my solution should:

  • be open-source, easily installable (of course) ;

  • launch the Camisole VM if not already available ;

  • execute the code based on its MIME type or file extension (.py -> "python", .ml -> "ocaml", .c -> "c", etc) ;

  • pretty print the results, giving lots of information: compilation & execution time, stdout & stderr output (pretty printed accurately?)

  • possibly (but not by default) copy back all files generated by the script, from the VM storage to the local folder? or at least allow to view/read them?

  • store the results in a local file? (a local database? a text file? Markdown or org-mode file?)

  • Maybe it's not important that this script can handle multi-files, this is easy to do with a for loop outside the script:

$ ls TP1_etudiants/
Etudiant1.ml Etudiant2.ml ... Etudiant49.ml
$ for i in TP1_etudiants/*.ml; do
    clear; echo $i; hr
    run-camisoled $i
    # this will print a lot of information about student $i, and you have a break to read them, maybe open the file in VSCode, to add annotation etc
    read;
done
  • BUT I would LOVE that I could give multiple files and it just executes them, like if I provided a library.ml file (prior to exam) to each student, some student wrote etudiant37.ml and then I want to test their performance using tests.ml
$ ocamlopt library.ml etudiant37.ml tests.ml

Bonus idea?

Features for just OCaml

  • what about using ocamlprof to add execution counter everywhere in the file?
  • using merlin, mascot (not updated since 2012) or other linter?

Features for just Python

  • there are a lot of Python linters, pylint, pyflakes etc: which one to choose?
  • automatic line/memory profiling of each code??

Features for just C

  • I don't know much, but I also guess there are a lot of C linters
  • automatic line/memory profiling of each code??

Tools to use?

Que se passe-t-il avec les exemples "vicieux" décrits dans Tests.md ?

Que se passe-t-il avec les exemples "vicieux" décrits dans Tests.md ?

Tests

Je donne ci-dessous des exemples d'entrées sorties, pour tester le système, dans différents langages.

Je veux montrer à chaque fois des exemples :

  • numériques (pour montrer que l'on peut s'en servir comme d'une petite calculatrice) ;
  • montrant un élément de syntaxe spécifique au langage (dict/set/list/tuple en compréhension en Python, type/match with/let rec en OCaml, fonction/pointeur en C) ;
  • montrer que l'on peut importer un module ou une bibliothèque.

Bonus :

  • montrer que le système gère bien les stderr et les exceptions ?
  • TODO: montrer que l'on peut afficher proprement le code de retour 0 / 1 / autre ?
  • montrer que le système exécute bien le code en isolement de la machine : pas capable de lire (ou écrire) quoique ce soit, de supprimer un fichier, et d'utiliser Internet.

Lancer ou automatiser ces tests ?

Les tests sont définis dans le dossier json_tests.

Ces tests sont automatisés avec le super Makefile intégré :

$ make test_python
$ make test_ocaml
$ make test_c

TODO: automatically build the fileNUM.ext and fileNUM.json from this file?

En Python

Les tests sont définis dans le dossier json_tests.

  • numériques (pour montrer que l'on peut s'en servir comme d'une petite calculatrice) ;
In[1]: print(0.1+0.1+0.1)
Out[1]: 0.30000000000000004
  • montrant un élément de syntaxe spécifique au langage (dict/set/list/tuple en compréhension en Python, type/match with/let rec en OCaml, fonction/pointeur en C) ;
In[2]: sum(max(i**k-j**(k+1) for i in range(2**k) for j in range(3**k)) for k in [3,4,5,6,7,8])
Out[2]: 17878636286225238456
  • montrer que l'on peut importer un module ou une bibliothèque :
In[3]: import math; print(math.exp(math.pi)**3 + math.cos(math.sin(1)))
Out[3]: 12392.314174662086
In[4]: import os; print(f"os.getcwd()={os.getcwd()}")
Out[4]: os.getcwd()=/home/lilian/publis/Peut-on-coder-avec-OCaml-Python-and-C-par-SMS.git
  • montrer que le système gère bien les stderr et les exceptions ?
In[5]: print(f"2021/0 = {2021/0}")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
In[6]: print("This is fine."); assert(0.1+0.1+0.1 == 0.3)
This is fine.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
  • montrer que le système exécute bien le code en isolement de la machine : pas capable de lire (ou écrire) quoique ce soit, de supprimer un fichier, et d'utiliser Internet.
In[7]: file=open("/etc/passwd", "r"); print("".join(file.readlines()))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/etc/passwd'
In[8]: path="test.txt"; file=open(path, "w"); print("Test to write to a file from Python: succeed, now file is gone", file=file, flush=True); file=open(path, "r"); print("".join(file.readlines())); import os; os.remove(path)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
In[9]: import re; from urllib.request import urlopen; html="".join(l.decode() for l in urlopen("http://monip.org/").readlines()); ip=re.search("[0-9]+.[0-9]+.[0-9]+.[0-9]+", html).group(0); print(f"Your IP address is: {ip}")
Out[9]: 1.2.3.4

En OCaml

Les tests sont définis dans le dossier json_tests.

TODO: WARNING: camisole uses ocamlopt and not ocaml toplevel!

  • numériques (pour montrer que l'on peut s'en servir comme d'une petite calculatrice) ;
# print_endline (string_of_bool ((0.1 +. 0.1 +. 0.1) = 0.3));;
false
- : unit = ()
  • montrant un élément de syntaxe spécifique au langage (dict/set/list/tuple en compréhension en Python, type/match with/let rec en OCaml, fonction/pointeur en C) ;
# type 'a btree = Leaf of 'a | Node of ('a btree * 'a btree);; let rec sum (tree : int btree) = match tree with | Leaf i -> i | Node(left, right) -> (sum left) + (sum right);; sum( Node(Leaf 10, Node(Leaf 20, Leaf 30)) );;
- : int = 60
# let rec fibo n = match n with | 0 -> 0 | 1 -> 1 | n -> (fibo (n-1)) + (fibo (n-2)) in fibo 30;;
- : int = 832040
  • montrer que l'on peut importer un module ou une bibliothèque :
# let range n = Array.init n (fun i -> i) in List.fold_left (+) 0 (Array.to_list (range 100));;
- : int = 4950
  • montrer que le système gère bien les stderr et les exceptions ?
# 1 / 0;;
Exception: Division_by_zero.
# print_endline "This is fine."; 1 / 0;;
This is fine.
Exception: Division_by_zero.
  • montrer que le système exécute bien le code en isolement de la machine : pas capable de lire (ou écrire) quoique ce soit, de supprimer un fichier, et d'utiliser Internet.
# Sys.command("cat /etc/passwd");;
cat: /etc/passwd: No such file or directory
- : int = 1

TODO: convert these code to not use Sys.command but pure OCaml API.

# Sys.command("echo 'Test to write to a file from OCaml: succeed, now file is gone' > test.txt ; cat test.txt ; rm -vf test.txt");;
Test to write to a file from OCaml: succeed, now file is gone
removed 'test.txt'
- : int = 0
# Sys.command("wget --quiet http://monip.org/ -O - | html2text | grep -o 'IP : .*'")
IP : 1.2.3.4
- : int = 0

En C

Les tests sont définis dans le dossier json_tests.

TODO:


Et autres ?

Comme ce système utilise Camisole, je pourrais tester tous les langages supportés :

Ada, C, C#, C++, D, Go, Haskell, Java, Javascript, Lua, OCaml, PHP, Pascal, Perl, Prolog, Python, Ruby, Rust, Scheme.

Sur ma machine, je pourrai tester Lua, Java, Javascript et Rust.

Allow any language supported by Camisole, and 3+ write tests for each one

  • Allow any language supported by Camisole (Ada, C, C#, C++, D, Go, Haskell, Java, Javascript, Lua, OCaml, PHP, Pascal, Perl, Prolog, Python, Ruby, Rust, Scheme) ?
  • This is okay from backend ;
  • But frontend so far is manual ;
  • I should add tests, both in the first_tests.py and json_tests/ folder, for each new languages... so let's do ONE AT A TIME!

New tests for languages

  • Ada
  • C
  • C#
  • C++
  • D
  • Go
  • Haskell
  • Java
  • Javascript
  • Lua
  • OCaml
  • PHP
  • Pascal
  • Perl
  • Prolog
  • Python
  • Ruby
  • Rust
  • Scheme

Attendre que Twilio m'autorise mon numéro... et tester ça en vrai !

  • Attendre que Twilio m'autorise mon numéro...
  • ⚠️ bien penser à écrire https://TRUC.ngrok.io/twilio et pas juste https://TRUC.ngrok.io/ !
  • Le tuto originel était faux sur l'API Twilio à utiliser, elle a été mise à jour récemment, cf nouvelle version
  • et tester ça en vrai !
  • Est-ce que le password marche ? que faire si pas présent ? -> ne rien répondre, sinon ça coûte de l'argent !
  • Est-ce que Python marche ?
  • Est-ce que OCaml marche ?
  • Est-ce que C marche ?
  • Est-ce que l'entrée peut-être sur plusieurs lignes ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.