The NeceMoon | June 2010

Inside Bavardica - Part 2 : Progress and Achievement of the Project

by necemon 26. June 2010 01:32

As we discussed the subjects areas related to Bavardica, we can now go through the steps in the actual achievement of the project.

1. Sending a public message over the TCP network from a Silverlight client 

The model selected for this project is the prototyping model.  Starting first with a throwaway prototype, I could first send simple TCP packets using Silverlight and a console application as a server. It was a very basic chat that let a user, say A send a message to a user B so that no one else with receive the message apart from A and B. The server is a .Net console application and the client is a Silverlight application hosted in an ASP.NET page.



2. First contacts with Silverlight animation

The second program I wrote was a simple Silverlight application with an animated 2d character walking around a park that was actually the background of the web page. This experiment had for sole objective the study of the motion of a character over a 2D scene.

The first key point of this prototype is the way the avatar is animated when a direction key is pressed:

The second key point is that the model used a sprite sheet or frame by frame animation. It consists of sliding horizontally a sequence of adjacent frames with a transparent background, one frame at a time when a directional key is hit.

This approach used KeyAnimationUsingKeyFrames but will be dropped later in the project as it involved no interpolation and that it would have required a lot of time drawing each character in every single position.



3. Making the server lies silently in the background (As a web service)

It was planned to integrate the two prototypes so that users could both chat and move around the 2D scene. It was also planned that the server application lies silently in a web service so that a console application need not to be kept open throughout the operation. Both goals have been reached in the next prototype.

The fact is that I thought about building a more robust server application based on which I would build an evolutionary prototype that will gradually grow with the project. That server had two main requirements:

- It had to get rid of the console application. It should just be a silent process in the background. For this purpose, I just used web services.

- The server had to push data to the clients. That is sending data even when they are not requesting. In the classic HTTP model, first the client makes a request to the server and then only the server can respond. A solution to this issue was to use the WCF (Windows Communication Foundation) Duplex web services; and that’s what I did. That’s an asynchronous two ways communication model.

It’s worth observing how the WCF Duplex web services work


4. Focus on One-to-One Chat

While the public chat happen in a common window, one -to-one chat involves an individual window for each conversation. The organisation of multiple conversations in Bavardica comes down to tabs, using the Silverlight tab.

The Room tab is the one used for public conversations. To start a private conversation, a user just need to click on the name of the person he wants to talk to (There is a list of the available usernames right in the public room).



5. Drawing and animating characters

The next step was the design and animation of 2D avatars. There was already one avatar in the previous prototypes but it is not fun if everyone looks the same in a virtual world. Further, that particular avatar had been borrowed from some other Silverlight developer (Darren Mart). The previous model presented a lot of disadvantages. Besides the fact that a sprite sheet animation doesn’t provide interpolation between frames, that model also involves a lot of drawing. Each individual position should be designed. But the biggest issue in our context is the nonexistence of customisation in that model: one of the first non-negotiable goals in this project was the ability to mix and match clothes and other outfits as well as their colours. This task is quite simple is a 3D world. It is easier to just swap meshes and textures but in a 2D world, it’s a bit tricky to change a part of the outfit, unless we choose to draw a sheet for every conceivable combination of outlook pieces. The solution implemented in Bavardica was rather to create a set of baseline images that would collectively form a character. Therefore I ended up drawing my own characters.

So even if this is mainly a programming project, and not a graphic project, it’s worth mentioning that quite a lot of time and effort goes in drawing and animatingoriginal characters. Customization is also an important feature of a virtual world. Users should be able to choose how they look and how they are dressed. For this project, I chose to draw four basic characters (2 males and 2 females) and at least two costumes and hair styles for each character. Due to the time constraint again, I could not draw and animate more than that. The operation involves fully drawing and painting the bodies then drawing clothing over. Three basic skin colours are available and the users can change the colours of their clothes and hair. Here is a preview of one of the character:

