Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3505 connectés 

 

Sujet(s) à lire :
    - Who's who@Programmation
 

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  23703  23704  23705  ..  26990  26991  26992  26993  26994  26995
Auteur Sujet :

[blabla@olympe] Le topic du modo, dieu de la fibre et du monde

n°2371576
el muchach​o
Comfortably Numb
Posté le 15-12-2020 à 07:49:48  profilanswer
 

Reprise du message précédent :
Flaie, va falloir que tu nous expliques comment tu fais, parce que t'es pas câblé comme nous. :o
Surtout quand on voit le code que tu produis, et encore, c'est pas sensé être ton langage le mieux maîtrisé.

Message cité 1 fois
Message édité par el muchacho le 15-12-2020 à 07:50:11

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
mood
Publicité
Posté le 15-12-2020 à 07:49:48  profilanswer
 

n°2371577
Flaie
Posté le 15-12-2020 à 07:56:18  profilanswer
 

Apparemment d'après les internet ça serait basé sur la séquence de Van Eck. Quelqu'un connait ? :o
https://rosettacode.org/wiki/Van_Eck_sequence

n°2371578
Flaie
Posté le 15-12-2020 à 07:59:51  profilanswer
 

el muchacho a écrit :

Flaie, va falloir que tu nous expliques comment tu fais, parce que t'es pas câblé comme nous. :o
Surtout quand on voit le code que tu produis, et encore, c'est pas sensé être ton langage le mieux maîtrisé.


Celui d'aujourd'hui n'est pas spécifiquement compliqué, pour moi le seul trick c'était de comprendre comment consommer d'abord la liste, puis ensuite lire infiniment le last spoken (et aussi pas s'embrouiller sur la valeur à stocker).

 

Le code que j'ai posté c'est du code refactorisé, c'est normal qu'il soit concis, c'est pas celui qui m'a servi à soumettre la solution.
D'abord j'écris du code dégueux (deux boucles distinctes, avec 90% de copié collé), et si ça marche, je prends mes étoiles et ensuite je le rends "joli" pour les internets de l'élite [:flaie:5]


Message édité par Flaie le 15-12-2020 à 08:00:18
n°2371579
el muchach​o
Comfortably Numb
Posté le 15-12-2020 à 08:05:19  profilanswer
 

Oui j'avais bien compris que tu le faisais en 2 temps


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2371580
Flaie
Posté le 15-12-2020 à 08:12:24  profilanswer
 

Bon ben il s'agit bien de la séquence de Van Eck, jamais entendu parler jusqu'à aujourd'hui. Ca sert à quoi?

 

En prenant le code Kotlin de rosetta code et en initialisant avec mon input ça me donne bien le bon résultat.

 
Spoiler :


https://rehost.diberie.com/Uploads/0/20201215-080358-dc50e87d-99bd-4a06-94b5-b9c813dc3ac0.0.res.jpg

 

@el_muchacho: Un petit one liner en Python: https://www.geeksforgeeks.org/progr [...] -sequence/ (voir méthode 2)

Message cité 2 fois
Message édité par Flaie le 15-12-2020 à 08:14:12
n°2371581
Dion
Acceuil
Posté le 15-12-2020 à 08:13:45  profilanswer
 

Citation :

Tesla will shut down production lines for its high-end, but older, electric vehicles -- the Model S sedan and Model X SUV -- for 18 days beginning on December 24th, according to an email to factory employees seen by CNBC.
In the period ending September 30, 2020, Tesla reported that about 11% of its vehicle deliveries were Model S and X cars, and the rest were Model 3 and Model Y.
Employees working on the lines were told they were being given a full week of pay for the forced time off, but were encouraged to seek shifts working for, or even volunteering in, other parts of the business for the remaining unpaid days.


 
[:itm] [:itm] [:itm]


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°2371582
el muchach​o
Comfortably Numb
Posté le 15-12-2020 à 08:29:39  profilanswer
 

Flaie a écrit :


@el_muchacho: Un petit one liner en Python: https://www.geeksforgeeks.org/progr [...] -sequence/ (voir méthode 2)


non mais j'arrive même pas faire la partie 1 :(
 
Je ne comprends pas ce que je fais de faux la-dedans

Spoiler :


def next(r, turn):
    if r not in numbers:
        numbers[r] = 0
    else:
        numbers[r] = turn - numbers[r]


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2371583
Plam
Bear Metal
Posté le 15-12-2020 à 08:45:06  profilanswer
 

Dion : le bouquin dont on parlait la dernière fois, j'ai réussi à avancer. Pour l'instant ça ressemble surtout à un publireportage pour GitHub :/


---------------
Spécialiste du bear metal
n°2371584
skeye
Posté le 15-12-2020 à 09:13:33  profilanswer
 

el muchacho a écrit :


non mais j'arrive même pas faire la partie 1 :(
 
Je ne comprends pas ce que je fais de faux la-dedans

