S’interfacer avec une Sphèro en remote avec NancyModule

 

using SpheroNET;

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Linq;

using System.Text;

namespace SpheroConsole

{

public class SpheroModule : Nancy.NancyModule

{

static SpheroConnector spheroConnector = new SpheroConnector();

static Sphero sphero = null;

public SpheroModule()

{

Get[« / »] = _ =>

{

string s = « Novencia TS – WebSphero Proxy<br><br> »;

s += « Command List :<br/> »;

s += « <b>find<b> – Get port id Bluetooth devices<br/> »;

s += « <b>connect/{port}<b> – Connect to the given port id (see find)<br/> »;

s += « <b>sleep<b> – Sleep the Sphero<br/> »;

s += « <b>close<b> – Close the Sphero communication<br/> »;

s += « <b>setrgb/{red}/{green}/{blue}<b> -Change Sphero color<br/> »;

return s;

};

Get[« /find »] = _ =>

{

spheroConnector.Scan();

var deviceNames = spheroConnector.DeviceNames;

string result = «  »;

for (int i = 0; i < deviceNames.Count; i++)

{

result += string.Format(« {0}: {1}<br/> », i, deviceNames[i]);

}

return result;

};

Get[« /connect/{port} »] = PortFinder;

Get[« /close »] = _ => { spheroConnector.Close(); return « OK »; };

Get[« /sleep »] = _ => { sphero.Sleep(); return « OK »; };

Get[« /setrgb/{red}/{green}/{blue} »] = SetRGBColor;

Get[« /setrgb/{colorName} »] = SetRGBColor;

Get[« /goroll/{h}/{s}/{g} »] = Goroll;

Get[« /goroll/{h}/{s}/{g}/{d} »] = GorollWithDelay;

Post[« / »] = _ => « Hello world! »;

}

public string Goroll(dynamic o)

{

int h, s, g;

if (!int.TryParse(o.h, out h)) throw new Exception(« Invalid parameter »);

if (!int.TryParse(o.s, out s)) throw new Exception(« Invalid parameter »);

if (!int.TryParse(o.g, out g)) throw new Exception(« Invalid parameter »);

var programLines = new List<string>();

programLines.Add(« 10 basflg 1\r »);

programLines.Add(string.Format(« 20 goroll {0},{1},{2}\r »,h,s,g));

var area = StorageArea.Temporary;

sphero.EraseOrbBasicStorage(area);

sphero.SendOrbBasicProgram(area, programLines);

sphero.ExecuteOrbBasicProgram(area, 10);

return « OK »;

}

public string GorollWithDelay(dynamic o)

{

int h, s, g, d;

if (!int.TryParse(o.h, out h)) throw new Exception(« Invalid parameter »);

if (!int.TryParse(o.s, out s)) throw new Exception(« Invalid parameter »);

if (!int.TryParse(o.g, out g)) throw new Exception(« Invalid parameter »);

if (!int.TryParse(o.d, out d)) throw new Exception(« Invalid parameter »);

var programLines = new List<string>();

programLines.Add(« 10 basflg 1\r »);

programLines.Add(string.Format(« 20 goroll {0},{1},{2}\r », h, s, g));

programLines.Add(string.Format(« 30 deelay {0}\r », d));

var area = StorageArea.Temporary;

sphero.EraseOrbBasicStorage(area);

sphero.SendOrbBasicProgram(area, programLines);

sphero.ExecuteOrbBasicProgram(area, 10);

return « OK »;

}

public string SetRGBColor(dynamic o)

{

byte r, g, b;

try

{

r = byte.Parse(o.red);

g = byte.Parse(o.green);

b = byte.Parse(o.blue);

}

catch

{

string name = o.colorName;

Color c = Color.FromName(name);

r = c.R;

g = c.G;

b = c.B;

}

sphero.SetRGBLEDOutput(r, g, b);

return « OK »;

}

public string PortFinder(dynamic o)

{

int index = 1;

if (int.TryParse(o.port, out index))

{

if (o.port < 0) return « invalid parameter »;

try

{

sphero = spheroConnector.Connect(index);

return « OK »;

}

catch (Exception ex)

{

return ex.Message;

}

}

else

{

return string.Format(« ‘{0}’ is not a valid device index. », o.port);

}

}

}

}

 

Les Tools for Apache Cordova intégrés dans Visual 2015 RC

Complètement génial. Les Tools for Apache Cordova seront intégrés dans VS 2015 Release Candidate !

Cela signifie quoi ? Tout simplement que vous pourrez créer des applications compatibles iPhone, Android, Windows Phone, BlackBerry, Bada, WebOS, etc à partir de Visual Studio.

Pour ceux qui ne connaissent pas Cordova, c’est un concurrent de notre cher Xamarin, sauf qu’on y code exclusivement en HTML, CSS  et Javascript (avec tous les frameworks qui vont avec).

Plus d’information sur le site de microsoft

Visual Studio Code

Quel passionné de code Microsoft n’a pas dans des temps reculés rêvé de répondre à un aficionados Java que lui aussi, son code pouvait tourner ailleurs que sur environnement Microsoft ?

Qui se rappelle du début du millénaire où noyer dans du COM on espérait la venu de .NET. Que de chemin parcouru depuis cette époque. La CLI a permis à .NET ne tourner sur d’autres plateformes, comme Linux grâce à Mono.

Et désormais, c’est officiel, le nouveau venu « Visual Studio Code » permettra l’édition de code sous environnement Windows, Linux et également OS X.

Certes, toutes les fonctionnalités de Visual Studio ne seront pas présentes, mais c’est bien une démonstration d’ouverture totale de l’éditeur. L’effet « Azure », où l’on peut choisir son OS, utilisé des outils tiers, y est assurément pour quelque chose.

.NET Core

Microsoft a annoncé .NET Core, la partie noyau et modulaire de .NET qui peut fonctionner sur plusieurs plateformes.

.NET Core est un donc sous-ensemble de .NET qui tourne partout et qui a un second avantage, celui d’être opensource.

J’ai précisé que .NET Core est modulaire ? Cela signifie quoi ?

Tout simplement qu’il est publié via NuGet plusieurs petits packages plutôt qu’un seul volumineux. Le développement est ainsi plus léger et agile : on n’embarque que ce dont on a besoin par bibliothèque.

 

« Steeve Jobs était toujours dans l’état d’esprit de vous dire que vous étiez merdique ou bien de vous séduire ». Bill Gates

Les nouveautés de C# 6

Un exemple valant mieux que de long discours, voici ce que nous propose C# 6

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

//La ligne suivante se nomme « using static classes »

using static System.DateTime;

namespace Sample

{

public class Person

{

public Person(DateTime birthday)

{

Birthday = birthday;

}

public string Name { get; set; }

public string FirstName { get; set; }

//getter only auto property + initializer

public DateTime Birthday { get; } = new DateTime(1930, 1, 1); //DateTime appartient à System.DateTime

public int Age => DateTime.Compare(Now, Birthday); //Now appartient à System.DateTime

public override string ToString()

{

return « {FirstName} {Name} – {Age} years old} »;

}

}

}