The characters are basically animated to walk, to sit and to stand. The problem with animations is that it had to be done every time from the three angles (front, back, side). There is also an animation to make them look alive even when they are standing idle. Those models used the DoubleAnimationUsingKeyFrames model by opposition to the previous one who used KeyAnimationUsingKeyFrames. Microsoft Expression Blend had been used to process the animations:


There are two main advantages to the animation system that had been used:

-Silverlight’s interpolation makes things silky smooth

-The characters are customisable. They can just shift boots or hair style (or anything else) as the users want.


Unfortunately, handling characters in a virtual world is not only about design. It involves a lot of coding. Let’s start with the creation of a character.

A few array lists are maintained, offering a variety of outfits to the user, as well as shapes and genders

According to the choice of the user, the relevant parts are exposed and the parts that are not relevant are hidden. However, the changes in colour follow another logic.

What happens here is that the source file for each part of the body is fetched from a different directory that changed according to the choice of the user.  Later in the application, when the user can change colours about all the parts of their outfits, the same logic is applied.

This was about the character creation. Once the character is created, details about its outlook are stored in the database as expressed in the database design. From there, every time the user comes online, the server can send all its details to all the other clients. As soon as a client is aware of another user online, he has to represent the relevant character in his scene according to the data that had been submitted:

Setting the other characters details work as in the character creation. It’s mainly about hiding and showing images.

Now that we have seen how the code involved in characters appearance works, we will now attack the code involved in animation and motion. It starts with a key pressed by a user that is handled by Silverlight. In our example, we will consider the right key:



6. The Cybavard

After the character design and animation, an emphasis has been given to the Cybavard, the artificial intelligence part of the project. The logic behind the Cybavard is inspired from the A.L.I.C.E bot introduced earlier in this presentation. What is interesting about A.L.I.C.E is that it was based on an XML dialect called AIML (Artificial Intelligence Markup Language). Due to the universal nature of XML, it can be used with a wide variety of language. The point is that, as this is a .Net project, AIML could also fit to the Cybavards. It was all about finding a C# AIML interpreter. For this project, I used a .net library file, AIMLBot.dll (by Nicholas Toll), released under the GNU General Public License. That program offers a lot of advantages:

Very small size: about 52 k

Very fast: can process 30 000 categories in under one second

Means of saving the bot’s brain as a binary file

A simple and logical API

The inner working of this program is also fairly simple. It’s based on pattern matching: for each sentence entered, it checks in its knowledge base which stimulus response would fit best:

So what I am doing is adding a reference to the binary file from my web service, I also upload the knowledge base on the server. The knowledge based is mainly a set of AIML files that I can edit as per my requirements. I could also add my own AIML files. From the cybavard class, what I had to do was creating a bot object and loading the AIML files.


In the following part, we will go through the design of the characters.

Tags: , , , , , , ,

English | Technical

A travers Bavardica - Partie 2 : Evolution Du Projet

by necemon 26. June 2010 01:15

Maintenant que nous avons discuté les domaines relatifs à Bavardica, nous pouvons entrer dans le vif du sujet, avec les étapes de la réalisation du projet.


1. Envoi d'un message public sur le réseau TCP à partir d'un client Silverlight

Le modèle choisi pour ce projet est le modèle de prototypage. En commençant d'abord avec un prototype jetable, je pouvais d'abord envoyer de simples paquets TCP en utilisant Silverlight pour le client et une application console en tant que serveur. C'était un chat très basique qui permet à un utilisateur, disons A d'envoyer un message à un utilisateur B de telle sorte que personne d'autre ne puisse lire le message en dehors de A et B. Le serveur est une application console .NET et le client est une application Silverlight hébergé dans une page ASP.NET



2. Premiers contacts avec les animations Silverlight

Le second programme que j'ai écrit était une simple application Silverlight avec un personnage animé en 2D marchant autour d'un parc qui était en fait le fond de la page Web. Cette expérience avait pour seul objectif l'étude du mouvement d'un personnage sur une scène 2D.