Spoiler :


def next(r, turn):
    if r not in numbers:
        numbers[r] = 0
    else:
        numbers[r] = turn - numbers[r]



:D :D :D
Déroule le truc à la main sur un exemple, tu comprendras vite. :D


---------------
Can't buy what I want because it's free -
n°2371585
skeye
Posté le 15-12-2020 à 09:15:51  profilanswer
 

par contre effectivement j'ai pas compris la partie 2...il doit manquer un 0.:o


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 15-12-2020 à 09:15:51  profilanswer
 

n°2371586
Flaie
Posté le 15-12-2020 à 09:17:41  profilanswer
 

el muchacho a écrit :


non mais j'arrive même pas faire la partie 1 :(

 

Je ne comprends pas ce que je fais de faux la-dedans

Spoiler :


def next(r, turn):
    if r not in numbers:
        numbers[r] = 0
    else:
        numbers[r] = turn - numbers[r]


 

Là ce que tu calcules dans ton exemple c'est le last spoken dont tu as besoin au prochain tour de boucle.

 

J'ai adapté le code Kotlin en Pythoin c'est très similaire sauf que je sais plus comment on cycle en python donc j'ai séparé les deux boucles que j'ai regroupées en une seule en Kotlin

 
Spoiler :

c'est numbers[r] = 0 si r pas déjà vu, et sinon numbers[r] = turn car tu dois te souvenir à quelle itération tu as vu ce nombre.

 

J'ai renommé les variable comme toi dans ton exemple (sauf last je sais pas comment tu l'appelais)

 

def memory_game():
    numbers = {}
    # commence au premier tour
    turn = 1
    last = 0
    # d'abord on épuise l'input, remplace par le tien
    for r in [13, 16, 0, 12, 15, 1]:
        print(turn, r)  
        # si le nombre a déjà été vu alors l'ancien (pour le prochain tour de boucle) sera numéro de tour - position déjà vu (et sinon 0 car on l'a jamais vu)
        last = turn - numbers[r] if (r in numbers) else 0
        # ajoute/update la position de ce nombre déjà vu
        numbers[r] = turn
        turn += 1
     # ensuite à l'infini on boucle
    while turn <= 2020:
        # on renvoie le dernier lu
        r = last
        print(turn, r)
        # puis pour le prochain tour de boucle l'ancien sera numéro de tour - position si déjà vu, et sinon 0 (car on l'a jamais vu)
        last =  turn - numbers[r] if (r in numbers) else 0
        # ajoute/update la position de ce nombre déjà vu
        numbers[r] = turn
        turn += 1

 

memory_game()

 

Du coup je suis tombé sur cette vidéo qui explique la séquence de Van Eck https://www.youtube.com/watch?v=etM [...] umberphile j'adore le mec, on pourrait l'écouter parler des heures :D


Message édité par Flaie le 15-12-2020 à 09:18:22
n°2371587
Jubijub
Parce que je le VD bien
Posté le 15-12-2020 à 09:56:05  profilanswer
 

