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.

#2401 Le 08/01/2016, à 05:09

Pylades

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

Tiens, ça fait plaisir d'assister à la renaissance de ce topic. smile

Et c'est marrant mais la quasi-totalité des gens avec qui j'ai causé de code IRL sont très satisfaits de PHP. J'ai l'impression qu'aussi étrange que cela puisse paraître, les réactions de rejet presque viscéral sont plutôt limitées à ce topic en particulier et à l'internet en général.
Vous avez aussi ce ressenti? Le rejet de PHP façonne-t-il les communautés sur internet? Quelle est la place d'Ubuntu dans l'histoire? tongue


“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

#2402 Le 08/01/2016, à 07:58

Dafyd

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

import timeit

print("' '.join :")
print(timeit.timeit("' '.join(['tata', 'toto', 'coucou'])"))
print('concatenation')
print(timeit.timeit("'tata' + ' ' + 'toto' + ' ' + 'coucou'"))

Résultat :

' '.join :
0.3512544479999633
concatenation
0.014965016000132891

La différence est non négligeable ...

Dernière modification par Dafyd (Le 08/01/2016, à 08:19)

Hors ligne

#2403 Le 08/01/2016, à 08:03

Dafyd

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

Pylades a écrit :

Tiens, ça fait plaisir d'assister à la renaissance de ce topic. smile

Et c'est marrant mais la quasi-totalité des gens avec qui j'ai causé de code IRL sont très satisfaits de PHP. J'ai l'impression qu'aussi étrange que cela puisse paraître, les réactions de rejet presque viscéral sont plutôt limitées à ce topic en particulier et à l'internet en général.
Vous avez aussi ce ressenti? Le rejet de PHP façonne-t-il les communautés sur internet? Quelle est la place d'Ubuntu dans l'histoire? tongue

/troll C'est parce que ça leur permet de bricoler des trucs qui tombent en marche sans trop avoir à réfléchir et surtout sans trop savoir comment ça marche lol

Hors ligne

#2404 Le 08/01/2016, à 10:09

grim7reaper

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

Pylades a écrit :

Tiens, ça fait plaisir d'assister à la renaissance de ce topic. smile

Tiens ça fait longtemps que tu étais pas passé ici toi, tu codes plus ?

Pylades a écrit :

Et c'est marrant mais la quasi-totalité des gens avec qui j'ai causé de code IRL sont très satisfaits de PHP. J'ai l'impression qu'aussi étrange que cela puisse paraître, les réactions de rejet presque viscéral sont plutôt limitées à ce topic en particulier et à l'internet en général.
Vous avez aussi ce ressenti? Le rejet de PHP façonne-t-il les communautés sur internet? Quelle est la place d'Ubuntu dans l'histoire? tongue

Nope, j’ai rencontré des gens IRL (dont certains sont mes collègues) qui sont d’accord pour dire que PHP c’est à jeter. Et y’a même une dev’ web dans le lot.



@Dafyd : ton bench est pas forcément représentatif de ton code (variable vs chaînes constantes).
Mais oui, il me semble que sur des chaînes de petite taille la concaténation est plus efficace que le join.

Voyons voir avec un petit benchmark :

#!/usr/bin/env python3

import random
import string
from timeit import timeit

def gen_rand_string(size):
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(size))

def with_concat(strings):
    res = ''
    for s in strings:
        res += s
    return res

def with_join(strings):
    res = []
    for s in strings:
        res.append(s)
    return ''.join(res)

print('=== string literal ===')
print('.join')
print(timeit("' '.join(['tata', 'toto', 'coucou'])"))
print('concat')
print(timeit("'tata' + ' ' + 'toto' + ' ' + 'coucou'"))
print('')
print('=== few short strings ===')
print('.join')
print(timeit("with_join(data)",
             setup='from __main__ import gen_rand_string, with_join;' +
                   'data = [gen_rand_string(7) for _ in range(0, 10)]'))
print('concat')
print(timeit("with_concat(data)",
             setup='from __main__ import gen_rand_string, with_concat;' +
                   'data = [gen_rand_string(7) for _ in range(0, 10)]'))
print('')
print('=== many short strings ===')
print('.join')
print(timeit("with_join(data)",
             setup='from __main__ import gen_rand_string, with_join;' +
                   'data = [gen_rand_string(7) for _ in range(0, 1000)]'))
print('concat')
print(timeit("with_concat(data)",
             setup='from __main__ import gen_rand_string, with_concat;' +
                   'data = [gen_rand_string(7) for _ in range(0, 1000)]'))
