Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#151 Le 16/02/2012, à 22:35

Lumin0u

Re : /* Topic des codeurs [7] */

arg c'est mieux que sur fedora (2.8.2) hmm

Hors ligne

#152 Le 17/02/2012, à 08:39

grim7reaper

Re : /* Topic des codeurs [7] */

2.9.0.RC4-1 pour Arch’

Sinon pour Scala j’en pense pas grand-chose vu que je l’ai jamais utilisé et que j’ai entendu beaucoup de bien et beaucoup de mal à son égard.



Et vous savez pourquoi grep s’appelle grep ?
Ça vient de ed.

man 1 grep a écrit :

NAME
       grep, egrep, fgrep - print lines matching a pattern

Or, en ed la commande pour afficher les lignes qui contiennent un pattern (le pattern étant une regular expression, abrégeons ça en re) est

g/re/p

Et voilà, maintenant vous pourrez briller en société…
Ou pas tongue

Hors ligne

#153 Le 17/02/2012, à 09:51

tshirtman

Re : /* Topic des codeurs [7] */

Ah oui, je l'avais su à une époque ^^

bon, j'ai pas oublié que 'tar' vient de 'tape archive' au moins… smile

Hors ligne

#155 Le 17/02/2012, à 13:04

grim7reaper

Re : /* Topic des codeurs [7] */

@Kanor : c’en est où le projet de coloration syntaxique pour la balise code ?

Hors ligne

#156 Le 17/02/2012, à 13:23

Kanor

Re : /* Topic des codeurs [7] */

Il est sous forme de patch pour une version de fluxbb mais vue que le forum a changé de version au moins deux trois fois il faudrait que je le remette à jour
https://code.launchpad.net/~rdubreil/ub … de_syntaxe

Hors ligne

#157 Le 17/02/2012, à 20:12

Lumin0u

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :

Sinon pour Scala j’en pense pas grand-chose vu que je l’ai jamais utilisé et que j’ai entendu beaucoup de bien et beaucoup de mal à son égard.

qu'est ce que tu as entendu de mal? je me doute qu'il y a des défauts mais j'ai beau chercher je trouve aucun site qui en parle.
moi le seul que je vois (et encore je sais pas si ça compte vraiment) c'est le fait qu'il doit maintenir une certaine compatibilité avec java pour pouvoir réutiliser son API (et vice versa) et tourner sur la JVM

Hors ligne

#158 Le 17/02/2012, à 22:31

grim7reaper

Re : /* Topic des codeurs [7] */

@Kanor : j’espère que ça sera intégré un jour.

@Lumin0u : j’ai plus le lien sous la main mais je crois que c’était surtout à propos de la syntaxe.

Hors ligne

#160 Le 18/02/2012, à 13:14

Lumin0u

Re : /* Topic des codeurs [7] */