Le premier point clé de ce prototype est la façon dont l'avatar est animé quand une touche de direction est pressée:

Le deuxième point important est que le modèle utilise des "sprite sheet", c'est à dire, une animation image par image. Il consiste à glisser horizontalement une séquence d'images adjacentes avec un fond transparent, affichant ainsi une image à la fois quand une touche directionnelle est pressée.

Cette approche utilisait des KeyAnimationUsingKeyFrames mais sera abandonnée plus tard dans le projet car elle n'impliquait pas d'interpolation et qu'elle aurait exigé beaucoup de temps à dessiner chaque caractère dans chaque position unique.




3. Placer le serveur silencieusement en arrière-plan (en tant que service web)

Il était prévu d'intégrer les deux prototypes de sorte que les utilisateurs puissent à la fois chatter et se déplacer sur la scène 2D. Il était également prévu que l'application serveur reste silencieusement dans un service Web de sorte que l'application console n'aies pas à rester ouverte pendant toute l'opération. Les deux objectifs ont été atteints dans le prototype suivant.

En fait, j'ai pensé à la construction d'une application serveur plus robuste sur lequel je pourrais construire un prototype de l'évolution qui allait progressivement grandir avec le projet. Ce serveur avait deux exigences principales:

- Il fallait se débarrasser de l'application console. Il faut juste être un processus silencieux dans le fond. Pour ça, j'ai juste utilisé les services Web.

- Le serveur devait "pousser" des données aux clients. C'est l'envoi régulier des données, même quand les clients ne le demandent explicitement chaque fois. Dans le modèle classique HTTP, le client fait d'abord une demande au serveur et ensuite seulement le serveur peut répondre. Une solution à ce problème était d'utiliser les services web Duplex WCF (Windows Communication Foundation), et c'est ce que j'ai fait. C'est un modèle de communication asynchrone à deux directions.

C'est intéressant d'observer comment les services Web duplex WCF fonctionnent.


4. Gros plan sur le chat privé

Alors que le chat public se produit dans une fenêtre commune, le chat en "face à face" implique une fenêtre pour chaque conversation. L'organisation de plusieurs conversations dans Bavardica revient à utiliser des onglets, c'est à dire le contrôle Silverlight TabControl.

