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 dépendra 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 ré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 télécharger/explorer le code source à 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 thereafter), 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

5 "Bonnes Raisons" pour Lesquelles Tu ne seras pas Embauché

by necemon 17. June 2012 20:19

[Traduit d'une contribution par Nnenna Nwakanma]

 

Je voulais rédiger ces réflexions depuis fin 2011. Petite anecdote, j'organise des formations en Afrique de l'Ouest et je fais aussi quelques recrutements. Pour l'un des postes, je rencontrais les candidats le matin, et pour l'autre poste, les interviews avaient lieu dans l'après-midi. J'ai donc passé une journée entière à recevoir des gens essayant de nous convaincre (moi et le panel que je dirigeais) qu'ils étaient les personnes idéales pour la mission! Puis arrive 19 heures, et je suis de retour dans ma chambre d'hôtel, essayant de me détendre. Et quelqu'un frappe à la porte.

 

"Madame, je vois que vous interviewez des gens, s'il vous plait pouvez-vous m'interviewer aussi ?" D'abord, je me sens choquée, puis insultée et vraiment offensée. Mais mon "autre cerveau" dit : "Calme-toi et va jusqu'au bout de cette affaire".

 

Alors je feins l'intérêt et je demande: "S'il vous plaît, quel est votre nom, quelle est votre qualification académique, quelles sont vos compétences, et quel genre de travail recherchez-vous?"

 

C'était le début d'une longue histoire. Pour abréger et simplifier, TOUTES les raisons de le recruter que le monsieur m'a données sont de "bonnes raisons" pour lesquelles une personne ne devrait jamais être embauché.

 

Raison la plus courante: j'ai besoin d'un emploi.

D'accord, donc tu as besoin d'un emploi. Pour résumer, ce besoin est le tien. Ton problème n'est pas mon problème. Le fait que tu aies besoin d'un emploi n'est pas mon problème. Il y a des millions de personnes qui disent la même chose. Je reçois de telles requêtes au moins 5 fois par semaine. Cela peut sembler un peu dur, mais ton besoin est le tien, pas le mien. Le fait que tu aies besoin d'un emploi n'est pas une raison pour t'embaucher.

 

Raison 2: J'ai besoin de plus d'argent.

Réponse rapide: "Moi aussi". J'ai besoin de plus d'argent. En fait, en tant qu'employeur, j'ai probablement besoin de plus d'argent que toi. Mes responsabilités sociales, économiques, fiscales et personnelles dépassent certainement les tiennes. Donc, en termes de besoins financiers, les miens sont supérieurs aux tiens. Laisse-moi tranquille.

 

Raison 3: Je m'embête dans mon travail actuel, je m'ennuie, je voudrais un truc stimulant, excitant, surprenant, etc.

Sérieusement? Va commencer ton propre truc alors! Fais ce qui te plaît. Réveille toi quand tu veux, fais seulement des choses excitantes. N'accepte jamais une mission à moins qu'il y ait des aventures surprenantes! Personne ne t'embauchera pour te rendre heureux. On t'embauche pour travailler. Désolé, mais l'intérêt de ton employeur est la priorité.

 

Raison 4: Il n'y a pas d'avenir dans ce pays. J'ai besoin de m'en aller d'ici.

Et tu penses que je suis stupide? Si j'avais commencé comme toi, penses-tu que tu serais là, à me demander de te recruter? C'est parce que j'ai cru au potentiel futur, et que je me suis engagée à améliorer les conditions existantes, que tu viens vers moi en pensant que je pourrais t'offrir un avenir meilleur. Tu ne cherches pas un travail, Tu cherches une échappatoire. Si j'investis en toi, il y a de fortes chances que tu quittes le navire au premier signe de difficulté, ou que tu disparaisses dès que tu aurais trouvé une autre échappée. Je cherche une personne avec qui résoudre des problèmes, concevoir, construire et assurer un meilleur présent et un avenir prometteur. Je ne propose pas de plateformes pour les fuyards.

 

Raison 5: Je t'aime bien. Tu es une personne merveilleuse. Je veux que tu sois mon chef.

Erreur !! Parce que je suis souvent entre deux avions, je donne des pourboires, je parle avec respect et je reste ponctuelle... Ou peut-être à cause du style ou des choses "chic" que tu vois autour de moi. Tu m'as probablement vue après le travail ou pendant les congés. C'est un mirage. Il faudrait travailler à mes cotés pour voir mon "vrai visage d'entrepreneur". Je travaille de longues heures, je fais des rapports qui s'étendent sur des centaines de pages. Je me prive de sommeil... Je me donne à fond !! Tu ferais mieux de te réveiller !!

 

*****

Donc, tu demandes, "quelles sont les bonnes raisons pour lesquelles je peux être embauché". Je serai brève.

Chaque employeur cherche à résoudre un problème. Je t'engagerais si tu peux apporter des solutions ou si tu peux aider à trouver des solutions

Si, par tes propres compétences, tu m'apportes plus d'avantages que je n'en reçois actuellement. Si tu peux me rendre plus riche... tu es le bienvenu

Si tu es une personne ingénieuse. Quelqu'un qui est prêt à rechercher des solutions, tenter des expériences, surmonter les échecs et aider les collègues à faire mieux

Si tu as une compétence, une connaissance ou une qualité que je n'ai pas

Si ton réseau est plus grand, plus prometteur et plus intéressant que le mien.

*****

 

Conclusion, personne ne va te recruter à cause de tes attentes. Je recrute à cause de mes attentes. Alors la prochaine fois que tu viens frapper...

 

Pense à moi, pas à toi.

Tags: , ,

Corporate | Francais | Winning

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 y a différents distributeurs officiels phidgets répartis à travers le monde. Par exemple, pour ceux qui sont 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 ne 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 adéquat. 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. L'installateur Windows 
3. Les exemples 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 directionnelles.

Tout d'abord, nous avons créé un nouvel 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 son é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 un nouveau projectile à 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 tôt.

 

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 projectiles étant tirés de l'avion. Les valeurs du capteur de force sont également obtenues 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;

                }

            }

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 robotshop.com/uk.

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:

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's not that great, 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;

                }

            }

Tags: , , , ,

English | Prototype | Technical


Necemon

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.