print('')
print('=== few long strings')
print('.join')
print(timeit("with_join(data)",
             setup='from __main__ import gen_rand_string, with_join;' +
                   'data = [gen_rand_string(1000) for _ in range(0, 10)]'))
print('concat')
print(timeit("with_concat(data)",
             setup='from __main__ import gen_rand_string, with_concat;' +
                   'data = [gen_rand_string(1000) for _ in range(0, 10)]'))
print('')
print('=== many long strings')
print('.join')
print(timeit("with_join(data)",
             setup='from __main__ import gen_rand_string, with_join;' +
                   'data = [gen_rand_string(1000) for _ in range(0, 1000)]'))
print('concat')
print(timeit("with_concat(data)",
             setup='from __main__ import gen_rand_string, with_concat;' +
                   'data = [gen_rand_string(1000) for _ in range(0, 1000)]'))

Ça nous donne :

% ./bench.py
=== string literal ===
.join
0.1329960823059082
concat
0.011964082717895508

=== few short strings ===
.join
0.9312920570373535
concat
0.6748321056365967

=== many short strings ===
.join
62.206425189971924
concat
46.47444200515747

=== few long strings
.join
2.6775248050689697
concat
2.553654193878174

=== many long strings
.join
540.5061938762665
concat
515.1716208457947

En effet l’opérateur + semble maintenant avoir toujours de meilleures performances.
Mes infos étaient donc un peu datées (comme quoi il ne vaut jamais croire les gens sur parole, même quand le gens est soi-même tongue : toujours faire des mesures !).


Édit : cela semble etre due a une « nouvelle » (je ne sais pas depuis quelle version elle est présente) optimisation de CPython (cf. ce commentaire)
Comme il le dit si bien, c’est un détail d’implémentation spécifique à CPython donc si tu veux des bonnes perf’ de manière portable tu ne peux pas vraiment te baser là-dessus (mais c’est toujours bon à savoir).

Bon bah j’aurais appris un truc aujourd’hui smile

Dernière modification par grim7reaper (Le 08/01/2016, à 10:14)

Hors ligne

#2405 Le 08/01/2016, à 13:36

Pylades

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

grim7reaper a écrit :

Tiens ça fait longtemps que tu étais pas passé ici toi, tu codes plus ?

Non. Plus le temps pour beaucoup de choses. C'est même la dèch au point que ça fait un an que je suis sous windows, par flemme d'installer une BSD (systemd me révulse).


“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

#2406 Le 08/01/2016, à 13:50

grim7reaper

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

Le jour où tu retrouveras le temps de t‘installer un BSD je te conseille DragonFly BSD.
Pas trop dur la vie sous Windows ?

Dernière modification par grim7reaper (Le 08/01/2016, à 13:50)

Hors ligne

#2407 Le 08/01/2016, à 22:51

Elzen

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

Sinon, moi j'suis sous Debian, j'n'ai pas de systemd, et tout va bien tongue

(À part, certes, que la version du pilote wacom actuellement packagée ne gère pas encore ma nouvelle tablette)

grim7reaper a écrit :

Le jour où tu retrouveras le temps de t‘installer un BSD je te conseille DragonFly BSD.

Je n'avais pas fait grand chose avec, mais j'en garde un bon souvenir (alors que j'ai eu plein de soucis avec mes tentatives d'installer FreeBSD)

Pylades a écrit :

Et c'est marrant mais la quasi-totalité des gens avec qui j'ai causé de code IRL sont très satisfaits de PHP. J'ai l'impression qu'aussi étrange que cela puisse paraître, les réactions de rejet presque viscéral sont plutôt limitées à ce topic en particulier et à l'internet en général.
Vous avez aussi ce ressenti? Le rejet de PHP façonne-t-il les communautés sur internet? Quelle est la place d'Ubuntu dans l'histoire? tongue

Perso, je n'ai rien de spécial contre PHP, et la plupart des argumentations que j'ai lu contre (y compris sur ce topic) étaient plus subjectives et à géométrie variable qu'autre chose, y compris sur ce topic tongue Mais bon, on ne va pas refaire le troll ^^

grim7reaper a écrit :

Mais oui, il me semble que sur des chaînes de petite taille la concaténation est plus efficace que le join.

Ah ben, comme quoi j'avais raison dans ma première intervention sur le sujet, alors tongue

Hors ligne

#2408 Le 08/01/2016, à 23:07

PPdM

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

et moi sous Xubuntu, comme en tas des PCs que je donne et tout va bien !:P


La critique est facile, mais l'art est difficile !
L'humanité étant ce qu'elle est, la liberté ne sera jamais un acquit, mais toujours un droit à défendre !
Pour résoudre un problème commence par poser les bonnes questions, la bonne solution en découlera

