Donnez votre avis !                   Depuis votre smartphone, sur :                    http://notes.mstechdays.fr    De n...
Géolocalisation, Speech, Intégration        Tirez parti des nouveautés de Windows Phone 8                                 ...
Tirez parti des nouveautés de Windows Phone 8        AGENDAPhone
Quelles sont les autres nouveautés ?     Trucs et astuces pour rendre votre application Windows     Phone 8 plus visible  ...
De quoi parle cette session?                  Contrôles, Résolutions        Text To Speech                  Launchers     ...
Tirez parti des nouveautés de Windows Phone 8        CONTRÔLESPhone
LongListSelector                                      • Utilisez LongListSelector en lieu et place du                     ...
LongListSelector         CONTRÔLESTirez parti des nouveautés de Windows Phone 8
Contrôles            • LongListSelector, Pivot et Panorama placés en ROM               – Amélioration globale des performa...
Tirez parti des nouveautés de Windows Phone 8        RÉSOLUTIONS D’ÉCRANPhone
Résolutions d’écran                      WVGA                      WXGA         720p                      800 x 480       ...
Résolutions d’écran     • Adaptez votre Layout !!        – Evitez de fixer les valeurs des propriétés Width et Height,    ...
Résolutions d’écran      public enum Resolutions { WVGA, WXGA, HD720p };      public static class ResolutionHelper      { ...
Résolutions d’écran      using System.Windows.Media.Imaging;      public class MultiResImageChooserUri      {         publ...
Tirez parti des nouveautés de Windows Phone 8        LAUNCHERS & CHOOSERSPhone
Nouveaux Launchers     •   Meilleur moyen d’interagir avec les fonctionnalités natives du téléphone, ils         permetten...
LAUNCHERSTirez parti des nouveautés de Windows Phone 8
Tirez parti des nouveautés de Windows Phone 8        CARTOGRAPHIEPhone
Les nouveautés en Géolocalisation     • Nouvelle API Windows Phone Runtime       location           Convergente avec l’API...
Avant toute chose…     2 conditions pour avoir le droit de parler aux Location API :     • Le déclarer dans le manifest de...
Où se cache mon utilisateur ?     • Connaître la position du téléphone juste       une fois :           Geolocator.GetGeop...
Contrôler les sources utilisées ?     • No possiblo     • Utilisez la propriété DesiredAccuracy du Geolocator       (high ...
Localisation 1 Shot avec     GetGeopositionAsync        private async void OneShotLocation_Click(object sender, RoutedEven...
Tirez parti des nouveautés de Windows Phone 8   26
Votre application passe à l’état Dormant, so     what?     • Un nouvel état de l’application : RunningInBackground     • A...
Que faire dans cet état ?     (RunningInBackground)     • Arrêter tout ce qui ne concerne pas la localisation     • Ne pas...
Run In BackgroundTirez parti des nouveautés de Windows Phone 8   29
Afficher une carte dans Windows Phone 8     • Données Nokia         110+ pays, cartes vectorielles     • Cartes offline   ...
Cartographic Mode         Road (default)         Aerial          Hybrid   TerrainTirez parti des nouveautés de Windows Pho...
ColorMode : Light ou Dark ?Tirez parti des nouveautés de Windows Phone 8   32
MapsTirez parti des nouveautés de Windows Phone 8   33
Où sont passés les pushpins ?     • Partis !     • 2 solutions :        • Créer des pushpins custom en dessinant          ...
Tirez parti des nouveautés de Windows Phone 8        TEXT2SPEECHPhone
Text2Speech – Les bases                                      •   Qu’est ce que c’est ?                                    ...
Text2Speech – Technique avancée                                      •   Le SSML = fichier XML                            ...
Speech – Les bases + AvancésTirez parti des nouveautés de Windows Phone 8   38
Text2Speech – Exemple d’utilisation                                      •   Accessibilité au malvoyant                   ...
Speech – AccessibilitéTirez parti des nouveautés de Windows Phone 8   40
Tirez parti des nouveautés de Windows Phone 8        SPEECHRECOGNITIONPhone
Recognition – Les bases                                      •   Qu’est ce que c’est ?                                    ...
Recognition – Résultat                                      • Une chaine de caractère                                     ...
Recognition – Avancé                                      •   Gérer la grammaire de son application (préfixé en           ...
Speech – Monsieur et Madame !Tirez parti des nouveautés de Windows Phone 8   45
Tirez parti des nouveautés de Windows Phone 8        APP TO APP COMMUNICATIONPhone
AppToApp – Les bases                                      •   Qu’est ce que c’est ?                                      •...
AppToApp – Avancé                                      •   Mise en place : association URI                                ...
AppToApp – Code UriMapper       public override Uri MapUri(Uri uri)              {                  // on decode la chaine...
AppToApp – Je m’auto-lance !Tirez parti des nouveautés de Windows Phone 8   50
Et ensuite ?Trucs et astuces pour rendre votre application Windows Phone 8plus visibleMardi 12 février : 16h00-17h00 (nive...
Et ensuite ?Booster votre application Windows Phone 8Mercredi 13 février : 17h30-18h30 (niveau : 300)Bien soumettre et mon...
Développeurs                                                         Pros de l’IT http://aka.ms/generation-app       Forme...
Questions ?
Prochain SlideShare
Chargement dans…5
×

Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows Phone 8

435 vues

Publié le

Windows Phone regorge d’APIs pour vous simplifier la vie et intégrer au mieux votre application dans le système. Si vous entendez que quelques lignes suffisent pour enregistrer un rendez-vous dans le calendrier de votre utilisateur, vous ne rêvez pas ! Nous ferons le tour des différents services à disposition pour créer facilement une belle expérience dans votre application : Géolocalisation, Cartographie, intégration dans les contacts, App to App, Speech, etc.

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
435
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1
Actions
Partages
0
Téléchargements
12
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Notation
  • 2 min
  • Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
  • Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
  • Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
  • Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
  • Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
  • The application can use the Geolocator.DesiredAccuracy property to control the data accuracy level it expects the Geolocation API to provide. The Geolocator.DesiredAccuracy property’s value can be either Default or High. The app should only request High accuracy location data when it is necessary. Why? In general it consumes more battery power and network bandwidth to achieve higher data accuracy. Some high accuracy location services may also involve monetary charges by the wireless network operators.When receiving the location data from Windows Phone Runtime, the app can check the Accuracy property of the Geocoordinate object to determine if the accuracy (in meters) fits the app’s needs.
  • This method initializes the Geolocator object and sets the DesiredAccuracyInMeters property. Next, the GetGeopositionAsync method is called. This method attempts to obtain the phone’s current location. It does this asynchronously so that the UI thread is not blocked while the location is obtained. You can use the await operator to place code after the asynchronous call that will be executed after the call finishes. This requires this handler method to be declared async. The whole location operation is wrapped in a try block in case any exceptions are thrown. If an UnauthorizedAccessException exception is thrown while you are developing, it could mean that you haven’t included ID_CAP_LOCATION in your app manifest. If this happens after your app has been deployed, it may mean that the user has disabled location for this app in the phone Settings.In the call to Geolocator.GetGeopositionAsync, the parameters havethe following meaning:maximumAge: If a location is in the cache and its age is less than or equal to this parameter, the cached value is returned rather than a new position retrievedTimeout: If a cached location is not available, this timeout applies to attempts to get a new position fix. A TimeoutExceeded exception is thrown if no position can be retrieved within this time limit.
  • ++ Cartographie meilleure et plus rapide car :VectorielUtilise les cartes offline
  • Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
  • LE CODE D’ABORD !
  • Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
  • COOODE !
  • Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
  • Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows Phone 8

    1. 1. Donnez votre avis ! Depuis votre smartphone, sur : http://notes.mstechdays.fr De nombreux lots à gagner toutes les heures !!! Claviers, souris et jeux Microsoft… Merci de nous aider à améliorer les TechDayshttp://notes.mstechdays.fr
    2. 2. Géolocalisation, Speech, Intégration Tirez parti des nouveautés de Windows Phone 8 Samuel Blanchard Windows Phone MVP - Naviso @samoteph Julie Knibbe Technical Evangelist - Microsoft France @julieknibbe Jean-Sébastien Dupuy Technical Evangelist - Microsoft France @dupuyjsPhone / mobilité
    3. 3. Tirez parti des nouveautés de Windows Phone 8 AGENDAPhone
    4. 4. Quelles sont les autres nouveautés ? Trucs et astuces pour rendre votre application Windows Phone 8 plus visible Mardi 12 février : 16h00-17h00 (niveau : 200) Plus près, plus près… NFC et la communication à proximité dans Windows 8 et Windows Phone 8 Jeudi 14 février : 14h30-15h30 (niveau : 200)Tirez parti des nouveautés de Windows Phone 8
    5. 5. De quoi parle cette session? Contrôles, Résolutions Text To Speech Launchers Reconnaissance Vocale Cartographie Communication App To AppTirez parti des nouveautés de Windows Phone 8
    6. 6. Tirez parti des nouveautés de Windows Phone 8 CONTRÔLESPhone
    7. 7. LongListSelector • Utilisez LongListSelector en lieu et place du ListBox – Mêmes fonctionnalités mais meilleures performances • Les bénéfices additionnels – Grouped Lists (IsGroupingEnabled) – Jump List pour faciliter le déplacement entre les groupes, même comportement que le Contact HubTirez parti des nouveautés de Windows Phone 8
    8. 8. LongListSelector CONTRÔLESTirez parti des nouveautés de Windows Phone 8
    9. 9. Contrôles • LongListSelector, Pivot et Panorama placés en ROM – Amélioration globale des performances – Empreinte mémoire du Panorama plus réduite • Le contrôle WebBrowser repose désormais sur Internet Explorer 10 – Supporte HTML5 • Windows Phone Toolkit (Octobre 2012) – Téléchargez WPToolkit depuis NuGet – Contrôles PhoneTextBox, HubTile, …Tirez parti des nouveautés de Windows Phone 8
    10. 10. Tirez parti des nouveautés de Windows Phone 8 RÉSOLUTIONS D’ÉCRANPhone
    11. 11. Résolutions d’écran WVGA WXGA 720p 800 x 480 1280 x 768 1280 x 720 15:9 15:9 16:9Tirez parti des nouveautés de Windows Phone 8
    12. 12. Résolutions d’écran • Adaptez votre Layout !! – Evitez de fixer les valeurs des propriétés Width et Height, attention aux alignements et marges – Privilégiez l’utilisation des Grilles et des formats * et Auto • Graphiques – Utilisez les images ciblant la résolution WXGA, le téléphone adapte correctement ce format en fonction de la résolution – Pour allez plus loin, App.Current.Host.Content.ScaleFactor pour charger les graphiques appropriésTirez parti des nouveautés de Windows Phone 8
    13. 13. Résolutions d’écran public enum Resolutions { WVGA, WXGA, HD720p }; public static class ResolutionHelper { private static bool IsWvga { get { return App.Current.Host.Content.ScaleFactor == 100; } } private static bool IsWxga { get { return App.Current.Host.Content.ScaleFactor == 160; } } private static bool Is720p { get { return App.Current.Host.Content.ScaleFactor == 150; } } public static Resolutions CurrentResolution { get { if (IsWvga) return Resolutions.WVGA; else if (IsWxga) return Resolutions.WXGA; else if (Is720p) return Resolutions.HD720p; else throw new InvalidOperationException("Unknown resolution"); } } }Tirez parti des nouveautés de Windows Phone 8
    14. 14. Résolutions d’écran using System.Windows.Media.Imaging; public class MultiResImageChooserUri { public Uri BestResolutionImage { get { switch (ResolutionHelper.CurrentResolution) { case Resolutions.HD720p: return new Uri("Assets/MyImage.screen-720p.jpg", UriKind.Relative); case Resolutions.WXGA: return new Uri("Assets/MyImage.screen-wxga.jpg", UriKind.Relative); case Resolutions.WVGA: return new Uri("Assets/MyImage.screen-wvga.jpg", UriKind.Relative); default: throw new InvalidOperationException("Unknown resolution type"); } } } }Tirez parti des nouveautés de Windows Phone 8
    15. 15. Tirez parti des nouveautés de Windows Phone 8 LAUNCHERS & CHOOSERSPhone
    16. 16. Nouveaux Launchers • Meilleur moyen d’interagir avec les fonctionnalités natives du téléphone, ils permettent d’effectuer des tâches comme : – Prendre une photo – Ajouter un contact – Envoyer un Mail ou un SMS – Etc… • Nouveaux Launchers sous Windows Phone 8 : – SaveAppointmentTask : Ajout d’un nouveau rendez-vous dans le calendrier. – ShareMediaTask : Partagez vos medias ! – MapsTask : Cherchez les points d’intérêts autours de vous ! – MapsDirectionsTask : Perdu ? Obtenez votre itinéraire … Et MapDownloaderTask, MapUpdaterTask dans la suite du programme. • Attention au TombstoningTirez parti des nouveautés de Windows Phone 8
    17. 17. LAUNCHERSTirez parti des nouveautés de Windows Phone 8
    18. 18. Tirez parti des nouveautés de Windows Phone 8 CARTOGRAPHIEPhone
    19. 19. Les nouveautés en Géolocalisation • Nouvelle API Windows Phone Runtime location Convergente avec l’API Windows 8 location – API Windows Phone 7.1 supportées – System.Device.Location.GeoCoordinateWatcher et autresTirez parti des nouveautés de Windows Phone 8
    20. 20. Avant toute chose… 2 conditions pour avoir le droit de parler aux Location API : • Le déclarer dans le manifest de l’application : ID_CAP_LOCATION • Demander l’accord de l’utilisateurTirez parti des nouveautés de Windows Phone 8 20
    21. 21. Où se cache mon utilisateur ? • Connaître la position du téléphone juste une fois : Geolocator.GetGeopositionAsync • Tracker les changements de position : Geolocator.PositionChanged && Geolocator.StatusChangedTirez parti des nouveautés de Windows Phone 8
    22. 22. Contrôler les sources utilisées ? • No possiblo • Utilisez la propriété DesiredAccuracy du Geolocator (high / default) ou DesiredAccuracyInMeters • Dans tous les cas, c’est lui qui décide - Accuracy + Power WiFi GPS + Speed - Wilderness +/- Accuracy + Accuracy +/- Power - Power +/- Speed - Speed +/- Urban areas - IndoorsTirez parti des nouveautés de Windows Phone 84/15/2013 ‹#›
    23. 23. Localisation 1 Shot avec GetGeopositionAsync private async void OneShotLocation_Click(object sender, RoutedEventArgs e) { Geolocator geolocator = new Geolocator(); geolocator.DesiredAccuracyInMeters = 50; try { Geoposition geoposition = await geolocator.GetGeopositionAsync( maximumAge: TimeSpan.FromMinutes(5), timeout: TimeSpan.FromSeconds(10) ); LatitudeTextBlock.Text = geoposition.Coordinate.Latitude.ToString("0.00"); LongitudeTextBlock.Text = geoposition.Coordinate.Longitude.ToString("0.00"); } catch (UnauthorizedAccessException) { // the app does not have the right capability or the location master switch is off StatusTextBlock.Text = "location is disabled in phone settings."; } }Tirez parti des nouveautés de Windows Phone 8
    24. 24. Tirez parti des nouveautés de Windows Phone 8 26
    25. 25. Votre application passe à l’état Dormant, so what? • Un nouvel état de l’application : RunningInBackground • Actif tant que l’application continue de tracker la position running activated deactivat Running deactivated ed in bckgd suspend tombstoned edTirez parti des nouveautés de Windows Phone 8
    26. 26. Que faire dans cet état ? (RunningInBackground) • Arrêter tout ce qui ne concerne pas la localisation • Ne pas toucher à l’UI (ça sert à rien) <Application.ApplicationLifetimeObjects> <!--Required object that handles lifetime events for the application--> <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing“ Activated="Application_Activated" Deactivated="Application_Deactivated“ RunningInBackground="Application_RunningInBackground"/> </Application.ApplicationLifetimeObjects>Tirez parti des nouveautés de Windows Phone 8
    27. 27. Run In BackgroundTirez parti des nouveautés de Windows Phone 8 29
    28. 28. Afficher une carte dans Windows Phone 8 • Données Nokia 110+ pays, cartes vectorielles • Cartes offline Launchers MadDownloader/MapUpdater • Calcul d’itinéraires / Géocodage – via Maps Services • Dépréciation de l’ancient Bing Map ControlTirez parti des nouveautés de Windows Phone 8
    29. 29. Cartographic Mode Road (default) Aerial Hybrid TerrainTirez parti des nouveautés de Windows Phone 8 31
    30. 30. ColorMode : Light ou Dark ?Tirez parti des nouveautés de Windows Phone 8 32
    31. 31. MapsTirez parti des nouveautés de Windows Phone 8 33
    32. 32. Où sont passés les pushpins ? • Partis ! • 2 solutions : • Créer des pushpins custom en dessinant un UIElement dans un MapOverLay à ajouter dans un MapLayer, à ajouter dans Map.Children. C’est tout. • Utiliser le composant Pushpin fourni dans Windows Phone ToolkitTirez parti des nouveautés de Windows Phone 8 34
    33. 33. Tirez parti des nouveautés de Windows Phone 8 TEXT2SPEECHPhone
    34. 34. Text2Speech – Les bases • Qu’est ce que c’est ? • Mise en place : • Manifest : - ID_CAP_SPEECH_RECOGNITION • Classe – SpeechSynthesizer + SpeakTextAsync • Mise en queue • InstalledVoices : Langue & Genre (SetVoice) • Sur Device : Langue à installer manuellementTirez parti des nouveautés de Windows Phone 8
    35. 35. Text2Speech – Technique avancée • Le SSML = fichier XML • Mise en place : • Le header <speak/> • Le tag Voice : Langue + Genre • Le tag Prosody : Manière de parler • Le tag Audio : Ajouter un wavTirez parti des nouveautés de Windows Phone 8
    36. 36. Speech – Les bases + AvancésTirez parti des nouveautés de Windows Phone 8 38
    37. 37. Text2Speech – Exemple d’utilisation • Accessibilité au malvoyant • SpeechBehavior xmlns:behaviors="clr- namespace:SamuelBlanchard.Accessibility" behaviors:SpeechBehavior.CanSpeak="True" behaviors:SpeechBehavior.Language="fr-FR" • Téléchargement : – http://blog.naviso.fr/wordpress/?p=1573Tirez parti des nouveautés de Windows Phone 8
    38. 38. Speech – AccessibilitéTirez parti des nouveautés de Windows Phone 8 40
    39. 39. Tirez parti des nouveautés de Windows Phone 8 SPEECHRECOGNITIONPhone
    40. 40. Recognition – Les bases • Qu’est ce que c’est ? • Nécessite internet • Manifest : • ID_CAP_SPEECH_RECOGNITION, • ID_CAP_MICROPHONE, • ID_CAP_NETWORKING • Avec Boite de dialogue : SpeechRecognizerUI • Sans Boite : SpeechRecognizer • InstalledSpeechRecognizers : Langue & Genre (SetRecognizer) • Sur device : Langue à installer manuellement + AutorisationTirez parti des nouveautés de Windows Phone 8
    41. 41. Recognition – Résultat • Une chaine de caractère • Un indice de confiance : – Hight – Low – Medium – RejectedTirez parti des nouveautés de Windows Phone 8
    42. 42. Recognition – Avancé • Gérer la grammaire de son application (préfixé en AddGrammar) • FromPredefinedType: Dictation (defaut) ou WebSearch • FromList: Ne regade que dans cette liste sinon Rejected • FromUri : Fichier SRGS grammars : .grxml sr.Grammars.AddGrammarFromPredefinedType("webSearch ", SpeechPredefinedGrammar.WebSearch);Tirez parti des nouveautés de Windows Phone 8
    43. 43. Speech – Monsieur et Madame !Tirez parti des nouveautés de Windows Phone 8 45
    44. 44. Tirez parti des nouveautés de Windows Phone 8 APP TO APP COMMUNICATIONPhone
    45. 45. AppToApp – Les bases • Qu’est ce que c’est ? • Association d’URI ou extension de Fichier • Les URI système : (exemples) – Mode Avion : ms-settings-airplanemode: – Panneau BlueTooth : ms-settings-bluetooth: • Le lancement : – Launcher. LaunchUriAsync(new Uri(monUri))Tirez parti des nouveautés de Windows Phone 8 ms-settings-airplanemode: Launch Bluetooth Settings Page ms-settings-bluetooth:
    46. 46. AppToApp – Avancé • Mise en place : association URI – Format de l’URI -> protocole:paramètres – Manifest : <Extensions> <Protocol Name="techdays2013" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" /> </Extensions> – URI commence par /protocole – UriMapper pour router l’uri (qui n’est pas une page) – OnNavigatedTo => traitement de l’uriTirez parti des nouveautés de Windows Phone 8 ms-settings-airplanemode: Launch Bluetooth Settings Page ms-settings-bluetooth:
    47. 47. AppToApp – Code UriMapper public override Uri MapUri(Uri uri) { // on decode la chaine pour recupérer le protocole original string uriString = HttpUtility.UrlDecode(uri.ToString()); const string uriTechdays = "/Protocol?encodedLaunchUri=techdays2013:///"; if (uriString.StartsWith(uriTechdays)) { // On recupère tout se qui suit le ? (le ? étant inclus) string query = uriString.Substring(uriTechdays.Length); return new Uri("/SpeechRecognitionPage.xaml" + query, UriKind.Relative); } return uri; } RootFrame.UriMapper = new AssociationUriMapper();Tirez parti des nouveautés de Windows Phone 8 ms-settings-airplanemode: Launch Bluetooth Settings Page ms-settings-bluetooth:
    48. 48. AppToApp – Je m’auto-lance !Tirez parti des nouveautés de Windows Phone 8 50
    49. 49. Et ensuite ?Trucs et astuces pour rendre votre application Windows Phone 8plus visibleMardi 12 février : 16h00-17h00 (niveau : 200)Cycle de vie dune application Windows 8 et Windows Phone 8Mardi 12 février : 16h00-17h00 (niveau : 300)Lhistoire dHTML5 pour les développeurs Windows Phone 8Mercredi 13 février : 16h00-17h00 (niveau : 200)
    50. 50. Et ensuite ?Booster votre application Windows Phone 8Mercredi 13 février : 17h30-18h30 (niveau : 300)Bien soumettre et monétiser votre application Windows 8 etWindows Phone 8Jeudi 14 février : 11h00-12h00 (niveau : 200)Plus près, plus près… NFC et la communication à proximité dansWindows 8 et Windows Phone 8Jeudi 14 février : 14h30-15h30 (niveau : 200)
    51. 51. Développeurs Pros de l’IT http://aka.ms/generation-app Formez-vous en ligne www.microsoftvirtualacademy.com http://aka.ms/evenements- developpeurs Retrouvez nos évènements http://aka.ms/itcamps-france Les accélérateurs Faites-vous accompagnerWindows Azure, Windows Phone, gratuitement Windows 8 Essayer gratuitement nos http://aka.ms/telechargements solutions IT La Dev’Team sur MSDN Retrouver nos experts L’IT Team sur TechNet http://aka.ms/devteam Microsoft http://aka.ms/itteam
    52. 52. Questions ?

    ×