The NeceMoon | June 2012

Furtivue (Ou Comment Envoyer Des Messages Furtifs Comme Des Ninjas)

by necemon 23. June 2012 23:42

Furtivue : une vue furtive sur vos messages. (www.furtivue.com)

Furtivue est un service web qui vous permet d'envoyer des messages temporaires, autodestructibles. C'est a dire que vous pouvez contrôler combien de temps vos messages restent chez le destinataire.

Quand le destinataire ouvre votre message Furtivue, il apparaît pour un nombre spécifié de secondes, puis s'auto-détruit. La durée dependra de la longueur du message (Ou vous pouvez choisir combien de temps vous voulez que le message reste affiché).

Comment cela fonctionne:

l'utilisateur A écrit un message à l'utilisateur B, un lien est envoyé à B. Lorsque B clique sur le lien, ce lien est désactivé (ne peut donc pas être re-utilisé), le message est affiché à partir d'un tableau Silverlight et disparait après que le temps prédéfini soit terminé.

But:

Cela pourrait être utilisé pour l'envoi d'informations confidentielles / secrètes (telles que les mots de passe), ou toute autre donnée que vous ne voulez pas que le récepteur garde dans sa boîte e-mail : pour une raison quelconque, vous voudriez peut-être vous exprimer sans laisser une trace permanente.

Et maintenant...

Vous pouvez l'essayer ici ou alors telecharger/explorer le code source a partir d'ici.

 

Source image: allpstrophies.com

Tags: , , ,

Francais | Prototype | Technical

Furtivue (Or How To Send Furtive Messages Like A Ninja)

by necemon 23. June 2012 20:00

 

Furtivue : a furtive view over your messages. (www.furtivue.com)

Furtivue is a web service that allows you to send temporary (self-destructing) emails, as in, you can control how long the message is going to stay with the recipient.

When they open your Furtivue message, it appears for a specified number of seconds, then self-destroys. The duration will depends upon the length of the message (Or you can choose how long you want the message to be displayed).

how it works :

