Journal UU.zoy.org, le site qui vous a à la colle.

Posté par (page perso) . Licence CC by-sa
Tags :
8
12
juil.
2012

Cher Journal,

Voici la suite des mes aventures avec mon site de paste web2.0. Ce petit message est la suite de ce post qui posait des questions sur la façon de classifier des langages et de ce post qui présentait la version 0 du projet.

Depuis, j'ai pas mal avancé sur plusieurs fronts.

Tout d'abord, j'ai fini par adopter highlight.js comme moteur de mise en couleur. Au départ, je n'avais pas d'a priori sur le moteur de mise en couleur sauf que comme à terme, j'aimerai bien permettre la création de paste encrypté (à la zerobin), je préférais une solution js pure.

Je suis allé lire la doc de Pygments, l'excellent moteur de coloration en python, et surtout, j'ai lu ici comment son intégration était faite dans ruby et c'est assez moche, je cite :

[…] it embeds the python interpreter inside ruby via FFI. This avoids the cost of setting up the python VM on every invocation and speeds up code highlighting from ruby by 10-15x.

Quand j'ai lu ça, j'ai ri. Et puis j'ai décidé que c'était vraiment pas la peine de faire ça côté serveur. Je suis tombé sur highlight.js en lisant le comparatif totalement injuste des colorateurs de syntaxe. Ce qui m'a plu avec highlight.js, c'est qu'il detecte automatiquement la meilleure coloration. Et ça, c'est rudement pratique.

Évidemment, je compte toujours essayer d'utiliser Linguist de Github côté serveur parce qu'il est plus malin que highlight.js. Bah évidemment, ils ne supportent par les mêmes langages et ne les écrivent pas pareil et ça c'est moche (cpp vs c++ par exemple).

J'ai mis une nouvelle version en ligne qui commence à faire des trucs pas trop mal. Tu peux la tester http://uu.zoy.org. On peut paster du texte, ça essaye de deviner, ça sauve le paste sur le serveur, lui donne une jolie url et on peut changer la coloration syntaxe juste en cliquant sur les petits liens à gauche.

Par exemple :

http://uu.zoy.org/v/bo.c++

Je me pose encore tout un tas de questions sur les problématiques suivantes:

  • Expiration automatique ou pas d'un paste
  • Nom des pastes (j'utilise rufus/mnemo, mais c'est prédictible et donc incompatible avec des pastes privés)
  • Pastes privé/Pastes publics

Et j'ai encore des problèmes à résoudre pour faire converger le detecteur ruby avec celui en javascript que j'utilise pour faire le highlight. J'ai un plan pour essayer d'avoir toujours la "meilleure" détection de langage possible. Mais après tout, ce qui est important, c'est que ce soit aussi coloré que possible (peu importe le langage détecté, non ?)

Une fois que j'aurai résolu les trois problèmes ci-dessus, je pourrai faire la première release publique et on ira boire du champomy, hein ?

  • # Y U NO C++

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

    http://uu.zoy.org/v/gu.objective-c

    Euh oui, du C++ détecté en Objective C, et pas moyen de sélectionner C++ ? Bug ?

    Commentaire sous licence LPRAB - http://sam.zoy.org/lprab/

  • # Une autre façon d'utiliser Pygments

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

    Pour info, la coloration syntaxique de LinuxFr.org se fait avec Pygments. Nous n'utilisons pas pygments.rb, mais albino et ça marche bien pour nos besoins : https://github.com/nono/linuxfr.org/blob/master/lib/lfmarkdown.rb#L55

    • [^] # Re: Une autre façon d'utiliser Pygments

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

      Oui, mais je ne trouve pas qu'Albino soit super bien, cf.

      class ShellArgumentError < ArgumentError; end
        include POSIX::Spawn
      
      
        def execute(options = {})
          proc_options = {}
          proc_options[:timeout] = options.delete(:timeout) || self.class.timeout_threshold
          command = convert_options(options)
          command.unshift(bin)
          Child.new(*(command + [proc_options.merge(:input => write_target)]))
        end
      
      

      Ca spawne un éxecutable à chaque fois pour colorier le fragment. Je ne suis vraiment pas fan de la méthode…

    • [^] # Commentaire supprimé

      Posté par . Évalué à 2.

      Ce commentaire a été supprimé par l'équipe de modération.

  • # Contraste !

    Posté par . Évalué à 3.

    Le projet est sympa, mais il y a un détail qui me chagrine : avec des couleurs pâles sur fond pastel, le résultat manque cruellement de contraste !

    Le résultat en capture d’écran.

    À comparer par exemple à gedit ou mieux (sur fond noir, plus reposant, même si ce n’est pas à la mode) : gvim et geany.

    Théorie du pot-au-feu : « Tout milieu où existe une notion de hauteur (notamment les milieux économique, politique, professionnels) se comporte comme un pot-au-feu : les mauvaises graisses remontent. »

    • [^] # Re: Contraste !

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

      Comme je te comprends, homme sous linux. Enfin, je pense que tu es sous linux, parce que chez moi, les captures d'écrans sont beaucoup plus colorées et c'est sûrement une histoire de fonte, brouteur, anti-aliasing par défaut et autres horreurs sub-pixelesque. Et effectivement, c'est laid.

      Mais heureusement, j'ai prévu d'intégrer les nombreux modes de couleurs de highlight.js. Je proposerais même la possibilité de poser un cookie pour que uu s'en souvienne sans qu'il y ait besoin de s'identifier.

      Plus d'info sur les capacités de highlight.js, ici.

  • # Test intéressant

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

    Je suis déçu, il n'a pas trouvé le fortran !

    http://uu.zoy.org/v/behi.c

  • # Ne detect pas matlab

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

    Sympathique projet, mais a echoue a detecte du code Matlab (identifie comme Perl)
    http://uu.zoy.org/v/bemi.perl

    function propertyList = read_property_file(fileName)
    % READ_PROPERTY_FILE - read a project properties file
    % Read a property file and return a structure containing the property list with their values.
    % Parameters :
    % FILENAME : the file which contains the properties. - String - Required
    % Output Parameters :
    % PROPERTYLIST : a structure which contain the properties and their values.
    
      if(~exist(fileName,'file'))
        propertyList=[];
        return;
      end
      fid = fopen(fileName, 'rt');
      propertyList = [];
      while feof(fid) == 0
        tline = fgetl(fid);
         %Do the job only for the line does'nt contain comments which start
         %with the caracter #
        if( ~isempty(tline) && ~strcmp(tline(1),'#'))
            %tmp = split_string(tline,'=');
            tmp = regexp(tline,'=','split');
            if(length(tmp)==2)
              propertyList.(tmp{1})=tmp{2};
            end
        end
      end
      fclose(fid);
    end
    
    
  • # Code canadien.

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

    Ah. J'ai un cas un peu particulier de texte reconnu comme du VBScript, là.
    => http://uu.zoy.org/v/bese.javascript

Suivre le flux des commentaires

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