Planet Libre

dada : Fairphone 2 : corriger le GPS de votre téléphone




Alors là, je viens de faire tomber le dernier blocage frustrant de mon Fairphone 2 : le GPS qui ne tournait pas. J'étais devenu fort en lecture de cartes sur OsmAnd~ mais je saturais aussi un peu. C'est marrant de faire le malin en sachant lire un carte dans tous les sens en 2017, mais bon, voilà, hein.
J'avais déjà passé trop de temps sur les moteurs de recherche et le forum Fairphone mais l'autre soir, dans une ultime tentative, j'ai débloqué ma situation ! Voici comment j'ai fait :

En préambule, notez que je me sers de l'Open Source OS du Fairphone, livrée sans les Google Apps. Si vous utilisez la version classique de l'OS, ce tutoriel n'est sans doute pas pour vous. Ah, et j'ai un Fairphone 2, pas le 1.
Et aussi, manipuler votre téléphone est à vos risques et périls ! Ne faites pas n'importe quoi ! Et puis, le GPS ne tourne toujours pas forcément très bien. Si je trouve des astuces pour l'améliorer, ou si vous en avez : je mettrais à jour ce billet.
Passer le téléphone en root
Pas besoin de brancher le téléphone au PC pour lancer le mode debug en ligne de commande depuis un terminal sous GNU/Linux... Pour passer root, il vous suffit de connaître le bon chemin et de taper plusieurs fois sur avec votre doigts sur Numéro de build.
Paramètres -> À propos du téléphone -> Numéro de build Tapotez votre écran au niveau de la case plusieurs fois et vous deviendrez le hacker de votre FP2.
Passer Amaze en root
Maintenant, comme il va falloir modifier la configuration du GPS qui se trouve être un simple fichier texte dans les méandres de votre appareil, autorisez l'application Amaze à faire n'importe quoi.
Amaze -> Paramètres -> Divers Activez l'option "Gestionnaire Root" et le tour est joué : vous pouvez maintenant aller trifouiller dans la " / Racine" de votre Android.
Modifier le fichier gps.conf
Ce filou se trouve dans /system/etc/gps.conf.

Là, vous trouverez une ligne à commenter (en plaçant un # devant) une autre à dé-commenter et un 0 à remplacer par un 1 :
NTP_SERVER=time.gpsonextra.net
# NTP_SERVER=europe.pool.ntp.org devient :
# NTP_SERVER=time.gpsonextra.net
NTP_SERVER=europe.pool.ntp.org Ensuite :
INTERMEDIATE_POS=0devient :
INTERMEDIATE_POS=1Vous pouvez enregistrer les modifications et redémarrer votre téléphone pour qu'elles soient prises en compte.

Un fois relancé, je vous invite à tester (depuis un endroit où vous pouvez capter du GPS !) votre nouvelle configuration avec l'application SatStat, disponible depuis F-Droid. Si tout va bien, vous devriez voir le nombre de satellites auxquels votre téléphone est connecté !

Maintenant, profitez enfin de OsmAnd~ et oubliez l'insupportable "Position Inconnue" quand vous voulez vous géolocaliser sur la carte. Bonheur.
 

Gravatar de dada
Original post of dada.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #09

Pour la 9ème semaine de 2017, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Renault : Nettoyage de printemps de la documentation francophone

Pour l'arrivée du printemps, le site fedora-fr.org se modernise un peu (suppressions de pages inutiles / obsolètes, passage en HTTPS, remplacement de Google Analytics par Piwik). La documentation francophone aussi. Depuis quelques années elle n'était plus suffisamment maintenue et nous souhaitons y remédier.

Pour cela quelques rédacteurs se mettent au travail pour retravailler le Wiki, taguer les pages obsolètes comme telles, réécrire les articles ayant besoin d'un rafraichissement ou même écrire du nouveau contenu pour nous adapter aux besoins des utilisateurs d'aujourd'hui. L'objectif est de retrouver un wiki plutôt à jour et de qualité pour aider les utilisateurs de Fedora au quotidien.

Vous êtes bien sûr invités à contribuer à cet effort collectif, il y a toujours besoin d'aide que ce soit pour la réalisation des articles, la relecture, ou même des tâches annexes (comme tagguer les pages correctement). Si vous êtes intéressés, vous pouvez commencer par suivre la page de présentation pour contribuer.

Si vous avez des idées de contenus à ajouter pour répondre aux besoins d'aujourd'hui (par exemple une page sur Wayland), merci de donner votre avis sur le forum.

En espérant que cette initiative vous sera utile et vous plaira. :-)

Gravatar de Renault
Original post of Renault.Votez pour ce billet sur Planet Libre.

Articles similaires

Benoît Boudaud : Python: Les tuples

Pour une lecture plus agréable (page plus large), je vous suggère de cliquer sur ce lien et ainsi de lire ce chapitre dans la rubrique consacrée au langage Python.

Un tuple est un ensemble d’éléments comparable aux listes mais qui, une fois déclaré, ne peut plus être modifié. Il s’agit donc d’une séquence immuable d’objets indicés qui peuvent être des nombres entiers ou décimaux, des chaînes de caractères, des listes, des tuples etc…

tuple_tulipesTuple de tulipesSyntaxe et déclaration

D’un point de vue syntaxique, un tuple est un ensemble d’éléments séparés par des virgules. Cet ensemble d’éléments est entouré de parenthèses mais ce n’est pas une obligation. Cela permet toutefois d’améliorer la lisibilité du code.

Déclarons un tuple :

tuple_1 = (8, "Solange", 5.3)

J’aurais très bien pu écrire :

tuple_1 = 8, "Solange", 5.3

Cela revient au même sauf que c’est moins lisible.

print(type(tuple_1))

Sans le savoir, nous avons déjà rencontré des tuples, notamment lorsque nous avons fait des affectations multiples :

a, b = 5, 6

Cette instruction d’affectation correspond à :

(a, b) = (5, 6)

Si nous souhaitons déclarer un tuple ne contenant qu’une seule valeur, il faut absolument que cette dernière soit suivie d’une virgule. En outre, il est vivement conseillé de l’inclure entre parenthèses.

c = (9,) print(type(c))

Si nous oublions la virgule (et malgré la présence de parenthèses), le type de la variable ne sera pas un tuple :

c = (9) print(type(c))

Utilité d’un tuple par rapport à une liste Comme nous l’avons vu plus haut, il permet de faire des affectations multiples. a, b = 5, 6 Le tuple permet également de renvoyer plusieurs valeurs lors d’un appel de fonction. def information_personne(prenom, nom, age) : "Traitement des informations transmises" prenom = prenom.capitalize() # Première lettre en majuscule. nom = nom.upper() # remplace toutes les minuscules en majuscules age = int(age) return prenom, nom, age # Tuple sans parenthèses p = input("Entrez votre prénom: ") n = input("Entrez votre nom: ") a = input("Entrez votre âge: ") prenom, nom, age = information_personne(p, n, a) # Affectation multiple print("Prénom:", prenom + '\\n' + "Nom:", nom + '\\n' + "Âge:", age)

Entrez votre prénom: alphonsine
Entrez votre nom: Chafouin
Entrez votre âge: 92

Résultat:

Prénom: Alphonsine
Nom: CHAFOUIN
Âge: 92

Un tuple est « protégé en écriture ».

Vous allez me dire que dans le code ci-dessus, nous pouvons obtenir le même résultat en renvoyant une liste (return [prenom, nom, age]). Mais l’avantage d’un tuple, c’est qu’il s’agit d’une séquence non modifiable (immuable) donc protégée en écriture. Nous sommes sûrs que les données transmises par la fonction input() ne seront pas modifiées en cours d’exécution par un autre programme. Dans le code ci-dessus, je n’ai aucun moyen de modifier les informations transmises.

Par contre, dans le code ci-dessous où je renvoie une liste, je peux modifier les données transmises et rajeunir Mamie Alphonsine!

def information_personne(prenom, nom, age) : "Traitement des informations transmises" prenom = prenom.capitalize() # Première lettre en majuscule. nom = nom.upper() # remplace toutes les minuscules en majuscules age = int(age) return [prenom, nom, age] # liste p = input("Entrez votre prénom: ") n = input("Entrez votre nom: ") a = input("Entrez votre âge: ") identification = information_personne(p, n, a) #Liste identification[2] = '45' # Je modifie l'âge print("Prénom:", identification[0] + '\\n' + "Nom:", identification[1] + '\\n' + "Âge:", identification[2])

Entrez votre prénom: alphonsine
Entrez votre nom: Chafouin
Entrez votre âge: 92

Prénom: Alphonsine
Nom: CHAFOUIN
Âge: 45

Un tuple est moins gourmand en ressources système qu’une liste.

Il a besoin de moins de mémoire et il s’exécute plus rapidement.

Opérations sur les tuples Il n’existe pas de méthodes associées aux tuples

Les tuples sont des séquences non modifiables donc il n’est pas possible d’utiliser les méthodes remove()  ou append() par exemple.

Il n’est pas possible également d’utiliser l’opérateur [] pour insérer ou remplacer un élément :

tuple_1 = (5, 2, 25, 56) tuple_1[2] = 23 print(tuple_1)

TypeError: ‘tuple’ object does not support item assignment.

L’instruction in

Mais il est possible d’utiliser l’instruction in pour faire un test d’appartenance

tuple_1 = (5, 2, 25, 56) print(2 in tuple_1)

Résultat: True

La fonction intégrée len()

Il est également possible d’utiliser la fonction intégrée len() pour déterminer la longueur d’un tuple.

tuple_1 = (5, 2, 25, 56) print(len(tuple_1))

Résultat : 4

La boucle for et la compréhension de liste

Tout comme les chaînes de caractères ou les listes, les tuples peuvent être parcourus par une boucle for ou une compréhension de liste. Dans ce dernier cas, le résultat obtenu est toujours une liste.

Concaténation et multiplication

Nous pouvons créer un nouveau tuple par concaténation ou par multiplication

tuple_1 = (5, 2, 25, 56) tuple_2 = ("Jacky", "Hervé") tuple_3 = tuple_1 + tuple_2 print(tuple_3)

Résultat: (5, 2, 25, 56, « Jacky », « Hervé »)

tuple_prenoms = ("Jacky", "Hervé") tuple_prenoms = tuple_prenoms * 3 print(tuple_prenoms)

Résultat: (‘Jacky’, ‘Hervé’, ‘Jacky’, ‘Hervé’, ‘Jacky’, ‘Hervé’)

Dans ce dernier exemple, certains vont me dire: « Mais Ordinosor! Tu nous a dit qu’un tuple n’était pas modifiable et tu viens juste de modifier tuple_prenoms! »

Faux! Je n’ai appliqué aucune méthode de modification sur tuple_prenoms. J’ai seulement écrasé la valeur contenue dans la variable qui porte le nom de tuple_prenoms en lui affectant une nouvelle valeur.

Conclusion

Les tuples sont des séquences non modifiables qui s’avèrent bien utiles pour protéger en écriture des données transmises. En outre, ils sont moins gourmands en ressource système et sont traités plus rapidement.

Puisqu’il est immuable, il est possible d’utiliser un tuple comme clé de dictionnaire mais à la seule condition que le tuple ne contienne que des éléments non modifiables! Du reste, ce sera l’objet du prochain chapitre.


Gravatar de Benoît Boudaud
Original post of Benoît Boudaud.Votez pour ce billet sur Planet Libre.

Articles similaires

Dimitri Robert : Conférence : les alternatives à Windows

Le 4 mars 2017 j’anime une conférence intitulée les alternatives à Windows à la médiathèque du Véron à Avoine. Voici un résumé avec les liens vers les sujets abordés.

Lien court vers cet article : https://frama.link/4marsalternatives

Cet article sera complété par l’enregistrement audio de la conférence (si la technique le veut bien).

État des lieux

Windows est le système d’exploitation le plus utilisé sur ordinateur personnel (plus de 91 %) alors que sur les appareils dit « mobiles » (téléphones et tablettes) c’est Google Android qui domine (environ 63 %) – source ZDNet.

