Aller au contenu

Leaderboard

Popular Content

Showing content with the highest reputation since 08/03/2014 in Messages

  1. Bonjour à tous, Ce tuto a pour but de vous apprendre les bases de la bibliotheque SDL, et plus précisément la 2.0. Les exemples de codes seront rédigés en C car c'est le language dans lequel est écris la SDL, bien que la SDL suporte le C++ et dispose de bindings pour le C#, le Pascal et le Python. j'imagine donc que vous maitrisez votre langage pour la suite. Code minimal Pour tester l'installation et expliquer les premières fonctions voici un code de base. int main (int argc, char *argv[]) { SDL_Init (SDL_INIT_VIDEO); SDL_Window *screen; SDL_Renderer *renderer; screen = SDL_CreateWindow("tuto", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_RESIZABLE); renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED); SDL_RenderPresent(renderer); SDL_Delay(2000); SDL_Quit(); return 0; } SDL_Init (SDL_INIT_VIDEO); Fonction initialisant la sdl. retour : retourne une valeur négative en cas d'erreur. paramètres : SDL_INIT_TIMER sous-système temps SDL_INIT_AUDIO sous-système audio SDL_INIT_VIDEO sous-système video SDL_INIT_JOYSTICK sous-système pour joystick SDL_INIT_HAPTIC sous-système pour le tactile SDL_INIT_GAMECONTROLLER sous-système mannette de jeu SDL_INIT_EVENTS sous-système pour les évènement SDL_INIT_EVERYTHING tout les sous-système au dessus SDL_INIT_NOPARACHUTE ne prend pas en compte les signaux comme SIGSEGV SIGPIPE etc DANGEREUX SDL_CreateWindow("tuto", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_RESIZABLE); fonction créant la fenêtre de notre programme. retour : retourne un pointeur vers la structure "SDL_Window" nouvellement créée. paramètres : le titre de la fenêtre le point x de la fenêtre ou "SDL_WINDOWPOS_CENTERED" et "SDL_WINDOWPOS_UNDEFINED" le point y de la fenêtre ou "SDL_WINDOWPOS_CENTERED" et "SDL_WINDOWPOS_UNDEFINED" la taille horizontale de la fenêtre la taille verticale de la fenêtre encore des flags que voici : SDL_WINDOW_FULLSCREEN plein écran SDL_WINDOW_FULLSCREEN_DESKTOP plein écran a la résolution du bureau SDL_WINDOW_OPENGL fenêtre de contexte pour OpenGL SDL_WINDOW_SHOWN fenêtre visible SDL_WINDOW_HIDDEN fenêtre invisible SDL_WINDOW_BORDERLESS fenêtre sans contour SDL_WINDOW_RESIZABLE fenêtre redimensionnable SDL_WINDOW_MINIMIZED fenêtre minimisée SDL_WINDOW_MAXIMIZED fenêtre agrandie SDL_WINDOW_INPUT_GRABBED window has grabbed input focus SDL_WINDOW_INPUT_FOCUS window has input focus SDL_WINDOW_MOUSE_FOCUS window has mouse focus SDL_WINDOW_FOREIGN pas de fenêtre SDL_WINDOW_ALLOW_HIGHDPI fenêtre en mode High-DPI (SDL2.0.1 ou plus) SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED); Créer un renderer (le renderer est la vue, la surface que l'on va afficher à l'écran). retour : retourne un pointeur vers la structure "SDL_Renderer" nouvellement créée. paramètres: le pointeur vers la structure SDL_Window créée précédemment. j'aurais aimé vous expliquer mais malheureusement aucune doc ou tuto n'est clair là dessus du coup, ne vous en occupez pas et donnez -1 comme argument. ce sont encore des flags, vous pouvez en mettre plusieurs. SDL_RENDERER_SOFTWARE rendu calculé par le CPU SDL_RENDERER_ACCELERATED rendu calculé par le GPU (grosse nouveauté de la SDL2.0) SDL_RENDERER_PRESENTVSYNC rendu synchronisé avec le taux de rafraichissement de votre écran SDL_RENDERER_TARGETTEXTURE rendu pour texture SDL_RenderPresent(renderer); fonction affichant le rendu sur l'écran paramètre : le pointeur vers la structure SDL_Renderer créée précédemment. SDL_Delay(2000); fonction qui met le programme en pause pendant x milisecondes paramètre: le nombre de milisecondes SDL_Quit(); fonction qui ferme la sdl explication : si vous lancez ce code, vous devriez avoir une fenêtre noire pendant 2 secondes. c'est tout à fait normal. à bientôt
    8 points
  2. Nous allons nous plonger dans la création complète d’un site web. De la conception jusqu’à la mise en ligne, nous allons explorer chaque aspect de cette aventure. N’hésitez pas à me faire part de vos retours. Ce post est à voir comme une grande introduction à une série de tutoriel consacré à la création de site web. Il ne s’agira pas d’apprendre à programmer, ni à dessiner ou à communiquer. Mais de voir comment conjuguer ses trois aspects dans la création d’un site. Pour la petite histoire, dans mon métier (chef de projet web), j’ai rencontré pas mal de bons programmeurs, quelques bons graphistes et certains communicants plutôt compétents. Ce qui est plus rare, c’est de rencontrer quelqu’un qui maîtrise suffisamment tous ces domaines pour les harmoniser au service du web. Avant de rentrer dans le vif du sujet, je tiens à préciser que j’ai choisie l’ordre des étapes tel qu’il est pour une personne seule. Dans le cas d’un travail à plusieurs, il peut y avoir des choses faîtes en parallèles, mais cela rajoute une dimension : de la gestion de tâches que l’on n’abordera pas ici ! I. Le concept 1. Etablir le concept (Qui ?) Tout commence par une idée. Cette idée doit être la plus clair et complète possible avant d’envisager quoique ce soit d’autre. Un concept de base bien établi repose sur plusieurs points fondamentaux : Il doit permettre de déterminer un public cible Ainsi que déterminer les technologies à utiliser Enfin, permettre de communiquer sur le site Avoir un public cible est essentiel pour ne pas se tromper dans les choix technologies et esthétiques. Exemple d’erreur courante : faire un site à destination d’un public de jeune adulte et ne pas prévoir une compatibilité avec les appareils mobiles. Pour ce le dernier point cité, la raison est simple : établir un concept fourni, réfléchit et maîtrisé c’est pourvoir facilement communiquer sur le sujet et cela évitera de se perdre dans les étapes futurs. Exemple : Un site communautaire à destination des jeunes adultes leurs permettant d’échanger librement leurs idées, savoirs et cultures. L’accent est mis sur l’attrait aux nouvelles technologies d’information et sur l’informatique en générale. 2. Définir les fonctionnalités de base (Quoi ?) Maintenant que l’on sait ce que l’on va faire, nous pouvons réfléchir aux fonctionnalités maîtresses. L’important ici, comme pour l’étape précédente est de bien détailler les fonctionnalités et déjà réfléchir à leurs possibles évolutions. Exemple non détaillé : Forum public / privé Système d’inscription Gestion de profil des membres Préférences des membres Shoutbox Messagerie membre à membre Systèmes de notifications Système de newsletter Système de ranking Système de réputation Système de modération Gestion & Administration 3. Définir les scénarios de navigations (Comment ?) Maintenant nous savons qui va faire quoi. Nous devons donc déterminer comment. Cette étape peut se révélé être très simple comme devenir un véritable casse-tête. Tout dépend de ce que l’on souhaite faire. Il s’agir d’imaginer et de concevoir comment un utilisateur lambda va réaliser des actions et utiliser les fonctionnalités décrites plus haut. Le mieux pour s’organiser est d’écrire des scénarios généraux, puis de détailler chaque fonctionnalité à part. Etablir un nombre important de scénarios permettra de faciliter le design et le développement du site. Cela permet de mettre en évidence quels fonctionnalités / outils / contenus sont à mettre en évidence ou à rendre discret dans certaines situations. Exemples : De n’importe où sur le site : accéder en clic à sa messagerie personnelle. Arriver sur site, consulter un sujet, allez sur la page d’inscription du site, remplir le formulaire et validez. Attendre le mail de confirmation. Activer son compte et consulter sa page de profil. Toutes mes félicitations : votre projet est né ! Il est temps de le baptiser ! II. Le design 1. Définir un thème graphique La première étape de design consiste à définir l’esthétique générale du site. Cette esthétique doit être en adéquation avec le public visé. Par exemple, il faut éviter de choisir un thème gothique pour un magazine d’informations générales pour la ménagère de moins de 50 ans. Plus le public cible est large est varié, moins l’esthétique doit être forte et prononcée. Par contre, si la cible est une catégorie de personnes bien précises, il est quasiment indispensable de marquer l’esthétique. Exemple : un site d’actus pour les geekettes, il doit être un minimum girly et marquer l’appartenance à la technologie. 2. Conceptualiser les étapes des scénarios Grâce à notre thème graphique, nous allons enfin pouvoir mettre en image les fonctionnalités du site. Ici, il s’agit d’établir de manière schématique les différentes actions possibles pour les utilisateurs. 3. Rédiger les principaux textes Il est important de rédiger les textes les plus importants assez tôt ; désignations des boutons, titres des encarts, labels des champs et autres textes de fronts (accueil, messages d’informations, accroches). Ceci pour éviter d’être confronter à des problèmes d’intégrations et de devoir revoir certains concepts ou propriétés ou parce qu’un texte ne rentre pas. Mais si dans l’absolu, tout l’art du webdesigner consiste à concevoir des sites qui s’adapte au contenu, mieux vaux savoir quels seront les impératifs à respecter en termes d’adaptabilité. 4. Faire une maquette graphique Une maquette graphique consiste en une représentation idéaliste du projet de site dans un état donné. C’est-à-dire que vous devez représenter dessus ce qu’un utilisateur pourra voir en prenant un cas particulier. Aujourd’hui, il est souvent nécessaire de faire plusieurs maquettes graphiques des sites. En raison de la grande diversité des supports et notamment de résolutions d’écrans, il faut prévoir à quoi noter site ressemblera sur ces supports. Plus la maquette graphique est détaillée et complète, plus le développement et surtout l’intégration sera facilité. III. Le développement Que votre site soit en PHP, Ruby, ASP ou n’importe quel autre langage. Une bonne conception de site passe par une conception Modèle / Vue / Contrôleur (MVC). Il s’agit de séparer le code définissant les modèles de données, celui effectuant des contrôles et de la gestion sur les modèles et celui dédié à l’affichage et aux interactions avec l’utilisateur. Cette séparation ne doit pas uniquement être physique (dans des fichiers séparés), mais aussi logique (du point de vue de l’exécution du code). Concrètement, le code des modèles, des contrôleurs et des vues ne doivent pas être dépendent les uns des autres. En pratique ça donne quoi ? Pour les modèles : ceux-ci doivent pouvoir être utilisé dans n’importe quel contexte (autres sites, autres environnement) Pour les contrôleurs : ils doivent avoir une exécution ininterrompue. C’est-à-dire qu’ils doivent gérer tous les cas d’erreurs et d’exceptions et fournir une réponse voulue. En clair, ils ne doivent pas planter, même si le code des modèles ou des vues à côté fait n’importe quoi. Pour les vues : ici, le but est d’avoir un affichage indépendant du contexte. A savoir, en fonction du résultat d’un contrôleur, elles doivent toujours offrir un résultat cohérent. 1. Concevoir les modèles de données La première étape de la programmation d’un site consiste à concevoir les modèles de données. Pour faire simple : majoritairement il s’agit de concevoir la base de données qui sera interfacée avec le site. Celle-ci peut s’avérer très simple dans le cas d’un site de type blog (une suite d’article daté). Mais dans le cas de sites offrants des fonctionnalités plus complexes, la conception de la base de données n’est pas à négliger. Que ce soit aux niveaux des performances du site ou de la facilité de maintenance, des modèles bien réfléchis, optimisés et intégré c’est déjà un bon départ pour assurer une longue vie au site. Cette conception ce fait avec un Modèle logique de données (MLD) qui est indépendant d’un langage de programmation. 2. Développer les modèles Une fois la base de données en place, il est temps de passer à la programmation… enfin ! La programmation débute par créer les modèles de données et à les interfacer avec la base de données. Ceci peut être réalisé avec l’aide d’un ORM (Object-Relationnal Mapping) qui permettra de d’interfacer directement les modèles crées avec la base de données. L’avantage d’un ORM est qu’il permet de lier de manière logique les modèles entre eux par des contraintes. Par exemple, un article de blog possède du contenu une date et un auteur. Il s’agit donc d’un modèle, mais un auteur d’article est lui aussi un modèle (pseudo, email, date d’inscription, ….). Un ORM permettra de lier ses modèles en disant, qu’un article est toujours lier à un et un seul auteur. De même un auteur peut avoir aucun, un ou plusieurs articles. 3. Développer les contrôleurs Une fois les modèles en place, il est désormais possible de développer les différents contrôleurs. C’est-à-dire tous ce qui permettra de gérer et de travailler avec les modèles. Un exemple simple en lecture : avoir une liste d’articles de tel auteur trié par date. Le contrôleur va vérifier que les articles sont bien affichable (pas de modération, contenu non masquer, …) et que l’utilisateur à le droit de les consulter (utilisateur non banni, article dans la bonne langue, …). Un autre exemple en écriture : lors de l’inscription d’un utilisateur, vérifier le pseudo, le mot de passe, l’email, …. IV. L’intégration Dans le modèle MVC on a fait le M puis le C, il nous reste donc le V. Les vues, il s’agit donc bien sur des pages vues par les utilisateurs, mais aussi les pages d’administration jusqu’aux résultats de scripts console se lançant directement sur le serveur (même en ASCII ça reste une vue J). 1. Intégrer le design Dans les vues, je conseille de commencer par intégrer le design du site. Cela permet de vérifier assez rapidement que le design convient et de faire des retouches au besoin. Pour bien intégrer un design, il est nécessaire de maîtriser le CSS. Le but de l’intégration est transcrire un dessin en page web dynamique, il va donc falloir traduire des éléments graphiques de base en éléments web. Tout l’art de l’intégration constant à recourir à un minimum d’images et de règles CSS pour un maximum de respect de dessin original. 2. Intégrer les textes Une fois le design en place, vous pouvez insérer dans les pages, tous les textes fixes. Ces textes sont particulièrement importants. Ce sont eux qui vont être repérer en priorité par les moteurs de recherche et également ceux qui vont renseigner les nouveaux utilisateurs sur le site. Bien intégré c’est texte en utilisant tous les moyens possibles (couleurs, gras, italique, taille, …) permet de capter facilement l’attention et d’informer efficacement sans gêner la lecture pour l’utilisateur. Ensuite, vous pouvez vous assurer que les textes dynamiques s’intègre bien dans le design. Notamment les infobulles, les menus, et les principaux titres dynamiques. 3. Intégrer les médias Si votre site comporte des médias riches (animations, sons, vidéos, …), leur intégration doit être particulièrement soignée. En effet, la plupart des utilisateurs trouvent les médias riches envahissants et dérangeants. Donc, les animations doivent rester discrètes, les sons doivent pourvoir facilement être coupés et les vidéos ne devrait pas se déclencher automatiquement. Sauf, dans des cas exceptionnel et évidant, comme une page qui intègre uniquement un lecteur vidéo et une playlist, par exemple. Dans tous les cas, l’accent doit être mis pour mettre en avant l’information recherchée par l’utilisateur. 4. Enrichir l’expérience utilisateur Votre site est presque fini, il ne manque plus que les finitions. Et c’est peut-être là le plus important, tous ces petits détails qui font que l’utilisateur se sente bien, et que les moteurs de recherches lisent correctement les pages. Enrichir un site peut être fait d’une multitude de manière. Parmi les plus « vielles » méthodes : la newsletter, le flux RSS, les notifications en espace membre, etc. Mais il faut penser aussi, aux réseaux sociaux, aux sitemaps, aux micro-données, aux retours participatifs (les utilisateurs eux-mêmes qui enrichissent le contenu), et la liste est longue. Voilà ! Votre site est prêt à être diffusé ! V. La production La mise en production d’un site rassemble toutes les dernières étapes qui ne peuvent être correctement faîtes que si site fonctionne en condition réelle. 1. Mise en ligne Une mise en ligne réussie est une mise en ligne qui ne se voir pas ! Afin d’éviter de crée des erreurs d’entrée de jeu sur votre site, il convient de préparer la mise en ligne. En effet, une mise en ligne prend du temps (configurations, upload, …). C’est un laps de temps ou le site est accessible via son URL mais où il n’est pas totalement prêt à accueillir les visiteurs. Le plus simple est de rediriger l’ensemble du trafic sur une simple page d’explication le temps de la mise en ligne. Le but étant au final de pourvoir activer le site en une seule action brève. 2. Tester le site Une fois en ligne, vous pouvez tester l’ensemble de votre et notamment les fonctionnalités spécifique à une exécution sur un serveur distant. A savoir, les systèmes d’upload, de mailing, ou toute action nécessitant des extensions particulière sur le serveur web. Le mieux étant d’avoir un environnement de développement avec un accès restreint, mais ce n’est pas toujours possible ni forcément nécessaire (dans le cas d’un petit site relativement fixe). 3. Intégrer les ressources externes Ça y est ! Tout fonctionne enfin ! Le dernier coup d’éponge consiste à intégrer toutes les ressources des services extérieurs. Les services de statistiques, comme Google Analytics et New Relic, les services de publicités ou encore l’intégration des réseaux sociaux (de type flux des posts, partage rapide, …). Avec tout ça en place vous êtes on ne peut plus prêt alors c’est parti ! Ouverture du site ! 4. Ouvrir le site Vous pouvez rendre le site accessible au public, et là, il ne faut pas oublier le plus important : prévenir tout le monde ! Si votre site rencontre suffisamment de visiteurs, le travail ne fait que commencer et il faudra maintenir le site et adapter des fonctionnalités et/ou en apporter de nouvelles. Plus vous avez soigné votre création de base et plus la maintenance et l’ajout de fonctionnalité sera facilité. Merci d'avoir suivi jusqu'au bout !
    8 points
  3. Bonjour à vous ! Avant de commencer, et avant que vous me criiez dessus, je tiens à m'expliquer : J'ai eu beaucoup d'idées de tutos pour Melinyel, de sujets qui me passionnent, et qui j'espère vous aideront. Et pour certains, la numération est importante pour bien comprendre, c'est pourquoi je refais un cours un peu plus poussé que celui existant déjà, en expliquant vraiment comment compter dans toutes les bases. Sur ce, commençons ! I - Introduction Une petite introduction est toujours la bienvenue, Pour essayer de comprendre comment marchent certains aspects de l'informatique, il est préférable de comprendre comment compter en base 2 (binaire) ou même en base 16 (hexadécimale), pourquoi ? Car l'ordinateur ne sait pas compter après 1, il connait juste "0" et "1". Il est un peu bête me diriez vous, mais c'est tout à fait normal. En réalité, le "0" (ou 0 logique) signifie qu'il n'y a pas de courant (ou état bas, ou état 0) et le "1" (ou 1 logique) signifie qu'il y a du courant. A partir de la, l'ordinateur peut tout faire. Seulement, si nous devions communiquer avec lui en binaire, on n'aurait pas fini. C'est pourquoi on a crée les langages de programmation, qui servent d'intermédiaire entre le langage humain et le binaire pour communiquer avec l'ordinateur. Enfin la, je commence déjà a divaguer. Dans ce cours, nous allons nous intéresser à : Compter dans n'importe quelle baseLe binaire (compter, et faire des additions)L'hexadécimal (qui est étroitement lié au binaire, vous verrez) Ce cours sera sans doute un peu long, et fastidieux, j'essaierai d'être le plus clair possible, et le moins scolaire possible ^^ N'hésitez pas a poser vos questions, et faire des remarques ! II - Compter dans n'importe quelle base En réalité, quand je vous parle de base arithmétique, vous me prenez pour un dingue, qui parle une langue inconnue. Mais sans le savoir, vous savez déjà compter en base 10. Et oui Jamie, quand on compte dans la vie de tous les jours, on utilise une base décimale (ou base 10) ! Concrètement, qu'est-ce que ça signifie ? Que vous avez 10 caractères "disponibles" pour compter (de 0 à 9) et qu'avec ça, on peut faire tous les nombres qu'on veut (en base 10) Prenons un nombre au hasard : 542. 542, c'est quoi ? C'est 5 centaines + 4 dizaines + 2 unités Quoi ? Je vous prends pour des bébés ? Tant mieux ^^ Pour parler un peu plus mathématiquement, 542 = 5*100 + 4*10 + 2*1 ou même mieux : 542 = 5*(10^2) + 4*(10^1) + 2*(10^0) (lire (10^2) = "10 exposant 2") C'est comme ça qu'on compte en base 10, et le principe est le même dans les autres bases. Je vous explique : Pour compter dans une base arithmétique, on reprends le même principe : (Numéro de la base)^0 puis 1 puis 2 etc... Je suis d'accord que c'est flou, mais on va l'appliquer directement au binaire, vous devriez comprendre. III - Compter en binaire Le binaire, comme son nom l'indique est en faite la base 2. Dans cette base, par pure convention, on appelle chaque caractère un "bit" et on aime travailler sur des systèmes de 8 bits (ou "octets"). Attention : bit et Byte sont de faux amis. bit = bit et Byte est la traduction anglaise d'octet donc 8 bits = 1 Byte (Byte a toujours un B majuscule) On obtiens donc la grille suivante pour un octet : Bon, c'est bien beau, mais concrètement, comment on passe du décimal au binaire ? Vous vous souvenez, un peu plus haut, je vous ai montré comment compter dans n'importe quelle base ? Appliquons-le ici, voila les valeurs que prennent chaque case (en rouge, c'est la valeur en base 10) : Cette grille est quelque chose d'utile à savoir, a mon sens, c'est la base de tout. Pour convertir un nombre décimal en binaire, il existe plusieurs méthodes : Vous connaissez déjà le résultat. La, pas de soucis.A la calculatrice (si elle le fait)A la main : C'est la partie que l'on va approfondir un peu ici, car c'est la plus amusante ! Donc comment faire ? Pour expliquer, on va passer par un exemple : Prenons le fameux nombre 42, on va le convertir en binaire. Vous êtes prêts ? On y va ! L'idée ici est de faire une succession de divisions par 2, du nombre que l'on veut convertir en binaire. Les restes des divisions successivs lus de droite à gauche composeront notre nombre en binaire. Pour se rendre compte de l'intérêt de cette méthode, nous allons poser les divisions : Ce qui donne au final : Je reconnais que au début, c'est fastidieux, c'est long, il faut du papier pour écrire. Mais comme on dit, c'est en forgeant qu'on devient forgeron, et plus vous en faites, mieux ça ira ! C'est exactement le même principe pour tous les autres nombres. Aller, je vous en donne quelques un avec les réponses, mais essayez de les faire sans regarder ! 5 127 186 254 357 Et voila les réponses : Vous avez compris tout ça ? Parfait, on va pouvoir faire quelques additions ! N'ayez pas peur, c'est très simple. Vous savez faire une addition en base 10 ? (Avec des retenues hein, faut pas déconner non plus ! ) Vous saurez donc faire une addition en base 2. Je vais encore une fois illustrer mes propos par un exemple, essayons de faire : 101010 + 1010 (En décimal, c'est 42+10). On pose l'addition : Et c'est parti, on résoud ! 0+0, pas de surprise, ca fait la tête a toto 01+1, on serait tenté de dire 2 hein ? Sauf que, en binaire, on a seulement 0 et 1, donc 1+1 = 10. Ici, on notera 0, et on retiens 1 ! On en arrive ici : 0+0+1 = 11+1 = 10, donc je note 0 et je retiens 10+0+1 = 11+0 = 1 Et voila, on arrive à ce résultat : Et normalement, 110100 devrait donner 52, on vérifie : 32 + 16 + 4 = 52 On a tout juste ! Bravo ! Voila, pour la base du binaire. Je ne ferais pas les autres opérations (du moins pour le moment peut être), et je n'aborderai pas les nombres négatifs (que l'on appelle le Complément à 2 ou Cà2 pour les intimes). On va brièvement passer à l'hexadécimal, je veux surtout vous montrer une méthode efficace pour passer du binaire à l'hexa, et inversement car le reste, vous savez le faire maintenant ! C'est parti ! IV - L'hexadécimal : Ou compter avec des lettres (WTF ?!) L'hexadécimal est donc la base 16. Vous me direz, comment on peut faire une base 16, alors que on n'a que 10 chiffres de disponibles ? Eh bien, en mettant des lettres. en effet l'hexadécimal contient 16 caractères de 0 à F. On peut donc montrer le tableau suivant : Source Note : On notera un nombre en Hexadécimal avec le préfixe 0x (Exemple : 0xFF) Voila, vous savez tout. Passons donc directement à la conversion binaire <-> hexadécimal Vous me direz : "C'est plutôt simple, il suffit de passer par le décimal !" On pourrait, mais on perdrait trop de temps, et nous on cherche plutôt à en gagner ! Heureusement pour nous, les choses ont été bien faites. Prenons 4 bits en binaire. On a 16 valeurs possibles (de 0000 à 1111). Comme l'hexadécimal me direz vous, et bien oui ! Un "quartet" (4 bits) est en fait un caractère hexadécimal. Pour la conversion, c'est plutôt simple : Prenons par exemple 10010110 que l'on veut convertir en Hexa. On divise l'octet en quartets, on a donc : 1001 et 0110 Suivant le tableau ci-dessus, on a 1001 = 0x9 et 0110 = 0x6 Donc 10010110 en binaire vaut 0x96 en hexa. Simple non ? Ca marche aussi dans le sens inverse, Cherchons a convertir 0xA2 en binaire : 0xA = 1010 en binaire et 0x2 = 0010 en binaire Donc 0xA = 10100010 en binaire et vaut 162 en décimal. V - Les entiers relatifs Bon, jusqu'à maintenant, nous n'avons vu que les entiers naturels, c'est à dire les entiers positifs. C'est pas mal, mais on peut pousser le vice encore plus loin, de façon à ce que ça soit plus pratique (effectivement, si on ne doit faire que des additions ou des soustractions qui ont un résultat positif, on n'est pas rendus...) Notez que dès maintenant, je me situerai en base 2. Le principe de conversion restant le même, je n'ai plus besoin d'y revenir Comment on note des nombres négatifs en binaire ? C'est simple, pour ça on va utiliser ce qu'on appelle le "Complément à 2" C'est quoi le Complément à 2 ? Eh bien, c'est le complément à 1 + 1. Tout simplement. Comment différencier un nombre positif d'un nombre négatif en complément à 2 ? On va a voir ce qu'on appelle un "bit de signe" qui sera situé à gauche (on dit que c'est le bit de poids fort ou "MSB") de notre nombre en binaire. Lorsque le bit de signe est à 0, le nombre est positif et lorsque le bit de signe est à 1, le nombre est négatif. Seulement, comment savoir quel bit est le bit de signe ? Très bonne question ! En réalité, avant de convertir un nombre en complément à 2, on se place dans un intervalle de n bits (on dit, le nombre que je vais convertir est codé sur n bits) ce qui donne l'intervalle suivant : [-(2^n)/2 ; ((2^n)/2)-1] Pourquoi ((2^n)/2)-1 ? Car il y a le zéro au milieu qui n'est ni positif, ni négatif, mais qui est tout de même présent, il faut donc lui laisser un place dans l'intervalle. Bref, attaquons ! Plus concrètement, mettons que l'on ait (0101)B (0101 en binaire), comment obtenir l'opposé ? Pour cet exemple, notre nombre est codé sur 4 bits, donc on est sur l'intervalle [-2^4/2 ; ((2^4)/2)-1], ou encore [-8;7]. Et le MSB ici est égal à 0 donc le nombre (0101)2 est bien positif. On peut le convertir : Il nous suffit de faire une inversion bit à bit, et de rajouter 1. Regardons le résultat : C2(0101) = (1010)2 + 1 = (1011)2 Note : En complément à 2, 1011 = 1111111111011 peu importe le nombre de "1" présents à gauche, du moment qu'il y en a un pour dire "c'est un nombre négatif", on peut en mettre une infinité. Voila, (1011)2 = -5. C'est simple non ? Vous cherchez maintenant à convertir un nombre négatif en nombre positif ? Eh bien sachez que c'est EXACTEMENT la même méthode. Inversion bit à bit +1. Tout simplement. Vous savez donc aussi maintenant écrire des nombres négatifs en Hexadécimal Cà2 ! C'est fou qu'on apprend vite Aller, on passe a quelque chose de beaucoup plus subtil ! VI - Tous les réels On a donc vu les entiers naturels, les entiers relatifs. Mais il serait intéressant de pouvoir exprimer des nombres à virgule non ? Par exemple, comment exprimer -12,75 ? Vous pensez que c'est impossible ? Vous faites erreur ! PS : Je signale que cette partie est nettement moins compréhensible que les précédentes. Il se peut que je m'embrouille moi même dedans, n'hésitez pas à me corriger ! Pour exprimer un réel, il est préférable de se positionner sur beaucoup de bits (vous allez comprendre pourquoi). Ici, j'utiliserai 32 bits (Norme IEEE 754) que l'on va découper en 3 parties comme l'image suivante : Dans notre cas, il y aura : 1 bit de signe8 bits d'exposant23 bits de mantisse Comme ceci : Du charabia hein ? Il faut savoir que la mantisse ne prends pas les valeurs que l'on a pu voir jusqu'à maintenant. On prends le MSB de la mantisse, il a la valeur 2^-1 et on augmente l'exposant au fur et à mesure que l'on se décale sur la droite. Ce qui donnerait donc : 2^-1 2^-2 2^-3 ... 2^-23 (pour 32 bits). En fait, c'est très simple. Le nombre réel correspondant à un nombre binaire suit la formule suivante : R = (-1)^s * (1+m) * 2^(e-127) Avec : - s : La valeur du bit de signe - e : La valeur de l'exposant - m : La valeur de la mantisse On est bien avancés avec ça... Hé bien, a vrai dire, plutôt Essayons d'exprimer le nombre suivant en décimal : (1 10000010 01100000010000000000000)2 (Hé oui, on est sur 32 bits !) Je suis gentil, je vous ai fait les séparations des différentes parties Donc on a : e = 128 + 2 m = 2^-2 + 2^-3 + 2^-10 = 1/4 + 1/8 + 1/(2^10) = 0,3759765625 En appliquant la fameuse formule, on a : R = (-1)^1 * (1,3759765625) * 2^(130-127) = -11,0078125 Sympathique n'est-ce pas ? Vous êtes encore présents ? Aller, on fait dans l'autre sens ? Reprenons -12,75. Qu'avons nous ? Regardez la photo suivante : (Source : Mon cours sur les systèmes informatiques) Et voila, vous savez tout ! Si vous avez des questions ou des remarques, n'hésitez pas ! Pirkoa
    7 points
  4. Bonjour à tous, C'est un sujet aussi intéressent que difficile que nous allons voir aujourd'hui: Le réseau. Nous allons découvrir le réseau de manière théorique et pratique, via ce cours. Nous allons voir tout ça via diverses parties. Tenez-vous bien, après la gestion mémoire, le réseau est la deuxième plus grosse difficulté au niveau de la programmation (ce qui le rends très intéressent!), ce sera un cours principalement théorique (oui, je sais, j'en fais très TRES rarement), et du coup, vous y verrez que très peu de code. Index: 1- Le réseau, en théorie, c'est quoi? 2- En pratique? 3- Différence entre TCP, UDP et UDT (oui oui, ça existe). 4- Quel type de données on peux envoyer en réseau? 5- Synchrone? Asynchrone? Kesako? 6- Un serveur de tchat synchrone (théorique). 7- Notre tchat en version Asynchrone (théorique). 8- Index des fonctions utiles en C (RTFM ). 1- Le réseau, en théorie, c'est quoi? Le réseau définit un moyen pour deux programmes de pouvoir communiquer. Il existe deux définitions du réseau existantes: LAN et INET. De manière générale, le réseau LAN représente le réseau local (nous ne parlerons pas des réseaux VPN qui sont des exceptions à ce niveau là, puisqu'elles créent un réseau LAN virtuel), et les réseaux dis INET représentent les réseaux passant par internet. WOUHOUUUU! La partie théorique a l'aire plutôt bien simple! MAIS, et c'est là que le réseau deviens très cool à connaitre, c'est ULTRA-COMPLEXE à comprendre et en même temps pas si compliqué à mettre en place. Je vais donc essayer de ne pas vous perdre durant ce cours. 2- En pratique? Eh oui, la description ci-dessus simplifie pas mal le fonctionnement du réseau au final. Si nous voulons mettre les mains dans le cambouis, il faut savoir pas mal de choses sur le réseau (bien que pas très importantes dans la programmation en elle même, ça vous permettra au moins de comprendre comment fonctionne le réseau de l’intérieur. Il faut savoir que la couche réseau est la 3ième couche du modèle OSI voyons un peu, pour avoir de la culture info, les 7 couches du modèle OSI: 1- Physique (Le matériel de liaison, carte wifi, blutooth, etc...) 2- Liaison (Gestion de la liaison et de la communication) 3- Réseau (Gestion des couches réseau, IPv4, IPv6, etc...) 4- Transport (Gère la communication en bout des processus, UDP, TCP, etc...) 5- Session (Gère la synchronisation des communications et la gestion des "transactions") 6- Présentation (Code les données applicatives) 7- Application (Définit les points d'accès au service, Nous sommes ICI!) (je vous conseille de jeter un petit coup d’œil sur Wiki, c'est toujours un plus de savoir ce genre de choses , pour vous donner une idée, nous les apprenons par cœur à Epitech (3ième année)) La couche applicative est celle ou nous sommes lorsque nous développons un programme. Toutes les autres couches sont gérées par notre OS, qui fait tout le travail à notre place! Enfin, il faut retenir une chose TRES importante, et qui va beaucoup vous aider: les SOCKETS (système qui permet la communication en réseau) sont des FDs (File descriptors), il sera donc géré comme un fichier, et il faudra toujours penser à FERMER LES SOCKETS! (laisser des FDs ouverts, c'moche! Pauvre kernel ) 3- Différence entre TCP, UDP et UDT (oui oui, ça existe). Ahhh, les protocoles de communication réseau (à ne pas confondre avec les protocoles applicatifs), beaucoup de choix, avec beaucoup de différences. Nous allons voir ça tout de suite: 1- Le TCP Le protocole TCP est actuellement le plus stable et certainement le plus utilisé dans le domaine applicatif (ATTENTION: pas dans le jeu-vidéo). Le TCP comporte 3 grand principes: - Les packets sont certains d'arriver. - Les packets arrivent dans l'ordre. - On a une réponse de la réception du packet par le client. Et tout ça, grâce à un header implémenté dans le packet (oui, le packet est un peu plus lourd). Pour résumer, voici ce qui se passe lorsque vous envoyez un packet TCP: serveur = Envois du packet => client client = J'ai bien reçu le packet! => serveur serveur = Ok merci, j'ai bien reçu la réponse! => client Nous voyons donc qu'il y a 3 envois réseau pour chaque packets, ce qui peux ralentir le réseau pour tout ce qui est temps-réel. ATTENTION NEANMOINS, au vue des connexions internet de nos jours, la différence ne se fait pratiquement pas ressentir. Néanmoins, dans la plupart des jeux, le TCP permet de faire les actions importantes (envois de sorts, pop de monstres, etc...) et l'UDP permet de gérer les actions moins importantes (Déplacements, etc...) pour éviter de surcharger la couche réseau. Même si certains jeux nous montrent bien que le Full TCP, ça peux marcher aussi (RPZ World Of Warcraft). 2- L'UDP L'UDP de manière générale est plus simple, c'est un simple envois de packet ANONYME à un serveur. Cela offre une vitesse 3 fois plus rapide que le TCP mais néanmoins, on ne sais absolument pas sur le packet est bien arrivé au destinataire. Il faut donc apprendre à manier le TCP aussi bien que l'UDP en fonction de ce qu'on veux faire. 2- L'UDT Le cas de l'UDT est totalement différent, car c'est un protocole plutôt jeune qui a été créé pour pouvoir transporter un grand nombre de données (on parle ici de Téraoctets) sur un réseau généralement LAN. Nous n'allons pas en parler ici, mais si vous souhaiter vous renseigner dessus, je vous conseille Wikipedia . 4- Quel type de données on peux envoyer en réseau? Là est la question. Pour faire simple, qu'est-ce qui passe par du réseau, en soite? Eh bien, des données en BINAIRE! Eh oui, c'est des 1 et des 0 qui passent dans nos câbles! On s'y attendais pas, hein? Pour résumer, tant que les données peuvent être stockées en mémoire (soite presque toutes), il est possible de les envoyer en réseau (eh oui, c'est pour ça que le réseau est considéré très proche de la gestion mémoire ). D'une manière générale, faut pas faire l'imbécile, n'envoyez pas des pointeurs en réseau, puisque l'autre machine, n'aura pas allouée ce pointeur . Il faut envoyer des données dites "flat", donc des données et non pas des adresses! Ce qui est très souvent fait, c'est d'envoyer des structures en réseau. ça permet pas mal de chose, mais c'est très peu modulable. Une autre technique, c'est de créer un packet. Voici un exemple du contenu d'un packet: | taille des données dans le packet (4 octets) | données du packet.... | du coup, lorsqu'on reçois ce packet, on lit d'abord les 4 premiers octets pour savoir quelle est la taille du packet complet, et on lit le packet . Bref, de la théorie tout ça! On verra dans un autre cours sur le réseau du code à proprement parlé! 5- Synchrone? Asynchrone? Kesako? Le principe de l'Asynchrone et du Synchrone se retrouve souvent dans les applications ayant plusieurs threads (sous processus). Le principe du Synchrone, c'est d'avoir un thread qui exécute tout de manière Linéaire. Le principe de l'Asynchrone, c'est d'avoir plusieurs threads, ayant chacun un rôle et communicant entre eux. Dans notre cas, le Synchrone en réseau est nommé bloquant alors que l'Asynchrone est nommé non bloquant. Pour faire simple, dans un réseau bloquant, nous attendrons que le client ait bien reçu les informations, alors que dans l'autre cas, nous envoyons les informations en NOWAIT (voir les mans des sockets) et du coup, nous n'attendons pas la réponse TCP. Ce qui nous renvois la taille des données envoyées, et dans le cas ou des données n'ont pas été envoyées, on les renvois. D'une manière générale, le côté bloquant est utilisé dans les clients, alors que le côté non bloquant est utilisé pour les serveurs (eh oui jamie! Si on est bloquant et qu'un client lag, on fait laguer tout le monde! Exemple concret: Starcraft II, mais là encore l'exemple est spécial, puisque SCII, c'est du P2P via servering). Pour l'UDP, il n'est pas question d'être bloquant, puisque nous ne savons pas quand le client reçoit l'information. 6- Un serveur de tchat synchrone (théorique). A VENIR. 7- Notre tchat en version Asynchrone (théorique). A VENIR. 8- Index des fonctions utiles en C (RTFM ). - man 2 socket - man 2 select (une de mes fonctions préférées en C <3) - man 2 accept - man 2 bind - man 2 connect - man 2 listen - man 2 read - man 2 write - man 2 recv - man 2 send - man 7 ip - man 7 socket - man 7 tcp - man 7 udp A bientôt pour un prochain cours! AlexMog.
    7 points
  5. Bonjour à vous, On se retrouve pour le deuxième tutoriel sur le SQL et aujourd’hui, on va s'intéresser au SELECT. Je vous invite vivement à lire le premier chapitre, qui constitue une petite introduction sur ce qu'est le SQL ici : Revenons à nos moutons, voici de quoi sera composé ce cours : Projection Restriction/Sélection Jointures De plus, pendant ce cours, il se peut que je fasse référence à l'algèbre relationnelle. Ce n'est pas obligatoire, je ne m'attarderai pas dessus, mais si vous connaissez, ça ne peut être qu'un plus pour vraiment bien visualiser ce que vous voulez récupérer comme données. En ayant vu ça, nous aurons déjà fait pas mal le tour des possibilités offertes par le SELECT. I - Cas général : Le SELECT est donc une requête SQL. En faisant un SELECT, on réalise une projection des données de la base de données, en fonction de différents critères. On l'écrit de la forme suivante : SELECT <liste des attributs projetés> FROM <liste des relations touchées par la projection> [ WHERE <liste des critères de restriction> GROUP BY <liste des attributs d'agrégation> HAVING <liste des critères de restriction des agrégats> ORDER BY <liste des attributs du tri du résultat> ] Pour ceux qui connaissent l'algèbre relationnelle, il est facile d'établir une correspondance avec un SELECT dans les requêtes simples. Si vous n'avez pas compris grand chose de ce que je viens d'expliquer, pas de panique, il s'agit juste de la structure de la requête. Les éléments entre crochets sont facultatifs. Tout au long de ce tutoriel, j'utiliserai le schéma de base de données suivant : DEPT(DEPTNO, DNAME, LOC) EMP(EMPNO, ENAME, JOB, #MGR, HIREDATE, SAL, COMM, #DEPTNO) Les tables soulignées sont des clés primaires, et celles avec un #devant sont des clés étrangères. Pour mieux comprendre, je vous invite à jeter un coup d'oeil par ici : http://openclassrooms.com/courses/administrez-vos-bases-de-donnees-avec-mysql/cles-primaires-et-etrangeres II - Projection : On va sélectionner les données à l'aide de la commande SELECT. Comme vu plus haut, dans un SELECT, il faut au minimum un FROM afin de dire dans quelle table on se situe. L'ordre s'écrit donc : SELECT <liste des attributs> FROM <nom des tables> Pour prendre un exemple, mettons que je veuille récupérer toutes les entrées de la table DEPT, la requête sera la suivante : SELECT * FROM dept J'utilise le joker * afin de dire que je veux tous les attributs de la table. Cependant, il est préférable de ne garder que ce dont on a vraiment besoin lorsque l'on effectue la requête, c'est une question d'optimisation. SELECT deptno, dname FROM dept Ici, je sélectionne uniquement les attributs deptno et dname de la table dept. Ce qui nous embête ici, et contrairement à l'algèbre relationnelle, C'est que cette requête n'élimine pas les doublons. On va donc ajouter un mot-clé juste après le SELECT, il s'agit de DISTINCT. On obtient donc ; SELECT DISTINCT job FROM emp Voila la différence : Sans DISTINCT : Avec Distinct : Intéressons nous maintenant au FROM, l'utilisation est très simple, mais on va voir comment créer un alias de table. Concrètement, on va renommer la table provisoirement (le temps de la requête). C'est pour plus de lisibilité et plus de simplicité. Comment on fait ? Il suffit d'écrire ça : FROM nomdelatable alias Ainsi, nous pourrons écrire des requêtes qui ressemblent à ça : SELECT d.deptno FROM dept d Le "d.deptno" peut se traduire par "la colonne deptno de la table d". Simple non ? Aller, au suivant ! Maintenant qu'on a renommé une table, on va chercher comment renommer une colonne, toujours provisoirement ! C'est un peu plus subtil, mais rien de bien compliqué. Ca va se passer comme ça : SELECT deptno AS Service, dname AS "Nom Service" FROM dept; On fait suivre le nom de la table par le mot clé "AS" et ensuite, si c'est un seul mot, pas de guillemets, sinon, on en met. Note : Le AS est optionnel, on peut uniquement séparer le nom de table de l'alias par un espace. Regardons le résultat : mysql> SELECT deptno AS Service, dname AS "Nom Service" FROM dept; +---------+--------------+ | Service | Nom Service | +---------+--------------+ | 1 | Juridique | | 2 | Recherche | | 3 | Comptabilité | | 4 | Support | +---------+--------------+ 4 rows in set On a bien les colonnes qui sont renommées dans le résultat. On peut aussi faire des opérations directement dans un SELECT. Attention, on ne modifie pas le contenu de la table, on affiche juste des valeurs ! On retrouve les 4 opérateurs bien connus : + : Addition - : Soustraction * : Multiplication / : Division Ces opérateurs sont utilisables pour tout attribut numérique ! N'essayez pas de jouer avec les chaînes de caractères. Exemple : mysql> SELECT (sal*1.1)+comm FROM emp; +----------------+ | (sal*1.1)+comm | +----------------+ | 880 | | 2060 | | 2200 | | 3372.5 | | 1430 | | 16000 | +----------------+ 6 rows in set On va maintenant s'intéresser à comment trier les résultats d'une requête, avec la clause ORDER BY : Le classement par défaut est ascendant (ASC). Pour inverser, on rajoutera DESC (comme descendant). Une seule clause ORDER BY et TOUJOURS à la fin du SELECT Les éléments de tri ne figurent pas forcément dans le SELECT Les valeurs NULL se trouvent à la fin si on a un tri ASC, où au début en cas de tri DESC Les éléments de tri peuvent être le nom des colonnes, le numéro des colonnes ou même une expression. Quelques exemples : III - Restriction/sélection : On commence directement par la clause WHERE. Avec le WHERE, on va réduire le nombre de lignes concernées par la recherche. Par exemple, on sélectionne tous les employés du service 1 : SELECT ename, sal FROM emp WHERE deptno = 10 Les conditions de recherche sont des expressions logiques vraies ou fausses, en fonction des enregistrements de la table. Une condition peut aussi être appelée prédicat. Une condition est toujours composée de 3 membres : deux expressions encadrant un opérateur de comparaison. On peut comparer un attribut avec une valeur constante (comme dans l'exemple), mais aussi deux attributs entre eux. On retrouve les opérateurs de comparaison usuels à savoir : Comparaison : =, !=, <>, >, >=, <, <= Intervalles : BETWEEN Concordance de caractères : LIKE avec les jokers _ et % Gestion des colonnes "NULL" : IS NULL Enumération : IN Négation : NOT IN, NOT LIKE, NOT BETWEEN, IS NOT NULL Intéressons-nous aux opérateurs de comparaison suivants : <, >, <= et >= On peut les utiliser avec les types suivants : numérique Alphabétique Chronologique (avec les dates) Exemple avec les dates : SELECT ename, hiredate FROM emp WHERE hiredate < '1981-01-01' -- Le format de la date depend du SGBD Pour les comparaisons de chaînes de caractères, les lettres majuscules et minuscules sont supérieures aux nombres et la casse peut importer, tout dépend de comment le SGBD est réglé. Exemple avec les chaînes : SELECT ename FROM emp WHERE ename > 'MARTIN' Passons au LIKE : Il est très utilisé, notamment pour tout ce qui est scripts de recherche, le tout est de bien savoir l'utiliser ! Comme vous l'avez vu un peu plus haut, on utilise deux jokers : _ qui remplace une lettre % qui remplace tout chaîne de caractère Peu compréhensible n'est-ce pas ? Regardons un exemple pour mieux comprendre : SELECT ename FROM emp WHERE ename LIKE ('_AR%') Que demande cette requête ? On cherche les noms d'employés qui ont pour deuxième lettre A et troisième lettre R dans leur nom de famille. soit : SELECT ename FROM emp WHERE ename LIKE ('_AR%'); +--------+ | ename | +--------+ | WARD | | MARTIN | +--------+ 2 rows in set Déjà un peu plus compréhensible non ? C'est en jouant avec ces deux jokers qu'on arrive à trouver ce qu'on veut. On va maintenant s'intéresser au IN : Il s'agit en fait d'une énumération. Seulement, on peut l'utiliser avec différents types. Par exemple, on sélectionne les employés travaillant dans les services 3 et 4 : Les membres sont entre parenthèses et séparés par une virgule, on peut mettre autant de termes qu'on veut. Le fonctionnement pour le NOT IN est le même. Seulement, on ne prendra que les données dont la valeur du champ n'est pas dans les parenthèses. BETWEEN et NOT BETWEEN On recherche un champ dont la valeur est entre deux valeurs. Il faut savoir que les bornes du BETWEEN sont inclues dans la recherche. Exemple : On recherche les employés qui ont un salaire compris entre 1600 et 3000 : On passe maintenant à l'opérateur de comparaison IS NULL Il faut savoir quelques petites choses avant de commencer : Une valeur NULL est une valeur inconnue NULL <> 0 NULL = valeur non renseignée On teste par IS NULL et non = NULL Exemple : Les employés et leur département qui ont une commission NULL Seulement, une colonne NULL n'est pas très pratique pour faire des calculs. C'est pourquoi chaque SGBD permet de remplacer NULL par une autre valeur. Seulement, cette fonction dépend des SGBD : Pour Oracle : NVL() Pour SQL Server : ISNULL() Pour PostgreSQL : COALESCE() Pour MySQL : IFNULL() Dans ce tutoriel, j'utilise MySQL donc je prendrai pour exemple IFNULL(). Regardons : SELECT ename, sal, comm, sal + comm, sal + IFNULL(comm,0) FROM emp; +---------+-------+------+------------+----------------------+ | ename | sal | comm | sal + comm | sal + IFNULL(comm,0) | +---------+-------+------+------------+----------------------+ | SMITH | 800 | NULL | NULL | 800 | | ALLEN | 1600 | 300 | 1900 | 1900 | | RICARDO | 2000 | NULL | NULL | 2000 | | JONES | 2975 | 100 | 3075 | 3075 | | FORD | 1300 | NULL | NULL | 1300 | | KING | 10000 | 5000 | 15000 | 15000 | | WARD | 1500 | NULL | NULL | 1500 | | MARTIN | 1650 | NULL | NULL | 1650 | +---------+-------+------+------------+----------------------+ 8 rows in set Pratique non ? Passons à la suite ! Les opérateurs logiques Dans une requête SQL, on pourra utiliser des opérateurs logiques afin de lier deux prédicats. Cela permet d'avoir un résultat plus précis avec des conditions simples. Les principaux opérateurs logiques sont (par ordre d'évaluation) : NOT AND OR Ils s'utilisent comme cela : SELECT * FROM emp WHERE deptno = 1 AND sal > 1000; Il est plus que conseillé d'utiliser des parenthèses pour "imposer" l'ordre d'exécution des opérateur logiques. On arrive à la fin de ce chapitre sur la restriction et la sélection des données. Le prochain chapitre sur les jointures sera plus pointu, et plus complet. N'hésitez pas à relire plusieurs fois certains points, quitte à demander un éclaircissement sur quelque chose que vous n'auriez pas compris. Avant de passer au prochain chapitre, je vais ajouter un dernier point : Le résultat d'un SELECT est en fait une relation. On pourra donc utiliser le résultat d'un SELECT dans plusieurs cas : Sous requête Jointures UNION (et opérations ensemblistes) Voila, le chapitre est terminé, on passe à la suite ! IV - Jointures Passons au point le plus marrant de ce tutoriel, et ce sera le dernier. Écoutez bien, les jointures sont des notions importantes pour bien manipuler une base de données ! En effet, les jointures vont nous permettre de mettre en corrélation plusieurs tables au sein d'une même requête, donc en économisant (si c'est bien fait) des ressources système et sans avoir besoin de traitement dans un autre langage (tel que PHP, par exemple). Il existe trois "grandes familles" de jointures : Le produit cartésien Les jointures naturelles Les théta-jointures (ou équi-jointures) Je vais tous vous les présenter, mais celui qui nous intéresse est bien évidemment le dernier. Le produit cartésien : Il s'agit d'une opération entre les relations qui combine toutes les occurrences. C'est à dire que le nombre de lignes du résultat est égal au produit du nombre de lignes de chacune des relations. Autrement dit, si on a une table qui contient 3 entrées, et qu'on fait un produit cartésien avec une autre table qui en contient 4, le résultat fera 12 lignes. Exemple : mysql> SELECT * -> FROM lettre,chiffre; +--------+---------+ | lettre | chiffre | +--------+---------+ | a | 1 | | b | 1 | | c | 1 | | a | 2 | | b | 2 | | c | 2 | | a | 3 | | b | 3 | | c | 3 | | a | 4 | | b | 4 | | c | 4 | +--------+---------+ 12 rows in set Vous avouerez que, quand on manipule de grandes bases de données, cette méthode est très gourmande en ressources et en plus, il est très probable que nous n'utilisions pas tous les résultats. La jointure naturelle : En fait, ce que nous allons appeler jointure peut s'apparenter à un produit cartésien suivi d'une restriction, puis d'une projection. On va combiner des relations ayant des valeurs en commun. Dès maintenant, nous allons beaucoup utiliser les alias afin de simplifier un petit peu nos requêtes. Ne soyez donc pas étonnés lorsque j'en utilise, c'est devenu une habitude. Dès maintenant, nous utiliserons aussi la syntaxe SQL 2 qui introduit justement ces différents types de jointures. Avant, les jointures n'étaient en fait que des produits cartésiens. Trêve de papotages futiles, voici comment s'écrit une jointure naturelle : SELECT deptno, ename FROM dept NATURAL JOIN emp -- Fonctionne sous MySQL, Oracle et PostgreSQL mais pas sous MS SQL Server En fait, une jointure naturelle cherche des champs avec le même nom afin de les mettre en commun. C'est dangereux à utiliser si des colonnes portant le même nom ne se réfèrent pas aux mêmes données. Je vous déconseille de l'utiliser, sauf si vous êtes surs de la base de données que vous utilisez et qu'elle est bien modélisée. La thêta-jointure : C'est le type de jointure le plus souvent utilisé. Nous sommes vraiment maîtres de ce que l'on recherche. La syntaxe est simple à comprendre : -- Nom et salaire des employés gagnant plus que l'employé 7566 SELECT e1.ename, e1.sal FROM emp e1 JOIN emp e2 ON e1.sal > e2.sal -- On fait la jointure avec la condition WHERE e2.empno = 7566 Plutôt simple non ? Pour l'équi-jointure, c'est le même principe, juste la condition change ! -- On cherche le nom de chaque employé avec le nom de son département SELECT e.ename, d.dname FROM emp e JOIN dept d ON e.deptno=d.deptno Alors, convaincus ? Ne vous inquiétez pas, j'ai bientôt fini ! Je vous présente juste une dernière notion Left/right join : En fait, une jointure élimine par défaut les résultats ou il n'y a pas de correspondance (exemple, si un employé n'a pas de département, il ne sera pas affiché). Pour pallier ce problème, il faut dire à SQL de garder les champs à gauche, même si il n'y a pas de correspondance. Exemple : mysql> SELECT ename, e.deptno, dname -> FROM emp e -> LEFT JOIN dept d ON e.deptno=d.deptno; +---------+--------+--------------+ | ename | deptno | dname | +---------+--------+--------------+ | JONES | 2 | Recherche | | FORD | 3 | Comptabilité | | WARD | 3 | Comptabilité | | MARTIN | 3 | Comptabilité | | SMITH | 4 | Support | | ALLEN | 4 | Support | | KING | 6 | HeadOffice | | RICARDO | NULL | NULL | +---------+--------+--------------+ 8 rows in set Ici, on a dit : "Même si il n'y a pas de correspondance, tu gardes les membres étant à gauche (LEFT) de la jointure" et Ricardo est apparu. C'est exactement le même principe pour RIGHT, tout dépend de comment vous construisez vos requêtes. Voilà, je pense avoir fait le tour pour ce tutoriel. N'hésitez pas à réagir, contester, demander des éclaircissements... Bon courage dans vos requêtes SQL Merci d'avoir lu, Pirkoa
    7 points
  6. Plop Je vais vous présenter différant site chinois pour faire ses achats. Les sites que je vous propose sont connu pour être fiable avec des prix vraiment intéressant. Vous trouvez sur les différant sites vraiment tout ! Du déguisement (cosplay/costume) aux produit électroniques. Pourquoi acheter sur un site chinois ? : Il faut se dire que la plupart des produits électronique ou textile viennent de chine. En achetant directement sur un site chinois vous évitez de payer l'énorme marge du revendeur. A savoir quand on commande sur un site chinois : Pour éviter d'acheter un produit de mauvaise qualité, évitez les contre-façon. Pour les marques chinoise, renseignez vous sur internet quand à la qualité du produit. Les produits consommable (chapeau/masque ou autre connerie que vous trouvez dans les conventions) sont encore moins cher acheté en quantité. Négocier avec un vendeur / éviter les frais de douane : -Sur les sites avec plusieurs marchant comme Aliexpress vous avez la possibilité de négocier avec le vendeur. Pour cela ajouter le produit désiré au panier/aller au panier/au dessus de votre produit vous allez voir une goûte orange et une lettre. La goûte sert a ouvrir un chat instantané et la lettre a laisser un message. Si le vendeur accepte de vous offrir quelques euros sur un produit, le changement se fera directement dans votre panier et vous n'aurez plus qu'a payer. -Pour éviter les frais de douane on peut demander au vendeur de déclarer la valeur du produit par un montant inférieur a 40 euros. " Can You declare 39$ on the customs declaration please to lower my customs fee ?" AliExpress : Mon site préféré ! Site du groupe Alibaba qui est bien plus grand quEbay ou Amazone avec énormément de produit. Note : Avant d'acheter regarder bien les avis de votre produit et le nombre de vente. Si vous avez un doute sur quelque chose, n'hésitez pas a questionner le vendeur avant d'acheter. Dealextrem : Contrairement a Aliexpress ici on a qu'un seul vendeur. Déjà effectué plusieurs achats. note : Site très fiable mais avec moins de produit que sur Aliexpress car il est spécialisé uniquement dans l'informatique/électronique. Hobbyking Site d'électronique/robotique utilisé par un ami pour faire un drone et recommandé par le chef Leplayze en personne. Pensez aux frais de douane si vous payez pour plus de 40 euros. Plus de sites : Hongkongeek : Site directement en relation avec la France il me semble. Peu de stock et spécialisé dans l'importations de smartphones chinois de qualité. note : Je ne sais pas si le site est fiable mais si vous payez des frais de douane il vous les rembourse. Si vous faites un achat sur un des sites que j'ai proposé ou bien si vous connaissez un autre site chinois recommandable, n'hésitez pas a en parler ! /!\ Pensez à créer une adresse e-mail différente pour vos achats/créations de compte sur ces sites afin d'éviter les spams et autres harcèlements
    7 points
  7. Questions récurrentes • Altis Life • Les policiers ne peuvent pas menotter/interagir avec les civils ? • La plupart du temps il ne s'agit pas d'un bug, mais depuis la dernière mise à jour de Altis Life (3.1.2) pour interagir avec les civils, il faut appuyer sur la touche "Windows" de gauche et le menu d'interaction apparaît ! N'oublier pas de menotter le civil avant (Shift+R) • Le garage ne fonctionne pas ... • Soit c'est parce-que vous avez une map d'une ancienne version de Altis Life (donc le script d'initialisation du garage ne fonctionne plus) ou alors il y a un problème au niveau de la configuration de la BDD. • Impossible de se connecter au port ... • Faite clic-droit, puis "Déverouiller" sur touts les fichiers avec l'extension .dll se trouvant dans le dossier Arma2Net. • Quand je parle ça fait une voie de chipmunk ! • Pour régler ça c'est très simple. Allez dans le fichier C:\Program Files...\Arma 3\cfg\server.cfg Il est possible que le fichier config se trouve autre part en fonction de ou vous téléchargez les fichiers ! Ouvrez ce fichier avec notepad++ (ou bloc-note) puis modifiez cette ligne : "vonCodecQuality = 10;" Il suffit de mettre 10 et pas 30 comme sur mon pack
    7 points
  8. Pour se faire il vous faudra : - Un ordinateur sous Windows - Skype, pour plus de facilités Tout d'abord connectez-vous normalement avec un compte sur Skype, celui que vous voulez. Ensuite, fait Windows + R Dans la fenêtre qui apparaît écrivez : C:\Program Files\Skype\Phone\Skype.exe /secondary ou C:\Program Files (x86)\Skype\Phone\Skype.exe /secondary Cela dépend de où vous avez installé Skype Une nouvelle fenêtre Skype se lance, maintenant connectez-vous avec votre deuxième compte
    7 points
  9. Bonjour à tous, Comme certains d'entre vous le savent, je suis actuellement en train de travailler sur un MMORPG nommé Rulemasters World. Avant de me lancer dans ce projet, qui était totalement nouveau pour moi (premier MMO), j'ai décidé d'en apprendre plus sur le développement de jeux-online de manière générale. J'ai ainsi lu plusieurs dizaines de livres (qui parlent de conception d'Engines principalement, ainsi que de conception de massivement multijoueur), et j'en ai acquis assez d'expérience pour pouvoir débuter le développement de Rulemasters World. Ainsi, nous allons parler des étapes de développement, ainsi que du pourquoi du comment se lancer dans un MMO est compliqué. C'est partit! I - Mises en garde: Pourquoi développer un MMO n'est pas une bonne idée. Comme beaucoup d'entre vous qui me connaissent, je suis un amateur des gros projets non terminés, et j'en ai lancé beaucoup. Je pense être bien placé pour vous dire que le développement de MMO est extrêmement passionnant, mais malheureusement très long. Je vais donc d'abord vous expliquer pourquoi il est important de ne pas se lancer dans un MMO trop vite, et plutôt s'axer dans du jeu Offline pour commencer. Sachez que le développement d'un MMO prends, en moyenne 2 à 3 fois plus de temps à développer qu'un jeu classique. Déjà, nous allons voir un point très important: 2D ou 3D? Avant tout, il faut savoir qu'il existe une différence ENORME entre le développement de jeux 2D et 3D. Si vous avez déjà tenté de développer des jeux, vous le savez déjà: la 2D est plus simple à gérer que la 3D. Voici 3 points qui font que la 2D est plus simple: Il est plus facile, et moins cher, de trouver des graphistes 2D que 3D.La création de Modèles 3D est beaucoup plus complexe, et l'animation aussi.Le développement en est impacté, car le jeu doit paraitre beaucoup plus fluide pour être immersif, ainsi que les algorithmes beaucoup plus complexes pour gérer les entités (détections des collisions en 3D, octo-trees, etc...).Ainsi, si vous souhaitez vous lancer dans un jeu, celui-ci sera certainement en 2D si vous débutez. La notion de "temps réel" est très importante aussi. Dans un jeu 2D où on peu se permettre d'envoyer les positions une fois le changement de case, ou bien d'utiliser de la prédiction pour les mouvements (dans le cas d'un jeu Full TCP comme World of Warcraft par exemple), le temps réel n'a pas vraiment une grosse impacte dans le jeu. En gardant l'exemple de WoW, si vous avez un décalage de 200 ms avec les appels serveurs, vous ne le verrez pas, car WoW utilise une méthode appelée prédiction, et qui simule ce qui se passe sur le serveur sur votre écran. (C'est pour cela qu'on voit des gens courir dans le vide lorsqu'ils perdent la connexion, ou encore, une petite téléportation à la fin du mouvement). Mais dans un jeu où le personnage a besoin de bouger tout le temps, et en temps réel par rapport au serveur (je prends l'exemple de Skyforge, ou Guildwars par exemple, il sera important d'utiliser des appels TCP et UDP (nous y reviendrons plus tard). Un autre point important: Il faut avoir une excellente connaissance au niveau du langage utilisé, ainsi qu'en réseau. En effet, un MMO qui consomme beaucoup de ressources pour 10 joueurs n'en fera certainement pas tourner 100 000. Il est important d'avoir déjà eu de l’expérience avec la gestion de multientités, et bien savoir optimiser sa façon de programmer. La connaissance en le langage utilisé est ainsi extrêmement importante. Nous verrons en dessous quels langages sont conseillés pour programmer un MMO, et pourquoi il est important de bien choisir. II - Les technologies existantes. Dans ce chapitre, nous allons voir les technologies existantes, et comment les utiliser dans le but de créer votre MMO. Nous allons aussi trier ces technologies, pour savoir lesquelles utiliser. 1 - Les langages de programmation. Eh oui, vous ne créerez pas de MMO sans programmer ;). Je rappelle qu'une connaissance très pointue du langage en question est demandée pour ce genre de projets. Le MMO doit être le plus fluide possible! Nous parlerons ici uniquement du langage côté serveur, car c'est ce côté qui doit être le plus optimisé. (pour le client, comme pour tous les jeux, le choix est assez large) a - Évitez les langages de type scripts! Alors, un point très important, évitez les langages de scripting! Des langages comme PHP, Python, Ruby etc... Ne sont pas adaptés pour créer ce genre de projets. Leurs architecture et leurs appels systems sont trop instables et consomment trop par rapport à leur utilité. Il est important de rentre ces appels le plus fluide possibles, car ils seront très souvent appelés. Bien sur, cela ne signifie pas que vous ne pourrez pas créer de MMO avec, mais il sera très instable avec un grand nombre de joueurs. Le contrôle de la mémoire y est très peu présent, car géré par un Garbage Collector. b - Les langages compilés. Au niveau des langages compilés, nous verront 4 langages en particulier: Java, C#, C++ et C. Commençons par Java et C#. Dans le cas de C#, je déconseille fortement son utilisation pour du jeu vidéo de manière générale. (Attention, ne citez pas Unity3D comme exemple! Ils utilisent C# comme langage de SCRIPTING et non pas comme programme compilé.) C'est un langage utilisant des appels systems souvent lourds, et passant forcément par une librairie externe (.net framework). Les appels aux libraires sont souvent plus lourds. De plus, le GBC de C# est beaucoup moins puissant que celui de Java. C# a été pensé pour faire des applications mobiles et bureautiques. Il ne sera donc pas adapté pour un serveur de MMO. Du coup, est-ce que Java est une valeur sure? Eh bien, oui et non. Comparé à C#, java est une valeur largement plus sure pour le développement d'un MMO: Prise en charge de la mémoire de manière Sandboxée (ce qui permet une allocation très rapide, on y reviendra plus tard)Un GBC très agressif, mais très efficace.Des appels à des méthodes totalement virtualisées (4x plus rapide que C# et 2x plus rapide que C++, voir ici pour la comparaison Java/C, c'est un peu vieux, mais toujours d'actualité).Une pré-construction des objets, permettant une utilisation fluide de la mémoire.Néanmoins, comparée à C++, Java a pas mal de points à revoir. Je ne citerais que le fait de ne pas pouvoir gérer la mémoire, qui peut être très important dans certains cas. Mais ce n'est pas pour ça que je déconseille Java pour le développement d'un serveur de MMO. Par contre, il faudra prévoir une grosse quantité de RAM pour la JVM, et la préallouer correctement (je vous l'ai dis, il faut avoir une excellente connaissance du langage). Pour exemple, j'ai choisi Java pour le développement de Rulemasters World, et le serveur arrive à tenir 100 000 entités sans problème, avec plus de 50 000 connexions. (Beaucoup de systèmes d'optimisations ont été utilisés.) Le C++ et le C maintenant. Le C++ est sans conteste le langage le plus utilisé dans le développement de jeux vidéos: Il est très proche du langage machine, et permet une gestion totale de celui-ci. La gestion de la mémoire par le programmeur y est très importante, et tout est fait pour être optimisé. Il faudra, par contre, être un expert dans cette technologie pour que tout tourne convenablement. Une seule erreur peut être très dangereuse pour le serveur, vue que la mémoire n'y est pas sandboxée. Il est donc important de bien savoir ce que l'on fait avec ce langage. Saint-grâle du jeu vidéo, il est utilisé pour tous les moteurs de jeu (oui, Unity est intégralement en C++), et dans tous les serveurs de jeu des MMO actuels. Sa complexité le rend encore plus intéressant, et le contrôle total du langage permet beaucoup de choses. Le C a les mêmes attributs que son petit frère C++, mais il est plus basique (n'oublions pas que C++ est une amélioration du C en y ajoutant un contexte d'objets). Néanmoins, je ne conseille pas la création d'un MMO en C, pour la simple et unique raison que le langage est trop basique, et que le concept d'objet simplifie grandement le développement d'un jeu. N'oubliez pas que tous ces langages, dans le cadre d'un MMO, ne s'auto-suffisent pas, on voit souvent des engines de MMO utiliser des scripts (Rulemasters World utilise Javascript, WoW utilise LUA, etc...) car les moteurs proposent une base. Pour exemple, WoW utilise le Lua pour créer certaines de ces entités, les phases des boss, etc... Des parties en ASM peuvent être aussi utilisées (en Java, il est possible d'utiliser du C++/C/ASM, en important une DLL par exemple), le but étant d'optimiser au maximum ce qui n'est pas utilisable avec le langage de base. En bref, il est très important de bien choisir le langage du serveur, néanmoins, cela ne vous limite pas à ce langage. Vous pouvez essayer d'autres langages et faire vos propres choix, mais le C++ reste un des langages les plus utilisés dans ce cas précis. Pour le client, aucune restrictions: Il n'est pas nécessaire d'avoir un client Ultra-optimisé. Pensez quand même à ne pas afficher trop d'entités en même temps III - Connaissances requises Comme je l'ai cité plus haut, il est très important de bien maitriser le langage que l'on utilise. Ce sont de petites modifications par ici, 2μs gagnées par là, qui peuvent faire une énorme différence. Voici donc une liste de connaissances à avoir. Lorsque je parle de connaissances, je part du principe que vous avez déjà eu de l’expérience par rapport aux connaissances requises. Optimisation de trisFonctionnement d'une HashMap ou HashTabSavoir utiliser une PoolConnaitre la notion de préallocationsGestion de la mémoire avancéeOptimisation de gestion massive d'entités (Quad-trees, Part-trees, Octo-Trees, etc...)Conception de moteur de jeuOptimisations générales sur le langage utilisé (d'une manière générale, tapez-vous la doc de A à Z du langage. Vous serez souvent surpris!)Une connaissance en Réseaux pointue (aussi bien en Programmation Réseau, qu'en Réseau général, et en Systadmin Réseau (Proxy, etc...)) Citons Blizzard qui nous propose de nous recruter en temps que développeur Serveur sous ces conditions: J'ai mis en gras des parties importantes. Ont voit très bien que la liste est assez similaire à celle que j'ai cité plus haut, sauf pour la gestion des entités, mais voyons donc l'offre de Blizzard pour les Engine developpers: On y voit encore des expériences conséquentes demandées dans le C++. On y retrouve la notion de gestion d'entités Massives, notamment dans le "Collision ans physics". Bref, ne prenez pas un MMO comme premier projet! Prenez le temps de prendre de l’expérience! Voilà, c'est, d'une manière générale, des connaissances importantes lors du développement d'un mmo. Il peut en manquer, je n'ai pas tout mis, mais c'est le plus important de mon point de vue. IV - Etapes de développement /* TODO */ V - Conclusion /* TODO */ Voilà, j'espère que les intéressés ont vu leurs questions trouver des réponses! Les 2 dernières parties seront complétées sous peu, je suis en contact avec des développeurs de MMO, je souhaite avoir leurs témoignages. Je n'ai pas parlé ici de RPG, car il s'agit d'une branche bien plus complexe du développement de MMO. Le RPG a non seulement besoin d'une architecture solide, mais aussi d'une histoire solide. Je n'en parlerais pas ici. Le Segfault vainquera! Cordialement, AlexMog.
    6 points
  10. Le deepweb Suite à certaines demandes, je vais faire une introduction au deepweb, afin de vous expliquer le principe sur lequel celui-ci fonctionne et les moyens pour s'y connecter. Avant tout, j'apporte quelques petites précisions : je vais très certainement m'inspirer d'autres sites pour rédiger ce guide, les sources seront cités en bas de page. D'autres part, je ne prétends pas tout connaître sur le sujet, alors si quelque chose vous gêne ou si vous préférez que je parle d'un point : spécifiez-le moi. 1 - Introduction Pour commencer, si vous souhaitez comprendre intégralement et de manière plus complexe le fonctionnement du deepweb, ses explications et détails techniques, je vous invite à rechercher des thèses sur internet ou même consulter son wikipédia (http://www.fr.wikipedia.org/wiki/Web_profond, qui est cependant extrêmement peu rigoureux). Je vais néanmoins vous parler un peu du deepweb avant d'expliquer comment s'y rendre, donc si vous souhaitez juste aller dessus sans vraiment comprendre, allez directement en bas de ce guide. Afin de clarifier la chose, ce qu'on appelle deepweb est une partie d'internet bien spécifique. Son nom, littéralement "web profond" vient du fait qu'il est nécessaire pour y accéder de passer par un navigateur spécifique, intégrant une technologie de chiffrage des données* et d'un algorithme de redirection des connexions spécial : Tor. Tor est un réseau internet (acronyme de The Onion Router) décentralisé qui permet une connexion (plutôt sécurisée) à des serveurs en passant auparavant par d'autres utilisateurs de ce réseau. Pour simplifier les choses, sur internet "normal" -dit le surfaceweb- votre navigateur se connecte directement sur un serveur hébergeant un site et réceptionne les informations de celui-ci (c'est en fait un peu plus complexe, il passe par le FAI, des serveurs DNS, des CDN, etc... Mais l'idée est là). Sur le deepweb, où plutôt sur le réseau Tor (ce qui revient à la même chose), votre navigateur va tout d'abord transiter par plusieurs dizaines d'autres navigateurs d'utilisateurs pour finalement arriver sur le site en question : le but étant d'anonymiser la connexion au serveur, puisque l'information sera relayée par plusieurs dizaines d'adresses IP (ce qui vous protège un peu). On appelle ce réseau "onion" (le O de Tor) grâce à l'image de plusieurs couches d'un oignon superposées. Couches par lesquelles vous transiterez à la fin de ce tutoriel si vous vous rendez sur le deepweb. Pour votre information, Tor est le nom de ce réseau internet permettant l'accès au deepweb, mais dans 90% des discussions lorsqu'on vous parlera du deepweb, Tor sera en fait Tor browser, le navigateur nécessaire pour se rendre sur le deepweb qui inclut les protocoles et les algorithmes correspondant. Si vous souhaitez vous renseigner sur les transistions des packet, je vous laisse consulter la page wikipédia lié à ces détails techniques. Également, les URL du deepweb sont chiffrées. Déjà, celles-ci finissent toutes en .onion, et le contenu du nom de domaine est une suite de caractère sans signification (et oui, c'est pas comme le surface web), vous aurez par exemple une adresse web du style : https://gfe45a98uj4o4lclsmq7h98r9sdg.onion. J'essaierais de dresser un petit annuaire par la suite, pour vous aider à démarrer la dedans. Enfin, une dernière chose de l'introduction, vous avez peut-être déjà entendu parler du fait que le deepweb est la partie cachée de l'iceberg, et qu'il représente 96% de l'internet. Ceci est évidemment faux, c'est un mythe. Le deepweb est une partie d'internet à part entière mais elle absolument minoritaire de part ses fréquentations et d'un point de vue technique. Commençons par ses fréquentations : le deepweb, vous l'aurez compris, n'est pas disponible dans le premier starbucks en centre-ville sur un iPad fournit pendant que vous dégusterez un jus de chaussette amer fait à base de graines de cacao moisies en container, obtenues en martyrisant des régions entières... Je m'emporte. Satanés hipsters. Bref, le deepweb est peu accessible, et d'après la loi de l'offre et de la demande : Peu d'offre = Peu de demande. Simplement. De plus, vous trouverez sans doute un annuaire des sites sur le hiddenwiki (retenez ce nom). Vous découvrirez vite que les sites dessus sont exponentiellement plus hardcore, si vous me passez l'expression, mais aussi exponentiellement moins nombreux. Ensuite, le point de vue technique : le deepweb est une infrastructure couteuse et complexe à mettre en place aux yeux de ce que demande une simple page au réseau (en terme de capacité). Les ressources financières nécessaires au réseau Tor sont les suivantes (sources wikipédia) : 60 % proviennent du gouvernement américain (soutien à la liberté d'expression et à la recherche scientifique) 18 % proviennent de fondations et autres donateurs (John S. and James L. Knight Foundation (en), SRI International, Google, Swedish International Development Cooperation Agency (en)) 18 % proviennent de la valorisation des contributions des bénévoles. Toujours par la même source, le réseau coûte 2 millions de dollar annuellement. En comparaison, internet (= le surfaceweb) est une économie coutant plusieurs milliards de dollar annuellement (mais oui, les gains sont plus élevés). Vous installerez difficilement un nœud de connexion Tor par vos soins sur un serveur mutualisé web, alors qu'un site normal peut l'être facilement. Pour information, ce mythe (à présent démystifié) provient d'un article datant de 2001 (13 ans actuellement), que vous pouvez consulter ici. A cette époque, la bulle internet venait d'exploser et tout le monde (surtout la finance, cf. la crise) spéculait sur cette nouvelle technologie. L'article parle donc du deepweb MAIS ajoute également dans la balance les bases de données des sites, donc pas accessibles au publique (normalement) ET les sites web (indexables ou non) qui n'ont pas été répertoriés par des moteurs de recherches. Vous comprendrez d'où vient ce mythe : un internet ancien et peu développé, sur lequel on compare les pages web accessibles contre les pages web non accessibles et les bases de données (l'article précise que certaines pèsent plusieurs centaines de GO, déjà en 2001). Voilà, vous avez eu une explication sur le fonctionnement du deepweb, assez sommaire ma foi mais je pense qu'elle suffira pour commencer. Si vous êtes curieux, internet sera toujours plus rigoureux que moi. Ah, et un dernier mythe : le deepweb n'est pas illégal, pas du tout. Visiter la majorité des sites et totalement légale, cependant l'achat sur certains sites ne l'est peut-être pas, par contre. 1 - Utilisation C'est dans cette partie que je vais vous expliquer comment accéder à ce réseau privé, qui malgré les croyances populaires est somme toute pas franchement compliqué d'accès. Avertissements nécessaires : Le deepweb a la réputation d'être inhumain et d'être l'antre des malades mentaux. Globalement c'est faux. La majorités de ce réseau est tout aussi normal que la société dans laquelle nous vivons, on y trouve même des forums comme Melinyel.net, donc ce n'est pas le cas. CEPENDANT : il existe bel et bien des sites DANGEREUX et malsains dont je ne souhaite pas encourager le partage. J'interdis donc le partage de liens sans m'avoir consulté au préalable, et j’interdis évidemment de poster les médias trouvés là-bas. 2 - Sur le deepweb, vous trouverez pleins de personnes différentes, et notamment des sites de piratages / hacking. Ces sites comportent souvent des virus pouvant s'installer directement sur votre PC par une simple visite, ça ressemble à un récit d'un kikoo qui ne s'y connait pas je vous le concède, et pourtant cela existe (je n'ai pas réussi à comprendre ce fonctionnement -le javascript n'est pas activé-). Donc protégez-vous malgré tout : je recommande fortement l'utilisation de Tor browser sur une machine virtuelle plutôt que directement sur votre système d'exploitation à nu. 3 - Faites attention où vous allez. Sans risquer quoique ce soit aux yeux de la loi ou pour la sécurité de votre ordinateur, certaines choses sur le deepweb sont marquantes et ne sont pas tout publique. Je vous considère donc comme prévenu. Donc voilà, maintenant que vous savez tout ça, vous êtes prêt pour vous rendre sur le deepweb. Commencez par télécharger la dernière version du logiciel Tor Brower : https://www.torproject.org/download/download-easy.html.en Téléchargez la version correspondante à votre système d'exploitation, installez-là Lancez Tor Browser, vous aurez une interface vous demandant le type de votre connexion comme spécifié ci-dessous, cliquez simplement sur "Se connecter" Voilà, vous arrivez sur la page principale du navigateur. Il ne vous reste qu'une seule chose à faire : cliquez sur le petit (S) en haut à gauche, et désactivez le JavaScript. C'est une mesure de sécurité et augmente le temps de chargement des pages web du deepweb, qui seraient incroyablement longues sinon. Voilà, votre aventure commence ici, je vous donne cette adresse, qui est l'adresse du hiddenwiki : l'annuaire du deepweb. Faites attention où vous irez. http://kpvz7ki2v5agwt35.onion/wiki/index.php/Main_Page * : L'algorithme de Tor a été mis à mal une seule fois, par un enseignement chercher d'une école française d'ingénieure française (en plus !) : ESIEA (source) Sources : Connaissance / expérience personnelle http://fr.wikipedia.org/wiki/Tor_(réseau) http://fr.wikipedia.org/wiki/Web_profond http://quod.lib.umich.edu/cgi/t/text/text-idx?c=jep;view=text;rgn=main;idno=3336451.0007.104 https://www.torproject.org/about/overview.html.en Ce guide / tutoriel touche à sa fin, si besoin je l'éditerais. Si vous avez des questions, n'hésitez pas !
    6 points
  11. Bonjour à tous, Je vais vous présenter le projet de chat pour la communauté que je mène avec AlexMog. Le but de ce projet est d’offrir un chat convivial et performant. Mais c'est également un défi technique pour nous. Étant donné que vous serez les principaux utilisateurs de ce chat, vous avez votre mot à dire ! Le chat est disponible à l'adresse suivante : http://easychat.evade-multimedia.net Version du client actuelle : 0.4.1 Version du serveur actuelle : 093 Documentation : http://easychat.evade-multimedia.net/docs/ Changelog du client : http://easychat.evade-multimedia.net/welcome/changelog/ Le sujet spécifique au serveur est disponible ici : N'hésitez pas à utiliser ce post pour signaler un bug ou faire une remarque.
    6 points
  12. Bonjour à tous, Aujourd'hui je vous propose de choisir quels seront les tutoriels que je vais réalisés. Comme j'ai plein d'idées et pas forcément le temps de tous les faire, voici une sélection parmi lesquelles vous pouvez choisir ceux qui intéresserais le plus. Si vous souhaiter avoir plus de précision sur le contenu d'un tutoriel précis, demandez-moi ! Allez s'y ! Faîtes vos choix ! Voici les tutos déjà réalisés : Crée un personnage de fiction : http://melinyel.net/index.php/topic/641-cr%C3%A9er-un-personnage-de-fiction/ Établir le background d'un Univers :
    6 points
  13. Plop Voici Xenocrack, un site de xenocode avec plusieurs cours pour apprendre a cracker une application en .net. Le site comporte également une section "divers" avec d'autres cours lié comme par exemple "introduction à la sécurité en .net" Les cours sont divisé comme ceci : -Introduction au cracking .net -Petite introduction à Simple Assembly Explorer (SAE) -Mon premier crack -CFF Explorer -Quand SAE ne suffit plus -Reflexil - le RE pour mamie -Introduction à Reflexil -System de Licence -Mon premier Keygen -System de Licence -Debug avec VisualStudio Voici le site : http://xenocrack.0pu.ru/# Si les cours vous plaisent, pensez à remercier Xenocode.
    6 points
  14. Bonjour à tous, et bienvenue dans ce premier cours dédié au C. Dans ce cours, nous allons voir pourquoi il est important de comprendre et de programmer en C, puis nous passeront à une partie plus pratique en regardant les outils qui nous sont proposés pour cela. I- Pourquoi apprendre le C? Le C est un langage le plus bas niveau qui existe (après l'ASM bien entendu!), il permet donc de mieux comprendre le fonctionnement de sa machine. Bas niveau? Cela signifie qu'il est simple? Bas niveau ne corresponds pas au niveau de simplicité du C. Il s'agit en faite d'un niveau par rapport à la machine. Plus un langage est bas niveau, plus il sera proche du fonctionnement de la machine, donc difficile. Plus il sera bas niveau, plus il nous permettera de comprendre le fonctionnement de la machine. Nous allons donc avoir plusieurs cours, en ayant pour but de comprendre comment fonctionne notre machine. Pour cela, nous allons nous orienter vers une programmation impérative que nous permet le C, en nous forçant à n'utiliser QUE des appels system (Donc pas de libc! (à titre informatif: c'est la méthode Epitech)). Nous seront donc obligés de re-créer nos propres outils de travail! Vous l'aurez compris: les prochains cours ont pour but de vous apprendre à utiliser de façon extrême le C. Sans utiliser les outils déjà mis à disposition (libs, etc...), pour vous apprendre à comprendre comment ceux-ci fonctionnent! II- Les outils pour programmer en C Le tout premier outils que je vous conseille, c'est d'utiliser LINUX. Pourquoi Linux? Eh bien c'est très simple: Linux propose énormément d'outils de débugage, et beaucoup d'outils de programmation (Make, Valgrind, GDB, Emacs etc...). Ainsi qu'une documentation détaillée des appels system et de la libc (grâce notamment à la commande "man"). Enfin, une protection plus rapprochée du système qui vous évitera de mauvaises suprises lorsque vous jouerez avec la mémoire (je conseille fortement d'utiliser les limitations de ram par users pour éviter les forkbombs et autres malloc infinis). Je vous conseille donc fortement d'utiliser Linux. De mon côté, j'ai opté pour un Debian sur lequel j'ai installé une interface graphique et tout les outils nécéssaires! Je conseille fortement Mint qui est basé sur Debian. Vous pouvez utiliser une machine virtuelle pour faire tourner votre Linux si vous ne souhaitez pas le rajouter au Dump! Ensuite, les outils de base: Nous allons programmer en utilisant 5 outils très importants: Emacs: C'est l'éditeur qui va nous permettre d'éditer nos codes en C. Il est très pratique, mais il faut connaitre les syntaxes et les racourçis qu'il propose! GDB: C'est un excellent débugueur qui permet de fixer des points d'arrêt sur son programme, pour réussir à trouver les problèmes de notre programme! Valgrind: C'est un de mes outils préférés: Il permet de savoir si vous avez bien free tout vos malloc (et donc, bien vidé toute la mémoire) et de repérer les segfaults (à notter: il faut rajouter -g3 aux flags de compilation pour que celui-ci marche pleinement, n'oubliez surtout pas de supprimer -g3 de vos makefiles à la version finale. -g3 rends l'exécutable très lourd). Make: L'outil Make est l'un des plus importants: il nous permettra de créer un "Makefile" qui va nous permettre, grâce à la commande Make, de compiler, et nétoyer notre programme facilement. htop ou top: C'est un invité de commandes pour unix, qui va nous permettre de voir l'avancement et l'utilisation de notre RAM/CPU. Voilà, je vous es donc fait une courte introduction sur tout ce qui es des outils et de la programmation en C! Rendez-vous au prochain cours! Cours écrit par AlexMog. Contact: alexmog [at] live [point] fr
    6 points
  15. Bonjour. Comme le sujet précédent a déjà beaucoup de réponse et qu'il manque de clarté, j'en recrée un ici pour vous tenir informé de l'avancement du projet, et de ses futures caractéristiques ! Ce que l'application fait à l'heure actuelle Connexion au site Affichage des forums en lecture/écriture Accès au chat (la future ancienne version, vouée à disparaître) Ce que l'application va faire dans un futur proche Gestion des discutions privées (envoi, lecture) Support du nouveau chat Affichage des avatars dans le chat Bien sûr, cette liste n'est pas terminée, j'attend avec grande impatience vos retours/envies/suggestions. Globalement l'avancement est plutôt bon, il reste quelques détails techniques et graphiques à régler, et elle sera prête. Voici quelques screenshot, pour vous faire une idée et pour que vous puissiez me donner votre avis sur quoi garder/quoi changer : (Et oui, il manque bien les icônes... foncez sur le concours !) Concernant la publicité L'application affichera si vous le souhaitez un bandeau de pub en bas des pages. Si vous êtes allergiques à la propagande capitaliste, vous pourrez très simplement la désactiver dans les options.
    6 points
  16. Bonjour, voici une petite méthode pour faire de l'ajax simple sans aucun plugin : le DSL Dans l'idée nous allons apprendre à créer une page qui affiche un nombre et un bouton pour incrémenter ce nombre. Afin de stocker ce nombre, nous allons le ranger bien au chaud dans une BDD. Notre page devra donc : incrémenter ce nombre dans la BDD sans rechargement de la page mettre à jour l'affichage du nombre, toujours sans recharger la page (sinon c'est trop simple ) L'utilisation d'une BDD juste pour un nombre peut paraitre exhaustive, mais l'idée est d'appliquer la méthode avec plusieurs nombres, possédants chacun un id... on verra ça après Nous allons utiliser deux pages : index.php et incrementation.php. Voici index.php : <?php $bdd = new PDO('mysql:host=kpsoftware.fr;dbname= toto','jean-michel','fjhbqfkqsfhgsjkgbs'); ?> /* connexion à la BDD */ <div style="text-align: center;"> <span class="leNombre"> <?php $nombre=$bdd->query('SELECT nombre FROM nombre'); $nombre=$nombre->fetch(); echo $nombre['nombre']; ?> </span> /* on à notre nombre ! */ <input value="Plus un !" type="button"/> </div> <script> /* les choses sérieuses commencent ici */ function addEvent(element, event, func){ if (element.attachEvent) { element.attachEvent('on'+event, func); } else { element.addEventListener(event, func, true); } } /* ceci est notre fonction pour ajouter des évènement en javascript */ (function(){ var elements = document.getElementsByTagName('input') for (var i=0;i<elements.length;i++){ addEvent(elements[i],'click',function(e){ /* on ajoute un évènement sur les "input" */ var target=e.target || e.srcElement; if(target.value == 'Plus un !'){ /* quand un "input" est cliqué, on teste sa "value" */ /* si cette "value" est "plus un !", alors on créer un script, dont la source est une page php : incrementation.php. Il ne reste plus qu'à l'ajouter ! */ var scriptElement = document.createElement('script'); scriptElement.src ='incrementation.php'; document.body.appendChild(scriptElement); } }); } })(); /* à ce stade, incrementation.php à été exécuté, je vous invite à aller voir cette page avant de lire la fin de index.php */ function refreshNombre(newNombre){ var spanElements = document.getElementsByTagName('span'); var newSpan = document.createTextNode(' ' + newNombre + ' '); /* on créer notre nouveau span contenant le nouveau nombre */ for (var i=0;i<spanElements.length;i++){ var classSpan = spanElements[i].className; if (classSpan == "leNombre"){ /* on test pour trouver le bon span */ spanElements[i].replaceChild(newSpan.cloneNode(false),spanElements[i].firstChild); /* et là on remplace le firstChild (le texte) de spanElements[i] ( le span contenant l'ancien nombre ) par un clone de newSpan (celui créer juste au dessus contenant le nouveau nombre */ } } } </script> voici maintenant incrementation.php : <?php header("Content-type: text/javascript"); $nombre=$bdd->query('SELECT nombre FROM nombre'); $nombre=$nombre->fetch(); $newNombre=$nombre['nombre']+1; //on récupère le nombre $nombre->closecursor(); $upNbr=$bdd->prepare('UPDATE nombre SET nombre = :newNombre'); $upNbr->execute(array('newNombre'=>$newNombre)); $upNbr->closecursor(); // on l'incrémente ?> refreshNombre(<?php echo $newNombre ?>); /* on execute enfin la dernière fonction de index.php qui va se charger de rafraichir le nombre sur la page, il n'y à eu aucun reload de la part du navigateur ! */ Si les commentaires ne sont pas assez explicatifs dites-le moi ! je me ferais un plaisir de détailler tout ça ! Bien, si vous avez compris l'idée de l'appel d'une page externe via JS pour exécuter un code php sans reload de page, vous avez tout compris. Mais pour exploiter pleinement la puissance du DSL et de la BDD, il nous faudrait avoir plusieurs bouton et nombres dynamiques. Pour cela il suffirait d'envoyer au script incrementation.php une id afin de transformer la requête SQL en : $upNbr=$bdd->prepare('UPDATE nombre SET nombre = :newNombre' WHERE id= :id); $upNbr->execute(array('newNombre'=>$newNombre, 'id'=>$_GET['id'])); $upNbr->closecursor(); et on change la fonction refresh pour qu'elle contienne un paramètre en plus : l'id function refreshNombre(id,newNombre){ var spanElements = document.getElementsByTagName('span'); var newSpan = document.createTextNode(' ' + newNombre + ' '); for (var i=0;i<spanElements.length;i++){ var classSpan = spanElements[i].className; var idSpan = classSpan.substring(classSpan.lastIndexOf('a')+1); if (idSpan == id){ spanElements[i].replaceChild(newNombre.cloneNode(false),spanElements[i].firstChild); } } } avec son appel : refreshNombre(<?php echo $_GET['id']; ?>,<?php echo $newNombre; ?>); Avez-vous vu la subtilité du : var idSpan = classSpan.substring(classSpan.lastIndexOf('a')+1); ? En fait, en HTML il est impossible de mettre un nom de class commençant par un chiffre... du coup, on met un "a" devant et on utilise "substring" pour découper ce "a" on prend la dernière apparition de "a" et on ajoute 1 au rang, il ne nous reste plus que l'id ! celui-ci est donc afficher sur index.php comme ceci : <span class="a<?php echo $nombre['id'];?>"> <?php echo $nombre['nombre']; ?> </span> bien sûr la requere SQL change légèrement : SELECT * FROM nombre Voilà voilà ! DSL dans toute sa grandeur ! Si vous avez des questions n'hésitez pas !
    5 points
  17. Bonjour, vous disposez de points de réputations ? Alors vous méritez peut-être ces récompenses là ! 100 points de réputation : Accès au compte T411 de Melinyel (↑ 2.98 TB / ↓ 80.41 GB | Ratio: 37,94 - le 10/05/2014) 200 points de réputation : Titre personnalisable 300 points de réputation : Adresse mail @melinyel.net Si vous disposez d'assez de points de réputations, contactez Azad par message privé ! Si vous souhaitez avoir d'autres récompenses, n'hésitez pas à nous le suggérer.
    5 points
  18. Bonjour à tous, Je vais vous expliquer comment faire pour faire comme sur notre beau forum pour que lorsque l'on met un lien youtube ou dailymotion le lecteur qui y correspond le remplace: Accédez à votre panel d'administration -> onglet: Configuration -> menu: MyCode Une fois dans ce panel allez dans l'onglet "Ajouter un MyCode": On va commencer avec youtube - Titre: "lien youtube -> vidéo" (vous pouvez mettre ce que vous voulez) - Description: pas besoin - Expression régulière: (\[url\])?https?://(www\.)?youtube\.com/watch\?v=([^ \[]+)(\[/url\])? - Remplacement: <iframe width="560" height="315" src="//www.youtube.com/embed/$3" frameborder="0" allowfullscreen></iframe> - Activé: Oui- Ordre d'analyse: On s'enfou l'expression régulière va cherche ce qui se trouve après .../watch?v= et va l'ajouter dans la balise <iframe> enplus les balises BBCode sont absorbées pour dailymotion même principe(faut juste découper un peu plus l'url): - Titre: "lien dailymotion -> vidéo" (vous pouvez mettre ce que vous voulez) - Description: pas besoin - Expression régulière: (\[url\])?https?://(www\.)?dailymotion\.com/video/([^_]+)(.*)(\[/url\])? - Remplacement: <iframe width="560" height="315" src="//www.dailymotion.com/embed/video/$3" frameborder="0" allowfullscreen></iframe> - Activé: Oui- Ordre d'analyse: On s'enfou Si vous désirez en apprendre plus sur les expressions régulières cliquez ici Et voilà tout simple, j'ajouterais peut-être des images plus tard j'espère que ça vous servira Bon forummage à tous, Cordialement, Mars073.
    5 points
  19. Sublime Text Aujourd'hui, je viens vous présenter le logiciel par excellence pour développer en HTML / CSS ou même dans quasiment tout les autres langages ne nécessitant pas de compilation (essentiellement du web) : Sublime Text. Liens : http://www.sublimetext.com/ Téléchargement : Sublime Text 3 is currently in beta. The latest build is 3059.OS X (10.7 or later is required)Windows - also available as a portable versionWindows 64 bit - also available as a portable versionUbuntu 64 bit - also available as a tarball for other Linux distributions.Ubuntu 32 bit - also available as a tarball for other Linux distributions. Il n'y a pas grand chose à dire non plus sur ce logiciel, à part que l'essayer c'est l'adopter. Il y a une version payante du logiciel, je n'ai cependant jamais compris à quoi sert-elle puisque la version gratuite dispose de toute les fonctionnalités de manière illimité dans le temps (à part un popup qui apparait toutes les 10 à 15 sauvegardes de fichiers, pour vous demander si vous voulez acheter la license). Quelques screenshots : C'est le logiciel que j'utilise personnellement pour tout mes projets web et je le recommande à tout le monde.
    5 points
  20. Hey Melinyens ! J'ai découvert récemment un site américain "Pandora.com" et il est juste magique ! En faite ce site propose une barre de recherche sur laquelle vous rentrez un titre, artiste... et ça va vous créez une radio de toutes les musiques qui ressemblent à celle que vous avez tapé. Bon par contre vu que c'est un site américain il faut passer par un proxy. Le plus simple c'est de télécharger l'extension "Hola". Lien vers l'extension chrome Lien vers l'extension mozilla Ensuite un fois l'extension bien installée dans votre navigateur, rendez vous sur le site Pandora.com et activez l'extension en mettant le drapeau des Etats-Unis, comme ceci : Et retapez dans la barre d'url "Pandora.com" et ça marchera Si vous avez des questions ou un problème n'hésitez surtout pas ! Bonnes vacances pour ceux qui y sont
    5 points
  21. Les rêves lucides, c'est quoi? Et le fait que le rêveur prenne conscience qu'il rêve durant son sommeil. Paul Tholey a défini 7 critères pour définir un rêve lucide. Il dispose: 1.)De son libre arbitre 2.)Une faculté normale de raisonnement 3.)Perception à travers ses 5 sens comparables à la normale 4.)Ses souvenirs à l'état de veille 5.)Il se souvient intégralement de son rêve à son réveil 6.)Il peut interpréter son rêve durant celui-ci Les différents type de rêve: Le rêve non lucide(rn): Est le fait de souvenir de son rêve le matin ou non sans prise de conscience. Le rêve pré-lucide(pl): Est le fait de douter durant son rêve sur l’environnement sans se rendre compte que l'on est train de rêver. Le faux réveil(fr): Est l'impression de se réveiller durant son rêve alors qu'il y a juste eu un changement de décor. Le rêve lucide(rl): ​ C'est le Graal de chaque personne qui s'intéresse au rêve, comme expliquer plus haut, c'est le fait d'avoirs conscience que l'on rêve et pouvoirs ainsi con-troller son propre rêve, les possibilité seront alors infini, la limite sera juste votre imagination ou bien même votre subconscient. Tu es bien gentil, mais comment devient on lucide dans un rêve? Pour commencer, certaine personne pourront très rapidement atteindre un bon état de lucidité dans leurs propre rêves, en quelques jours, et d'autres prendront plusieurs mois. La première étape: -Réaliser un jdr(journal de rêve), dans celui-ci vous noterez tout vos rêves, même si vous vous souvenez juste d'avoirs rêvais, marquer le! Au début vous risquez d'avoirs quelques difficultés pour vous souvenirs de vos rêves, plus vous aurez de rêves dans votre journal, plus vos souvenirs, chaque matin se feront un peu plus présent! Et plus vous vous souviendrez de vos rêves, plus vous aurez des chances de vous souvenir de votre rêve lucide! Et bien sur, il y aura déjà une condition sur sept de remplis, la condition numéro 5 "Il se souvient intégralement de son rêve le matin". Vous ne faites pas qu'un seul rêves chaque nuit, mais énormément! La seconde étape: ​ -Test de réalité ou vérification d'état: Un test de réalité est le fait de remettre en cause votre environnement, lorsque vous rêvez il y a certain signe remarquable, par exemple vos mains, Oui vos mains, durant un rêve vous aurez surtout pas 5 doigt, ou bien vous pouvez passer votre main dans l'autres, la transpercer , ce principe là est un test de réalité. De plus il faut que vous vous demandiez un maximum de fois durant la journée si vous êtes entrain de rêver ou non, plus vous le ferez, plus vous aurez de chances de faire des rn. Quelques test de réalité: -Tirer ses doigt(dans un rêve, ils ont tendance à s'étirer) -Regarder le ciel(il devrait y avoir des anomalies, planète, ovnis, étoile) -Se boucher le nez(vous pourrez toujours respirer) -Regarder un texte, détourner les yeux, regardez le une nouvel fois, si il à changé, vous rêvez! La troisième étape: L'autosuggestion est le fait de se convaincre que l'on va devenir conscient le plus tôt possible, cette nuit ou celles d'après. Une petite vidéo que j'avais réalisé à une époque joyeuse d:, c'est pour vous donnez l'idée. ps: J'espère que c'est pas trop brouillon, c'est mon premier tutorielle/sujet un peu long, j'ai pas trop l'habitude Si des personnes sont motivées, montrez vous
    5 points
  22. Bonjour, ce sujet d'introduction aura pour but de vous faire découvrir ce que sont les VPS et/ou les serveurs dédiés, leur fonctionnement. Je mettrais ce topic en lien avec d'autres qui viendront par la suite (Introduction: Unix/Linux ou Guide : Choisir son VPS / Serveur dédié). Il n'est pas totalement fini, j'y rajouterais constamment des informations puisque c'est un condensé de mon expérience personnelle et surtout de guides pré-existants sur internet, fait par des professionnels donc surement plus rigoureux. Qu'est-ce qu'un VPS ? Dans les grands Data Center des entreprises d'hébergement, il y a de grandes baies de serveurs : des sortes de gigantesques salles dans lesquelles tournent des dizaines/centaines d'énormes ordinateurs : ce sont les serveurs de l’hébergeur, que celui-ci loue comme serveur mutualisé d'hébergement web, serveur dédié ou VPS : Nous parlerons simplement des VPS / Serveurs dédiés, pas de l'hébergement mutualisé Ces serveurs sont souvent partitionnés, c'est-à-dire divisés en centaine de partitions, sur lesquelles sont installées des systèmes d'exploitation (souvent des distributions linux). Illustrons cela par un petit calcul pas du tout rigoureux ni réaliste : Un hébergeur dispose de 50 machines-serveurs qui possèdent 100 go de ram chacunes et 100 tera (1 teraoctet = 1000 gigaoctet). Sur chacun de ces serveurs, l'hébergeur a partitionné 100 plus petits systèmes d'exploitations. Ainsi, cela nous fait donc 100x50 = 5000 petits serveurs de 1 go de ram et 1 tera de stockage qu'ils peut louer. Ces petits serveurs sont justement les VPS (Virtual Private Server), ce n'est pas très performant, mais cependant pas très cher. On communique généralement sur ces serveurs via une console, par le protocole SSH. Imaginez ça comme une simple console dans laquelle on donne des ordres à la machine, ça peut paraître rudimentaire et peu pratique, mais il n'en est rien : on peut effectuer des actions extrêmement complexes via ce procédé. La différence entre un VPS et un serveur dédié est justement qu'un serveur dédié vous est... dédié. Il n'est pas (normalement) non partitionné comme un VPS mais l'ensemble de la machine et ses capacités sont à votre dispositions (on peut comparer ça à un appartement et une maison). Voilà, vous comprenez déjà un peu mieux ce qu'est un VPS, attaquons la suite de la découverte ou de l'introduction. A quoi sert un VPS ? Comment s'en servir ? - Guide des VPS par OVH, je vous retransmet les idées les plus pertinentes. A quoi sert un VPS ? Un VPS est un serveur privé virtuel (Virtual Private Server) qui permet d’héberger des sites (vitrine, e-commerce, contenus, médias…) et / ou des applications logicielles, principalement Web (portail, extranet, solutions collaboratives, wiki, CRM...) Contrairement à l’hébergement mutualisé, il permet d’isoler plusieurs applications dans un même conteneur dédié au client. Ce conteneur (VPS) partage des ressources physiques (infrastructures) avec d’autres conteneurs mais la part de ressources qui lui sont dédiées sont garanties. VPS ou hébergement mutualisé ? Après un hébergement mutualisé, le VPS s’inscrit comme une évolution logique pour votre hébergement. Vous avez plus de libertés et bénéficiez des accès root : accès à Apache, au PHP init qui permet de modifier les variables PHP, d’installer un certificat SSL, et n’importe quel type de logiciel : bref, vous gagnez en liberté sans prendre la responsabilité d’un serveur dédié physique. Attention cependant, sur un serveur mutualisé, vous n’êtes pas responsable des performances proposées, vous vous fiez aux performances de la plateforme mise à disposition. En optant pour le VPS vous devrez choisir une configuration adaptée aux exigences de vos applications et l’adapter avec votre croissance. Comment puis-je configurer mon VPS ? Comment "communiquer" avec lui ? Tout dépend du type d’OS que vous aurez choisi d’installer et du type de configuration à faire. Pour les actions courantes : Via bureau à distance (notamment sous Windows) ; En ligne de commande SSH sous Linux ; Via un panneau de gestion Web (Plesk, Cpanel, Release 3 OVH) ; Via les solutions déployées sur le serveur (ex : CMS). Via votre FTP (protocole de transfert de fichier, que vous devrez installer vous-même). Est-ce qu'un VPS peut-il lui-même être divisé/partitionné ? Oui, le VPS peut être partitionné et vous pouvez y héberger plusieurs sites, ou encore plusieurs projets de vos clients (en allouant à chacun un espace privé dont vous choisissez le volume). C’est votre espace serveur que vous sous-organisez comme vous le souhaitez sous votre responsabilité. Comment est-ce que le public peut accéder à mon VPS ? En fait, chaque VPS dispose d'une adresse IP, voir deux. La première est en IPv4, de la forme : 173.174.XXX.XXX (les X sont des chiffres, je masque pour l'exemple). La seconde potentielle est en IPv6, de la forme : 2001:0db8:0000:85a3:0000:0000:ac1f:8001 (adresse exemple tirée de Wikipédia). Également, vous pouvez généralement acheter et configurer un nom de domaine et le lier à votre VPS / Serveur dédié. Exemple des caractéristiques qu'on peut trouver chez un hébergeur, pour la gamme VPS : Pour synthétiser tout ça, un VPS peut servir a créer un ou plusieurs sites web, hébergement une application ou des fichiers, il est préférable et plus utile de comprendre l'achitecture ou le fonctionnement de Unix/Linux pour l'utiliser de manière optimale. Il y a une foule d'utilisation possible (création de serveur Minecraft, seedbox, etc...) J'étofferais ce guide au possible, voici mes sources et j'en rajouterais d'autres par la suite. - http://www.ovh.com/fr/vps/aide-faq.xml Si vous avez des questions ou des remarques, n'hésitez pas. Tutoriel réalisé par Azad, pour Melinyel, le 09/03/2014. Toute reproduction sans citer Melinyel est interdite.
    5 points
  23. Bonjour à tous, Aujourd'hui je vais vous partager un script shell sous unix pour faire un landau pour bébé, pour celà il vous faut: un pc sous linux (de préférence ), un lecteur cd (tiroir), une ficelle et un landau arrondit (avec une poignée de préférence). 1-Raccordez la poignée du landau au tiroir du lecteur cd avec la ficelle. 2-écrivez le script shell suivant avec gedit ou autre: #!/bin/sh while (1 = 1) do #ouvrir le lecteur cd eject #fermer le lecteur cd (tirer le landau) eject -t done 3-enregistrez, dans mon contexte je vais l'appeler "baby.sh" dans mon dossier user.4-vérifiez que le landau soit tiré quand la ficelle est tirée par le lecteur cd après plusieurs ouvertures/fermetures. 5-mangez le bébé. 6-mettez les restes dans le landau. 7-Quand vous désirez faire bouger le landau ouvrez la console et inscrivez: sh baby.sh Et voilà plus de problème de bébé appart l'odeur source: bit.ly/1fCIBsd Bonne programmation à tous, Cordialement, Mars073.
    5 points
  24. Bonjour a tous ! Cette suite de tutoriel va vous expliquez comment faire une IA basique pour des pnj que vous pourrez adapter pour des jeux simples(non ce n'est pas une super grosse IA de la mort qui tue qui va faire vos problèmes de math toute seule). Dans la première partie du tutoriel, nous allons voir une partie fondamentale des IA dans les jeux vidéos : le pathfinding. Le code du pathfinding était trop long pour être expliqué dans un seul tutoriel, le premier traitera de la théorie et le deuxième de la pratique. Le pathfinding, qu'est ce que c'est ? Le pathfinding c'est le fait de dire a une personne : tu vas du point A au point B en évitant les obstacles. (c'est mieux que de se prendre les murs non ? ) Pour le pathfinding, nous allons mettre en place un algorithme A*, qui est très célèbre et qui peut être utilisé un peu partout, surtout dans le jeu utilisant un système de grille(starcraft, zelda etc...) A* tiens son nom de la recherche "en étoile" qu'il fait : pour chaque case, il va regarder celles d'autour qui n'ont pas été déjà exploré et va dire : celle la elle est plus loin de la case de départ que la précédente. petite image : Le 0 correspond au début. Plus on s'éloigne du 0, plus le coût (ou le poids, c'est la même chose) augmente. Le but, c'est de prendre le chemin, qui possède le plus faible coût. Par exemple, si vous voulez partir du point (0, 3) -> le 4eme point tout en haut a gauche, vous n'allez pas partir carrément a gauche, faire X fois le tour du gros truc noir, non ? Vous allez simplement prendre le chemin le plus court. Pour réaliser donc ce merveilleux pathfinding, vous allez donc partir du début (le point (7, 6)) et regarder autour, si ce bloc n'est pas un mur. Vous augmenter alors le coût du déplacement pour cette case, puis on refait cela jusqu’à ce qu'on trouve la fin voulu ou jusqu’à ce qu'il n'y ai plus de possibilité de passer car tous les blocs ont été explorés, il n'y a donc pas de possibilité d'aller du point A au point B. Puis on part de la fin et on passe par les blocs qui ont le plus faible coût. Pour réaliser cela, on commence par créer une file (oui je parle enfin de code). Une file est une structure de données qui permet de mettre des variables l'une après l'autre. La première donnée qui rentre dans la file est la première à sortir. Pour ceux qui ne savent pas ce que c'est : Donc ont la créer, cette file et on met, si ce n'est pas des murs, et s'il n'ont pas été déjà explorés,la position des blocs d’à coté, tout a la fin. A chaque tour de boucle, ont prend la première position et on refait la même chose. Pour les minecraftien, c'est comme l'eau qui coule déjà sur la case la plus proche, puis sur celles plus éloignées. Quand on a trouvé la fin, la où le pnj par exemple veut aller, on arrête, ou alors quand il n'y a plus de blocs a explorer, alors le pnj est triste car il ne peut pas y aller. Si on a trouvé la fin, on met alors dans une pile, (les dernières données qui arrivent dedans seront les premières à sortir), car le chemin doit être pris dans le sens contraire où l'on va. On cherche alors, a partir de la fin, la case autour d'elle qui a le plus faible coût, puis on enregistre sa position et on mets la direction contraire (n'oublier pas que le pnj va parcourir le chemin dans l'autre sens) dans la pile et on refait ça jusqu’à ce qu'on trouve le début. Et voila vous pouvez maintenant, grâce à ces explication créer vous même votre pathfinding, ou alors attendre le prochain tutoriel qui ne devrait pas tarder a suivre. En utilisant uniquement le pathfinding et intelligemment vous pouvez déjà créer un planning pour chaque pnj, ce qui va permettre de rendre une ville plus vivante (je pense surtout au village pnj de zelda qui sont toujours au même endroit, c'est un peu triste non ?).
    5 points
  25. Bienvenue pour ce tout premier cours sur le C: L'introduction au C. Dans cette première partie, nous allons voir de quoi se compose un programme "de base" en C. I- Avant propos. J'aimerais vous informer au niveau des cours qui vont suivre: Le but étant de travailler en étant le plus près possible du fonctionnement de la machine, les seules fonctions autorisées (et vous le verrez pendant les exercices) sont les fonctions System (Googlisez tout ça!). Donc merci de jouer le jeu jusqu'au bout, et de ne pas utiliser de fonctions "interdites" . II- Notre premier programme. Nous allons créer notre tout premier programme. Le but de ce programme est d'afficher une lettre. Avant tout: Un programme en C est composé de fonctions, et plus particulièrement de la fonction "main" cette fonction est la fonction principale appelée lors du lancement de notre programme. Commençons donc par créer un fichier test.c qui contient notre main: int main() { } Pour compiler notre programme, nous allons utiliser GCC. Pour des raisons personnelles et utilitaires, je code sous linux, je vais donc vous proposer de suivre tout mes cours sous linux. Vous aurez donc des informations sur la compilation en ligne de commande. Pour compiler notre programme grâce à GCC, il faut utiliser la commande suivante: gcc test.c -o test Un fichier "test" viens d'être créé. Vous pouvez le lancer: ./test Oh! Nous avons compiler notre premier programme en C... Qui ne fait rien (pour l'instant!). Revenons donc à notre but principal: Créer un programme qui affiche une lettre. Nous allons donc avoir besoin d'une fonction système d'affichage qui s'appelle "Write" (Lisez le man de Write pour avoir plus d'informations sur cette fonction!). Créons donc une fonction "my_putchar" qui prendra en argument une variable de type char (caractère) et qui aura pour but de l'afficher: void my_putchar(char c) { write(1, &c, 1); } int main() { } Voila! Nous avons notre fonction d'affichage! A present, affichons notre premier caractère! void my_putchar(char c) { write(1, &c, 1); } int main() { my_putchar('A'); } Compilons tout ça... Oh! Lorsqu'on lance notre programme, il affiche un A ! Un autre exemple: HelloWorld. Le but de ce programme est d'afficher HelloWorld. Reprenons la base précédente: void my_putchar(char c) { write(1, &c, 1); } int main() { } Et affichons notre "HelloWorld": void my_putchar(char c) { write(1, &c, 1); } int main() { my_putchar('H'); my_putchar('e'); my_putchar('l'); my_putchar('l'); my_putchar('o'); my_putchar('W'); my_putchar('o'); my_putchar('r'); my_putchar('l'); my_putchar('d'); } On compile tout ça, et on obtient un joli "HelloWorld"! III - Les variables de type char[] Nous allons à présent stocker notre chaine de caractères "HelloWorld" dans un tableau de Char, puis nous allons l'afficher: void my_putchar(char c) { write(1, &c, 1); } int main() { char mon_mot[] = "HelloWorld"; my_putchar(mon_mot[0]); my_putchar(mon_mot[1]); my_putchar(mon_mot[2]); my_putchar(mon_mot[3]); my_putchar(mon_mot[4]); my_putchar(mon_mot[5]); my_putchar(mon_mot[6]); my_putchar(mon_mot[7]); my_putchar(mon_mot[8]); my_putchar(mon_mot[9]); } En compilant nous obtenons exactement le même résultat de précédemment. IV - Les includes. Avant de commencer avec les includes, sachez que tout ce qui commence par un # sera une commande interprétée par le compilateur. Les includes permettent d'inclure (logique) le contenu d'un fichier. Il est utilisé pour inclure les .h (headers) dans les fichiers. Par exemple, la fonction "write" est disponible car le système nous la propose, néanmoins, elle n'est pas déclarée (ce qui provoque un "warning" dans votre code) pour remédier au warning, il suffira d'inclure le header unistd.h. comme ceci: #include <unistd.h> Les includes system se font avec des <> alors que les includes locales se font avec des "". Ainsi ma fonction est déclarée, le compilateur sait qu'elle existe, je peux donc l'utiliser sans soucis! V- Allons un peux plus loin. A present, affichons notre HelloWorld avec une boucle (je vous laisse la joie de découvrir le fonctionnement de la boucle en cherchant sur le net): void my_putchar(char c) { write(1, &c, 1); } int main() { char mon_mot[] = "HelloWorld"; int i = 0; while(mon_mot[i] != '\0') { my_putchar(mon_mot[i]); i = i + 1; } } Voila! Nous venons de réafficher "HelloWorld". Pourquoi je vérifie la valeur de "mon_mot" dans le while? C'est très simple. Ce qui définit la fin d'une chaine de caractères, c'est le caractère '\0' qui est égal à 0. Or, si un while reçoit 0 en paramètre, il s'arrête. Le while va donc continuer, jusqu'à la fin de la chaine! Voilà, je ne vous en dirrais pas plus sur ce cours, le but étant de vous donner envie d'en savoir plus par vous même. A bientôt pour le prochain cours! Cours écrit par AlexMog. Contact: alexmog [at] live [point] fr
    5 points
  26. Bonjour à tous, Comme certains d'entre vous ont du en entendre parler, demain se déroulera le projet "Foreward" dans tous les Epitech de france. Le but principal du projet est de permettre aux étudiants de pouvoir avancer leur EIP (Epitech Innovative Project) ou encore de travailler en collaboration sur un projet pendant un rush de 2 semaines. Après avoir beaucoup collaboré avec l'administration d'Epitech Marseille, nous avons décidé de rendre possible, pour les pitch qui auront lieu (un par jour) de les diffuser en ligne. Nous avons, pour la même occasion, développé une plateforme spécialement pour ça! Je vous passerais le lien de la ladite plateforme dans la journée, n'ayant pas encore les autorisations nécessaires. Bref, cette plateforme vous permettra de visionner les pitchs de tous les jours pendant les 2 semaines du Forward en direct, et même poser vos questions via notre plateforme! Les conférences (ou pitch) auront pour thème les nouvelles technologies, la création d'entreprises, et la programmation. Bref, beaucoup de choses intéressentes! N'hésitez pas à passer y faire un tour. A savoir que tous les Epitech de france font le Forward, mais je ne sais pas si ils diffuserons les conférences eux-aussi. en tout cas, pour Epitech Marseille, c'est quasiment sur! EDIT: Lien: http://confs.labs-epimars.eu/channel/9 Infos supp: Les confs ont lieu à 18h tous les jours. Bref! On se retrouve demain pour les conférences . Cordialement, AlexMog.
    4 points
  27. Bonjour, bonsoir ! Aujourd'hui nous allons apprendre à utiliser SQLite en C#, pour cela je divise le tutoriel en trois grandes parties : I • SQLite, c'est quoi ? II • Pour quelles utilisations ? III • Utiliser SQLite I • SQLite, c'est quoi ? SQLite est une bibliothèque écrite en C qui propose un moteur de base de données relationnelle accessible par le langage SQL. SQLite implémente en grande partie le standard SQL-92 et des propriétés ACID. Contrairement aux serveurs de bases de données traditionnels, comme MySQL ou PostgreSQL, sa particularité est de ne pas reproduire le schéma habituel client-serveur mais d'être directement intégrée aux programmes. L'intégralité de la base de données (déclarations, tables, index et données) est stockée dans un fichier indépendant de la plateforme. D. Richard Hipp, le créateur de SQLite, a choisi de mettre cette bibliothèque ainsi que son code source dans le domaine public, ce qui permet son utilisation sans restriction aussi bien dans les projets open source que dans les projets propriétaires. Le créateur ainsi qu'une partie des développeurs principaux de SQLite sont employés par la société américaine Hwaci. SQLite est le moteur de base de données le plus distribué au monde, grâce à son utilisation dans de nombreux logiciels grand public comme Firefox, Skype, Google Gears, dans certains produits d'Apple, d'Adobe et de McAfee et dans les bibliothèques standards de nombreux langages comme PHP ou Python. De par son extrême légèreté (moins de 300 Kio), il est également très populaire sur les systèmes embarqués, notamment sur la plupart des smartphones modernes : l'iPhone ainsi que les systèmes d'exploitation mobiles Symbian et Android l'utilisent comme base de données embarquée. Au total, on peut dénombrer plus d'un milliard de copies connues et déclarées de la bibliothèque. (Source : Wikipedia) Nous allons aujourd'hui nous intéresser au wrapper .Net de SQLite. II • Pour quels utilisations ? Comme dit plus haut, SQLite permet d'accéder à une base de données uniquement en local, depuis un fichier, ce qui limite donc les utilisations. Vous pourrez utiliser cette librairie donc pour des projets locaux comme par exemple gérer un système de compte sur une seule machine, stocker des résultats de calculs ou encore stocker des scores pour un jeu solo... Cependant utiliser SQLite pour des jeux ou applications diverses en ligne n'est pas possible directement, il va falloir passer par un serveur. Des connaissances sur le SQL sont fortement recommandées, si vous n'y connaissez rien, allez lire le tutoriel sur OpenClassRoom ou sur n'importe quel autre site. III • Utiliser SQLite Importer la librairie Premièrement il va vous falloir la librairie, télécharger là ici : System.Data.SQLite.dll Une fois votre projet crée sous Visual Studio, importer cette librairie à votre celui-ci, pour cela, clic droit sur le projet puis "Importer une référence". Pour finir l'importation ajoutez ceci au début de la classe où vous voulez utiliser SQLite : using System.Data.SQLite; Créer un fichier de base de données Chaque base de données aura son propre fichier, pour créer un fichier de base de données, nous allons utiliser la méthode statique CreateFile contenue dans la classe SQLiteConnection : SQLiteConnection.CreateFile("MaBaseDeDonnees.sqlite"); J'utilise ici l'extention .sqlite, mais vous pouvez mettre ce que vous voulez ! (.db, .blabla) Connexion à la base de données Avant de pouvoir utiliser cette base de données, il va falloir se connecter à celle-ci, pour cela nous allons déclarer une nouvelle SQLiteConnection : SQLiteConnection maConnexion; Puis l'instancier et ouvrir la connexion : maConnexion= new SQLiteConnection("Data Source=MaBaseDeDonnees.sqlite;Version=3;"); maConnexion.Open(); Pour fermer la connexion : MaBaseDeDonnees.Close(); N'oubliez pas de la fermer une fois que vous n'en avez plus besoin Créer une table Désormais nous allons utiliser le SQL, nous allons créer une table qui contiendra les meilleurs scores pour un jeu, donc un nom de type "text" et un score de type "int" : string sql = "create table meilleursscores (nom text, score int)"; Nous devons créer un objet de type SQLiteCommand pour pouvoir l'éxécuter : SQLiteCommand commande = new SQLiteCommand(sql, maConnexion); Puis nous allons éxecuter cette commande : command.ExecuteNonQuery(); Remplir la table Nous allons maintenant remplir cette table comme ceci : string sql = "insert into meilleursscores (nom, score) values ('VFRZ', 100)"; SQLiteCommand commande = new SQLiteCommand(sql, maConnexion); commande.ExecuteNonQuery(); Lire les meilleurs scores depuis la table Pour lire la table c'est un peu différent que pour la remplir ou la créer. Premièrement, la commande select : string sql = "select * from meilleursscores order by score desc"; SQLiteCommand commande = new SQLiteCommand(sql, maConnexion); Puis il va falloir utiliser un SQLiteDataReader pour utiliser cette commande : SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) Console.WriteLine("Nom: " + reader["nom"] + "\tScore: " + reader["score"]); J'espère que ce tutoriel vous a été utile ! N'hésitez pas à poser des questions. VFRZ
    4 points
  28. Bonjour à tous, Encore une fois je réécris ce sujet, car c'est plus intéressent que d'en recréer un. Certains d'entres vous le connaissent déjà, le projet Rulemasters World est en train d'arriver dans une version bientôt utilisable (l'engine étant terminé à 80%). Je sais aussi que Melinyel recherche absolument un projet communautaire, et RMW n'en était pas un, avant quelques modifications ;). J'ai complètement adapté le code source de l'engine pour en faire un "Entity engine". Ainsi, toutes les entités sont scriptées. Pourquoi ce choix? Je souhaite proposer à tous le choix de créer leurs propres contenus en jeu, et les voir apparaître au fil des mises à jour. Ainsi, tout est scriptable: Les entités (monstres, objets en jeu, projectiles, etc...), les sorts, les effets, etc... Le but était de permettre à tous de créer leur propre contenu, et donc, améliorer le jeu à leur guise. Même les GameModes (liés à une instance) seront éditables! Un moba apparaîtra peut être sur RMW, qui sait? Avant tout, et avant de continuer, je souhaite vous proposer de lire toutes les informations sur le jeu ici: https://drive.google.com/open?id=0B-d6mCeNGv5UfnhFdlA0UDN4amZGNmRWRXhwMlE4aGFtLWpMUjlKSVp3d1Q2OHJQVVlINWs Ainsi, avant de donner votre avis, et proposer votre aide, il est OBLIGATOIRE d'avoir tout lu. (c'est pas long! Aller!). Bref, on arrive au vif du sujet: Dans les prochains mois, je vais ajouter un éditeur de scripts sur notre site internet, et autoriser certains membres à pouvoir créer leur contenu en jeu (qui sera validé par l'administration), ainsi qu'une documentation complète pour la création de contenus. Une API très complète vous sera proposée, ainsi qu'un éditeur en ligne vous permettant de faire du débugage "basique". (il faudra néanmoins attendre le "testeur de créatures" qui arrivera bientôt sur le site pour voir la réalité de sa création). Bref, j'aimerais savoir si certains d'entres vous se sentent capables de m'aider, et de tenter de créer leur propre contenu en jeu. Une fois que vous serez dans l'équipe de création, vous serez considéré comme "Operator" dans le jeu, et aurez un grade spécial sur le site internet et les futurs jeux développés par MogCreations. Vous aurez aussi un accès au serveur de test et aux outils de développement du projet, de manière prioritaire (mais n'aurez pas accès au code source). Prérequis: Une connaissance solide de Javascript en temps que langage de scriptingUne experience dans le domaine des MMO (en temps que joueur)Une experience dans le domaine du développement de jeux est un plusSavoir lire une documentationSavoir rédiger des issue Si vous êtes intéresses, merci de me le faire savoir par MP, ou via ce sujet. J'attends vos retours. Cordialement, AlexMog.
    4 points
  29. Bonjour à tous, je crée ce topic afin ce créer un endroit où vous pourrez tous mettre vos création en rapport avec Melinyel. Exemple: Un petit personnage représentant la communauté, un t-shirt pour faire de la pub lors des conventions, mais encore plein d'autres, le but est simple continuellement créer, laissez libre à votre imagination, seul restriction est le fait que toutes les œuvres ici auront un rapport avec Melinyel. Pour vous montrer que vous pouvez faire n'importe quoi, voici un muffin (pas assez cuit) avec le logo du forum (qui coule...) : Rappelez vous, l'importance n'est ni la qualité ni la forme ni le temps que celà doit prendre, l'importance est de créer Bon amusement à tous, Cordialement, Mars073.
    4 points
  30. Hey ! Voila une petit guide qui vous permettra de distinguer les formats sonores FIRST .WAV (qualité CD) 1411 kbps CBR – Poids: 3466 Ko / 20 secondes THE BEST. Meilleure qualité vendu sur le marché. 2em place .MP3 320 kbps CBR – Poids: 787 Ko / 20 secondes. L'avantage du mp3 c'est qu'il est compatible avec presque tous les appareils, mais il faut pas oublier que la qualité de ce dernier est l'une des plus médiocre. 3em place .WMA 320 kbps CBR - Poids: 849 Ko / 20 secondes En terme de qualité c'est la même chose que le mp3 voir même, encore plus médiocre. Par contre il est légèrement plus lourd que le mp3 donc c'est pas trop interessant. 4em place .AAC LC 320 kbps VBR - Poids: 712 Ko / 20 secondes Le format le plus léger possible, mais de mauvaise qualité, à peu près pareil que les 2 de dessus. Mieux que le wav ? ouais, y a la qualité studio, c'est supérieur à la qualité cd. Il faut évidemment du bon matériel pour entendre la différence, et une oreille de mélomane. Certaines personnes ne sont pas satisfaits avec une qualité cd .. c'est ceux qui chipotent sur les graves et les aigus, ou la différence est presque invisible pour une personne normale Bon les formats en qualité studio sont aussi en format .wav mais tout à l'heure on parlait de formats audio encodés en 320kbps (320kbps 16b 44khz pour le .wav). Ce qui est différent du format studio étant donné que là c'est du WAV 24 bits 192khz (meilleure qualité possible). Je vais pas m'étendre sur la qualité studio à par si certains veulent plus d'infos mais ça ne me semble pas nécessaire vu que c'est presque introuvable sur le web. En espérant que ce petit guide vous sera utile ! Si vous avez des questions n'hésitez surtout pas. Akimace.
    4 points
  31. Nombreux sont ceux qui se demande comment protéger et augmenter les performances son ordinateur à moindre coût. Ce guide va vous montrer comment optimiser et sécuriser Windows à travers des logiciels gratuit ou intégrés à Windows et de manière très simple malheureusement les tâches ne sont pas automatisées et il vous faudra donc les répéter régulièrement pour que votre ordinateur reste au meilleur de lui-même. Se protéger contre les virus : Il existe une grande liste d'antivirus aujourd'hui et difficile de dire qui est le plus fiable. Ce qu'on peut déjà savoir c'est qu'un antivirus payant sera toujours plus efficace qu'un antivirus gratuit car ils proposeront toujours des solutions de sécurités supplémentaires (chiffrement des données sensibles, pare-feu, anti-spam, etc...). Heureusement, des sites vous propose une comparaison des différents antivirus existant. Bien qu'il soit en anglais, AV-Comparative va vous aider à trouver votre antivirus en en comparant plusieurs. AV-Comparatives - Independent Tests of Anti-Virus Software - Real World Protection Test Overview : Explications : Voici un diagramme réalisé par AV-Comparative comparant les différents produits et leur efficacité réelle. On peut voir que Bitdefender assure parfaitement son rôle pusqu'il a été élu meilleur antivirus de l'année 2014, malheureusement il est payant mais il a l'avantage d'être moins cher que ses autres concurrents. Le premier antivirus gratuit que nous pouvons rencontrer est en sixième position et cette place est occupée par Avira. On dit souvent d'Avast que c'est le meilleur antivirus gratuit et pourtant il est en quatorzième. Rappelons que ce test porte sur l'efficacité de l'antivirus donc la capacité du produit à détecter et éliminer les virus présents. En outre, Avast propose d'autres solutions pour palier aux virus comme l'agent mail qui va analyser vos e-mails et l'agent web qui va analyser les sites web sur lesquels vous naviguez, contrairement à ses concurrents qui ne vont proposer qu'aux utilisateurs un agent de fichiers (ou protection en temps réel) qui va analyser uniquement les fichiers. Éliminer la publicité : Adblock Plus : Ce petit addon pour les navigateurs web va vraiment vous sauver la vie contre l'envahissement de la publicité que nous subissons quotidiennement. En effet, il va bloquer toutes les publicités quelles qu’elles soient. Et bonne nouvelle, adieu la publicité sur les vidéo Youtube ! Téléchargements : sous Firefox, sous Chrome Adwcleaner : La publicité n'est pas l'unique soucis que vous avez, certains logiciels que vous pensez de confiance installent d'autres logiciels malveillants qui ralentissent votre ordinateur. Adwcleaner est un logiciel a absolument avoir qui va nettoyer votre ordinateur de tous les adware, PUP/LPIs, toolbar et hijacker. Entretenir Windows : Défragmenter régulièrement : ATTENTION : Il est vivement déconseiller de défragmenter un SSD (pensez à désactiver la défragmentation automatique programmée par Windows). Quand il s'agit de défragmenter Windows a normalement planifié cette tâche malheureusement, si l'on veut le faire bien le défragmenteur de disque de Windows n'est pas le plus efficace. Auslogics DiskDefrag est un logiciel gratuit permettant de défragmenter son disque dur bien plus efficacement qu'avec l'outil intégré à Windows. En outre, Defraggler vous permet aussi de connaître l'état de santé de vos disques. Nettoyer ses disques : Vous connaissez surement l'outil proposé par Windows "Nettoyage de disque" qui permet de faire le ménage sur votre ordinateur et libérant quelques mégaoctets qui vous seront surement très précieux. Bien que cette outil soit plutôt efficace pour nettoyer son disque, je vais vous proposer un autre outil qui va nettoyer votre ordinateur bien plus efficacement : CCleaner. Ce logiciel assez célèbre vous permet de nettoyer votre ordinateur en profondeur en examinant des éléments de Windows (votre corbeille, votre presse-papier) mais aussi des éléments de vos logiciels (les cookies et l’historique de vos navigateurs). De plus, ce programme dispose d'un nettoyeur de registre permettant de supprimer ou de réparer les clés du registre corrompues. Enfin, ce logiciel dispose de quelques outils supplémentaires afin d'optimiser au mieux votre ordinateur. Quelques astuces : Démarrer plus rapidement Rendre l'explorateur Windows plus fiable Sauvegarder le registre [Windows 8] Créer un lecteur de récupération Créer une partition de restauration "usine" Verrouiller sa session après plusieurs tentatives de connexion
    4 points
  32. Bonsoir la communauté ! Ce soir je viens proposer un petit tutoriel pour tous ceux qui débutent (comme moi) dans After Effects ! Ce tutoriel à été fait par un de mes professeurs à l'université et a été concu pour les débutants ! N'hésitez pas à dire en commentaire ce que vous souhaiteriez améliorer, changer, rajouter ... Ce genre de remarque peut lui servir pour le prochain ! Merci à tous, et bon bidouillage ▼▼▼▼
    4 points
  33. 4 points
  34. Bonjour/Bonsoir ! Voila la suite de mon précédent guide, c'est ici que je parlerai du système d'achat sur Combat arms EU. Il y a 3 différents moyens de payements. - GP - NX Prepaid - NX Credit . GP Ce mode de payement est gratuit, c'est ce que l'on gagne à la fin d'une partie avec les points d'exp. . NX Prepaid Les payements par carte (paysafecard, carte bancaire ...). . NX Credit Là ça comprend les SMS, paypal et les TokenAds (c'est pour obtenir des NX Credit gratuitement avec des pubs, sondages ... que Nexon propose). Il faut savoir que les NX Prepaid et Credit ne sont pas liés, on ne peux mettre de l'argent avec son portable + de l'argent avec sa carte bancaire par exemple, ça ne va pas s'empiler. (exemple, j'ai 5000nx credit, je veux rajouter des nx avec ma carte, je met 10€ [soit 10 000nx] et au final j'aurai 5000nx credit et 10 000nx prepaid). Les avantages et inconvénients : Les NX sont toujours plus valorisé que les GP ce qui est normal, mais des fois c'est juste une affaire d'esthétique. C'est à dire que l'arme original exemple, la M4A1 : Gratuite et accessible à tout grade. Devient payante juste avec un "relooking" Donc ce que je veux dire, c'est que même sans payé, certaines armes sont équivalentes (j'entends souvent dire l'inverse donc bon...). Maintenant il y a aussi un système de grade, à certains grades ont peut avoir certaines armes comme dans pratiquement tous les FPS. Bon, pour faire simple, tout est ici : En faite, le gros avantage qu'ont ceux qui payent dans le jeu, c'est au niveau des équipements. C'est à dire qu'il y a des avantages entre chaque équipements, exemple : Equipement payant : +15% de speed Equipement gratuit : +10% de speed Des petits trucs comme ça qui avantages les cashers Voila, je pense avoir fait le tour du système de payement de combat arms, même si j'ai débordé. Si vous avez des questions n'hésitez pas ! Akimace.
    4 points
  35. Bien sympa, bon courage pour le développement. Sinon j'ai cru comprendre que vous aviez besoin d'émoticones, donc je me permets de poster ça. C'est un pack d'icones que j'ai commencé il y a un peu plus d'un mois : à la base je comptais le proposer au développeur du client tox "µtox", car le logiciel n'en contient pas encore, mais vous pouvez l'utiliser si besoin, y'a pas de problème (je les ai publiées sous licence WTFPL). Je me suis beaucoup inspiré de celles de skype, mais vous inquiétez pas je suis pas un lam3r, tout est fait de ma main : j'ai même pas copié un seul pixel (ni utilisé la pipette ^^). En espérant que ça serve... Comme je suis nouveau, j'écrirais ma présentation ce soir sur le forum, en attendant bonne journée à vous
    4 points
  36. Je vais faire dans cette série de tutoriels, une construction suivit d'un moteur physique. Tout d'abord : Qu'est ce qu'un moteur physique ? Un moteur physique, est un programme qui permet de gerer la physique correctement, et qui déplace les personnages, tout en gérant les collisions. (tout les problèmes de collisions d'un jeu viennent du moteur physique). Ce qu'il faut savoir avant de commencer à le faire : Le moteur physique, que je vais vous apprendre à faire, ne gérera que des rectangles, il est donc parfait pour les jeux de plate-formes, de type mario, mais aussi d'autre styles de jeu avec que des blocs (les jeux en tiles quoi) comme zelda. Et oui le moteur ne sera qu'en 2d ! De plus, le principe majeur d'un moteur physique est la réutilisabilité de celui-ci, ce qui veut dire pas de : IF MUR THEN ... L'architecture que nous allons utilisé est celle dite "à posteriori" : -première étape, on génère des forces, comme la gravité, les forces de mouvement... -deuxième étape, on applique ces forces. -troisième étape, on détecte les collisions. -dernière étape, on les corrige. L'autre architecture, aussi appelé "à priori", utilise des matrices de résolution, afin de détecter l'instant exact de la collision. Cette architecture est plus précise, mais elle est aussi beaucoup plus lente, c'est pourquoi AUCUN moteur physique de jeu vidéo ne l'utilise, l'architecture "à posteriori" offrant des résultats satisfaisants. (Ce n'est qu'en cas extrêmes que l'ont remarque des problèmes, mais on ne les vois pas souvent). Et on va donc commencer par créer un générateur de force, et qui va les stoker dans une structure, afin de les garder en mémoire. (On attachera ensuite cette structure à un corps, afin de le déplacer) typedef struct s_force_container { t_force *permanent_force; t_force contact_force; t_force total_force; }t_force_container; Tout d'abord, j'ai distingué deux type de forces : les permanentes (la gravité, les mouvements...), et les forces de contact. celle là seront régénérées à chaque fois que le moteur se mettra à jour, donc on ne va pas créer de listes chaînées pour ça, car le risque qu'un malloc échoue devient très vite important, donc on va uniquement se contenter d'additionner les valeurs entre elles. Les forces permanentes, elles, seront stockées dans la liste chaînées, afin de pouvoir en modifier une sans impacter les autres. La force total_force, elle sert uniquement a connaître le total des forces permanentes et de contact, afin de bouger le corps en conséquences. Les forces sont représentées par la structure suivantes : typedef struct s_force { float x; float y; struct s_force *next; }t_force; Les forces en x représente normalement l'axe horizontal et l'axe x, vertical. Il n'y a pas de sens ou de direction pour les axes, vous pouvez prendre celui que vous voulez, il faudra juste adapter les forces en conséquence. il nous faut maintenant une fonction afin d'ajouter ou d'enlever une force permanente. La fonction d'ajout : t_force *create_permanent_force(t_force_container *container, float x, float y) { t_force *add = malloc(sizeof(*add)); if (add != NULL) { add->x = x; add->y = y; add->next = container->permanent_force; container->permanent_force = add; } return (add); } la fonction retourne un pointeur vers la force, afin de la modifier quand vous voulez. Les forces sont empiler les une à la suite des autres (l'ordre d'empilage n'a absolument aucune importance, c'est juste plus simple à programmer ) Et maintenant la fonction "d'enlevage" : void delete_permanent_force(t_force_container *container, t_force *remove) { if (container != NULL) { if (container->permanent_force != NULL) { t_force *search = container->permanent_force; char finish = 0; if (search == remove) { container->permanent_force = remove->next; free(remove); finish = 1; } while (search->next != NULL && !finish) { if (search->next == remove) { search->next = search->next->next; free(remove); finish = 1; } } } } } Le seul truc dur a faire ici, c'est de penser a enlever la force, tout ne perdant aucun pointeur vers les prochaines forces, tout en ne faisant pas de segfault. On s’occupe maintenant des forces de contact, les plus faciles . pour en ajouter : void add_contact_force(t_force_container *container, float x, float y) { if (container != NULL) { container->contact_force.x += x; container->contact_force.y += y; } } il n'y a pas de fonction pour retirer une force, car pour retirer les forces directement additionner, il suffit juste d'ajouter son contraire. Mais en revanche, il faut une fonction pour remettre à un certain nombre cette force, car je vous rappelle, il faut réinitialiser les forces de contacts a chaque mise à jour (bah oui sinon vous imaginez, il faudrait retenir a cause de quoi cette force de contact a été créer, vérifier si elle a toujours raison d’exister, le tout avec beaucoup de corps en mouvement, et le moteur va ramer très vite. Bref la fonction : void set_contact_force(t_force_container *container, float x, float y) { if (container != NULL) { container->contact_force.x = x; container->contact_force.y = y; } } Toujours aussi simple, normalement pas de difficulté a comprendre . Et enfin, il nous reste une dernière fonction a voir : celle qui calcule la somme de toutes les forces, afin de savoir la force finale pour bouger le corps. Elle parcours la liste chaînées des forces permanentes, les additionnent, puis ajoute les forces de contacts et met le résultat dans total_force : void calc_total_force(t_force_container *container) { if (container != NULL) { float x = 0; float y = 0; t_force *force = container->permanent_force; while (force != NULL) { x += force->x; y += force->y; force = force->next; } x += container->contact_force.x; y += container->contact_force.y; container->total_force.x = x; container->total_force.y = y; } } Et voilà ! on peut maintenant ajouter ou enlever facilement des forces, permanentes où de contact. Évidement, le code comme cela ne sert absolument a rien, il faut ajouter la notion de corps pour comprendre à quoi cela va servir.
    4 points
  37. Le Heavy metal désigne un genre de rock apparu au Royaume-Uni et aux États-Unis à la fin des années 1960. Dans un contexte original, il fut utilisé comme un synonyme de hard rock. Dans un second sens, le terme désigne le heavy metal traditionnel, une tendance esthétique plus radicale qui, au cours des années 1970 et 1980, s’est démarquée du hard rock, en s’éloignant de ses racines blues, même si cette distinction est contestée par des recherches récentes. Dans un sens large et généralisé, le heavy metal ou metal (tout court) désigne toutes les musiques qui descendent du heavy metal traditionnel et du hard rock. Pour captiver votre attention je vais commencer par donner quelques groupes de metal qui apparaîtront dans ce guide ! Asking Alexandria, Black bomb A, Black Veil Brides, Breaking Benjamin, Bullet for My Valentine, Celldweller, Disturbed, Dragon Force, Evanescence, Limp Bizkit, Linkin park, Metallica, Slipknot, Sonic Syndicate, System of a down, Three days grace... non j'essaye pas de valoriser certains groupes Ces groupes appartiennent à un sous genre du métal : Funk metal, Metal industriel, Nu metal ou un autres parmi les 153, ( je dis n'importe quoi mais y en a beaucoup ) Heavy Metal Oui je sais, quand on parle de Heavy Metal, c’est pour décrire le style dans sa globalité. Mais le heavy metal fait aussi référence aux premiers groupes de metal, aux chants aigus et guitares semi-lourdes semi-harmonique. C’est donc le premier metal issu du hard rock, qui reste donc l’un des moins agressifs. Anecdote : C’est Dio, l’un des chanteurs de black sabbath qui a popularisé le fameux signe du metal avec la main (pouce, majeur, et annulaire repliés, et index et auriculaire pointés vers le ciel : les cornes du diable) Les groupes les plus connus de ce style sont donc parmis les plus connus du metal en général, avec : Iron Maiden : https://www.youtube.com/watch?v=Nba3Tr_GLZU Black Sabbath : https://www.youtube.com/watch?v=9LjbMVXj0F8 Et deux chanteurs issus de black Sabbath - Ozzy Osbourne : https://www.youtube.com/watch?v=3MLp7YNTznE - Dio : Judas Priest : Death Metal L’un des deux styles les plus bordéliques du metal, avec le black metal, pense-t-on quand on en écoute. Bon, c’est vrai c’est pas facile d’accès, mais le death, c’est très large : ça commence avec le groupe Death, inventeur du style, se caractérise par un chant tiraillé et deux guitares leads harmonisée, dans des morceaux utilisant des structures originales. Voici un exemple de structure pour le morceau Flesh And The Power It Holds (de Death évidemment) : Intro, post-intro, post-post-intro, riff 1, 1er couplet sur le riff 1 et couplet, refrain, riff 1 et 2e couplet, refrain, break, prolongation du break, riff 2, riff 3, riff2, riff 3, solo, pont en solo de basse, riff 1 couplet 3, refrain, couplet 4, refrain, break, prolongation du break, riff 2, riff 3, riff 2 fin. Voilà c’est compliqué. Après le death est devenu quelque chose de vachement brutal avec des lignes de guitare et basse très techniques, et bien sûr un chant HYPER GRAVE (du growl). Death, les précurseurs : Atheist, du Death technique : Et pour du Death Brutal : Cannibal Corpse : Benighted : Black Metal Vous voyez les clichés du metal ? Les metalleux sont satanistes, il tuent des gens, ils sacrifient des chèvres, ils brulent les églises, ils vivent seuls dans la forêt, on comprend rien a leur musique, le chanteur fait que gueuler des trucs incompréhensible et sur scène ya du sang partout et des têtes de moutons égorgés. Voilà, tous ces clichés viennent du black. Ce style qui a commencé au nord, particulièrement en Norvège, se reconnait facilement : ça parle de satan, le chanteur utilise le fond de sa gorge pour faire du chant de gobelin torturé, et la batterie utilise quasi dans toutes les chansons du blast beat (on en reparlera plus tard). Normalement dans un morceau de black metal, l’ambiance est censée te faire imaginer l’enfer, la torture, ou un autre truc sympathique du genre. Une blague disait que pour faire du black metal, tu prends le guitariste le plus hargneux du monde, le batteur le plus bourrin du monde, le chanteur le plus haineux du monde, et tu enregistres le tout avec un magnétophone à 5 euros. Deux choses : oui, le magnétophone c’est presque vrai, dans le black d’origine, la qualité du son est dégueulasse. Et ensuite, vous aurez remarqué que aucun bassiste n’était mentionné. En effet dans le black, la basse on s’en fout. C’est triste à dire mais c’est comme ça. Voici quelques noms cultes du black, et pour vous donner une idée du blast beat, c’est ce que vous entendrez a la batterie au début des premiers morceaux, un enchainement de grosse caisse/caisse claire très rapide : Mayhem : Darkthrone : Gorgoroth (avec une version live pour vous montrer si c’est des types fréquentables) : Et pour le black plus récent : Watain : Antestor (qui a une particularité, on appelle ça du Unblack : au lieu de parler de trucs autour de satan, c’est l’inverse, c’est un groupe chrétien qui nous parle de jésus etc. sur un fond black metal) : https://www.youtube.com/watch?v=OdCYNvCjo-0 Le Funk metal Bon c'est pas celui que vous écoutez en général donc je ne pense pas qu'il va vous interessez plus que ça ^^ Comme son nom l'indique c'est un mélange de funk* et de metal *Issu principalement de la soul et du jazz, le funk se distingue par ces instruments : guitare, basse, batterie qui joue des motifs syncopés (coef le http://melinyel.net/topic/498-guide-ledm/), la présence fréquente de cuivres ou de saxophones sur des ponctuations rythmiques (refrain) ou bien des solos, et de manière générale, par la grande place accordée aux instruments. Pas grand chose à voir avec le métal vous me direz. Voila quelques groupes de Funk metal : https://www.youtube.com/watch?v=SFvCx6w_ptE https://www.youtube.com/watch?v=-3kE8VgMRJk Je trouve que ce sous genre de metal donne une ambiance différente. Ce côté funk donne une ambiance plus "fun" et les voix des chanteurs sont beaucoup moins hard, d'ailleurs on remarque l'abscence de scream. Le Metal industriel Il se compose de musique industrielle (electronique), du trash metal¹*, Punk Hardcore ²*. ²* Ses caractéristiques sont souvent la vitesse élevée de la musique, le chant crié, les refrains simples, les sons plus agressifs et distordus. Pour faire simple le metal industriel recouvre le punk et le metal (on ne parle pas du punk original comme sum 41, mais de Punk Hardcore, le rythme est plus rapide et les voix plus "hard"). Quand je parlais de musiques industrielles, voila L'EXEMPLE : https://www.youtube.com/watch?v=hQg4C5l9aPk Celldweller fait partit de ce sous genre mais... il commence à partir dans l'EDM (metalstep, hardstep avec Celldweller - Tough Guy), je trouve. Mais de base c'est quand même un groupe de metal industriel. Autre exemple : https://www.youtube.com/watch?v=Rl6fyhZ0G5E Marilyn Manson bien sur ! Ça s'entend que c'est entre le Punk hardcore et le trash metal la voix de l'artiste et entre ces 2 sous-genres. Le Nu metal Là à mon avis certains seront encore plus intéressés ! Il s'agit d'un genre fusion, qui mêle des éléments de metal avec d'autres genres comme le hip-hop et le grunge. Exemple de Disturbed https://www.youtube.com/watch?v=3moLkjvhEu0 toujours cette atmosphère de "violence" avec des grosses basses. Lorsque la musique est à 0.25 vous voyez bien que l'artiste ce met "à raper" c'est ce qui différencie le Nu metal aux autres sous-genres, c'est du rap-metal (fusion entre hip-hop et metal). Beaucoup d'autres artistes appartiennent à ce sous-genre, je pense à Limp bizkit, Linkin park et Slipknot. https://www.youtube.com/watch?v=ZpUYjpKg9KY https://www.youtube.com/watch?v=kXYiU_JCYtU https://www.youtube.com/watch?v=NrO83v6X8lI Metalcore Bien sur ! Comment pourrais-je passer à coter de ça... ? Le bon metal avec des screams de fou c'est par ici. Le metalcore est un genre dérivé du metal et du hardcore. Il existe deux genres de metalcore : ► le metalcore original, qui conserve les refrains du punk hardcore et la brutalité du heavy metal. Exemple ? Mais bien sur ! Asking Alexandria https://www.youtube.com/watch?v=l7Fi8-7HRhc Black Veil Brides rentre dedans aussi https://www.youtube.com/watch?v=f0EQlIzPowM Et pour finir Bullet for my valentine https://www.youtube.com/watch?v=9sTQ0QdkN3Q C'est ce sous-genre que j'écoute le plus, du coup j'oublie beaucoup de groupes mais si vous voulez d'autres exemples laissez un commentaire. Vous verrez que le dexième genre du metalcore est différent, il y a plus que des voix "hard" et des screams Jusqu'à maintenant il y avait un mélange de punk hardcore avec le metal mais dans ce deuxième genre de metalcore non. ► le metalcore mélodique qui combine les sons et les traits du death mélodique avec le punk hardcore, metalcore et parfois emo. Là c'est plus violent en faite ^^ On peut citer comme exemple Black Bomb A https://www.youtube.com/watch?v=2HHsrfwrAa8 L'incontournable, Bring Me the horizon https://www.youtube.com/watch?v=f0EQlIzPowM Et Sonic syndicate https://www.youtube.com/watch?v=boEypavY46w Thrash metal¹* Créant une musique rapide et violente, caractérisés par des pickings agressifs (technique de guitariste), l'utilisation extensive d'une double grosse caisses, dépourvue de synthétiseurs et des paroles qui traitent les problèmes sociaux et politique. Comme exemple il y a Metallica qui est bien connu https://www.youtube.com/watch?v=CD-E-LDc384 Ou encore Sabbat https://www.youtube.com/watch?v=685uHyRbOAE Ce qui différencie ce genre des autres c'est la rapidité du batteur qui est très présente, et une technique à la guitare qui est facilement remarquable. Metal alternatif Ce sous genre du metal se mélange parfois au rock alternatif. En faite ce dérivé et une sorte d’imitation de métal, ça va en être sans être vraiment, ce qui apporte un aspect innovent. Clairement les groupes appartenant à ce style musical jouent un style de rock qui est considéré comme une approche unique au genre du metal. Comme exemple de metal alternatif nous avons : Breaking Benjamin https://www.youtube.com/watch?v=DWaB4PXCwFU Evanescence https://www.youtube.com/watch?v=3YxaaGgTQYM System of down https://www.youtube.com/watch?v=CSvFpBOe8eY Three day a grace https://www.youtube.com/watch?v=-U98qkjbYek Certains de ces groupes comme par exemple Evanescence ou Breaking Benjamin, on dirait pas trop du metal vu que y a très peu de scream ou de voix bien hard mais en faite si, s'en ait ; c'est ce qui caractérise le metal alternatif. Power metal C'est encore un style de metal un peu "exclu", c'est plus du "speed metal" avec du heavy metal (heavy speed). Speed metal parce que le tempo est vraiment accéléré, c'est ce qui rend ce style unique. En général les batteurs sont juste monstrueux dans ce domaine. Comme exemple il y a DragonForce https://www.youtube.com/watch?v=0jgrCKhxE1s ou Metalium https://www.youtube.com/watch?v=LyjDUVfZMcM En écoutant ces deux morceaux on remarque bien ce qui caractérise le power metal, ce tempo est vraiment très très rapide. Metal symphonique Ce qui caractérise le metal symphonique (ou orchestral) c'est alliance entre des structures metal et des arrangements orchestraux mais en reprenant les bases du power metal (vu si dessus). Pour différencier ce style des autres on remarque que l'instrumentation est différente, certains de ses groupes ce sont inspiré de Mozart alors que cet artiste est plutôt dans la musique baroque et classique. Quelques exemples de groupes : Nightwish (surement le groupe le plus connu dans ce style de metal) https://www.youtube.com/watch?v=GdZn7k5rZLQ EDENBRIDGE https://www.youtube.com/watch?v=r1dJDzB2OFU Kerion https://www.youtube.com/watch?v=tLhpg_mdeaI Et bien d'autres. On voit bien sur ces derniers morceaux que l'orchestre est beaucoup plus présent que d’habitude et les voix des artistes sont moins hard, c'est plus posé source : wiki S'en est finit de ce petit guide du metal, je ne peux pas mettre tous les style du metal malheureusement parce que dans 1 mois j'y serai encore. Si vous avez des questions n'hésitez pas ou si vous voulez rajouter des informations dans ce guide faisaient mois en part ! Akimace et Demil.
    4 points
  38. Bonjour, voici une présentation des bases de l'électronique numérique : la logique Booléenne ( ou algèbre de Boole ) . Sujet en général passionnant pour les fans d'informatique et d'électronique Tout d'abord, qu'est-ce qui ce cache derrière ce nom étrange ? : L'algèbre de Boole, ou calcul booléen, est la partie des mathématiques, de la logique et de l'électronique qui s'intéresse aux opérations et aux fonctions sur les variables logiques. Plus spécifiquement, l'algèbre booléenne permet d'utiliser des techniques algébriques pour traiter les expressions à deux valeurs du calcul des propositions. Elle fut initiée en 1854 par le mathématicien britannique George Boole. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques. Elle fut utilisée la première fois pour les circuits de commutation téléphoniques par Claude Shannon. Merci Wikipédia Avant de lire ce post, je vous conseille de savoir compter en binaire, si ce n'est pas votre cas, vous trouverez des explications claires ici : Bien, vous savez compter en binaire mais vous ne savez toujours pas concrètement ce qu'est l'algèbre booléenne, on avance pas décidément. L'algèbre de Boole consiste à traiter les informations avec la plus simple ( et pourtant tellemeeeeeeent complexe... ) des logique, ici l'information est soit vraie, soit fausse ( 1 ou 0 ) pas de doute possible. On va donc associer ces 0 et ces 1 grâce à ce que l'on appelle des fonctions logiques. Je vous propose donc d'étudier ces fonctions logiques de base puis de s'amuser avec pour voir leur potentiel ! I / fonctions logiques ( ou opérateurs logiques ) A/ fonction ET (conjonction) AND nous allons représenter cette fonction par un petit schéma... a et b sont nos entrées et L est la sortie de al fonction logique. Voici l'équation : L = a . b ( à lire L = a ET b ) rappelons que nous travaillons en binaire, a et b valent donc soit 0 soit 1. l'équation nous dit que L ne vaut 1 si et seulement si a ET b valent tous deux 1... d'où le nom. Un autre outil sympathique pour se représenter une fonction logique est ce que l'on appelle une table de vérité : les lignes sont à lire ainsi = "0 et 0 font 0", "0 et 1 font 0" ... et ainsi de suite. B/ fonction OU (disjonction) OR allon un peu plus vite : avec l'équation : L = a+b ( à lire L = a OU b ) C / fonction NON (négation) NOT D / fonction NON ET (conjonction négative) NAND Il s'agit en fait d'une fonction ET suivie d'une fonction NON E / fonction NON OU (disjonction négative) NOR F / fonction OU EXCLUSIF ( disjonction exclusive ) XOR En général les débutants butent un peu sur celle-là... on peut la traduire ainsi : a OU b MAIS pas les deux. Voici comme d'habitude schéma, table de vérité et équation : Fun fact : les développeurs Assembleur utilisent souvent cette fonction pour remettre à 0 une variable ( un registre ) : xor ax,ax en effet, si vous vous amusez à poser l'opération ( imaginons que ax vaut 42, soit 00101010 ) : 00101010 xor 00101010 = 00000000 et oui, 0 ou 0 mais pas les deux, ça fait 0 ; 1 ou 1 MAIS PAS LES DEUX, ça fait 0... cette méthode est plus courte (en nombre d'octet) que de mettre 0 dans la variable directement : mov ax, 0 Mais on s'éloigne du sujet originel... il nous reste une dernière fonction logique ! G / fonction NON OU EXCLUSIF (disjonction exclusive négative) XNOR Il s'agit bêtement d'une xor avec une not derrière... Vous remarquez cette bulle derrière la fonction logique à la place d'un petit triangle ? c'est une autre représentation pour dire que l'on à inversé la sortie ( on y a mit une fonction NON ). Pfiou c'est fini pour la présentation bête et méchante des fonction logiques ! à noter qu'il en exister deux trois autres telles que l'implication ou l'inhibition mais bon, moins utilisées. Petit bonus : le théorème de De Morgan : première loi : deuxième loi : Vous êtes normalement capables de comprendre ceci par vous-même et j'aurais bien du mal à vous l'expliquer mieux que l'équation ! Le meilleur moyen de le maitriser est de faire des exercices... mais je n'ai pas mon cours sous la main Si ça vous intéresse : http://fr.wikipedia.org/wiki/Lois_de_De_Morgan II / faire du calcul ! aaaaaaaaah ! enfin quelque chose d'intéressant ! A / les additionneurs ( adders ) Voyons comment votre ordinateur fait des additions... (à peu près, les ingénieurs de proco on depuis longtemps abandonné cette méthode pour se tourner vers des additionneurs plus performant, notamment le Kogge-stone adder, qui est un carry-look-ahead adder (additionneur à calcul anticipé de retenue ) mais c'est pour une autre histoire ! ) commençons doucement avec le demi additionneur (half-adder) : nous allons additionner deux bits, le bit A et le bit B ( ça va pour le moment ? ) dans le cas où les deux valent 1, on aura 2 en sortie, n'est-ce pas ? il nous faudra donc prévoir deux bits de sortie pour écrire 2 en binaire : 10. Nous avons donc une sortie et une retenue, la sortie correspond à 20 et la retenue à 21 , respectivement nommées S et C (pour carry, retenue en anglais) les équations : C = A.B S = A⊕B schéma et table de vérité : Vous remarquerez que le schéma utilise des fonctions logiques que vous n'avez jamais vues... en fait c'est la représentation américaine (Wikipédia m'a lâchement lâcher (ooh un pléonasme ! ) sur ce coup), croyez-moi la fonction du dessus est une XOR et celle du dessous est une AND. faites un tour ici pour avoir les versions françaises et américaine côte à côte : http://en.wikipedia.org/wiki/Logic_gate Bien, nous pouvons maintenant additionner deux bits... mais qu'en est-il si nos nombres font plus de 1 bit chacun ? Il faudrait faire un half adder sur chaque couple de bits ( les 20 avec les 20, les 21 avec les 21 etc...) puis faire un half-adder entre la retenue des 20 et la sortie des 21 et puis.... et puis on s'écroule sur la table parce que dès qu'il y a plus de 4 bits sur chaque nombre, même le schéma sur une feuille de papier avec un crayon devient un vrai clavaire (j'ai déjà essayer en 4e...). C'est pourquoi on a inventé le full-adder ! Ce petit bijou fait la différence entre la retenue entrante et la retenue sortante, il additionne ainsi trois bits et possède deux bits en sortie. en reliant la retenue sortante (carry out) à la retenue entrante (carry in) du full-adder suivant, on additionne nos nombre sans avoir à gérer un truc ultra-compliqué. on a : A+B+Cin = S+Cout (ici le + est un "plus" et non pas un OU). Pour les équations : S = (A⊕ B )⊕Cin Cout = (A. B ) + (Cin . (A⊕ B ) ) Donc oui la fonction logique tout 0 droite est bien une OU. Je vous avais parlé de relier le Cout d'un adder au Cin du suivant... cela s'appel chainer les additionneurs, mettons que nous voulons faire A+B (plus hein, pas OU) mais que A et B font tous deux 4 bits, ils seront composé comme ceci : A3A2A1A0 et B3B2B1B0 et on chaine les adders comme suit : Et bien ma foi, nous voici rendu avec les additions ! B / la soustraction Et là, c'est le drame, vous avez peur de devoir vous replonger dans des schéma compliqués et incompréhensibles et tout reprendre de 0... Mais non ! si nous rusons il y a moyen de reprendre le travail déjà fait jusque là . Rappellez-vous ... A-B = A+(- B ). Cours de maths niveau 5e. Et pour trouver l'opposé d'un nombre binaire, c'est très simple. Cherchons -12. prenons la valeur absolue : (0b00001100), inversez-le bit à bit => 0b11110011, puis ajouter 1 => 0b11110100. Et voilà votre nombre en binaire signé ( complément à deux ) ! simple non ? et avec des fonctions logiques ? il suffit d'appliquer la fonction NON sur notre chiffre... puis de le faire passer dans un adder avec un 1. Mieux encore, regardez le schéma des full-adders chainés, n'y voyez-vous pas une première retenue entrante inutile ? le voilà notre 1 à ajouter ! pour faire une soustraction, il suffit de faire une addition, sauf que l'on met la première Cin à 1 et que l'on fait passer B par une fonction NON . Mais il y a encore mieux, on peut utiliser le même chainage d'adders pour faire des additions et des soustractions ! il suffit de faire passer B par des fonction XOR, la deuxième entrée de chaque XOR étant reliée... à Cin, ainsi si Cin est à 0, B reste inchangé, Cin est à 0 (sans blague ) et on fait une addition entre A et B. Si Cin est à 1, le XOR va inverser chaque bits de B et le chaînage d'adders va ajouter 1 en plus, on aura une soustraction entre A et B (A-B pour être précis) . en image : photoshop pro here ! Et bien voilà... vos neurones peuvent désormais reposer en paix. Si vous voulez plus de masturbation intellectuelle faites-le moi savoir et je m'attaquerai aux multiplicateurs... et si vous voulez du hardcore je vous proposerai des diviseurs... et pour l'orgasme intellectuel, il y a le sujet qui me tient le plus à coeur : les carry-look-ahead adders ( comme le kogge-stone adder dont j'avais mentionné l'existence ).
    4 points
  39. Bonjour à tous, Aujourd'hui, je vais vous présenter rapidement le langage LUA (Lune en portugais). Dans cette partie, nous verrons juste les considérations d'ordre général, puis dans les prochains tutoriels, je vous expliquerai le fonctionnement de ce langage. I - L'histoire du Lua Lua été créé en 1993. C'est un langage conçu pour pouvoir être embarqué au sein d'applications afin de de pouvoir optimiser celles-ci. Lua (qui signifie Lune en portugais) a été créé par Luis Henrique de Figueiredo, Roberto Ierusalimschy et Waldemar Celes (appartenant au groupe de recherche TeCGraf). Lua a été écrit en langage C ANSI strict, c'est pourquoi il est compatible avec une très grande variété de systèmes. Il s'intègre parfaitement dans la plus part des projets écrits en C. C'est un langage notamment très apprécié pour les interfaces de jeu (le plus connu étant World of Warcraft) mais aussi pour Garry's Mod ou Far Cry. Il est aussi utilisé pour réaliser la plus part des jeux sur DS (avec le microLua). (Source : http://wikipedia.lua/wiki/Lua) II - Les moteurs Lua Ce qu'il faut savoir, c'est que vous ne pourrez développer que très rarement des programmes en LUA seulement, puisque ce n'est pas un langage assez puissant pour qu'il puisse se suffire à lui même. De ce fait, il vous faudra l'intégrer dans un projet, et je vais vous en présenter rapidement deux (les seuls que je connaisse), à ce jour. Eluna Engine (sur World of Warcraft) : C'est par celui-là que j'ai commencé. C'est en fait un moteur que vous pouvez installer facilement sur Trinity Core (j'essaierai de vous passer quelques tutoriels vidéos très bien foutus). Il vous permet, grâce à sa simplicité, de changer presque toute l'interface du jeu (à savoir les cosmétiques, le comportement des PNJ's, les boites d'affichage etc ...) sans pour autant toucher au core du serveur (qui est plus compliqué à gérer puisque écrit en C++). Cependant, attendez vous à avoir moins de possibilité qu'en modifiant le core. Mais ne vous trompez pas, j'ai réussi à faire des choses sympa avec Eluna tel un système de levier qui ouvre une grille lorsqu'il est activé, un système de connexion élaboré (et oui, Eluna gère les bases de données ! ) Bref, Eluna propose pas mal de possibilités, mais avec une documentation qui laisse à désirer puisque incomplète sur certains points. Multi Theft Auto (que j'utilise en ce moment) est en réalité un mod qui permet de jouer en ligne avec d'autres joueurs (impossible de base sur GTA SAN ANDREAS) tout en offrant la possibilité au développeur de créer son serveur de A à Z sans aucun script prédéfini. Et devinez quoi ? Le moteur est en Lua. Pour le coup, la documentation est géniale, la communauté assez altruiste ce qui vous permet d'obtenir rapidement une réponse. MTA gère aussi bien les interfaces GUI que la connexion à la base de données et est d'autant plus puissant qu'il gère aussi bien le côté client (client-side) que le côté serveur (server-side) ce qui vous permet d'économiser des performances de votre serveur dédié. En bref, Lua est un langage très sympa qui s'intègre parfaitement à certains projets en proposant une alternative aux langages plus compliqué. Je n'ai pas stipulé le fait que vous pouvez tester vos petits scripts sur le site officiel de Lua (cf. annexes) III - Annexes Lua * Site officiel de Lua : http://lua.org * Testez vos scripts : http://lua.org/demo.html Eluna Engine * Installer Eluna Engine : http://www.youtube.com/watch?v=8wGHf7FbhSw * Documentation : http://wiki.emudevs.com/doku.php?id=eluna * Github du projet : https://github.com/ElunaLuaEngine/Eluna/wiki/Installation-&-Updating Multi Theft Auto * Site officiel : http://mtasa.com/ * Documentation : http://wiki.mtasa.com Voilà, d'autres tutoriels arriveront pour vous présenter plus en profondeur ce langage.
    4 points
  40. Bonjour à tous, Je fais ce topic pour tout les petits codes pour éviter de faire plein de topic, si vous avez besoin de quelque chose en php vous le dites et je l'ajoute 1. Tester si un port est ouvert: -> fsockopen if (@fsockopen("127.0.0.1", 80, $errno, $errstr, 1) { // port ouvert } #en compact echo (@fsockopen("127.0.0.1", 80, $errno, $errstr, 1))? "En ligne":"Hors-ligne"; [/php] Notes: - le @ empêche de faire apparaître une erreur si une erreur est rencontré; "127.0.0.1" est à remplacer par l'ip ou le domaine; 80 est à remplacer par le port; $errno et $errstr servent à récupérer l'erreur mais je les mets que pour utiliser le paramètre suivant; 1 est le temps maximum pour que le serveur réponde en seconde (un serveur actuellement prend 0.002sec pour faire un ping à l'opposé du monde en moyen). 2. Vérification de base pour un include 3. Afficher le visage d'un skin minecraft à partir du nom de compte et d'une dimension(optionnel) header('Pragma: public'); header('Cache-Control: max-age=86400'); header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400)); header("Content-type: image/png"); $size = (isset($_GET['size'])&&is_numeric($_GET['size'])&& $_GET['size']<=128&&$_GET['size']>=8) ? $_GET['size'] : 64; $name = (isset($_GET['name'])) ? $_GET['name'] : "char"; $img = imagecreate($size, $size); $src = @imagecreatefrompng("http://minecraft.net/skin/{$name}.png"); if(!$src){ $src = @imagecreatefrompng("http://www.minecraft.net/skin/char.png"); } imagecopyresized($img, $src, 0, 0, 8, 8, $size, $size, 8, 8); imagepng($img); imagedestroy($img); imagedestroy($src); Notes: - les paramètres (nom et dimension) sont dans l'url (donc en $_GET) la dimension reste carré est s'exprimer à l'aide d'un entier de 8 à 128, si l'utilisateur s'appel "Mars075" et que que l'on veut d'une taille de 32px sur 32px l'url ressemblera à "head.php?name=Mars075&size=32". Si le nom n'est pas spécifié ou si le compte "officiel" n'a pas de skin correspondant le skin par défaut est affiche, si aucune taille n'est spécifiée la taille par défaut est de 64pixels, le site pour les apparences étant assez lent les images sont mises en cache pendant 24 heures (86400 secondes). 4. Ma fonction pour charger une image $_FILES sans se soucier de tout les imagecreatefrom* function imagecreatefromfile($file) { $func = "imagecreatefrom".substr($file['name'], strrpos($file['name'], ".")+1); $func = stri_replace(array("jpg", "jpe"), "jpeg", $func); return (function_exists($func)) ? $func($file['tmp_name']) : false; } défaut principal: ne fonctionne pas avec imaged2part mais bon suffit de modifier un peu pour ceux qui l'utilise
    4 points
  41. Bonjour à tous, Je me suis dis qu'il serais intéressant de vous apprendre à compter, oui mais bon vous savez déjà compter (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...), oui mais si je vous dis 1 + 1 =10 et que vous me dites que je n'ai pas raison alors que en faite si, je m'explique, c'est une addition binaire, imaginons je vous demande les 5 premiers nombres que vous utilisez dans la vie de tout les jours: vu que l'on part de 0 le 5éme chiffre est bien 4. Comme je l'ai dis dans la vie de tout les jours vous compter mais vous comptez en base 10, c'est à dire que lorsque vous arrivez au 10éme caractère vous ajoutez un nouveau caractère: Maintenant nous allons apprendre le le binaire du moins comment compter avec, on va encore compter les 5ers chiffres (c'est donc en base 2, donc 2 caractères possibles): le plus souvent on retrouve les nombres binaire formaté sur un quartet (4 caractères, ex: 0001) ou un octet (8 caractères, ex: 00101100 parfois avec un séparateur: 0010 1100), c'est utile à connaître lorsque l'on fait de l'électronique (1111 1111(base2) = 255(base10)). Comme dit dans le titre on va voir la base 16 (dit aussi hexadécimal, hexa ou encore hex)! Vous connaissez les 10 premiers(0..9) mais les 6 autres? C'est comme ce que beaucoup de gens n'aime pas en math on ajout des lettres... Les 6 premières lettres biensur (a, b, c, d, e, f). C'est partit pour compter jusque 16! Haha et donc biensur on peut continuer en base 16: mais à quoi ça sert de s'avoir la base 16? Vous voyez le code-couleur en paint ou photoshop, vous avez le rouge, le vert, le bleu se sont les couleurs de base avec pour chacune de ces couleurs un chiffre allant de 0 à 255 et surtout dans les sites webs on utilise un code couleur du style: #000000; 00 00 00 -> décomposition (rouge = 0; vert = 0; bleu = 0) -> donc du noir #FFFFFF; FF FF FF -> décomposition (rouge = 255; vert = 255; bleu = 255) -> donc du blanc #00FF90; 00 FF 90 -> décomposition (rouge = 0; vert = 255; bleu = 144) -> ~vert pistache Les codes couleurs sont parfois mit en trois caractères (ex: #000 = #000000; #123 = #112233). On retrouve aussi l'hexa dans l'adressage de mémoire souvent précédé par un "0x" mais on peut aussi s'en servir dans certains langages de programmation pour indiquer directement une couleur. J'espère que ce sera instructif, et que je n'ai pas mis d'erreur. Bon... amusement à tous, Cordialement, Mars073.
    4 points
  42. Bien le bonjour ! Aujourd'hui je vais vous faire une petite présentation de la photographie Argentique, car avec le temps, de plus en plus de personnes ne savent PAS ce que c'est !! Tout d'abord, l'argentique, c'est quoi ce mot ? C'est ce qui désigne le fait de prendre ses photos sur une pellicule, de la développer, et de l'imprimer ! Oui oui, de la pellicule, comme à l'époque de nos grands-parents ! I. Comment ça marche ? La phrase "la photo c'est simple, il suffit d'appuyer sur un bouton !" est loin de pouvoir s'appliquer ici ! En effet, pour faire de la photo argentique, il faut un appareil adapté or tous les appareils argentique (ou presque) sont en manuel ! Adieu mode rafale, autofocus et réglage automatique de l'ISO ou de la profondeur de champ ! (oui oui tout un charabia de photographe Je ferai un sujet lexique pour tout expliquer). Donc, un appareil argentique, ou il faut faire tous les réglages pour avoir une photo correcte ! Pas question de se dire qu'on retouchera après ! Le sans faute est de rigueur ! Pourquoi ? Tout simplement parce que la photo n'est pas enregistrée sur une carte SD comme aujourd'hui avec le numérique, mais est imprimée sur une pellicule ! Avec 36 photos en moyenne possibles par pellicules, pas le temps de rater une photo ! (le développement est compliquer, et l'impression couteuse !) C'est pourquoi l'arrivée du numérique à révolutionner la photographie. II. Quels sont les avantages ? Alors, ils ne sont perceptibles que par certains passionnés ; Tout d'abord, la satisfaction d'avoir réussi sa photo ! L'aspect joue beaucoup également car il y a un coté ancien qui plait souvent. Puis évidemment une belle photo en noir et blanc, non retouchées sous photoshop. Il y a aussi le fait qu'une photos imprimée (développée) par le procédé argentique tiendra plus longtemps dans le temps qu'une photo imprimée aujourd'hui par imprimante. Il faut aussi prendre en compte que l'argentique peut être très pratique lorsque l'on part en expédition photo dans des lieu insolites ! Car il n'y pas de batterie qui se décharge, juste une pile qui dure deux, trois ans. Bon il faut également prévoir le stock de pellicules, mais c'est un détail. le fait d'avoir un argentique, de ne pas avoir droit à l'erreur permet aussi très souvent d'être plus précis dans ce que l'on fait, et plus créatif parfois ! III. Quels sont les inconvénients ? Il n'y en a pas si on est passionné est habitué à ce genre de méthode photographique, à part le prix des pellicules (surtout aujourd'hui ou elle se fait rare !). On peut également inclure le fait qu'il faut (c'est mieux) développer ses photos manuellement. IV. Le développement, étape cruciale. Bon, on a fait tous les bon réglages, on pense avoir une photo correcte ! Pour le savoir, il va falloir développer la pellicule ! Pour savoir comment faire, je vais citer le très bon tutoriel trouvé sur http://www.focale-alternative.be/blog/enrouler-film-spire-developpement/ ! Suivez les étapes pas à pas et avec un peu d'entrainements vous devriez être apte à avoir de jolies photos argentique ! Voici ma version très sommaire des étapes à suivre : Préparer tout le matériel avant (car dans le noir c'est beaucoup moins simple ), c'est à dire, l'appareil, la spire et la cuve ! Éteindre (car oui, il faut tout faire dans le noir, sinon la pellicule est fichue !), et enrouler la pellicule dans le spire ; Ensuite l'on met cette spire dans la cuve que l'on ferme bien et l'on peut rallumer ! Ensuite, on va verser le révélateur dans la cuve, puis on agite régulièrement. On rince le révélateur On met du fixateur on rince on met l'agent mouillant on fait sécher ! ( et la ce n'était que la partie pour avoir une pellicule correcte, que l'on peut regarder à la lumière du jour !) Passons ensuite à l'étape qui n'est pas dans le tutoriel, celle de l'impression sur papier photo ! Pour ceci, voici un excellent tutoriel sur la démarche à suivre : http://objectif-argentique.com/agrandissement.php Basiquement, il faut projeter le négatif sur le papier photo et la fixer grâce à un temps d'exposition plus ou moins long. Et ensuite le développement final ! (oui oui c'est bientôt fini ^^) Voici donc à quoi peut ressembler l'évier dans lequel on travaille pour cette partie ! Il y a donc trois bains ( de droite à gauche) : le révélateur, le fixateur, et le rinçage ! Comme dans la cuve, mais cette fois c'est pour fixer la photo sur le papier. Pour les proportions et les temps, c'est généralement marqué sur les bouteilles des produits. Après les temps peuvent varier en fonctions du rendu voulu (plus ou moins de contraste, de luminosité etc...) Et une fois la photo passée dans ces trois bains, on peut la faire sécher ! V. Le matériel Pour le développement, on a besoin d'une cuve, d'une spire, de ciseaux pour couper la fin de la pellicule, des bouteilles des différents produits, d'un agrandisseur, de papier photo (qui ne doit jamais voir la lumière blanche !!! Sinon il noircit et c'est fichu... D’où la lumière rouge dans une "chambre noire" (nom du labo de développement)), d'une pince pour pouvoir faire baigner les photos sans toucher le produit (très salissant et toxique !), de fil et de pinces à linge pour faire sécher les photos ! Sinon on a besoins de pellicule photo et d'un appareil argentique ! Faites votre choix : (source : http://www.lense.fr/2011/07/20/argentique-l%E2%80%99essayer-c%E2%80%99est-l%E2%80%99adopter-part-3/ ) Les appareils type polaroid (troisième en partant de la gauche) sont revenus à la mode passer un temps, parce que la photo sortait toute seule et dans un format attrayant -> (source : http://www.focale-alternative.be/blog/polaroid-photos-warhol/ ) Voila pour la présentation de l'argentique ! J'espère n'avoir rien oublier, même si je suis loin d'avoir tout dit ! Je vais commencer la rédaction d'un lexique de photo, avec tous les termes technique (ISO, focale, etc) expliqués ! Ça m'évitera de redonner la définition à chaque fois ^^ J'espère tout de même que ça vous a plu, même si c'est assez technique l'argentique ! Personnellement j'ai deux argentiques, mais je ne les aient encore jamais utilisés ! Et j'ai eu l'occasion de faire du développement par contre Si vous avez des questions ou des remarques n'hésitez pas !
    4 points
  43. Aujourd'hui je vais vous montrer comment conserver une seule couleur dominante dans une photo sous Lightroom ! On va prendre cette photo comme exemple : Je vais donc mettre la couleur rouge en valeur, en mettant le paysage en noir & blanc. (oui oui, c'est le petit chaperon rouge ) On procède donc a quelques réglages de base, une fois la photo ouverte dans lightroom : Ensuite, on va se placer dans le sous menu "saturation", et l'on va descendre tous les curseurs à 0, sauf le rouge, comme ceci : La plupart des couleurs sont enlevées, mais il en reste toujours. On prend donc l'outil pinceau pour la retouche ciblée, avec le paramètre "saturation" à 0. On passe donc plusieurs fois sur les endroits ou il y a encore de la couleur, comme ceci : Une fois que juste la couleur rouge est bien présente, on retourne dans les réglages de base, et on ajuste les niveau pour avoir une jolie photo ! Et voici le résultat final !! Vous pouvez donc refaire cette manipulation avec n'importe quelle couleur dominante dans une photo ! Ce procédé rend particulièrement bien en macro J'espère que ce tuto vous aura été utile ! N'hésitez pas a m'en demander un sur un sujet particulier en photo !
    4 points
  44. Voilou, Dans le même esprit que la bannière du site.
    4 points
  45. Crée un personnage est une alchimie complexe et subtile. Un petit rien peu gâché tout u personnage, le rendre énervant, peu crédible, too much, …. Ensemble, nous allons voir comment se torturer les neurones pour aboutir à un personnage équilibré. Il n’y a pas de bonne méthode pour imaginer et donner vie à un personnage. En revanche, les erreurs peuvent être nombreuses, nous allons donc passer en revue les erreurs les plus courantes et voir comment les éviter. Nous allons d’abord aborder quelques points théoriques avant de continuer avec la création d’un personnage principal, puis d’un personnage secondaire. Justement, commençons par différencier un personnage principal d’un personnage secondaire. Un personnage principal est une création pure. Il est central au récit et fait avancer l’intrigue. Toutes ses caractéristiques (traits, fonction, histoire, psychologie, …) sont imaginées et travaillées par l’auteur. Un personnage secondaire est une création contrainte. C’est-à-dire que le récit a besoin de tel ou tel personnage pour avancer et donc on le rajoute. Pour créer de la richesse dans le récit, il faut compléter ses caractéristiques. Quelques exemples pour illustré tout ça : Parmi les personnages principaux on trouve bien sur les héros (Harry Potter, le commandant Shepard, Gandalf, tous les super-héros, …), les opposants (Voldemort, l’Augure, Sauron, tous les super-méchants, …) ainsi que tous les personnages d’articulations (Hagrid, Joker, Gollum, tous les « meilleurs-amis-du-héros », …). Les personnages secondaires sont tous les personnages non principaux qui ne sont pas de simples figurants. Par exemple : des personnages principaux se réunissent régulièrement dans un bar et connaissent le barman. Ce dernier devient alors un personnage secondaire, il aura un nom, une fonction, une histoire, une manière de discourir, etc... Un personnage est composé de 3 composantes indispensables et interdépendantes : sa psychologie (avec son background, son histoire), son physique et sa mise en contexte (dénomination, fonction, situation, …). Ces 3 aspects sont à créer conjointement, mais la manière de s’y prendre diffère selon le personnage que l’on souhaite créer. Ces aspects seront dans la suite du tutoriel. Dans tous les cas, il convient de commencer par établir les aspects du personnage qui sont indispensables. Par exemple : un soldat d’une trentaine d’années, courageux, compétant, sérieux. Autre exemple : Jeune femme, archère, humour cynique, effrontée. Ces briques de bases sont en général déterminées par l’histoire que l’on souhaite raconter. Tous les autres aspects sont à construire autour de ses quelques mots. Un dernier point avant de commencer, il faut toujours avoir à l’esprit qu’un récit, quel qu’il soit et sur n’importe quel support est là pour éveiller l’imaginaire. Alors, prenez un crayon, mettez-vous une bonne musique d’ambiance et réveillez votre imaginaire ! Personnage principal Pour illustrer la création d’un personnage principal, je vais utiliser deux personnages de mon roman. Personnage n°1 : Jeune Reine du peuple des Hastris, courageuse, noble, aventureuse, charismatique. Personnage n°2 : Prince du peuple des Qrythars, rebelle, calme, ouvert d’esprit. Le rôle / la fonction Définir la fonction d’un personnage principal est essentiel. C’est un aspect du personnage qui doit être définitif assez rapidement. Il convient de bien développer cet aspect et d’aller au-delà d’un « c’est le héros de mon histoire ». Un personnage central est très rarement seul. En revanche, s’il est central, c’est qu’il possède quelque chose de singulier : ce pourquoi l’histoire mérite d’être centré autour de ce personnage. C’est cet aspect qui est à définir : mon personnage est intéressant parce-que… Personnage 1 : Elle est de noble naissance, a la particularité d’être une des rare métisses Hastris / Mage. Elle est douée d’un grand sens intuitif et d’une affinité particulière avec un dragon. Grâce à son charisme elle parvient à convaincre et inspire naturellement la loyauté. De par ses talents, elle va pouvoir s’entourer des meilleures personnes pour accomplir ses objectifs. Personnage 2 : Prince rebelle, douté d’un don pour le commandement et la stratégie. Sa rébellion envers son père apporte une vision nouvelle de son peuple aux autres espèces. Son histoire Donner une histoire à un personnage apporte énormément au récit. Cela permet de crédibiliser le personnage, de lui donner une expérience. Mais cela permet aussi de crée des anecdotes et des références dans le récit. Dans certains récits, le background du personnage est absolument essentiel. Pour ne citer que lui : que serait Batman sans son passé ? Le background est un point incontournable d’un personnage principal. Il s’agit d’expliciter comment le personnage est devenu ce qu’il est au moment du récit. Attention, cela ne veut pas dire qu’il faut TOUT déterminer et TOUT dire, bien au contraire. Garder une part de mystère quant au passé d’un personnage est un bon moyen pour créer un attachement au personnage. Le lecteur va chercher à savoir qui il est, et cela va éveiller son imaginaire. Révéler des aspects du background d’un personnage est également un bon moyen de créer un rebondissement. Personnage 1 : Elle a passé une enfance heureuse avec sa jumelle et sa meilleure amie. Elle reçoit une éducation avancée, apprends les arts, l’histoire, les langues étrangères. Après quelques années, sa sœur jumelle prend de la distance et va vire dans un autre pays pour apprendre la magie. Cette séparation a été douloureuse. Dans son adolescence, elle trouve par hasard un œuf de dragon. Le dragon deviendra son animal de compagnie. Une fois le dragon adulte, celui-ci s’en va vers les hautes montagnes. Une nouvelle séparation qui l’affecte profondément. Chacune de ses séparations la rapproche d’avantage de sa meilleure amie. Personnage 2 : Il a grandi dans l’ombre de père. Il a été élevé pour devenir un chef militaire. N’ayant que peu de relations avec ses semblables, il ne lie aucune amitié forte avant son âge adulte. Ayant une certaine curiosité pour la vie en-dehors du monde qu’il connait, il cherche par tous les moyens à trouver une voie qui lui permettra de se révéler. La psychologie Déterminer la psychologie d’un personnage, voilà une tâche qui peut s’avérer longue et délicate. C’est cet aspect qui est le plus délicat à manier et qui peut donner naissance à de véritables ratages malgré de bonnes bases. Il y a deux manières d’aborder le problème. Première solution : créer une psychologie brute et s’en servir pour déterminer les actions et réactions du personnage. Exemple : mon personnage est dans tel situation et pense de cette manière : donc il va faire ça ! Cette méthode peut s’avérer être un véritable cauchemar pour les néophytes. Elle implique de pouvoir créer un état d’esprit complet et complexe et d’arriver à se projeter dans le personnage. Seconde solution : procéder à l’inverse. Se dire : mon personnage est dans telle situation. Comment je veux qu’il réagisse ? Plus simple et abordable, cette méthode a néanmoins quelques failles. La psychologie ainsi créée est moins profonde et est plus rattachée à celle de l’auteur. Un bon moyen de palier au problème est d’utiliser les deux méthodes. Commencer par utiliser la seconde pour déterminer les grands axes psychologique des personnages et les affiner dans un second temps. Pas d’exemples concrets pour ce cas : un profil psychologique est assez long et pas très digeste. Il s’agit essentiellement d’un listing d’actions, de réactions, de mimiques, phrases, etc… Les traits Même si un personnage ne sera pas représenté en image, il faut pour autant le définir physiquement. Tout simplement pour pouvoir le décrire et, encore une fois, faire travailler l’imaginaire du lecteur. C’est à ce point que la construction du personnage peut aboutir à de véritables chefs d’œuvres. En effet, le physique d’un personnage peut être en totale adéquation avec ses actions, sa psychologie, en décalage ou en total contraste. Plutôt que de longues explications voici quelques personnages qui illustrent ces cas : Personnages en adéquations physique/psychique : Kratos (God of War), Indiana Jones, Gollum (le Seigneur des Anneaux). Personnages en décalages : Tyrion Lannister (Game of Thrones), Samara (Mass Effect), Ellen Ripley (Alien) Personnages en contrastes : Arya Starck (Game of Thrones), Yoda (Star Wars), Jiggsaw (Saw) Personnage 1 : Age : 21 Taille : 1m80 Poids : 75 kg Cheveux : Roux Yeux : Verts Personnage 2 : Age : 35 Taille : 2m35 Poids : 105kg Cheveux : Gris-Vert Yeux : Noir Le nom Enfin, il ne reste plus qu’à nommer le personnage. C’est quelque chose qui est relativement libre à condition qu’il soit cohérent avec l’environnement culturel du personnage. C’est-à-dire qu’il vaut mieux éviter d’appeler un personnage asiatique Eléonore-Jane von Kraggenberg à moins que cela ne serve explicitement le récit. Il est également préférable d’opter pour des noms faciles à retenir : si le lecteur ne retient pas le nom du personnage cela affaibli son immersion. Au besoin utiliser la technique du diminutif, c’est simple à utiliser et redoutablement efficace. Personnage 1 : Rysa de Lordan Personnage 2 : Ertherys Personnage secondaire Globalement, la création d’un personnage secondaire est la même que celle d’un personnage principal. Nous allons, juste voir quelles sont les quelques particularité à prendre en compte pour créer efficacement des personnages secondaires. Dans la majorité des cas, on créer un personnage à cause d’un besoin dans le récit. La fonction du personnage n’est donc pas un problème. De même pour la psychologie, si un personnage secondaire à une psychologie particulière c’est sauvent à cause d’un besoin du récit. Une psychologie singulière est à éviter pour un personnage secondaire, cela risque de donner moins d’importance aux personnages principaux. Donc, seul reste les éléments de background et physique. La seule chose à préciser est qu’il ne faut pas occulter les personnages principaux en créant des personnages secondaires trop intéressent. Mais, ils doivent être suffisamment intéressent pour donner de la richesse et de la profondeur au récit. Voilà, j’espère que ce guide va vous aider à créer des personnages hauts en couleur.
    4 points
  46. Bonjour à tous, Nous passons encore à un autre niveau aujourd'hui, et nous allons voir ensemble la Récursivité, et la notion de Stack. I- La récursivité, c'est quoi? La récursivité, c'est un autre moyen de provoquer une "boucle" dans une fonction. C'est totalement différent de ce que je vous ai expliqué avant. Nous avions vu la partie "itérative" du C, qui corresponds à exécuter un programme, ligne par ligne. Ici, nous allons apprendre un peux plus les fonctions de la récursivité, et comment elle réagit sur la stack. C'est une façon de faire, pour qu'une fonction se rappelle elle-même. Prenons l'exemple suivant: int test(int a) { a++; if (a < 12) test(a); return (a); } int main(void) { my_putnbr(test(1));// my_putnbr est une fonction permettant d'afficher une valeur numérique. Vous devez la re-créer ou utiliser printf (ce qui est interdit par la norme! Re-créez la, ça vous apprendra pas mal de choses!) } La fonction "test" est ici récursive. Ce code nous affichera: 12 Vous l'aurez compris, la récursivité peut être utile dans plusieurs cas (pour annecdote, my_putnbr peut être codé en 3 lignes avec de la récursivité). Les fonctions récursives peuvent êtres comparées à des poupées russes s'emboitant. Ne vous perdez pas! Et ne vous inquiétez pas! Je vais mieux vous l'expliquer en vous expliquant le fonctionnement de la stack. II- La stack? DAFUQ? Je vais pouvoir vous expliquer une notion qui est assez floue dans le cerveau de beaucoup de développeurs: la stack. La stack est une mémoire assignée à votre programme pour la prise en charge de tout ce qui est "static" dans votre programme (d'où le nom "stack"). Lors du lancement de votre programme, la stack est vide. Si vous appelez la fonction "test" celle-ci va se rajouter dans la stack. Si, de la fonction "test", vous appelez la fonction "my_putstr" celle-ci va se rajouter dans la stack, de même pour la fonction "my_putchar" contenue dans la fonction "my_putstr" qui fera elle-même appel à la fonction "write" qui se rajoutera à son tour à la stack. La stack a donc constitué une liste d'exécution. On peut re-définir l'ordre d'exécution précédent comme ceci: Il ne faut pas oublier que la stack est une mémoire, et qu'elle va stocker tout ce qui est statique dans notre programme. Donc, si nous la sur-utilisons (une boucle infinie de fonctions par exemple: surempiler les poupées russes), nous risquons de faire segfault (segmentation fault) notre programme (C'est souvent une explication pour les programme qui segfault sans raisons). Lorsqu'une fonction finit son exécution, elle est supprimée de la stack. Pour vous faire un schéma, imaginez un tas de vaisselle: à chaque fois, vous rajoutez une assiette sale sur le tat, et lorsque vous faites la vaiselle, vous enlevez vos assiettes dans l'ordre contraire de celui de l'empilation. Reprenons la théorie: Une fonction récursive est une fonction qui se rappelle elle-même. Elle se rajoute donc sur la stack, puis se rappelle. Elle se rajoute donc encore une fois sur la stack, puis se rappelle...etc... Et là, deux choses peuvent avoir lieu: Soit on atteint la taille maximum de la stack (définie par le système), et on provoque un segfault, sinon, et c'est ce que vous devrez faire la plupart du temps en utilisant les récursifs, vous devez prévoir une condition d'arrêt du rappel de cette fonction, donc à un moment de votre récursivité, vous dites STOP, cette fois je ne me rappelle pas, car mon rôle est terminé. A ce moment là, vous allez libérer la stack de toutes les fonctions que vous avez au préalable ajouté. Le mieux, reste encore de vous montrer un exemple de ce qu'il ne faut pas faire: Créons un programme qui va afficher "hello" indéfiniment: void my_putchar(char c) { write(1, &c, 1); } void fg() { my_putchar('h'); my_putchar('e'); my_putchar('l'); my_putchar('l'); my_putchar('o'); my_putchar('\n'); fg(); } int main(void) { fg(); } Effectivement, on voit "hello" s'afficher plusieurs fois, mais si on laisse tourner notre programme jusqu'à ce que la stack soit remplie, on remarque de notre programme crash, et qu'un segfault est apparu. C'est l'exemple typique de ce que l'on peut attendre au niveau des problèmes liés à la récursivité. Un autre exemple, c'est notre légendaire my_putnbr: void my_put_nbr(int nb) { if (nb <= 9 && nb >= 0) my_putchar(nb + '0'); else { my_put_nbr(nb / 10); my_put_nbr(nb % 10); } } c'est typiquement la bonne utilisation de la récursivité. Voilà, j'espère vous avoir encore aidé au niveau de votre apprentissage avancé du C. Rendez-vous au prochain cours! Cours écrit par AlexMog. Contact: alexmog [at] live [point] fr
    4 points
  47. Salut, je sais pas si certains d'entre vous connaissent mais un professeur de math français a créée un site où il propose des cours vidéos en math. vu qu'une image vaut mille mots, voici une vidéo de présentation du site (Si on admet qu'il y a 30 images par secondes et que la vidéo dure 1:42, ce qui fait 102 secondes soit 102000 mots, eh oui je suis astucieux ) Voici le lien du site kifflesmaths : http://www.kiffelesmaths.com/ Pour pouvoir visualiser les cours, il vous faut un compte que vous pourrez créer ici : http://www.kiffelesmaths.com/inscription.php Honnêtement, je trouve que ses cours vidéos sont très clair et très rapides (Vous apprendrez en 16 minutes avec lui ce que vous auriez appris en 1h avec votre professeur). Avis à tous ceux qui sont en difficultés en math, ce site m'aide beaucoup P.S : Kifflesmaths.com proposes des cours et exercices allant de la 3e au Bac+1 mais pour ce qui est de la Première et de la Terminale, c'est uniquement en série Scientifique. P.S2 Pour les exercices il vous faut un abonnement chez lui mais les cours sont gratuits, c'est le plus important Bonne soirée
    4 points
  48. Bonjours à tous, j'ai eu l'idée il y a quelques temps, d'un logiciel permettant le codage par équipe. Alors j'ai eu l'idée de créer OnlineCodeProject. 1 - Présentation Le logiciel est codé en VB.net et utilise du PHP pour interagir avec le serveur. Il dispose d'une colorisation syntaxique qui s'applique sur différents langages. Il permet, comme son nom l'indique de faire du projet en ligne, c'est à dire que où que vous soyez, avec n'importe quel PC, vous aurez accès à vos projets. Vous pouvez bien évidement rajouter et supprimer des participants à votre projet. 2 - Liste des fonctions Système de connexion/enregistrement. Il permet de créer/supprimer/éditer un projet. Il dispose d'une colorisation syntaxique pour vous aidez dans l'écriture ainsi que la compréhension de votre code. Il permet aussi de rajouter/supprimer des participants. Mais aussi d'importer/créer de nouveaux fichiers. Lors d'une proposition de mise à jour, elle s'installera toute seul. 3 - Quelques images 4 - Informations diverses Créateur : Brokeos (alias Bwisingw) Créateur des thèmes : iSynthesis & Xertz Le logiciel nécessite une connexion internet nous conseillons au moins 500 Ko/s. 5 - Téléchargement VirusTotal : OnlineCodeProject - VirusTotal Téléchargement : OnlineCodeProject 7 - Vos idées d'amélioration Bien entendu, vous pouvez m'envoyer vos idées pour améliorer le programmes ! Envoyez moi une message privée ou passé par skype (brokeos17)
    4 points
×
×
  • Créer...