Upgrade to Pro — share decks privately, control downloads, hide ads and more …

10 choses que j’ai apprises depuis que je travaille chez Deezer - 42

10 choses que j’ai apprises depuis que je travaille chez Deezer - 42

Christopher MANEU

June 01, 2016
Tweet

More Decks by Christopher MANEU

Other Decks in Technology

Transcript

  1. 10 choses que j’ai apprises
    depuis que je travaille chez
    Deezer
    Christopher Maneu
    Mobile Developer & Engineering Effectiveness
    Lead, Deezer.com
    @cmaneu – maneu.net
    42 Paris – 01/06/2016

    View Slide

  2. 9 choses que j’ai apprises depuis
    que je travaille chez Deezer
    Christopher Maneu
    Mobile Developer & Engineering Effectiveness
    Lead, Deezer.com
    @cmaneu – maneu.net
    42 Paris – 01/06/2016

    View Slide

  3. La localisation, c’est
    compliqué
    La neutralité du net Naviguer à large échelle
    Le petit-déjeuner, le repas le
    plus important de la semaine
    Wifi Camping Paradis
    Travailler comme un dev
    quand on n’est pas dev
    Les artistes ne sont pas
    bavards
    Le firmware qui reboot
    Les opérateurs nous mentent

    View Slide

  4. La localisation
    180
    pays
    31
    langues
    5+
    plateformes

    View Slide

  5. La localisation
    Français
    Anglais
    Espagnol
    23 Langues
    Installations de l’application Deezer par langue

    View Slide

  6. Pourquoi localiser est compliqué ?

    View Slide

  7. Un stage @ Deezer ?
    Dev web
    symfony/django/node
    reactjs
    http://dzr.fm/bocal42
    Produit / UX /
    Développement
    Projet opensource

    View Slide

  8. La neutralité du net

    View Slide

  9. La neutralité du net
    Un pic sur les commentaires du store
    “Depuis ce week-end, l’application est marquee
    comme hors connexion, alors que je suis en 4G”
    La télémétrie ne montre rien
    Pas de nouvelles exceptions, pas de pics
    Notre jeu de test en local fonctionne bien

    View Slide

  10. La neutralité du net
    Après quelques jours, un utilisateur mentionne le
    nom d’un opérateur dans un commentaire du store
    Des tests sur certaines cartes SIM de cet utilisateur
    fonctionnent, pas d’autres.

    View Slide

  11. La neutralité du net
    private async Task HasAccessToDeezer()
    {

    httpClient.Timeout = TimeSpan.FromMilliseconds(3500);
    using (HttpRequestMessage request = new
    HttpRequestMessage(HttpMethod.Get, new
    Uri("http://api.deezer.com/robots.txt")))

    View Slide

  12. La neutralité du net
    private async Task HasAccessToDeezer()
    {
    if (disableCache)
    {
    request.Headers.Add("If-Modified-Since",
    DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture));
    }
    httpClient.Timeout = TimeSpan.FromMilliseconds(3500);
    using (HttpRequestMessage request = new
    HttpRequestMessage(HttpMethod.Get, new
    Uri("http://api.deezer.com/robots.txt")))

    View Slide

  13. La neutralité du net
    Sur les cartes SIM concernées, toute requête avec le
    header HTTP If-Modified-Since a une latence
    supérieure à 10 secondes.

    View Slide

  14. La neutralité du net

    View Slide

  15. La neutralité du net

    View Slide

  16. La neutralité du net - Learnings
    La télémétrie ne fait pas tout
    Surveiller les commentaires du store (appbot)
    Détecter si on a du réseau ou non est une tâche
    plus compliquée qu’il n’y paraît

    View Slide

  17. Wifi Camping Paradis

    View Slide

  18. Wifi Camping Paradis
    Pic des exceptions via la télémétrie
    Deezer.Runtime.DeezerRuntimeException:
    DZ0110: Could not retrieve settings,
    server error (data='

    View Slide

  19. Wifi Camping Paradis

    View Slide

  20. camping-peyroche.com

    View Slide

  21. Wifi Camping Paradis

    View Slide

  22. Wifi Camping Paradis - Learnings
    Ne pas se fier uniquement au statut HTTP ou au
    Content-Type dans vos clients HTTP
    Ayez un système de filtre des exceptions envoyées
    à la télémétrie (loghash.com)

    View Slide

  23. Le Firmware qui reboot

    View Slide

  24. Le firmware qui reboot
    Nos serveurs
    Achat de matériel & installation
    Mise à jour du hardware
    Mise à jour de l’OS
    Mise à jour des frameworks, runtimes, etc…
    Déploiement du code
    Monitoring

    View Slide

  25. Le firmware qui reboot
    Configuration « propre » des updates
    Recherche automatique des updates (contrôleurs RAID, etc…)
    Installation lors du reboot de la machine
    Les iDRAC sont mis à jour séparément

    View Slide

  26. Le firmware qui reboot
    Campagne de mise à jour des iDRAC
    Passage de 2.1x à 2.2x
    En parallèle, la version 2.3 est sortie.
    Tests sur quelques serveurs de la 2.3 => OK

    View Slide

  27. Le firmware qui reboot
    Lancement de la procédure de vérification
    Le bios des machines en 2.2 ont chargées la
    configuration des iDRAC
    Ils ne sont pas censés la prendre en compte

    View Slide

  28. Le firmware qui reboot

    View Slide

  29. Le firmware qui reboot - learnings
    Les updates automatiques ne doivent pas être
    planifiées en même temps sur tous les serveurs
    Site Reliability Engineering, O’Reilly
    http://www.opsschool.org/

    View Slide

  30. Le petit déjeuner, le repas le plus
    important de la semaine

    View Slide

  31. Le petit déjeuner, le repas le plus important de
    la semaine
    0
    50
    100
    150
    200
    250
    300
    350
    400
    450
    2013 2014 2015 2016

    View Slide

  32. Le petit déjeuner, le repas le plus important de
    la semaine
    Lead
    Mobile
    Lead
    Android
    Dev
    Android
    Dev
    Android
    Lead iOS
    Dev iOS
    Dev iOS
    Lead
    Windows
    Dev
    Windows
    Dev
    Windows

    View Slide

  33. Le petit déjeuner, le repas le plus important de
    la semaine
    Team Ads
    Dev
    Android
    Dev iOS
    Dev Web
    Team User
    Engagement
    Dev iOS
    Dev
    Android
    Dev Data
    Science
    Team
    Playback
    Dev iOS
    Dev
    Android

    View Slide

  34. Le petit déjeuner, le repas le plus important de
    la semaine
    Team Ads
    Dev
    Android
    Dev iOS
    Dev Web
    Team User
    Engagement
    Dev iOS
    Dev
    Android
    Dev Data
    Science
    Team
    Playback
    Dev iOS
    Dev
    Android

    View Slide

  35. Le petit déjeuner, le repas le plus important de
    la semaine

    View Slide

  36. Le petit déjeuner, le repas le plus important de
    la semaine
    Deezer Weekly Breakfast
    Mobile Weekly Breakfast
    Tech Meetings
    Chan Slack
    Brown Bag Lunch

    View Slide

  37. Naviguer à large échelle

    View Slide

  38. View Slide

  39. Naviguer à large échelle
    Les vues ne doivent pas naviguer vers des vues
    Une méthode unifiée d’accéder aux vues
    Pouvoir “deeplinker” une vue
    Pouvoir changer la vue cible en live (gatekeeping,
    A/B testing, …)
    S’intègre bien dans les frameworks natifs

    View Slide

  40. Naviguer à large échelle
    http://www.deezer.com/artist/144227
    =
    deezer://www.deezer.com/artist/144227

    View Slide

  41. L’importance des deeplinks
    Faire revenir les utilisateurs dans l’application
    Transférer le trafic web vers les apps
    Gérer élégamment du contenu dynaique

    View Slide

  42. Naviguer à large échelle
    Utiliser un UriMapper
    deezer://www.deezer.com/artist/144227
    => ArtistPageActivity / ArtistPageController

    View Slide

  43. Naviguer à large échelle
    √ Les vues ne doivent pas naviguer vers des vues
    √ Une méthode unifiée d’accéder aux vues
    √ Pouvoir “deeplinker” une vue
    × Pouvoir passer un objet à une vue
    √ Pouvoir changer la vue cible en live (gatekeeping,
    A/B testing, …)
    √S’intègre bien dans les frameworks natifs

    View Slide

  44. Naviguer à large échelle
    I want to navigate to a view / an URI
    _navigationService.Navigate("deezer://www
    .deezer.com/artist/12741", null);
    I want to navigate to a view, but I already have this
    object
    _navigationService.Navigate(PageTokens.Ar
    tistPage, currentArtist);

    View Slide

  45. Naviguer à large échelle

    View Slide

  46. Naviguer à large échelle

    View Slide

  47. Naviguer à large échelle - Learnings
    Lister précisément les routes de vos apps
    Toujours utiliser un UriMapper
    Toutes vos pages/controler/activity doivent gérer
    un chargement avec un objet ou un id/paramètres

    View Slide

  48. Les artistes ne sont pas bavards

    View Slide

  49. Les artistes ne sont pas bavards

    View Slide

  50. Les artistes ne sont pas bavards

    View Slide

  51. Les artistes ne sont pas bavards
    http://scotthurff.com/posts/why-your-user-interface-is-
    awkward-youre-ignoring-the-ui-stack

    View Slide

  52. Les artistes ne sont pas bavards

    View Slide

  53. Les artistes ne sont pas bavards

    View Slide

  54. Les artistes ne sont pas bavards
    Le livre du design et de l’ergonomie pour le
    développeur
    https://vimeo.com/88650145
    Designing products people Love, O’Reilly
    Sprint, Jake Knapp (Google Ventures)

    View Slide

  55. Les opérateurs nous mentent
    (les téléphones portables aussi)

    View Slide

  56. Les opérateurs nous mentent
    Plusieurs commentaires du store
    Des retours d’autres employés Deezer
    « J’ai de la 4G, mais l’app Deezer est offline »

    View Slide

  57. Les opérateurs nous mentent

    View Slide

  58. Les opérateurs nous mentent
    http://www.apple.com/pr/library/2010/07/02Letter-from-Apple-Regarding-iPhone-4.html

    View Slide

  59. Les opérateurs nous mentent
    https://www.igvita.com/2015/01/26/resilient-networking/

    View Slide

  60. Les opérateurs nous mentent

    View Slide

  61. Les opérateurs nous mentent - Learnings
    Les utilisateurs 4G sont parfois des utilisateurs 3G
    3G > 2G, 2G > 0
    L’erreur de connexion doit être la norme
    Les requêtes « interactives » doivent respecter le
    temps perçu
    Ces règles sont valables pour les devs web
    (services worker FTW)

    View Slide

  62. Travailler comme un dev quand on
    n’est pas dev

    View Slide

  63. Travailler comme un dev quand on n’est pas dev

    View Slide

  64. Travailler comme un dev quand on n’est pas dev

    View Slide

  65. Travailler comme un dev quand on n’est pas dev

    View Slide

  66. Q&A
    Suivez nous sur Twitter
    @DeezerDevs
    @cmaneu

    View Slide

  67. Merci
    code by Bernar Novalyi from the Noun Project
    Wireframe by Yu luck from the Noun Project

    View Slide