Une telle hégémonie sur PC (le terme désigne ici l’ordinateur personnel, ce qui inclut ceux fabriqués par Apple), même si elle est loin d’être nouvelle, pose questions : pourquoi, du point de vue de nombre d’utilisateurs, n’existe-t-il qu’un seul système (même si Apple et Mac OS X disposent d’une certaine visibilité) ? Existe-t-il des alternatives ?

Dans les descriptions des alternatives j’évoquerai bien sûr le cas Android mais m’attarderai peu sur les mobiles, le choix de l’utilisateur étant quasiment inexistant (les matériels sont verrouillés pour éviter de changer de système, ils sont également très divers, contrairement aux PC).

Alternatives et libertés

Windows n’est donc pas le seul système existant, mais sur quels critères choisir une alternative ? Peut-on mettre sur le même plan Mac OS X et Linux ?

Le critère de la liberté me semble fondamental. Liberté de logiciel mais encore plus celle de l’utilisateur. En effet, on peut priver de liberté un utilisateur avec des logiciels libres, Android en est la preuve.

Logiciel libre

Un programme est un logiciel libre si vous, en tant qu’utilisateur de ce programme, avez les quatre libertés essentielles :

  • la liberté d’exécuter le programme comme vous voulez, pour n’importe quel usage (liberté 0) ;
  • la liberté d’étudier le fonctionnement du programme, et de le modifier pour qu’il effectue vos tâches informatiques comme vous le souhaitez (liberté 1) ; l’accès au code source est une condition nécessaire ;
  • la liberté de redistribuer des copies, donc d’aider votre voisin (liberté 2) ;
  • la liberté de distribuer aux autres des copies de vos versions modifiées (liberté 3) ; en faisant cela, vous donnez à toute la communauté une possibilité de profiter de vos changements ; l’accès au code source est une condition nécessaire.

Android est un système basé sur le noyau Linux (un logiciel libre) mais comporte des briques (des éléments) propriétaires. Il ne peut donc être considéré comme un logiciel libre.

Utilisateur libre

Un utilisateur est libre s’il peut utiliser un logiciel de manière anonyme ou s’il a l’entière maîtrise des données personnelles qu’il confie à ce logiciel. Un utilisateur est libre si sa vie privée est préservée.

Cela peut paraître anachronique, mais un ordinateur personnel ou un appareil mobile doit pouvoir fonctionner sans être connecté à quelque réseau que ce soit.

Or, on constate, de plus en plus, des systèmes qui, lors de l’installation ou du premier démarrage, demandent une adresse e-mail ou de créer un compte sur le serveur de l’éditeur du logiciel. C’est le cas de Windows et d’Android (à ma décharge, je n’ai pas testé cela sur un Mac). Même s’il n’est pas obligatoire de donner ce genre d’informations, le système vous incite à croire le contraire.

De plus, sur un système comme Android il est très difficile de se passer de Google Play pour installer des applications : la plupart des éditeurs d’applications ne proposent leur produits que via Google Play (ou l’App Store d’Apple) alors que ceux-ci pourraient être téléchargés directement depuis leurs sites respectifs. Or, utiliser Google Play nécessite d’avoir un compte Google, donc d’accepter les conditions d’utilisations.

La mainmise de Google sur nos vies

Google est avant tout un moteur de recherche extrêmement performant qui a révolutionner la recherche sur le Web au début du siècle. Du coup, il est aujourd’hui utilisé par plus de 90 % des internautes en Europe (moins aux États-Unis ou Microsoft Bing a plus de succès ainsi qu’en Russie et en Chine ou règnent les moteurs de recherches approuvés par l’État).

Google est donc en situation de monopole sur la recherche sur le Web : cela conduit à penser que Google peut choisir le Web auquel il donne accès et nous cacher les sites qui lui déplaisent.

Des services attractifs et bien pensés

Google est aussi un fournisseur de courrier électronique (Gmail). Faîtes le compte autour de vous des personnes qui n’ont pas leur courrier chez Gmail, vous risquez d’être surpris…

Youtube est également un service de Google très populaire et nettement plus utilisé et consulté que Dailymotion ou Vimeo. Puis, il y les services plutôt orientés entreprises comme Google Drive, Google Documents, Google Agenda, dont il est difficile de se passer une fois que l’on y a goûté et confié une masse non négligeable de données.

Mais une traçabilité bien pensée

Petit extrait des règles de confidentialité : « Nos systèmes automatisés analysent vos contenus (y compris les e-mails) afin de vous proposer des fonctionnalités pertinentes sur les produits, telles que des résultats de recherche personnalisés, des publicités sur mesure et la détection des spams et des logiciels malveillants. Cette analyse a lieu lors de l’envoi, de la réception et du stockage des contenus. »

Donc, résumons, si vous avez un téléphone Android, que vous avez un compte Google, que la connexion 3G et le GPS sont activés en permanence (votre batterie se vide donc très vite), Google a donc tout loisir de croiser toutes les informations que vous lui donnez directement ou indirectement (vos déplacements, les sites et vidéos que vous consultez, les mails que vous recevez, etc.) À propos de déplacement, consultez votre historique.

Vous souhaitez quitter Google ? C’est possible mais la route est longue. Commencez par regarder l’initiative Dégooglisons Internet de Framasoft. Vous pouvez aussi changer de moteur de recherche ou encore vous tourner vers un fournisseur de courrier électronique plus éthique comme Newmanity.

Survivre avec Android

Tout d’abord, si vous avez un téléphone Android, vous avez intérêt à faire le ménage dans les applications installées et en fonctionnement. Voici un article qui vous explique comment arrêter les applications tournant en arrière plan sur Android et ainsi éviter des fuites de données et faire durer votre batterie.

Si vous voulez vous passer d’un compte Google et que vous voulez malgré tout installer des applications (fichiers au format APK), vous avez plusieurs possibilités :

  • les télécharger sur votre PC directement depuis un site qui les propose en téléchargement direct comme https://apk-dl.com/, puis copiez-les sur votre téléphone via la connexion USB ou BlueTooth et enfin, utilisez le gestionnaire de fichiers d’Android pour les installer ; inconvénient, cela ne gère pas les mises à jour ;
  • installer F-Droid, une application qui gère un catalogue d’applications libres et accessibles sans authentification ; les mises à jour sont gérées mais vous n’aurez pas les mêmes applications que via Google Play
Et Linux dans tout ça !

On désigne généralement par Linux une famille de système d’exploitation, initialement pour PC (même si, par exemple, Android est basé sur Linux). Linux n’est en réalité que le noyau, un petit logiciel qui fait l’interface entre le matériel et le reste du système (signaux d’entrée comme le clavier, la souris, la caméra et de sortie comme le son, l’image, l’impression, etc.)

En réalité il convient de parler de distributions Linux qui constituent un ensemble utilisable (noyau, système et applications pour travailler, jouer, flâner, etc.). Il existe une multitude de distributions : des généralistes et des plus spécifiques.

Bases d’une distribution

Une distribution est donc un ensemble comprenant le noyau Linux, le système GNU et un gestionnaire d’installation de logiciels. Cette dernière partie est finalement la plus novatrice : depuis une unique application vous disposez d’un catalogue immense de logiciels (libres mais pas que) que vous pouvez installer d’un clic. Plus besoin d’aller sur le site de Firefox pour installer votre navigateur favori. En plus, les mises à jour sont gérées et Linux vous demande de les effectuer quand vous le souhaitez.

La plupart des distributions existent en version live : à partir d’une image ISO (un gros fichier qui correspond à la copie conforme d’un DVD) que vous pouvez graver sur un DVD ou flasher sur une clé USB vous pouvez démarrer un système Linux sur un ordinateur sans l’installer. Idéal pour essayer, vous faire une idée sans risque pour votre Windows ou votre Mac OS X.

Avantages

Le principal avantage est l’absence de contrainte technique sur les distributions libres : pas de verrou qui vous empêcherait d’effectuer des opérations interdites par l’éditeur.

Vous disposez toujours de logiciels mis à jour (important lorsque des failles de sécurité sont corrigées).

Si vous en avez les capacités, vous pouvez vous débrouiller tout seul pour solutionner les problèmes. Oui, vous rencontrerez des problèmes même avec Linux, c’est inhérent en informatique, mais vous avez la possibilité de les corriger. Sous Windows ou Mac OS X vous pourrez vous heurter à des barrières techniques ou chercher longtemps un paramètre qui devrait pourtant être facile d’accès. Parce que dans la recherche de simplicité et de convivialité, les éditeurs de logiciels propriétaires estiment que vous ne devez pas fourrer votre nez dans les coulisses.

Les distributions comme la plupart des logiciels d’usage courants sont traduits dans un nombre de langues qui n’a pas d’égal dans le monde propriétaire. Vous pourrez trouver des distributions proposant le Breton ou le Klingon.

Vous avez accès à un catalogue de logiciels qui couvre à peu près tous les besoins : dans mon cas, je dispose de logiciels professionnels pour retoucher les photos (GIMP), mettre en page des documents qui sont correctement imprimés chez un imprimeur (Scribus), monter des vidéos qui passent sans problème dans un cinéma (Kdenlive). La liste n’est pas exhaustive. Voir mes réalisations d’impression et de montage vidéo.

Inconvénients

Certains usage spécifiques sont mal couverts, voire pas du tout. Si vous êtes joueur et amateur des derniers jeux à la mode, il vaut mieux rester sous Windows (ou investir dans une console de jeux). Cependant, même s’ils sont peu nombreux, il existe des jeux de qualité sous Linux (certains libres, d’autres pas).

La comptabilité est une activité mal aimée, c’est aussi le cas sous Linux. Mais la tendance se dirige vers les logiciels Web tels que Odoo, donc accessibles par un navigateur Web (Firefox).

Si vous utilisez un logiciel métier, il y a peu de chance qu’il soit multi-plateforme (c’est-à-dire disponible sous Linux et Mac OS X en plus de Windows), c’est donc rédhibitoire, même si là aussi la tendance est aussi aux logiciels Web.

Si vous êtes habitué à utiliser certains logiciels propriétaires qui demandent un temps d’apprentissage conséquent (au hasard, la suite Adobe), il vous faudra pas mal d’efforts et surtout de temps pour basculer sur les équivalents libres. Tout dépend de votre volonté et votre temps disponible.

Enfin, gros inconvénient, Microsoft et les constructeurs de PC se sont entendus pour rendre difficile l’installation de systèmes alternatifs sur les matériels. Il faudra parfois batailler dur pour simplement démarrer depuis une clé USB. Mais cela reste possible, je n’ai essuyé aucun échec à ce jour, même si parfois j’ai eu envie de renoncer.

Généralistes

Les distributions généraliste sont celles qui proposent par défaut des logiciels d’usage très courant (suite bureautique LibreOffice, navigateur Firefox) et une interface assez classique. La plus connue reste Ubuntu même si LinuxMint se révèle la plus utilisée.

Si Ubuntu a grandement contribué à populariser Linux (sous l’impulsion du milliardaire Mark Shuttleworth) son virage « commercial » lui a sans doute fait perdre sa première place au rang des distributions les plus utilisées. En effet, suite à des accords entre Canonical (éditeur d’Ubuntu, dont le siège est situé sur l’île de Man, un paradis fiscal) et Amazon, vous serez pollué par des publicités dans votre usage quotidien. Certes, il est possible de les retirer, mais autant utiliser LinuxMint, qui n’est autre qu’une Ubuntu personnalisée et nettoyée.

Production multimédia

Sujet qui me tient à cœur, la production multimédia dispose de plusieurs distributions dédiées. Par exemple, Ubuntu Studio et AV Linux.

Elles vous proposent par défaut un certains nombre de logiciels pour le travail du son et de l’image (fixe et animée). Une fois installée, vous disposez de tous les outils nécessaires à vos productions.

École

L’école est un milieu où malheureusement le monopole de Microsoft s’exprime pleinement, essentiellement par manque de volonté politique au niveau du ministère de l’Éducation nationale.

AbulÉdu est une solution libre proposant un ensemble de logiciels pédagogiques avec des profils adaptés à l’âge des enfants. Début 2000 AbulÉdu fut développée au sein de l’association Abul à Bordeaux. Elle fut ensuite pérennisée par l’entreprise Ryxéo jusqu’en mai 2016, date à laquelle la société a déposé le bilan, faute d’un modèle économique, pourtant bon, qui a souffert du manque de soutien de l’Éducation nationale.

AbulÉdu existe toujours au sein de l’Abul (qui ne l’avait jamais vraiment quittée).

Protection de la vie privée

En utilisant une distribution Linux vous avez la garantie de ne pas être traqué par des mouchards (contrairement aux systèmes de Microsoft, Google et Apple). Cependant, vos communications ne sont pas protégées et sont lisibles par tous les intermédiaires d’Internet entre vous et votre destinataire (mail ou Web).

Tails est une distribution orientée protection de la vie privée. Elle vous fournit des outils pour être le plus anonyme possible. Elle est utilisé par Edward Snowden, notamment lorsqu’il a communiqué avec des journalistes pour transmettre ses révélations sur les programmes de surveillance de la population par plusieurs agences de renseignements (NSA, GCHQ, etc.) Lire dans le Monde : Tails, l’outil détesté par la NSA, qui veut démocratiser l’anonymat en ligne.

Cet article Conférence : les alternatives à Windows est publié sous licence CC By-SA 4.0 par Dimitri Robert sur Formation logiciel libre - Reprenez le contrôle de votre informatique !.

Gravatar de Dimitri Robert
Original post of Dimitri Robert.Votez pour ce billet sur Planet Libre.

Articles similaires

Thuban : Wallabag v2 sur OpenBSD

J'ai réussi à configurer wallabag V2 sur OpenBSD. Ça marche très bien, il fallait seulement lire la documentation donnée. Oui, je l'avoue, j'avais lu à l'arrache la première fois.
Voici donc un petit compte-rendu de la procédure à suivre. Bien entendu, cette partie sera ajoutée dans la prochaine version du guide sur l'auto-hébergement.

Wallabag permet de sauvegarder des pages web pour les
lire plus tard. On le décrit comme une application de "read-it-later". Voici comment l'installer.

On récupère wallabag dans le dossier /tmp :

$ cd /tmp $ ftp https://wllbg.org/latest-v2-package && tar xvzf latest-v2-package

On installe wallabag dans /var/www/htdocs :

# mv /tmp/release* /var/www/htdocs/wallabag # chown -R www:daemon /var/www/htdocs/wallabag

On peut désormais éditer le fichier /etc/httpd.conf afin d'ajouter une
section pour wallabag :

server "bag.exemple.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" } server "bag.exemple.net" { listen on * tls port 443 root "/htdocs/wallabag/web" directory index app.php hsts tls { certificate "/etc/ssl/acme/votredomaine-fullchain.com.pem" key "/etc/ssl/acme/private/votredomaine-privkey.com.pem" } # on bloque tous les scripts php sauf celui utile location "/*.php" { block } # on reformate l'URL si besoin location match "^/[^(app.php)]/(.*)$" { block return 301 "https://$SERVER_NAME/app.php/%1" } location "/" { block return 301 "https://$SERVER_NAME/app.php/" } # On sert les pages location "/app.php/*" { fastcgi socket "/run/php-fpm.sock" } }

Il ne vous reste plus qu'à relancer httpd avec rcctl reload httpd puis à aller sur votre site. Les identifiants par défaut sont wallabag/wallabag. Créez un nouveau compte ou modifiez ce dernier pour terminer l'installation.

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Articles similaires

System Linux : Convertir un fichier pfx en crt et key

openssl.png

Convertir c'est bien pendant le Carême...

Extraire la clef :

openssl pkcs12 -in ''votre.pfx'' -nocerts -out ''votre.key''

Extraire le certificat :

openssl pkcs12 -in ''votre.pfx'' -clcerts -nokeys -out ''votre.crt''

Gravatar de System Linux
Original post of System Linux.Votez pour ce billet sur Planet Libre.

Articles similaires

blog-libre : Mémo Parameter Expansion

Dernière mise à jour : 03/03/2017

Parameter Expansion est un ensemble d’opérations intégré à Bash et ksh, il peut parfois avantageusement remplacer l’utilisation de cut/sed/awk (mais il ne remplace pas toutes les possibilités que ces commandes offrent) :

  • C’est intégré au shell donc plus rapide et ne nécessitant pas de commandes externes
  • Cela va éviter la création d’un sous-processus (subshell) déclenché par la commande cut/sed/awk que vous allez utiliser avec bien souvent un (ou plusieurs) pipe (an extra, and expensive, fork operation)
  • Personnellement je trouve ça plus simple et plus lisible que des lignes de commande avec cut/sed/awk

J’ai fait certains choix pour ce mémo :

  • J’ai privilégié des exemples nombreux et parlants afin de faciliter la comparaison entre chaque exemple et la compréhension. La première ligne de chaque exemple peut directement être collée dans un terminal, je vous encourage à le faire et ainsi à effectuer de nombreux tests. Je comptais tout expliquer mais je me suis finalement ravisé, on ne peut pas tout simplifier/expliquer, il vaut parfois mieux essayer de comprendre par soi-même
  • Ce mémo est tourné vers la pratique, je ne m’étends pas dans les explications de chaque cas, les règles précises du Parameter Expansion doivent être lues. Si vous avez des questions/remarques, merci d’utiliser les commentaires ou le formulaire de contact
  • J’ai laissé les noms des opérations en Anglais car la littérature sur le sujet est essentiellement en Anglais
  • Vous pouvez évidemment remplacer la commande echo par n’importe quelle autre commande (cp, rm, cd, chmod, mpv, etc.), j’ai choisi la commande echo pour illustrer le résultat

Les meilleures ressources sur le sujet :
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
http://wiki.bash-hackers.org/syntax/pe
http://mywiki.wooledge.org/BashFAQ/073

String length

Afficher la longueur de la chaîne de caractères contenue dans la variable (#)

mavariable="Qu'il est beau mon mémo ho ho ho !"; echo ${#mavariable} 34 (la longueur en nombre de caractères contenue dans mavariable, les espaces sont comptés)

Search and replace

Remplacer la première occurence de firefox par chromium-browser (/firefox/chromium-browser)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable/firefox/chromium-browser} /usr/lib/chromium-browser/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Remplacer toutes les occurences de firefox par chromium-browser (//firefox/chromium-browser)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable//firefox/chromium-browser} /usr/lib/chromium-browser/chromium-browser https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Substring removal

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à ; (#*;)

mavariable="Augier:Cascador/Laurent;Damien;alter A1"; echo ${mavariable#*;} Damien;alter A1

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à ; (##*;)

mavariable="Augier:Cascador/Laurent;Damien;alter A1"; echo ${mavariable##*;} alter A1

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à : (%:*)

mavariable="Augier:Cascador/Laurent;Damien;alter A1"; echo ${mavariable%:*} Augier

Supprimer la chaîne de caractères la plus longue possible en partant de la fin jusqu’à ; (%%;*)

mavariable="Augier:Cascador/Laurent;Damien;alter A1"; echo ${mavariable%%;*} Augier:Cascador/Laurent

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à (espace) (% *)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable% *} /usr/lib/firefox/firefox

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à (espace) (#* )

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable#* } https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à / (##*/)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable##*/} Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à // (#*//)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable#*//} www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à bash (%bash*)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable%bash*} /usr/lib/firefox/firefox https://www.gnu.org/software/

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à manual (#*manual)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable#*manual} /html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus courte possible en partant du début jusqu’à firefox (#*firefox)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable#*firefox} /firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus longue possible en partant du début jusqu’à firefox (##*firefox)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable##*firefox} https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Supprimer la chaîne de caractères la plus courte possible en partant de la fin jusqu’à firefox (%firefox*)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable%firefox*} /usr/lib/firefox/

Supprimer la chaîne de caractères la plus longue possible en partant de la fin jusqu’à firefox (%%firefox*)

mavariable="/usr/lib/firefox/firefox https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html"; echo ${mavariable%%firefox*} /usr/lib/

Extract parts of a filename (substring removal)

Extraire uniquement le nom du fichier sans l’extension (%.*)

mavariable="bash_hackers.txt"; echo ${mavariable%.*} bash_hackers

Extraire uniquement l’extension du fichier (##*.)

mavariable="bash_hackers.txt"; echo ${mavariable##*.} txt

Extraire uniquement le chemin du fichier (%/*)

mavariable="/home/babar/Blog/bash_hackers.txt"; echo ${mavariable%/*} /home/babar/Blog

Extraire uniquement le nom du fichier (##*/)

mavariable="/home/babar/Blog/bash_hackers.txt"; echo ${mavariable##*/} bash_hackers.txt

Case modification

Convertir le premier caractère en majuscule (^)

mavariable="tintouli, carl et cloug sont gentils"; echo ${mavariable^} Tintouli, carl et cloug sont gentils

Convertir tous les caractères en majuscule (^^)

mavariable="Tintouli, carl et cloug sont gentils"; echo ${mavariable^^} TINTOULI, CARL ET CLOUG SONT GENTILS

Convertir le premier caractère en minuscule (,)

mavariable="TINTOULI, CARL ET CLOUG SONT GENTILS"; echo ${mavariable,} tINTOULI, CARL ET CLOUG SONT GENTILS

Convertir tous les caractères en minuscule (,,)

mavariable="tINTOULI, CARL ET CLOUG SONT GENTILS"; echo ${mavariable,,} tintouli, carl et cloug sont gentils

Inverser la casse du premier caractère (~)

mavariable="Tintouli, Carl et Cloug sont gentils"; echo ${mavariable~} tintouli, Carl et Cloug sont gentils

Inverser la casse de tous les caractères (~~)

mavariable="tintouli, Carl et Cloug sont gentils"; echo ${mavariable~~} TINTOULI, cARL ET cLOUG SONT GENTILS

Substring expansion

Se positionner au 5ème caractère puis récupérer les caractères jusqu’à la fin (:5)

mavariable="abcdef.wxyz"; echo ${mavariable:5} f.wxyz

Se positionner au début puis récupérer 3 caractères (:0:3)

mavariable="abcdef.wxyz"; echo ${mavariable:0:3} abc

Se positionner au 2ème caractère puis récupérer 4 caractères (:2:4)

mavariable="abcdef.wxyz"; echo ${mavariable:2:4} cdef

Récupérer 3 caractères en partant de la fin (: -3)

mavariable="abcdef.wxyz"; echo ${mavariable: -3} xyz

Se positionner au 6ème caractère puis récupérer les caractères jusqu’au 2ème caractère en partant de la fin (:6:-2)

mavariable="abcdef.wxyz"; echo ${mavariable:6:-2} .wx

Se positionner au 10ème caractère en partant de la fin puis récupérer 2 caractères (: -10:2)

mavariable="abcdef.wxyz"; echo ${mavariable: -10:2} bc

Se positionner au 7ème caractère en partant de la fin puis récupérer les caractères jusqu’au 3ème caractère en partant de la fin (: -7:-3)

mavariable="abcdef.wxyz"; echo ${mavariable: -7:-3} ef.w

Se positionner au 9ème caractère en partant de la fin puis récupérer aucun caractère (: -9:0)

mavariable="abcdef.wxyz"; echo ${mavariable: -9:0} (rien)

Enchaîner mais pas combiner

Il n’est pas possible de combiner les différentes opérations (substring removal, substring expansion, etc.) entre elles, on peut les enchaîner les unes après les autres.

mavariable="/home/babar/Blog/bash_hackers.txt"; tmp_result1=${mavariable##*/}; tmp_result2=${tmp_result1%.*}; result=${tmp_result2/hackers/winners}; echo $result bash_winners

Pour rappel utiliser ; sur une ligne de commandes revient à faire ceci dans un script (évidemment on mettra des commentaires et en forme le tout).

mavariable="/home/babar/Blog/bash_hackers.txt" tmp_result1=${mavariable##*/} tmp_result2=${tmp_result1%.*} result=${tmp_result2/hackers/winners} echo $result bash_winners

Gravatar de blog-libre
Original post of blog-libre.Votez pour ce billet sur Planet Libre.

Articles similaires

genma : Yunohost - Surveiller l'état de son disque dur

C'est le billet de l'ami Seb0S666 Petit inventaire des disques dur à jeter dans lequel il parle de la vérification de l'état de différents disques durs avant de les mettre au recyclage qui m'a fait pensé qu'il serait peut être important que moi-même je regarde régulièrement l'état du disque dur qui fait tourner mon instance Yunohost sur mon PC maison.

Mon objectif est simple : anticiper la panne physique du disque pour le remplacer avant de perdre des données. A côté de celà, bien sûr, il y a le fait qu'il faille Faire des sauvegardes régulièrement, vérifier qu'elles sont correctes car ce n'est pas le jour où on aura besoin de la sauvegarde qu'il faut s'apercevoir qu'elle ne marche pas, n'est pas valable et qu'on ne peut pas récupérer ses données.

Pour tester l'état du disque dur, il y a l'outil Smartmontools. Un tuto rapide a été fait ici MemoInfo - Comment tester son disque dur pour éviter les pannes et il nous dit que la commande est :

smartctl -a /dev/sda1

Le lancer de temps à la main c'est un bon début, aller plus loin en automatisant tout ça c'est mieux et du coup, comme Yunohost est et reste une surcouche à Debian, on a toute la base Debian. On peut donc suivre le tutoriel Smartmontools - Wiki debian-fr pour automatiser tout ça et avoir le mail qui va bien pour prévenir les erreurs.

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Remi Collet : ZipArchive avec chiffrement

Un petit point d'avancement du développement de l'extension zip version 1.14.0 qui intègre désormais le support des archives chiffrées.

L'implémentation de cette nouvelle fonctionnalité repose sur l'utilisation de la bibliothèque libzip version 1.2.0 récemment publiée.

Actuellement seule la compilation avec la bibliothèque système offre ce support, mais une mise à jour de la version embarquée est prévue.

Lorsque tout sera validé, la version sera publiée et intégrée aux sources de php (ext/zip), sans doute pour PHP 7.2.

il s'agit d'un développement en cours, rien n'est définitif, et les méthodes proposées peuvent encore changer.

Installation en RPM

Le paquet php-pecl-zip-1.4.0.0-0.2.20170301dev est disponible dans le dépôt remi-test (et remi-php70-test, remi-php71-test).

Installation depuis les sources

Depuis un clone des sources disponibles dans github :

$ phpize $ ./configure --with-libzip ... checking for libzip... from pkgconfig: version 1.2.0 found in /usr/lib64 checking for zip_open in -lzip... yes checking for zip_file_set_encryption in -lzip... yes ... $ make ... Build complete. Don't forget to run 'make test'. $ make test ... PASS ZipArchive::setEncryption*() functions [tests/oo_encryption.phpt] Création d'un archive chiffrée

Trois méthodes permettent de gérer le cryptage

ZipArchive::setEncryptionName($name, $method [, $password]); ZipArchive::setEncryptionIndex($index, $method [, $password]); ZipArchive::setPassword($password);

Le choix de la méthode de chiffrement devant être une des constantes ZipArchive::EM_NONE, ZipArchive::EM_AES_128, ZipArchive::EM_AES_192 ou ZipArchive::EM_AES_256.

Exemple 1 :

Mot de passe par fichier

$zip = new ZipArchive; $zip->open(__DIR__ . '/encrypted.zip', ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE); $zip->addFile(__FILE__, 'foo.php'); $zip->setEncryptionName('foo.php', ZipArchive::EM_AES_256, 'secret'); $zip->close();

Exemple 2 :

Mot de passe par defaut (global)

$zip = new ZipArchive; $zip->open(__DIR__ . '/encrypted.zip', ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE); $zip->setPassword('secret'); $zip->addFile(__FILE__, 'foo.php'); $zip->setEncryptionName('foo.php', ZipArchive::EM_AES_256); $zip->close(); Lecture d'une archive chiffrée

Exemple :

$zip = new ZipArchive; $zip->open(__DIR__ . '/encrypted.zip'); print_r($zip->statName($file)); $zip->setPassword('secret'); $text = $zip->getFromName('foo.php'); $zip->close();

A noter :

  • utilisation de la méthode setPassword qui positionne le mot de passe utilisé par défaut.
  • la sortie de la méthode statName retourne une nouvelle information : encryption_method (259 pour ZipArchive::EM_AES_256)
Lecture d'un archive chiffrée via les flux

Il est nécessaire de passer le mot de passe en utilisant un context.

Exemple :

$ctx = stream_context_create(array( 'zip' => array( 'password' => 'secret' ) )); $text = file_get_contents('zip://' . __DIR__ . '/encrypted.zip#foo.php', false, $ctx); Conclusion

Le script utilisé dans les exemples ci-dessus est disponible dans les sources de l'extension : encryption.php

Cette nouvelle fonctionnalité me semble très utile, et devrait offrir une meilleure compatibilité avec les outils existants, comme WinZip sous Windows ou 7za sous Linux.

Pour Fedora, cette évolution devrait être disponible dans Fedora 26 qui dispose déjà de libzip 1.2.0.

Gravatar de Remi Collet
Original post of Remi Collet.Votez pour ce billet sur Planet Libre.

Articles similaires

dada : Redis-stat ou comment monitorer Redis simplement


Redis est un outil que je continue de découvrir alors que je le manipule au boulot depuis maintenant des mois, et franchement, j'adore. Je ne ferai pas de cours sur son utilité, la page Wikipédia raconte ce qu'il faut. Ici, je vous propose un outil pour le monitorer très simplement : Redis-stat.

Plutôt qu'un long discours, la capture d'écran :



Comme vous pouvez le constater, les informations sont sommaires mais suffisantes pour donner un aperçu de comportement du Redis. Bon, après, s'il vous en faut plus, il faudra passer par un outil bien plus complexe que redis-stat !

Pour l'installation, c'est une Gem ruby simple qu'il faut récupérer, mais d'abord, les dépendances :
apt-get install ruby ruby-devPuis :
gem install redis-stat Pour lancer l'outil, un petit (pourquoi petit ?) :
redis-stat --server --daemon La configuration par défaut est parfaite si vous n'avez pas trop bidouillé la configuration de votre instance.

Je termine ce rapide billet en vous disant que l'utilisation de Redis, c'est bon pour la santé ! Mon Nextcloud s'en sort bien mieux depuis qu'il tape dedans.


Gravatar de dada
Original post of dada.Votez pour ce billet sur Planet Libre.

®om : SHAdow

Le 23 février, une équipe de chercheurs a annoncé avoir cassé SHA-1 en pratique, en générant une collision.

À partir de leur travail, il est possible de produire de nouvelles paires de fichiers PDF arbitrairement différents qui auront la même signature SHA-1. Par exemple :

shadow1-thumb shadow2-thumb

$ sha1sum shadow1.pdf shadow2.pdf fffe36a1d6f0a76a585af4f3838a4a46b6714f0c shadow1.pdf fffe36a1d6f0a76a585af4f3838a4a46b6714f0c shadow2.pdf $ sha256sum shadow1.pdf shadow2.pdf 502ccf8ecee10176d891fa4aeab295edec22b95141c2ae16d85f13b39879e37e shadow1.pdf 2546d272df653c5a99ef0914fa6ed43b336f309758ea873448154ebde90cdfe1 shadow2.pdf

J’explique dans ce billet le principe, et je fournis un outil qui produit, à partir de deux images JPEG, deux fichiers PDF différents de même SHA-1.

Réutilisation

En fabriquant leur collision, les auteurs ont pris soin de la rendre réutilisable :

Furthermore, the prefix of the colliding messages was carefully chosen so that they allow an attacker to forge two PDF documents with the same SHA-1 hash yet that display arbitrarily-chosen distinct visual content.

Aujourd’hui, nous allons jouer aux attaquants.

La réutilisation de la collision repose sur le fait qu’avec SHA-1, ajouter un suffixe identique à une collision existante produit encore une collision :

SHA1(A) == SHA1(B) ==> SHA1(A|X) == SHA(B|X)

(où X|Y est la concaténation de X et de Y)

Autrement dit, vous prenez les fichiers qui produisent une collision, vous ajoutez les mêmes octets aux deux, vous obtenez le même SHA-1 :

$ { cat shattered-1.pdf; echo bonjour; } | sha1sum 4bfd4b804da3aa207b29d6f1300dde507988dc4b - $ { cat shattered-2.pdf; echo bonjour; } | sha1sum 4bfd4b804da3aa207b29d6f1300dde507988dc4b -

Il est donc trivial de créer de nouvelles collisions.

Mais pour qu’elles aient un intérêt, encore faut-il :

  1. que les fichiers produits soient valides ;
  2. qu’une différence entre les fichiers soit visible par l’utilisateur.
Différences

Les différences entre shattered-1.pdf et shattered-2.pdf se situent entre les adresses 0xc0 et 0x13f :

diff -U3 <(hd shattered-1.pdf) <(hd shattered-2.pdf) --- /dev/fd/63 2017-02-28 21:11:11.530135134 +0100 +++ /dev/fd/62 2017-02-28 21:11:11.530135134 +0100 @@ -10,14 +10,14 @@ 00000090 72 65 61 6d 0a ff d8 ff fe 00 24 53 48 41 2d 31 |ream......$SHA-1| 000000a0 20 69 73 20 64 65 61 64 21 21 21 21 21 85 2f ec | is dead!!!!!./.| 000000b0 09 23 39 75 9c 39 b1 a1 c6 3c 4c 97 e1 ff fe 01 |.#9u.9...-000000c0 73 46 dc 91 66 b6 7e 11 8f 02 9a b6 21 b2 56 0f |sF..f.~.....!.V.| -000000d0 f9 ca 67 cc a8 c7 f8 5b a8 4c 79 03 0c 2b 3d e2 |..g....[.Ly..+=.| -000000e0 18 f8 6d b3 a9 09 01 d5 df 45 c1 4f 26 fe df b3 |..m......E.O&...| -000000f0 dc 38 e9 6a c2 2f e7 bd 72 8f 0e 45 bc e0 46 d2 |.8.j./..r..E..F.| -00000100 3c 57 0f eb 14 13 98 bb 55 2e f5 a0 a8 2b e3 31 | -00000110 fe a4 80 37 b8 b5 d7 1f 0e 33 2e df 93 ac 35 00 |...7.....3....5.| -00000120 eb 4d dc 0d ec c1 a8 64 79 0c 78 2c 76 21 56 60 |.M.....dy.x,v!V`| -00000130 dd 30 97 91 d0 6b d0 af 3f 98 cd a4 bc 46 29 b1 |.0...k..?....F).| +000000c0 7f 46 dc 93 a6 b6 7e 01 3b 02 9a aa 1d b2 56 0b |.F....~.;.....V.| +000000d0 45 ca 67 d6 88 c7 f8 4b 8c 4c 79 1f e0 2b 3d f6 |E.g....K.Ly..+=.| +000000e0 14 f8 6d b1 69 09 01 c5 6b 45 c1 53 0a fe df b7 |..m.i...kE.S....| +000000f0 60 38 e9 72 72 2f e7 ad 72 8f 0e 49 04 e0 46 c2 |`8.rr/..r..I..F.| +00000100 30 57 0f e9 d4 13 98 ab e1 2e f5 bc 94 2b e3 35 |0W...........+.5| +00000110 42 a4 80 2d 98 b5 d7 0f 2a 33 2e c3 7f ac 35 14 |B..-....*3....5.| +00000120 e7 4d dc 0f 2c c1 a8 74 cd 0c 78 30 5a 21 56 64 |.M..,..t..x0Z!Vd| +00000130 61 30 97 89 60 6b d0 bf 3f 98 cd a8 04 46 29 a1 |a0..`k..?....F).| 00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00000230 00 00 ff fe 00 fc 00 00 00 00 00 00 00 00 ff e0 |................|

Nous devrons donc, quoi qu’il arrive, conserver les 0x140 (320) premiers octets : il s’agira forcément d’un fichier PDF.

Pour analyser la structure sur un exemple minimal, je vous conseille l’exemple fourni à la dernière page du papier (good.pdf et bad.pdf) :

<< -- base64 -d | tar xj QlpoOTFBWSZTWbL5V5MABl///////9Pv///v////+/////HDdK739/677r+W3/75rUNr4Aa/AAAAAAA CgEVTRtQDQAaA0AAyGmjTQGmgAAANGgAaMIAYgGgAABo0AAAAAADQAIAGQ0MgDIGmjQA0DRk0AaMQ0D QAGIANGgAAGRoNGQMRpo0GIGgBoGQAAIAGQ0MgDIGmjQA0DRk0AaMQ0DQAGIANGgAAGRoNGQMRpo0GI GgBoGQAAIAGQ0MgDIGmjQA0DRk0AaMQ0DQAGIANGgAAGRoNGQMRpo0GIGgBoGQAAIAGQ0MgDIGmjQA0 DRk0AaMQ0DQAGIANGgAAGRoNGQMRpo0GIGgBoGQAABVTUExEZATTICnkxNR+p6E09JppoyamjGhkm0a mmIyaekbUejU9JiGnqZqaaDxJ6m0JkZMQ2oaYmJ6gxqMyE2TUzJqfItligtJQJfYbl9Zy9QjQuB5mHQ RdSSXCCTHMgmSDYmdOoOmLTBJWiCpOhMQYpQlOYpJjn+wQUJSTCEpOMekaFaaNB6glCC0hKEJdHr6Bm UIHeph7YxS8WJYyGwgWnMTFJBDFSxSCCYljiEk7HZgJzJVDHJxMgY6tCEIIWgsKSlSZ0S8GckoIIF+5 51Ro4RCw260VCEpWJSlpWx/PMrLyVoyhWMAneDilBcUIeZ1j6NCkus0qUCWnahhk5KT4GpWMh3vm2nJ WjTL9Qg+84iExBJhNKpbV9tvEN265t3fu/TKkt4rXFTsV+NcupJXhOhOhJMQQktrqt4K8mSh9M2DAO2 X7uXGVL9YQxUtzQmS7uBndL7M6R7vX869VxqPurenSuHYNq1yTXOfNWLwgvKlRlFYqLCs6OChDp0HuT zCWscmGudLyqUuwVGG75nmyZhKpJyOE/pOZyHyrZxGM51DYIN+Jc8yVJgAykxKCEtW55MlfudLg3KG6 TtozalunXrroSxUpVLStWrWLFihMnVpkyZOrQnUrE6xq1CGtJlbAb5ShMbV1CZgqlKC0wCFCpMmUKSE kvFLaZC8wHOCVAlvzaJQ/T+XLb5Dh5TNM67p6KZ4e4ZSGyVENx2O27LzrTIteAreTkMZpW95GS0CEJY hMc4nToTJ0wQhKEyddaLb/rTqmgJSlkpnALxMhlNmuKEpkEkqhKUoEq3SoKUpIQcDgWlC0rYahMmLuP Q0fHqZaF4v2W8IoJ2EhMhYmSw7qql27WJS+G4rUplToFi2rSv0NSrVvDUpltQ8Lv6F8pXyxmFBSxiLS xglNC4uvXVKmAtusXy4YXGX1ixedEvXF1aX6t8adYnYCpC6rW1ZzdZYlCCxKEv8vpbqdSsXl8v1jCQv 0KEPxPTa/5rtWSF1dSgg4z4KjfIMNtgwWoWLEsRhKxsSA9ji7V5LRPwtumeQ8V57UtFSPIUmtQdOQfs eI2Ly1DMtk4Jl8n927w34zrWG6Pi4jzC82js/46Rt2IZoadWxOtMInS2xYmcu8mOw9PLYxQ4bdfFw3Z Pf/g2pzSwZDhGrZAl9lqky0W+yeanadC037xk496t0Dq3ctfmqmjgie8ln9k6Q0K1krb3dK9el4Xsu4 4LpGcenr2eQZ1s1IhOhnE56WnXf0BLWn9Xz15fMkzi4kpVxiTKGEpffErEEMvEeMZhUl6yD1SdeJYbx zGNM3ak2TAaglLZlDCVnoM6wV5DRrycwF8Zh/fRsdmhkMfAO1duwknrsFwrzePWeMwl107DWzymxdQw iSXx/lncnn75jL9mUzw2bUDqj20LTgtawxK2SlQg1CCZDQMgSpEqLjRMsykM9zbSIUqil0zNk7Nu+b5 J0DKZlhl9CtpGKgX5uyp0idoJ3we9bSrY7PupnUL5eWiDpV5mmnNUhOnYi8xyClkLbNmAXyoWk7GaVr M2umkbpqHDzDymiKjetgzTocWNsJ2E0zPcfht46J4ipaXGCfF7fuO0a70c82bvqo3HceIcRlshgu73s eO8BqlLIap2z5jTOY+T2ucCnBtAtva3aHdchJg9AJ5YdKHz7LoA3VKmeqxAlFyEnQLBxB2PAhAZ8Kvm uR6ELXws1Qr13Nd1i4nsp189jqvaNzt+0nEnIaniuP1+/UOZdyfoZh57ku8sYHKdvfW/jYSUks+0rK+ qtte+py8jWL9cOJ0fV8rrH/t+85/p1z2N67p/ZsZ3JmdyliL7lrNxZUlx0MVIl6PxXOUuGOeArW3vuE vJ2beoh7SGyZKHKbR2bBWO1d49JDIcVM6lQtu9UO8ec8pOnXmkcponBPLNM2CwZ9kNC/4ct6rQkPkQH McV/8XckU4UJCy+VeTA== -- Aiguillage

Notre objectif est que les quelques octets différents entre les deux fichiers PDF déterminent l’image à afficher.

Il serait en théorie possible d’appliquer cet aiguillage au niveau de la structure du PDF, mais c’est en fait au niveau du JPEG qu’il sera implémenté :

PDFs with the same MD5 hash have previously been constructed by Gebhardt et al. [12] by exploiting so-called Indexed Color Tables and Color Transformation functions. However, this method is not effective for many common PDF viewers that lack support for these functionalities. Our PDFs rely on distinct parsings of JPEG images, similar to Gebhardt et al.’s TIFF technique [12] and Albertini et al.’s JPEG technique [1].

Le format JPEG

Voici le strict nécessaire à savoir sur le format JPEG pour notre besoin.

Une image est stockée entre les marqueurs 0xffd8 (Start Of Image) et 0xffd9 (End Of Image).

Il est possible d’insérer autant de commentaires que l’on veut, grâce au marqueur 0xfffe suivi de sa taille sur 2 octets (en big-endian). La taille compte le header de taille, mais pas le marqueur initial.

Par exemple, si je veux insérer le commentaire “Hello” au tout début, mon fichier JPEG ressemblera à ceci :

ff d8 ff fe 00 07 48 65 6c 6c 6f … ff d9 [SOI] [EOI] [[COM] [LEN] H e l l o] <-------------------> 7

Et c’est à peu près tout ce qu’il y a à savoir.

L’astuce

Mettons en évidence la première différence entre les fichiers en collision.

Dans le fichier 1 :

000000b0 -- -- -- -- -- -- -- -- -- -- -- -- -- ff fe 01 000000c0 73 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Dans le fichier 2 :

000000b0 -- -- -- -- -- -- -- -- -- -- -- -- -- ff fe 01 000000c0 7f -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Chacun définit un bloc de commentaires, mais pas de mêmes tailles. Dans le fichier 1, le début du prochain bloc sera à l’adresse 0x232 (0xbf + 0x173), alors que dans le fichier 2 il sera à l’adresse 0x23e (0xbf + 0x17f).

Nous avons donc trouvé notre aiguillage ; nous allons maintenant utiliser des commentaires JPEG pour cacher soit la première image, soit la seconde.

Pour l’exploiter jusqu’au bout, il suffit de disposer les commentaires astucieusement pour que les deux versions représentent des images parfaitement valides.

Nous allons donc commencer en 0x232 un bloc de commentaires, ayant une taille permettant de recouvrir l’intégralité de l’image que nous allons stocker en 0x23e. Et inversement, nous devons démarrer un commentaire à la fin de l’image stockée en 0x23e pour cacher la deuxième image.

Comparons sur le résultat ce qu’observe un parseur qui parcourt chacun des fichiers.

(GG et HH sont les deux images à stocker. J1 et J2 sont les longueurs des sauts pour enjamber chacune des images.)

Le fichier 1 est parsé ainsi :

00000090 -- -- -- -- -- ff d8 -- -- -- -- -- -- -- -- -- … 000000b0 -- -- -- -- -- -- -- -- -- -- -- -- -- ff fe 01 000000c0 73 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- … 00000230 -- -- ff fe J1 J1 -- -- -- -- -- -- -- -- GG GG 00000240 GG GG GG GG GG GG GG GG GG GG GG GG GG GG GG GG … i GG GG GG GG GG GG ff fe J2 J2 HH HH HH HH HH HH i+0x10 HH HH HH HH HH HH HH HH HH HH HH HH HH HH HH HH … j HH HH ff d9 -- -- -- -- -- -- -- -- -- -- -- --

Le fichier 2 est parsé différemment :

00000090 -- -- -- -- -- ff d8 -- -- -- -- -- -- -- -- -- … 000000b0 -- -- -- -- -- -- -- -- -- -- -- -- -- ff fe 01 000000c0 7f -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- … 00000230 -- -- ff fe J1 J1 -- -- -- -- -- -- -- -- GG GG 00000240 GG GG GG GG GG GG GG GG GG GG GG GG GG GG GG GG … i GG GG GG GG GG GG ff fe J2 J2 HH HH HH HH HH HH i+0x10 HH HH HH HH HH HH HH HH HH HH HH HH HH HH HH HH … j HH HH ff d9 -- -- -- -- -- -- -- -- -- -- -- --

Les structures JPEG sont donc valides dans les deux fichiers. L’image affichée dépendra de l’octet stocké à l’adresse 0xc0, valant soit 0x73, soit 0x7f.

Maintenant, il nous reste à rendre notre PDF valide.

PDF

Le header participant à la collision SHA-1 (donc figé) définit des configurations dans des sections séparées (donc non figées) :

00000000 25 50 44 46 2d 31 2e 33 0a 25 e2 e3 cf d3 0a 0a |%PDF-1.3.%......| 00000010 0a 31 20 30 20 6f 62 6a 0a 3c 3c 2f 57 69 64 74 |.1 0 obj.<>.st|

Ainsi, la largeur (Width) est définie dans l’objet 2, la hauteur (Height) dans l’objet 3, etc.

Ces objets sont à définir à la suite des fichiers JPEG embarqués. Pour comprendre leur format, le plus simple est de lire le fichier good.pdf que je recommandais plus haut :

tail -c+$((0x746)) good.pdf

On y trouve la définition des objets (entre autres les dimensions de l’image) :

2 0 obj 8 endobj 3 0 obj 8 endobj 4 0 obj /XObject endobj 5 0 obj /Image endobj 6 0 obj /DCTDecode endobj 7 0 obj /DeviceRGB endobj 8 0 obj 1693 endobj 9 0 obj << /Type /Catalog /Pages 10 0 R >> endobj 10 0 obj << /Type /Pages /Count 1 /Kids [11 0 R] >> endobj 11 0 obj << /Type /Page /Parent 10 0 R /MediaBox [0 0 8 8] /CropBox [0 0 8 8] /Contents 12 0 R /Resources << /XObject <> >> >> endobj 12 0 obj <> stream q 8 0 0 8 0 0 cm /Im0 Do Q endstream endobj

Ensuite vient la table de références croisées ; elle indique l’offset de chacun des objets définis, dans l’ordre :

xref 0 13 0000000000 65535 f 0000000017 00000 n 0000001861 00000 n 0000001879 00000 n 0000001897 00000 n 0000001922 00000 n 0000001945 00000 n 0000001972 00000 n 0000001999 00000 n 0000002020 00000 n 0000002076 00000 n 0000002142 00000 n 0000002309 00000 n

À chaque ajout ou suppression de caractères dans la définition des objets, cette table doit être mise à jour.

Le fichier se termine par un trailer, contenant l’offset de la table de références :

trailer << /Root 9 0 R /Size 13>> startxref 2391 %%EOF

Ces offsets sont un peu fastidieux à modifier à la main, mais ça fonctionne.

SHAdow

J’ai donc écrit un petit outil qui applique toutes ces opérations automatiquement.

git clone http://git.rom1v.com/shadow.git

(ou sur github)

Il prend en entrée deux images JPEG (de moins de 64K, puisque la taille d’un commentaire est codé sur 2 octets), ainsi que leurs dimensions (afin d’éviter d’utiliser des dépendances pour les extraire) :

./shadow.py img1.jpg img2.jpg 200 200

Il génère deux fichiers dans le répertoire courant, shadow1.pdf et shadow2.pdf.

Il ne reste qu’à vérifier qu’ils ont bien le même SHA-1 :

sha1sum shadow1.pdf shadow2.pdf

Gravatar de ®om
Original post of ®om.Votez pour ce billet sur Planet Libre.

RaspbianFrance : Sortie de la Raspberry Pi Zéro W, une Raspberry à 10€, notre analyse et nos conseils

Comme tous les ans, à l’occasion de son anniversaire, la Raspberry Pi fondation propose une nouvelle version améliorée de la Raspberry Pi, cette année c’est la Raspberry Pi Zéro qui se dote d’un nouveau modèle avec la Raspberry Pi Zéro W !

Pour célébrer les cinq ans de la fondation Raspberry Pi, la Fondation vient de nous annoncer la sortie d’une nouvelle carte, la Raspberry Pi Zero W, pour Raspberry Pi Wireless !
Petit bonus, la fondation a également annoncé un boîtier officiel pour la Raspberry Pi W.

Alors, quelles nouveautés, quelles améliorations et quels usages ? Petit tour d’horizon de cette nouvelle Raspberry Pi !

Où acheter la Raspberry Pi Zéro W et le boîtier officiel de la Pi Zéro

Avant de vous parler des caractéristiques de la bête, éliminons directement la question du prix et du vendeur.

Comme trop souvent avec la Raspberry Pi Zéro, le vrai problème semble de trouver des vendeurs possédant le produit en stock.
Voici donc une liste, que nous essayons de tenir à jour, des vendeurs et des prix pour la Raspberry Pi Zéro W et le boîtier officiel.

Où acheter la Raspberry Pi Zéro W

Au niveau de la Raspberry Pi Zéro W, le prix annoncé est de 10€ (soit le double du prix théorique de la Pi Zéro 1.3). Bonne nouvelle, pour une fois, le prix constaté en France, au lancement, semble relativement correspondre au prix officiel (comptez en gros la TVA en plus) ! Voici les vendeurs chez lesquels vous pourrez acheter la Raspberry Pi Zéro W :

Où acheter le boîtier officiel de la Raspberry Pi Zéro

Pour ce qui est du boîtier officiel de la Raspberry Pi Zéro, les choses sont beaucoup plus simples ! Le prix annoncé est de 6€ et le prix constaté correspond également. Par ailleurs, il est facilement trouvable en ligne.

Voici les vendeurs chez lesquels vous pourrez acheter le boîtier officiel de la Raspberry Pi Zéro :

La Raspberry Pi Zéro W, un pas de plus vers le sans-fil

Comme son nom l’indique, la Raspberry Pi Zéro W propose principalement l’ajout de fonctionnalités sans-fil, le support du Bluetooth, mais surtout, le support du Wi-Fi.

Là ou l’ancienne version nécessitait de recourir à des dongles Bluetooth et Wi-Fi, la Raspberry Pi Zéro W intègre donc nativement une puce du constructeur Cypress, la CYW43438. Cette puce était déjà celle utilisée par la Raspberry Pi 3 et est donc parfaitement compatible avec Raspbian !

Comme pour la Raspberry Pi 3, donc, nous retrouvons du Wi-Fi 802.11n et du Bluetooth 4.0, soit les dernières versions des deux protocoles (la 802.11n est l’avant dernière version du protocole, mais reste extrêmement performante avec des débits jusqu’à 450 Mbits/s).

Une descendante directe de la Raspberry Pi Zéro

Pour le reste des caractéristiques, rien ne change. La Raspberry Pi Zero W reprend la quasi totalité des spécifications de sa grande soeur la Pi Zero 1.3.
Nous retrouvons donc un processeur 1 cœur, cadencé à 1GHz et qui est épaulé par 512Mo de RAM.

Côté connectique, rien de neuf non plus. On retrouve une alimentation mini-USB ainsi qu’un port mini-USB dédié aux périphériques externes (clefs, dongles, claviers, etc.). On retrouve également un port HDMI pour la vidéo, ainsi qu’une connectique pour la caméra pi, et la possibilité de souder des ports GPIO.

Un nouveau boîtier officiel pour la Raspberry Pi Zéro W

Deuxième annonce de la fondation, la sortie d’un boîtier officiel pour la Raspberry Pi Zéro W (et compatible avec les modèles précédents).

Ce boîtier reprend fortement l’apparence du boîtier officiel de la Raspberry Pi 3, avec un design arrondi et bicolore, rouge et blanc, aux couleurs de la fondation !

Un boîtier relativement novateur et intéressant

Nous avons été très agréablement surpris par le boîtier proposé par la fondation.

En effet, si ce boîtier correspond exactement aux dimensions de la Raspberry Pi Zéro W (jusque là, rien de révolutionnaire) et semble, d’après les images, assez bien fini. Il propose surtout un fonctionnement relativement différent des boîtiers classiques en offrant la possibilité d’utiliser plusieurs couvercles différents selon vos besoins.

 

Boîtier officiel de la Raspberry Pi Zéro

Le boîtier officiel de la Raspberry Pi Zéro propose différents couvercles selon vos besoins.

 

Ainsi, le boîtier est livré avec un couvercle totalement fermé, mais également avec un couvercle permettant l’accès aux ports GPIO, et enfin un couvercle permettant de fixer la caméra pi et de laisser sortir uniquement l’objectif.

Ce dernier couvercle nous semble particulièrement intéressant et permet pour nous de répondre à un réel besoin de façon particulièrement efficace et élégante !

Notre avis sur ces deux nouveautés

Jouons les experts BFM, et donnons notre avis sur ces dernières annonces !

Chez Raspbian France, nous sommes très satisfaits de voir débarquer ces deux nouveaux produits dans le catalogue de la fondation.

Un Wi-Fi très attendu sur la Raspberry Pi Zéro

Pour nous, l’ajout du Wi-Fi à la Raspberry Pi Zéro W est une excellente nouvelle et répond à un véritable besoin des utilisateurs !

En effet, jusqu’à présent la Raspberry Pi Zéro 1.3 ne disposait d’aucun moyen de se connecter à internet, sauf à passer par un dongle Wi-Fi comme celui-ci. De notre côté nous avons toujours considéré la Raspberry Pi Zéro 1.3 comme un très bon produit, mais dont l’absence de connectivité internet était en totale opposition avec son but.

Nous avons toujours envisagé la Raspberry Pi zéro comme un excellent moyen de faire de la domotique, de l’embarqué ou de la robotique, et le Wi-Fi, comme d’ailleurs le Bluetooth, nous semblent être absolument essentiels à ces types d’usages.

Aujourd’hui, nous considérons donc que l’ajout de ces deux technologies à la Raspberry Pi Zéro W sont non seulement pertinents et utiles, mais permettent réellement de faire de l’offre Pi Zéro un produit mature et parfaitement adapté à ces nouveaux usages.

Un boîtier de qualité qui ouvre des portes

De la même façon que l’ajout du Wi-Fi et du Bluetooth intégrés apportent de nouveaux usages, nous pensons que le boîtier officiel de la Raspberry Pi Zéro apporte avec lui une nouvelle façon d’envisager les choses et ouvre des portes vers de nouvelles pratiques.

Avec la possibilité de changer le couvercle du boîtier selon les utilisations, la fondation propose un système à la fois simple, élégant et pratique pour couvrir tous les usages et évolutions qui jalonnent l’utilisation quotidienne d’une Raspberry Pi, en plein accord avec l’esprit Do It Yourself du milieu.

La fondation a su s’inspirer du travail qu’elle avait initié avec le boîtier officiel de la Raspberry Pi 3 (boîtier que vous pouvez retrouver ici), pour l’enrichir et lui donner toute sa dimension avec ce nouveau boîtier. Un magnifique exemple de design incrémental !

Nous espérons vraiment voir les autres constructeurs s’inspirer de cette idée et proposer plus de boîtiers innovants !

Au final, ces différents produits viennent compléter le catalogue des produits officiels de la fondation Raspberry Pi. Pour plus d’infos, vous pouvez retrouver notre analyse de tous les accessoires officiels de la Raspberry Pi !

Cet article Sortie de la Raspberry Pi Zéro W, une Raspberry à 10€, notre analyse et nos conseils est apparu en premier sur Raspbian-France.

Gravatar de RaspbianFrance
Original post of RaspbianFrance.Votez pour ce billet sur Planet Libre.

Articles similaires

System Linux : Modification /etc/sudoers commande de vérification

sudo.png

Bon à savoir...

La moindre connerie quand on modifie le fichier suivant

/etc/sudoers

peut être catastrophique...

voici la commande pour vérifier la syntaxe de ce fichier ou d'un autre d'ailleurs selon votre utilisation :

vsudo -c

Qui devrait vous renvoyer ceci ou un truc dans le genre :

/etc/sudoers: parsed OK /etc/sudoers.d/README: parsed OK

Gravatar de System Linux
Original post of System Linux.Votez pour ce billet sur Planet Libre.

Articles similaires

nIQnutn : Comment effectuer des recherches avec son navigateur

Je reprends la série d'articles sur les moteurs de recherche. C'est la reprise d'un travail ancien que j'avais laissé de côté par manque de motivation. Certaines questions sur le sujet sont récurrentes et c'est donc l'occasion de publier la suite.
Je ferais volontairement l'impasse sur la présentation détaillée de quelques moteurs de recherche comme initialement prévu. Je ne souhaite pas faire la promotion d'une entreprise ou d'un service en particulier. On n'est pas à l'abri d'une mauvaise surprise et je laisserai chacun faire son choix, même si j'ai mes préférences.

Du coup, je vous propose dans cet article de découvrir comment utiliser au mieux les moteurs de recherche avec votre navigateur internet. Concrètement, ça passe par l'ajout de nouveaux moteurs de recherche, modifier les paramétrages concernant la recherche et l'utilisation d'un moteur de recherche en choisissant le plus pertinent selon le contexte et quelques astuces. Il n'y a aucune difficulté, Il suffit de changer quelques habitudes qui se traduiront au final par un gain de temps et un confort d'utilisation.
Évidemment, les explications seront uniquement pour Firefox.

Quelques précisions sur les moteurs de recherche thématique
Quand on parle de moteur de recherche, on pense à Google, Yahoo, DuckDuckGo, etc. mais on peut également utiliser des moteurs de recherche que j’appellerai thématique.
Si on recherche une définition, il est préférable de passer par le Portail Lexical - CNRTL ou wikipédia qui nous donnera une réponse plus pertinente que Google.
On peut également retrouver directement les informations d'un film sur IMDB ou d'une série TV avec TVDB. Vous pouvez faire la même chose pour trouver des bonnes affaires sur des sites d'achat en ligne, pour des recettes de cuisine, etc.
Pour cela, il vous suffira d'installer les moteurs de recherche qui vous seront utiles en suivant la méthode d'installation décrite par la suite et de les utiliser dans les contextes adaptés.

Sommaire
  1. Ajouter un moteur de recherche
    1. Ajouter un moteur de recherche depuis un site
    2. Ajouter un moteur de recherche sous forme d'extension
    3. Rechercher sur n'importe quel site / Mots clés intelligents
  2. Paramétrer les moteurs de recherche
    1. Moteur de recherche par défaut
    2. Gérer les moteurs de recherche
    3. Suggestions de recherche
  3. Lancer une recherche
    1. Changer de moteur de recherche
    2. Recherche avec mots clés intelligents
    3. Recherche rapide depuis la barre d'adresse
    4. Recherche à partir d'une sélection de texte
    5. Rechercher un mot dans une page
  4. Ressources
Ajouter un moteur de recherche

Généralement, un utilisateur se contente d'un seul moteur de recherche. C'est donc vraisemblablement celui qui est proposé par défaut par le navigateur ou celui de sa page d'accueil.
On va donc reprendre le contrôle de nos recherche en ajoutant un nouveau moteur de recherche plus pertinent ou qui correspond à nos attentes (n'hésitez pas à en ajouter plusieurs).

Certains ont encore l'habitude de rendre sur l'URL du moteur de recherche puis de taper les mots clé (on évite d'afficher un page: petit geste écolo qui ne coûte rien). C'était l'utilisation principale de la page d'accueil pour un très grand nombre d'utilisateur. Il est temps d'utiliser et de profiter de la barre de recherche.

Il faut commencer par afficher la barre de recherche sur Firefox si ce n'est pas déjà le cas.
J'ai fait une petite animation pour montrer comment ajouter la barre de recherche. Il suffit de cliquer sur l'image en dessous.

Documentation: https://support.mozilla.org/fr/kb/personnaliser-boutons-barres-outils-firefox

Ajouter un moteur de recherche depuis un site

Pour ajouter simplement un moteur de recherche:

  • Se rendre sur la page qui propose le moteur de recherche,
  • Cliquez sur l'icône en forme de loupe avec un + dans la barre de recherche,
  • Cliquez sur Ajouter « Moteur de recherche XXX»,
  • Le moteur de recherche apparaîtra dans les options de recherche.

Ajouter un moteur de recherche en images:


Si vous ne savez pas par lequel commencer, tester DuckDuckGo, Startpage, Qwant ou Searx.

Documentation: Ajouter ou supprimer un moteur de recherche dans Firefox

Ajouter un moteur de recherche sous forme d'extension

Il est également possible d'ajouter des moteurs de recherche sous forme d'extension.
En se rendant sur la page des modules de Firefox, il suffit de sélectionner le moteur de recherche et de cliquer sur "Ajouter à Firefox" pour l'installer.

Un autre site encore plus complet propose d'ajouter de très nombreux moteurs de recherche: Mycroft Project.
Il est même possible de créer son propre plugin: http://mycroftproject.com/submitos.html.

Documentation: Ajouter ou supprimer un moteur de recherche dans Firefox

Rechercher sur n'importe quel site / Mots clés intelligents

Dans de rares cas, il n'est pas possible d'ajouter un site comme moteur de recherche. Il existe encore une fois une solution.
On va transformer un champ de recherche d'un site en moteur de recherche pour Firefox.

  • Clic droit sur le champ de recherche
  • Ajouter un mot-clé pour la recherche (par exemple: "!alt")
  • Modifier le nom du marque-page (facultatif)

Une petite animation pour mieux comprendre:

Documentation: Comment rechercher sur YouTube, Wikipedia et autres depuis la barre d'adresse

Paramétrer les moteurs de recherche Moteur de recherche par défaut

Il est possible de définir un moteur de recherche par défaut.
Pour cela, il suffit de se rendre dans le menu: Préférences > Recherche (ou directement sur about:preferences#search)
Sélectionner le moteur de recherche dans le menu déroulant.

Pour ceux qui utilisent internet comme dans les années 90', on peut définir un moteur de recherche en page d'accueil.

  • Aller dans le menu: Préférences > Général > Démarrage
  • Au démarrage de Firefox: Afficher ma page d'accueil
  • Page d'accueil: https://moteur-de-recherche.org

Documentation: Comment définir la page d’accueil

Gérer les moteurs de recherche

Il est possible de désactiver un moteur de recherche en décochant ceux à masquer.

Documentation: Modifier les paramètres de votre recherche par défaut dans Firefox

Sur chacun des moteurs de recherche, on peut associer un mot clé (facultatif).
Cela permettra de lancer une recherche rapide depuis la barre d'adresse.

Suggestions de recherche

Je vous recommande également de désactiver les suggestions de recherche.

Lancer une recherche

Il existe plusieurs solutions pour lancer une recherche notamment en utilisant la barre de recherche, la barre d'adresse ou depuis une sélection de texte. En plus, on peut effectuer une recherche dans la page en cours, pour rechercher un marque-page, un onglet ouvert ou depuis l'historique du navigateur.

Changer de moteur de recherche

Pour lancer une recherche, on commence par saisir les mots clés.
En exécutant la recherche directement (en cliquant sur ou Entrée), on utilisera le moteur de recherche définit par défaut.
Pour utiliser un autre moteur, il suffit de le sélectionner parmi ceux qui s'affichent juste en dessous.

Documentation: Barre de recherche – choisir facilement votre moteur de recherche favori

Recherche avec mots clés intelligents

Pour lancer une recherche comme si on était sur le formulaire de la page, il suffit de saisir en premier le mot-clé dans la barre de recherche suivi des autres termes de la recherche. Exemple: !alt kodi

Documentation:Comment rechercher sur YouTube, Wikipedia et autres depuis la barre d'adresse

Recherche rapide depuis la barre d'adresse

De la même manière que pour l'utilisation des mots clés intelligents, on peut utiliser n'importe quel moteur de recherche depuis la barre d'adresse. Il suffit d'utiliser le mot clé associé au moteur de recherche.
Comme définit précédemment, on peut lancer une recherche avec Startpage en saisissant dans la barre d'adresse: !sp firefox.

Recherche à partir d'une sélection de texte

Lors de la lecture d'un article, il arrive qu'on lance une recherche pour trouver des informations supplémentaires sur un mot/expression. Plutôt que de ressaisir les mots clés dans la barre de recherche avec le risque de se tromper d'orthographe, on peut lancer directement une recherche à partir du texte de la page en cours.
Il faut surligner le texte puis faire un clic-droit et sélectionner: Recherche MoteurDeRecherche pour 'blablabla'.

Pour choisir le moteur de recherche plutôt que d'utiliser celui par défaut, vous pouvez installer l'extension Context Search.

Rechercher un mot dans une page

Il n'est pas rare de se retrouver sur une page très longue mais pour trouver la partie qui nous intéresse, il nous faudrait la lire en entier.
On peut rapidement retrouver la section qui nous intéresse en lançant une recherche dans la page à partir d'un mot clé.

  • Ouvrir la barre de recherche avec Ctrl+F ou depuis le menu: Rechercher
  • Saisir les termes de recherche

Documentation:Comment rechercher du texte ou des liens dans le contenu de la page actuelle

Ressources

Note: le terme moteur de recherche apparaît 42 fois sur cette page. Désolé pour les répétitions.

2016 nIQnutn CC-BY

Gravatar de nIQnutn
Original post of nIQnutn.Votez pour ce billet sur Planet Libre.

Tuxicoman : Connexion SSH à travers un ordinateur relai avec ProxyJump

Depuis OpenSSH 7.3 il existe une manière bien pratique d’établir une connexion SSH en passant un ordinateur relai et ceci de manière transparente.

Imaginez la situation suivante, vous voulez vous connecter en SSH sur une machine (toto@destination) mais celle-ci ne vous est pas accesible directement. Vous devez passer par une autre machine (titi@relai).

Voici la commande qui permet de vous connecter en une ligne à la destination :

$ ssh -J titi@relai toto@destination

Vous pouvez aussi créer un alias dans le fichier de config ~/.ssh/config

Host destination_through_relai
HostName destination
ProxyJump titi@relai:22

Et vous pouvez chainer autant de sauts/relais que vous voulez.

Related Posts:

Gravatar de Tuxicoman
Original post of Tuxicoman.Votez pour ce billet sur Planet Libre.

Articles similaires

alterlibriste : Rendre Debian stable moins obsolète

Il n’est pas rare de lire que Debian Stable est rapidement obsolète et de nous sortir les quelques versions de retard du noyau, de LibreOffice et du navigateur. Pourtant, rien ne nous empêche d’adopter des versions plus récentes et de tordre le cou à cette critique.

Entendons-nous bien, Debian stable est stable comme le rock tant que l’on reste uniquement sur la branche stable. Elle a un cycle assez long d’environ deux ans qui permet d’avoir des versions de logiciels relativement à jour à sa sortie mais qui commencent à dater un peu au bout des deux ans.

Pour une utilisation en production (serveur, postes de travail critiques), cela ne se discute pas. À part quelques mises à jour de sécurité, qui peuvent être faites automatiquement, rien ne changera et donc tout restera stable pour une maintenance quasi-nulle et les utilisateurs peu enclins aux changements ne s’en porteront que mieux.

Pour une utilisation domestique, si l’on souhaite évoluer, avoir les derniers drivers ou que l’on a du matériel un peu récent, il devient intéressant d’avoir des versions plus à jour. Ici, s’ouvrent plusieurs voies : passer sur la branche testing qui préfigure la future stable, ou la branche sid qui équivaut à une rolling release. Le risque n’est pas énorme, mais présente quelques inconvénients incompatibles avec le choix d’une version stable, à savoir, installer et être tranquille pour un ou deux ans :

  • des mises à jours incessantes, plusieurs centaines de paquets par mois, voire par semaine
  • des changements apportant des nouveautés certes mais parfois aussi quelques imperfections, peut-être aussi des bugs et des choses qui ne marchent plus

Pourtant, il y a plusieurs moyens d’avoir des versions plus récentes de paquets sans quitter l’environnement Debian. Je ne parlerai pas ici de jouer au funambule entre les différentes branches en allant chercher ce qui nous intéresse grâce à l’apt-pining, mais simplement l’ajout de certains dépôts, notamment celui des backports qui contient les paquets présents dans testing et rétro-portés pour la branche stable.

La chose est simple puisqu’il suffit, en éditant le fichier :
sudo nano /etc/apt/sources.list
d’ajouter la ligne suivante (contrib et non-free étant à la discrétion de chacun selon la volonté ou pas d’utiliser du 100% libre) :
deb http://httpredir.debian.org/debian jessie-backports main contrib non-free
Une fois le apt update de rigueur réalisé, cela n’aura rien changé dans les update des paquets, il faut préciser que l’on veut un paquet issu de backports pour qu’il soit installé de la manière suivante :
sudo apt install -t jessie-backports libreoffice

Voilà la manière de passer de la version 4.3 qui était la version stable à la sortie de Jessie à la version 5.2 disponible au moment de l’écriture du billet (la 5.3 sortie récemment n’étant encore que dans le dépôt experimental) ce qui est quand même plus récent pour ceux qui souhaitent profiter des apports faits sur les dernières versions.
Pendant qu’on en est à rajeunir la logithèque, les paquets libreoffice-style-sifr (déjà présent dans Jessie) et libreoffice-style-breeze (dans les backports) qui ne sont pas installés par défaut apportent des thèmes un peu plus modernes aux icônes un peu vieillissantes des thèmes Tango et Galaxy (Outils/Options/Affichage/Style d’icônes).

Quoi mettre à jour d’autre ?

  • L’obsession d’un noyau à jour (qui peut se justifier sur du matériel récent) peut être assouvie en passant du 3.16 d’origine au 4.9 actuellement.
  • Les drivers graphiques pour profiter d’une meilleure optimisation de la carte graphique permettent de passer de la version 340 à 345 pour les drivers proprio nvidia et de Mesa 10 à Mesa 15 pour l’OpenGl
  • Les jeux libres en développement actifs sont présents dans des versions à jour (0AD, Minetest, Red Eclipse, Supertux Kart, Battle for Wesnoth, ...)
  • Cinnamon est le seul environnement de bureau rétro-porté, ça tombe bien je l’utilise et ça permet d’avoir une version 3 plutôt que la version 2.2 d’origine (il ne faut pas oublier de mettre à jour aussi le paquet de francisation cinnamon-ln10 qui n’est pas inclus dans le méta-package cinnamon)
  • On peut aussi citer Youtube-dl, Kodi ou VirtualBox dont on peut vouloir profiter des versions plus récentes. Reste un problème de taille : le navigateur. Debian, dans sa quête de stabilité, met à disposition la version ESR (version de support à long terme, la 45 actuellement), ce qui est correspond bien à un usage sur le long terme mais peut paraître trop peu innovant pour celui qui suit l’actualité de Moz://a. Eh bien ce n’est pas dans les backports qu’on va trouver notre bonheur, enfin pas dans ceux de Debian mais dans les dépôts de Mozilla. Sur le site de la Debian Mozilla Team, on va trouver la ligne qui va bien pour ajouter le dépôt selon la branche de Debian que l’on utilise et la version de Firefox que l’on souhaite : ESR (45), stable (51), Beta (52) ou Aurora (53) (versions au moment de l’écriture de ce billet).

Voilà pour l’aperçu des moyens de garder une Debian Stable plus à jour et avoir un meilleur compromis entre stabilité et nouveauté pour patienter avant la sortie de Stretch prévue pour l’été.

Gravatar de alterlibriste
Original post of alterlibriste.Votez pour ce billet sur Planet Libre.

Articles similaires

Nizar Kerkeni : Nous cultivons notre jardin de services libres – Open Tunisia

Services Libres Open Tunisia

Après le dixième anniversaire de la communauté Ubuntu Tunisie la semaine dernière, cette semaine nous fêtons le sixième anniversaire de la communauté Open Tunisia. En effet, cette communauté était créée en 2011 à l’occasion du Startup Week End Tunis. L’objectif de cette communauté était de lancer et proposer différents services libres pour la communauté du Libre en Tunisie. Des services comme l’enregistrement des noms de domaines, hébergement mutualisé et des services web comme un éditeur de texte collaboratif, hébergement d’images, etc.

À l’occasion de son sixième anniversaire Open Tunisia s’offre donc une nouvelle jeunesse avec une panoplie de nouveaux services web mise à disposition de la communauté en Tunisie et ailleurs. Ces services sont accessibles depuis la page principale à l’adresse opentTunisia.org ou même op.tn.

#SaintValentin Le meilleur cadeau pour la communauté du #Libre en #Tunisie : un bouquets de services Libres https://t.co/LALUQk9dBU
— Nizar Kerkeni (@nizarus) 14 février 2017

Les libristes qui découvriront ces services penseront certainement à un autre projet de plus grande envergure : Dégooglisons Internet, l’initiative de l’association Framasoft en faveur d’un internet libre, décentralisé, éthique et solidaire. Effectivement, c’est dans ce même contexte que s’inscrit ce nouveau portail de services libres proposés par Open Tunisia. Le bouquet de ces services libres est encore en phase de test et nécessite encore beaucoup de travail pour le stabiliser et l’offrir à la communauté.

Six ans déjà, mais quel avenir ?

C’est la question à laquelle est confrontée la petite équipe, de jardiniers, qui ont planté les premières graines de ces services libres. Ces graines vont-elles fleurir et perpétuer ? Rien n’est certain actuellement.

Malheureusement, Open Tunisia croule aujourd’hui sous une dette colossale proche de 9000 TND. Une dette qui augmente chaque année à cause des centaines de noms de domaines enregistrés chez l’ATI – Agence Tunisienne de l’Internet. L’enregistrement de ces noms de domaines est renouvelé systématiquement à la fin de chaque année par l’ATI. À cause du retard dans le règlement des premières factures (de 2012 et 2013) l’ATI a bloqué les accès qui nous permettent de désactiver les noms de domaines que leurs propriétaires ont abandonné. Il est aussi malheureux de constater que beaucoup de propriétaires de noms de domaines profitent encore de l’hébergement et de l’enregistrement de leurs domaines sans apporter aucune contribution malgré les multiples appels à contribution.

Cultiver avec nous le jardin !

Toute contribution sera la bienvenue, les contributions techniques et/ou les contributions financières.

Pour les contributions techniques (test, traduction, maintenance, etc.) il est possible de rejoindre notre équipe en s’inscrivant sur la liste de diffusion (envoyer un mail vide à membres+subscribe@openTunisia.org) et nous contacter via l’adresse (membres@openTunisia.org).
Pour les contributions financières, il est possible de faire un don à la communauté Open Tunisia. Différentes modalités sont possibles : Faire un don.

share this

Gravatar de Nizar Kerkeni
Original post of Nizar Kerkeni.Votez pour ce billet sur Planet Libre.

Articles similaires

Benoît Boudaud : Python: La compréhension de liste

Pour une lecture plus agréable (page plus large), je vous suggère de cliquer sur ce lien et ainsi de lire cet article dans la rubrique consacrée au langage Python.

La compréhension de liste est une expression qui permet de construire une liste à partir de tout autre type itérable (liste, tuple, chaîne de caractères…). Le résultat obtenu est toujours une liste.

python

1) Une compréhension de liste toute simple

Un exemple valant mieux qu’un long discours, nous allons créer une liste de nombres entiers :

liste_initiale = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

À l’aide d’une boucle for et de la méthode append(), nous allons ajouter à une nouvelle liste baptisée liste_2, chaque élément de liste_initiale multiplié par deux.

liste_initiale = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] liste_2 = [] for n in liste_initiale: liste_2.append(n*2) print(liste_2)

Résultat : liste_2 = [0, 2, 4, 6, 8, 10 ,12, 14, 16, 18, 20, 22, 24, 26, 28, 30]

J’ai donc utilisé une boucle for pour écrire ce petit bout de code de cinq lignes. Mais j’aurais tout aussi bien pu utiliser une compréhension de liste pour obtenir le même résultat. Voici la syntaxe de cette dernière :

liste_initiale = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] liste_2 = [n*2 for n in liste_initiale] print(liste_2)

Résultat : liste_2 = [0, 2, 4, 6, 8, 10 ,12, 14, 16, 18, 20, 22, 24, 26, 28, 30]

Que remarque-t-on? Le code est plus concis puisqu’il tient sur trois lignes au lieu de cinq. Vous allez me dire que la différence est minime et dans cet exemple tout simple, je dois reconnaître que vous avez raison! Mais attendez de voir la suite…

2) Une compréhension de liste avec une condition

Je souhaite  créer une nouvelle liste de nombres pairs multipliés par 2 à partir de liste_initiale qui contient, je vous le rappelle des nombres pairs et impairs. Il va donc falloir que j’introduise une condition pour ignorer les nombres impairs. Comparons une nouvelle fois le code écrit avec une boucle for et celui écrit avec une compréhension de liste.

Avec une boucle for liste_initiale = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] liste_pair = [] for n in liste_initiale: if n % 2 == 0: liste_pair.append(n*2) print(liste_pair)

Résultat : liste_pair = [0, 4, 8,  12, 16, 20, 24, 28]

Avec une compréhension de liste

J’introduis la condition à la fin de la compréhension de liste. Au lieu d’avoir six lignes de code, je n’en ai plus que trois.

liste_initiale = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] liste_pair = [n*2 for n in liste_initiale if n % 2 == 0] print(liste_pair)

Résultat : liste_pair = [0, 4, 8,  12, 16, 20, 24, 28]

3) Une compréhension de liste avec une expression conditionnelle

Encore plus fort, je souhaite créer une nouvelle liste avec les éléments de liste_initiale. Les chiffres pairs seront multipliés par deux, les chiffres impairs par trois. Il va donc falloir que j’introduise une condition if… else.

Avec une boucle for liste_initiale = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] nouvelle_liste = [] for n in liste_initiale: if n % 2 == 0: nouvelle_liste.append(n*2) else: nouvelle_liste.append(n*3) print(nouvelle_liste)

Résultat : nouvelle_liste = [0, 3, 4, 9, 8, 15, 12, 21, 16, 27, 20, 33, 24, 39, 28, 45]

Avec une compréhension de liste

Ça se complique un peu car il faut utiliser une expression conditionnelle qui évalue si la condition est vraie (True) ou fausse (False). Mais le résultat est au rendez-vous puisqu’au lieu d’avoir huit lignes de code, je n’en ai que trois!

liste_initiale = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] nouvelle_liste = [n*2 if n % 2 == 0 else n*3 for n in liste_initiale] print(nouvelle_liste)  4) Une compréhension de liste avec une liste de listes

Il est possible de faire une compréhension de liste avec une liste de listes. Pour s’y retrouver dans l’imbrication des instructions, le plus simple est de comparer la syntaxe d’une boucle for avec celle d’une compréhension de liste.

Avec une boucle for liste_initiale = [[0, 'a'], [2, 'b'], [3, 'c']] nouvelle_liste = [] for i in liste_initiale : for n in i : nouvelle_liste.append(n*2) print(nouvelle_liste)

Résultat: nouvelle_liste = [0, ‘aa’, 4, ‘bb’, 6, ‘cc’]

Avec une compréhension de liste liste_initiale = [[0, 'a'], [2, 'b'], [3, 'c']] nouvelle_liste = [n*2 for i in liste_initiale for n in i] print(nouvelle_liste)

Résultat: nouvelle_liste = [0, ‘aa’, 4, ‘bb’, 6, ‘cc’]

Avec une expression conditionnelle

Par exemple, je veux multiplier les nombres entiers par deux et les strings par trois.

liste_initiale = [[0, 'a'], [2, 'b'], [3, 'c']] nouvelle_liste = [n*2 if type(n) == int else n*3 for i in liste_initiale for n in i] print(nouvelle_liste)

Résultat: [0, ‘aaa’, 4, ‘bbb’, 6, ‘ccc’]

Dans ce dernier exemple, si j’avais fait usage d’une boucle for, j’aurais écrit neuf lignes de code au lieu de trois!

liste_initiale = [[0, 'a'], [2, 'b'], [3, 'c']] nouvelle_liste = [] for i in liste_initiale: for n in i: if type(n) == int: nouvelle_liste.append(n*2) else: nouvelle_liste.append(n*3) print(nouvelle_liste)

Cela dit, ce n’est pas non plus le concours de celui qui écrira le plus d’instructions sur la même ligne de code. Il faut que ça reste déchiffrable.

5) Les compréhensions de liste avec les autres types itérables

Comme je le disais en introduction, les compréhensions de liste fonctionnent avec les autres types itérables mais le résultat obtenu est toujours une liste. Par exemple, avec une chaîne de caractères :

prenom = "Gustave" liste_lettres = [lettre for lettre in prenom] print(liste_lettres)

Résultat: [‘G’, ‘u’, ‘s’, ‘t’, ‘a’, ‘v’, ‘e’]

Conclusion

La compréhension de liste est une méthode puissante qui a remplacé les anciennes fonctions map() et filter() dont l’usage est aujourd’hui déconseillé. Bien utilisée, la compréhension de liste rend le code plus concis, plus élégant et plus facile à comprendre qu’avec les fonctions map() et filter(). Voici la page consacrée aux compréhensions de liste dans la documentation officielle du langage Python.

Il existe également une compréhension de dictionnaire et d’ensemble que nous aborderons dans le chapitre consacré à ces deux structures de données.


Gravatar de Benoît Boudaud
Original post of Benoît Boudaud.Votez pour ce billet sur Planet Libre.

Articles similaires

Journal du hacker : Liens intéressants Journal du hacker semaine #08

Pour la 8ème semaine de 2017, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Pages