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.

#1276 Le 07/06/2013, à 23:45

Pylades

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

GCC implémente complètement C++11 (mais pas encore sa bibliothèque standard).

Dernière modification par Πυλάδης (Le 07/06/2013, à 23:48)


“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

#1277 Le 08/06/2013, à 13:20

Jules Petibidon

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

Πυλάδης a écrit :

Ouais, je cherche toujours une base fondée sur les clefs qui soit garantie d’être thread-safe en python, mais je n’ai pas trouvé. tongue

Désolé pour la réponse un peu super tardive big_smile

T'as regardé du côté de Tokyo Cabinet ?

https://pypi.python.org/pypi/tokyo-python/0.7.0

Hors ligne

#1278 Le 08/06/2013, à 16:00

ljere

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

je vous donne le script finale qui me donne le résultat escompté

#!/usr/bin/python3
# coding: utf-8
# ========================================================================================
#
# Script de ljere
# license GPL V3 or later
#
# Description :
# Ce script permet de visualiser les mangas en vostfr que je peux télécharger
#
# ========================================================================================
# -----------------------------------------------
# Ajout de bibliothèques utiles
# -----------------------------------------------

# BeautifulSoup est une librairie permettant d'analyser un arbre (du HTML ici)
import bs4
# urllib est une librairie permettant d'ouvrir des URLs simplement (plutôt en HTTP ici)
import urllib.request

# téléchargement de la liste des mangas en vostfr dans un fichier nyaa.txt
url = urllib.request.urlopen("http://www.nyaa.eu/?page=search&cats=0_0&filter=0&term=vostfr").read()

# parsing Html
soup = bs4.BeautifulSoup(url)
tds = soup.select("[class~=tlistname]")		               # je ne conserve que les noms

nyaa = []                                                      # j'initialise nyaa
for td in tds:                                                 # je recherche les noms
    nyaa.append(td.find('a').get_text())

with open('nyaa.txt', mode='w', encoding='utf-8') as fichier:  # j'ajoute le résultat dans nyaa.txt
    fichier.write("\n".join(nyaa))                             # j'ajoute un retour à la ligne

ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1279 Le 08/06/2013, à 16:14

The Uploader

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

Évite les commentaires qui paraphrasent le code (tels que "j'initialise nyaa"). Explique plutôt l'intention du code (pas l'intention d'une seule ligne de code hein, plutôt un ensemble tel qu'une fonction ou méthode).

(just my 2 cents)

Dernière modification par The Uploader (Le 08/06/2013, à 16:26)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1280 Le 08/06/2013, à 16:23

ljere

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

disons que ça m'aide à voir ou je vais ^^


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1281 Le 08/06/2013, à 16:26

The Uploader

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

Genre "# je recherche les noms" ça c'est bon. smile


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1282 Le 08/06/2013, à 17:29

Dr Le Rouge

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

Perso je me retrouve facilement avec des fonctions qui font un paquet de lignes parce que ce sont les implémentations directes d'algos mathématiques (surtout quand j'en suis encore au prototypage (ça se dit?)). Du coup, j'ajoute des commentaires qui décrivent la structure de mon code en faisant des section, sous-sections, etc (comme dans un document LaTeX). Et vu que meuporg-mode, c'est cool, je peux naviguer directement entre les-dites sections avec un autre buffer :

  20: SECTION  Differential Cryptanalysis 
  23:   SUBSECTION  Identifying correct differential
  44:   SUBSECTION  Initialisation
  46:     SUBSUBSECTION  Constants 
  52:     SUBSUBSECTION  Difference indices 
  60:   SUBSECTION  Creating pairs of ciphertexts with the good difference
 100:   SUBSECTION Going through all the ciphertext pairs and all the possible partial keys
 110:     SUBSUBSECTION  Generating key candidate 
 133:     SUBSUBSECTION  Computing corresponding last
 159:     SUBSUBSECTION  Filtering
 168:   SUBSECTION  Finding the key candidates with the best scores
 174:     SUBSUBSECTION  Finding max score and average score
 183:     SUBSUBSECTION  Finding the best candidates
 189:   SUBSECTION  Outputing the results (if any)
 192:     SUBSUBSECTION  Displaying the best candidates 
 198:     SUBSUBSECTION  Comparing results with the actual key 

