Pierre's Embedded and Mobile Blog

Soulevons le capot des systèmes embarqués et mobiles

Posts
  • Pierre's Embedded and Mobile Blog

    6 Octobre: Lancement officiel des Windows Phones, Windows Mobile 6.5 et de Marketplace

    • 0 Comments

    C’est officiel, le lancement des Windows Phones, les nouveaux terminaux équipés de Windows Mobile 6.5, ainsi que de Marketplace, aura lieu le 6 octobre. Pour ceux qui n’aurait pas suivi, Windows Mobile 6.5 est la nouvelle mouture du système d’exploitation pour smartphones de Microsoft, qui apporte un gros lot de nouveautés par rapport à la version 6.1, notamment une expérience utilisateur complètement revue pour les terminaux tactiles: nouveau homescreen, nouveau menu démarrer, interface entièrement navigable au doigt et avec des gestes (gestures), un tout nouveau browser, performant, avec support de Flash, accès à Marketplace, le marché d’applications mobiles, un nouveau modèle de développement d’applications, les widgets, venant en plus de ce qui existe déjà… Bref il s’agit d’une release majeure!

    En plus des nouveaux terminaux qui seront mis en vente à partir de cette date, certains téléphones déjà en vente avec Windows Mobile 6.1 pourront être upgradés vers Windows Mobile 6.5, notamment le Samsung Jack, les HTC Diamond 2 et Touch Pro 2, les LG Eiger et HQ, ainsi que 4 autres terminaux de chez Acer.

    Quelque chose qui à mon humble avis n’a pas eu l’attention méritée est le fait qu’un générateur de thème sera disponible en ligne et permettra depuis son PC de customiser complètement son Windows Phone: fond d’écran, menus, barre de navigation… et pour les moins créatifs d’entre nous, des thèmes réalisés par des designers connus (comme Isaac Mizrahi) seront disponible en téléchargement. C’est un point clé pour les Windows Phones: fini le temps du “même téléphone pour tout le monde”: chacun doit pouvoir avoir un téléphone qui lui ressemble, en fonction à la fois de ses goûts et de ses usages, et surtout un téléphone qui peut lui servir à la fois pour les loisirs et pour la vie professionnelle, en lui donnant accès à l’information qu’il veut, au moment ou il en a besoin.

  • Le communiqué de presse officiel
  • Le post sur le blog de l'équipe Windows Phone 
  • Pierre's Embedded and Mobile Blog

    KickApps: l’appel à projets a porté ses fruits!

    • 0 Comments

    Souvenez-vous: il y a quelques mois, Microsoft France lançait un appel à projets d’applications mobiles: KickApps. Que s’est-il passé depuis? Nous avons reçu de nombreuses candidatures. La sélection a été difficile mais nous avons arrêté notre choix sur 5 compagnies, et nous les avons accompagné dans le développement de leur application: avec des journées au Microsoft Technology Center de Paris avec des consultants techniques, ou même avec de l’aide de designers (l’agence i-breed) et du support au temps de la certification.

    Aujourd’hui toutes les applications ont passé avec succès cette certification, et nous avons donc dédié toute une partie du devcenter MSDN à ce succès: elles sont toutes disponibles en téléchargement gratuit, en attendant leur arrivée sur Marketplace, et bien évidemment, l’ouverture de Marketplace!

    Un grand merci à tous les candidats, et encore un autre round de félicitations pour les lauréats:

    Pour ceux que cette réussite pourrait inspirer, restez à l’écoute de ce blog car d’autres opérations similaires pourraient peut-être (qui sait ;)) voir le jour dans les mois qui viennent!

  • Pierre's Embedded and Mobile Blog

    Nouveau DevCenter Windows Mobile, et 2 ateliers de plus pour le Coach!

    • 0 Comments

    MSDN fait le plein de nouveautés autour de Windows Mobile pour la rentrée: cela inclut un devcenter tout neuf, tout beau (LE plus beau même) avec un contenu mieux présenté et tout nouveau. En plus de ça, 2 ateliers supplémentaires sont sortis pour le Coach Windows Mobile, et ce n’est que le début!

  • Pierre's Embedded and Mobile Blog

    Concours Dare to Dream Different (.NET MicroFramework) : les gagnants annoncés!

    • 0 Comments

    Nous avions en tout et pour tout 2 participants qui était passé au Round 2 du concours en France, mais aucun des deux n’était passé au Round 3. Dommage, mais pas forcément une excuse pour ne plus en parler. Aujourd’hui les gagnants ont été annoncés! Voilà de quoi donner à ceux qui ne connaissent pas le .NET MicroFramework une petite idée de ce qu’on peut faire avec:

    Les résultats annoncés sur le blog de l’équipe

  • Pierre's Embedded and Mobile Blog

    Microsoft OneApp: la plateforme de développement d’applications pour Feature-Phones

    • 1 Comments

    L’annonce tombe aujourd’hui, et balaye (pour le moment) les rumeurs, du genre “un seul appstore pour Zune HD et Windows Mobile”.. Et non, OneApp, ce n’est pas ça! OneApp est une plateforme applicative pour les téléphones de types “feature phones” par opposition aux “smartphones”: autrement dit la catégorie de téléphones qui ont des capacités de traitement de données (au delà du traitement de la voix, donc), mais pas non plus les capacités d’un Smartphone. Les utilisateurs de ces téléphones (dont la press release souligne l’importance particulière dans les pays en voie de développement, mais honnêtement, y’en a quand même plein partout y compris dans les pays “développés”!) vont avoir accès à une nouvelle plateforme applicative simple, et qui marche avec de nombreux modèles de terminaux. L’idée serait, dans une seule “meta application” (OneApp) de retrouver un petit tas de mini applications pour accéder à nos services favoris: Facebook, Twitter, Messenger etc. OneApp pèse environ 150Ko, et repose largement sur le cloud pour décharger le téléphone des traitements compliqués. Le SDK devrait être dispo d’ici fin 2009 et le développement d’applications reposera principalement sur des technos standards comme XML et Javascript.

    Mieux que du texte, une video!

    Cette initiative sort du programme Microsoft Ulimited Potential, qui s’intéresse aux problématiques des pays qui n'ont pas un accès facile aux technologies récentes.

  • Pierre's Embedded and Mobile Blog

    Le Web en Tout-Microsoft pour les nuls-et-feignants

    • 1 Comments

    Voila un post qui fera plaisir (on l’espère) à mes amis les webeux, du genre David, Christophe et Laurent, et qui déroge un peu de la ligne habituelle, vacances obligent.

    Je suis développeur embedded. Et mobile. Les weberies c’est pas mon truc… Oui mais voila, je me suis retrouvé dans une négociation débile à promettre un site web à ma môman-chérie en échange d’une ligne ADSL sur mon lieu de vacances familial (grogeek power), . L’erreur. Comment se pourrir ses vacances. En plus je suis feignant. Beaucoup plus feignant en vacances qu’au boulot, c’est dire. Si tant est qu’il soit possible d’être aussi feignant que masochiste, j’ai décrété (corporate, mon amour) que contrairement à tous les autres sites à la cons que j’avais pu faire dans ma jeunesse sur stack LAMP, j’allais tout faire avec des technologies Microsoft.

    Alors je me renseigne, j’écoute aux portes. Et à en croire ce qu’on entend, sur la toile et de la bouche d’un tas de gens, PHP y’a que ça de vrai, c’est le monde du tout gratuit, tout a déjà été fait pour moi, y’a que du copier/coller à faire etc. (et en plus Microsoft c’est le diable et ca respecte pas les standards)

    Bullshit, moi je dis, et pourquoi?

    • Pour gérer le contenu du site, il faut un CMS, et de préférence un qui poutre: DotNetNuke. Coup de bol, c’est gratuit. Et ça respecte les standards.
    • Des technos de fous pour montrer des photos? Photosynth, gratuit, DeepZoom, gratuit. Un album photo complet en Silverlight? Gratuit.
    • De la carto : Bing Maps. Gratuit.
    • Un IDE? Visual Web Developer Express Edition: Gratuit.
    • Reste l’hébergement. Aïe, en général il parait que c’est le point dur. Mais si on creuse, un hébergement un tant soit peu pro, que ca soit PHP ou ASP, ca se paye, et ça peut valoir le même prix: Va chercher bonheur chez Ikoula: j’ai pris pour 3 ans à 2.40€ par mois. Pour même pas le prix d’un Kebab j’ai du Full-Trust en mutualisé avec SQL Server, ASP.NET, un support 24x7, bref, la totale moules-frites.

    Et on découvre, Ô désespoir du geek, que ce qui coûte le plus cher sur le web, ce n’est pas la techno, c’est le temps qu’on passe à générer le contenu. C’est aussi ce qui fait la valeur d’un site en général: le contenu, pas la techno. Ce qui est sûr aussi, c’est que moins on passe de temps à se prendre la tête avec la techno, et plus on en passe sur la plage. Et la conclusion de mes recherches d’attardé du développement web en mode pragmatique, c’est que  contrairement à ce que racontent un tas de trolls de base, j’ai trouvé dans les technos Microsoft tout ce qu’il faut, et même plus. Alors si on pouvait arrêter de se mettre sur la tronche sur les forums comme des gros-nœuds, et qu’on pouvait être honnêtes une fois de temps en temps…

    PS: … et ma part d’honnêteté qui lavera ma conscience: Oui on peut faire la même chose en PHP. Sur hébergement Windows ou Linux si on veut. On a donc le choix: c’est pas beau, le web!

  • Pierre's Embedded and Mobile Blog

    Windows Marketplace for Mobile ouverte aux applications, et lancement du concours “Race To Market”

    • 0 Comments

    A la date prévue (à savoir le 27 Juillet), Windows Marketplace for Mobile a ouvert ses portes aux applications des développeurs à travers le monde: vous pouvez maintenant vous enregistrer en tant que développeur, et d’ici décembre, vous voir offrir automatiquement 5 certifications d’applications. c’est par là: http://developer.windowsmobile.com. Et j’encourage tous les gens intéressés à s’inscrire dès maintenant, et à coder sur la plage, car nous lançons également un grand concours pour développeurs: le Race To Market Challenge. A gagner, (entre autre) des tables Microsoft Surface (avec les outils de dev!) imaginez ce que vous feriez avec ça dans votre salon… Les détails sont là: http://www.mobilethisdeveloper.com/

    Juste pour rappel: les Windows Phones, équipés de Windows Mobile 6.5, arriveront à l’automne. Et en décembre arrivera le client pour Windows Mobile 6 et 6.1. dans les 6 mois qui viennent, les développeurs qui auront posté leur application sur Marketplace pourront toucher plus de 30 millions d’utilisateurs potentiels: et si votre application coute $0.99 il faut à peine une centaine de downloads pour rembourser votre inscription à Marketplace…

    Quoi, vous êtes encore là? allez, à vos Visual Studios! Il faut coder maintenant!

  • Pierre's Embedded and Mobile Blog

    Spécial annonces WPC: Marketplace sera disponible pour Windows Mobile 6 et 6.1, et autres petites joies

    • 0 Comments

    Et oui c’est la grande nouvelle du jour annoncée par Todd Brix sur le nouveau blog de l’équipe Windows Mobile et à la WPC, la conférence internationale dédiée aux partenaires Microsoft: de quoi faire sautiller de joie les développeurs mobiles qui vont avoir l’occasion de toucher plus de 30 millions d’utilisateur dès la fin 2009, date à laquelle le client devrait arriver pour les versions plus anciennes de Windows Mobile: rappelons qu’un tel client sera disponible dès la mise en route de Marketplace, à l’automne, pour les terminaux équipés de Windows Mobile 6.5.

    Il sera possible dès le 27 Juillet de soumettre des applications sur Marketplace, ce qui permettra aux early adopters de voir leur application certifiée et parmi les premières disponibles dès le lancement des Windows Phones! Et le 27 Juillet, jour du lancement, nous annoncerons les détails d’un grand contest pour développeurs afin de motiver ceux qui auraient envie de geeker mobile sur la plage cet été :)

    On résume?

    • Windows Marketplace for Mobile ouvre la porte aux applications le 27 Juillet
    • Ce même 27 Juillet nous annoncerons un grand contest développeurs
    • Dès la fin de l’année 2009 un client sera disponible pour Windows Mobile 6 et Windows Mobile 6.1, ouvrant ainsi la porte de Marketplace à plus de 30 millions de terminaux déjà sur le marché
    • Et en plus des applications grand public, il y aura dans Marketplace une section “Business Center” avec des applications professionnelles, avec dès le lancement des partenaires comme Avanade UK, Formotus, Ilium Software, Pyxis Mobile et WebIS

    Les sources:

  • Pierre's Embedded and Mobile Blog

    La Boite à Outils de l'Application Géolocalisée: Partie 3: Afficher une carte

    • 1 Comments

    Cet article fait partie d'une série de 3: La Boite à Outils de l'Application Géolocalisée

    Une fois que la position est connue, reste à l’afficher sur une carte J. Pour cela les API en lignes de Bing Maps et Google Maps sont très faciles à utiliser dans leurs versions mobiles.

    Bing Maps

    Pour afficher la carte nous utilisons la même approche que pour le geocoding, mais le service utilisé change. Plutôt que d’utiliser un FindServiceSoap, j’utilise un RenderServiceSoap.

    Dans mon formulaire, je rajoute la création du service Soap qui me servira à communiquer avec la plateforme MapPoint. J’en profite pour rajouter quelques propriétés qui me serviront plus tard :

    private RenderServiceSoap renderService = new RenderServiceSoap();

    private LatLong mapCenter = null;

    private double mapScale = 50000;

    public double Latitude { get; private set; }

    public double Longitude { get; private set; }

     

    Puis je m’occupe de l’authentification : je stocke mon compte utilisateur (sous la forme de 6 chiffres) et mon mot de passe dans les ressources, et je crée un méthode statique pour factoriser ce code :

    private void SetMapPointCredentials()

    {

        // You have to provide MapPoint credentials in order to call out to the MapPoint WS

        NetworkCredential myCredentials = new NetworkCredential(Properties.Resources.MapPointUserName, Properties.Resources.MapPointPassword);

     

        renderService.Credentials = myCredentials;

        renderService.PreAuthenticate = true;

    }

     

    Ensuite, il me suffira à l’initialisation du formulaire d’appeler cette méthode pour mettre en place les bonnes authentifications.

    Ensuite, je vais utiliser un contrôle de type PictureBox pour afficher la carte. Pour peupler cette PictureBox, il faut une Image, que je vais créer à partir d’un objet de type MapImage que j’aurai fait généré par le service.

    Une MapImage est générée par le service à partir d’une MapView, qui est la vue de la carte (quelle échelle, quel centre, etc).Par dessus, on peut rajouter une liste de PushPins, qui correspondent à des petits indicateurs (drapeaux, etc) sur la carte. Voici donc à quoi ressemble le code :

    MapView[] myViews = new MapView[1];

    ViewByScale myView = new ViewByScale();

     

    mapCenter = new LatLong();

    mapCenter.Latitude = this.Latitude;

    mapCenter.Longitude = this.Longitude;

     

    myView.CenterPoint = mapCenter;

    myView.MapScale = mapScale;

     

    myViews[0] = myView;

     

    Pushpin[] myPushpins = new Pushpin[1];

    myPushpins[0] = new Pushpin();

    myPushpins[0].IconDataSource = "MapPoint.Icons";

    myPushpins[0].IconName = "31";

    //myPushpins[0].Label = "Location";

    myPushpins[0].LatLong = new LatLong();

    myPushpins[0].LatLong.Latitude = mapCenter.Latitude;

    myPushpins[0].LatLong.Longitude = mapCenter.Longitude;

     

    MapSpecification mapSpec = new MapSpecification();

    mapSpec.DataSourceName = "MapPoint.EU";

    mapSpec.Views = myViews;

    mapSpec.Pushpins = myPushpins;

     

    MapImage[] mapImages = renderService.GetMap(mapSpec);

    if (mapImages[0] != null)

    {

        pbMap.Image = new System.Drawing.Bitmap(new System.IO.MemoryStream(mapImages[0].MimeData.Bits));

        pbMap.Visible = true;

    }

     

    Google Maps

    Pour Google Maps, le plus simple pour le mobile est d’utiliser l’API statique : http://code.google.com/apis/maps/documentation/staticmaps/

    Ici aussi il faut une clef d’API, qu’on peut récupérer gratuitement ici : http://code.google.com/apis/maps/signup.html

    Ensuite, il suffit d’envoyer les bons paramètres dans une URL pour récupérer une image, qu’on peut héberger dans une PictureBox. Voici une façon simple de construire la requête :

    #region Construction des arguments de l'URL

    StringBuilder args = new StringBuilder();

    args.Append("center=" + this.Latitude.ToString() + "," + this.Longitude.ToString());

    args.Append("&zoom=12");

    args.Append("&size=" + pbMap.Width + "x" + pbMap.Height);

    args.Append("&format=png");     // gif, png, jpg

    args.Append("&maptype=mobile"); // satellite, terrain, hybrid, mobile

    args.Append("&markers=" + this.Latitude + "," + this.Longitude + "," + "blue");

    //args.Append("&path=");

    //args.Append("&span=");

    //args.Append("&frame=");

    //args.Append("&hl=");

    args.Append("&key=" + this.GoogleMapApiKey);

    args.Append("&sensor=false");   // true if my app uses GPS sensor

    #endregion

     

    try

    {

     

        WebRequest myRequest = WebRequest.Create(GoogleMapBaseUrl + args.ToString());

        WebResponse myResponse = myRequest.GetResponse();

     

        pbMap.Image = new Bitmap(myResponse.GetResponseStream());

        myResponse.Close();

    }

    catch (WebException ex)

    {

        MessageBox.Show(ex.Message);

    }

     

    Si on résume ce qu’on vient de voir, vous êtes maintenant capables de récupérer une position que ce soit à partir du GPS ou avec l’identifiant de la cellule GSM, et de l’afficher sur une carte, que ce soit de chez Google ou de chez Bing. Vous avez donc toutes les cartes en mains pour proposer une application géolocalisée, il ne manque plus que l’idée « métier » derrière J

    Si vous vous sentez l’âme d’un contributeur, il reste de nombreux services à utiliser : Yahoo Geocoding Services, Open Street Map, etc. N’hésitez pas !

  • Pierre's Embedded and Mobile Blog

    La Boite à Outils de l'Application Géolocalisée: Partie 2: Geocoding d'adresse

    • 0 Comments

    Cet article fait partie d'une série de 3: La Boite à Outils de l'Application Géolocalisée

    Il existe un moyen précis d’obtenir une localisation, il s’agit tout simplement de l’adresse à laquelle on se trouve J. Des services en ligne permettent d’obtenir une localisation précise à partir d’une adresse donnée. Encore une fois, nous avons le choix entre plusieurs services :

    Google Geocoding services

    Le service de geocoding Google fonctionne très simplement en REST. L’API est décrite en ligne ici : http://code.google.com/apis/maps/documentation/geocoding/index.html

    Il suffit de construire une URL particulière et les coordonnées sont renvoyées en XML : voici un bout de code simple qui permet de traiter une adresse :

    static public string GeoCodeAddress(string street, string town, string zipcode, string country)

    {

        XNamespace ns1 = "http://earth.google.com/kml/2.0";

        string BaseUrl = "http://maps.google.com/maps/geo?";

        string GoogleMapApiKey = "<INSERT_API_KEY_HERE>";

        string result;

        string[] splittedResult;

        StringBuilder args = new StringBuilder();

        args.Append("q=" + street.Replace(' ', '+') + "+" + town.Replace(' ', '+') + "+" + zipcode.Replace(' ', '+') + "+" + country.Replace(' ', '+'));

        args.Append("&key=" + GoogleMapApiKey);

        args.Append("&sensor=false");

        args.Append("&output=xml");

        args.Append("&oe=utf8");

        //args.Append("&ll=");

        //args.Append("&spn=");

        //args.Append("&gl=");

        try

        {

            string url = BaseUrl + args.ToString();

            WebRequest myRequest = WebRequest.Create(new Uri(url));

            WebResponse myResponse = myRequest.GetResponse();

            XmlReader sr = XmlReader.Create(myResponse.GetResponseStream());

            try

            {

                result = (from el in XElement.Load(sr).Descendants(ns1 + "Point")

                         select el.Element(ns1 + "coordinates").Value).Single();

            }

            finally

            {

                sr.Close();

                myResponse.Close();

            }

            

        }

        catch (WebException webex)

        {

            return webex.Message;

        }

        splittedResult = result.Split(',');

        return splittedResult[1] + "|" + splittedResult[0] ;

    }

    Encore une fois je retourne latitude et longitude dans une string séparées par un ‘| ‘ pour être consistant entre mes différentes manières de récupérer la localisation.

    Bing Maps geocoding services

    Contrairement à l’approche Google qui utilise REST, Bing Maps propose des services similaires en SOAP. Personnellement je préfère cette approche, qui est beaucoup plus lisible et maintenable au fur et à mesure de l’enrichissement et de l’évolution des API.

    La première chose à faire est de demander un compte de développeur sur la plateforme : https://mappoint-css.live.com/mwssignup/Default.aspx?wa=wsignin1.0. Ensuite, depuis un projet mobile, on peut cliquer sur « Add Web Reference » : un petit wizard s’ouvre et nous demande l’url du webservice : il faut rajouter : http://staging.mappoint.net/standard-30/ puis cliquer sur la version « staging ». Ensuite il est conseillé de enommer le service : je l’appelle MapPoint. Ceci étant fait, le proxy vers le service est généré, et à partir de là on peut utiliser dans l’application le service.

    Je vais donc commencer par créer un nouveau service, auprès duquel je vais m’authentifier :

    FindServiceSoap myService = new FindServiceSoap();

    myService.Credentials = new NetworkCredential(Properties.Resources.MapPointUserName, Properties.Resources.MapPointPassword);

    myService.PreAuthenticate = true;

    Ensuite il me faut formater l’adresse : rien de compliqué, j’utilise les mêmes champs qu’avec l’API Google, mais le format est légèrement différent : j’utilise un objet Address :

    Address myAddress = new Address();

    myAddress.FormattedAddress = street + ", " + zipcode + " " + town + ", " + country;

    J’en profite pour configurer quelques options, notamment le fait de pouvoir utiliser l’algorithme « Rooftop » qui me donne des résultats très précis :

    FindOptions myOptions = new FindOptions();

    myOptions.ResultMask = FindResultMask.RooftopFlag |

                           FindResultMask.LatLongFlag |

                           FindResultMask.EntityFlag |

                           FindResultMask.MatchDetailsFlag |

                           FindResultMask.AddressFlag;

    Enfin, il ne reste plus qu’à packager tout ça pour l’envoyer au service : c’est le but de la classe FindAddressSpecification :

    FindAddressSpecification fas = new FindAddressSpecification();

    fas.InputAddress = myAddress;

    fas.Options = myOptions;

    fas.DataSourceName = "MapPoint.EU";

    Dernière étape : récupérer les coordonnées à partir de l’adresse et le renvoyer au format habituel : latitude|longitude :

    FindResults results = myService.FindAddress(fas);

    FindResult bestResult = results.Results[0];

     

    return bestResult.BestViewableLocation.LatLong.Latitude.ToString() + "|" + bestResult.BestViewableLocation.LatLong.Longitude.ToString();

    Un bon article sur le geocoding avec les services Bing: http://msdn.microsoft.com/en-us/library/bb545004.aspx.

    Nous voila donc avec 2 options pour une manière de plus de retrouver des coordonnées GPS précises : à partir d’une adresse.

    Prochaine étape: Afficher une carte!

  • Pierre's Embedded and Mobile Blog

    La Boite à Outils de l’Application Géolocalisée: Partie 1: GPS, et CellId

    • 2 Comments

    Cet article fait partie d'une série de 3: La Boite à Outils de l'Application Géolocalisée

    Une des révolutions de l'intégration du GPS dans le smartphone, c'est la possibilité pour l'utilisateur de se localiser ou qu'il soit et de trouver des informations en rapport avec sa position: que ce soit une carte ou des directions pour aller quelque part, les horaires de métro de la station d'à coté, les critiques du restaurant devant lequel il passe, etc.

    Windows Mobile propose un certain nombre d’outils pour facilement trouver la localisation de l’utilisateur: avec ou sans GPS. Cet article va détailler un certain nombre d’outils pratiques pour l’application qui voudrait proposer du contenu géolocalisé.

    Récupérer sa position

    Avec le GPS

    Le SDK Windows Mobile propose un code d’exemple (Sample Code) qui expose en .NET les API natives permettant d’accéder au GPS. La première chose à faire est donc de compiler ce sample qui est situé dans C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS. Ceci étant fait, on peut référencer la DLL générée (qui se trouve dans bin/Debug ou bin/Release) dans un projet et ajouter :

    using Microsoft.WindowsMobile.Samples.Location;

    Ceci étant fait, l’utilisation du GPS est pire que simple. Voici un tout petit bout de code qui permet de récupérer la position courante et qui le place dans le champ Text d’un contrôle de type Label:

    Gps myGps = new Gps();

    GpsPosition myPosition = myGps.GetPosition();

    if (myPosition.LatitudeValid && myPosition.LongitudeValid)

    {

        lblLatResult.Text = myPosition.Latitude.ToString();

        lblLngResult.Text = myPosition.Longitude.ToString();

    }

    else

    {

        MessageBox.Show("Can't get a valid position");

    }

    myGps.Close();

     

    Avec l’identifiant de cellule (CellId)

    Si on veut faire de la géolocalisastion sans avoir de GPS (soit parce qu’il n’y en a pas sur le smartphone, soit parce que la couverture GPS ne le permet pas (à l’intérieur d’un bâtiment par exemple) il est possible de récupérer une localisation à quelques dizaines, voire centaines de mètres près, en utilisant l’identifiant de la cellule dans laquelle le téléphone est connecté au réseau de l’opérateur. En effet, il existe des bases de données qui permettent de faire correspondre un identifiant de cellule à un couple latitude/longitude.

    L’identifiant de station de base est en fait constitué de 4 champs différents :

    -          L’identifiant de pays : (Mobile Country Code)

    -          L’identifiant de réseau : (Mobile Network Code)

    -          Le code de zone (Location Area Code)

    -          L’identifiant de la cellule : (Cell Identifier)

    Ces quatre champs peuvent être récupérés avec une fonction de l’API RIL (Radio Interface Layer) : RIL_GetCellTowerInfo.

    Pour utiliser cette API depuis un programme en .NET il faut donc utiliser un wrapper, mais je n’ai pas besoin de le réinventer : un développeur de la communauté .NET, Dale Lane, l’a déjà fait !

    -          Son code : http://dalelane.co.uk/blog/post-images/080312-rilcode.cs.txt

    -          Son Blog : http://dalelane.co.uk/blog/

    J’ai légèrement modifié le code de Dale, qui à l’origine ne retournait pas de Mobile Network Code. Maintenant, la fonction GetCellTowerInfo() retourne les 4 champs séparés par des tirets de la façon suivante : CellId-LAC-MCC-MNC :

    class CellIdWrapper

    {

        // string used to store the CellID string

        private static string celltowerinfo = "";

     

        /*

         * Uses RIL to get CellID from the phone.

         */

        public static string GetCellTowerInfo()

        {

            // initialise handles

            IntPtr hRil = IntPtr.Zero;

            IntPtr hRes = IntPtr.Zero;

     

            // initialise result

            celltowerinfo = "";

     

            // initialise RIL

            hRes = RIL_Initialize(1,                                        // RIL port 1

                                  new RILRESULTCALLBACK(rilResultCallback), // function to call with result

                                  null,                                     // function to call with notify

                                  0,                                        // classes of notification to enable

                                  0,                                        // RIL parameters

                                  out hRil);                                // RIL handle returned

     

            if (hRes != IntPtr.Zero)

            {

                return "Failed to initialize RIL";

            }

     

            // initialised successfully

     

            // use RIL to get cell tower info with the RIL handle just created

            hRes = RIL_GetCellTowerInfo(hRil);

     

            // wait for cell tower info to be returned

            waithandle.WaitOne();

     

            // finished - release the RIL handle

            RIL_Deinitialize(hRil);

     

            // return the result from GetCellTowerInfo

            return celltowerinfo;

        }

     

     

        // event used to notify user function that a response has

        //  been received from RIL

        private static AutoResetEvent waithandle = new AutoResetEvent(false);

     

     

        public static void rilResultCallback(uint dwCode,

                                             IntPtr hrCmdID,

                                             IntPtr lpData,

                                             uint cbData,

                                             uint dwParam)

        {

            // create empty structure to store cell tower info in

            RILCELLTOWERINFO rilCellTowerInfo = new RILCELLTOWERINFO();

     

            // copy result returned from RIL into structure

            Marshal.PtrToStructure(lpData, rilCellTowerInfo);

     

            // get the bits out of the RIL cell tower response that we want

            celltowerinfo = rilCellTowerInfo.dwCellID + "-" +

                            rilCellTowerInfo.dwLocationAreaCode + "-" +

                            rilCellTowerInfo.dwMobileCountryCode + "-" +

                            rilCellTowerInfo.dwMobileNetworkCode;

     

            // notify caller function that we have a result

            waithandle.Set();

        }

     

     

     

        // -------------------------------------------------------------------

        //  RIL function definitions

        // -------------------------------------------------------------------

     

        /*

         * Function definition converted from the definition

         *  RILRESULTCALLBACK from MSDN:

         *

         * http://msdn2.microsoft.com/en-us/library/aa920069.aspx

         */

        public delegate void RILRESULTCALLBACK(uint dwCode,

                                               IntPtr hrCmdID,

                                               IntPtr lpData,

                                               uint cbData,

                                               uint dwParam);

     

     

        /*

         * Function definition converted from the definition

         *  RILNOTIFYCALLBACK from MSDN:

         *

         * http://msdn2.microsoft.com/en-us/library/aa922465.aspx

         */

        public delegate void RILNOTIFYCALLBACK(uint dwCode,

                                               IntPtr lpData,

                                               uint cbData,

                                               uint dwParam);

     

        /*

         * Class definition converted from the struct definition

         *  RILCELLTOWERINFO from MSDN:

         *

         * http://msdn2.microsoft.com/en-us/library/aa921533.aspx

         */

        public class RILCELLTOWERINFO

        {

            public uint cbSize;

            public uint dwParams;

            public uint dwMobileCountryCode;

            public uint dwMobileNetworkCode;

            public uint dwLocationAreaCode;

            public uint dwCellID;

            public uint dwBaseStationID;

            public uint dwBroadcastControlChannel;

            public uint dwRxLevel;

            public uint dwRxLevelFull;

            public uint dwRxLevelSub;

            public uint dwRxQuality;

            public uint dwRxQualityFull;

            public uint dwRxQualitySub;

            public uint dwIdleTimeSlot;

            public uint dwTimingAdvance;

            public uint dwGPRSCellID;

            public uint dwGPRSBaseStationID;

            public uint dwNumBCCH;

        }

     

        // -------------------------------------------------------------------

        //  RIL DLL functions

        // -------------------------------------------------------------------

     

        /* Definition from: http://msdn2.microsoft.com/en-us/library/aa919106.aspx */

        [DllImport("ril.dll")]

        private static extern IntPtr RIL_Initialize(uint dwIndex,

                                                    RILRESULTCALLBACK pfnResult,

                                                    RILNOTIFYCALLBACK pfnNotify,

                                                    uint dwNotificationClasses,

                                                    uint dwParam,

                                                    out IntPtr lphRil);

     

        /* Definition from: http://msdn2.microsoft.com/en-us/library/aa923065.aspx */

        [DllImport("ril.dll")]

        private static extern IntPtr RIL_GetCellTowerInfo(IntPtr hRil);

     

        /* Definition from: http://msdn2.microsoft.com/en-us/library/aa919624.aspx */

        [DllImport("ril.dll")]

        private static extern IntPtr RIL_Deinitialize(IntPtr hRil);

     

    }

    J’intègre le code de Dale dans une classe CellIdWrapper que je rajoute à mon projet dans un fichier séparé.

    Puis, dans le code de mon application, je récupère ces informations de la façon suivante :

    string cellIdInfo = CellIdWrapper.GetCellTowerInfo();

    string[] splittedInfos = cellIdInfo.Split('-');

     

    lblCellIdResult.Text = splittedInfos[0];

    lblLACResult.Text = splittedInfos[1];

    lblMCCResult.Text = splittedInfos[2];

    lblMNCResult.Text = splittedInfos[3];

    Il faut maintenant que je fasse correspondre cet identifiant à une latitude et une longitude. Pour cela, j’ai trouvé 2 bases différentes à utiliser :

    -          Une API « cachée » de Google Maps

    -          Une API ouverte du groupe OpenCellID

    L’API Cachée de Google Maps

    Petit disclaimer obligatoire : il ne s’agit pas d’un API officielle, elle n’est donc pas supportée par Google, il est tout à fait possible qu’un jour ça ne marche plus…

    Encore une fois, pas besoin de tout réécrire depuis zéro, la communauté va travailler pour moi. Un développeur du nom de Neil Young a développé un bout de wrapper qui fait exactement ce que je veux. Problème, son site n’existe plus, heureusement il a été repris :

    -          Article de Wei Meng sur DevX : http://www.devx.com/wireless/Article/39709/1954

    Comme avec le wrapper de Dale Lane, je rajoute ce wrapper dans un fichier séparé, dans une classe que j’appelle GoogleMapsApi.

    static byte[] PostData(int MCC, int MNC, int LAC, int CID,

                           bool shortCID)

    {

        /* The shortCID parameter follows heuristic experiences:

         * Sometimes UMTS CIDs are build up from the original GSM CID (lower 4 hex digits)

         * and the RNC-ID left shifted into the upper 4 digits.

         */

        byte[] pd = new byte[] {

            0x00, 0x0e,

            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

            0x00, 0x00,

            0x00, 0x00,

            0x00, 0x00,

     

            0x1b,

            0x00, 0x00, 0x00, 0x00, // Offset 0x11

            0x00, 0x00, 0x00, 0x00, // Offset 0x15

            0x00, 0x00, 0x00, 0x00, // Offset 0x19

            0x00, 0x00,

            0x00, 0x00, 0x00, 0x00, // Offset 0x1f

            0x00, 0x00, 0x00, 0x00, // Offset 0x23

            0x00, 0x00, 0x00, 0x00, // Offset 0x27

            0x00, 0x00, 0x00, 0x00, // Offset 0x2b

            0xff, 0xff, 0xff, 0xff,

            0x00, 0x00, 0x00, 0x00

        };

     

        bool isUMTSCell = ((Int64)CID > 65535);

     

        if (isUMTSCell)

            Console.WriteLine("UMTS CID. {0}", shortCID ?

                "Using short CID to resolve." : "");

        else

            Console.WriteLine("GSM CID given.");

     

        if (shortCID)

            CID &= 0xFFFF;      /* Attempt to resolve the cell using the

                                GSM CID part */

     

        if ((Int64)CID > 65536) /* GSM: 4 hex digits, UTMS: 6 hex

                                digits */

            pd[0x1c] = 5;

        else

            pd[0x1c] = 3;

     

        pd[0x11] = (byte)((MNC >> 24) & 0xFF);

        pd[0x12] = (byte)((MNC >> 16) & 0xFF);

        pd[0x13] = (byte)((MNC >> 8) & 0xFF);

        pd[0x14] = (byte)((MNC >> 0) & 0xFF);

     

        pd[0x15] = (byte)((MCC >> 24) & 0xFF);

        pd[0x16] = (byte)((MCC >> 16) & 0xFF);

        pd[0x17] = (byte)((MCC >> 8) & 0xFF);

        pd[0x18] = (byte)((MCC >> 0) & 0xFF);

     

        pd[0x27] = (byte)((MNC >> 24) & 0xFF);

        pd[0x28] = (byte)((MNC >> 16) & 0xFF);

        pd[0x29] = (byte)((MNC >> 8) & 0xFF);

        pd[0x2a] = (byte)((MNC >> 0) & 0xFF);

     

        pd[0x2b] = (byte)((MCC >> 24) & 0xFF);

        pd[0x2c] = (byte)((MCC >> 16) & 0xFF);

        pd[0x2d] = (byte)((MCC >> 8) & 0xFF);

        pd[0x2e] = (byte)((MCC >> 0) & 0xFF);

     

        pd[0x1f] = (byte)((CID >> 24) & 0xFF);

        pd[0x20] = (byte)((CID >> 16) & 0xFF);

        pd[0x21] = (byte)((CID >> 8) & 0xFF);

        pd[0x22] = (byte)((CID >> 0) & 0xFF);

     

        pd[0x23] = (byte)((LAC >> 24) & 0xFF);

        pd[0x24] = (byte)((LAC >> 16) & 0xFF);

        pd[0x25] = (byte)((LAC >> 8) & 0xFF);

        pd[0x26] = (byte)((LAC >> 0) & 0xFF);

     

        return pd;

    }

     

    static public string GetLatLng(string[] args)

    {

        if (args.Length < 4)

        {

            return string.Empty;

        }

        string shortCID = "";   /* Default, no change at all */

        if (args.Length == 5)

            shortCID = args[4].ToLower();

        try

        {

            String url = "http://www.google.com/glm/mmap";

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(

                new Uri(url));

            req.Method = "POST";

     

            int MCC = Convert.ToInt32(args[0]);

            int MNC = Convert.ToInt32(args[1]);

            int LAC = Convert.ToInt32(args[2]);

            int CID = Convert.ToInt32(args[3]);

            byte[] pd = PostData(MCC, MNC, LAC, CID,

                shortCID == "shortcid");

     

            req.ContentLength = pd.Length;

            req.ContentType = "application/binary";

            Stream outputStream = req.GetRequestStream();

            outputStream.Write(pd, 0, pd.Length);

            outputStream.Close();

     

            HttpWebResponse res = (HttpWebResponse)req.GetResponse();

            byte[] ps = new byte[res.ContentLength];

            int totalBytesRead = 0;

            while (totalBytesRead < ps.Length)

            {

                totalBytesRead += res.GetResponseStream().Read(

                    ps, totalBytesRead, ps.Length - totalBytesRead);

            }

     

            if (res.StatusCode == HttpStatusCode.OK)

            {

                short opcode1 = (short)(ps[0] << 8 | ps[1]);

                byte opcode2 = ps[2];

                int ret_code = (int)((ps[3] << 24) | (ps[4] << 16) |

                               (ps[5] << 8) | (ps[6]));

                if (ret_code == 0)

                {

                    double lat = ((double)((ps[7] << 24) | (ps[8] << 16)

                                 | (ps[9] << 8) | (ps[10]))) / 1000000;

                    double lon = ((double)((ps[11] << 24) | (ps[12] <<

                                 16) | (ps[13] << 8) | (ps[14]))) /

                                 1000000;

                    return lat + "|" + lon;

                }

                else

                    return string.Empty;

            }

            else

                return string.Empty;

        }

        catch (Exception ex)

        {

            return ex.Message;

        }

    }

    Super simple à réutiliser depuis mon code avec la méthode GetLatLng  à qui on passe un tableau de string avec dans l’ordre MCC, MNC, LAC et CellId, et qui me renvoie dans une chaine de caractères la latitude et la longitude séparée par un caractère ‘|’  (pipe) :

    string result = GoogleMapsApi.GetLatLng(args);

     

    string[] splittedResult = result.Split('|');

    lblLatResult.Text = splittedResult[0];

    lblLngResult.Text = splittedResult[1];

    L’API ouverte du groupe OpenCellID

     

    OpenCellId est une initiative qui vise à crowdsourcer un maximum de coordonnées de tour cellulaires. C’est un peu moins précis que la base de données de Google, mais c’est en participant que ca s’améliorera J

    -          Le site web : http://opencellid.org/

    -          L’application Windows Mobile pour aider à crowdsourcer les informations : http://opencellclient.sourceforge.net/

    Pour utiliser l’API OpenCellID, il faut demander une clé d’API, qui est envoyée automatiquement lorsqu’on s’enregistre sur le site d’OpenCellID : http://opencellid.org/users/signup.

    L’API OpenCellID est très simple : c’est du REST, donc j’envoie une requête http, et ils me renvoient les informations dans du XML : l’API est détaillée à l’adresse suivante : http://opencellid.org/api

    Pour plus d’homogénéité dans mon projet je vais encore créer un autre fichier avec à l’intérieur une classe OpenCellIdApi qui contiendra, comme le wrapper pour l’API Google, une fonction GetLatLng, avec le même tableau d’arguments en entrée, et la même chaine de caractères en sortie.

    Voici à quoi ressemble du code pour interroger la base OpenCellID :

    struct OCIWebServiceResponse

    {

        public string lat;

        public string lng;

        public string status;

        public string nbSamples;

        public string range;

     

    }

     

    static public string GetLatLng(string[] args)

    {

        if (args.Length < 4)

        {

            return "Not Enough Arguments";

        }

        OCIWebServiceResponse response;

        StringBuilder urlArgs = new StringBuilder("key=" + myApiKey);

        urlArgs.Append("&mnc=" + args[1]);

        urlArgs.Append("&mcc=" + args[0]);

        urlArgs.Append("&lac=" + args[2]);

        urlArgs.Append("&cellid=" + args[3]);

        try

        {

            WebRequest myRequest = WebRequest.Create(new Uri(BaseUrl + urlArgs.ToString()));

            WebResponse myResponse = myRequest.GetResponse();

            XmlReader myReader = XmlReader.Create(myResponse.GetResponseStream());

            try

            {

                response = (from rsp in XDocument.Load(myReader).Descendants("rsp")

                            let cell = rsp.Descendants("cell").Single()

                            select new OCIWebServiceResponse

                            {

                                status = rsp.Attribute("stat").Value,

                                lat = cell.Attribute("lat").Value,

                                lng = cell.Attribute("lon").Value,

                                nbSamples = cell.Attribute("nbSamples").Value,

                                range = cell.Attribute("range").Value

                            }).Single();

            }

            finally

            {

                myReader.Close();

                myResponse.Close();

            }

        }

        catch (Exception ex)

        {

            return ex.Message;

        }

        if (response.status != "ok")

            return "Response from OpenCellId not OK!";

        else

            return response.lat + "|" + response.lng;

    }

     

    Pour parser la réponse en XML, j’utilise une requête LINQ et une structure « maison » qui rend mon code plus lisible.

    Point important, c’est du code de démo, la gestion des erreurs est assez pauvre, même carrément mauvaise : il ne faudrait pas retourner une chaine de caractère comme je le fais mais plutôt lever une exception !

    Prochaine étape: Geocoding d'adresse!

  • Pierre's Embedded and Mobile Blog

    Windows Embedded s’offre un tout nouveau site en Français

    • 0 Comments

    En remplacement d’un site produit vieillissant, et en complément du centre de développement embedded sur MSDN, la division Windows Embedded vient de localiser complètement son site web en Français: http://www.windowsembedded.fr. Vous y retrouverez les dernières versions des produits, les nouveautés, les liens utiles, les certifications… bref, tout ce qu’il faut savoir sur l’embarqué chez Microsoft :) Consécration s’il en est, nous avons même le droit à un lien en homepage du http://www.microsoft.fr (la classe!)

  • Pierre's Embedded and Mobile Blog

    Le Porting Kit du .NET MicroFramework est maintenant disponible gratuitement

    • 0 Comments

    Petit à petit, le .NET MicroFramework va devenir Open Source. C’est ce qu’annonçait Colin Miller, la tête pensante de l’équipe, sur son blog dont je vous repointe l’historique:

    Il annonce aujourd’hui que le Porting Kit est disponible gratuitement sur download.microsoft.com:

    Tout ça fleure relativement bon, et je prédit du bon contenu autour du .NET MicroFramework cet été :)

  • Pierre's Embedded and Mobile Blog

    Débuter avec Windows Mobile: facile avec le coach!

    • 0 Comments

    A l’occasion du Mobility Briefing, la grand-messe de la mobilité de Microsoft France, nous avons lancé le premier atelier du coach Windows Mobile. C’est le point de départ idéal pour commencer à se former au développement mobile: c’est un tutoriel qui regroupe à la fois un webcast, un article, un cahier d’exercice, en C# et en VB.NET, et ce premier atelier explique l’installation des outils, l’écriture du premier programme, l’utilisation de l’émulateur, et du debugger.

    Ce n’est que le début d’une grande vague de contenu qui prépare l’arrivée de Windows Mobile 6.5 dans les bacs! Déjà de nombreux autres ateliers vont voir le jour au cours des semaines à venir, en parallèle d’une semaine spéciale Mobilité dans l’opération “J’en ai rien à coder!” de cet été, d’une série d’articles et de webcasts techniques sur des sujets pointus (connection manager, openGL, etc). Si vous ne savez pas quoi faire avec votre laptop sur la plage cet été, je crois que vous venez de trouver!

    J’en profite pour rajouter les quelques liens qu’on me demande souvent:

  • Pierre's Embedded and Mobile Blog

    Le SDK de Windows Mobile 6.5 est sorti!!

    • 0 Comments

    Woooohhooooooo! depuis le temps qu’on l’attendait celui là! Voici le lien à partir duquel vous pourrez télécharger les émulateurs pour Windows Mobile 6.5 Pro mais aussi standard, et en versions localisées s’il vous plait!

    Bien entendu, ces émulateurs contiennent le nouveau home screen et les contrôles reskinnés et pilotables au doigt, mais également, le moteur de Widgets, IE Mobile 6, et même… Roulement de tamblours… la petite surprise… (tambours plus forts…) La Gesture API! Oui mesdames et messieurs, une API pour comprendre les gestes de votre utilisateur (pour écran tactiles uniquement donc…) et les utiliser dans votre application: et comme on ne fait pas les choses à moitié, on la livre avec un code d’exemple, situé dans le dossier Samples du SDK

    On parlera de ces nouveautés beaucoup plus en détail sur ce blog d’ici très peu!

    Et pour le plaisir, encore une fois, le lien!

  • Pierre's Embedded and Mobile Blog

    En direct de la Mobile Incubation Week à Londres!

    • 3 Comments

    J’en parlais dans un billet précédent, et c’est maintenant un réalité: la Mobile Incubation Week a démarré aujourd’hui. 8 startups sont hébergées pour une semaine dans les bureaux de Microsoft à Londres, en partenariat avec Muranosoft et Avanade pour une semaine de développement intensive avec de l’aide de coachs, architectes, et développeurs supplémentaires, en appliquant des méthodes de développement agile et d’eXtreme Programming :) Le blog de la Microsoft Startup Zone annonçait déjà les sélectionnés la semaine dernière, je vous laisse consulter l’info à la source :)

    Ce type d’évènement a déjà été un succès aux Etats-Unis, et semble bien parti en Angleterre. Peut-être le verrons nous répliqué en France? Qu’en pensez-vous? Des volontaires peut-être?

  • Pierre's Embedded and Mobile Blog

    Imagine Cup 2009: Finales Françaises, énormes!

    • 1 Comments

    J’ai eu la chance cette année de siéger au jury de la catégorie Embedded Development pour les finales françaises. Cette année fut un grand cru. J’étais l’an dernier aux finales mondiales, et je peux dire sans exagérer que les 3 finalistes que nous avons vu cette année étaient 3 projet réellement d’un niveau de finale mondiale. Malheureusement on ne peut en envoyer qu’un et le choix a été difficile. En compétition:

    L’équipe ESIEArk (de l’ESIEA) et leur projet “S.W.E.E.T”: un système de franchissement de marche pour fauteuils roulants, avec GSM, GPS pour localisation et trajets optimisés pour les handicapés, liens avec les bases de données d’endroits accessibles aux handicapés, et appel d’urgence en cas de problème".

    L’équipe DOTS-ADM, de l’EPSI: un distributeur de médicaments contre la tuberculose à destination des camps de réfugiés dans les pays du tiers monde,  avec suivi du traitement, remontée d’information aux médecins, alertes en cas de non prise du traitement

    L’équipe Emanon et leur Projet E.E.A, de l’EPSI: un système d’uniformisation et d’assistance aux services de secours, avec prise du diagnostic sur le site de l’accident, remontée du dossier médical par GSM, suggestion du meilleur hôpital en fonction de critères tels que proximité, spécialisation, disponibilité de lits, etc. et bien entendu transfert automatique du dossier à l’arrivée à l’hôpital.

    Le résultat final étant:

    • Médaille d’Or, direction le Caire pour la finale mondiale: ESIEArk
    • Médaille d’Argent, une xbox360 elite pour chacun: Emanon
    • Médaille de Bronze, une xbox360 Arcade chacun: DOTS-ADM

    Il n’est pas question de discuter ici des raison de ces résultats et de ce qui s’est passé durant les délibérations, ni même les points forts et faibles de ces équipes. La seule chose que je puisse dire (répéter) est que tous ces projets étaient d’une grande qualité, et que quand on constate le travail, l’engagement, le professionnalisme et la grandeur de la cause que servent ces projets, on ne peut qu’espérer que, gagnant ou pas, ils suivent leur chemin également en dehors de l’Imagine Cup, vers le monde professionnel, et celui des ONG. Comme je l’ai dit à chacun des finalistes, vient un moment ou l’Imagine Cup n’est pas une fin en soit, mais une excuse pour démarrer quelque chose qui dépasse largement le cadre d’une compétition entre étudiants. Et Microsoft sera là pour les coacher :)

    Message spécial aux équipes de cette année: Chapeau les gars, bon courage pour la suite, et vous avez mes coordonnées ;)

  • Pierre's Embedded and Mobile Blog

    Un client riche pour Facebook sur Windows Mobile

    • 2 Comments

    Pour tous les facebook-addicts, un client riche existe maintenant pour les terminaux Windows Mobile 6 et plus: il est téléchargeable ici:

    http://www.microsoft.com/windowsmobile/en-us/downloads/facebook.mspx

    Jetez-vous dessus, il marche vraiment bien!

  • Pierre's Embedded and Mobile Blog

    Les inscriptions pour Windows Marketplace for Mobile sont ouvertes!

    • 2 Comments

    Tout est dans le titre :) ça y est, vous pouvez vous enregistrer, car la France est un des 29 pays dans lequel Marketplace est lancé en premier, en même temps que les US!

    Tous les détails sur L'onglet Marketplace du Portail Global des développeurs Windows Mobile et pour ceux qui se demanderaient comment ça fonctionne, c’est vers la FAQ qu’il faut se tourner!

    Il faut maintenant tout faire pour peupler cette Marketplace, développeurs, unissez-vous! je prends toutes les bonnes idées, peut-être même que j’ai des cadeaux pour les plus volontaires d’entre vous. Je n’en dis pas plus, vous savez comment me joindre :)

  • Pierre's Embedded and Mobile Blog

    La Mobile Incubation Week débarque en Europe!

    • 2 Comments

    imageimage

    Vous avez une idée géniale pour une application mobile ? Vous voulez être une des premières applications disponibles sur Windows Marketplace for Mobile à l’automne 2009 ?

    Microsoft organise et sponsorise la première semaine dédiée à l’incubation mobile en Europe, la Mobile Incubation Week pour aider des startups à réaliser leurs plus grandes idées. Le premier événement aura lieu dans les bureaux de Microsoft à Londres, Royaume-Uni du 1er au 5 juin prochains.

    Cet événement réunira des gourous techniques de Microsoft, des vétérans de la technologie qui ont développé leurs propres applications Windows Mobile, des Venture capitalists d’influence mais également des experts des nouvelles technologies. Nos développeurs vont mener des discussions interactives, fournir des conseils et faciliter le développement d’applications sur la plateforme Windows Mobile. A la fin de la semaine d’incubation, un jury sélectionnera le meilleur projet pour lui remettre un prix et organiser des opportunités de couverture en presse.

    Cet événement est entièrement gratuit mais vous devrez prendre en charge les frais de transport. Chaque équipe est constituée au maximum de 3 (trois) personnes – une business et 1 ou 2 techniques. Toutes les startups peuvent être candidates qu’elles aient une application mobile développée aujourd’hui ou pas. La seule condition de participation est d’envisager de développer une nouvelle application sur Windows Mobile 6.1 ou 6.5.

    Les places sont limitées. Afin de présenter votre candidature, vous devrez envoyer les informations suivantes en Anglais à mobincub@microsoft.com:

    • Information de contact : nom du/des candidats, nom de la société, adresse e-mail de contact/numéro de téléphone/adresse postale
    • Pays/ville d’origine de la société
    • Taille de la société et date de création
    • Présentation de l’idée qui concourt
    • La raison de votre participation
    • Pourquoi votre application est unique à Windows Mobile

    NB : Merci de ne pas envoyer de contenu confidentiel car aucun accord de confidentialité a été signé.

    Les applications seront jugées selon la pertinence de l’équipe, l’originalité et la créativité de l’idée et son caractère unique à Windows Mobile. La date buttoir pour l’envoi de votre candidature est le 10 mai 2009 alors dépêchez vous de nous présenter vos idées révolutionnaires !

    Pour toute question complémentaire, vous pouvez vous adresser à mobincub@microsoft.com

  • Pierre's Embedded and Mobile Blog

    Training Windows Embedded CE à Paris du 8 au 11 Juin

    • 1 Comments

    Des trainings sont régulièrement organisés par nos partenaires, et l’un des plus actifs est Adénéo Embedded. C’est donc avec plaisir que je vous fait part de leur prochaine session autour de Windows Embedded CE 6.0 R2: bonus, le hardware est offert :)

    Adeneo Embedded, partenaire Gold Windows Embedded, organise en Europe et aux USA des sessions de formations Windows CE 6.0 R2 en 10 modules et offre gratuitement à chaque participant la carte de développement ARM utilisée pour la formation (valeur US$1500), pour plus de détails, cliquez ici.

    Les prochaines sessions ont lieu

    • Du 8 au 11 Juin 2009 à Paris, FR - EMEA
    • Du 8 au 11 Juin 2009 à Denver, CO - US

    Le programme de la formation est le suivant :

    • Module 1: Fonctionnalités de CE 6.0 R2
    • Module 2: Les outils de développement de Plateformes
    • Module 3: Le fonctionnement interne de l’OS
    • Module 4: Les composants OS de CE 6.0 R2
    • Module 5: Le processus de génération CE 6.0 R2 (Build)
    • Module 6: Le  Board Support Package (BSP)
    • Module 7: Les concepts des Device Driver
    • Module 8: Personnaliser un OS Design
    • Module 9: Développement d’application
    • Module 10: Tests et vérifications du Systeme

    Pour les informations et l'inscription, contactez sales@adeneo-embedded.com

    Programme complet de formation Windows Embedded CE 6.0 par Adeneo Embedded: cliquez ici

  • Pierre's Embedded and Mobile Blog

    Utiliser l’accéléromètre, les LEDs, la “carte graphique”, de votre terminal Windows Mobile (et d’autres trucs cools)

    • 0 Comments

    Les 18 derniers mois ont vu l’apparition d’accéléromètres (parfois appelés, un peu restrictivement, capteurs de position ou d’orientation) dans de nombreux terminaux, y compris sous Windows Mobile. Alors forcément, les développeurs aimeraient bien jouer avec cette nouvelle méthode d’interagir avec l’utilisateur: oui mais voila, le SDK Windows Mobile ayant été conçu avant la généralisation de ces interfaces, il n’y a pas d’API standardisées… Cela ne veut pas dire qu’on ne peut y accéder! En effet, de plus en plus, les fabricants fournissent eux-même les API: j’en veux pour preuve Samsung qui a carrément développé un SDK spécifique pour ses terminaux, qui permet d’accéder à l’accéléromètre, aux LEDs, au retour haptique, etc. ce post de l’équipe Windows Mobile fait le point dessus.

    D’autres initiatives, indépendantes des fabricants de matériels, ont également vu le jour: Par exemple la Unified Sensor API de Koush, sous forme de projet CodePlex, qui permet, en plus de l’accéléromètre, d’utiliser le capteur de lumière, le capteur de présence du stylet.

    Dans la catégorie des SDK “supplémentaires” qui permettent d’accéder à des fonctionnalités du téléphone spécifique au fabricant, le SDK de Sony-Ericsson ne permet pas d’accéder à un accéléromètre (il n’y en a pas) mais par contre à de l’accélération 3D en OpenGL… de quoi faire des petits panels sympas et des applications qui poutrent!

  • Pierre's Embedded and Mobile Blog

    Création de projets “Smart Device” et IE8

    • 0 Comments

    Certains d’entre vous ont surement déjà pu constater le soucis: après l’installation de la dernière version d’IE8, certains wizards de Visual Studio 2005 et 2008 ne fonctionnent plus notamment:

    • Add Function
    • Add Variable
    • Smart Device – New Project
    • Smart Device – Add Class

    Cela n’affecte que les wizards pour le développement C++ (pas de soucis avec le dev en code managé)

    Donc pour résoudre le problème la solution est la suivante (attention, pour VS2005 il faut que le SP1 soit installé):

    • Ouvrez regedit (la version 32bits si vous avez un système 64bits)
    • Dans HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones, créer une nouvelle clé “1000” (si elle n’est pas déjà là)
    • Dans cette clé, créez une entrée de type DWORD avec les valeurs suivantes:
      • Name = 1207
      • Type = REG_DWORD
      • Data = 0x000000

    L’explication en détail est dispo sur le blog de l’équipe Visual Studio dans le post original (le mien n’est qu’une bête traduction…)

  • Pierre's Embedded and Mobile Blog

    Annonces! Windows Mobile 6.5 au CTIA: On pourra publier gratuitement les mises à jour de son appli!

    • 0 Comments

    le CTIA démarre, et Windows Mobile arrive avec son lot d’annonces… que vous pouvez retrouver un peu partout sur le net, mais une sur laquelle j’avais envie d’insister, c’est le changement sur les conditions de mises à jour des applications sur Windows Marketplace for Mobile:

    • 99 euros par an pour 5 applis, puis 99 euros de plus par application supplémentaire
    • 70% des gains pour le développeur
    • Gratuité des mises à jours de son application sur le marketplace :) comme quoi quand la communauté s’exprime, Microsoft écoute.
    • Pour les utilisateurs: vous aurez 24h pour changer d’avis si l’application ne vous plait pas!!! (énorme!)

    On a aussi dit que nous avions travaillé avec des stylistes/designers de renom pour des zoulies interfaces, et de nombreux grands partenaires vont annoncer leur support de Marketplace: Facebook, Netflix, Gameloft, Namco, Pandora, Slingmedia, MySpace, etc etc

    Bref, on essaye de faire les choses bien. on espère que ca vous plait ;)

  • Pierre's Embedded and Mobile Blog

    Annonces! MSDN Embedded, & Windows Embedded Server

    • 1 Comments

    Durant l’ESC West, le groupe Windows Embedded annonce 2 nouveautés qui viennent renforcer la vision “Software+Services” dans l’embarqué:

    MSDN Embedded, est un nouvel abonnement MSDN dédié au développeurs embarqués, qui donne accès à tous les outils de développement Embedded, ainsi qu’a un mécanisme de mise à jour spécifique, réservé aux abonnés, qui passe par l’intermédiaire d’un client spécial: le Windows Embedded Developer Update. Ce mécanisme permettra de recevoir en direct les updates des outils, des OS, mais aussi éventuellement des drivers et des BSP. Un gros plus pour simplifier l’utilisation de nos outils.

    Windows Embedded Server, c’est tout simplement l’intégration de Windows Server dans la gamme Embedded, donc avec la possibilité “d’enfouir” dans des équipements spécifiques les fonctionnalités de nos OS serveurs. Techniquement, rien de particulier cependant.

    Plus d’infos sur ces annonces ici et ici.

  • Page 7 of 10 (240 items) «56789»