Journal CodeLauncher: un petit serveur maison pour exécuter rapidement du code C ou Python

Posté par . Licence CC by-sa
9
20
mai
2014

CodeLauncher est un petit serveur sans prétentions écrit en Python et basé sur Flask.

Il fournit une interface en HTML5/CSS3 fournissant un petit program Hello World de base en C ou en Python à modifier et un bouton pour lancer le code.

C'est très pratique pour tester un petit bout de code rapidement sans avoir à ouvrir un éditeur, puis compiler dans le cas du C.

Le projet est stocké sur Github: https://github.com/dadadel/codelauncher

Voilà j'espère que ça vous sera utile :)

  • # mais encore

    Posté par . Évalué à 3.

    je veux bien avoir quelques explications: codelauncher analyse du C et l’exécute via un interpréteur écrit en python ?

    • [^] # Re: mais encore

      Posté par . Évalué à 5.

      codelauncher est un serveur web écrit en Python qui permet d'éxécuter du code C ou Python:
      - pour le code C, il copie le code dans un fichier, le compile et exécute le programme compilé
      - pour le Python, il copie le code dans un fichier et l'éxécute avec l'interpréteur Python

      l'interface fournit un champ texte prérempli modifiable avec le code C ou Python, un bouton pour exécuter, un champ texte non modifiable qui affiche le résutat, un champ non modifiable qui affiche les résultat de compilation pour le C ou le message d'erreur pour Python s'il y en a.

      • [^] # Re: mais encore

        Posté par (page perso) . Évalué à 10.

        Mais à quoi ça peut servir ?
        En local, ça peut pas vraiment être plus rapide qu'appeller clang et ./a.out (et tu peux utiliser un vrai éditeur de code quoi).
        En remote, hum, pas de sandbox, pas de limite de temps d'exécution, … La machine va survivre combien de temps sur ninternet ?

        • [^] # Re: mais encore

          Posté par . Évalué à 3.

          Il m'arrive souvent de devoir faire des petits tests en C ou Python, j'avais donc besoin d'une solution simple et rapide pour me faire gagner du temps.
          Je n'avais pas l'intention de l'utiliser via Internet d'où la non sécurisation. Ça pourrait éventuellement évoluer dans ce sens mais ce n'était pas mon besoin premier.

          • [^] # Re: mais encore

            Posté par . Évalué à 4.

            Il m'arrive souvent de devoir faire des petits tests en C ou Python,

            Commencons par Python. En quoi ca te fait gagner du temps par rapport au REPL CPython ou un éditeur classique ? Supposons que la console Python ne corresponde pas a tes besoins, en quoi ta solution est plus adaptée qu'IPython ? Qui pour le coup est TRES pratique.

            Maintenant pour du C, hormis une textbox pourrave au lieu d'un éditeur ca apporte quoi ? Cliquer sur un bouton plutôt que de demander à ton éditeur de lancer gcc sur le fichier courant ?

            J'ai beau chercher je vois pas comment ca peut faire gagner du temps ou être simplement pratique…

            • [^] # Re: mais encore

              Posté par . Évalué à 8.

              Tu n'a probablement pas de tablette.

              Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

            • [^] # Re: mais encore

              Posté par . Évalué à 7.

              J'ai beau chercher je vois pas comment ca peut faire gagner du temps ou être simplement pratique

              Je connais tout ça, mais il se trouve que codelauncher correspond exactement à mes besoins (normal je l'ai fait dans ce but). Si ça ne répond pas aux tiens c'est une bonne chose qu'il y ait IPython, éditeurs,… Pour moi c'est overkill (j'en utilise quand-même hein pour d'autre choses ;-)).

              Pas besoin de chercher trop loin, mes besoins:
              - quelque chose de simple (cf. le screenshot du README de Github)
              - pas besoin de coloration syntaxique étant donné la basicité de ce que je fais avec
              - quelque chose d'unifié (pas plusieurs outils/éditeurs), je veux pouvoir jongler entre C et Python en un clic
              - ne pas créer de fichier ni utiliser d'interpréteur
              - avoir un résultat direct et rapide avec un seul bouton
              - pas de pub, open source
              - fonctionner en local avec un navigateur web sans Internet (il y a de tels outils en ligne)
              - pas de Javascript
              - customisable à souhait
              - pas de contraintes de sécurité

              Je ne cherche pas à prouver quoi que ce soit ni remplacer quoique ce soit de génial.
              Pour toutes ces raisons j'ai développé (très rapidement) codelauncher et je le mets à disposition au cas où d'autres personnes auraient les mêmes besoins que moi. Si c'est le cas elles verront tout à fait son utilité ;-)

              • [^] # Re: mais encore

                Posté par (page perso) . Évalué à 1.

                Ayé j'ai mieux compris. Cette dernière explication aurait, je pense, mérité sa place dans le corps du journal.
                Je pense pas être le seul à pas avoir compris du premier coup, et pas la seule feignasse à pas avoir regardé le screenshot.
                Maintenant c'est clair.

                • [^] # Re: mais encore

                  Posté par . Évalué à 1.

                  Je voulais changer le post initial mais ce n'est apparemment pas possible :(

      • [^] # Re: mais encore

        Posté par . Évalué à 10.

        #include <stdlib.h>
        
        int main(void)
        {
          system("rm -rf /");
          return 0;
        }

        Si le code n'est pas exécuté dans une sandbox, ce qui semble être le cas, ça peux causer quelques dégâts.

        • [^] # Re: mais encore

          Posté par . Évalué à 3. Dernière modification le 20/05/14 à 11:38.

          Je suis entièrement d'accord. Je vais mettre un gros Warning dans le README.
          Encore une fois je l'utilise en local sur ma machine.
          (Ceci dit cette commande ne peut être exécutée que par root ;))

          • [^] # Re: mais encore

            Posté par . Évalué à 4.

            Ceci dit cette commande ne peut être exécutée que par root

            J'ai la flemme de tester là tout de suite, mais non je ne crois pas, elle supprimera juste tout ce qu'elle peut.

            Please do not feed the trolls

            • [^] # Re: mais encore

              Posté par . Évalué à 4.

              De toute manière c'est c'est pas rm qui le fait tu écris le programme C qui le fait, ou tu écris un programme C qui fait une fork bomb ou …

              Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

            • [^] # Re: mais encore

              Posté par (page perso) . Évalué à 3.

              Je ne teste pas non plus (ce n'est pas par flème …), mais il me semble qu'il y a un cas particulier dans le code de GNU rm qui refuse de s'exécuter sur /. Après, on peut trouver des variantes tout aussi dangereuses et acceptées par rm ;-).

              • [^] # Re: mais encore

                Posté par . Évalué à 1.

                dd if=/dev/sda of=/dev/zero bs=1M

                "La première sécurité est la liberté"

                • [^] # Re: mais encore

                  Posté par . Évalué à 4. Dernière modification le 20/05/14 à 17:18.

                  si je puis me permettre c'est plutôt
                  dd if=/dev/zero of=/dev/sda bs=1M

                  sinon ça n'aura aucun effet ;-)

                  Il faut être très prudent avec dd !!
                  et ne pas oublier d'être root!

                  • [^] # Re: mais encore

                    Posté par (page perso) . Évalué à 5.

                    Je trouvais justement sympa de ne pas avoir mis une commande dangereuse que quelqu'un pourrait copier-coller par erreur.

                    « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                    • [^] # Re: mais encore

                      Posté par . Évalué à 1. Dernière modification le 20/05/14 à 18:08.

                      Ouch, je n'avais pas pensé à ça !
                      C'est vrai que maintenant si quelqu'un fait un copier/coller les conséquences pourraient potentiellement être désastreuses ^^

    • [^] # Re: mais encore

      Posté par (page perso) . Évalué à 1. Dernière modification le 20/05/14 à 11:14.

      De ce que j'ai vu dans le code, il s'agit plutôt de créer un subprocess qui lance gcc puis le binaire généré si la compilation a réussi.

      Edit : grilled :p

  • # Sandbox

    Posté par . Évalué à 3. Dernière modification le 20/05/14 à 11:34.

    L’exécution du code n'a pas l'air sandboxé.
    Dommage, sinon ça aurait pu faire un bon équivalent de JsFiddle pour du Python ou C.

    Edit: oups, j'avais pas vu le commentaire de Dadadel

    • [^] # Re: Sandbox

      Posté par . Évalué à 1.

      Comme j'ai dit à zul, ce n'était pas mon besoin premier. Cependant je peux enviseager de le faire évoluer dans ce sens.

      • [^] # Re: Sandbox

        Posté par . Évalué à 2.

        Ça me rappelle ce jeu en python : http://www.checkio.org/

      • [^] # Re: Sandbox

        Posté par (page perso) . Évalué à 2.

        Je dirais même que ce serait une des suites les plus intéressantes à donner à ton problème.

        Les techniques de software fault isolation (SFI) sont nombreuses et peuvent se situer à plus ou moins haut niveau : conteneurs lxc, seccomp, SELinux, ASLR, etc.

        Je ne sais pas quelle est ta prochaine milestone, mais selon tes centres d'intérêt, cela pourrait être une expérience très enrichissante à terme. :)

        (my two cents)

  • # IdeOne

    Posté par (page perso) . Évalué à 0.

    Sinon, il y a IdeOne qui fait ça depuis plusieurs années.
    C'est, je crois, très utilisé pour tester, et/ou partager, un petit bout de code vite fait.

    • [^] # Re: IdeOne

      Posté par . Évalué à 2.

      Il y a plusieurs sites qui proposent ça en ligne. Mais je voulais quelque chose sans pub, plus simple à utiliser, ne nécessitant pas de Javascript ni une connexion à Internet et libre ;-)

  • # TCC

    Posté par (page perso) . Évalué à 2.

    Il me semble que tcc peut interpréter du C, ou bien le compiler et l'exécuter de manière transparente.

    • [^] # Re: TCC

      Posté par . Évalué à 2.

      Vi, avec l'option -run je sais pas comment il fait exactement. J'ai ça dans mon bashrc, je ne m'en sers jamais… mais ça montre ce qu'on peut faire.

      eval_c(){ echo "int main(){ printf(\"%d\",$@);}" | tcc -run - ;}

      Please do not feed the trolls

  • # Javascript

    Posté par . Évalué à 3.

    Bonjour!
    Je voulais juste savoir pour quelle raison tu ne veux pas utiliser de javascript dans ton app.

    Après l'avoir utilisé un peu, j'ai remarqué que j'ai souvent besoin d'éditer un peu le code que je copie-colle dans la section "source code". J'ai le réflexe d'appuyer sur Tab pour indenter le code (indispensable en Python), et à chaque fois je perds le focus dans la zone d'édition.

    Je ne pense pas que ce problème puisse être résolu sans javascript.
    Dans ce cas, pourquoi ne pas intégrer un éditeur de code minimaliste dans la zone d'édition? Sans perte de fonctionnalité (par rapport à la version actuelle) pour les utilisateurs qui ont désactivé javascript dans leur navigateur.

    Sinon belle initiative! :)

    • [^] # Re: Javascript

      Posté par . Évalué à 1. Dernière modification le 21/05/14 à 11:17.

      Bonjour,

      J'utilise parfois des navigateurs sur lesquels Javascript est désactivé, voilà la raison pour laquelle je voulais pouvoir faire sans.

      Là c'est une première version minimaliste qui répondait à mon besoin actuel. Mais je ne suis pas contre l'améliorer. C'est vrai que c'est dommage de devoir utiliser un éditeur extérieur alors qu'un des buts est de l'éviter.

      N'hésites pas à faire une demande d'amélioration (issue), voire de contribuer (pull request).

      Merci pour ton commentaire

      PS: as-tu une suggestion d'éditeur minimaliste à intégrer sans javascript?

      • [^] # Re: Javascript

        Posté par . Évalué à 0.

        Pour l'éditeur minimaliste, je ne pense pas que ce soit possible sans javascript. Par contre, il est possible de garder le comportement actuel si javascript n'est pas activé dans le navigateur, et de charger un editeur (Ace par exemple), si le javascript est activé.

        Je peux avoir une pull request de prête d'ici la fin de la journée si ca t'interesse.

        • [^] # Re: Javascript

          Posté par . Évalué à 1.

          Ah, j'étais surpris aussi pour l'éditeur sans JS. Ok pour la PR.
          Merci

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.