L'onglet RoomTab est celui utilisé pour les conversations publiquesPour démarrer une conversation privée, l'utilisateur doit juste cliquer sur le nom de la personne à laquelle il veut parler (Il y a une liste de noms d'utilisateurs disponible dans la salle publique)



5. Dessiner et animer les personnages

L'étape suivante fut la conception et l'animation d'avatars 2D. Il y avait déjà un avatar dans les prototypes précédents, mais ce n'est pas amusant si tout le monde a la même apparence dans un monde virtuel. De plus, cet avatar là avait été emprunté à un autre développeur Silverlight (Darren Mart). Et le modèle précédent a présenté beaucoup d'inconvénients. Outre le fait que d'une animation Sprite Sheet ne fournit pas d'interpolation entre les images, ce modèle implique aussi beaucoup de dessins. Chaque position individuelle devait être conçue manuellement. Mais le plus gros problème dans notre contexte est l'inexistence de personnalisation de ce modèle: l'un des premiers objectifs non-négociable de ce projet était la possibilité de mélanger et d'assortir des vêtements et des tenues d'autres ainsi que leurs couleurs. Cette tâche est assez simple dans un monde 3D, car il est facile de changer de mailles et de textures; mais dans un monde en 2D, c'est un peu délicat de changer une partie de l'équipement, sauf si nous choisissons de redessiner le personnage pour chaque combinaison imaginable de vêtements. La solution mise en oeuvre dans Bavardica a été plutôt de créer un ensemble d'images de référence qui, collectivement, forment un caractère. Donc j'ai fini par dessiner mes propres personnages.

Alors, même si ceci est principalement un projet de programmation, et non un projet graphique, il est utile de mentionner que beaucoup de temps et d'efforts ont été investis dans l'élaboration et l'animation des personnages originaux. La personnalisation est également une caractéristique importante d'un monde virtuel. Les utilisateurs devraient être en mesure de choisir à quoi ils ressemblent et comment ils sont habillés. Pour ce projet, j'ai choisi de tirer quatre personnages de base (2 garçons et 2 filles) et au moins deux costumes et deux coiffures pour chaque personnage. En raison de la contrainte de temps encore, je ne pouvais pas dessiner et animer plus que cela. L'opération implique de dessiner et colorier les corps, puis dessiner des vêtements par dessus ces corps. Trois couleurs de peau de base sont disponibles et les utilisateurs peuvent modifier les couleurs de leurs vêtements et les cheveux. Voici un aperçu de l'un des personnages:

Les personnages sont animés essentiellement de manière à pouvoir marcher, s'asseoir et se tenir debout. Le problème avec les animations, c'est qu'il fallait le faire à chaque fois sous les trois angles (avant, arrière, latéral). Il y a aussi des animations pour leur donner l'air vivant, même quand ils sont debout, au repos. Ces modèles ont utilisé le modèle de  DoubleAnimationUsingKeyFrames par opposition à la précédente qui a utilisé des KeyAnimationUsingKeyFrames. Microsoft Expression Blend a été utilisé pour traiter les animations.


Il y a deux principaux avantages pour le système d'animation qui a été utilisé:

- l'interpolation Silverlight rend les choses soyeuses

- Les personnages sont personnalisables. Ils peuvent simplement changer de bottes ou de style de cheveux (ou autre) à la guise des utilisateurs.


Malheureusement (ou heureusement), la manipulation des personnages dans un monde virtuel n'est pas seulement sur le design. Elle implique beaucoup de codage. Commençons par la création d'un personnage.

Quelques "Arrays" sont maintenus, en offrant une variété de tenues à l'utilisateur, ainsi que les formes et les genres:

Selon le choix de l'utilisateur, les éléments requis sont exposés et les pièces qui ne sont pas requises sont masquées. Cependant, les changements de couleur suivent une autre logique.

Ce qui se passe ici est que le fichier source pour chaque partie du corps est récupéré à partir d'un répertoire différent qui change en fonction du choix de l'utilisateur. Dans l'application, lorsque l'utilisateur peut changer les couleurs de toutes les parties de leur costume, la même logique est appliquée.

C'est à peu près tout pour ce qui est de la création du personnage. Une fois que le personnage est créé, des détails sur son apparence sont stockés dans la base de données. A partir de là, chaque fois que l'utilisateur est en ligne, le serveur peut envoyer tous ses détails à l'ensemble des autres clients. Dès qu'un client réalise la présence d'un autre utilisateur en ligne, il peut représenter ledit personnage dans sa scène en fonction des données qui avaient été soumis:

Le réglage les détails des autres personnages fonctionne comme dans la création du personnage. C'est surtout une question de cacher et montrer des images au bon moment.

Maintenant que nous avons vu comment le code relatif à l'apparence des personnages fonctionne, nous allons maintenant attaquer le code utilisé dans l'animation et les mouvements. Tout part d'une touche pressée par un utilisateur, un évènement géré par Silverlight. Dans notre exemple, nous allons considérer la touche droite: 



6. Le Cybavard

Après la conception et l'animation des personnages, l'accent a été mis sur le Cybavard (Cyber Bavard), la partie "intelligence artificielle" du projet. La logique derrière le Cybavard est inspirée du bot ALICE présenté plus tôt dans cette présentation. Ce qui est intéressant à propos de ALICE est qu'il était basé sur un dialecte XML appelé AIML (Artificial Intelligence Markup Language). En raison de la nature universelle de XML, il peut être utilisé avec une grande variété de langues. Le point est que, comme il s'agit d'un projet .NET, le AIML pourrait également s'adapter aux Cybavards. Il s'agissait juste de trouver un interpréteur AIML C#. Pour ce projet, j'ai utilisé une librairie .NET, AIMLBot.dll (par Toll-Nicolas), publié sous la licence publique générale GNU. Ce programme offre beaucoup d'avantages:

- Très petite taille: environ 52 kilo-octets

- Très rapide: peut traiter 30 000 catégories en moins d'une seconde

- Moyens de sauver le cerveau du bot dans un fichier binaire

- Une API simple et logique

Le fonctionnement interne de ce programme est également assez simple. Il est basé sur du filtrage: pour chaque phrase entrée, il vérifie dans sa base de connaissances quelle réponse cadrerait mieux:

Donc ce que je fais est d'ajouter une référence au fichier binaire de mon service web, j'ai aussi télécharger la base de connaissances sur le serveur. La base de connaissances est principalement un ensemble de fichiers AIML que je peux modifier selon mes besoins. Je pourrais aussi ajouter mes propres fichiers AIML. De la classe Cybavard, ce que j'avais à faire était de créer un objet bot et le chargement des fichiers AIML.

Dans la partie suivante, nous allons revisiter la conception graphique des personnages.

Tags: , , , , , ,

Francais | Technical

A travers Bavardica - Partie 1 : Discussion des sujets impliqués

by necemon 12. June 2010 23:52

Un système de messagerie instantanée moderne est composé de différentes caractéristiques telles que les conversations publiques, les conversations privées, les images de profils des utilisateurs et leurs signatures. Quand il est temps d'innover et de faire une messagerie instantanée qui est si spéciale qu'elle est à la fois intéressante et différente des programmes déjà disponibles sur le marché, il n'est pas très évident de déduire quelles fonctionnalités supplémentaires pourraient être jointes. On a littéralement l'impression que tout a déjà été pensé et mis en œuvre dans une des applications existantes.


Toutefois, Bavardica est ma tentative de faire une plateforme de communication pas comme les autres. Bavardica (dérivé de Bavardage) se distingue par deux avantages par rapport aux messageries instantanées conventionnelles. Premièrement, il y a la présence permanente d'êtres artificiels qui interagissent avec d'autres utilisateurs. Ensuite, l'application repose sur un espace à deux dimensions qui représentent un petit monde dans lequel les utilisateurs sont des habitants représentés par des personnages animés. Ce projet est une bonne chance de planter le décor de ce que pourrait devenir un monde virtuel original.


Plusieurs formes de divertissements web sont impliquées dans le projet Bavardica. Dans sa forme initiale, Bavardica était essentiellement une application de chat, mais comme elle est en pleine évolution, Bavardica s'inscrit également dans les domaines suivants.


- Intelligence Artificielle

Comme me l'a enseigné le Dr Phil Grant, l'objectif principal de l'IA (Intelligence Artificielle) est d'essayer de rendre les ordinateurs capables d'effectuer des tâches ou les humains ont tendance à être bon. L'expression "Artificial Intelligence" a été inventée par John McCarthy dans les années 60. Il ya beaucoup de sujets qui pourraient aujourd'hui être considérés comme faisant partie du thème général de l'Intelligence Artificielle. Mais pour notre occurrence actuelle, nous ne considérons que les thèmes de la compréhension du langage naturel et la représentation des connaissances.

Maintenant, qu'est-ce que cela signifie pour une machine d'être intelligent? Alan Turing réfléchit à ce problème dans les années 50 et a élaboré le test suivant: Un humain poserait des questions à la fois à un ordinateur et à un homme situés dans d'autres salles; si l'interrogateur n'est pas capable de déduire (d'après les réponses) qui est la machine, alors on dit que l'ordinateur se comporte d'une manière intelligente. Une des premières tentatives de construire un programme qui passerait le test de Turing a été le programme ELIZA (par Joseph Weizenbaum). ELIZA mimait une conversation avec un psychologue et était assez impressionnant à première vue. Cependant, il manquait de bon sens et de compréhension réelle du langage naturel (qui sont tous deux très difficiles à acquérir d'un point de vue mécanique). Néanmoins, de nombreux programmes de ce genre ont suivi. Ils étaient basés sur des astuces comme:

            -> La répétition exacte des déclarations de l'utilisateur (avec bien sûr des ajustements pronominaux). Par exemple, si l'utilisateur disait : "j'ai eu beaucoup de chance cette semaine", l'ordinateur pourrait répondre quelque chose comme : "vous avez eu beaucoup de chance cette semaine ?"

            ->  Précéder la déclaration répétée avec des introductions. Pour reprendre l'exemple précédent, l'ordinateur pourrait répondre "Qu'est ce qui vous fait dire que vous avez eu beaucoup de chance cette semaine ?" ou alors "Pourquoi avez vous besoin de me dire que vous avez eu beaucoup de chance cette semaine ?"

           ->  Demander "Pourquoi demandez-vous cela", ce qui a pour effet de changer le thème ou le niveau de la conversation.


Plus tard, Colby et Al ont écrit un programme appelé PARRY basé sur des idées de ELIZA, qui avait des propriétés plus complexes comme des éléments d'émotion et une meilleure connaissance de la grammaire. Il était destiné à imiter un patient paranoïaque qui croyait qu'il était persécuté. Dans une expérience réelle, 33 psychiatres ont été invités à évaluer le degré de paranoïa des patients qui communiquaient à travers des transcriptions dactylographiées. Trois d'entre eux étaient des patients humains et deux générés par Parry. Aucun des psychiatres n'a déclaré qu'il pensait qu'il y avait quelque chose d'inhabituel. Plus tard, les psychiatres ont été informés que certaines des transcriptions avaient été générées par la machine, mais ils étaient, dans l'ensemble, incapables de reconnaître ceux qui étaient de Parry. Bien sûr, toute cette situation est un peu bizarre de toute façon, vu que les paranoïaques humains se comportent généralement de façon étrange. Ce qu'il faut retenir ici, c'est qu'il peut être difficile de différencier un discours humain de celui d'une machine (Phil Grant).


Par ailleurs, avec le temps, les systèmes d'IA sont de plus en plus avancées, en fait, plus intelligents. Actuellement, l'un des plus importants programmes de ce type est ALICE (Artificial Linguistique Internet Computer Entity) de Richard Wallace. Selon Wikipédia, c'est un programme inspiré de ELIZA qui s'engage dans une conversation avec un être humain en appliquant certaines règles de correspondances heuristiques. Le programme utilise un schéma XML appelé AIML (Artificial Intelligence Markup Language). J'utilise un modèle semblable pour la mise en œuvre de la fonction AI dans ce projet.


- Mondes Virtuels

Un monde virtuel peut être défini comme une réalité synthétique, un environnement qui est totalement généré par un système informatique et qui est complètement transportif, dans le sens ou le participant contrôle un avatar immergé dans un monde artificiel (Armitage, Claypool et Branch, 2006). Les mondes virtuels sont destinés à des utilisateurs qui peuvent l'habiter et y interagir. Parfois, l'utilisateur peut également manipuler des éléments dans le monde en question et donc faire l'expérience d'une sorte de téléprésence. Comme le taux de personnes utilisant des mondes virtuels est en augmentation de 15% chaque mois et comme il y a près de 600 millions de personnes dans le monde entier enregistrés dans le monde virtuel d'aujourd'hui (selon K Zéro, un service de consultance en monde virtuel), je me suis dit que ce serait une bonne idée d'en apprendre davantage sur cette tendance et de m'y essayer. Dans sa forme actuelle, Bavardica est un monde virtuel dans le sens ou chaque bavard (avatar) peut voir et échanger avec les autres bavards sur la scène.


- Multimedia

Dans un navigateur Web, des opérations comme le calendrier, le streaming, la manipulation de pistes de musique, etc. ne sont pas du tout trivial en utilisant simplement du HTML et du JavaScript. Un grand avantage d'un plugin comme Silverlight, c'est qu'il donne beaucoup plus de facilité pour les opérations sur les fichiers multimédia. Le livre "Accelerated Silverlight 3" a été vraiment utile pour comprendre la classe System.Windows.Controls.MediaElement, qui fournit des capacités de lecture des médias. Ce contrôle peut gérer à la fois audio et vidéo dans une variété de formats tels que MP3, WMV, ASX, etc. Il y a même un support pour les codecs tiers et les nouvelles formes de médias tels que H.264, Advanced Audio Coding et mp4. Par ailleurs, le MediaElement de Silverlight contient beaucoup de propriétés, méthodes et événements qui permettent un large contrôle sur les médias. Certaines de ces propriétés sont AutoPlay, CurrentState, CanSeek, IsMuted, Position, NaturalDuration,NaturalVideoHeight et Volume. Les méthodes du contrôle MediaElement comprennent Pause, Lecture, SetSource et Stop. Certains de ces événements sontCurrentStateChanged, MediaEnded, MediaOpened, MediaFailed, ce dernier permettant une meilleure gestion des erreurs dans le cas où les médias ne peuvent pas être trouvés ou quand le format est incorrect.

Ce contrôle nous permet d'apporter une âme symphonique à ce projet. Ainsi, un autre aspect du projet est le streaming audio, qui est maintenant dans sa forme la plus basique avec des fichiers MP3 en musique de fond pendant la conversation. Il y a aussi des effets sonores qui servent d'alertes informant qu'un nouvel utilisateur vient de se connecter ou que quelqu'un vient de laisser un nouveau message.


Nous allons maintenant procéder à une explication de la manière dont l'application a été construite.

Tags: , , , , ,

Arts/Fun | Francais | Technical

Inside Bavardica - Part 1 : Discussion of the subject areas

by necemon 12. June 2010 01:28


A modern instant messenger is composed of various features which include public conversations, private conversations, user picture and signature. When it’s time to innovate and make an instant messenger that is so special that it is both interesting and standing apart from whatever program already available on the market, it is not too obvious to figure out what extra features could be attached. It feels like almost everything had been already thought of and implemented in some other application.


However, Bavardica is my attempt to make a communication platform like no other. Bavardica, derived from Bavardage, which actually means talking in French, has got mostly two assets over regular instant messengers. Firstly, there is the permanent presence of artificial beings that interact with other users. Secondly, the application relies on a two-dimensional lspace which represents a small world in which the users are inhabitants represented by animated characters. This project is a good chance to set the scene of what could become an innovative virtual world.


Many areas of web entertainments are involved in the Bavardica Project. In its initial form, Bavardica was basically a chat application, but as it is evolving, Bavardica also fits in the following fields.

Artificial Intelligence

As taught to me by Dr Phil Grant, the main objective of AI (Artificial Intelligence) is to try to make computers perform tasks that humans tend to be good at. The actual name “Artificial Intelligence” was coined by John McCarthy in the 60’s. There are a lot of topics which might nowadays be considered as part of the general subject of Artificial Intelligence. But for our current purpose, we shall only consider the themes of natural language understanding and representation of knowledge.

Now, what does it mean for a machine to be intelligent? Alan Turing thought about this problem in the 50’s and came up with the following test: A human would ask questions to both a computer and a human in some other rooms; if the interrogator is not able to figure out (from the answers) which is the machine then the computer is said to behave in an intelligent manner. A very early attempt to build a program which would pass the Turing test was the ELIZA program (by Joseph Weizenbaum). ELIZA was mimicking a conversation with a psychologist and was quite impressive at first glance. However, it was missing a common sense and an actual understanding of natural language (which are both pretty hard to acquire from a computer point of view). Nevertheless, many programs of this kind followed. They were based on tricks like:

o The repetition of user’s statements verbatim (subject to pronominal adjustments)

o  Preceding the repeated statement with the introductory “Why do you need to tell me”

o  Asking “Why do you ask that”, which, in effect, change the topic or the level of the conversation.

Later on, Colby and Al wrote a program called PARRY based on ideas in ELIZA which had more complex properties like elements of emotion and more knowledge of grammar. It was intended to mimic a paranoid patient who believed he was being persecuted. In a real experiment, 33 psychiatrists were asked to rate the degree of paranoia of patients who were communicating through typed transcripts. Three of them were from human patients and two generated by PARRY. None stated that they thought there was anything unusual. Later the psychiatrists were told that some of the transcripts were machine generated, but they were, on the whole, unable to recognise which ones were from PARRY. Of course this whole situation is a bit odd anyway, as human paranoids behave in strange ways. The point here is that it may be difficult to differentiate a human talk from a machine talk (Phil Grant).


Moreover, throughout the time, AI systems are becoming more and more advanced, in fact, more intelligent. Currently, one of the strongest programs of this type is ALICE (Artificial Linguistic Internet Computer Entity) by Richard Wallace. According to Wikipedia, that’s a program inspired from ELIZA that engages in a conversation with a human by applying some heuristical pattern matching rules to the human’s input. The program uses an XML schema called AIML (Artificial Intelligence Markup Language). I use a similar model for implementing the AI feature in this project.


          Virtual worlds:

A virtual world can be defined as a synthetic reality, an environment that is completely generated by a computer system and that is completely transportive in that the participant controls an avatar immersed in an artificial world, according to the book Networking and Online Games (Armitage, Claypool and Branch, 2006). It says that virtual worlds are intended for his users to inhabit and interact. Sometimes, the user can also manipulate elements in the said world and therefore experience a kind of telepresence. As the rate of people using virtual worlds is increasing by 15% every month and as there are nearly 600 million people worldwide registered in virtual world today (according to K Zero, a virtual word consultancy service), I felt that it would be a good plan to learn about this trend and give it a try. In its current form, Bavardica is a virtual world in the sense that each bavard (avatar) is aware of the other bavards and of the scene boundary.



  In a web browser, operations like timing, streaming, playing music forth and back, playing a list of music files etc. are not at all trivial using basic html and javascript. One big advantage of a browser plugin like Silverlight is that it gives much more ease about operations on media files. The book 'Accelerated Silverlight 3' had been really valuable by teaching me how the System.Windows.Controls.MediaElement control provides media playback capability. That control can handle both audio and video in a variety of formats like mp3, wmv, asx, etc. There is even a support for third-party codecs and for new media formats such as H.264, Advanced Audio Coding and mp4. Furthermore, the media element in Silverlight has a lot of properties, methods and events that allows a lot of control over the media. Some of the properties are AutoPlay, CurrentState, CanSeek, IsMuted, Position, NaturalDuration, NaturalVideoHeight and Volume. The methods of the MediaElement control include Pause, Play, SetSource and Stop. Some of the events are CurrentStateChanged, MediaEnded, MediaOpened, MediaFailed, the later allowing some more error handling in case the media cannot be found or in the case the format is incorrect.

This control allows us to bring a symphonic soul to this project. So another aspect of the Bavardica project is the audio streaming, that is now in its most basic form with an mp3 music file playing in the background during the conversation. There are also sound effects that serve as alerts informing that a new user just logged in or that someone just left a new message.


We will now proceed and describe how the application has been build.

Tags: , , , , , , ,

English | Technical


I am Necemon Yai. I am a Software Engineer and a Digital Artist. Let's keep in touch via Twitter, LinkedIn or Facebook.

Je suis Necemon Yai. Je suis un Ingénieur en Informatique et un Artiste Numérique. Restons en contact via Twitter, LinkedIn ou Facebook.