web-dev-qa-db-ja.com

Spotifyデスクトップアプリケーションの開発に使用された言語または技術は何ですか?

Spotifyデスクトップアプリケーションの開発にどの言語またはテクノロジーが使用されたかを知っている人はいますか?安定性があり、見栄えがよく、軽量です。

69
tom

ここから: http://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app
日付:2014-09-09

5年のSpotify従業員、Andreas Blixt:

すべてのクライアントのコアはC++ですが、そのコアはRasmusの投稿が凝縮されて以来、機能がモジュールに分割されています。 Spotifyがより多くのプラットフォームで利用できるようになり、より豊富な機能セットが得られるようになると、「コア」が「すべての少し」にならないようにする必要があります。これは、再生制御などの特定の機能を独自のモジュールに分割することを意味します。これらのモジュールはまだC++ですが、自己完結型であるため、理論的には他の言語でロジックを実装できます。これらのモジュールへのインターフェイスレイヤーを「コスモス」と呼びますが、これはHTTPとあまり変わらない方法で機能します。 Cosmosでは、クライアントの任意の部分が任意のパスとペイロードを使用してモジュールと通信できるため、より柔軟なアーキテクチャが可能になります。明らかな利点は、バージョン付きインターフェイス(例:GET sp:// player/v1/mainがプレーヤーの状態を返す)と、データを渡すためのJSONです。これは、デスクトップクライアントの別の変更にとって重要です。

最近のデスクトップUIの多くは、実際にはChromium Embedded Framework(CEF)を使用しています。これは、基本的に、ビューがJavaScript、HTML、およびCSSを使用していることを意味します。すべての機能チームが他の人のビューを壊すことを恐れずに機能を操作できるように、各ビューは独自の「ブラウザ」でサンドボックス化されます(Chromeのビューはビューをタブとして考えることができます。一度に1つ以上)。ただし、これには1つの制限があります。ビュー間でデータを共有することはより困難になります。これがCosmosの出番であり、コア(C++)とJavaScriptランド間の通信を実際に単純化します。JSクライアントは任意のリクエストを作成でき、バインディングがある場合、そのリクエストは処理され、応答されます。 1つの例は、任意のビューがJSONデータをリッスンしている他のビューにプッシュできるようにする「メッセージ」エンドポイントです(HTML5のwindow.postMessageのようなものです。ただし、これはC++モジュールとインターフェイスできます)。これは、クライアントのすべての再生ボタンが、トラックが再生されているかどうか、オフラインで利用可能か(別のCosmosモジュール)、曲を音楽に保存したかどうかを知る方法でもあります。

テクノロジースタックのもう1つの重要な変更点は、ロジックをさらに「元に戻す」ことで、ビュー集約サービスに移行したことです。したがって、以前はクライアントでほぼすべてのロジックを実行し、バックエンドをデータストアとしてのみ使用していましたが、データストアとクライアント間のロジック層でさらに多くの作業を行い、Cosmosに非常に類似したエンドポイントを公開します(実際、 Cosmosモジュールを呼び出すのとまったく同じ方法でバックエンドを呼び出すことができるため、レイヤー間を移動するのは面倒ではありません)。これには2つの理由があります。1つは、実装するクライアントロジックが少ないため、より多くのプラットフォームに迅速に拡張できることです。2つは、クライアントが安定しているため、もっと「愚かな」。これによるスローダウンを緩和するために、すべてのデータのキャッシュルールがあることを確認しました。これにより、クライアントはデータをローカルに保持し続け、以前と同じくらいのビジネスロジックの責任を負いません。

47
Daniel P

使用するサードパーティコンポーネントのリストは次のとおりです(もちろんC++の上にあります)。

  • ブースト
  • 駐在員
  • FastDelegate
  • giflib
  • libjpeg
  • libogg
  • libvorbis
  • メルセンヌ・ツイスター
  • zlib
  • NSIS(Windowsのみ)
  • Windowsテンプレートライブラリ(Windowsのみ)
  • Growl(Max OS Xのみ)
  • MATrackingArea(Mac OS Xのみ)
35
Mahtar

Spotifyデザイナーによると:

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

「一部はC++で、一部はSpiderと呼ばれるHTML風のマークアップ言語です」「Spotify内で使用するためだけに構築されています」

22
Brian Mathews

Spotifyは Chromium Embedded Framework (CEF)を使用して、デスクトップアプリケーション内にHTML/CSS/JavaScriptで構成されるWebインターフェイスを表示するようになりました。

14
Keavon

website から:

Spotifyは主にPythonおよびC++

4
bhny

明らかに.NETではなく、Windows上で実行されていることを考えると(プロセスエクスプローラーはそれを教えてくれます)、AIRインストールプロセスに従わなかったため、クロスプラットフォームライブラリを使用したC++でした。

すべてが1つの実行可能ファイルにコンパイルされます。これは、すべての依存関係のソースにアクセスできることを示しています。

W.r.t to Techno ...彼らはHardhouse Electronicaを使ったと思う

3
CVertex

ここで最初の答えを確認してください: https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client

Spotifyの元テクノロジーリードであるAndreas Blixtが詳細に回答しました。

ログイン(およびその他のサーバー側のロジック)を処理するだけでなく(セキュリティ上の理由から)異なるドメインでアプリを提供するPHPレイヤーがあります。残りはすべてJavaScriptです。

JavaScriptがバックエンドと通信するために、多くのアクティブな接続を一度に処理できる高度に最適化されたC++サービスである「アクセスポイント」(AP)と呼ばれるものを介して通信します。このサービスは、リクエストを正しいバックエンドサービスにルーティングする役割を果たします。このサービスは、ファイアウォールの制限を克服するために、ポート80および443で実行できます。通信はWebSocket(または一部のブラウザーではFlash)を介して行われます。

特定のバックエンドサービスと通信するために、「Hermes」と呼ばれる独自のトランスポートを使用して、APを介してリクエストをルーティングします。これは基本的に、リクエストの送信先をAPに知らせるURLスキームです。ペイロードはProtobufとしてエンコードされます。 Hermesには、同じデータを2回要求しないように、結果をサポートするブラウザーの結果をIndexedDBに保存するニースキャッシングシステム(「Mercury」と呼びます)があります(デスクトップクライアントに同じシステムがありますが、代わりにC++に実装されています)。これは、アーティスト、アルバム、トラックなど、頻繁に再リクエストされるリソースに非常に役立ちます。

UIについては、何かを壊すことを心配することなく、すべてのビューを異なるチームが独立して開発できるようにするための非常に高度なアプリケーションフレームワーク(「ステッチ」と呼ばれる)を作成しました。ビューはサンドボックスで実行されますが、トラックメタデータの読み込みなどの一般的なことは依然として共有ライブラリに依存する可能性があります。この記事の執筆時点では、Webプレーヤーに〜35個の一意のビュー(またはアプリ)があります。

ビューは、postMessageを使用して「ブリッジ」(基本的にAPI)と呼ばれるものを介してデータを取得し、アクションを実行するため、すべてのアプリのすべての共通コードを再初期化する必要はありません。これについて本当に素晴らしいことは、前述したこれらの〜35個のビューの多くは、変更せずに実際にデスクトップクライアント内でも実行できることです。もちろん、postMessageの代わりに、Chromium Embedded FrameworkおよびC++コアへのフックを使用します。

HTML 5テクノロジーを可能な限り使用するようにしていますが、場合によってはFlashに依存しています。一般に、Webプレーヤーには本当にクールな技術スタックがあると思います。

0
Hossam Mourad