(SUB)*SECTION ayant une font particulière qui ne le rend pas aussi visible (je compte améliorer mon code pour que ce soit remplacé par "A-", "1.", "a)", "(i)", etc.

Du coup, j'ai pas besoin d'ajouter d'autres commentaires dans mon code --- à part ceux pour doxygen évidemment.


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

#1283 Le 08/06/2013, à 17:50

Diahovez-Ivan

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

@ljere,cela  aide les commentaires des autres personnes  ...


Profil ...
Asus R700VM-TY092V : Linux Mint (15) 13.04  Mate // Tinkpad T61: Linux Mint (14) 12.10 Xfce
Jeux

Hors ligne

#1284 Le 08/06/2013, à 21:58

:!pakman

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

Un vieux lien, trouvé via le site de Korben smile

Les ouvrages à la fin ont l'air intéressants aussi.


...

Hors ligne

#1285 Le 09/06/2013, à 14:29

grim7reaper

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

@ljere : le code est clean.
Après, comme The Uploader l'indique, les commentaires pourrait être plus pertinent. Mais bon, comme tu débutes on peut comprendre que tu veuilles commenter chaque ligne.



Le Rouge a écrit :

Perso je me retrouve facilement avec des fonctions qui font un paquet de lignes parce que ce sont les implémentations directes d'algos mathématiques

Mouais, ça c'est pas une excuse.
Rien n'empêche de découper, c'est même conseillé pour pouvoir tester ton implémentation efficacement.

Bon encore, toi pour ce que j'ai vu de tes codes, ça semble aller.
Mais je suis déjà passé derrière du code de matheux ou de physiciens, bah des fois t'a envie de les retrouver et de leurs rendre une visite avec une hache...
Bon cela dit, je l'ai aussi vu avec des développeurs de formations...



@:!pakman : le second bouquin est une référence quand on veut étudier la science des compilateurs. Il est surnommé le Dragon Book.

Hors ligne

#1286 Le 09/06/2013, à 15:49

Jules Petibidon

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

Yop yop !

Mise a jour de Grenier avec quelques changements assez profonds et quelques ajouts qui avaient été suggérés ici.
https://bitbucket.org/Jules_Petibidon/grenier


Si quelques pythonneux sont en manque de lecture... Et quelques anglicistes aussi, parce que j'ai du mal à estimer si la doc est claire ou pas smile

PS : les TU viendront... Faut juste régler un problème de compatibilité avec mon poil dans la main.

Dernière modification par Jules Petibidon (Le 09/06/2013, à 15:50)

Hors ligne

#1287 Le 10/06/2013, à 11:10

ljere

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

bonjour j'ai créé un nouveau script dans le même genre avec un autre site dont j'ai masqué le nom pour éviter toute publicité
j'aimerai votre avis sur le code j'ai été guidé par Didier-T (que je remercie pour son aide)

#!/usr/bin/python3
# coding: utf-8
# ========================================================================================
#
# Script de ljere
# license GPL V3 or later
#
# Description :
# Ce script permet de visualiser des séries et des films d'un site masqué en français
#
# ========================================================================================
# -----------------------------------------------
# Ajout de bibliothèques utiles
# -----------------------------------------------

# BeautifulSoup est une librairie permettant d'analyser un arbre (du HTML ici)
import bs4
# urllib est une librairie permettant d'ouvrir des URLs simplement (plutôt en HTTP ici)
import urllib.request
# re est une librairie permettant d'utiliser les expressions rationnelles (regular expressions)
import re
# os est une librairie permettant d'interagir avec le système
import os

# téléchargement de la liste des série en français dans un fichier site.txt
serie="http://monsite/torrents/search/?search=french&cat=210&submit=Recherche&subcat=433&order=added&type=desc"
film="http://monsite/torrents/search/?subcat=631"

def liste(adresse,site):

    # je m'identifie comme un navigateur
    user_agent = 'Mozilla/5.0 (X11; Linux x86_64)'
    headers = { 'User-Agent' : user_agent }
    url = urllib.request.urlopen(adresse, timeout=10)

    # je crée une page temporaire pour ne garder que la partie après </tbody>
    page= url.read().decode('utf-8', 'ignore').encode('utf-8','ignore')
    fiche = open("page.html", "wb")
    fiche.write(page)
    fiche.close()
    fiche = open("page.html", "r")
    lines = fiche.readlines()
    i=0
    presoup=""
    for line in lines:
        if re.search("<tbody>", line) is not None:
            i=1
        if re.search("</tbody>", line) is not None:
            i=1
        if i==1:
            presoup=presoup+line
    fiche.close()
    os.remove("page.html")

    # je parse ce qu'il reste avec bs4
    soup = bs4.BeautifulSoup(presoup)
    trs = soup.find_all("tr")

    #je passe par le module re car mes infos sont dans les variables de la page html
    regex=re.compile('<a href="http://monsite/torrents/(.*)" title=',re.I)
    with open(site, mode='w', encoding='utf-8') as fichier:
        for tr in trs:
            match=regex.search(str(tr))
            if match:
                fichier.write(match.group(1)+"\n")
    return        

liste(serie, "siteserie.txt")

liste(film, "sitefilm.txt")

ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1288 Le 10/06/2013, à 12:56

grim7reaper

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

@ljere :

url = urllib.request.urlopen(adresse, timeout=10)
page= url.read().decode('utf-8', 'ignore').encode('utf-8','ignore')
fiche = open("page.html", "wb")
fiche.write(page)
fiche.close()
fiche = open("page.html", "r")
lines = fiche.readlines()

Tu veux faire quoi là ?
Récupérer un tableau de lignes ?
Si oui, tu peux simplement faire (sans fichier temporaire) :

url = urllib.request.urlopen(adresse, timeout=10)
encoding = url.headers['content-type'].split('charset=')[-1]
lines = url.read().decode(encoding).split('\n')

Ici on récupère dans l’en-tête de la page l‘encodage utilisé. Sachant que content-type est de la forme :

'text/html; charset=windows-1251'

On découpe sur le = et on récupère le dernier élément (l’encodage utilisé).
Faudrait peut-être ajouter un test au cas où l‘encodage n’est pas déclaré pour prendre utf-8 par défaut).