Hors ligne

#2409 Le 09/01/2016, à 04:56

Pylades

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

grim7reaper a écrit :

Le jour où tu retrouveras le temps de t‘installer un BSD je te conseille DragonFly BSD.
Pas trop dur la vie sous Windows ?

Ah ? J’avais pensé à FreeBSD tout seul, j’étais même allé lire un peu de doc, ça avait l’air jouable. DragonFly apporte vraiment quelque chose de plus ? Et PC-BSD ?
Sinon Windows c’est de la merde, mais bon, comme je passe peu de temps derrière le PC c’est très supportable. ^^


“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

#2410 Le 09/01/2016, à 10:35

grim7reaper

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

Elzen a écrit :

Ah ben, comme quoi j'avais raison dans ma première intervention sur le sujet, alors tongue

Niveau performance oui, niveau lisibilité on en a déjà discuté :]



Pylades a écrit :

DragonFly apporte vraiment quelque chose de plus ? Et PC-BSD ?

Je ne connais pas PC-BSD (mais ça semble être une surcouche de Free BSD, contrairement à DragonFly BSD qui est un BSD distinct (comme Open BSD par exemple)).

Pour ce que ça apporte en plus, il y a pas mal de choses mais une des killer feature c’est HAMMER (et HAMMER 2 est en développement) qui est un super système de fichier avec plein de fonctionnalités cool dont une historisation via snapshots. Et grace à John Marino (qui est un monstre qui ne doit jamais dormir et avoir des journées de 72h) tu peux même naviguer dans ton historique via Slider (développé en Ada, la classe :]). Très utile pour récuper un rm mal placé ^^"
Dans les autres trucs intéressants : vkernel, swapcache et variant symlink.
Et puis c’est Matthew Dillon qui est derrière quand même smile

Hors ligne

#2411 Le 09/01/2016, à 11:41

Pylades

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

Ah, Ô temps pour moi, je croyais que c’était une autre surcouche du genre de PC-BSD. Bon, HAMMER ça ne semble pas être le genre de truc que je recherche, mais je vais regarder quand même, merci. wink


“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

#2412 Le 09/01/2016, à 13:05

Shanx

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

J'ai pas trop le temps de regarder (dommage, ça m'intéresse beaucoup ça), mais btrfs (ou ZFS, mais c'est chaud sous Linux), ça fait pas le taf comparativement à HAMMER ? (Même si btrfs n'est pas encore officiellement fini, il a déjà pas mal de fonctionnalités super cool et semble plutôt stable)


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2413 Le 09/01/2016, à 14:55

grim7reaper

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

Pylades a écrit :

Bon, HAMMER ça ne semble pas être le genre de truc que je recherche

C’est quoi le genre de truc que tu recherches ?



@Shanx : je pense que ces FS (btrfs, ZFS et HAMMER) ont pas mal de fonctionnalités en commun mais ils doivent aussi avoir leur fonctionnalités uniques. Ne connaissant pas trop ZFS et btrfs je ne pourrais pas trop comparer (mais il me semble (à prendre avec des pincettes) que ZFS est assez gourmand en conso’ RAM).
Au pire tu peux passer sur le chan IRC de dfly si tu as des questions.

Hors ligne

#2414 Le 09/01/2016, à 16:05

HP

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

#!/usr/bin/env ruby

require 'pathname'
require 'tempfile'

if __FILE__ == $0
  require(Tempfile.open(['lib-', '.rb']) \
          { |f| f.write(Pathname.new(__FILE__).read); f })
end

Permet d'écrire l'appel à l'exécution du script… en début de fichier.


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#2415 Le 09/01/2016, à 16:22

Rolinh

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

On me dit que ce topic renaît de ces cendres et qu'en plus ça y parle de DragonFly BSD!
Ça fait deux bonnes raisons pour moi de revenir un peu sur ce forum que j'ai déserté voilà un moment maintenant.

HAMMER c'est vraiment sympa et rock-solid.  J'ai lu et entendu pas mal à propos de BTRFS et j'ai l'impression que chaque fois, ce qui revient c'est "utilise pas si tu tiens à tes données".

Hors ligne

#2416 Le 09/01/2016, à 16:46

Shanx

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

Rolinh a écrit :

HAMMER c'est vraiment sympa et rock-solid.  J'ai lu et entendu pas mal à propos de BTRFS et j'ai l'impression que chaque fois, ce qui revient c'est "utilise pas si tu tiens à tes données".

