#151 Le 16/02/2012, à 22:35
- Lumin0u
Re : /* Topic des codeurs [7] */
arg c'est mieux que sur fedora (2.8.2)
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.
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
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…
Hors ligne
#154 Le 17/02/2012, à 12:55
- Kanor
Re : /* Topic des codeurs [7] */
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] */
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
#159 Le 18/02/2012, à 13:05
- tshirtman
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 ?
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#163 Le 19/02/2012, à 15:43
- tshirtman
Re : /* Topic des codeurs [7] */
ValueError je dirais
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)
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#165 Le 19/02/2012, à 19:46
- tshirtman
Hors ligne
#166 Le 19/02/2012, à 20:18
- Dr Le Rouge
Re : /* Topic des codeurs [7] */
TL;DR
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
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] */
@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 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
Hors ligne
#172 Le 20/02/2012, à 19:36
- Elzen
Re : /* Topic des codeurs [7] */
@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.
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#173 Le 21/02/2012, à 20:38
- Rolinh
Re : /* Topic des codeurs [7] */
Et même pas une adresse mail de contact
Ouais
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