User A writes a message to user B, a link is sent to B. When B clicks on the link, the link is de-activated (therefore can't be used there after), the message is shown from a Silverlight canvas and disappear after the predefined time is over.

Purpose :

This could be used for sending confidential/secret information (such as passwords), or any other data you don't want the receiver to keep permanently in their e-mail box : for some reason, you may want to express yourself without leaving a permanent record.

Now what ?

You can try it here or download/explore the source code from here.

 

Image source: allpstrophies.com

 

 

Tags: , , ,

English | Prototype | Technical

Business at the speed of game production : OpenGL or XNA ?

by necemon 18. June 2012 18:06

A common start ups question in the gaming industry is :  Which graphical environment should we use ? As time is money, a crucial factor in a choice is time: not only the time it takes to build complete games with each API but also a fluid timing during the gaming experience to make it enjoyable. In this analysis, we compare the OpenGL industry standard to the Microsoft XNA game framework on the speed factor. The study includes learning curve, programming, modeling and rendering speeds on both sides.

Download the report here

 

(image credit: arstechnica.com)

Tags: , , ,

English | Technical

Phidgets : Premiers Pas En Robotique ?

by necemon 13. June 2012 21:33

 

Les phidgets sont des blocs de construction, des composants électroniques pas cher que vous pouvez contrôler à partir de votre ordinateur personnel via un port USB. Ils vous donnent quelques méthodes supplémentaires d'entrée/sortie de données au-delà de la combinaison classique souris + clavier + écran.

Comme Harold Thimbleby l'a mentionné dans son livre Press On, les phidgets sont un moyen très pratique de débuter dans la programmation hardware, au cas ou on veut construire des systèmes réels, et non pas des simulations Web ou sur écran: les phidgets sont appelés ainsi parce qu'ils sont l'équivalent physique des widgets de l'écran (gadgets Windows).
Phidgets = Physique + de Widgets
(Widgets = Windows + de Gadgets)

Où les trouver?

il ya différents distributeurs officiels phidgets répartis à travers le monde. Par exemple, pour ceux qui habitent en France, vous pouvez consulter le site de RoboShop Europe.

Commencer la manipulation/programmation de phidgets

Toute la complexité USB est gérée derrière l'API (Application Programming Interface). Les applications peuvent être développées rapidement par les programmeurs en utilisant leur langage préféré: C / C + +, C#, cacao, Delphi, Flash AS3, Flex AS3, Java, LabVIEW, MATLAB, Max / MSP, MRS, Python, REALBasic, Visual Basic.NET, Visual Basic 6.0, Visual Basic pour Applications, script Visual Basic, Visual C / C + + / Borland.NET, etc (Si vous savez pas programmer, vous pouvez cependant utiliser un logiciel tel que Microsoft Robotics Studio ou même Microsoft Excel). Tout ce dont vous avez besoin, ce sont les pilotes que vous pouvez obtenir en téléchargeant l'installateur adequat. De même, vous pouvez accéder aux différents manuels, aux échantillons et à l'API à partir d'ici.

Par exemple, en tant que développeur C #, il suffit de télécharger les ressources suivantes et vous êtes prêt à démarrer:
1. Guide de démarrage
2. le Windows Installer (32-bit)
3. Exemple de code

Un exemple pratique

Permettez-moi de vous présenter le Quick-&-Dirty-Pad (le temps que je pense à un meilleur nom), un «contrôleur de jeu" que j'ai construit avec mon partenaire Daniel Williams, alors que nous étions à l'Université, classe de technologies de l'interaction menée par le Docteur Parisa Eslambolchilar.

Oui je sais, ce n'est pas terrible, mais il faut bien commencer quelque part...

Nous l'avons utilisé principalement pour aller de pair avec un jeu de simulation de vol que nous avions programmé. Nous avons utilisé des capteurs de force pour le tir, un joystick pour l'orientation, des étiquettes RFID pour l'authentification d'utilisateur et un capteur de rotation pour réguler la vitesse du jeu. Les événements du jeu transparaissent  à travers un écran LCD et quelques indicateurs LED.

(Merci d'avoir lu jusqu'ici. Le reste est pour les nerds seulement. C'est la partie où nous discutons brièvement les principaux détails techniques.)

Le jeu lui-même a été écrit en C#. Il est inspiré d'un tutoriel XNA de Riemers. Les éléments clés du code incluent le système de navigation:

if (keys.IsKeyDown(Keys.Right))

                leftRightRot += turningSpeed;

            if (keys.IsKeyDown(Keys.Left))

                leftRightRot -= turningSpeed;

            float upDownRot = 0;

            if (keys.IsKeyDown(Keys.Down))

                upDownRot += turningSpeed;

            if (keys.IsKeyDown(Keys.Up))

                upDownRot -= turningSpeed;

L'avion se déplace continuellement vers l'avant et le code ci-dessus est utilisé pour contrôler les mouvements de rotation. Un de nos défis a été d'intégrer le code Phidget pour le joystick dans cette partie du projet de telle sorte que le joystick se comporte comme les touches directionelles.

Tout d'abord, nous avons créé un nouveau input wrapper, la classe qui contient le gestionnaire de capteurs pour détecter tout changement dans le mouvement de la manette. La classe input wrapper implémente l'objet interface kit qui détecte les entrées de données

InputWrapper iw = new InputWrapper();

ifKit.SensorChange += new SensorChangeEventHandler(ifKit_SensorChange);

La première section du code suivant contrôle l'axe X de la manette de commande. Les valeurs de sortie de la manette sont comprises entre 0 et 999, donc pour toute valeur supérieure à 500 le plan serait tourné  vers la droite et toute valeur inférieure à 500 le plan serait tourné vers la gauche. La deuxième partie du code est utilisé pour contrôler l'axe Y sur la manette de commande. Cette fois-ci une valeur supérieure à 500 tournerait le plan de sorte qu'il s'oriente vers le haut tandis que toute valeur inférieure à 500 ferait tourner le plan de sorte qu'il s'oriente vers le bas.

if(iw.XJoystick>550)

                leftRightRot = (iw.XJoystick-500)/10000;

            if (iw.XJoystick < 450)

                leftRightRot = (iw.XJoystick-500)/ 10000;

if (iw.YJoystick > 550)

                upDownRot = (iw.YJoystick - 500)/10000;

            if (iw.YJoystick < 450)

                upDownRot = (iw.YJoystick - 500) / 10000;

L'écran LCD a été utilisé pour afficher le nom du joueur et son score. L'utilisateur doit scanner sa carte RFID pour démarrer le jeu. Nous avons écrit des wrappers LCD et RFID qui contiennent les différents gestionnaires d'événements. La classe RFID détecte si un tag est présent, sinon un message s'affiche sur l'écran LCD demandant à l'utilisateur de placer son tag

TextLCDWrapper tlw = new TextLCDWrapper();

       RFIDWrapper rw = new RFIDWrapper();

while (rw.tag == null || rw.tag.Length < 2)

            {

                tlw.JustTyped("Tag, Please!");

            }

Lorsque l'utilisateur scanne leur étiquette, le capteur RFID permet de détecter si l'utilisateur est enregistré, et afficher le message correspondant sur ​​l'écran LCD

private void DrawText()

        {

           if(rw.tag != null && rw.tag.EndsWith("cb"))

            {

                tlw.JustTyped("Necemon : " + score);

                spriteBatch.DrawString(font,"Necemon - score:" + score, newVector2(20, 45), Color.White);

            }

            else if (rw.tag != null && rw.tag.EndsWith("8a"))

            {

                tlw.JustTyped("Daniel : " + score);

                spriteBatch.DrawString(font,"Daniel - score:" + score, newVector2(20, 45), Color.White);

            }

            else if (rw.tag != null)

            {

                spriteBatch.DrawString(font, rw.tag + " - score:" + score, newVector2(20, 45), Color.White);

                tlw.JustTyped("Unknown : " + score);

            }

        }

Le détecteur de rotation est utilisé pour contrôler la vitesse de l'avion. Les valeurs du capteur de rotation sont obtenues par la classe input wrapper, comme mentionné précédemment dans la description de la manette. Plus vous tournez le capteur, plus la vitesse augmente

gameSpeed = iw.RotationValue/100;

Le code suivant crée une nouvelle balle à chaque fois que la barre d'espace est enfoncée à condition que la balle précédente ait été tirée au moins 100 millisecondes plus tot.

 

if (keys.IsKeyDown(Keys.Space))

            {

            double currentTime = gameTime.TotalGameTime.TotalMilliseconds;

                if (currentTime - lastBulletTime > 100)

                {

                    Bullet newBullet = new Bullet();

                    newBullet.position = xwingPosition;

                    newBullet.rotation = xwingRotation;

                    bulletList.Add(newBullet);

                    lastBulletTime = currentTime;

                }

            }

Notre tâche consistait à mettre en œuvre quatre capteurs pour contrôler les balles étant tirées de l'avion. Les valeurs du capteur de force sont également obtenue via la classe input wrapper. Le code suivant crée maintenant une nouvelle balle de type 3 à chaque fois que les capteurs de force sont pressés

if (keys.IsKeyDown(Keys.C) || iw.Force3 > 25)

            {

                //make the lights blink

                iw.ifKit.outputs[0] = (!iw.ifKit.outputs[0]);

                iw.ifKit.outputs[1] = (!iw.ifKit.outputs[1]);

                iw.ifKit.outputs[2] = (!iw.ifKit.outputs[2]);

                iw.ifKit.outputs[3] = (!iw.ifKit.outputs[3]);

                double currentTime = gameTime.TotalGameTime.TotalMilliseconds;

                //within a certain frequency

                if (currentTime - lastBulletTime > 300)

                {

                    //Create the bullet and add it to the bulletlist

                    Bullet newBullet = new Bullet();

                    newBullet.position = xwingPosition;

                    newBullet.rotation = xwingRotation;

                    bulletList3.Add(newBullet);

                    //play a sound

                    soundEffect1.Play();

                    lastBulletTime = currentTime;

                }

            }

(source image robotique: geminiedu.in)

Tags: , , , ,

Francais | Prototype | Technical

Phidgets : First Steps In Robotics ?

by necemon 12. June 2012 21:55

 

Phidgets are a set of "plug and play" building blocks, some low-cost electronic components that you can control from your personal computer via USB. They provide you with some extra input/output methods beyond the classic mouse + keyboard + screen. 

As Harold Thimbleby mentioned in his book Press On, phidgets are a very nice way to get into hardware programming, as you may want to build real systems, not on screen or web browser simulations : phidgets are so-called because they are the physical equivalent of on-screen widgets (Windows Gadgets). 

Phidgets = Physical + Widgets
(Widgets =  Windows + Gadgets)

Where to find them ?
there are various official phidgets dealers spread across the world. For example, if you live in the UK, you can check out ww.active-robots.com.

Getting started
All the USB complexity is managed behind the Phidget API (Application Programming Interface). Applications can be developed quickly by programmers using their favorite language: C/C++, C#, Cocoa, Delphi, Flash AS3, Flex AS3, Java, LabVIEW, MATLAB, Max/MSP, MRS, Python, REALBasic, Visual Basic.NET, Visual Basic 6.0, Visual Basic for Applications, Visual Basic Script, Visual C/C++/Borland.NET, etc (If you can't code you can also use software such as Microsoft Robotics Studio or even Microsoft Excel).
All you need is the drivers that you can get by downloading the relevant installer. Similarly, you can access the various manuals, the samples and the API sorted by language from here 

For example, as a C# developer, just download those and you are ready to go:
2. Windows Installer (32-bit) 

A practical example
Allow me to introduce the Quick-&-Dirty-Pad (while I think of a better name), a "game controller" I built with my partner Daniel Williams, while we were back at University during the Interaction Technologies classes led by Dr Parisa Eslambolchilar

Yes I know, it looks horrible but hey, everyone needs to start somewhere...

We used it primarily to go along with a flight simulation game we programmed, we used force sensors for shooting, a joystick for direction, RFID tags for user authentication and a rotation sensor to regulate the game speed. The game events where reflected through a LCD screen and a few LED indicators. 

(Thanks for reading so far. The rest is for the nerds only. This is the part where we briefly discuss the key technical details.)

The game itself was written in C#. It was inspired from a Riemers XNA tutorial. The key parts of the code include the navigation system:

if (keys.IsKeyDown(Keys.Right))

                leftRightRot += turningSpeed;

            if (keys.IsKeyDown(Keys.Left))

                leftRightRot -= turningSpeed;

            float upDownRot = 0;

            if (keys.IsKeyDown(Keys.Down))

                upDownRot += turningSpeed;

            if (keys.IsKeyDown(Keys.Up))

                upDownRot -= turningSpeed;

The aircraft keeps moving forward automatically and the above code is used to control the rotational movements. One of our challenges was to incorporate the phidget code for the joystick into this part of the code such that the joystick behaves as arrow keys. 

First of all we created a new input wrapper which is the class that contains the sensor change handler to detect any changes in the movement of the joystick. The input wrapper class implements the interface kit object which detects any input from any phidget 

InputWrapper iw = new InputWrapper();

ifKit.SensorChange += new SensorChangeEventHandler(ifKit_SensorChange);

The first section of the next code controls the x axis of the joystick. The output values of the joystick are between 0 and 999, so for any value greater than 500 the plane would rotate to the right and any value less than 500 the plane would rotate to the left. The second part of the code is used to control the Y axis of the joystick. This time any value greater than 500 would rotate the plane so it's facing upwards while any value less than 500 will rotate the plane so it's facing downwards. 

if(iw.XJoystick>550)

                leftRightRot = (iw.XJoystick-500)/10000;

            if (iw.XJoystick < 450)

                leftRightRot = (iw.XJoystick-500)/ 10000;

if (iw.YJoystick > 550)

                upDownRot = (iw.YJoystick - 500)/10000;

            if (iw.YJoystick < 450)

                upDownRot = (iw.YJoystick - 500) / 10000;

The LCD screen was used to display the current player and their score. The user must scan their id to start the game or the game wouldn’t start. The RFID phidget was used to detect the identity of the current playing user. First of all we created a text LCD wrapper and an RFID wrapper which contain the various event handlers. The RFID detects if a tag is present; if not a message appears on the LCD screen asking the user for their tag 

TextLCDWrapper tlw = new TextLCDWrapper();

       RFIDWrapper rw = new RFIDWrapper();

while (rw.tag == null || rw.tag.Length < 2)

            {

                tlw.JustTyped("Tag, Please!");

            }

When the user scans their tag the RFID will detect if the user is registered to play the game or not and display the relevant message on the LCD screen 

private void DrawText()

        {

           if(rw.tag != null && rw.tag.EndsWith("cb"))

            {

                tlw.JustTyped("Necemon : " + score);

                spriteBatch.DrawString(font,"Necemon - score:" + score, new Vector2(20, 45), Color.White);

            }

            else if (rw.tag != null && rw.tag.EndsWith("8a"))

            {

                tlw.JustTyped("Daniel : " + score);

                spriteBatch.DrawString(font,"Daniel - score:" + score, new Vector2(20, 45), Color.White);

            }

            else if (rw.tag != null)

            {

                spriteBatch.DrawString(font, rw.tag + " - score:" + score, new Vector2(20, 45), Color.White);

                tlw.JustTyped("Unknown : " + score);

            }

        }

The rotation sensor will be used to control the speed of the plane. The values of the rotation sensor are obtained through the input wrapper class, previously mentioned when describing the joystick. The more you turn the rotation phidget the more the speed increases

gameSpeed = iw.RotationValue/100;

The following code creates a new bullet every time the space bar is pressed provided the previous bullet was fired more than 100 milliseconds ago

if (keys.IsKeyDown(Keys.Space))

            {

            double currentTime = gameTime.TotalGameTime.TotalMilliseconds;

                if (currentTime - lastBulletTime > 100)

                {

                    Bullet newBullet = new Bullet();

                    newBullet.position = xwingPosition;

                    newBullet.rotation = xwingRotation;

                    bulletList.Add(newBullet);

                    lastBulletTime = currentTime;

                }

            }

Our task was to implement four sensors to control the bullets being fired from the plane. The values of the force sensor are also obtained through the input wrapper class. The following code now creates a new bullet of type 3 every time the force sensors are pressed 

if (keys.IsKeyDown(Keys.C) || iw.Force3 > 25)

            {

                //make the lights blink

                iw.ifKit.outputs[0] = (!iw.ifKit.outputs[0]);

                iw.ifKit.outputs[1] = (!iw.ifKit.outputs[1]);

                iw.ifKit.outputs[2] = (!iw.ifKit.outputs[2]);

                iw.ifKit.outputs[3] = (!iw.ifKit.outputs[3]);

                double currentTime = gameTime.TotalGameTime.TotalMilliseconds;

                //within a certain frequency

                if (currentTime - lastBulletTime > 300)

                {

                    //Create the bullet and add it to the bulletlist

                    Bullet newBullet = new Bullet();

                    newBullet.position = xwingPosition;

                    newBullet.rotation = xwingRotation;

                    bulletList3.Add(newBullet);

                    //play a sound

                    soundEffect1.Play();

                    lastBulletTime = currentTime;

                }

            }

(Robotics picture from geminiedu.in)

Tags: , , , ,

English | Prototype | Technical

About

Necemon

I am Necemon Yai. I am a .NET developer and a digital artist. Let's keep in touch via Twitter, LinkedIn or Facebook.

Je suis Necemon Yai. Je suis un développeur .NET et un artiste numérique. Restons en contact via Twitter, LinkedIn ou Facebook.