gled a écrit 44 commentaires

  • # adb + scrcpy ?

    Posté par  . En réponse au message Faire d'un smartphone, une caméra USB reconnue sous Linux. Évalué à 4 (+3/-0).

    Par connexion usb, en utilisant adb et scrcpy

    Pompé sur internet :

    adb shell am start -a android.media.action.VIDEO_CAMERA

    Puis simplement lancer scrcpy

    Bon le désavantage est qu'il faut que l'ordiphone soit connecté en filaire et que la vidéo est polluée des widgets de l'application de la caméra, mais y a peut-être une façon de ne pas les afficher via un paramètre ?

  • [^] # Re: p-e conso mémoire ?

    Posté par  . En réponse au message pygame subsurface, dans quels cas peuvent-elles être utiles ?. Évalué à 1 (+0/-0).

    Oui, j'avais déjà vu ce sujet sur reddit, mais ça ne m'avance guère, je vais quand même tester un peu ce qui est énuméré dans ce sujet.
    Merci en tout cas =)

  • [^] # Re: p-e conso mémoire ?

    Posté par  . En réponse au message pygame subsurface, dans quels cas peuvent-elles être utiles ?. Évalué à 1 (+0/-0).

    Que ce soit une surface intermédiaire, ou directement sur la surface de l'écran, je ne pense pas que ça change grand-chose.

  • [^] # Re: p-e conso mémoire ?

    Posté par  . En réponse au message pygame subsurface, dans quels cas peuvent-elles être utiles ?. Évalué à 2 (+1/-0). Dernière modification le 13 juin 2025 à 10:41.

    Merci du lien =)

    J'ai un peu testé ce que ça peut donner en mémoire, et y a quoi ? Peut-être 1 % de plus en conso mémoire avec un blit de la zone spécifiée par rapport à une subsurface, c'est quand même très peu, je trouve, pour une image de 300 x 300 changeant 10 fois par seconde.

    J'ai simplement regardé la consommation en mémoire via le moniteur système de Mate.

    Testé avec ce simple script :

    import random
    import pygame as pg
    import itertools
    
    pg.init()
    screen = pg.display.set_mode((600, 600))
    
    surf = pg.Surface((3000, 3000)).convert()
    
    coords = tuple(
        (x, y)
        for x in range(0, 3000, 300)
        for y in range(0, 3000, 300)
    )
    
    for coord, color in zip(coords, random.sample(tuple(pg.color.THECOLORS), 100)):
        surf.fill(pg.color.THECOLORS[color], (*coord, 300, 300))
    
    cycle_anim = itertools.cycle(coords)
    subsurf_rect = pg.Rect(0, 0, 300, 300)
    EVENT_ANIM = pg.USEREVENT
    
    pg.time.set_timer(EVENT_ANIM, 100)
    clock = pg.time.Clock()
    running = True
    while running:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                running = False
            elif event.type == EVENT_ANIM:
                subsurf_rect.topleft = next(cycle_anim)
    
                screen.blit(surf.subsurface(subsurf_rect), (150, 150))
                # screen.blit(surf, (150, 150), subsurf_rect)
    
                pg.display.flip()
        clock.tick(30)
    
    pg.quit()

    Il suffit d'inverser la ligne commentée pour comparer les consommations en mémoire.

  • [^] # Re: Créer un style de cadre pour les images ?

    Posté par  . En réponse au message Intégration des images dans LibreOffice. Évalué à 1 (+0/-0).

    Oui, d'accord, mais ça ne me dispense pas de créer un cadre supérieur pour lier mon titre et mon image.

  • [^] # Re: Créer un style de cadre pour les images ?

    Posté par  . En réponse au message Intégration des images dans LibreOffice. Évalué à 1 (+0/-0).

    Je n'ai pas compris ce à quoi tu fais allusion. Qu'est-ce qu'un « style cadre » ?

  • [^] # Re: Créer un style de cadre pour les images ?

    Posté par  . En réponse au message Intégration des images dans LibreOffice. Évalué à 1 (+0/-0). Dernière modification le 20 mai 2025 à 10:21.

    Les légendes sont mes titres, donc non, ça ne me convient pas, je n'utilise pas les légendes, car ce n'est pas assez configurables.

    Merci de la suggestion.

  • [^] # Re: Créer un style de cadre pour les images ?

    Posté par  . En réponse au message Intégration des images dans LibreOffice. Évalué à 1 (+0/-0).

    Bon, je n'arrive vraiment pas à faire ce que je veux, la taille automatique, je l'avais déjà testé, ça ne fonctionne pas, enfin si, mais uniquement s'il y a quelque chose après mon image, ce qui oblige à laisser une ligne vide en dessous, bon, je vais faire avec, mais ça ne m'arrange pas.

    Toujours est-il, merci de vos suggestions, ça m'a permis de découvrir qu'on pouvait faire un nouveau style depuis la sélection, oui, je sais, je ne suis pas fortiche avec les traitements de texte ×_*

  • [^] # Re: Créer un style de cadre pour les images ?

    Posté par  . En réponse au message Intégration des images dans LibreOffice. Évalué à 1 (+0/-0).

    Merci à vous deux, je vais retester et voir si j'y arrive selon vos conseils.

  • [^] # Re: Est-ce vraiment nécessaire que le réseau soit invisible?

    Posté par  . En réponse au message Connexion à un réseau wifi invisible avec android 14. Évalué à 1 (+0/-0). Dernière modification le 17 avril 2025 à 18:05.

    Pour le mot de passe, les 20 caractères alphanumériques par défaut, doivent je pense suffire.
    Et pour le chiffrement je pense que wpa/wpa2 devrait largement aller (j'avoue ne pas trop m'intéresser à tout ça), je doute que parmi mon voisinage se terre un terrible hacker, je me méfie plus du bluetooth que du wifi, d'autant que je regarde régulièrement sur l'interface de ma box qui est connecté.

    Merci.

  • [^] # Re: Options avancées

    Posté par  . En réponse au message Connexion à un réseau wifi invisible avec android 14. Évalué à 1 (+0/-0). Dernière modification le 17 avril 2025 à 17:54.

    Oui, merci, je ne sais pas ce que j'ai foutu, je n'étais sans doute pas bien réveillé lorsque j'ai configuré ce réseau 😐

    Navré du retard de ma réponse.

  • # Merci beaucoup

    Posté par  . En réponse à la dépêche GIMP 3.0 RC3 est sorti. Évalué à 10.

    Je ne me sers de Gimp que pour faire des choses simples, je ne suis pas graphiste, mais, un grand MERCI à tous les développeurs de Gimp dont je suis admiratif, vu les compétences titanesques (en tout cas par rapport à moi =D) que vous devez avoir en mathématiques et géométrie.

  • [^] # Avec deux listbox

    Posté par  . En réponse au message Tkinter et scrollbar. Évalué à 1.

    Un autre code fait à l'arrache =D

    import tkinter as tk
    from tkinter import font as tk_font
    import json
    
    SCROLL_WIDTH = 18
    LISTBOX_HEIGHT = 12
    
    def players_load(path):
        with open(path) as f:
            return json.load(f)
    
    def player_select(list_box):
        i = list_box.curselection()
        if not i:
            return
        value = list_box.get(i)
        if players_selected[not list_box.id] == value:
            return
        players_selected[list_box.id] = value
        players_label.config(
            text=f'{players_selected[0]} - {players_selected[1]}'
        )
    
    players_selected = {0:'', 1:'',}
    players = dict(sorted(players_load('joueurs.json').items()))
    list_box_width = max(len(p) for p in players) + 2
    
    window = tk.Tk()
    font = tk_font.Font(family='mono', size=18)
    
    frame_box = tk.Frame(window, bg='#000')
    frame_box.grid()
    
    left_scroll = tk.Scrollbar(
        frame_box, orient=tk.VERTICAL, width=SCROLL_WIDTH,
    )
    left_scroll.grid(row=0, column=0, sticky=tk.NSEW,)
    left_list = tk.Listbox(
        frame_box,
        font=font,
        width=list_box_width,
        height=LISTBOX_HEIGHT,
        xscrollcommand=left_scroll.set,
        yscrollcommand=left_scroll.set,
    )
    left_list.grid(row=0, column=1, padx=(10, 5),)
    left_scroll.config(command=left_list.yview)
    left_list.id = 0 # C'est crade !
    
    right_scroll = tk.Scrollbar(
        frame_box, orient=tk.VERTICAL, width=SCROLL_WIDTH,
    )
    right_scroll.grid(row=0, column=3, sticky=tk.NSEW,)
    right_list = tk.Listbox(
        frame_box,
        font=font,
        width=list_box_width,
        height=LISTBOX_HEIGHT,
        xscrollcommand=right_scroll.set,
        yscrollcommand=right_scroll.set,
    )
    right_list.grid(row=0, column=2, padx=(5, 10),)
    right_scroll.config(command=right_list.yview)
    right_list.id = 1 # C'est crado !
    
    players_label = tk.Label(
        frame_box, height=3, font=font, bg='#000', fg='#fff',
    )
    players_label.grid(row=1, column=0, columnspan=4,)
    
    left_list.insert(0, *players)
    right_list.insert(0, *players)
    
    left_list.bind(
        '<<ListboxSelect>>', lambda e: player_select(left_list)
    )
    right_list.bind(
        '<<ListboxSelect>>', lambda e: player_select(right_list)
    )
    
    window.mainloop()

    Y a des trucs un peu moches, notamment d'insérer des attributs id aux listbox (permettant de savoir si la sélection courante n'est pas la même que celle de l'autre listbox), il serait préférable de créer une classe dérivée de Listbox et y intégrer un id via un attribut de classe.

  • [^] # Re: on ne peut pas en l'état

    Posté par  . En réponse au message Tkinter et scrollbar. Évalué à 2. Dernière modification le 19 février 2025 à 17:45.

    Un truc fait à l'arrache avec une frame et un simple canvas.
    Il faudrait quand même revoir ton script, et utiliser des frames pour grouper les widgets de ta fenêtre, là, c'est un peu le bazar.

    can_frame = tk.Frame(cadre, bd=2, highlightbackground='grey')
    can_frame.grid(padx=10, pady=10)
    line_height = 40
    can = tk.Canvas(
        can_frame,
        width=280,
        height=line_height * 10,
        highlightthickness=0,
        yscrollincrement=line_height,
    )
    can.grid(row=0, column=0)
    scroll = tk.Scrollbar(
        can_frame, width=20, orient=tk.VERTICAL, highlightthickness=0,
    )
    scroll.grid(row=0, column=1, sticky=tk.NSEW)
    can.config(yscrollcommand=scroll.set)
    scroll.config(command=can.yview)
    colors = 'lightGreen', 'lightBlue'
    radios_base_options = dict(
        fg='grey',
        highlightthickness=0,
    )
    for i in range(nb_joueurs):
        radios_options = dict(
            text=liste_joueurs[i],
            value=liste_joueurs[i],
            bg=colors[i % 2],
        )
        can.create_rectangle(
            0,
            i * line_height,
            can['height'],
            (i + 1) * line_height,
            fill=radios_options['bg'],
            width=0,
        )
        radio = tk.Radiobutton(
            can, variable=j1a, **radios_base_options, **radios_options
        )
        can.create_window(
            0,
            i * line_height + line_height / 2,
            window=radio,
            anchor=tk.W,
        )
        radio = tk.Radiobutton(
            can, variable=j1b, **radios_base_options, **radios_options
        )
        can.create_window(
            int(can['width']) / 2,
            i * line_height + line_height / 2,
            window=radio,
            anchor=tk.W,
        )
    can.configure(scrollregion=(0, 0, 0, i * line_height))

    Reste plus qu'à intégrer cela dans ton interface {º_º}

    Bonne continuation.

  • # on ne peut pas en l'état

    Posté par  . En réponse au message Tkinter et scrollbar. Évalué à 2.

    On ne peut mettre un scroll que sur les widgets Text et Canvas, il va donc falloir que tu revoies et réagence le tout. Je pense qu'un canvas en y intégrant tes labels et radios avec la méthode create_window devrait convenir.

    En revanche chez moi ton script jette plusieurs erreurs, le json des joueurs n'est pas en utf8 mais en iso-8859-1, et comme tu n'as pas spécifié l'encodage dans open.
    Les smileys dans ton code ne passent chez moi :

    _tkinter.TclError: character U+1f60a is above the range (U+0000-U+FFFF) allowed by Tcl

    Préfère aussi les espaces que les tabulations pour indenter ton code.

  • # Un simple exemple

    Posté par  . En réponse au message aide Turtle. Évalué à 2.

    Voici un simple exemple.

    import turtle
    
    SQUARE_SIZE = 60
    
    MAZE = (
        '1111111111',
        '1000000001',
        '1011111101',
        '1010101001',
        '1010001011',
        '1010111101',
        '1010000001',
        '1011011101',
        '1000001001',
        '1111111111',
    )
    
    SCREEN_WIDTH = (len(MAZE[0]) + 2) * SQUARE_SIZE
    SCREEN_HEIGHT = (len(MAZE[1]) + 2) * SQUARE_SIZE
    
    TOP = -SCREEN_HEIGHT // 2
    LEFT = SCREEN_WIDTH // 2
    
    PLAYER = dict(
        turtle=turtle.Turtle(),
        color='blue',
        x=1,
        y=1,
    )
    
    
    def square_draw(x, y, size, color):
        turtle.up()
        turtle.goto(x, y)
        turtle.down()
        turtle.fillcolor('red')
        turtle.begin_fill()
        for _ in range(4):
          turtle.forward(size)
          turtle.right(90)
        turtle.up()
        turtle.end_fill()
    
    
    def maze_draw(maze):
        for y, line in enumerate(maze):
            for x, value in enumerate(line):
                if value == '1':
                    square_draw(
                        x * SQUARE_SIZE - LEFT + SQUARE_SIZE,
                        y * -SQUARE_SIZE - TOP - SQUARE_SIZE,
                        SQUARE_SIZE,
                        'red'
                    )
    
    
    def player_draw(player):
        player['turtle'].clear()
        player['turtle'].up()
        x = player['x'] * SQUARE_SIZE - LEFT + SQUARE_SIZE * 1.5
        y = player['y'] * -SQUARE_SIZE - TOP - SQUARE_SIZE * 1.75
        player['turtle'].goto(x, y)
        player['turtle'].down()
        player['turtle'].fillcolor(player['color'])
        player['turtle'].begin_fill()
        player['turtle'].circle(SQUARE_SIZE // 4)
        player['turtle'].end_fill()
    
    
    turtle.hideturtle()
    turtle.speed(0)
    screen = turtle.Screen()
    screen.setup(SCREEN_WIDTH, SCREEN_HEIGHT)
    
    PLAYER['turtle'].hideturtle()
    PLAYER['turtle'].speed(0)
    
    maze_draw(MAZE)
    player_draw(PLAYER)
    
    def player_move_left(maze, player):
        if maze[player['y']][player['x'] - 1] == '1':
            return
        player['x'] -= 1
        player_draw(player)
    
    def player_move_right(maze, player):
        if maze[player['y']][player['x'] + 1] == '1':
            return
        player['x'] += 1
        player_draw(player)
    
    def player_move_up(maze, player):
        if maze[player['y'] - 1][player['x']] == '1':
            return
        player['y'] -= 1
        player_draw(player)
    
    def player_move_down(maze, player):
        if maze[player['y'] + 1][player['x']] == '1':
            return
        player['y'] += 1
        player_draw(player)
    
    
    turtle.onkeypress(lambda: player_move_left(MAZE, PLAYER), 'Left')
    turtle.onkeypress(lambda: player_move_right(MAZE, PLAYER), 'Right')
    turtle.onkeypress(lambda: player_move_up(MAZE, PLAYER), 'Up')
    turtle.onkeypress(lambda: player_move_down(MAZE, PLAYER), 'Down')
    
    turtle.listen()
    turtle.done()

    Y a sans doute des trucs à revoir, et si t'es familier avec l'objet python, faire des classes.

  • # Ras-le-bol

    Posté par  . En réponse au lien Fini le ticket de caisse ? Sept questions que pose la disparition de l’impression automatique. Évalué à -10.

    Moi, ça me gonfle qu'à chaque fois la caissière me demande « voulez-vous le ticket de caisse », je réponds inlassablement « bien évidemment ! »

    Ce serait plutôt ceux qui ne veulent pas du ticket papier qui devraient le signaler, oui, je ne veux pas utiliser un trucphone pour pouvoir visualiser après coup si la caissière n'a pas fait une erreur en ma défaveur, je veux pouvoir contrôler ma facture à l'instant même de mes achats ! Déjà que souvent les caissières ont tendances à m'agacer, entre celles qui se dépêchent de passer rapidement vos articles et une fois fini vous sort « vous avez la carte du magasin ? » alors que vous essayez de vous dépêtrer du bordel qu'elle a mis sous vos yeux, je fulmine intérieurement, mais parfois je craque, je sors des choses du genre « vous voulez une pelle ? », car la caissière est en train de faire un monticule avec mes articles… Ou encore celle qui vient me foutre les produits d'entretien sur de la charcuterie ou viande alors que j'avais bien séparé le tout sur le tapis dégueulasse de la caisse, alors je craque encore et lui demande, « vous faites ça chez vous ? Vous mettez l'eau de javel sur vos tranches de jambon ? », alors je sais que les caissières ont un métier pas facile, pression des supérieurs pour avoir un maximum d'efficience, confrontées à des clients chiants, impolis, désagréables, et j'en passe, mais il y a des limites, puis si le client ne râle pas, les caissières ne remonteront jamais leurs doléances à leurs supérieurs, plus y aura de râleurs, plus les choses changeront.

    Tout ce foin autour du ticket de caisse est du pur foutage de gueule, blabla ça pollue, blabla ça coupe des arbres, blabla, ça nuit aux castors, mais putain que représente un ticket de caisse par rapport à tous les emballages des articles que l'on achète ? Que dalle ! Mais comme d'habitude faisons chier les consommateurs plutôt que les industriels qui s'en foutent royalement de la pollution qu'engendrent les emballages, hein, acheter de la viande sous plastique, un paquet de gâteaux de dénomination « poket » est une connerie innommable et ça c'est pour tout ce qu'on achète, alors qu'on pourrait tellement changer beaucoup de choses, par exemple nous qui sommes grands consommateurs de vinaigre blanc, on ne demande que ça de venir avec un bidon vide et de pouvoir le remplir à partir d'une « citerne » au supermarché, mais non,on doit se coltiner des bouteilles plastiques qui finissent au rebut pour rien…

    Je me demande si y a pas un lobby derrière tout ça qui a poussé le gouvernement ; si soucieux de protéger l'environnement ! ; de décréter cette loi alakon…

  • [^] # Re: Qu'ils disent...

    Posté par  . En réponse au lien Campagne "Je ne suis pas une data" par UFC Que Choisir. Évalué à 10. Dernière modification le 26 janvier 2023 à 10:41.

    Cela m'interpelle de plus en plus, et ça me gonfle tellement.

    Pourquoi de plus en plus de sites internet ne peuvent plus se passer d'utiliser tous ces « services » externes qui évidemment en tirent bénéfices, cela vient des « nouveaux » développeurs web ?, on leur apprend dans les écoles à ne faire que ça, utiliser des api externes pour 3 fonctionnalités js ? Ils ne savent pas les programmer eux-mêmes ?
    Qu'on vienne pas invoquer que l'utilisation de ces api est une protection contre les bots.

    Je ne suis pas développeur, ne travaille pas même dans le domaine info, mais il me semble qu'il y a encore 15/20ans on préconisait de n'utiliser le javascript que pour améliorer l'interface utilisateur, mais surtout laisser fonctionnel le site même js désactivé, aujourd'hui, c'est infernal, même le plus simple des sites internet qui n'aurait pas besoin de javascript ne fonctionne pas sans, il suffit de regarder ce site nommé dans ce lien, sans js aucun des boutons ne fonctionnent en fait rien ne fonctionne, le site respectemesdatas n'affiche rien avec le js désactivé, et donc ce site est une merde infâme, ils feraient bien de la boucler, en restant poli.

    Je ne parle même pas du site de ma banque, qui sur sa page d'accueil invite goo_gle, tag_commander, inbeta… Vive noscript !
    Cela est représentatif du comment on est traqué dans nos moindres faits et gestes sur le net, même sur les sites où les données sont sensibles, alors reprendre le contrôle de nos « data », non, ça ne se fait pas en « 3 clics », c'est en réalité impossible à faire.

  • # Intéressé

    Posté par  . En réponse au message Interagir avec Geany depuis le terminal. Évalué à 2. Dernière modification le 22 décembre 2022 à 13:01.

    Si tu trouves, cela m'intéresse aussi, après cela ne prend pas beaucoup plus de temps de faire un SHIFT + F9 suivi d'un CTRL + r, qu'un simple SHIFT + F9 ^ _ ^

  • # Redirection vers numéro surtaxé ?

    Posté par  . En réponse au journal Piéger les démarcheurs abusifs. Évalué à 3.

    Oui les bots, j'ai eu l'idée il n'y a pas très longtemps d'user à nouveau d'un téléphone fixe, car là où je réside, la qualité du réseau téléphonique est vraiment très exécrable, elle est très variable d'un jour à l'autre.

    Grave erreur, ce sont des centaines d'appels par mois venant de tous ces emmerdeurs auxquels je ne réponds jamais, des bots, lesquels je pense appellent des numéros au hasard et doivent détecter si une personne physique répond. Heureusement que mon abonnement portable F… permet de bannir des plages entières de numéros, j'ai par exemple banni comme un bourrin tout ce qui vient du 01, cela a filtré directement au moins 70% des emmerdeurs téléphonique… Je ne me sers donc uniquement de mon fixe que pour appeler, en revanche une liste blanche sur mon portable est pour moi inconcevable, par exemple en cas de gros souci d'un de nos proches, accident ou pire…

    J'avais un pote ; Yann ; il y a quelques années qui aimait aussi lorsqu'il recevait un appel d'un démarcheur, leur faire perdre du temps comme toi en tenant la grappe à ces casses-bonbons au maximum, je vous admire d'arriver à faire ça, je n'ai pas du tout la patience.

    Le piège ultime serait d'après moi pouvoir faire une redirection vers un numéro (très) surtaxé, ou encore vers un numéro étranger coûtant cher le tout sans que le bot ne puisse détecter cette redirection, le rêve !

    N'empêche que j'ai toujours eu une suspicion envers certains organismes vendant les informations privées de leurs clients, pour ma part je n'avais jamais reçu le moindre appel de spammeur téléphonique (cela fait un bail que j'ai le même numéro) et tout d'un coup j'ai commencé à en recevoir des tonnes, et la seule chose que j'ai changée a été de souscrire une assurance chez A…z, certes il faut se méfier des biais de confusions, mais comme disait machin, y a pas de fumée sans feu.

  • [^] # Re: Où est la partie 2 ?

    Posté par  . En réponse au message Avent du Code, jour 10. Évalué à 1.

    Ah d'accord, merci à vous deux, Yth et 🚲 Tanguy Ortolo de la confirmation, bien dommage alors.

  • # Où est la partie 2 ?

    Posté par  . En réponse au message Avent du Code, jour 10. Évalué à 1.

    Pour la somme des intensités, pas trop de difficultés, ma solution sans fioritures (en trichant un peu).

    cycles = {}
    x = 1
    cycle = 1
    for line in program.strip().split("\n"):
        cycle += 1
        cycles[cycle] = x
        try:
            x += int(line.split(" ")[1])
            cycle += 1
            cycles[cycle] = x
        except IndexError:
            # noop
            pass
    
    signals = [x * cycles[x] for x in range(20, 221, 40)]
    print(signals, sum(signals))

    Mais que faut-il faire ensuite ? Où est la seconde partie de l'exercice sur la page d'adventofcode ? La dernière phrase que je vois sur la page est :

    Find the signal strength during the 20th, 60th, 100th, 140th, 180th, and 220th cycles. What is the sum of these six signal strengths?

    Faut-il avoir un compte susnommé en bas de page pour le voir ?

  • # En faisant pivoter la forêt

    Posté par  . En réponse au message Avent du Code, jour 8. Évalué à 1.

    Une version sans doute pas du tout optimisée pour compter les arbres visibles depuis les lisières, faisant pivoter le tuple des arbres.

    trees = ("30373", "25512", "65332", "33549", "35390")
    
    
    def count_visible_trees(trees):
        n = 0
        for row in trees:
            tmax = 0
            i = 0
            for tree in row:
                tree = int(tree)
                if not tree:
                    continue
                if tree > tmax:
                    i += 1
                    tmax = tree
            n += i
        return n
    
    
    def rotate_trees(trees):
        return tuple("".join(row[i] for row in trees) for i in range(len(trees)))[::-1]
    
    
    n = count_visible_trees(trees)
    for _ in range(3):
        trees = rotate_trees(trees)
        n += count_visible_trees(trees)
    
    print(f"Il y a {n} arbres visibles depuis les orées cardinales du bois")

    J'imagine qu'en faiasant le même principe avec numpy, ce sera bien plus optimisé.

  • [^] # Re: Les extensions

    Posté par  . En réponse au message Plantage de Firefox >= 102. Évalué à 1.

    Salut,

    Merci Maderios, hélas comme je supputais cela ne change rien, je n'ai même pas besoin d'attendre un plantage, cela se voit directement lorsque je parcours les items du menu, il y a toujours cette légère latence.

    Bref, tout cela m'ennuie bien.

    J'ai téléchargé la dernière version de Firefox (106), là aucun problème, j'ai installé les extensions dont je ne peux me passer, importer la tonne de signets, c'est fluide comme avant la version 102, me reste à trouver comment importer la config de la 102.4 dans la 106 automatiquement…

    Merci à tous de m'avoir lu.

  • [^] # Re: c'est deja le cas, non ?

    Posté par  . En réponse au message Réveil de disque externe. Évalué à 3.

    Salut, oui voilà tu as tout compris à ma demande, je souhaitais que le disque externe ne se réveille que lorsque j'y accède. Et en effet comme un boulet je n'avais pas fait gaffe que j'avais un répertoire de ce disque en favori dans la fenêtre de Caja, en l'ayant supprimé, cela a l'air de laisser Gargantua digérer tranquillement.

    Ce qui est tout de même assez bizarre, c'est que j'ai dans la barre des tâches supérieure de mon bureau des raccourcis pour accéder à tel ou tel répertoire de mon système et en cliquant sur ces raccourcis, Gargantua ne se réveille pas, j'imagine que la gestion des raccourcis fonctionne d'une autre manière.

    Merci en tout cas !

    Prochaine fois j'essaierai de réfléchir un peu plus.