@grim7reaper: ah oui et aussi, à premiere vue (j'ai pas encore beaucoup testé) le temps de compilation est catastrophique

Hors ligne

#161 Le 18/02/2012, à 21:36

tshirtman

Re : /* Topic des codeurs [7] */

mon premier bot irc…

#!/usr/bin/env python
# coding: utf-8
# author: gabriel pettier
# licence WTFPL

# require http://www.languagetool.org/usage/
# accessible from command line
# update the "binary" variable with the right path if necessary
# require python-irclib

from ircbot import SingleServerIRCBot
from subprocess import check_output
from os.path import expanduser

binary = expanduser('~/languagetools/LanguageTool.jar')
command_prefix = '!'

def usage(command=None):
    return {
            'quit': 'quit the channel',
            'lang=': 'change the lang for this channel',
            'join': 'join the given channel',
            }.get(command, "!quit, !lang=, !join")


class GrammarNazi(SingleServerIRCBot):
    def __init__(self):
        SingleServerIRCBot.__init__(
                self,
                [('irc.freenode.org', 6667)],
                'grammarnazi',
                'grammar nazi bot')

        self.default_lang = 'en'
        self.chans = {}

    def on_welcome(self, serv, ev):
        serv.join('#test-grammarnazi')

    def on_pubmsg(self, serv, ev):
        message = ev.arguments()[0]

        if message.startswith(command_prefix):
            if "help" in message:
                serv.notice(ev.target(), usage(message.split(' ')[-1]))

            elif "lang=" in message:
                self.chans[ev.target()] = message[-2:]
                serv.notice(ev.target(), 'lang changed to: '+ self.chans[ev.target()])

            elif "join " in message:
                chan = message.split(' ')[-1]
                serv.join(chan)
                serv.notice(ev.target(), "joined " + chan)

            elif "quit" in message:
                serv.part(ev.target(), "meh…")

            else:
                serv.notice(ev.target(), 'unknown command, see help')

        else:
            lang = self.chans.get(ev.target(), self.default_lang)
            output = check_output(
                    "echo '%s' | java -jar %s --language %s" % (message.replace("'", ' '), binary, lang),
                    shell=True).split('\n')

            if len(output) > 4:
                for line in output[3:-2]:
                    serv.notice(ev.target(), line)

if __name__ == '__main__':
    GrammarNazi().start()

bon, j'avais mieux à faire, mais j'avais envie…

Dernière modification par tshirtman (Le 18/02/2012, à 21:36)

Hors ligne

#162 Le 19/02/2012, à 15:17

Elzen

Re : /* Topic des codeurs [7] */

Dites, les gens…

j'suis en train de bosser sur un parseur shell en python, là. Enfin, plus exactement, un truc qui va lire une chaîne de caractère et découper ça dans une liste pour que chaque élément de la liste corresponde à un argument shell.

Genre si je passe à ma fonction la chaîne de caractères « echo "$USER@$(hostname)" 'Hello $World!' », ça doit me renvoyer une liste dont le premier élément sera « echo », le deuxième « seth@fadreils » et le troisième « Hello $World! ».

À votre avis, quand je tombe sur un truc qui est syntaxiquement incorrect (genre une ligne qui contient un nombre impair de ', par exemple), je balance quoi comme exception ?

Hors ligne

#164 Le 19/02/2012, à 15:46

Elzen

Re : /* Topic des codeurs [7] */

Ouais, c'était aussi ce à quoi je pensais, mais j'voulais l'avis de quelqu'un de plus « pythonneux » que moi. Merci ^^

Edit : voilà, pouvez me dire ce que vous en pensez ?

#! /usr/bin/python
# coding: Utf-8

import os, sys

# Renvoie la sortie d'une commande.
def __readout(cmdline):
    f = os.popen(cmdline)
    out = f.read()
    f.close()
    if (out[-1:] == "\n"):
        out = out[:-1]
    return out

# Échappe le caractère demandé.
def __escape(c, *specials):
    if (c == "\\"):
        return "\\"
    elif (c == "n"):
        return "\n"
    elif (c == "r"):
        return "\r"
    elif (c == "t"):
        return "\t"
    elif (c == "\""):
        return "\""
    elif (c == "`"):
        return "`"
    elif (c == "$"):
        return "$"
    elif (c in specials):
        return c
    else: # Ah, pas échappable…
        return "\\"+c

# Interprète un nom de variable, une commande ou un calcul.
def __dollar_parse(cmdline):
    if (cmdline == ""):
        return "\\$"
    
    elif (cmdline[:2] == "(("):
        pos = cmdline.find("))")
        if (pos < 0): # Pas valide…
            raise ValueError(")) final non trouvé.")
        result = __readout("echo $"+cmdline[:pos+2])
        return result+cmdline[pos+2:]
    
    elif (cmdline[0] == "("):
        # Okay, c'est donc une commande…
        i,result,antislash = 1,"",False
    
        while (i < len(cmdline)):
            c = cmdline[i]
        
            if (antislash): # Caractère échappé.
                result += __escape(c, "(", ")", "'")
                antislash = False
                i += 1
        
            elif (c == "\\"): # Donc échappement.
                antislash = True
                i += 1
        
            elif (c == ")"): # Voilà, fin de commande.
                return __readout(result)+cmdline[i+1:]
        
            elif (c == "`"): # Commande à lancer.
                cmdline = __command_parse(cmdline[i+1:])
                i = 0
        
            elif (c == "$"): # Variable, commande ou calcul.
                cmdline = __dollar_parse(cmdline[i+1:])
                i = 0
        
            else: # Donc un caractère ordinaire à ajouter.
                result += c
                i += 1
        
        # Si on sort, pas de fin trouvée…
        raise ValueError(") final non trouvé.")
    
    elif (cmdline[0] == "{"):
        pos = cmdline.find("}")
        if (pos < 0): # Pas valide…
            raise ValueError("} final non trouvé.")
        varname = cmdline[1:pos]
        cmdline = cmdline[pos+1:]
    
    elif (cmdline[0].isdigit()):
        varname = cmdline[0]
        cmdline = cmdline[1:]
    
    else: # Bon, un nom de variable simple.
        varname = ""
        for c in cmdline:
            if (c.isalnum()):
                varname += c
                cmdline = cmdline[1:]
            else: break
    
    if (varname == ""):
        return "\\$"+cmdline
    
    # Nous n'avons que les variables d'environnement.
    elif (varname in os.environ):
        return os.getenv(varname)+cmdline
    
    return cmdline

# Interprète une commande.
def __command_parse(cmdline):
    pos = cmdline.find("`")
    if (pos < 0): # Pas valide…
        raise ValueError("` final non trouvé.")
    return __readout(cmdline[:pos])+cmdline[pos+1:]

# Délimite une chaîne sans interprétation.
def __simplequote_parse(cmdline):
    pos = cmdline.find("'")
    if (pos < 0): # Pas valide…
        raise ValueError("' final non trouvé.")
    return cmdline[:pos],cmdline[pos+1:]

# Délimite une chaîne avec interprétation.
def __doublequote_parse(cmdline):
    i,result,antislash = 0,"",False
    
    while (i < len(cmdline)):
        c = cmdline[i]
        
        if (antislash): # Caractère échappé.
            result += __escape(c)
            antislash = False
            i += 1
        
        elif (c == "\\"): # Donc échappement.
            antislash = True
            i += 1
        
        elif (c == "\""): # Voilà, fin de la chaîne.
            return result,cmdline[i+1:]
        
        elif (c == "`"): # Commande à lancer.
            cmdline = __command_parse(cmdline[i+1:])
            i = 0
        
        elif (c == "$"): # Variable, commande ou calcul.
            cmdline = __dollar_parse(cmdline[i+1:])
            i = 0
        
        else: # Donc un caractère ordinaire à ajouter.
            result += c
            i += 1
    
    # Si on sort, pas trouvé de fin.
    raise ValueError("\" final non trouvé.")

# Découpe la chaîne d'arguments et interprète ce qui doit l'être.
def parse(cmdline):
    i,args,curarg,antislash = 0,[],None,False
    
    while (i < len(cmdline)):
        c = cmdline[i]
        
        if (antislash): # Caractère échappé.
            if (curarg == None):
                curarg = ""
            curarg += __escape(c, "(", ")", "'")
            antislash = False
            i += 1
        
        elif (c == "\\"): # Donc échappement.
            antislash = True
            i += 1
        
        elif (c == "\""): # Chaîne avec interprétation.
            parsed = __doublequote_parse(cmdline[i+1:])
            if (curarg == None):
                curarg = ""
            curarg += parsed[0]
            cmdline = parsed[1]
            i = 0
        
        elif (c == "'"): # Chaîne sans interprétation.
            parsed = __simplequote_parse(cmdline[i+1:])
            if (curarg == None):
                curarg = ""
            curarg += parsed[0]
            cmdline = parsed[1]
            i = 0
        
        elif (c == "`"): # Commande à lancer.
            cmdline = __command_parse(cmdline[i+1:])
            i = 0
        
        elif (c == "$"): # Variable, commande ou calcul.
            cmdline = __dollar_parse(cmdline[i+1:])
            i = 0
        
        elif (c == " " or c == "\t" or c == "\n" or c == "\r"):
            # Caractère délimiteur d'argument.
            if (curarg != None):
                args.append(curarg)
            curarg = None
            i += 1
        
        else: # Donc un caractère ordinaire à ajouter.
            if (curarg == None):
                curarg = ""
            curarg += c
            i += 1
    
    if (curarg != None):
        args.append(curarg)
    
    return args

J'pense qu'il y a un soucis au niveau des interprétations imbriquées (genre si une commande lancée avec « "$(commande)" » renvoie un « " » dans sa sortie), mais j'vois pas trop comment arranger ça pour le moment, et j'en ai un peu marre ^^"

Dernière modification par ArkSeth (Le 19/02/2012, à 16:43)

Hors ligne

#166 Le 19/02/2012, à 20:18

Dr Le Rouge

Re : /* Topic des codeurs [7] */

tshirtman a écrit :

TL;DR

lol.png

Sinon, vous serez très heureux d'apprendre que je vais participer à ce projet avec un camarade suédois.

Dernière modification par Dr Le Rouge (Le 19/02/2012, à 20:18)


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#167 Le 19/02/2012, à 20:45

grim7reaper

Re : /* Topic des codeurs [7] */

Et tu vas faire quoi ?

Hors ligne

#168 Le 19/02/2012, à 20:57

Dr Le Rouge

Re : /* Topic des codeurs [7] */

"Implement a stand-alone verifier", la spécification est sur la page principale.


C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog

Hors ligne

#169 Le 20/02/2012, à 10:03

Rolinh

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :

@Kanor : j’espère que ça sera intégré un jour.

+1

@ArkSeth: c'est dans quel but? J'ai un peu de mal à comprendre l'intérêt comme ça.

Hors ligne

#170 Le 20/02/2012, à 10:11

Rolinh

Re : /* Topic des codeurs [7] */

Arf, ce que ça m’énerve de tomber sur des trucs comme ça sad Page incomplète, pas de lien vers le dépôt, pas de précision sur la licence, un site web qui retourne 404...
Je m'étais dit qu'utiliser libstatgrab pour mes widgets pour Awesome aurait été une bonne idée et m'aurait surtout permis de ne pas dépendre d'une plateforme  (la bibliothèque fonctionne aussi sur les *BSD et Solaris).

Hors ligne

#171 Le 20/02/2012, à 12:01

grim7reaper

Re : /* Topic des codeurs [7] */

Et même pas une adresse mail de contact hmm

Hors ligne

#172 Le 20/02/2012, à 19:36

Elzen

Re : /* Topic des codeurs [7] */

Rolinh a écrit :

@ArkSeth: c'est dans quel but? J'ai un peu de mal à comprendre l'intérêt comme ça.

Sur un plan purement théorique, c'est cool pour réfléchir à la façon dont une ligne shell est interprétée.

Dans la pratique, ça sert à… découper une chaîne en arguments pour un shell ^^
Le terminal de python-vte n'accepte les arguments pour une commande que sous forme de tableau, donc quand j'veux lancer dedans une commande qui est censée contenir des arguments, il me faut un parsage quelque part.

Hors ligne

#173 Le 21/02/2012, à 20:38

Rolinh

Re : /* Topic des codeurs [7] */

grim7reaper a écrit :

Et même pas une adresse mail de contact hmm

Ouais sad
J'aurais trouvé cool d'avoir mes widgets directement multiplate-forme. Bon, reste plus qu'à me faire une petite bibliothèque perso en lua...

Hors ligne

#174 Le 21/02/2012, à 21:10

grim7reaper

Re : /* Topic des codeurs [7] */

Bon, ça doit rester jouable.
La bibliothèque est en C et Lua est connu pour bien s’interfacer avec le C donc ça doit pas être trop difficile de faire un wrapper Lua.
Mais bon, c’est vrai que c’est con de refaire le truc dans son coin quand le travail a déjà été fait.

Dernière modification par grim7reaper (Le 21/02/2012, à 21:10)

Hors ligne

#175 Le 22/02/2012, à 20:48

Pylades

Re : /* Topic des codeurs [7] */

Dites, vous savez s’il existe un moyen simple de donner à manger des images en SVG à PyGame ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne