Dans ce tutoriel je vais vous décrire comment effacer l’historique et les cookies d’un navigateur sur un ordinateur sur Google Chrome et Firefox et sur iPhone sur Safari.
Avant toutes choses je vais vous expliqué en quoi nettoyer son navigateur est important. Lorsque l’on surf sur le web de nombreuses informations sont conservées dans notre navigateur tel que l’historique des pages visitées et des fichiers téléchargés, des cookies ou un autre exemple comme nos mots de passe… Certaines de ces données peuvent mettre en péril votre confidentialité de navigation et informe des sociétés sur vos habitudes de consommation, celles-ci une fois analyser et défini entraînerons la diffusion de publicité personnalisé sur votre appareil pour vous inciter à l’achat. De plus une suraccumulation des données dans la mémoires caches peuvent engendrer un ralentissement au sein de votre appareil. De ce fait il important de nettoyer régulièrement les données de votre navigateur de votre ordinateur et de votre téléphone.
Depuis un ordinateur :
1. Sur Google Chrome :
Pour nettoyer son navigateur a partir de Google Chrome je vous invite a suivre les instruction qui suivent :
Tout d’abord veillez a ouvrir votre navigateur Google Chrome.
Ensuite cliquez sur les “trois petits points” aligné verticalement en haut a droite de votre écran ou sinon utilisez le raccourci CTRL + H.
Si vous n’avez pas utilisez le raccourci sélectionnez historique.
Par la suite la suite vous pourrez effacer l’historique de votre navigateur de deux façons différentes : soit vous désirez effacer des pages spécifiques et vous pourrez utiliser la méthode 1, sinon si c’est un nettoyage complet que vous voulez je vous conseille donc d’utilisez la méthode 2.
méthode 1
Étapes
Images
Cochez les casses qui se trouvent à cotés des pages visités que vous voulez supprimer.
:
Sélectionnez Supprimer en haut a droite de votre écran.
:
Confirmer la suppression en cliquant sur Supprimer.
:
méthode 2
Étapes
Images
Sélectionnez effacer les données de navigation
:
Dans Général, sélectionnez les rubriques que vous souhaitez effacer
:
Si vous souhaitez avoir plus de détails cliquez sur Paramètres avancés en haut à droites du carré et cochez les rubriques que vous voulez effacer
:
Vous pouvez également choisir la période que vous voulez effacer en cliquant sur Période
:
Une fois que vous avez choisi les options qui vous conviennent appuyez sur effacer les données en bas à droite du petit carré au milieu de votre écran
:
2. Sur Firefox
Vous n’êtes pas un grand fan de Google Chrome et utilisé plutôt Firefox, ne vous en faites pas les explications qui suivent sont faites pour vous !
Commencez par ouvrir Firefox.
Cliquez ensuite sur la bibliothèque qui ressemble a plusieurs livres aligné verticalement en haut a droit de votre écran ou utilisez le raccourci CTRL + H.
Attention quand ce raccourci est utilisé sur Firefox il vous envoie directement sur le panneau de l’historique. Pour comprendre comment nettoyer Firefox a partir du panneau d’historique veilliez lire attentivement l’explication de la troisième méthode.
Sélectionnez Historique
Une fois que vous avez sélectionné historique selon ce que vous voulez nettoyer vous avez trois façons de procéder :
Première méthode :
Soit vous voulez effacer seulement quelques pages, dans ce cas cliquez sur la page que vous désirez effacer en appuyant sur le bouton droit de votre souris et ensuite sélectionnez Supprimer la page
Deuxième méthode :
Si vous voulez nettoyer beaucoup de données de Firefox, alors cliquez sur Effacer l’historique récent
Une nouvelle page va alors s’ouvrir où vous aurez la possibilité de choisir les rubriques que vous souhaitez nettoyer. Puis il ne vous restera plus qu’à cliquer sur Effacer maintenant pour les supprimer en bas a droite de la page.
Vous avez également une option disponible où vous pouvez choisir la période que vous voulez supprimer. Le bouton est en haut de la page et s’appelle intervalle à effacer.
Troisième méthode :
Cette méthode est utile si vous voulez nettoyer les données de certaines dates ou de certains sites internet spécifique. Commencer d’abord par cliquez sur Afficher le panneau de l’historique.
Ensuite cliquez avec le bouton droit de votre souris sur la date dont vous voulez nettoyer les données et sélectionnez Supprimer.
Vous pouvez également changer l’affichage de votre panneau de l’historique en appuyant sur Trier en haut du panneau de l’historique. Cela vous permettra de nettoyer vos données selon des thèmes différents tout en utilisant la même manipulation que celle de l’étapes précédente.
Depuis un iPhone sur safari :
Si vous possédez un iPhone et ne savez pas comment effacer vos données de navigation sur safari lisez bien l’explication qui suit !
Ouvrez tout d’abord l’application safari. Une fois cela réalisé faites glisser légèrement votre écran vers le bas, vous verrez ensuite apparaître en bas de votre écran une petite image en forme de livre sur laquelle vous allez appuyer.
Sélectionnez ensuite l’option avec une « horloge » dessus en haut à droite de l’écran.
Appuyez sur effacer en bas a droite de l’écran et sélectionnez l’option qui vous convient.
Vous pouvez également si vous le souhaité effacer des pages spécifiques que vous avez visités en les balayant vers la gauche.
Et voilà !!! J’espère que ce tutoriel vous auras été utile et que vous savez désormais comment nettoyer votre navigateur après une session de surf sur Google Chrome et Firefox depuis votre ordinateur et sur Safari depuis votre iPhone.
L’application Raccourcis est une application développée par Apple pour simplifier des tâches que des utilisateurs peuvent effectuer chaque jours ou bien régulièrement.
Cette application fonctionne très simplement, fonctionnement semblable au logiciel « Scratch », logiciel au programme du collège pour aborder la programmation de manière récréative.
Nous allons voir ensemble comment utiliser l’application par le biais d’un tutoriel pour créer un raccourcis bien utile quand la batterie est à sec, et par la suite créer vos propres raccourcis.
Nous allons voir ensemble comment fonctionne l’application en créant un raccourcis bien utile quand la batterie de son appareil est à sec, pour pouvoir par la suite créer vos propres raccourcis.
Une fois l’application téléchargée et ouverte, la page d’accueil est divisé en 3 partie : « Mes raccourcis » qui regroupe l’ensemble des raccourcis créés ou téléchargés, « Automatisation » qui sont des raccourcis qui s’effectuent seules, ce qui est utile par exemple pour effectuer des routines quotidienne (annoncer la météo de la journée et les RDV quand le réveil est désactivé), et enfin « Galerie » qui regroupe des raccourcis créés par Apple est mis à disposition pour tous.
Cette interface est celle sur iPad mais le principe est le même pour iPhone
A gauche se situe la bibliothèque des « actions » réalisables, elles sont classées en fonctions de leurs types (script, notification, texte…). A droite se situe l’éditeur de script (vide pour l’instant).
Créer un raccourcis
Maintenant que nous avons fait un rapide tour de l’interface, nous pouvons commencer à créer notre premier raccourcis. Une fois l’idée trouvée (pour nous ça sera un économiseur de batterie), nous pouvons donc donner un nom à notre raccourcis en appuyant sur « …« . Et comme nous pouvons le personnaliser, nous allons également changer l’icon et la couleur de fond, vous comprendrez pourquoi à la fin de ce tutoriel.
Maintenant que nous lui avons donné un nom il faut créer le script. Les morceaux script fonctionnent comme des « LEGO » à assembler.
Pour notre économiseur de batterie, nous voulons que quand nous le lançons, il y ai un signal sonore et un menu de confirmation. Il suffit de chercher les deux éléments dans la bibliothèque et de les assembler :
Pour le choix « Oui » nous allons mettre plusieurs actions qui modifient les réglages de l’appareil afin de conserver de la batterie un maximum de temps : désactiver le bluetooth, le Wi-Fi, les notifications, redéfinir la luminosité et activer le mode « économie d’énergie » (non disponible sur iPad).
Pour le choix « Non » nous allons simplement informer l’utilisateur qu’il va quitter le raccourcis avec une alerte sous la forme d’un « pop-up ».
Nous avons maintenant terminé le menu. A noter que le nombre de choix dans le menu est modifiable mais dans le cas présent nous avions besoin seulement de deux choix. Nous souhaitons ensuite informé l’utilisateur du pourcentage de batterie restante. Nous allons profiter de la recherche des fonctions dans la bibliothèque pour voir l’intérêt de faire des recherches pertinentes en cherchant non pas l’action en elle-même mais plutôt l’outil auquel elle va faire appelle.
Il suffit maintenant de configurer la fonction et d’y « emboîter » une alerte qui donne le pourcentage de batterie restante :
Nous ajoutons simplement une alerte sonore qui informe l’utilisateur que le script est terminé.
L’intérêt de personnaliser l’icon est qu’il est possible de la faire apparaître sur l’écran d’accueil de la même manière qu’une application téléchargeable sur l’App Store. Pour cela il suffit d’appuyer sur « Sur l’écran d’accueil«
L’intérêt
L’application raccourcis est utile pour tous les jours. De plus, non seulement elle « simplifie la vie » , mais les raccourcis créés peuvent aussi être modifiés aux goûts de l’utilisateur comme bon lui semble. Le raccourcis peut être lancer depuis une icon d’app, l’application raccourcis elle même mais aussi avec l’assistant vocal Siri. Voici quelques exemples de scripts qui peuvent être réalisés et qui peuvent peut-être donner de l’inspiration :
Ainsi qu’un exemple d’automatisation :
Le + et le –
Le + : de nombreux raccourcis sont disponibles dans la Galerie mais bien plus sont téléchargeables sur internet. Vous pouvez également les partager avec vos proches grâce à AirDrops entre plusieurs appareils Apple.
Le – : l’application Raccourcis est uniquement disponible sur iOS.
Banque d’idée
Vous ne verrez peut être pas tout de suite l’intérêt de perdre du temps à créer un script qui exécute une action que l’on peut faire seul même de temps en temps mais voilà une liste de raccourcis qui peuvent être créer :
télécharger une vidéo YouTube dans la pellicule photo
partager le mot de passe de la Wi-Fi sans le connaitre (mais en étant connecté)
compter la quantité de protéine mangée en une journée
calculer une promotion en % pendant les soldes
minuteur pour la musique
…
Mais bien sur je vous laisse chercher comment les créer…
Si tu es sur cet article cela veut sans doute dire que tu veux faire une vidéo pour immortaliser une de tes parties de jeux ou même la partager au monde entier. Dans cet article, nous allons voir deux façons de faire une vidéo de ton écran. Pour la première, il faut que ton ordinateur soit sous Windows 10 et pour la deuxième il faut juste installer une application, mais nous verrons cela un peu plus tard.
Cette méthode est la plus simple des deux car elle demande juste une commande qui est : Win + G. après avoir fait cette commande vous obtiendrez ceci :
pour le voir en plus grand il vous suffit de cliquer sur l’image.
de ces 5 fenêtres (rectangles noirs) celle qui nous intéresse est celle où l’on peut lire « capturer »
Cette fenêtre vous permet de faire trois types de capture d’écran :
la simple (appareil photo),
une capture vidéo des 30 dernières secondes (chronomètre)
et celle qui nous intéresse une fois commencer, l’enregistrement ne s’arrêtera que lorsque vous lui demanderez.
Lorsque vous lancez un enregistrement, vous avez une petite fenêtre qui apparaît en haut de votre écran, elle vous indique depuis combien de temps vous enregistrez
vous avez aussi la possibilité de mettre, ou non, le micro, pour que la vidéo capture également votre voix.
pour moi cette méthode est la plus simple à utiliser car elle n’a pas besoin de paramètres avancés.
2ème méthode : OBS Studio
Pour cette deuxième méthode, nous allons utiliser OBS Studio qui est un logiciel de vidéo et de Streaming.
Pour obtenir OBS rien de plus simple, il vous suffit de le télécharger sur le site.
Lorsque vous lancerez OBS vous arriverez sur cette fenêtre :
Ce logiciel est assez compliqué à utiliser, mais dès que l’on a rentré les paramètres de son ordinateur ils s’enregistrent et plus besoin de les ressaisir.
Le bon point que possède OBS studio est :
le fait d’avoir des raccourcis pour lancer un enregistrement ou un live.
conclusion
Nous pouvons en conclure que « OBS Studio » est plutôt orienté vers les personnes qui sont plus habituées aux applications comme celle-ci, tandis que la « xbox game bar » est plus destinée aux amateurs et aux débutants. Pour ma part je préfère la « xbox game bar » car elle est plus simple et plus pratique à utiliser que « OBS studio » .
J’espère que ce tutoriel vous aura aidé à trouver une méthode pour faire une vidéo de votre écran. Si vous avez besoin d’aide vous pouvez me le demander en commentaire.
Monter son ordinateur c’est bien beau, mais il faut aussi qu’il soit connecté a Internet ! Ce tutoriel va t’expliquer comment faire.
Si vous avez suivi mon précédent tutoriel, vous savez désormais monter un ordinateur vous même ! Pour les intéressés c’est ici ! Mais voilà, je vous vois bien vous asseoir derrière votre ordinateur fraîchement monté afin de “faire connaissance avec lui », voir toutes ses fonctionnalités, sa rapidité… bref, tout ce pourquoi vous avez sué à le monter ! Seul bémol…Mais…Vous n’avez pas internet ? D’accord vous avez une prise ethernet sur votre machine de compétition mais quand votre box se trouve à l’autre bout de votre lieux d’habitation, cela ne va pas suffire ! Il vous reste alors 2 choix envisageable : acheter 500m de fil ethernet et augmenter les chances de chutes de 75% dans votre maison, ou alors installer une dernière partie dans votre ordinateur qui vous permettra de contourner ce problème… Et comme ici, on aime pas trop que notre maison soient infesté de fils, je vais vous montrer comment connecter votre ordinateur à Internet chez vous autrement !
Les notions importantes à connaître afin de commencer sont celle de la signification des termes Mbps et GHz que vous retrouverez dans tous les modèles des composant que vous vous procurerez afin de “finaliser votre pc”.
Le Mbps signifie Megabit par seconde. C’est donc une unité de mesure correspondant à la vitesse de transfère des données sur Internet (le bit étant une unité élémentaire d’information). C’est à dire que plus cette valeur sera élevé, plus Internet ira vite. Cette valeur va donc être affiché sur tout les composant que vous allez utiliser pour connecter votre ordinateur à Internet. En général il va varier de 100 Mbps (débit assez faible, en général des produit à bas prix) à 2000 Mbps (débit exceptionnel, à ce niveau là votre ordi prévoit le futur tellement il va vite sur Internet ! Après il faut être prêt à payer cher…). Attention !La valeur présent sur ces appareils est la vitesse maximum atteinte par le produit ! En effet votre vitesse de connexion peut varier en fonction de la distance avec votre box, des interférence, de obstacles (mur épais…). Par exemple si vous décidez de prendre une clé Wifi de 300 Mbps et que vous êtes dans une des situations énoncé précédemment, vous risquez de vous retrouver avec une vitesse passable malgré tout !
Le GHz correspond au signal de votre box. Il a 2 “bandes” existante : la 2,4 GHz ou la 5 GHz . La première peut aller de 450 MBps (Note : 1 MBps= 1 MegaBytes par seconde, Bytes signifie octet en anglais et 1 octet= 8 bits donc 1 MegaBytes = 1 Mégaoctet = 8 Mégabits. La plupart des notices sont en anglais donc il est important de préciser cela. De plus 1 Mbps sera 1 Mpbs en anglais.) à 600 MBps. Les ondes 2,4 GHz sont plus longues que les ondes 5 GHz mais ce dernier peut monter jusqu’à 1300 MBps et donc permet d’avoir une connexion plus stable. Je vous conseille de vous renseigner sur quels signaux émet votre box. En effet les appareils peuvent ne pas atteindre la même vitesse en fonction de cela.
Votre choix entre les 3 méthode proposé juste après et entre les modèle que vous trouverez sur le marché dépendra donc sur l’accessibilité de votre box (mur épais ? distance ?), son signal et vos attentes en terme de rapidité. A ce moment la il faudra bien se renseigner sur ces valeurs afin que les résultats atteignent parfaitement vos attentes (oui en effet ça sent encore une fois le vécu !). Mais bon, trêve de mondanité, voici les différents moyen de doter votre pc de cette chose utile qu’est Internet !
Clé Wifi
La clé Wifi est un appareil qui a la forme d’une clé USB classique mais qui une fois installé et branché sur un périphérique USB, va vous permettre au point Wifi de la maison sans fil. Il existe des clé Wifi avec antenne qui vont mieux percevoir le Wifi et donc être plus efficace. C’est l’un des procédé le plus facile que nous allons voir ici car il est intuitif et ne demande pas de grandes connaissance en informatique. De plus, il est peu cher (entre 5€ pour le début de gamme et 30€ pour les plus performantes). Mais ses performances ne sont pas exceptionnel et je ne le conseille aux personne possédant un point Wifi éloigné ou des obstacles ralentissant les ondes Wifi sous peine que la clé capte difficilement ces ondes (surtout celles possédant des antennes internes).
L’installation d’une clé Wifi peut dépendre du modèle que vous aurez choisi, dans tous les cas une notice est la pour vous aider ! Mais sinon les moyens pour l’installer reposent principalement sur les mêmes étapes :
Il vous suffira d’installer le pilote de cette dernière et le logiciel associé (grâce au CD fourni avec le produit ou sur Internet si vous n’avez pas de lecteur CD et que vous pouvez le faire sur un autre ordinateur connecté à Internet).
Il ne vous restera plus qu’à brancher votre clé wifi et la “détection wifi” apparaîtra comme par magie ! Il faudra alors trouver votre point wifi et vous connecter.
Carte Wifi
La Carte Wifi, aussi appelé Carte réseau, est un composant interne de votre ordinateur (c’est à dire branché directement a la carte mère, mai spas si vous avez monté vous même votre ordinateur, cela va de soi !) qui va préparer, envoyer et contrôler les données sur le réseau. Comme prévu, cela va vous permettre d’avoir accès à Internet. C’est, comme la clé wifi, un composant qui va donner accès à Internet sans fils. Elle est incluse directement à la carte mère sur la plupart des ordinateurs portables. La Carte Wifi va aussi posséder plusieurs antennes (comme vous pouvez le voir sur la photo) qui vont servir à capter le signal Wifi. Donc plus votre carte wifi aura d’antenne, mieux elle captera votre signal internet. Elle va se brancher sur un port PCI express :
Il est donc nécessaire de bien vérifier que vous possédez un port libre et que votre processeur traite bien cette ligne PCI (exemple : si votre processeur traite 16 ligne PCI et que vous possédez 2 carte graphique prenant 8 lignes chacune, vous n’avez plus qu’à en enlevez une ou à passer aux moyens suivants). Vous pourrez vérifier cela sur Internet ou sur la notice de votre processeur. La Carte Wifi va vous permettre contrairement à la clé wifi de garder un port USB (si vous en possédez peu) et d’avoir (dans la plupart des cas) une connexion plus performante grâce aux multiples antennes et a une vitesse plus grande. Mais celle-ci reste plus cher (entre 10€ et 50€,voir plus pour une performance incroyable !) , demande un montage supplémentaire sur votre pc et possède certaines contraintes (comme énoncé plus tôt).
Important ! Pensez à enlever l’électricité statique avant le montage afin de ne pas faire de dégâts au niveau des composant de votre ordinateur. Pour cela touchez une surface métallique (radiateur, votre boitier…) avant de commencer les manipulation. Pour monter votre carte wifi il vous faudra :
Trouvez un port PCI libre. Si vous avez peur de vous tromper, n’hésitez surtout pas à consulter la notice de votre carte mère ! Faites en sorte que le placement soit stratégique !
Dévissez une partie de la grille. La partie métallique ira se loger ici.
Insérez la carte wifi de sorte à ce qu’elle rentre dans le port et PCI et que la partie métallique se retrouve à la place de la grille dévissé plus tôt.
Il ne vous reste plus qu’à revisser pour stabiliser la carte wifi et à visser les antennes.
Vous pouvez maintenant installer les drivers grâce au CD fourni (pensez à vérifier que le driver soit à jour) ou sur internet si vous n’avez pas de lecteur CD (a partir d’un autre ordinateur connecté à internet)
CPL
Le CPL (ou Courant porteur en ligne) consiste à construire un réseau informatique sur un réseau électrique. Le produit se résume en 2 boîtiers se branchant sur des prises électriques et possédant une prise ethernet. Le CPL va donc utiliser le réseau électrique, donc les câbles déjà existant dans la maison pour faire parvenir internet. C’est donc le seul procédé de ce tutoriel qui va bénéficier une connexion filaire, mais sans qu’un fil parcourt toute la maison ! Il n’y aura donc pas ou peu de problèmes de détection d’internet ce qui permettra d’avoir une vitesse normal ou maximum constamment, le transfert de données se faisant physiquement et non par des ondes. Le montage est aussi très intuitif et facile et en plus il ne demande pas de driver, ne faisant pas partie intégrante de l’ordinateur contrairement aux 2 précédent composants. Il a cependant certaines contrainte (prises électriques présente dans les pièces concernés et l’obligation de posséder au moins 2 câbles ethernet, mais celle-ci peuvent être fournies avec les boîtiers) et pour le prix il faut compter entre 20€ et environs 80€ pour les plus performant.
Le montage est extrêmement simple sachant de plus qu’il n’y a pas de drivers a installer, je ne sais pas si cette rubrique reste utile. Attention tout de même à ne pas brancher un les boîtiers sur des multiprises, cela pourrait être dangereux en plus de potentiellement ralentir votre vitesse de connexion ! Il faudra donc :
Brancher le premier boitier dans la pièce ou se trouve votre box
Relier la box au CPL grâce a un câble ethernet (de la prise ethernet de la box a la prise ethernet du boitier)
Brancher le 2e boitier dans la pièce ou vous aller utiliser votre ordinateur
Relier le CPL à votre ordinateur grâce a un câble ethernet (de la prise ethernet du boitier à la prise ethernet de votre ordinateur). Votre ordinateur est maintenant connecté à internet !
Voila donc 3 moyens de montrer la lumière d’internet a votre ordinateur ! Il ne vous reste plus qu’a vous adapter et a choisir votre moyen et votre modèle en fonction de votre situation, votre budget et vos connaissances !
Note : les images utilisé sont des captures d’écrans et des photographies faîte par moi-même
Pourquoi analyser les performances de son système est important ?
Ces informations vous permettent, par exemple, de connaître votre charge de travail et ses effets sur les ressources de votre système. Vous vous rendrez peut-être compte que la lenteur de votre ordinateur provient, par exemple, de la saturation de votre mémoire RAM et de l’utilisation de votre disque dur en renfort.
Pour observer les performances de votre pc en temps réel ce tutoriel, vous propose 2 options : Une première méthode plus simple et moins avancée qui ne nécessite pas d’installation tierce, et une deuxième méthode plus avancée utilisant un logiciel très complet.
1. Méthode simple mais moins complète.
Pour cette méthode aucune installation n’est requise il vous suffit d’ouvrir le « gestionnaire de tâches » de Windows, pour cela 2 manipulation sont possible :
Faire un clic droit sur le menu démarré puis sélectionnez « gestionnaire de tâches » comme cela :
Ou bien appuyer simultanément sur les touches CTRL+ALT+SUPPR de votre clavier :
Puis cliquer en suite sur « gestionnaire des tâches » :
Une fois dans le Gestionnaire des tâches il ne vous reste plus qu’a cliquer sur « plus de détails » en bas à gauche :
Et enfin cliquer sur l’onglet « performance » en haut dans la barres des tâches :
2. Méthode plus complexe mais plus complète.
Pour cette méthode un logiciel est requis mais vous aurez bien plus d’information sur votre système. En premier lieu il vous faut télécharger le logiciel CPU-Z
(Pour cela cliquer sur le lien hypertexte (CPU-Z), une fois sur le site cliquez sur le rectangle « DOAWNLOAD NOW ! » et suivez les instructions.)
Une fois le logiciel installé sur votre pc, vous pouvez l’exécuter et observer les performances de votre système en naviguant dans les différents onglets.
Attention ! pour lancer ce programme il vous faut l’exécuter en tant qu’administrateur soit « Accepter que ce logiciel apporte des modification à votre appareil » sinon le logiciel ne s’exécutera pas.
Voilà ! vous pouvez dès à présent analyser les performances de votre pc en toute simplicité… 👌
Ce tutoriel permet de faire une capture d’écran sur IPhone de différentes façons puis de la partager.
Faire une capture d’écran peut se révéler être très utile au quotidien mais beaucoup de personnes ne savent pas comment s’y prendre. Ce tutoriel va vous expliquer comment faire cette capture d’écran puis comment partager la avec d’autres personnes.
Voici donc la première méthode pour faire un screenshot (capture d’écran en anglais) avec les boutons de votre téléphone.
Cette méthode concerne les Iphones allant jusqu’au 8+, si votre téléphone est supérieur au 8+, veuillez descendre directement à la méthode 2.
Cette méthode concerne aussi les téléphones dont le bouton de veille n’est pas endommagé. Si ce n’est pas le cas, veuillez aller à la méthode 3.
Méthode 1 :
Cette méthode est très simple : il n’y a pas besoin d’aller chercher quelque chose dans votre téléphone, il vous suffit juste d’être sur la page ou l’image à capturer.
Ceci fait, il faut appuyer sur le bouton central de votre téléphone (en bas) et simultanément sur le bouton de veille qui est placé soit sur le coté droit de votre téléphone quand l’écran est placé face à vous, soit en haut de votre Iphone.
Veillez à appuyer simultanément sinon votre portable risque de s’éteindre.
La pression demandée est courte, il ne faut pas appuyer pendant longtemps, une pression normale suffit.
Cette méthode est utilisable par les Iphones 7 et 7+ bien que leur bouton central ne s’enfonce pas.
Méthode 2 :
Cette méthode est exactement la même que la méthode 1. Le changement est que les Iphones supérieurs au 8+ ne sont plus dotés de bouton central ; il vous faudra donc presser le bouton Volume +.
Lorsque vous êtes sur la page à capturer, il vous suffit de presser simultanément le bouton volume + et le bouton de veille qui est placé sur le coté droit de votre téléphone quand l’écran est placé face à vous.
Veillez à appuyer simultanément sinon votre portable risque de s’éteindre.
La pression demandée est courte, il ne faut pas appuyer pendant longtemps, une pression normale suffit.
Pour les téléphones dont les boutons fonctionnent mal, voici comment faire votre screenshot.
Méthode 3 :
Cette méthode est un peu plus compliquée car elle requiert d’aller dans le téléphone mais elle reste quand même accessible a tout le monde.
1. Allez dans votre menu Réglages
2. Allez dans Général
3. Puis allez dans Accessibilité
4. Descendez jusqu’à trouver AssistiveTouch puis cliquez
5. Faire glisser le bouton AssistiveTouch vers la droite de façon a ce qu’il devienne vert.
Vous verrez ensuite l’ AssistiveTouch apparaître sur votre écran.
1. Allez ensuite sur la page à capturer puis cliquez sur l’AssistiveTouch
2. Cliquez sur Appareil lorsque le menu apparaît
3. Ensuite allez dans Suite
4. Et finalement cliquez sur Capture d’écran
La ou les captures d’écran apparaîtront dans vos photos. Pour partager ces captures, vous pouvez soit les envoyer par mail ou MMS, sachant que les MMS ne sont pas illimités selon votre forfait téléphone et qu’il faut être connecter à internet pour envoyer un mail.
Méthode par mail
1. Il faut d’abord sélectionner les photos à envoyer
2. Ensuite cliquez sur l’icône en bas à gauche avec la flèche
3. Cliquez sur l’icône Mail
4. Rentrez l’adresse mail du destinataire en haut
Il reste à compléter l’objet, c’est à dire le sujet de votre mail. Pour commenter les photos ou tout simplement écrire un texte, il suffit de cliquer juste au dessus de la première photo.
Méthode par MMS
1. Il faut d’abord sélectionner les photos à envoyer
2. Ensuite cliquez sur l’icône en bas à gauche avec la flèche
3. Cliquez sur l’icône Messages
4. Rentrez le nom du contact ou son numéro de téléphone
Pour écrire un texte, il faut cliquer en dessous de la photo. Une barre bleu devrait apparaître sur un coté de la photo ; n’y prêtez pas attention et tapez votre message. Bien sûr, n’oubliez pas d’envoyer.
Il y a une autre méthode plus rapide mais vous ne pourrez l’utiliser que si votre destinataire possède lui aussi un Iphone de mise a jour supérieure à IOS 7.
Lorsque vos photos sont sélectionnées et que vous avez cliqué sur l’icône en bas avec la flèche, il faut que la ou les personnes à qui vous voulez envoyer vos captures aient activé leur Airdrop.
Pour activer l’Airdrop :
1. En allant dans Réglages
2. Ensuite dans Général
3. Cliquez sur Airdrop
4. Choisissez si tout le monde peut vous envoyer une photo ou seulement vos contacts, vous pourrez changer ce paramètre plus tard. (Pour désactiver l’Airdrop, cliquez sur Réception désactivée)
Lorsque le destinataire a activé Airdrop, il suffit d’attendre que son nom apparaisse à la place de l’icône Airdrop puis cliquez dessus. Le destinataire devra accepter vos photos.
Voici les méthodes pour capturer un écran puis comment partager cette capture.
Il existe bien sûr bien d’autres moyens de partager une capture d’écran mais ces autres méthodes peuvent avoir besoin d’autres outils tel qu’un ordinateur.
Ce tutoriel a pour but de vous permettre d’accélérer votre ordinateur lent avec n’importe quel budget.
Vous avez une chose à faire rapidement sur votre ordinateur et malheureusement vous savez qu’il va mettre 5 minutes à s’allumer et va bauger si vous allez trop vite, un réel calvaire (on sent l’expérience).
Alors une idée m’est venue, d’aider ces personnes pour leur simplifier la vie. Et bien sur, comme j’ai pensé à tous, je vais vous montrer 2 techniques pour 2 budgets différents et si vous voulez que votre ordinateur aille plus vite que la lumière vous pouvez bien-sur faire les 2 méthodes.
Méthode 1 :
La première méthode qui est totalement gratuite consiste à « nettoyer » l’ordinateur (je conseille de faire cette méthode à tout le monde).
Je vous conseille de nettoyer votre ordinateur car des applications ou fichier inutile vous prennent de la place sur votre disque dur et mémoire vive (RAM). En effet des programmes ont besoin d’emplacement pour stocker des fichiers pour fonctionner.
1- Entrer dans votre barre de recherches « gestionnaire des taches » et le choisir. Vous allez atterrir dans un document qui va vous indiquer les programmes qui sont les plus lourds et donc ceux qui prennent le plus de place.
Donc je vous conseille de désinstaller les plus lourds programmes pour libérer de la mémoire vive, si bien sur vous en avez pas l’utilité.
Dans un deuxième temps je vais vous montrer comment désinstaller une application inutile ou un programme trop lourd qui prend de la place sur votre mémoire RAM et votre disque dur.
2- Entrer dans la barre de recherches « ajouter ou supprimer des programmes » et le choisir. Vous allez atterrir sur toutes les applications de l’ordinateur pré installés ou installer par vous mêmes. Puis désinstaller les applications repérées. précédemment.
Normalement votre ordinateur devrait être moins lent qu’avant mais bien sur c’est une méthode gratuite donc moins efficace qu’une méthode payante. Maintenant à vous de juger si cette vitesse vous convient, sinon je vous conseille de suivre la méthode 2.
Méthode 2 :
La deuxième méthode va vous demander un léger investissement financier. Car le but de cette méthode est de changer les composants du PC qui deviennent vieux.
Je vous conseille de changer vos composants matériels de votre ordinateur car si votre ordinateur est lent, cela signifie que c’est un ordinateur ancien donc plus capable de supporter les derniers logiciels puissants. Donc le fait de changer vos composants va vous permettre de retrouver un ordinateur compétitif comme au début.
Pour cela je vous conseille de changer 3 composants en les remplaçant par 3 nouveaux plus compétitifs que ceux d’avant….sinon ce serait un peu bête.
Ces composants sont : – Une barrette de mémoire RAM avec plus de capacités qui va vous faire augmenter la vitesse de l’ordinateur. – Un disque dur SSD car ces disques durs ont une technique largement plus avancée que les disques dur HDD. – (En bonus) Le CPU qui est le processeur va vous permettre d’avoir une parfaite synchronisation entre le disque dur et la mémoire RAM.
Installer une mémoire RAM :
1-Tous d’abord il faut que vous choisissiez la mémoire RAM qui convient à votre ordinateur. Pour cela choisissez une mémoire RAM compatible avec votre carte mère et supportable pour l’ordinateur.
2-Après avoir ouvert le compartiment de l’ordinateur, repérer la mémoire RAM et écarter les 2 ergots autour de la barrette pour l’enlever, puis la retirer.
3-Prendre la nouvelle barrette de mémoire et l’insérer. Un détrompeur est présent sur la barrette pour ne pas se tromper de sens, puis appuyer jusqu’à entendre le clic des ergots.
A ce moment là la vitesse du PC sera encore un peu plus améliorée et la longévité aussi, cependant le pc ne va pas se transformer en pc gamer dernière génération. Pour encore plus optimiser le PC pourquoi pas installer un nouveau disque dur SSD.
Ce disque va optimiser la vitesse grâce à sa nouvelle technologie. En effet ce n’est plus un disque qui tourne mais un disque électronique.
Installer un disque dur SSD :
Tous d’abord avant de commencer, je vous conseille d’acheter un kit de migration qui possède un programme de clonage, pour vous permettre le transfert des données de l’ancien disque dur au nouveau.
Mais aussi de vous munir d’un disque dur SSD correspondant à votre ordinateur.
Tout d’abord je vais vous expliquer comment transférer les données d’un disque dur vers l’autre via le kit de migration.
1-Brancher votre nouveau SSD avec soit l’adaptateur USB, soit avec le boitier fournit, puis lancer le logiciel de clonage en insérant le CD fourni ou sinon si vous n’avez pas de lecteur, le télécharger via Windows. Si vous disposez de True Image HD sur CD et que votre ordinateur dispose d’un lecteur, il faut paramétrer le Bios de l’ordinateur pour qu’il démarre sur le CD avant de démarrer sur le disque dur. Puis le transfert s’établira tout seul.
Là nous venons de transférer les données donc le nouveau disque SSD est opérationnel. Maintenant il ne reste plus qu’à l’installer dans l’ordinateur.
2-Éteigner complètement l’ordinateur puis ouvrer le compartiment de l’ordinateur pour accéder au disque dur.
3-Enlever l’ancien disque dur de votre ordinateur. Pour l’enlever je vous conseille de suivre la notice de votre ordinateur car cela dépend du model.
4-Enfin introduire le nouveau disque dur SSD. Attention, les nouveaux SSD sont moins épais que les anciens disques durs. Donc les constructeurs ont prévu un petit boitier pour éviter d’avoir du jeu, ce qui permet de surélever légèrement le disque SSD. Mais il est possible que le constructeur ne l’ait pas prévu donc soit vous montez vous-mêmes un petit boitier ou sinon je vous laisse votre imagination faire le job.
A ce moment là votre ordinateur est d’une part rajeuni et d’autre part plus rapide. Donc vous pouvez si cela vous le convient vous arrêtez là. Mais moi je vous conseille un dernier petit « truc ». Ce petit « truc » est le CPU qui est le meneur de l’ordinateur. Il donne des ordres à chaque composant du PC donc va permettre une parfaite synchronisation entre le SSD est les cartes mémoire changées précédemment. Je vous conseille de le mettre à niveau.
Attention le processeur est à changer que si l’ordinateur date de moins de 5 ans sinon ce serait contre-productif. Mais je ne vais pas vous présenter la façon de le faire. Car les CPU des PC nouvelle génération sont soudés et donc inchangeables et de plus changer son processeur est complexe (mais bien sur pour ne pas décevoir les plus curieux, passionnés et déterminés, en annexe je vous donne quelques liens pour changer le processeur).
En résumer : Si vous voulez accélérer votre ordinateur : Nettoyer votre ordinateur Si cela ne vous convient pas, rajeunir son PC vous permettra de l’accélérer : Changer vos mémoires RAM grâces à des barrettes avec plus de capacité Passer du disque dur HDD au disque dur SSD grâce à la technologie nouvelle génération du SSD.
En espérant ne pas avoir oublié des détails dans les explications pour les manipulations et que votre PC ait gagné en vitesse.
N’oubliez pas d’aller voir mon projet fait sur du calcul mental en python.
Et je vous laisse avec quelques liens en complément à mon tutoriel.
N.B : Avant de manipuler l’intérieur de votre PC munissez vous d’un bracelet anti-statique ou frottez vos main avec du métal car à cause de l’électricité statique, au contact des mains tous les composants du PC peuvent griller.
Le site nsi42.net a pour vocation à héberger les sites internet des élèves, réalisés dans le cadre des cours de SNT (2nde) ou de spécialité NSI. Ce tutoriel explique comment accéder aux services offerts par ce serveur.
Ce tutoriel est destiné uniquement aux élèves du lycée Louis Pasteur, seuls nos élèves disposeront d’un compte sur le serveur nsi42.net
Pour rendre public un site web, il faut le déposer les fichiers HTML, CSS, JPG, etc … sur un serveur distant, connecté 24h/24 à internet, en utilisant un client FTP qui lui même utilise le protocole File Transfer Protocol (FTP)
Une fois déposé sur le serveur, votre site internet est visible depuis n’importe quel ordinateur connecté à internet.
Se connecter au serveur FTP du site nsi42.net
1. Télécharger le client FTP FileZilla
Recommandé : FileZilla_3.X.X_win64.zip
Attention : Il faut télécharger FileZilla Client et pas FileZilla serveur.
Une fois connecté, vous pouvez déposer vos fichiers sur le serveur. Un simple glisser / déposer fonctionnera.
Par défaut, et pour éviter les abus, l’espace maximal de stockage a été défini à 2000 MB par compte.
Nous vous rappelons que vous ne devez déposer aucun fichier protégé par des droits d’auteur sur le serveur.
Il est nécessaire que l’une des pages s’appelle index.html sinon n’importe quel visiteur pourra parcourir l’intégralité de l’arborescence des fichiers.
Il ne faut utiliser aucun caractère accentué, ni espace dans les noms des fichiers ou des dossiers.
Vérifier que vos fichiers sont bien en ligne
Vous pouvez vérifier que vos fichiers sont bien accessible en ligne à l’adresse suivante : https://nsi42.net/001/
Bien évidemment, vous devez remplacer 001 par votre identifiant numérique unique , il s’agit d’un nombre à trois chiffres.
Par défaut, et provisoirement votre site internet n’est pas accessible depuis un sous-domaine, ce sous domaine sera mis en place ultérieurement.
Nous vous proposerons alors de choisir le sous domaine, si votre site internet traite des pirates hackeurs célèbres, votre sous domaine pourra alors être : hackeurs.nsi42.net et un visiteur pourra accéder à votre site depuis cette adresse.
Pour que vous compreniez bien ces notions, le tableau récapitulatif ci dessous vous propose les 3 situations possibles :
L’utilisateur snowden.ed@nsi42.net existe, il dispose bien d’un espace sur le serveur, et pour l’instant il n’a placé aucun fichier index.html donc un visiteur peut parcourir l’arborescence des fichiers (dans le cas présent, aucun fichier n’a été déposé)
Le fichier index.html déposé sur le serveur via FTP est envoyé par le serveur au visiteur
Un des élèves de la spé NSI à activé son compte, déposé un fichier index.html et demandé un sous domaine du domaine nsi42.net
Si tu souhaites toi aussi avoir ton propre sous-domaine, il te faut attendre un peu que tes enseignants procèdent à la distribution, en général au mois de Janvier pour les élèves de 1ère. Inutile de les contacter par courriel, un lien dans le cours sur les interactions client-serveur te permettra de choisir ce sous domaine.
C’était il y a quelques semaines, je me baladais sur le Play Store en quête de divertissement quand j’ai trouvé la perle rare : une application de sudoku. Je m’y suis donc mis (je n’y avais jamais joué auparavant) et je me suis découvert une passion pour ce jeu mathématique.
Or, comme dit le proverbe :
Il faut être intelligemment paresseux.
J’ai donc réalisé un solveur de sudoku en Python, avec une interface graphique utilisateur (GUI).
Un script capable de résoudre n’importe quel sudoku, des plus simples aux plus complexes.
Cahier des charges :
Le programme doit résoudre n’importe quel sudoku.
Bien optimisé pour ne pas être trop gourmand en RAM et en mémoire.
Il doit présenter une interface graphique intuitive et plaisante :
Une grille bien dessinée et interactive.
La case survolée par la souris doit changer de couleur.
Il suffit d’appuyer sur une touche du pavé numérique pour entrer le chiffre et sur Effacer pour effacer.
Un bouton avec Entrée comme raccourcis pour résoudre le sudoku.
Réflexions :
La principale question est la suivante : Comment résout-on un Sudoku ? Après recherches personnelles puis, sur Internet, j’ai obtenu une liste de méthodes de recherches :
Par inclusion : Si une case admet une seule possibilité de nombre, alors ce nombre est solution.
Par exclusion : Si un secteur admet une seule case possible pour un nombre, alors ce nombre est solution. Est appelé secteur, une ligne, une colonne ou un carré.
Par paires exclusives : Si un couple de nombre (n,m) est possible sur deux cases d’un secteur, alors la probabilité qu’ils soient sur d’autres cases du secteur est de 0.
Par triplets exclusifs :
Triplet parfait : Comme pour les paires exclusives mais avec un triplet (n,m,k).
Triplet tronqué : Le triplet est présent sur deux cases et présente deux nombres du triplet sur une troisième.
Triplet doublement tronqué : Le triplet est présent sur une case et présente deux nombres du triplet sur deux autres.
Choix multiple (ou essais-erreur) : On teste une des possibilité d’une case présentant le moins de possibilité si et seulement si la grille est figée dans un état.
Programmation du moteur de résolution :
Pour bien programmer, il est important d’avoir les idées claires.
Aussi, j’ai commencé par m’occuper de toutes les méthodes de recherche en omettant l’essais-erreur. Car il faut être capable de résoudre les possibilité d’une grille avant de savoir si elle est figée…
Pour tout le script, grille est le tableau qui stocke la grille et grilleFinie celui qui stocke « l’état » des cases, c’est-à-dire, si leur valeur est solution de la case (True) ou non (False).
J’ai organisé mon travail en 3 parties :
Moteur principal
Recherche pour une case
Vérification
La fonction chercher()
La fonction solutions()
La fonction verifier()
La fonction verifier(l=0,c=0)
Commençons par la plus simple : cette fonction accepte deux paramètres qui représentent la ligne et la colonne dans la grille.
Si l == 0 et c == 0 (quand on écrit verifier()), alors la fonction vérifie toutes les cases de la grille. Pour tout vérifier, on suit la logique suivante pour chaque cases :
La case contient une liste
La case contient un entier
Si la liste contient 1 élément différent de 0 : Vrai
Si entier différent de 0 : Vrai
Si on donne des valeurs différentes à l et c, on vérifie juste la case en appliquant la logique précédente en voulant que la case contienne une liste.
Le code :
def verifier(l=0,c=0):
global grille,grilleFinie
if not l and not c:
for i in range(9):
for j in range(9):
if type(grille[i][j]) is list:
if len(grille[i][j]) == 1 and grille[i][j][0]:
grilleFinie[i][j] = True
grille[i][j] = grille[i][j][0]
else:
if grille[i][j] != 0:
grilleFinie[i][j] = True
else:
if type(grille[l][c]) is list:
if len(grille[l][c]) == 1 and grille[l][c][0]:
grilleFinie[l][c] = True
grille[l][c] = grille[l][c][0]
La fonction solutions(l,c,ites)
C’est la fonction la plus longue du script (un beau bébé de 131 lignes), cette fonction applique un certain nombre d’opérations sur une case et ses 3 secteurs.
Cette fonction prend en compte trois paramètres obligatoires :
l pour la ligne de la case
c pour la colonne de la case
ites pour le nombre d’itérations dans la couche de récursion (voir fonction chercher())
Dans un premier temps, il faut savoir dans quel carré se situe la case, et pour ça, on a besoin de deux lignes :
lc = l in [0,1,2] and [0,1,2] or l in [3,4,5] and [3,4,5] or l in [6,7,8] and [6,7,8]
cc = c in [0,1,2] and [0,1,2] or c in [3,4,5] and [3,4,5] or c in [6,7,8] and [6,7,8]
On pourrait décomposer chacune de ces lignes en 6 lignes pour mieux comprendre :
lc = l in [0,1,2] and [0,1,2] or l in [3,4,5] and [3,4,5] or l in [6,7,8] and [6,7,8]
# Est strictement equivalent à :
if l in [0,1,2]:
lc = [0,1,2]
elif l in [3,4,5]:
lc = [3,4,5]
elif l in [6,7,8]:
lc = [6,7,8]
# Avec : l in [0,1,2] ssi 0 <= l <= 2
Intéressons nous maintenant aux méthodes de recherche : Elles ne s’activerons que si la case de grilleFinie correspondante contient False.
Par inclusion :
Si nous sommes sur la première itération de la couche, on affecte à la case une liste contenant tout les nombre de 1 à 9, on supprimera au fur et à mesure les issues impossibles.
Ensuite, pour chaque case (i,j) avec (i,j) != (l,c) de chaque secteur :
Si la case contient un entier : On supprime, s’il est dedans, le nombre de la liste des issues possibles.
Si la case contient une liste : On la passe.
Ainsi, on supprime toute les valeurs qui ne sont pas solution.
Le code :
if not grilleFinie[l][c]:
if not ites:
grille[l][c] = [1,2,3,4,5,6,7,8,9]
for k in range(9):
if grilleFinie[l][k] and grille[l][k] in grille[l][c] and k != c:
grille[l][c].remove(grille[l][k])
if grilleFinie[k][c] and grille[k][c] in grille[l][c] and k != l:
grille[l][c].remove(grille[k][c])
for i in lc:
for j in cc:
if grilleFinie[i][j] and grille[i][j] in grille[l][c] and (i,j) != (l,c):
grille[l][c].remove(grille[i][j])
verifier(l,c)
Par exclusion :
Il faut que cette méthode se déclenche après une itération car toute les listes d’issues probables doivent être définies.
Cette méthode est en deux parties :
Pour chaque nombre contenus dans la liste des possible, on :
Compte le nombre d’apparition du nombre dans chaque secteur
Si le nombre n’apparaît pas, il est solution car sa probabilité d’être solution est 1
Une fois qu’on a trouvé la solution, il est important de supprimer la possibilité dans les autres secteurs (si un seul secteur permet de déduire la solution, il faut « débloquer » les autres)
Ainsi, on code :
if not grilleFinie[l][c] and ites:
for nb in grille[l][c]:
compteur = [0,0,0]
for k in range(9):
if not grilleFinie[l][k] and k != c:
for n in grille[l][k]:
compteur[0] += int(n == nb)
if not grilleFinie[k][c] and k != l:
for n in grille[k][c]:
compteur[1] += int(n == nb)
for i in lc:
for j in cc:
if not grilleFinie[i][j] and (i,j) != (l,c):
for n in grille[i][j]:
compteur[2] += int(n == nb)
if compteur[0] == 0 or compteur[1] == 0 or compteur[2] == 0:
grilleFinie[l][c] = True
grille[l][c] = nb
for k in range(9):
if not grilleFinie[l][k] and grille[l][c] in grille[l][k] and k != c:
grille[l][k].remove(grille[l][c])
if not grilleFinie[k][c] and grille[l][c] in grille[k][c] and k != l:
grille[k][c].remove(grille[l][c])
for i in lc:
for j in cc:
if not grilleFinie[i][j] and grille[l][c] in grille[i][j] and (i,j) != (l,c):
grille[i][j].remove(grille[l][c])
break
Attardons-nous sur deux points importants :
compteur[x] += int(n == nb)
Cette ligne permet de coder la condition et le compteur sur la même ligne. En effet, si la condition retourne True, alors le compteur gagne 1, sinon, il gagne 0, ce qui est exactement ce qu’on veut.
break
A la fin du code, le break est nécessaire car il permet de ne pas faire planter le programme. En effet, la boucle parente (c’est-à-dire, celle la « plus proche ») du break est :
Une fois qu’on a trouvé la solution, il ne faut plus chercher, donc arrêter la boucle avec un break.
Par paires exclusives :
Le « principe » est le même : la méthode ne se déclenche qu’après une itération et on observe les 3 secteurs de la case.
Il faut que la case contienne une liste de 2 de longueur.
Pour les paires, c’est assez simple, il s’agit de vérifier si la même paire est présente sur une autre case, et si oui, éliminer les composantes de la paire dans les autres cases du secteur concerné.
Ainsi, on code :
if not grilleFinie[l][c] and ites and len(grille[l][c]) == 2:
existe = [False,False,False]
for k in range(9):
if not grilleFinie[l][k] and grille[l][k] == grille[l][c] and k != c:
existe[0] = True
if not grilleFinie[k][c] and grille[k][c] == grille[l][c] and k != l:
existe[1] = True
for i in lc:
for j in cc:
if not grilleFinie[i][j] and grille[i][j] == grille[l][c] and (i,j) != (l,c):
existe[2] = True
if existe[0]:
for k in range(9):
if not grilleFinie[l][k] and grille[l][k] != grille[l][c]:
for n in grille[l][k]:
if n in grille[l][c]:
grille[l][k].remove(n)
if existe[1]:
for k in range(9):
if not grilleFinie[k][c] and grille[k][c] != grille[l][c]:
for n in grille[k][c]:
if n in grille[l][c]:
grille[k][c].remove(n)
if existe[2]:
for i in lc:
for j in cc:
if not grilleFinie[i][j] and grille[i][j] != grille[l][c]:
for n in grille[i][j]:
if n in grille[l][c]:
grille[i][j].remove(n)
Ici, pas de nouvelles astuces de programmation, juste beaucoup de boucles et conditions imbriquées.
Par triplet exclusifs :
C’est ici que les choses se corsent… On note que c’est la partie la plus longue de la fonction, faisant 42 lignes.
En effet, même si on applique le même principe que pour les paires, il faut aussi permettre au programme de détecter quand les triplets ne sont pas complets (cf début de l’article).
Il faut que la case contienne une liste de 3 de longueur.
Partie 1 : La recherche du triplet, quel qu’il soit
existe = [[],[],[]]
decompo = [[grille[l][c][0],grille[l][c][1]],[grille[l][c][1],grille[l][c][2]],[grille[l][c][0],grille[l][c][2]]]
for k in range(9):
if not grilleFinie[l][k] and k != c and (grille[l][k] == grille[l][c] or grille[l][k] in decompo):
existe[0].append(grille[l][k])
if not grilleFinie[k][c] and k != l and (grille[k][c] == grille[l][c] or grille[k][c] in decompo):
existe[1].append(grille[k][c])
for i in lc:
for j in cc:
if not grilleFinie[i][j] and (i,j) != (l,c) and (grille[i][j] == grille[l][c] or grille[i][j] in decompo):
existe[2].append(grille[i][j])
Qu’est-ce qu’il se passe ?
Pour commencer, on organise notre pensée :
existe
decompo
Liste contenant une liste des triplets/couples correspondant à la condition
Liste contenant les couples possibles à partir du triplet de départ [a,b,c] => [a,b],[b,c],[a,c]
Ensuite, pour chaque case de chaque secteur, on regarde si :
La case contient le triplet souhaité
La case contient un des couples de decompo
A l’aide de la condition suivante :
(grille[k][c] == grille[l][c] or grille[k][c] in decompo
Partie 2 : La vérification du triplet
for k in range(3):
triplet = []
if len(existe[k]) == 2:
for i in [0,1]:
for n in existe[k][i]:
if n not in triplet:
triplet.append(n)
if triplet != grille[l][c]:
existe[k] = False
else:
existe[k] = False
Qu’est-ce qu’il se passe ?
Pour chaque secteur :
On vérifie qu’il y ait bien existence de 2 éléments. On vérifie ensuite que les éléments présents dans les couples/triplets donne bien le triplet de départ (afin d’éviter que les paires ne s’immiscent et créent des erreurs).
Si une de ces condition n’est pas respectée, existe devient False pour le secteur concerné.
Partie 3 : Suppression des possibilités dans les autres cases
C’est comme pour les paires exclusives à la différence près que l’on doit également vérifier que les autres cases ne contiennent pas un des couples de existe.
Code final :
if not grilleFinie[l][c] and ites and len(grille[l][c]) == 3:
existe = [[],[],[]]
decompo = [[grille[l][c][0],grille[l][c][1]],[grille[l][c][1],grille[l][c][2]],[grille[l][c][0],grille[l][c][2]]]
for k in range(9):
if not grilleFinie[l][k] and k != c and (grille[l][k] == grille[l][c] or grille[l][k] in decompo):
existe[0].append(grille[l][k])
if not grilleFinie[k][c] and k != l and (grille[k][c] == grille[l][c] or grille[k][c] in decompo):
existe[1].append(grille[k][c])
for i in lc:
for j in cc:
if not grilleFinie[i][j] and (i,j) != (l,c) and (grille[i][j] == grille[l][c] or grille[i][j] in decompo):
existe[2].append(grille[i][j])
for k in range(3):
triplet = []
if len(existe[k]) == 2:
for i in [0,1]:
for n in existe[k][i]:
if n not in triplet:
triplet.append(n)
if triplet != grille[l][c]:
existe[k] = False
else:
existe[k] = False
if existe[0]:
for k in range(9):
if not grilleFinie[l][k] and grille[l][k] != grille[l][c] and grille[l][k] not in existe[0]:
for n in grille[l][k]:
if n in grille[l][c]:
grille[l][k].remove(n)
if existe[1]:
for k in range(9):
if not grilleFinie[k][c] and grille[k][c] != grille[l][c] and grille[k][c] not in existe[1]:
for n in grille[k][c]:
if n in grille[l][c]:
grille[k][c].remove(n)
if existe[2]:
for i in lc:
for j in cc:
if not grilleFinie[i][j] and grille[i][j] != grille[l][c] and grille[i][j] not in existe[2]:
for n in grille[i][j]:
if n in grille[l][c]:
grille[i][j].remove(n)
La fonction chercher(ee=0,ite=0)
Cette fonction est une fonction récursive, c’est-à-dire, capable de se lancer elle-même pour résoudre des problèmes plus complexes.
La première partie est juste une déclaration de variables suivie d’un affichage console d’un arbre :
global grilleFinie,grille
iterations = 0
grilleTest = [[0]*9 for n in range(9)]
grilleBack = [[0]*9 for n in range(9)]
cellBack = [0,0,9,[]]
if ee:
print(ite,"iter"+"s"*(ite!=1))
print(" "*(ee-1)+"|"*(ee!=0)+"_ couche",ee,end=" => ")
On retrouve ici les astuces avec les conditions pour afficher ou non certains caractères. En python, « x »*5 retourne « xxxxx », ainsi, « x »*0 retourne « »
Tableau des variables :
grilleTest
grilleBack
cellBack
Sauvegarde de la grille avant fonction solutions()
Sauvegarde de la grille avant récursion
Sauvegarde de la case modifiée pour essais-erreur
On aborde ensuite une boucle do…while. Petit problème, elles n’existent pas en python, il est donc nécessaire de la recréer. Et pour ça, on écrit une boucle infinie (un while toujours vrai) avec la condition contenant un break ou un return (qui arrête la fonction et non la boucle).
Voici donc la base :
while "solution non determinee":
grilleTest = copie(grille)
for i in range(9):
for j in range(9):
solutions(i,j,iterations)
if grilleFinie == [[True]*9 for n in range(9)]:
print(iterations,"iter"+"s"*(iterations!=1))
affG()
return True
A cause d’un bug incompréhensible, j’ai du recréer la méthode .copy() des liste, d’où la fonction copie()
Ce système est déjà capable de résoudre jusqu’aux sudokus « difficiles » de certaines applications et revues.
Pourquoi un return True et pas un break ?
Notre récursion fonctionne sur une condition (remplie pour rappel, uniquement si la grille est « figée ») que voici :
if grilleTest == grille:
grilleBack = copie(grille)
for i in range(9):
for j in range(9):
if not grilleFinie[i][j] and cellBack[2] > len(grille[i][j]):
cellBack = [i,j,len(grille[i][j]),grille[i][j]]
for n in cellBack[3]:
grille[cellBack[0]][cellBack[1]] = n
if chercher(ee+1,iterations):
return True
else:
grilleFinie = [[False]*9 for n in range(9)]
grille = copie(grilleBack)
verifier()
return False
else:
iterations += 1
Elle est organisée en 3 parties distinctes :
On commence par faire une sauvegarde de la grille.
On sélectionne la case avec le moins de possibilité de réponses, on garde ses coordonnées et son contenu.
Pour chaque possibilité, on lance la fonction en couche n+1.
Si la fonction renvoie True (d’où le return True), on renvoie True Cela permet de tuer les fonctions enfants d’un coup.
Sinon, on remet la grille dans l’état sauvegardé.
Si toutes les possibilités sont testés et qu’aucune solution n’est trouvé, on renvoie False.
Seulement, il nous manque une dernière chose : Que se passe t’il si le programme attribue une mauvaise solution pour une case ?
Il se trouve que, quand il se trompe, le programme finit par attribuer des listes vides à des cases (car la résolution rend impossible la possibilité d’un nombre sur la case), il suffit de donc de détecter ces cases avant de vérifier que la grille soit « figée ».
for i in range(9):
for j in range(9):
if grille[i][j] == []:
return False
Programmation du moteur graphique :
Comme vous pouvez le remarquer, on observe que le texte d’aide nous explique d’appuyer sur des touches, et oui : pour la GUI, il faut faire de la programmation événementielle !
A savoir :
J’ai nommé ma fenêtre fenetre et mon canevas (support pour le graphisme) interface.
J’ai crée un tableau cases des ID des cases et un tableau textCase associé.
Cet attribut pour les cases activefill="#e0e0e0" permet d’avoir les cases grisées au survol de la souris.
La fonction event(touche)
Cette fonction est la fonction liée à la fenêtre par fenetre.bind("<Key>",event) ce qui veut dire que quand on va appuyer sur une touche, les informations vont être envoyées à la fonction (d’où le paramètre touche).
touche est un objet contenant plusieurs variables, on s’intéresse à la variable keysym (le nom en clair de la touche), ainsi : toucheK = touche.keysym
Commençons par le plus simple :
if toucheK == "Return":
chercher()
if toucheK == "Delete":
nouv()
# La fonction nouv()
def nouv():
global grille,grilleFinie,textCase
grille = [[0]*9 for n in range(9)]
grilleFinie = [[False]*9 for n in range(9)]
textCase = [[False]*9 for n in range(9)]
interface.delete("case")
Si j’appuie sur Entrer, je commence la recherche, sur Suppr, j’efface tout.
Maintenant, le plus intéressant, si je veux ajouter un chiffre.
Voici le code :
if toucheK in "123456789":
eff = False
if interface.type(interface.find_closest(touche.x,touche.y)[0]) == "text" and interface.itemcget(interface.find_closest(touche.x,touche.y)[0],"tags") != "i current":
interface.delete(interface.find_closest(touche.x,touche.y)[0])
eff = True
for i in range(9):
for j in range(9):
if interface.find_closest(touche.x,touche.y)[0] == cases[i][j]:
if not eff and not grille[i][j]:
grille[i][j] = int(toucheK)
if eff:
grille[i][j] = int(toucheK)
textCase[i][j] = False
break
if interface.find_closest(touche.x,touche.y)[0] == cases[i][j]:
break
affG(i,j,toucheK)
Ce script commence par détecter s’il y a un chiffre sur la case et si oui, il le supprime.
Le script cherche ensuite à quelle case correspond les coordonnées de l’événement. Une fois trouvées, s’il n’a rien effacée et que la case est vide, il la remplit, s’il a effacé un nombre, il change la valeur de la case et précise qu’il n’y a pas de nombre.
Enfin, les deux break permettent de sortir des deux boucles. Nous verrons après la fonction affG.
Si je veux enlever un chiffre, il suffit d’appuyer sur Effacer pour lancer ce code :
if toucheK == "BackSpace":
if interface.type(interface.find_closest(touche.x,touche.y)[0]) == "text" and interface.itemcget(interface.find_closest(touche.x,touche.y)[0],"tags") != "i current":
interface.delete(interface.find_closest(touche.x,touche.y)[0])
for i in range(9):
for j in range(9):
if interface.find_closest(touche.x,touche.y)[0] == cases[i][j]:
grille[i][j] = 0
textCase[i][j] = False
break
if interface.find_closest(touche.x,touche.y)[0] == cases[i][j]:
break
Ce code est très similaire à celui de l’ajout d’un nombre.
La fonction affG(x=-1,y=-1,nb=-1)
Quand on observe la fonction, deux choses sont frappantes : les lignes 7 et 11.
def affG(x=-1,y=-1,nb=-1):
global textCase,cases
if (x,y) == (-1,-1):
for x in range(9):
for y in range(9):
if not textCase[x][y]:
interface.create_text((interface.coords(cases[x][y])[0]+interface.coords(cases[x][y])[2])//2,(interface.coords(cases[x][y])[1]+interface.coords(cases[x][y])[3])//2,anchor="center",text=str(grille[x][y]),font=("Helvetica","16","bold"),fill="#0f0fa0",tags="case")
else:
if not textCase[x][y]:
textCase[x][y] = True
interface.create_text((interface.coords(cases[x][y])[0]+interface.coords(cases[x][y])[2])//2,(interface.coords(cases[x][y])[1]+interface.coords(cases[x][y])[3])//2,anchor="center",text=nb,font=("Helvetica","16","bold"),tags="case")
Ces lignes positionne un texte au milieu de la case correspondante en lui ajoutant un tag (une étiquette) : « case ». On remarque que quand x = y = -1, les nombres sont ajoutés en #0f0fa0.
Ce tag permet à la fonction nouv() de pouvoir supprimer tout les textes en une ligne.
Conclusion :
Notre programme est doté d’une interface graphique agréable permettant de bien visualiser nos sudoku pour les rentrer de façon intuitive. Notre cahier des charges semble être respecté.
Mais l’est-il vraiment ?
Il nous reste à vérifier s’il est capable de résoudre n’importe quel sudoku. Pour cela, je pars du principe suivant :
Qui peut le plus, peut le moins.
Ainsi, je décide de l’essayer avec Al Escargot, le sudoku le plus difficile du monde.
Pour ordre d’idée, il est classé 100 étoiles (contre 7 max pour ceux de revues) soit 5000 coups pour le résoudre, ce qui équivaut à environ 3 jours pour un habitué.
On entre donc la grille :
Après moins d’une seconde :
On remarque l’arbre en retour discret sur notre IDE :
Notre solveur remplit parfaitement ses fonction !
Code complet :
Voici le code complet, en téléchargeable puis en texte :
# Solveur de Sudoku
# par Fedyna K.
from tkinter import Tk,Canvas
# GUI
fenetre = Tk()
fenetre.title("Solveur de Sudoku - NSI")
fenetre.resizable(False,False)
interface = Canvas(fenetre,width=400,height=500,bg="white")
interface.pack()
interface.create_text(5,400,anchor="nw",text="Pour ajouter un chiffre, survolez la case correspondante et appuyez sur\nle pavé numérique.",tags="i")
interface.create_text(5,435,anchor="nw",text="Pour supprimer un chiffre, survolez la case et appuyez sur 'Effacer'.",tags="i")
interface.create_text(5,455,anchor="nw",text="Pour résoudre la grille, appuyez sur 'Entrer'.",tags="i")
interface.create_text(5,480,anchor="nw",text="Pour tout effacer, appuyez sur 'Suppr'.",tags="i")
interface.create_rectangle(12,7,15,379,fill="black")
interface.create_rectangle(381,7,384,379,fill="black")
interface.create_rectangle(12,7,384,10,fill="black")
interface.create_rectangle(12,376,384,379,fill="black")
cases = [[0]*9 for n in range(9)]
textCase = [[False]*9 for n in range(9)]
ic = 0
ie = 0
for i in range(15,369,40):
jc = 0
je = 0
for j in range(10,364,40):
cases[jc][ic] = interface.create_rectangle(i+ie,j+je,i+ie+40,j+je+40,fill="white",activefill="#e0e0e0")
jc += 1
if jc in [3,6]:
interface.create_rectangle(12,j+43+je,384,j+40+je,fill="black")
je += 3
ic += 1
if ic in [3,6]:
interface.create_rectangle(i+43+ie,7,i+ie+40,379,fill="black")
ie += 3
def event(touche):
global grille,textCase,cases
toucheK = touche.keysym
if toucheK in "123456789":
eff = False
if interface.type(interface.find_closest(touche.x,touche.y)[0]) == "text" and interface.itemcget(interface.find_closest(touche.x,touche.y)[0],"tags") != "i current":
interface.delete(interface.find_closest(touche.x,touche.y)[0])
eff = True
for i in range(9):
for j in range(9):
if interface.find_closest(touche.x,touche.y)[0] == cases[i][j]:
if not eff and not grille[i][j]:
grille[i][j] = int(toucheK)
if eff:
grille[i][j] = int(toucheK)
textCase[i][j] = False
break
if interface.find_closest(touche.x,touche.y)[0] == cases[i][j]:
break
affG(i,j,toucheK)
if toucheK == "Return":
chercher()
if toucheK == "Delete":
nouv()
if toucheK == "BackSpace":
if interface.type(interface.find_closest(touche.x,touche.y)[0]) == "text" and interface.itemcget(interface.find_closest(touche.x,touche.y)[0],"tags") != "i current":
interface.delete(interface.find_closest(touche.x,touche.y)[0])
for i in range(9):
for j in range(9):
if interface.find_closest(touche.x,touche.y)[0] == cases[i][j]:
grille[i][j] = 0
textCase[i][j] = False
break
if interface.find_closest(touche.x,touche.y)[0] == cases[i][j]:
break
def affG(x=-1,y=-1,nb=-1):
global textCase,cases
if (x,y) == (-1,-1):
for x in range(9):
for y in range(9):
if not textCase[x][y]:
interface.create_text((interface.coords(cases[x][y])[0]+interface.coords(cases[x][y])[2])//2,(interface.coords(cases[x][y])[1]+interface.coords(cases[x][y])[3])//2,anchor="center",text=str(grille[x][y]),font=("Helvetica","16","bold"),fill="#0f0fa0",tags="case")
else:
if not textCase[x][y]:
textCase[x][y] = True
interface.create_text((interface.coords(cases[x][y])[0]+interface.coords(cases[x][y])[2])//2,(interface.coords(cases[x][y])[1]+interface.coords(cases[x][y])[3])//2,anchor="center",text=nb,font=("Helvetica","16","bold"),tags="case")
fenetre.bind("<Key>",event)
# Moteur de resolution
def nouv():
global grille,grilleFinie,textCase
grille = [[0]*9 for n in range(9)]
grilleFinie = [[False]*9 for n in range(9)]
textCase = [[False]*9 for n in range(9)]
interface.delete("case")
def solutions(l,c,ites):
global grille,grilleFinie
verifier()
lc = l in [0,1,2] and [0,1,2] or l in [3,4,5] and [3,4,5] or l in [6,7,8] and [6,7,8]
cc = c in [0,1,2] and [0,1,2] or c in [3,4,5] and [3,4,5] or c in [6,7,8] and [6,7,8]
# Methode de recherche : Inclusion
if not grilleFinie[l][c]:
if not ites:
grille[l][c] = [1,2,3,4,5,6,7,8,9]
for k in range(9):
if grilleFinie[l][k] and grille[l][k] in grille[l][c] and k != c:
grille[l][c].remove(grille[l][k])
if grilleFinie[k][c] and grille[k][c] in grille[l][c] and k != l:
grille[l][c].remove(grille[k][c])
for i in lc:
for j in cc:
if grilleFinie[i][j] and grille[i][j] in grille[l][c] and (i,j) != (l,c):
grille[l][c].remove(grille[i][j])
verifier(l,c)
# Methode de recherche : Exclusion (ap 1 iteration)
if not grilleFinie[l][c] and ites:
for nb in grille[l][c]:
compteur = [0,0,0]
for k in range(9):
if not grilleFinie[l][k] and k != c:
for n in grille[l][k]:
compteur[0] += int(n == nb)
if not grilleFinie[k][c] and k != l:
for n in grille[k][c]:
compteur[1] += int(n == nb)
for i in lc:
for j in cc:
if not grilleFinie[i][j] and (i,j) != (l,c):
for n in grille[i][j]:
compteur[2] += int(n == nb)
if compteur[0] == 0 or compteur[1] == 0 or compteur[2] == 0:
grilleFinie[l][c] = True
grille[l][c] = nb
for k in range(9):
if not grilleFinie[l][k] and grille[l][c] in grille[l][k] and k != c:
grille[l][k].remove(grille[l][c])
if not grilleFinie[k][c] and grille[l][c] in grille[k][c] and k != l:
grille[k][c].remove(grille[l][c])
for i in lc:
for j in cc:
if not grilleFinie[i][j] and grille[l][c] in grille[i][j] and (i,j) != (l,c):
grille[i][j].remove(grille[l][c])
break
# Methode de recherche : Paires exclusives
if not grilleFinie[l][c] and ites and len(grille[l][c]) == 2:
existe = [False,False,False]
for k in range(9):
if not grilleFinie[l][k] and grille[l][k] == grille[l][c] and k != c:
existe[0] = True
if not grilleFinie[k][c] and grille[k][c] == grille[l][c] and k != l:
existe[1] = True
for i in lc:
for j in cc:
if not grilleFinie[i][j] and grille[i][j] == grille[l][c] and (i,j) != (l,c):
existe[2] = True
if existe[0]:
for k in range(9):
if not grilleFinie[l][k] and grille[l][k] != grille[l][c]:
for n in grille[l][k]:
if n in grille[l][c]:
grille[l][k].remove(n)
if existe[1]:
for k in range(9):
if not grilleFinie[k][c] and grille[k][c] != grille[l][c]:
for n in grille[k][c]:
if n in grille[l][c]:
grille[k][c].remove(n)
if existe[2]:
for i in lc:
for j in cc:
if not grilleFinie[i][j] and grille[i][j] != grille[l][c]:
for n in grille[i][j]:
if n in grille[l][c]:
grille[i][j].remove(n)
# Methode de recherche : Triplets exculsifs (hors triplet induit)
if not grilleFinie[l][c] and ites and len(grille[l][c]) == 3:
existe = [[],[],[]]
decompo = [[grille[l][c][0],grille[l][c][1]],[grille[l][c][1],grille[l][c][2]],[grille[l][c][0],grille[l][c][2]]]
for k in range(9):
if not grilleFinie[l][k] and k != c and (grille[l][k] == grille[l][c] or grille[l][k] in decompo):
existe[0].append(grille[l][k])
if not grilleFinie[k][c] and k != l and (grille[k][c] == grille[l][c] or grille[k][c] in decompo):
existe[1].append(grille[k][c])
for i in lc:
for j in cc:
if not grilleFinie[i][j] and (i,j) != (l,c) and (grille[i][j] == grille[l][c] or grille[i][j] in decompo):
existe[2].append(grille[i][j])
for k in range(3):
triplet = []
if len(existe[k]) == 2:
for i in [0,1]:
for n in existe[k][i]:
if n not in triplet:
triplet.append(n)
if triplet != grille[l][c]:
existe[k] = False
else:
existe[k] = False
if existe[0]:
for k in range(9):
if not grilleFinie[l][k] and grille[l][k] != grille[l][c] and grille[l][k] not in existe[0]:
for n in grille[l][k]:
if n in grille[l][c]:
grille[l][k].remove(n)
if existe[1]:
for k in range(9):
if not grilleFinie[k][c] and grille[k][c] != grille[l][c] and grille[k][c] not in existe[1]:
for n in grille[k][c]:
if n in grille[l][c]:
grille[k][c].remove(n)
if existe[2]:
for i in lc:
for j in cc:
if not grilleFinie[i][j] and grille[i][j] != grille[l][c] and grille[i][j] not in existe[2]:
for n in grille[i][j]:
if n in grille[l][c]:
grille[i][j].remove(n)
def verifier(l=0,c=0):
global grille,grilleFinie
if not l and not c:
for i in range(9):
for j in range(9):
if type(grille[i][j]) is list:
if len(grille[i][j]) == 1 and grille[i][j][0]:
grilleFinie[i][j] = True
grille[i][j] = grille[i][j][0]
else:
if grille[i][j] != 0:
grilleFinie[i][j] = True
else:
if type(grille[l][c]) is list:
if len(grille[l][c]) == 1 and grille[l][c][0]:
grilleFinie[l][c] = True
grille[l][c] = grille[l][c][0]
def chercher(ee=0,ite=0):
global grilleFinie,grille
iterations = 0
grilleTest = [[0]*9 for n in range(9)]
grilleBack = [[0]*9 for n in range(9)]
cellBack = [0,0,9,[]]
if ee:
print(ite,"iter"+"s"*(ite!=1))
print(" "*(ee-1)+"|"*(ee!=0)+"_ couche",ee,end=" => ")
while "solution non determinee":
grilleTest = copie(grille)
for i in range(9):
for j in range(9):
solutions(i,j,iterations)
for i in range(9):
for j in range(9):
if grille[i][j] == []:
return False
if grilleFinie == [[True]*9 for n in range(9)]:
print(iterations,"iter"+"s"*(iterations!=1))
affG()
return True
if grilleTest == grille:
grilleBack = copie(grille)
for i in range(9):
for j in range(9):
if not grilleFinie[i][j] and cellBack[2] > len(grille[i][j]):
cellBack = [i,j,len(grille[i][j]),grille[i][j]]
for n in cellBack[3]:
grille[cellBack[0]][cellBack[1]] = n
if chercher(ee+1,iterations):
return True
else:
grilleFinie = [[False]*9 for n in range(9)]
grille = copie(grilleBack)
verifier()
return False
else:
iterations += 1
def copie(l):
re = [[0]*9 for n in range(9)]
for i in range(9):
for j in range(9):
re[i][j] = l[i][j]
return re
nouv()
fenetre.mainloop()