Bah ça fait quelques temps qu'ils ont arrêté le dév de nouvelles fonctionnalités pour se concentrer sur la stabilité, et j'ai lu que les choses s'étaient bien améliorées. Mais j'ai encore jamais osé l'installer sur mes PC quotidiens. big_smile


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#2417 Le 09/01/2016, à 17:29

grim7reaper

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

J’avais testé btrfs il y a un moment (il y a 1-2 ans je crois), je n’avais pas perdu de données mais ça devenait super lent par moment…

Hors ligne

#2418 Le 09/01/2016, à 17:47

Pylades

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

grim7reaper a écrit :

C’est quoi le genre de truc que tu recherches ?

Ce que je veux dire c’est que ça m’a l’air compliqué et gourmand. Et en temps que vieux con, un FS qui se met à devenir compliqué ça me fait peur ; j’y préfère git et rsync. tongue


“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

#2419 Le 09/01/2016, à 18:12

Rolinh

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

@Pylades: ça peut être gourmand en espace disque, ça oui. Enfin bon, tu peux configurer la granularité de ton historique et des snapshots avec 'hammer viconfig' pour chacun de tes PFS voir même configurer les PFS pour lesquels tu ne souhaites pas faire de snapshot ou d'historique. Pour une bonne introduction rapide à HAMMER, il y a cet  cet article si jamais.

Hors ligne

#2420 Le 09/01/2016, à 18:53

Pylades

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

Ouais, les PFS ça a l’air cool comme ça, même si je doute que grand monde les utilise pour de vrai. Pour le reste, c’est décidément des tâches que je confierais plus à git qu’au FS, sachant que j’ai déjà photorec pour me sauver d’un éventuel rm malheureux. Enfin ça confirme mon impression que Hammer est un FS overkill pour mes besoins.
Cela dit vous avez quand même réussi à semer le doute devant ma certitude de devoir installer FreeBSD. tongue


“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

#2421 Le 09/01/2016, à 19:22

Rolinh

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

Si tu veux un FS simple, tu n'es pas obligé d'utiliser HAMMER et tu peux toujours partir sur UFS. Je crois qu'on ne peut faire plus simple. Quasiment personne ne l'utilise comme FS principal (il est utilisé pour /boot) d'après ce que je peux voir dans la communauté DragonFly. En revanche, pas mal de monde l'utilise sous FreeBSD. C'est d'ailleurs UFS que j'utilise sur mon server FreeBSD.

Hors ligne

#2422 Le 09/01/2016, à 19:49

grim7reaper

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

Pylades a écrit :

Et en temps que vieux con, un FS qui se met à devenir compliqué ça me fait peur ; j’y préfère git et rsync.

Mais git et rsync ne te protégeront pas du data rot. Alors que les FS « next-gen » (pour reprendre le terme de cet article) le feront.
Après c'est vrai qu’il y a un certain nombre de fonctionnalités pas forcément utiles en dehors d’un usage serveur.

Pylades a écrit :

Pour le reste, c’est décidément des tâches que je confierais plus à git qu’au FS, sachant que j’ai déjà photorec pour me sauver d’un éventuel rm malheureux.

Tu ne peux pas tout versionner dans git (les formats non-texte ne sont pas super bien gérés…)
Et photorec pour faire ça c’est overkill et pas fiable. Ça va te récupérer un paquet de trucs effacés, il faudra faire le tri dans tout ce qu‘il te remonte en espérant qu’il y ai ton truc dans le lot (j’avais tenté ça une fois, après un rm malheureux et devant la masse de fichier à analyser j’ai laisser tomber…).

Hors ligne

#2423 Le 09/01/2016, à 21:20

Elzen

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

Quand des gens viennent à un atelier bidouille avec un soucis qui nécessite un coup de photorec, j'ai tendance à leur expliquer que photorec, c'est un logiciel qui permet de transformer un problème du type « plus de fichiers » en un problème du type « trop de fichiers ».

Hors ligne

#2424 Le 09/01/2016, à 21:56

PPdM

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

pas faux lol


La critique est facile, mais l'art est difficile !
L'humanité étant ce qu'elle est, la liberté ne sera jamais un acquit, mais toujours un droit à défendre !
Pour résoudre un problème commence par poser les bonnes questions, la bonne solution en découlera

Hors ligne

#2425 Le 10/01/2016, à 04:26

Pylades

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

Ah mais je dis pas qu'il faut tout versionner. Mais disons que c'est une divergence de point de vue; j'accepte un risque infime de perdre des données pour la simplicité.
Pour photorec, tu peux bien filtrer si tu sais par quoi commence ton fichier, tu peux créer un type personnalisé qui va drastiquement diminuer les faux positifs. J'en ai eu besoin deux fois, à chaque fois ça m'a sauvé la mise.


“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