Ensuite un lit le contenu (read), on le décode pour obtenir une chaîne de caractère (decode) et on la découpe en ligne(split sur le caractère newline \n)


Pour ça

    presoup=""
    for line in lines:
        if re.search("<tbody>", line) is not None:
            i=1
        if re.search("</tbody>", line) is not None:
            i=1
        if i==1:
            presoup=presoup+line

tu veux faire quoi ?
Je ne comprends pas trop ton code donc je ne peux pas faire trop de remarques mais il y sûrement un moyen de l’écrire d’une façon plus courte et plus élégante.
Ha si, quand même une remarque : là tu concatènes une chaîne dans une boucle, c’est très mauvais (Cf. page précédente).
Utilise plutôt une liste que tu concatènes à la fin :

presoup = []
i=0
for line in lines:
    if re.search("<tbody>", line) is not None:
        i=1
    if re.search("</tbody>", line) is not None:
        i=1
    if i==1:
        presoup.append(line)
presoup = ''.join(presoup)

Hors ligne

#1289 Le 10/06/2013, à 13:27

ljere

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

grim7reaper je peux te mailler le script original plus tard pour que tu puisses voir les problèmes que j'ai rencontré?


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1290 Le 10/06/2013, à 13:34

grim7reaper

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

yep, pas de problème.
Je regarderais ça ce soir.

Dernière modification par grim7reaper (Le 10/06/2013, à 13:35)

Hors ligne

#1291 Le 10/06/2013, à 16:06

ljere

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

mail envoyé
pour ta première modification

url = urllib.request.urlopen(adresse, timeout=10)
encoding = url.headers['content-type'].split('charset=')[-1]
lines = url.read().decode(encoding).split('\n')

je me retrouve avec deux fichiers vide pour le reste je vais attendre que tu analyses réellement le script

ps je crois surtout que ça manque de contrôle car en mettent d'origine j'ai aussi 2 fichiers vide

Dernière modification par ljere (Le 10/06/2013, à 16:15)


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1292 Le 10/06/2013, à 16:46

grim7reaper

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

Reçu.

Effectivement, ton script génère des fichiers vides même sans mes modif’, il doit y avoir un souci.
Je vais y jeter un œil.

Hors ligne

#1293 Le 10/06/2013, à 17:45

ljere

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

hier et ce matin il fonctionnait j'avais créer un premier jet sans la fonction avec un seul lien qui fonctionnait aussi et la plus rien


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1294 Le 10/06/2013, à 18:11

grim7reaper

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

Bon bah maintenant ça fonctionne (ça semble en tout cas).
J’ai pas mal simplifié au passage wink

Hors ligne

#1295 Le 10/06/2013, à 18:17

Dr Le Rouge

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

grim7reaper a écrit :

Mais je suis déjà passé derrière du code de matheux ou de physiciens, bah des fois t'a envie de les retrouver et de leurs rendre une visite avec une hache...

'Faut voir la tronche des descriptions d'algorithmes qu'on implémente aussi tongue Dans mon cas, l'exemple que j'ai donné est un exemple standard de cryptanalyse différentielle, telle que décrite dans le bouquin de Stinson (un bouquin de cryptographie théorique populaire dans les cours de niveau L3-M2).

Mais il y a biiiiiiiiieeeeeeen mieux big_smile

J'ai déjà vu un papier de maths financières où le mec, apparemment un génie dans le milieu--- et je ne déconne pas, écrit tout en terme de goto --- et je ne déconne pas non plus. Pas un while, pas un if, rien. Et j'ai du regarder le code de mon voisin qui est venu pleurer chez moi parce qu'il ne marchait pas.

2000 lignes de MATLAB pas indentée avec seulement deux fonctions, par ailleurs imbriquées l'une dans l'autre. Pseudo code pour être plus clair :