intéressant le post mortem sur l'outage d'hier (version publique : la régulation automatique des quota a foirée de façon assez complexe, c'est pas juste un PgM qui a oublié de renouveller les quotas)
 
par contre la haine anti-google des gens m'inquiète toujours un peu, y'a plus rien de rationnel là dedans


---------------
Jubi Photos : Flickr - 500px
n°2371589
Dion
Acceuil
Posté le 15-12-2020 à 09:59:45  profilanswer
 

Plam a écrit :

Dion : le bouquin dont on parlait la dernière fois, j'ai réussi à avancer. Pour l'instant ça ressemble surtout à un publireportage pour GitHub :/


 [:cerveau sadnoir]  
 

Jubijub a écrit :

intéressant le post mortem sur l'outage d'hier (version publique : la régulation automatique des quota a foirée de façon assez complexe, c'est pas juste un PgM qui a oublié de renouveller les quotas)
 
par contre la haine anti-google des gens m'inquiète toujours un peu, y'a plus rien de rationnel là dedans


C'est intéressant que parmis les trois gros Cloudeurs américains, seul Amazon ait l'air de réussir à limiter efficacement le blast radius des incidents :o


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°2371590
Flaie
Posté le 15-12-2020 à 10:07:41  profilanswer
 

Jubijub a écrit :

intéressant le post mortem sur l'outage d'hier (version publique : la régulation automatique des quota a foirée de façon assez complexe, c'est pas juste un PgM qui a oublié de renouveller les quotas)
 
par contre la haine anti-google des gens m'inquiète toujours un peu, y'a plus rien de rationnel là dedans


Y'a une haine anti tous les gros groupes.

n°2371591
Jubijub
Parce que je le VD bien
Posté le 15-12-2020 à 10:08:52  profilanswer
 

Dion a écrit :


C'est intéressant que parmis les trois gros Cloudeurs américains, seul Amazon ait l'air de réussir à limiter efficacement le blast radius des incidents :o


ils ont quand meme plus souvent des zones entières down...j'ai pas de stats d'uptime, mais des pains comme il y a eu hier c'est extremement rare.
Les zones AWS qui tombent ça me parait bien plus fréquent.
 
Celui là était violent parce qu'il touchait un système ultra central et commun, ça n'arrive pas tous les jours non plus.
On ne sert pas exactement les mêmes volumes non plus


---------------
Jubi Photos : Flickr - 500px
n°2371592
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 15-12-2020 à 10:14:26  profilanswer
 

Flaie a écrit :

Bon ben il s'agit bien de la séquence de Van Eck, jamais entendu parler jusqu'à aujourd'hui. Ca sert à quoi?

 

En prenant le code Kotlin de rosetta code et en initialisant avec mon input ça me donne bien le bon résultat.

  

@el_muchacho: Un petit one liner en Python: https://www.geeksforgeeks.org/progr [...] -sequence/ (voir méthode 2)


J'ai failli galérer pour la partie 2, obligé de faire tourner le code en version optimisée pour passer sous les 10 secondes... Et ma sale habitude d'utiliser les map<> de C++ pour gagner du temps était pénalisante dans ce cas.

 

À titre de comparaison en kotlin ça prend combien de temps à tourner ? (Perso je descends à 6.4s sur un coeur Xeon à 2.3 GHz; je soupçonne que ce n'est pas le processeur qui limite de toutes façons...)

Message cité 2 fois
Message édité par hephaestos le 15-12-2020 à 10:15:56
n°2371593
Flaie
Posté le 15-12-2020 à 10:20:26  profilanswer
 

hephaestos a écrit :


J'ai failli galérer pour la partie 2, obligé de faire tourner le code en version optimisée pour passer sous les 10 secondes... Et ma sale habitude d'utiliser les map<> de C++ pour gagner du temps était pénalisante dans ce cas.

 

À titre de comparaison en kotlin ça prend combien de temps à tourner ? (Perso je descends à 6.4s sur un coeur Xeon à 2.3 GHz; je soupçonne que ce n'est pas le processeur qui limite de toutes façons...)


4.67sec sur ma machine (Ryzen 3900x).
J'utilise les générateurs y'a sûrement de la perte de temps je vais voir si je peux faire descendre.
Faudrait tester sur un Apple M1.

 

Edit: tu as ton code ? je peux le compiler sur ma machine pour voir la diff.

Message cité 3 fois
Message édité par Flaie le 15-12-2020 à 10:26:09
n°2371594
pataluc
Posté le 15-12-2020 à 10:20:46  profilanswer
 

# Day 15
 

Spoiler :

par contre 1mn pour le 2, même avec ce que j’espérais être une optim  :sweat:
https://i.imgur.com/bs9R0uh.png

n°2371595
Dion
Acceuil
Posté le 15-12-2020 à 10:23:40  profilanswer
 

Jubijub a écrit :


ils ont quand meme plus souvent des zones entières down...j'ai pas de stats d'uptime, mais des pains comme il y a eu hier c'est extremement rare.
Les zones AWS qui tombent ça me parait bien plus fréquent.
 
Celui là était violent parce qu'il touchait un système ultra central et commun, ça n'arrive pas tous les jours non plus.
On ne sert pas exactement les mêmes volumes non plus


Peux tu stp me faire un second et 3ème paragraphe qui ne répondent pas du tout à mon point ? J'ai besoin de texte à mettre en placeholder et je n'ai pas envie de googler lorem ipsum


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°2371596
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 15-12-2020 à 10:26:55  profilanswer
 

hephaestos a écrit :


J'ai failli galérer pour la partie 2, obligé de faire tourner le code en version optimisée pour passer sous les 10 secondes... Et ma sale habitude d'utiliser les map<> de C++ pour gagner du temps était pénalisante dans ce cas.
 
À titre de comparaison en kotlin ça prend combien de temps à tourner ? (Perso je descends à 6.4s sur un coeur Xeon à 2.3 GHz; je soupçonne que ce n'est pas le processeur qui limite de toutes façons...)


 
En C++ c'est étonnant comme souvent on gagne à utiliser vector (en O(n)) plutôt que map (en O(log(n)) ou unordered_map en (en O(1)), c'est pas rien la puissance du cache CPU :D


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°2371597
nraynaud
lol
Posté le 15-12-2020 à 10:35:28  profilanswer
 

Xavier_OM a écrit :


 
En C++ c'est étonnant comme souvent on gagne à utiliser vector (en O(n)) plutôt que map (en O(log(n)) ou unordered_map en (en O(1)), c'est pas rien la puissance du cache CPU :D


oublie pas que t'as un malloc() aussi dans le tas. donc ton n log(n) peut assez vite partir en n^2


---------------
trainoo.com, c'est fini
n°2371598
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 15-12-2020 à 10:41:03  profilanswer
 

Flaie a écrit :


4.67sec sur ma machine (Ryzen 3900x).
J'utilise les générateurs y'a sûrement de la perte de temps je vais voir si je peux faire descendre.
Faudrait tester sur un Apple M1.
 
Edit: tu as ton code ? je peux le compiler sur ma machine pour voir la diff.


 
Ah oui c'est du même tonneau... Si tu es curieux, voilà ma solution :
 
https://code.sololearn.com/ca21a14a274a

n°2371599
Flaie
Posté le 15-12-2020 à 10:42:45  profilanswer
 

Flaie a écrit :


4.67sec sur ma machine (Ryzen 3900x).
J'utilise les générateurs y'a sûrement de la perte de temps je vais voir si je peux faire descendre.
Faudrait tester sur un Apple M1.
 
Edit: tu as ton code ? je peux le compiler sur ma machine pour voir la diff.


 

hephaestos a écrit :


 
Ah oui c'est du même tonneau... Si tu es curieux, voilà ma solution :
 
https://code.sololearn.com/ca21a14a274a


 
En utilisant un IntArray plutot qu'une Map effectivement ça tombe à 725ms sur ma machine la partie 2, et 1ms la première.
 

Spoiler :

https://rehost.diberie.com/Uploads/0/20201215-103538-89a71a1e-22a1-4894-8929-7d95c33c44ef.0.res.jpg


 
Edit: @hephaestos ton code tourne en 18 sec chez moi, mais c'est dans WSL donc les perfs doivent pas être dinguos.

Message cité 1 fois
Message édité par Flaie le 15-12-2020 à 10:47:33
n°2371601
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 15-12-2020 à 10:51:01  profilanswer
 

Xavier_OM a écrit :


 
En C++ c'est étonnant comme souvent on gagne à utiliser vector (en O(n)) plutôt que map (en O(log(n)) ou unordered_map en (en O(1)), c'est pas rien la puissance du cache CPU :D


 

Flaie a écrit :


 
En utilisant un IntArray plutot qu'une Map effectivement ça tombe à 725ms sur ma machine la partie 2, et 1ms la première.
 



 
Ah oui pas con, on prend un peu de mémoire mais ça paie... Je descends à 1.5s :)
 
https://code.sololearn.com/cA22a235a17A

n°2371602
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 15-12-2020 à 11:12:35  profilanswer
 

hephaestos a écrit :

 

Ah oui pas con, on prend un peu de mémoire mais ça paie... Je descends à 1.5s :)

 

https://code.sololearn.com/cA22a235a17A

 

Rajoute un peu de const, et pour le vecteur tente de faire un reserve plutôt histoire d'éviter l’initialisation par défaut si le problème s'y prête.
vector<pair<int, int>> M;
M.reserve(N);
...
M.emplace_back(0, i);  // ou push_back

 

;)

Message cité 1 fois
Message édité par Xavier_OM le 15-12-2020 à 11:28:05

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°2371603
koskoz
They see me trollin they hatin
Posté le 15-12-2020 à 11:12:41  profilanswer
 

Jubijub a écrit :

intéressant le post mortem sur l'outage d'hier (version publique : la régulation automatique des quota a foirée de façon assez complexe, c'est pas juste un PgM qui a oublié de renouveller les quotas)
 
par contre la haine anti-google des gens m'inquiète toujours un peu, y'a plus rien de rationnel là dedans


 
Il y a un communiqué quelque part ?


---------------
Twitter
n°2371604
koskoz
They see me trollin they hatin
Posté le 15-12-2020 à 11:14:03  profilanswer
 

Vous en pensez quoi ? https://chromeisbad.com/


---------------
Twitter
n°2371605
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 15-12-2020 à 11:28:39  profilanswer
 

Xavier_OM a écrit :


 
Rajoute un peu de const, et pour le vecteur tente de faire un reserve plutôt histoire d'éviter l’initialisation par défaut.
vector<pair<int, int>> M;
M.reserve(N);
...
M.emplace_back(0, i);  // ou push_back
 
;)


 
Ah non il faut l'initialiser, c'est un vecteur clairsemé (qui remplace la map précédente).
 
Par ailleurs, le temps d'initialisation des 30 millions d'entrées est de 66 ms, donc c'est pas le souci.
 
Maintenant, je suis à 40ns par itération, ça me parait pas absurde, c'est quoi, 3 cache miss ?

n°2371606
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 15-12-2020 à 11:44:07  profilanswer
 

hephaestos a écrit :


 
Ah non il faut l'initialiser, c'est un vecteur clairsemé (qui remplace la map précédente).
 
Par ailleurs, le temps d'initialisation des 30 millions d'entrées est de 66 ms, donc c'est pas le souci.
 
Maintenant, je suis à 40ns par itération, ça me parait pas absurde, c'est quoi, 3 cache miss ?


 
Je dirais ça oui. Pas de sort possible quelque part pour regrouper les données utiles (j'ai pas lu l'énoncé :o) ? On itère souvent plus vite sur un vector trié :D


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°2371607
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 15-12-2020 à 11:55:08  profilanswer
 

Xavier_OM a écrit :


 
Je dirais ça oui. Pas de sort possible quelque part pour regrouper les données utiles (j'ai pas lu l'énoncé :o) ? On itère souvent plus vite sur un vector trié :D


 
C'est à dire que je me sers de la position des éléments comme de la clé de lecture donc on ne peut pas changer leur position sans changer l'algorithme.

n°2371608
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 15-12-2020 à 11:57:03  profilanswer
 

Ok  :jap:

 

edit : je viens de regarder l'énoncé, tu ne voulais pas écrire

Code :
  1. ans = (M[ans].first == 0) ? 0 : M[ans].second - M[ans].first;


plutôt que

Code :
  1. ans = M[ans].first ? 0 : M[ans].second - M[ans].first;


:??:


Message édité par Xavier_OM le 15-12-2020 à 12:16:38

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°2371609
Jubijub
Parce que je le VD bien
Posté le 15-12-2020 à 11:57:45  profilanswer
 

Dion a écrit :


Peux tu stp me faire un second et 3ème paragraphe qui ne répondent pas du tout à mon point ? J'ai besoin de texte à mettre en placeholder et je n'ai pas envie de googler lorem ipsum


ben ça répond : tu parles d'isolation :  
- AWS isole peut etre mieux, mais leur infra tombe plus souvent. Si t'es dans US-West je pense que tu t'en tapes un peu de leur isolation, ça tombe plus souvent
- google isole peut etre moins bien, mais en meme temps des outages de ce genre ça arrive super rarement
- ta comparaison implique que AWS == Google ce qui me parait pas très factuel en terme de traffic servi (même si AWS >> GCP, Google sert Google.com, Youtube, etc... sur la même infra, là où Amazon n'a qu'un gros site) donc ça met pas exactement le même stress sur les infra, et donc limite la validité de la comparaison
 
Pour le coup il y a quand meme eu un peu d'isolation, les load GCP qui tournaient déjà n'ont pas été impactées
 

koskoz a écrit :


 
Il y a un communiqué quelque part ?


non, juste ce qui a été répondu à la presse : problème sur un systeme de quota de stockage.
 


---------------
Jubi Photos : Flickr - 500px
n°2371610
Shinuza
This is unexecpected
Posté le 15-12-2020 à 12:11:28  profilanswer
 

nraynaud a écrit :

'tain les gros nuls du business :sweat:
 
- un type me passe un lead, je rappelle pas par timidité/flemme. le lead m'appelle lui-même au bout de 6 mois
- je passe le truc à Much, qui se foire dans ses emails et rate le truc
- passe un lead à Shinu, le lead rate l'email de shinu au milieu des emails de SSII
 
 
Peut-être que si on était tous un peu plus sérieux sur la communication on aurait tous une situation meilleure ? [:ciler]


Du coup, je vais vérifier mes spams :D


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2371611
Hermes le ​Messager
Breton Quiétiste
Posté le 15-12-2020 à 12:48:12  profilanswer
 


 
Rien


---------------
Expert en expertises
n°2371612
el muchach​o
Comfortably Numb
Posté le 15-12-2020 à 12:53:13  profilanswer
 

Flaie a écrit :


4.67sec sur ma machine (Ryzen 3900x).
J'utilise les générateurs y'a sûrement de la perte de temps je vais voir si je peux faire descendre.
Faudrait tester sur un Apple M1.

 

Edit: tu as ton code ? je peux le compiler sur ma machine pour voir la diff.


En Python avec CPython, ton code tourne en 11,5s sur mon laptop (un Thinkpad T480s à basede  Intel Core i5-8250U), et avec PyPy, ça tombe à 5,2s. [:implosion du tibia]
Plutôt rapide, Python, aujourd'hui, franchement pas ridicule.


Message édité par el muchacho le 15-12-2020 à 13:01:59

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2371613
sligor
Posté le 15-12-2020 à 12:54:48  profilanswer
 

R3g a écrit :


Ça me rassure de voir que je suis pas le seul à mettre ma timidité sur le compte de la flemme et inversement.


+1e9  :sweat:

n°2371614
nraynaud
lol
Posté le 15-12-2020 à 13:04:56  profilanswer
 

Shinuza a écrit :


Du coup, je vais vérifier mes spams :D


pareil, toutes ces opportunités de d'être un mystery shopper que je rate :sweat:


---------------
trainoo.com, c'est fini
n°2371615
ratibus
Posté le 15-12-2020 à 14:00:14  profilanswer
 

Day 15 done en 19+8 minutes  :bounce: (le temps de lire et d'ajouter 1 ligne à mon algo de la partie 1 :D) : https://github.com/ratibus/adventof [...] _2.php#L23
 
Il m'a bien fallu 5 minutes pour comprendre l'énoncé de la partie 1  [:the geddons]


Message édité par ratibus le 15-12-2020 à 14:00:48
n°2371619
gfive
Posté le 15-12-2020 à 16:01:07  profilanswer
 

Bon, j'ai eu mon annuel.
 
+5% cette année, je pense que je peux m'estimer content :)


---------------
Tous les sud africains sont ségrégationistes, à part Ted. (P. Desproges)
n°2371620
Anonymouse
Posté le 15-12-2020 à 16:08:17  profilanswer
 

Salut
 
J'essaie de comprendre la relation entre le binaire au format ELF et le mapping mémoire d'un programme. J'ai compilé mon programme sans pie pour que ce soit plus simple à analyser.
 
Segments elf en bref :

Code :
  1. Type  Offset   VirtAddr           PhysAddr           FileSiz   MemSiz   Flg  Align
  2. LOAD  0x000000 0x0000000000400000 0x0000000000400000  0x0004d0 0x0004d0 R    0x1000
  3. LOAD  0x001000 0x0000000000401000 0x0000000000401000  0x0001f5 0x0001f5 R E  0x1000
  4. LOAD  0x002000 0x0000000000402000 0x0000000000402000  0x000180 0x000180 R    0x1000
  5. LOAD  0x002e10 0x0000000000403e10 0x0000000000403e10  0x000224 0x000230 RW   0x1000
  6. Section to Segment mapping:
  7.   Segment Sections...
  8.    01     .interp
  9.    02     .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym
  10.    03     .init .plt .plt.sec .text .fini
  11.    04     .rodata .eh_frame_hdr .eh_frame
  12.    05     .init_array .fini_array .dynamic .got .got.plt .data .bss


Mapping mémoire du processus :

Code :
  1. address           perms offset   dev   inode        pathname
  2. 00400000-00401000 r--p  00000000 fd:01 4789608      /home/antoine/Documents/p/gc/a_no_pie.out
  3. 00401000-00402000 r-xp  00001000 fd:01 4789608      /home/antoine/Documents/p/gc/a_no_pie.out
  4. 00402000-00403000 r--p  00002000 fd:01 4789608      /home/antoine/Documents/p/gc/a_no_pie.out
  5. 00403000-00404000 r--p  00002000 fd:01 4789608      /home/antoine/Documents/p/gc/a_no_pie.out
  6. 00404000-00405000 rw-p  00003000 fd:01 4789608      /home/antoine/Documents/p/gc/a_no_pie.out


 
Les 3 premiers segments LOAD sont chargé bien correctement en RAM aux adresse virtuelles voulues et avec les bon offsets de fichier.
 
C'est après que ça se complique.  
 
1. Le mapping mémoire suivant (0x403000-0x404000) correspond à l'offset 2000 dans le fichier, offset qui a déjà été mappé en RAM dans le segment précédent  [:canaille]. On dirait que le loader à chargé deux fois le même segment en RAM. J'ai fait un dump des deux zones mémoire et il y'a 2 chose bizarres.
 
La première c'est que je m'attendais à ce que, tel que la table des segments l'indique, seul les premiers 0x180 octets de données soient utilisés, le reste étant à 0. Or l'offset 0xe10 à 0xf90 contient dans les deux zone mémoire des données additionnelles qui divergent entre les deux mapping le reste des données étant identique.  
 
Pourquoi donc ce double mapping et quelles sont les informations additionnelles présentes dans les 2 mappings ?
 
2. Enfin le dernier mapping effectué (0x404000-0x405000), qui contient les globales du programmes, correspond à un offset dans le fichier (3000) qui n'est nulle part indiqué dans les segments. La section .data dans les "sections header" correspond bien à l'offset 0x3020 et à l'adresse 0x404020, le mapping semble donc juste.
 
Cependant la partie " Section to Segment mapping:" nous indique que le 5eme segment, qui aurait du être mappé dans le range 0x403000-0x404000, contient la section .data avec un offset de fichier à 0x02e10.  
 
Pourquoi donc les informations contenues dans le dernier segment ne correspondent pas aux information contenues dans les "sections header"? Je croyais que loader utilisait uniquement les segments pour charger et protéger les poritions du fichier en RAM, les "sections header" étant utilisé uniquement pour le debug?
 
Le full code

Code :
  1. LANG=EN readelf --segments --wide ./a.out


 

Code :
  1. Elf file type is EXEC (Executable file)
  2. Entry point 0x401050
  3. There are 13 program headers, starting at offset 64
  4. Program Headers:
  5.   Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
  6.   PHDR           0x000040 0x0000000000400040 0x0000000000400040 0x0002d8 0x0002d8 R   0x8
  7.   INTERP         0x000318 0x0000000000400318 0x0000000000400318 0x00001c 0x00001c R   0x1
  8.       [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  9.   LOAD           0x000000 0x0000000000400000 0x0000000000400000 0x0004d0 0x0004d0 R   0x1000
  10.   LOAD           0x001000 0x0000000000401000 0x0000000000401000 0x0001f5 0x0001f5 R E 0x1000
  11.   LOAD           0x002000 0x0000000000402000 0x0000000000402000 0x000180 0x000180 R   0x1000
  12.   LOAD           0x002e10 0x0000000000403e10 0x0000000000403e10 0x000224 0x000230 RW  0x1000
  13.   DYNAMIC        0x002e20 0x0000000000403e20 0x0000000000403e20 0x0001d0 0x0001d0 RW  0x8
  14.   NOTE           0x000338 0x0000000000400338 0x0000000000400338 0x000020 0x000020 R   0x8
  15.   NOTE           0x000358 0x0000000000400358 0x0000000000400358 0x000044 0x000044 R   0x4
  16.   GNU_PROPERTY   0x000338 0x0000000000400338 0x0000000000400338 0x000020 0x000020 R   0x8
  17.   GNU_EH_FRAME   0x002038 0x0000000000402038 0x0000000000402038 0x000044 0x000044 R   0x4
  18.   GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0x10
  19.   GNU_RELRO      0x002e10 0x0000000000403e10 0x0000000000403e10 0x0001f0 0x0001f0 R   0x1
  20. Section to Segment mapping:
  21.   Segment Sections...
  22.    00
  23.    01     .interp
  24.    02     .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt
  25.    03     .init .plt .plt.sec .text .fini
  26.    04     .rodata .eh_frame_hdr .eh_frame
  27.    05     .init_array .fini_array .dynamic .got .got.plt .data .bss
  28.    06     .dynamic
  29.    07     .note.gnu.property
  30.    08     .note.gnu.build-id .note.ABI-tag
  31.    09     .note.gnu.property
  32.    10     .eh_frame_hdr
  33.    11
  34.    12     .init_array .fini_array .dynamic .got
  35. [code]
  36. [code]
  37. LANG=EN readelf --sections --wide ./a.out


Code :
  1. There are 31 section headers, starting at offset 0x3a00:
  2. Section Headers:
  3.   [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  4.   [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
  5.   [ 1] .interp           PROGBITS        0000000000400318 000318 00001c 00   A  0   0  1
  6.   [ 2] .note.gnu.property NOTE            0000000000400338 000338 000020 00   A  0   0  8
  7.   [ 3] .note.gnu.build-id NOTE            0000000000400358 000358 000024 00   A  0   0  4
  8.   [ 4] .note.ABI-tag     NOTE            000000000040037c 00037c 000020 00   A  0   0  4
  9.   [ 5] .gnu.hash         GNU_HASH        00000000004003a0 0003a0 00001c 00   A  6   0  8
  10.   [ 6] .dynsym           DYNSYM          00000000004003c0 0003c0 000060 18   A  7   1  8
  11.   [ 7] .dynstr           STRTAB          0000000000400420 000420 00003f 00   A  0   0  1
  12.   [ 8] .gnu.version      VERSYM          0000000000400460 000460 000008 02   A  6   0  2
  13.   [ 9] .gnu.version_r    VERNEED         0000000000400468 000468 000020 00   A  7   1  8
  14.   [10] .rela.dyn         RELA            0000000000400488 000488 000030 18   A  6   0  8
  15.   [11] .rela.plt         RELA            00000000004004b8 0004b8 000018 18  AI  6  24  8
  16.   [12] .init             PROGBITS        0000000000401000 001000 00001b 00  AX  0   0  4
  17.   [13] .plt              PROGBITS        0000000000401020 001020 000020 10  AX  0   0 16
  18.   [14] .plt.sec          PROGBITS        0000000000401040 001040 000010 10  AX  0   0 16
  19.   [15] .text             PROGBITS        0000000000401050 001050 000195 00  AX  0   0 16
  20.   [16] .fini             PROGBITS        00000000004011e8 0011e8 00000d 00  AX  0   0  4
  21.   [17] .rodata           PROGBITS        0000000000402000 002000 000036 00   A  0   0  4
  22.   [18] .eh_frame_hdr     PROGBITS        0000000000402038 002038 000044 00   A  0   0  4
  23.   [19] .eh_frame         PROGBITS        0000000000402080 002080 000100 00   A  0   0  8
  24.   [20] .init_array       INIT_ARRAY      0000000000403e10 002e10 000008 08  WA  0   0  8
  25.   [21] .fini_array       FINI_ARRAY      0000000000403e18 002e18 000008 08  WA  0   0  8
  26.   [22] .dynamic          DYNAMIC         0000000000403e20 002e20 0001d0 10  WA  7   0  8
  27.   [23] .got              PROGBITS        0000000000403ff0 002ff0 000010 08  WA  0   0  8
  28.   [24] .got.plt          PROGBITS        0000000000404000 003000 000020 08  WA  0   0  8
  29.   [25] .data             PROGBITS        0000000000404020 003020 000014 00  WA  0   0  8
  30.   [26] .bss              NOBITS          0000000000404034 003034 00000c 00  WA  0   0  4
  31.   [27] .comment          PROGBITS        0000000000000000 003034 000026 01  MS  0   0  1
  32.   [28] .symtab           SYMTAB          0000000000000000 003060 000648 18     29  47  8
  33.   [29] .strtab           STRTAB          0000000000000000 0036a8 000238 00      0   0  1
  34.   [30] .shstrtab         STRTAB          0000000000000000 0038e0 00011f 00      0   0  1
  35. Key to Flags:
  36.   W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  37.   L (link order), O (extra OS processing required), G (group), T (TLS),
  38.   C (compressed), x (unknown), o (OS specific), E (exclude),
  39.   l (large), p (processor specific)


 

Code :
  1. ==== cat /proc/69253/maps ====


Code :
  1. address                  perms offset   dev   inode   pathname
  2. 00400000-00401000 r--p 00000000 fd:01 4789608                            /home/antoine/Documents/p/gc/a_no_pie.out
  3. 00401000-00402000 r-xp 00001000 fd:01 4789608                            /home/antoine/Documents/p/gc/a_no_pie.out
  4. 00402000-00403000 r--p 00002000 fd:01 4789608                            /home/antoine/Documents/p/gc/a_no_pie.out
  5. 00403000-00404000 r--p 00002000 fd:01 4789608                            /home/antoine/Documents/p/gc/a_no_pie.out
  6. 00404000-00405000 rw-p 00003000 fd:01 4789608                            /home/antoine/Documents/p/gc/a_no_pie.out
  7. 01359000-0137a000 rw-p 00000000 00:00 0                                  [heap]
  8. 7f376b1fd000-7f376b1ff000 rw-p 00000000 00:00 0
  9. 7f376b1ff000-7f376b225000 r--p 00000000 fd:01 11928185                   /lib/x86_64-linux-gnu/libc-2.32.so
  10. 7f376b225000-7f376b392000 r-xp 00026000 fd:01 11928185                   /lib/x86_64-linux-gnu/libc-2.32.so
  11. 7f376b392000-7f376b3de000 r--p 00193000 fd:01 11928185                   /lib/x86_64-linux-gnu/libc-2.32.so
  12. 7f376b3de000-7f376b3df000 ---p 001df000 fd:01 11928185                   /lib/x86_64-linux-gnu/libc-2.32.so
  13. 7f376b3df000-7f376b3e2000 r--p 001df000 fd:01 11928185                   /lib/x86_64-linux-gnu/libc-2.32.so
  14. 7f376b3e2000-7f376b3e5000 rw-p 001e2000 fd:01 11928185                   /lib/x86_64-linux-gnu/libc-2.32.so
  15. 7f376b3e5000-7f376b3eb000 rw-p 00000000 00:00 0
  16. 7f376b412000-7f376b413000 r--p 00000000 fd:01 11928179                   /lib/x86_64-linux-gnu/ld-2.32.so
  17. 7f376b413000-7f376b437000 r-xp 00001000 fd:01 11928179                   /lib/x86_64-linux-gnu/ld-2.32.so
  18. 7f376b437000-7f376b440000 r--p 00025000 fd:01 11928179                   /lib/x86_64-linux-gnu/ld-2.32.so
  19. 7f376b440000-7f376b441000 r--p 0002d000 fd:01 11928179                   /lib/x86_64-linux-gnu/ld-2.32.so
  20. 7f376b441000-7f376b443000 rw-p 0002e000 fd:01 11928179                   /lib/x86_64-linux-gnu/ld-2.32.so
  21. 7ffd64afb000-7ffd64b1c000 rw-p 00000000 00:00 0                          [stack]
  22. 7ffd64b49000-7ffd64b4d000 r--p 00000000 00:00 0                          [vvar]
  23. 7ffd64b4d000-7ffd64b4f000 r-xp 00000000 00:00 0                          [vdso]
  24. ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]

n°2371621
el_barbone
too old for this shit ...
Posté le 15-12-2020 à 16:31:47  profilanswer
 

gfive a écrit :

Bon, j'ai eu mon annuel.
 
+5% cette année, je pense que je peux m'estimer content :)


par les temps qui courent c'est plutôt très bien ça


---------------
En théorie, la théorie et la pratique sont identiques, en pratique, non.
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  23703  23704  23705  ..  26990  26991  26992  26993  26994  26995

Aller à :
Ajouter une réponse
 

Sujets relatifs
Plus de sujets relatifs à : [blabla@olympe] Le topic du modo, dieu de la fibre et du monde


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)