Quel langage ou quelle technologie a été utilisé pour développer l’application de bureau Spotify?

Est-ce que quelqu’un sait quel langage ou quelle technologie a été utilisé pour développer l’application de bureau Spotify? C’est stable, beau et léger.

De là: http://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app
Daté: 2014-09-09

Andreas Blixt, employé de Spotify pendant 5 ans:

Le kernel de tous nos clients est le C ++, mais ce kernel a été condensé depuis la publication de Rasmus, avec des fonctionnalités divisées en modules. Alors que Spotify devient disponible sur de plus en plus de plates-formes et que son ensemble de fonctionnalités est plus riche, nous devons nous assurer que «core» ne devient pas «un peu de tout». Cela impliquait de séparer certaines fonctionnalités, telles que le contrôle de la lecture, dans leurs propres modules. Ces modules sont toujours en C ++ mais sont suffisamment autonomes pour que leur logique puisse théoriquement être implémentée dans d’autres langages. Nous appelons la couche d’interface pour ces modules “Cosmos”, et cela fonctionne d’une manière pas trop différente de HTTP. Cosmos permet à n’importe quelle partie du client de communiquer avec un module en utilisant des chemins et des charges utiles arbitraires, permettant une architecture beaucoup plus flexible. Certains avantages évidents sont les interfaces versionnées (exemple: GET sp: // player / v1 / main renvoie l’état du lecteur) et JSON pour la transmission des données. Ceci est important pour un autre changement dans notre client de bureau.

Une grande partie de notre interface utilisateur de bureau utilise actuellement Chromium Embedded Framework (CEF), ce qui signifie essentiellement que nos vues sont alimentées par JavaScript, HTML et CSS. Pour que toutes nos équipes puissent travailler sur leurs fonctionnalités sans crainte de voir les autres, chaque vue est mise en sandbox dans leur propre “navigateur” (je suppose que vous pouvez considérer les vues comme des tabs dans Chrome, sauf que nous montrons plus que l’un à la fois). Cela implique cependant une ressortingction: le partage de données entre les vues devient plus difficile. C’est là que Cosmos intervient et simplifie réellement la communication entre le kernel (C ++) et le JavaScript: les clients JS peuvent faire des requêtes arbitraires et s’il y a une liaison, cette requête est traitée et répondue. Un exemple est le sharepoint terminaison “messages” qui permet à n’importe quelle vue d’envoyer des données JSON vers n’importe quelle autre vue qui est à l’écoute (un peu comme window.postMessage en HTML5, sauf que celui-ci peut également interfacer avec les modules C ++). C’est également ainsi que tous les boutons de lecture du client savent si une piste est en cours de lecture ou non, si elle est disponible hors ligne (un autre module Cosmos) ou si vous avez enregistré une chanson sur votre musique.

Un autre changement important de notre technologie est que nous avons déplacé une partie de la logique vers les services d’agrégation. Donc, là où nous faisions auparavant presque toute la logique dans les clients, en utilisant uniquement le backend comme magasin de données, nous faisons maintenant beaucoup plus de travail dans une couche logique entre les data stores et les clients, exposant des endpoints très similaires à Cosmos ( vous pouvez appeler un backend exactement de la même manière que vous appelez un module Cosmos. La raison en est double: premièrement, cela nous permet d’élargir plus rapidement nos plates-formes car la logique du client est moins longue à mettre en œuvre et deux, cela nous aide à garder notre comportement plus cohérent et actualisé. plus stupide”. Pour atténuer tout ralentissement qui pourrait en résulter, nous avons veillé à ce que des règles de mise en cache soient appliquées à toutes les données, afin que le client conserve toujours les données localement, ce qui n’est pas le cas.

Voici la liste des composants tiers qu’ils utilisent (en plus du C ++ bien sûr):

  • Renforcer
  • Expat
  • FastDelegate
  • giflib
  • libjpeg
  • libogg
  • libvorbis
  • Mersenne Twister
  • zlib
  • NSIS (Windows uniquement)
  • Bibliothèque de modèles Windows (Windows uniquement)
  • Growl (Max OS X uniquement)
  • MATrackingArea (Mac OS X uniquement)

Selon un concepteur Spotify:

http://twitter.com/#!/tobiasahlin/status/96483609799692288

“Une partie est en C ++, et une partie est dans un langage de balisage HTML-ish appelé Spider” “Il est construit uniquement pour être utilisé dans Spotify”

Spotify utilise désormais le Chromium Embedded Framework (CEF) pour afficher une interface Web composée de HTML / CSS / JavaScript dans l’application de bureau.

De leur site web :

Spotify est construit principalement en Python et C ++

Étant donné qu’il fonctionne sous Windows, clairement pas .NET (Process Explorer me dit cela), je n’ai pas suivi un processus d’installation AIR, je dirais C ++ en utilisant des bibliothèques multi plates-formes.

Tout est compilé en un seul exécutable, ce qui indique qu’ils ont access à la source de toutes les dépendances.

Wrt to Techno … je pense qu’ils ont utilisé Hardhouse Electronica

Vérifiez la première réponse ici: https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client

Andreas Blixt, ancien responsable de la technologie chez Spotify, y a répondu en détail.

Nous avons une couche PHP qui gère la connexion (et une autre logique côté serveur), ainsi que des applications sur différents domaines (pour des raisons de sécurité). Le rest est tout JavaScript.

Pour que JavaScript communique avec le backend, il le fait via ce que nous appelons un «point d’access» (AP), un service C ++ hautement optimisé capable de gérer plusieurs connexions actives en même temps. Ce service est responsable du routage des demandes vers le service backend approprié. Ce service est capable d’exécuter les ports 80 et 443 pour surmonter les ressortingctions de pare-feu. La communication se fait via WebSocket (ou Flash pour certains navigateurs).

Pour communiquer avec des services backend spécifiques, nous acheminons les requêtes via l’AP en utilisant notre propre système de transport appelé “Hermes”. Ceci est fondamentalement un schéma d’URL qui permet à l’AP de savoir où envoyer la requête. Les charges utiles sont codées comme Protobuf. Hermes a un bon système de cache (nous l’appelons “Mercury”) qui stocke les résultats dans IndexedDB pour les navigateurs qui le supportent (nous avons le même système dans le client de bureau, mais en C ++), pour éviter de demander deux fois les mêmes données. Ceci est très utile pour les ressources qui sont sollicitées à nouveau, telles que les artistes, les albums et les pistes.

Pour l’interface utilisateur, nous avons écrit un cadre d’application assez avancé (appelé “Stitch”) pour permettre à chaque équipe d’être développée indépendamment par différentes équipes sans avoir à se soucier de casser quoi que ce soit. Les vues s’exécutent dans un bac à sable, mais peuvent toujours dépendre de bibliothèques partagées pour des choses courantes telles que le chargement des métadonnées de piste, etc.

Les vues obtiennent des données et effectuent des actions via ce que nous appelons un “pont” (essentiellement une API) à l’aide de postMessage, de sorte que nous n’avons pas besoin de réinitialiser tout le code commun à chaque application. La chose vraiment cool à ce sujet est que beaucoup de ces ~ 35 vues que j’ai mentionnées auparavant peuvent en fait également fonctionner dans le client de bureau sans modification. Bien sûr, au lieu de postMessage, ils utiliseront un hook dans Chromium Embedded Framework et notre cœur C ++.

Nous essayons d’utiliser les technologies HTML 5 autant que possible, mais dans certains cas, nous dépendons de Flash. Je pense que nous avons une technologie très cool pour notre lecteur web en général.

Le frontend est écrit en FLEX, consultez les sources sur votre machine Mac ou Windows. Vous verrez beaucoup de fichiers XML qui sont dans le format de fichier flex.

Bien sûr, la connexion au serveur et à l’intégration de la plate-forme est probablement écrite en c ++. Mais la partie interface utilisateur est juste FLEX …