Et effectivement, le mot de passe est devenu rigoureusement simple. Bonus, il n'est dans aucun dictionnaire, garanti.
Pendant le calcul des combinaisons possibles pour trouver le mot de passe final à utiliser, j'ai démontré de mon côté que P ≈ NP et chiffré la démonstration avec un fichier daté pour prouver sa précédence.
Ce qui est dommage, c'est que j'ai utilisé un ancien mot de passe à ce moment, supprimé depuis puisque devenu inutile…
pour plusieurs raisons mais ne parviens pas à le mettre à jour
Peux-tu préciser ? Il y a un message d'erreur par exemple ?
Il est bien indispensable de passer par le bios pour le faire?
Non, juste de démarrer sur linux et suivre les procédures de mises à jour (voir plus bas).
Faut-il refaire le partitionnement de mon disque?
Non plus, les mises à jour vont conserver le partitionnement¹
(Oui, malheureusement mes deux systèmes d'exploitation sont sur le même)
C'est assez classique, pas d'inquiétude.
Pour en revenir à la mise à jour, passer de 16.04 à 20.04 d'un coup, c'est peut-être un saut de version trop grand. Comme ce sont deux versions LTS (choix compréhensible si tu en as peu l'usage), je te conseille de passer par la version intermédiaire LTS entre les deux, soit la 18.04, ce qui donne :
Note préalable : Penser à faire une sauvegarde de ses données (windows et linux) avant au cas où, sait-on jamais…
Mise à jour de 16.04 vers 18.04
Mise à jour de 18.04 vers 20.04
Ça devrait mieux passer.
Si non, il nous faut plus de précisions.
¹: il peut y avoir de "petits" gags, comme une partition /boot trop petite, mais c'est rare à priori
Pas de problème avec un os.listdir, on ne liste que les fichiers présents, donc on peut construire le dictionnaire à la volée sans os.exists ou if, en n'imposant pas de contraintes de bornes inférieures/supérieures (dans la limite du raisonnable :p). Tout facile sans avoir recours à des méthodes avancées "compliquées".
Et en ce qui concerne les débutants, j'éviterai justement de leur parler dès le début de notions avancées. Tu aurais aimé qu'on te parle de lamdbas dès ton premier cours d'informatique ? Mais ce n'est que mon avis. ;)
PS : note qu'avec ton glob plus haut, tu fais exactement ça :p
Peut-être pourrais-tu utiliser filter pour moins te prendre la tête avec les indices et les chiffres dans tous les sens
C'est pas super-complexifier la chose ?
Le dictionnaire peut être construit à la volée, sans nécessité de le maintenir "manuellement", dans une première passe qui "prépare" les listes de numéros dans l'ordre souhaité par année, puis une seconde boucle fait le boulot de concaténation. Pas besoin de filter ;)
Vu le code proposé plus haut, le problème est (un peu) pris à l'envers si tu veux tout faire en une passe, car tu ne sauras jamais à l'avance la fin du nom de fichier, donc il faut passer par un fichier temporaire. Sinon, en deux passes sur les noms, ça se fait aussi, et vu la taille des données à stocker (une liste d'entiers), c'est kif-kif, et là, plus besoin du fichier temporaire.
Autre avantage : si les pages n'étaient pas numérotées et que par mégarde le document tombait, tout restait dans l'ordre (héritage de mauvaises expériences avec des lots de cartes perforées pas numérotées ?)
J'ai pris un mail en html au pif, il y en a un peu plus :
<palign=center><fontstyle="font-family: Verdana, Arial; font-size: 10px">
Si vous avez des difficultés pour visualiser ce message,
<ahref="http://neomarket.diffusion.site-obfusqué.fr/r/?id=4b56,10945,10946&p1=%40ml2iu%2Bx4%2BqPDafQgLo3F8LwKi3E%3D"_label="Page miroir"_type="mirrorPage">cliquez ici</a></font></p><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metaname="viewport"content="width=device-width, initial-scale=1, shrink-to-fit=no"/><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/><title>Titre bidon</title><style>html{font-family:Arial,Helvetica,sans-serif;}.body-wrap{width:100%;height:100%;}.container{max-width:640px;}.margin-top-10{margin-top:10px;}.margin-top-20{margin-top:20px;}.margin-top-30{margin-top:30px;}.margin-top-40{margin-top:40px;}.email-cadre-footer{color:#666666;font-size:12px;}</style></head><body><imgsrc="https://www.site-obfusqué.fr/info?xa=604259&xt=5087&type=email "/><!-- Ici du html --></body></html><imgheight='0'width='0'alt=''src='http://neomarket.diffusion.site-obfusqué.fr/r/?id=hf5f4b56,1094cbd5,1'/>
Ton premier attachement est du texte brut, pas du html. Il n'y a donc aucune raison que l'image soit "inline", comme indiqué par le sujet du mail.
Ceci étant, cela n'explique pas le doublon, sauf si gmail, ne voyant pas de html affiche deux fois le corps du message, une fois en texte (donc le texte et une image en bas) et une fois en html (pas de texte puisque pas et html, mais encore une fois une image en bas).
Une autre fonctionnalité à laquelle j'ai trouvé un intérêt, c'est la possibilité d'envoyer des notifications à date programmée sur un canal donné. Par exemple, tous les lundis matin à 10h50, un petit rappel sur le canal de l'équipe X que la réunion de la semaine commence dans 10 minutes.
Sûr, un mail via cron, ça marche aussi, mais il faut maintenir la liste des destinataires à jour par exemple, et s'il y a des "ponts" entre équipes, ça peut vite devenir lourd. Avec ce genre de messagerie, si une personne de l'équipe Y doit travailler avec l'équipe X, il a juste a rejoindre le canal et hop, magie ! Il est au courant comme tous les autres ;) Et une fois que c'est fait, il peut sortir et ne plus être averti vu que ça ne le concerne plus.
Certes, tu n'as jamais écrit raise dans ton programme, mais il est écrit quelque part dans les appels que fait la fonction write, si ça peut t'aider à comprendre.
Voici ma fonction j'ai mis les exception. Est-ce bon ?
Malheureusement, pas vraiment :) Ce qui n'est pas grave en soi, il faut bien commencer par apprendre un jour avant d'être à l'aise.
Pour lever une exception à un endroit donné, c'est le mot clef raise suivi de l'exception à lever qu'il faut utiliser. Ici, le bloc try … except … bloque la propagation à un niveau supérieur de l'exception IOError (et uniquement les exceptions de ce type, toutes les autres continuent de remonter la pile d'exécution). Je ne comprend pas l'intérêt du else.
PS : je ne suis pas là pour dire ce qui est "bon" ou "mauvais" ;) juste conseiller ;)
Lorsqu'il y a un début de code, même non fonctionnel, que les remarques semblent être prises en compte, ça motive pour aider ;)
Revenons-en à la question : lever une exception et un retour de fonction sont deux choses très différentes… voir ici pour la notion d'exception. Un retour "remonte" à la fonction appelante, une levée d'exception "remonte" la pile d'appel jusqu'à arriver à un traitement (bloc try … except …) ou interrompt le programme s'il n'y a pas de traitement.
J'en profite pour ajouter aussi un autre commentaire : en général, je loggue (surtout pour débugguer) à l'entrée et à la sortie d'une fonction. Là, vous ne logguez qu'à la sortie, donc difficile de bien savoir où on est lors d'un bug.
PS : il existe des modules de logging tout faits en python, mais ça peut être un point abordé plus tard.
forjinrange(len(history)):if(message["email"]inhistory[j]):ifhistory[j][2]=="no":# Question and then customer_idquestions_2=eval(history[j][3].replace("$",","))iforder_info!={}:response,answer_id=detect_response(shop,questions_2,order_info,message,history)history[j][2]=order_info["customer_id"]elif"not_customer"inquestionsand"status"inquestions_2:question_2=["status","not_customer"]order_info_2={"status":"none","time":400,"order_time":400}response,answer_id=detect_response(shop,questions_2,order_info_2,message,history)else:response="/ALERT I could not find info on this customer"answer_id="s9"eliforder_info!={}:response,answer_id=detect_response(shop,questions,order_info,message,history)else:response="/ALERT I could not find info on this customer"answer_id="s9"answer_ids=list(eval(history[j][4].replace("$",",")))ifanswer_idnotinanswer_ids:answer_ids.append(answer_id)else:return"/ALERT This customer often asks me the same question","/ALERT"history[j][4]=str(answer_ids)lst=[]#rebuild the file contentforlst3inhistory:lst.append(",".join(lst3))cont="\n".join(lst)file=open("shops/{}/history.csv".format(shop),"w")file.write(cont)file.close()returnresponse,answer_id
peut devenir :
forjinrange(len(history)):if(message["email"]inhistory[j]):returnhandle_email(X,Y,Z)# toujours pareil...
Ce qui donne la fonction :
defbuild_answer(shop,order_info,message,questions,history,is_buffalo):questions_2=["info_not_found","none"]history_line=Noneforjinrange(len(history)):if(message["email"]inhistory[j]):returnhandle_email(X,Y,Z)# toujours pareil...response,answer_id,info=prepare_response(paramA,paramB)# ajuster les params# Build the file contentlog_response(param1,param2)# mettre les paramètres nécessairesreturnresponse,answer_id
Un peu plus clair, non ?
Note : prendre aussi en compte les remarques précédentes
Note 2 : les opérations de log peuvent être factorisées également… toujours même raison.
D'ailleurs, c'est pas ça (trop tard pour éditer), ça serait plutôt :
# Build the file contentanswer_ids=[]answer_ids.append(answer_id)log_response(param1,param2)# mettre les paramètres nécessairesreturnresponse,answer_id
[^] # Re: bah…
Posté par _kaos_ . En réponse au message Gestionnaire de fichier / File manager. Évalué à 4.
Salut,
Tu voudrais pas que les touches
+
et-
soient des raccourcis, aussi, hein ?Voir que
*
plie/déplie tout selon l'état courant ?Ça serait trop facile !
Matricule 23415
[^] # Re: azerty/qwerty
Posté par _kaos_ . En réponse au journal Allez, il fallait bien que ça arrive. Évalué à 7.
Salut,
Moi j'ai ajouté tous les keymaps !
Et effectivement, le mot de passe est devenu rigoureusement simple. Bonus, il n'est dans aucun dictionnaire, garanti.
Pendant le calcul des combinaisons possibles pour trouver le mot de passe final à utiliser, j'ai démontré de mon côté que
P ≈ NP
et chiffré la démonstration avec un fichier daté pour prouver sa précédence.Ce qui est dommage, c'est que j'ai utilisé un ancien mot de passe à ce moment, supprimé depuis puisque devenu inutile…
Matricule 23415
# Pas à pas
Posté par _kaos_ . En réponse au message Mise à jour Ubuntu 16.04 vers 20.04 . Évalué à 3.
Salut,
Peux-tu préciser ? Il y a un message d'erreur par exemple ?
Non, juste de démarrer sur linux et suivre les procédures de mises à jour (voir plus bas).
Non plus, les mises à jour vont conserver le partitionnement¹
C'est assez classique, pas d'inquiétude.
Pour en revenir à la mise à jour, passer de 16.04 à 20.04 d'un coup, c'est peut-être un saut de version trop grand. Comme ce sont deux versions LTS (choix compréhensible si tu en as peu l'usage), je te conseille de passer par la version intermédiaire LTS entre les deux, soit la 18.04, ce qui donne :
Note préalable : Penser à faire une sauvegarde de ses données (windows et linux) avant au cas où, sait-on jamais…
Ça devrait mieux passer.
Si non, il nous faut plus de précisions.
¹: il peut y avoir de "petits" gags, comme une partition
/boot
trop petite, mais c'est rare à prioriMatricule 23415
[^] # Re: 2/3 idées
Posté par _kaos_ . En réponse au message [RESOLU] [NOOB INSIDE] CONCATENER DES FICHIERS. Évalué à 3. Dernière modification le 08 avril 2021 à 06:25.
Salut,
Pas de problème avec un
os.listdir
, on ne liste que les fichiers présents, donc on peut construire le dictionnaire à la volée sansos.exists
ouif
, en n'imposant pas de contraintes de bornes inférieures/supérieures (dans la limite du raisonnable :p). Tout facile sans avoir recours à des méthodes avancées "compliquées".Et en ce qui concerne les débutants, j'éviterai justement de leur parler dès le début de notions avancées. Tu aurais aimé qu'on te parle de
lamdba
s dès ton premier cours d'informatique ? Mais ce n'est que mon avis. ;)PS : note qu'avec ton
glob
plus haut, tu fais exactement ça :pMatricule 23415
[^] # Re: 2/3 idées
Posté par _kaos_ . En réponse au message [RESOLU] [NOOB INSIDE] CONCATENER DES FICHIERS. Évalué à 2. Dernière modification le 07 avril 2021 à 13:42.
Salut,
C'est pas super-complexifier la chose ?
Le dictionnaire peut être construit à la volée, sans nécessité de le maintenir "manuellement", dans une première passe qui "prépare" les listes de numéros dans l'ordre souhaité par année, puis une seconde boucle fait le boulot de concaténation. Pas besoin de
filter
;)Matricule 23415
[^] # Re: Difficulté ?
Posté par _kaos_ . En réponse au message [RESOLU] [NOOB INSIDE] CONCATENER DES FICHIERS. Évalué à 3. Dernière modification le 07 avril 2021 à 07:44.
Salut,
C'est le cas le plus simple.
Vu le code proposé plus haut, le problème est (un peu) pris à l'envers si tu veux tout faire en une passe, car tu ne sauras jamais à l'avance la fin du nom de fichier, donc il faut passer par un fichier temporaire. Sinon, en deux passes sur les noms, ça se fait aussi, et vu la taille des données à stocker (une liste d'entiers), c'est kif-kif, et là, plus besoin du fichier temporaire.
Matricule 23415
# Difficulté ?
Posté par _kaos_ . En réponse au message [RESOLU] [NOOB INSIDE] CONCATENER DES FICHIERS. Évalué à 2.
Salut,
Je ne vois pas où tu bloque, même s'il y a des "trous" ou s'il fallait conserver un ordre.
Un début de code aiderait à mieux comprendre ce qui pose problème.
Que doit retourner :
fic1 fic3 fic4 fic5 fic7 fic9 fic10
?Plutôt :
fic1-10
fic1,3-5,7,9-10
fic1-1,3-5,7-7,9-10
Matricule 23415
[^] # Re: Belle initiative !
Posté par _kaos_ . En réponse au journal Une norme pour les logiciels respectueux de la vie privée ?. Évalué à 2.
Salut,
Se pose aussi le problème de quand. A chaque release majeure ? mineure ? commit ?
Matricule 23415
[^] # Re: Revenons aux rouleaux
Posté par _kaos_ . En réponse au journal De l'affichage des documents. Évalué à 4.
Salut,
Autre avantage : si les pages n'étaient pas numérotées et que par mégarde le document tombait, tout restait dans l'ordre (héritage de mauvaises expériences avec des lots de cartes perforées pas numérotées ?)
Matricule 23415
[^] # Re: concernant le PDF
Posté par _kaos_ . En réponse au journal De l'affichage des documents. Évalué à 2.
Salut,
Et jusqu'à du son en mode "embeded" (pour de la vidéo, j'ai cherché, mais pas longtemps, et pas trouvé ce que je souhaitais) ;)
Matricule 23415
[^] # Re: Premier attachement
Posté par _kaos_ . En réponse au message Problème envoi en html avec logo en entête. Évalué à 2.
J'ai pris un mail en html au pif, il y en a un peu plus :
Je t'ai même laissé un exemple de traceur ;)
Matricule 23415
[^] # Re: Premier attachement
Posté par _kaos_ . En réponse au message Problème envoi en html avec logo en entête. Évalué à 2.
Ah oups, évidemment, avec les balises mangées, je voyais moins bien le html…
Merci pour le formatage ;)
Matricule 23415
# Premier attachement
Posté par _kaos_ . En réponse au message Problème envoi en html avec logo en entête. Évalué à 3.
Salut,
Ton premier attachement est du texte brut, pas du html. Il n'y a donc aucune raison que l'image soit "inline", comme indiqué par le sujet du mail.
Ceci étant, cela n'explique pas le doublon, sauf si gmail, ne voyant pas de html affiche deux fois le corps du message, une fois en texte (donc le texte et une image en bas) et une fois en html (pas de texte puisque pas et html, mais encore une fois une image en bas).
Simple supposition.
Matricule 23415
[^] # Re: Instantané à tout instant est partout
Posté par _kaos_ . En réponse au journal À propos du succès des messageries instantanées.. Évalué à 3. Dernière modification le 01 avril 2021 à 19:11.
Salut,
Une autre fonctionnalité à laquelle j'ai trouvé un intérêt, c'est la possibilité d'envoyer des notifications à date programmée sur un canal donné. Par exemple, tous les lundis matin à 10h50, un petit rappel sur le canal de l'équipe X que la réunion de la semaine commence dans 10 minutes.
Sûr, un mail via cron, ça marche aussi, mais il faut maintenir la liste des destinataires à jour par exemple, et s'il y a des "ponts" entre équipes, ça peut vite devenir lourd. Avec ce genre de messagerie, si une personne de l'équipe Y doit travailler avec l'équipe X, il a juste a rejoindre le canal et hop, magie ! Il est au courant comme tous les autres ;) Et une fois que c'est fait, il peut sortir et ne plus être averti vu que ça ne le concerne plus.
Matricule 23415
[^] # Re: Effet de mode?
Posté par _kaos_ . En réponse au journal À propos du succès des messageries instantanées.. Évalué à 10.
Salut,
Si t'as pas connu caramail, t'as raté ta vie ;)
Matricule 23415
[^] # Re: Passeport sanitaire
Posté par _kaos_ . En réponse à la dépêche Mise en place du port du masque avec QrCode d'identification. Évalué à 2.
Salut,
Aucun problème pour être à 6 en respectant les mesures dans des sanitaires, y'a zoom pour ça !
Matricule 23415
# Bonne optique
Posté par _kaos_ . En réponse au journal Sortie de C++ 2000. Évalué à 2. Dernière modification le 01 avril 2021 à 14:11.
Salut,
C'est bien qu'ils passent au mode Release early, release often. Ça fait un peu d'imprévu.
Matricule 23415
[^] # Re: Ça veut dire quoi ?
Posté par _kaos_ . En réponse au message Python: Return value not found in function. Évalué à 2.
Plutôt pas, j'ai l'impression, sur le coup…
Matricule 23415
[^] # Re: Ça veut dire quoi ?
Posté par _kaos_ . En réponse au message Python: Return value not found in function. Évalué à 2.
Petit complément :
Certes, tu n'as jamais écrit
raise
dans ton programme, mais il est écrit quelque part dans les appels que fait la fonctionwrite
, si ça peut t'aider à comprendre.Matricule 23415
[^] # Re: Ça veut dire quoi ?
Posté par _kaos_ . En réponse au message Python: Return value not found in function. Évalué à 2. Dernière modification le 01 avril 2021 à 12:24.
Salut,
Malheureusement, pas vraiment :) Ce qui n'est pas grave en soi, il faut bien commencer par apprendre un jour avant d'être à l'aise.
Pour lever une exception à un endroit donné, c'est le mot clef
raise
suivi de l'exception à lever qu'il faut utiliser. Ici, le bloctry
…except
… bloque la propagation à un niveau supérieur de l'exceptionIOError
(et uniquement les exceptions de ce type, toutes les autres continuent de remonter la pile d'exécution). Je ne comprend pas l'intérêt duelse
.PS : je ne suis pas là pour dire ce qui est "bon" ou "mauvais" ;) juste conseiller ;)
Matricule 23415
[^] # Re: Ça veut dire quoi ?
Posté par _kaos_ . En réponse au message Python: Return value not found in function. Évalué à 2. Dernière modification le 01 avril 2021 à 07:10.
Salut,
Lorsqu'il y a un début de code, même non fonctionnel, que les remarques semblent être prises en compte, ça motive pour aider ;)
Revenons-en à la question : lever une exception et un retour de fonction sont deux choses très différentes… voir ici pour la notion d'exception. Un retour "remonte" à la fonction appelante, une levée d'exception "remonte" la pile d'appel jusqu'à arriver à un traitement (bloc
try
…except
…) ou interrompt le programme s'il n'y a pas de traitement.J'en profite pour ajouter aussi un autre commentaire : en général, je loggue (surtout pour débugguer) à l'entrée et à la sortie d'une fonction. Là, vous ne logguez qu'à la sortie, donc difficile de bien savoir où on est lors d'un bug.
PS : il existe des modules de logging tout faits en python, mais ça peut être un point abordé plus tard.
Matricule 23415
[^] # Re: Moult remarques
Posté par _kaos_ . En réponse au message Python: Return value not found in function. Évalué à 3. Dernière modification le 31 mars 2021 à 07:53.
Et encore même chose pour plus haut, je pense :
peut devenir :
Ce qui donne la fonction :
Un peu plus clair, non ?
Note : prendre aussi en compte les remarques précédentes
Note 2 : les opérations de log peuvent être factorisées également… toujours même raison.
Matricule 23415
[^] # Re: Moult remarques
Posté par _kaos_ . En réponse au message Python: Return value not found in function. Évalué à 3.
Et idem pour le code au dessus :
peut devenir simplement :
Matricule 23415
[^] # Re: Moult remarques
Posté par _kaos_ . En réponse au message Python: Return value not found in function. Évalué à 3.
Salut, moi,
D'ailleurs, c'est pas ça (trop tard pour éditer), ça serait plutôt :
D'où l'importance de ne pas faire de pavés…
Matricule 23415
[^] # Re: Moult remarques
Posté par _kaos_ . En réponse au message Python: Return value not found in function. Évalué à 2. Dernière modification le 31 mars 2021 à 07:27.
Salut,
Et on retrouve la tendance à faire de longs pavés ;)
Par exemple, tout ce qui est en dessous de :
peut être isolé dans une fonction il me semble pour avoir :
Matricule 23415