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

F6c06223e3759e7b9c93bdb58fc241f5?s=128

Christopher MANEU

June 01, 2016
Tweet

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
  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
  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
  4. La localisation 180 pays 31 langues 5+ plateformes

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

    Deezer par langue
  6. Pourquoi localiser est compliqué ?

  7. Un stage @ Deezer ? Dev web symfony/django/node reactjs http://dzr.fm/bocal42

    Produit / UX / Développement Projet opensource
  8. La neutralité du net

  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
  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.
  11. La neutralité du net private async Task<bool> HasAccessToDeezer() { …

    httpClient.Timeout = TimeSpan.FromMilliseconds(3500); using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri("http://api.deezer.com/robots.txt"))) …
  12. La neutralité du net private async Task<bool> 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"))) …
  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.
  14. La neutralité du net

  15. La neutralité du net

  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
  17. Wifi Camping Paradis

  18. Wifi Camping Paradis Pic des exceptions via la télémétrie Deezer.Runtime.DeezerRuntimeException:

    DZ0110: Could not retrieve settings, server error (data='
  19. Wifi Camping Paradis

  20. camping-peyroche.com

  21. Wifi Camping Paradis

  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)
  23. Le Firmware qui reboot

  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 …
  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
  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
  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
  28. Le firmware qui reboot

  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/
  30. Le petit déjeuner, le repas le plus important de la

    semaine
  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
  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
  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
  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
  35. Le petit déjeuner, le repas le plus important de la

    semaine
  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 …
  37. Naviguer à large échelle

  38. None
  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
  40. Naviguer à large échelle http://www.deezer.com/artist/144227 = deezer://www.deezer.com/artist/144227

  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
  42. Naviguer à large échelle Utiliser un UriMapper deezer://www.deezer.com/artist/144227 => ArtistPageActivity

    / ArtistPageController
  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
  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);
  45. Naviguer à large échelle

  46. Naviguer à large échelle

  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
  48. Les artistes ne sont pas bavards

  49. Les artistes ne sont pas bavards

  50. Les artistes ne sont pas bavards

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

  52. Les artistes ne sont pas bavards

  53. Les artistes ne sont pas bavards

  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)
  55. Les opérateurs nous mentent (les téléphones portables aussi)

  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 »
  57. Les opérateurs nous mentent

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

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

  60. Les opérateurs nous mentent

  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)
  62. Travailler comme un dev quand on n’est pas dev

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

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

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

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

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

    by Yu luck from the Noun Project