Jump to content

AlexMog

Modérateur spécialisé
  • Content Count

    322
  • Joined

  • Last visited

  • Days Won

    34

AlexMog last won the day on February 18 2017

AlexMog had the most liked content!

Community Reputation

128 Vénérable

1 Follower

About AlexMog

  • Rank
    Section Programmation
  • Birthday 09/29/1994

Informations du profil

  • Genre
    Homme
  • Centres d'interêts
    Programming & Gaming
  • Localisation
    Montpellier
  • Study level
    Master 2

Recent Profile Visitors

1,827 profile views
  1. AlexMog

    Melinyel 3.0

    Salut à tous, Oui, moi aussi je repasse de temps en temps! C'est beau de vous voir essayer de faire évoluer le forum pour lui redonner sa vie d'antan. Néanmoins, il faut voir ce autours de quoi la communauté tourne. En effet, il y a eu une période où il y a eu énormément de projets soutenus par le communauté (je pense entre autres aux projets qui avaient étés pensés spécialement pour Melinyel, comme MeliWow, MeliGames, MeliChat, etc...) ce qui faisait que la communauté y participait, c'était que justement, ça allait apporter quelque chose à ladite communauté. Monter un projet de jeu vidéo, même communautaire, est une tâche ardue: N'oubliez pas qu'on parle du 2nd secteur informatique qui demande le plus de connaissances et d'expertise (le premier étant les sciences appliquées à l'informatique de pointe). Qui plus est, c'est long et très difficile de gérer une équipe complète pour un jeu vidéo (pour ceux qui me connaissent, ils savent déjà que je n'en suis pas à mon premier essais :')). Sinon, refondre Melinyel semble être une bonne solution, et je serais plutôt adepte de l'idée de base de Azad. Après, c'est à vous, ceux qui êtes encore très actif au niveau de la communauté, de faire ce choix. Malheureusement, nous (je parle ici des "anciens" actifs) n'avons plus forcément autant de temps à consacrer au forum qu'avant, bien qu'on y repasse de temps en temps :/. Bref, tout ça pour dire que je suis plutôt adepte de l'idée d'Azad et refaire un coucou et un bisous baveux à tout le monde! Cordialement, AlexMog.
  2. Merci pour vos retours L’épisode 2 est sortit au passage!
  3. Bonjour à tous, Je partage avec vous aujourd'hui le premier épisode de RTFM, qui a pour but de faire de la vulgarisation informatique plus ou moins poussé. Il s'agit d'un pilote, pour tenter de voir si le concept de l'émission plait, et si je continue dans cette lancée :). Voici l'épisode: Bon visionnage, et j'attends vos retours avec impatience! Cordialement, AlexMog.
  4. Une belle liste de design patterns en java: https://github.com/iluwatar/java-design-patterns
  5. Salut tout le monde, Je suis retombé sur ce message récemment, et donc celui où je parlais de la passion. C'était il y a un peu plus d'un an, et donc, voici un petit résumé de la suite du parcours: Je considère avoir perdu 3 ans de vie IRL que j'ai échangé contre 3 ans d'apprentissage. 3 ans à m'acharner à apprendre et j'ai appris plus en 3 ans qu'en 10 ans avant cela. Je me suis conforté dans le fait d'avoir choisi la bonne filière, et je suis encore plus passionné aujourd'hui qu'avant. Je considères toujours autant mes créations comme mes enfants, c'est toujours aussi amusant de créer quelque chose et de le partager, et voir que les gens trouvent ça bien! Voir même se faire contacter pour du recrutement grâce à ça! (d'où le fait que je conseille un Github bien remplis à tous les devs!). Par contre, j'aimerais revenir sur le fait que s'investir dans sa passion à 100%, c'est bien, mais ça nous oblige à faire des sacrifices. Personnellement, ce que j'ai retenu des 3 années intensives d'Epitech, c'est d'abord beaucoup d'apprentissage dans mon domaine, mais aussi beaucoup de pertes dans le domaine social. Lorsque tu es à fond dans ce que tu aimes, tu te rapproches de personnes qui sont passionnées aussi, et tu as tendance à oublier le monde extérieur. Ma mère et ma sœur m'en ont pas mal fait le reproche, le fait que je leur parlais rarement, et le fais que je ne les voyais pas souvent (j'avais une excuse pour la piscine, mais rien ne m'empêchait pendant l'année d'aller les voir...). Pareil pour ma meilleure amie (je reviendrais sur ce point là plus tard) qui a même trouvé qu'Epitech m'avait changé, et que j'étais moins créatif qu'avant et moins "fou". Mais ça c'est vite dissipé, il m'a fallu un an pour retrouver mes aptitudes sociales, mais j'avoue que ça laisse des traces (entre autre, le fait d'être devenu très timide, alors que je ne l'étais pas beaucoup avant). Je reviens sur le point de la vie "sexuelle" ou encore la vie "amoureuse". Je n'ai pas eu de relations amoureuses durant mes 3 années, non pas parce que -comme j'aime le dire- je me concentrait sur mes études (bien que ce soit un point important dans le débat), mais parce que j'ai des goûts très sélectifs sur les femmes (que j'avais déjà développés avant, donc c'était pas due à Epitech), néanmoins, je suis devenu beaucoup plus rude et sélectif pendant ces 3 années (j'ai eu une copine qui ne comprenais pas pourquoi je passais autant de temps sur mon ordinateur, et ça m'a poussé à me dire qu'il fallais que je me trouve une "dev" aussi, sinon elle ne me comprendrais pas). Néanmoins, ça ne m'a pas empêché d'avoir des aventures, mais rien de très durable. J'ai donc passé un an à l'étranger (dans une école format Américain, donc grandes classes, 27 000 étudiants, bref, beaucoup de monde à rencontrer) dans L'University Of Kent, dans le cadre de la suite de mes études, et ça m'a pas mal redonné confiance au niveau du sociétal (néanmoins, ça a été la pire année de ma vie, mais je ne m'attarderais pas là dessus, puisque c'est simplement ma façon d'être qui ne collais pas avec le côté "américanisé" de l'école). Et cette année m'a permis de m'éloigner un peu de cette "famille" qu'est devenue Epitech, et donc, me ré-ouvrir un peu au monde extérieur. Avoir de quoi prendre du recul sur sois même, c'est bien, et faut bien l'utiliser. Aujourd'hui, je vous écris simplement pour vous donner mon ressentit, je suis en train de passer les exams de fin d'année de Kent, et je m'apprête à faire ma 5ième année. Je suis en couple (au bout de 3 ans sans relations, ça fait bizarre) et avec ma meilleure amie en plus (encore plus bizarre. (pour info, je la connais depuis 8 ans, donc je n'ai pas eu l'effet "elle ne comprendra pas ce que je fais" vue qu'elle connaissait déjà ma passion et ma façon d'être :))). Je considère avoir perdu beaucoup avec ces 3 années sans réelle interaction sociétale en dehors des "passionnés" de mon école. Néanmoins, c'est quelque chose qui est revenu tellement vite, et tellement naturellement que je ne regrette rien. Je suis toujours capable de rester des heures sur mon PC, mais j'ai ré-appris à faire d'autres choses au lieu de me cantonner à celui-ci :). Bref, tout ça pour vous faire un résumé de ce qu'un "passionné" a vécu pour ses années d'études. Je sais très bien que tout le monde ne le vie pas de la même façon, mais c'était mon témoignage personnel. J'ai appris beaucoup, et j'ai du ré-apprendre beaucoup, mais au final, je n'ai trouvé que du bénéfique au fait d'avoir eu l'occasion de me plonger à 100% dans ma passion. Ainsi, la seule chose que je peux conseiller à une personne qui est passionnée et qui ne sais pas si elle devrait se plonger à 100% dedans, c'est d'essayer, et de voir ce que ça lui a apporté! Saccré roman! C'est très personnel, donc j'espère ne pas avoir dis trop d’inutilités. Mais bon, vous avez mon expérience personnelle (y'en a pas mal qui me l'ont redemandée récemment, donc je les redirigerais ici :)) sur mes études. En espérant vous avoir apporté une réponse! Toujours aussi cordialement, AlexMog.
  6. Bonne idée, mais plusieurs choses: - Parle plus rapidement, et avec moins de pauses. - Parler de l'allocation dynamiques et des fonctions est hors sujet. Reste dans le sujet, c'est à dire, les chaines de caractères. - Ton cours ressemble plus à un cours sur les tableaux et les pointeurs, plus que simplement sur les chaines de caractères. - Au lieu de fournir des fonctions qui n'ont pas vraiment de sens pour un débutant, montre comment interagir avec la chaine directement, en rappelant que c'est un tableau ;). - Expliquer ce qu'il se passe au niveau de la mémoire lorsqu'on déclare un tableau, et expliquer pourquoi est-ce que si on prend une chaine de caractères "str", faire "str++" permet d'accéder au caractère suivant. - L'interaction avec les chenes de caractères peut ^etre infinie! A toi de trouver des idées, sans utiliser une fonction de la LibC! Utiliser la LibC n'aidera pas à comprendre, ça permet juste de se dire "oh, donc je peux utiliser ça", mais on ne se pose pas la question du "pourquoi ça ne marche pas?". - Expliquer pourquoi char *test = "test"; contient déjà un \0 et non pas char test[] = "test";. Ensuite, expliquer pourquoi une chaine se termine par 0 (\0 en ascii). Enfin, expliquer pourquoi char tab[6] est modifiable alors que char tab[] = "test" ne l'est pas (une histoire de stack, toussa toussa). Bref, ton cours est trop généraliste, et on entends pas assez parler des chaines de caractères justement. Evite de partir dans du hors sujet avec de l'alloc dynamique, et des fonctions qui jouent à la base avec des bits (et non pas des chaines de caractères (n'oubliez pas que strcpy est une réadaptation de memcpy)). Sinon, un meilleur flow, et un peu plus d'exemples seraient intéressents! Oublie pas de parler de choses avancées, comme l'impact sur la mémoire, etc. Les gens sont là pour apprendre, pas simplement pour voir 2/3 choses. Enfin, have fun. Cdt, Mog.
  7. Question piège ofc. En faite, ça dépends! Si le packet est trop gros, il sera, dans tous les cas, découpés en "Frames" et envoyé en plusieurs fois ;). Le problème n'étant pas vraiment la taille du packet le problème, mais bien entendu la cadence d'envois ;). En TCP, il ne faut pas oublier qu'on est dans un contexte d'envoit->réception->avis de réception. Donc bon, d'une manière générale, il vaut mieux envoyer un packet "package" avec pas mal d'infos, en TCP, plut^ot que plein de petits :). Le mieux étant encore de respecter les framesizes internationales. Mais bon, là on va un peu trop loin :). L'UDP, à contrario, est pensé pour l'envoit de plein de petits packets rapidement (en effet, + le packet est gros, + il a de chances d'^etre perdu). Bref, comme je l'ai dis, le réseau est quelque chose de très complexe, et c'est quand on a des app avec des milliers de connexions qu'on commence à s'en rendre compte! Si vous avez d'autres questions, n'hésitez pas!
  8. En réalité, c'est encore plus complexe que vous ne le pensez ;). Par exemple, en TCP, la perte d'un packet peut engendrer plusieurs centaines (voir milliers) de MS en ping! Tout ça parce que la liste de packets à envoyer en TCP se rallonge ;). Pour résumer, un packet foireux peut engendrer des secondes de délais si il y en a beaucoup à la chaine. l'UDP est plutôt facile à comprendre: on envoit une lettre sans être sur qu'elle soit reçue. Mais bon, très compliqué à gérer niveau code. Il faut vérifier que le packet est bien reçu, et qu'il n'est pas corrompu. Bref, un bordel! Souvent on utilise ce qu'on appelle du "Reliable" en UDP, c'est une implémentation qui permet de "tracker" les packets, tout en gardant la puissance de l'UDP. Comprendre, en interne, le TCP et L'UDP est très important. Le TCP est pré-fait avec des systèmes reliables, mais qui ne sont pas forcémment optimisés. (ils le sont pour leur utilité, mais pour un jeu par exemple, le TCP n'est pas conseillé). L'UDP permet, du fait qu'il ne soit pas "connecté" de créer son propre système reliable, et donc d'implémenter sois même un système plus adapté (un des exemples étant l'UDT, qui allie la rapidité de l'UDP avec la force du TCP (je rappelle que l'UDT est encore en dev!)). Bref, quand on a très peu d'experience dans le domaine, on se dit que c'est facile, mais ayant fait mes études très spécialisées là dedans (MSc Network & Network Security) je peux te confirmer que c'est trèèèès compliqué. Question de passage: d'après vous, il vaut mieux envoyer plusieurs "petits" packets en TCP ou un gros packet TCP? (celui qui réponds correctement, je lui dis bravo!)
  9. Merci pour cet article! Personnellement j'utilise Monitorix depuis quelques temps déjà que je trouve extrêmement complet.
  10. Hey, ça dépendra du langage, et si tu utilises ou non une librairie. Dans tous les cas, faire du network est un challenge, autant que la gestion mémoire, c'est donc souvent une prise de tête, sans parler du débugging en networking qui est... Difficile
  11. Bonjour, Tout dépends de ton EntityFramework. Donnes nous plus d'informations à propos de ça! Sinon, si tu as accès aux DAOs, suffit de créer une requête groupée, voir une jointure si besoin. Cordialement, AlexMog.
  12. Hum, beaucoup de points négatifs dans ton code, on voit que tu es encore débutant à ta façon de coder! Déjà, tout est en Synchrone, c'est pour ça que tu sur-utilise les threads, ce qui, avec ta façon de faire (TROP DE THREADS) n'est pas conseillée, voir même bannie. Pour ce qui est de l'aspect réseau, stocker et envoyer tout le HTML à chaque message est très dangeureux: Out of memory faciles, buffer explodes possibles, la socket ne doit pas être très lourde, sinon ça ralentit tout le bouzin (ce qui explique l'excès de threads), bref, pas très bien tout ça. Pour te donner une idée, si je me connecte avec nc sur ton serveur, et que je le met en background (donc que la socket n'est plus lue), vue qu'on est en TCP et que tu ne gère pas le tout en nonblocking (asynchrone), eh bien ton serveur ne pourra plus envoyer de données ;). De plus, revoir la norme de C# te ferais du bien, par exemple, cette ligne: namespace ServeurWebsocket.Web_Socket {doit être transformée en: namespace ServeurWebsocket { namespace Web_Socket {bref, je vois pas mal de problèmes, la plupart étant simplement due à ton manque d'experience, mais tu en gagnera en pratiquant. Après, pour un premier test en temps que débutant, c'est pas trop mal, tu dois quand même clairement revoir comment fonctionne un serveur/client (en repartant par la base, donc le bas niveau, pas le C#, regarde la théorie avant la pratique dans ce cas, je t'aurai bien conseillé le C, mais avant de se plonger dans le réseau en C, il faut le maitriser un minimum). Bref, dans l'ensemble, une mauvaise gestion de l'aspect objet: certains objets ont plusieurs rôles, ce qui est due à un mauvais découpage des systèmes et méthodes. Les threads sont mal utilisés, et sont trop utilisés dans ce contexte. Apprend à utiliser les socket ASIO qui sont déjà fournies dans les librairies natives de C#. Bref, encore beaucoup à apprendre, et beaucoup à revoir avant d'avoir un projet concluant ;). Cdt, AlexMog.
  13. Merci :). J'ai mis un petit tuto dans le readme du projet ^^ HF.
  14. Bonjour à tous, Dernièrement, j'étudie dans mon université les réseaux neuraux, aussi appelés Neural Networks. Affin de mieux comprendre mes cours, j'ai décidé de faire un projet permettant de visualiser l'évolution d'un cerveau virtuel dans un environnement de survie. Bref, un petit projet, mais très sympathique à regarder! I - Qu'est-ce que le Neural Networks? Je vais faire court et concis, mon but n'étant pas de faire un cours sur les réseaux neuraux ici. Un réseau neural a pour but de virtualiser des réseaux de neurones, et donc, en finalité, un cerveau. Le but, c'est de s'axer sur la biologie neuronale pour l'appliquer à l'informatique. Et, justement, ça tombe bien, puisque les neurones sont très proches des systèmes électroniques! Un neurone est constitué d'entrées (appelées Inputs) dont les valeurs varient entre 0 et 1, et de sorties, qui elles aussi, varient entre 0 et 1. Il existe 3 "couches" de neurones dans chaque NN (Neural Network). Une couche d'entrée (appelée "Input"), une couche de logique (appelée "Hidden Layer") et une couche de sortie (appelée "Output"). Chaque neurones est composé de plusieurs attributs, et c'est ces attributs qui varient pour fournir un nouveau "cerveau". Bref, je n'en parlerais pas ici, google "Neural Networks" devrait répondre à vos questions! Pour leur permettre d'"apprendre", j'utilise un algorithme d'évolution génétique, qui sélectionne les individus les plus aptes à survivre. Bref, un gros bordel. II - Le projet Donc, comme dis plus haut, le projet a pour but de simuler de petites intelligences artificielles. Voici les attributs de ces IA: Elles possèdent 20 entrées (inputs)L'input 0 leur permet d'avoir leur vieLes inputs 1, 2 et 3 leur permet de connaitre leur couleur (r, g, b )Les inputs 3+ sont utilisées pour définit une entité. Ainsi, n correspond au nombre d'entités proches, et l'IA peut voir jusqu'à 4 entités.3 * n est utilisé pour la distance d'une entité par rapport au senseur de l'IA (on reviendra sur le senseur plus tard)3 * n + 1, 3 * n + 2, 3 * n + 3 sont utilisés pour récupérer la couleur de l'entité visualiséeElles possèdent 200 neurones logiques (Hiddent Layer) (pour vous donner une idée, un ver de terre a 302 neurones, et c'est le premier "cerveau complet" que les humains ont réussi à virtualiser sur ordinateur. CF: http://www.artificialbrains.com/openworm )Elles possèdent 7 sorties (Output)L'output 0 et 1 sont utilisés pour définir l'angle d'orientation de l'IAL'output 2 est utilisée pour définir la vitesse de l'IAL'output 3, 4 et 5 sont utilisées pour la couleur de l'IA (r, g, b )L'output 6 est utilisée pour définir les dégâts que fait l'IA aux autres IA (n'est effectif que pour les carnivores)Le jeu possède des règles: Seules les herbivores peuvent voir la nourriture "herbe" (points blancs dans le projet) Les herbivores ne peuvent pas attaquer. Les carnivores peuvent se nourrir de n'importe quelle autre entité. Chaque carnivore peut voir toutes les autres entités, sauf l'herbe. Chaque IA a deux Senseurs qui correspondes aux yeux/antennes. Chaque senseur peut repérer les 2 entités les plus proches. Les IA perdent de la vie tous les ticks, et doivent donc récupérer cette vie en mangeant. Chaque IA a un age maximal, l'age est incrémenté à chaque tick de 1. Chaque IA peut donner naissance à une nouvelle génération, pour ce faire, elle doit avoir un certain age. Pour donner naissance, on utilise un algorithme de cross generation (génétique). On prend un nombre aléatoires de gènes du parent A, et un nombre aléatoire de gènes du parent B. Le parent A est celui qui a l'age de donner naissance, le parent B est le plus vieux parent (l'"élite") qui est encore vivant. Ceci permet d'avoir des IA qui évoluent constamment. Enfin, le but du projet est de voir l'évolution des IA à long terme, c'est pour ça que j'utilise un serveur-client, le serveur tourne 24/24 7/7, et on peut voir l'avancement grâce au client. III - Sources du projet Les sources du projet sont disponibles sur Github à cette adresse: https://github.com/AlexMog/NeuralNetworksClientServer Les sources sont sous licence MIT, dont n'hésitez pas à les utiliser comme bon vous semble, il faut juste laisser le copyright quelque part. Bien sur, le client est pré-configuré pour se connecter au serveur qui est déjà lancé, si vous souhaitez voir l'évolution des IA :). Je complèterais le readme du Github plus tard. Have Fun Cordialement, AlexMog.
  15. Intéressent comme exo, mais pas mal d'erreurs (principalement de norme Oracle) dans ton code, quelques moyens de le rendre plus lisible aussi ^^. Cdt, Mog
×
×
  • Create New...