function machin()
   blabla pas indenté
   (genre, plein)
   dont le dialogue avec une interface graphique
   (toujours mettre l'interface *avant* de faire fonctionner l'algo principal)
   (*toujours*)

    function truc()
         encore plus de machin pas indenté
    endfunc
endfunc

Je trouve miraculeux que la crise économique ne soit pas plus grave smile Non parce que

  1. Le voisin en question est persuadé d'être un dieu en programmation.

  2. L'horreur en MATLAB constituait quand même un progrès : à la base, le professeur (et non mon voisin, son sous-fifre) faisait son calcul scientifique en Visual Basic. Bizarrement, les nombres très petits ou très grands étaient mal gérés. Étonnant, non ? smile


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

#1296 Le 10/06/2013, à 18:37

grim7reaper

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

Le Rouge a écrit :
grim7reaper a écrit :

Mais je suis déjà passé derrière du code de matheux ou de physiciens, bah des fois t'a envie de les retrouver et de leurs rendre une visite avec une hache...

'Faut voir la tronche des descriptions d'algorithmes qu'on implémente aussi tongue

Mouais, enfin y’a pas qu’en maths et physique qu’il y a des algos complexes hein tongue
Ça empêche rarement de découper en sous-fonction plutôt que de péter une fonction de trouzmille lignes avec quarante douze paramètres.
Sauf cas très particuliers où il te faut des perfs’ de malade et là tu écris un code super efficace totalement imbitable. Mais c’est pas le cas le plus courant.

Le Rouge a écrit :

J'ai déjà vu un papier de maths financières

Nan mais faut être sérieux aussi à un moment.
Je parlais de gens qui codent là. Pas de mecs qui bâtissent des modèles de référence dans leur domaine avec des macro Excel erronés (on voit le sérieux du domaine d’ailleurs…)

Hors ligne

#1297 Le 10/06/2013, à 19:19

Dr Le Rouge

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

grim7reaper a écrit :

Mais [le code imbitable pour cause de perf'] est pas le cas le plus courant.

En crypto, hélas… hmm

edit : Exemple : j'ai passé un moment à essayer de comprendre ça il y a quelques jours. Par contre, le problème ne vient pas de l'optimisation mais du nom des variables (et du vieux style de C).

Dernière modification par Dr Le Rouge (Le 10/06/2013, à 19:24)


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

#1298 Le 10/06/2013, à 19:25

ljere

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

alors merci ton script c'est du parfait sauf que biensur chez moi ça ne fonctionne pas ^^
je l'ai fait testé par Didier-T qui tourne sous manjaro il fonctionne
je suppose donc que c'est un problème de gestion de la mémoire sur xubuntu
je te joins l'erreur rencontré

table = parser('tbody')[0]
IndexError: list index out of range

ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#1299 Le 10/06/2013, à 20:09

grim7reaper

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

Le Rouge a écrit :
grim7reaper a écrit :

Mais [le code imbitable pour cause de perf'] est pas le cas le plus courant.

En crypto, hélas… hmm

Pour avoir lu diverses implémentations d’AES et de DES c’est pas l’impression que ça m’a laissé.
Sauf version optimisé pour certaines architecture (donc assembleur inline + instructions vectoriels, …)

Le Rouge a écrit :

edit : Exemple : j'ai passé un moment à essayer de comprendre ça il y a quelques jours. Par contre, le problème ne vient pas de l'optimisation mais du nom des variables (et du vieux style de C).

Bah le code me semble clean.
C’est bien découpé, les fonctions sont pas trop longue. Et ça semble être du code de crypto’ standard (du XOR, des rotations, des additions, …).
Bon le commentaire en jap’, ça calme un peu. De l’anglais aurait été préférable.
Mais à part ça ça va.


@ljere : vraiment bizarre.
Je pense pas à un souci mémoire, en Python très peu probable.
Je penserais plus sur le fait que le site te renvoie une page HTML différente de nous.
Mais pourquoi hmm
Pour vérifier cette hypothèse, tu peux ajouter un

print(parser.prettify())

après

parser = BeautifulSoup(page)

et tu compares la sortie avec Didier-T.
Si vous avez le même code HTML, le souci est ailleurs.
Sinon, il faudra trouver pourquoi le site ne te renvoie pas le même code qu’à nous.

Hors ligne

#1300 Le 10/06/2013, à 21:05

Didier-T

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

bonsoir grim7reaper,
en fait sous Ubuntu ou sous Manjaro, nous récupérons la même page web.
Le souci c'est après le traitement par Beautifulsoup, j'ai malheureusement été victime de ce même soucis pour écrire recmeteo.py.
Mon eeepc est sous Manjaro, et tout fonctionnait sans artifices, mais sous Ubuntu il a fallu ruser et couper la page en deux pour pouvoir la traiter correctement, étrange

Hors ligne