desktop application - wide - ¿Qué idioma o tecnología se utilizó para desarrollar la aplicación de escritorio Spotify?
¿en qué año se fundó el world wide web consortium? (8)
¿Alguien sabe qué idioma o tecnología se utilizó para desarrollar la aplicación de escritorio Spotify? Es estable, apuesto y ligero.
Aquí está la lista de los componentes de terceros que usan (además de C ++, por supuesto):
- Aumentar
- Expatriado
- FastDelegate
- giflib
- libjpeg
- libogg
- libvorbis
- Mersenne Twister
- zlib
- NSIS (solo Windows)
- Biblioteca de plantillas de Windows (solo Windows)
- Growl (Max OS X solamente)
- MATrackingArea (Mac OS X solamente)
Consulte la primera respuesta aquí: https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client
Andreas Blixt quien fue un ex líder tecnológico en Spotify lo ha respondido en detalle.
Tenemos una capa de PHP que se encarga de iniciar sesión (y alguna otra lógica del lado del servidor), así como de servir aplicaciones en diferentes dominios (por razones de seguridad). El resto es todo JavaScript.
Para que el JavaScript se comunique con el backend, lo hace a través de lo que llamamos un "punto de acceso" (AP), un servicio de C ++ altamente optimizado que puede manejar muchas conexiones activas a la vez. Este servicio es responsable de enrutar las solicitudes al servicio de back-end correcto. Este servicio es capaz de ejecutarse en los puertos 80 y 443 para superar las restricciones del firewall. La comunicación se realiza a través de WebSocket (o Flash para algunos navegadores).
Para comunicarse con servicios de backend específicos, enrutamos las solicitudes a través del AP utilizando nuestro propio medio de transporte llamado "Hermes". Esto es básicamente un esquema de URL que le permite al AP saber dónde enviar la solicitud. Las cargas útiles están codificadas como Protobuf. Hermes tiene un buen sistema de almacenamiento en caché (lo llamamos "Mercury") que almacena los resultados en IndexedDB para navegadores que lo soportan (tenemos el mismo sistema en el cliente de escritorio, pero implementado en C ++), para evitar solicitar los mismos datos dos veces. Esto es muy útil para los recursos que se vuelven a solicitar mucho, como artistas, álbumes y pistas.
Para la interfaz de usuario, hemos escrito un marco de aplicación bastante avanzado (llamado "Stitch") para permitir que cada vista se desarrolle de forma independiente por diferentes equipos sin tener que preocuparse por romper nada. Las vistas se ejecutan en un espacio aislado, pero aún pueden depender de las bibliotecas compartidas para cosas comunes, como cargar metadatos de pistas, etc. Al momento de escribir estas líneas, tenemos aproximadamente 35 vistas (o aplicaciones) únicas en el reproductor web.
Las vistas obtienen datos y realizan acciones a través de lo que llamamos un "puente" (básicamente, una API) utilizando postMessage, de modo que no necesitamos reiniciar todo el código común para cada aplicación. Lo realmente bueno de esto es que muchas de las ~ 35 vistas que mencioné anteriormente también pueden ejecutarse dentro del cliente de escritorio sin modificaciones. Por supuesto, en lugar de postMessage usarán un gancho en Chromium Embedded Framework y nuestro núcleo C ++.
Tratamos de usar las tecnologías HTML 5 tanto como sea posible, pero en algunos casos dependemos de Flash. Creo que tenemos un stack tecnológico realmente genial para nuestro reproductor web en general.
Dado que se está ejecutando en Windows, claramente no .NET (el explorador de procesos me dice eso), no siguió un proceso de instalación de AIR, yo diría que C ++ usa bibliotecas multiplataforma.
Todo se compila en un ejecutable, lo que indica que tienen acceso a la fuente de todas las dependencias.
Wrt to Techno ... creo que usaron Hardhouse Electronica
De acuerdo con un diseñador de Spotify:
http://twitter.com/#!/tobiasahlin/status/96483609799692288
"Algo de eso está en C ++, y parte está en un lenguaje de marcado HTML-ish llamado Spider" "Está construido únicamente para ser utilizado en Spotify"
De su sitio web :
Spotify está construido principalmente en Python y C ++
Desde aquí: http://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app
Fechada: 2014-09-09
Andreas Blixt, empleado de Spotify por 5 años:
El núcleo de todos nuestros clientes es C ++, pero ese núcleo tiene desde la publicación de Rasmus condensada, con la funcionalidad dividida en módulos. A medida que Spotify esté disponible en más y más plataformas, además de obtener un conjunto de funciones más completo, debemos asegurarnos de que el "núcleo" no se convierta en "un poquito de todo". Esto ha significado romper ciertas características, como el control de reproducción, en sus propios módulos separados. Estos módulos todavía son C ++ pero son lo suficientemente autónomos como para que su lógica pueda ser implementada teóricamente en otros lenguajes. Llamamos a la capa de interfaz de estos módulos "Cosmos", y funciona de una manera no muy diferente de HTTP. Cosmos permite que cualquier parte del cliente se comunique con un módulo utilizando rutas arbitrarias y cargas útiles, lo que permite una arquitectura mucho más flexible. Algunos beneficios obvios son las interfaces versionadas (ejemplo: GET sp: // jugador / v1 / principal devuelve el estado del jugador) y JSON para pasar datos. Esto es importante para otro cambio en nuestro cliente de escritorio.
Gran parte de nuestra interfaz de usuario de escritorio actualmente utiliza Chromium Embedded Framework (CEF), lo que básicamente significa que nuestras vistas están basadas en JavaScript, HTML y CSS. Para que todos nuestros equipos de características puedan trabajar en sus funciones sin temor a romper la vista de otra persona, cada vista se muestra en su propio "navegador" (supongo que puede pensar en las vistas como pestañas en Chrome, excepto que mostramos más de uno a la vez). Sin embargo, esto trae consigo una restricción: el intercambio de datos entre vistas se vuelve más difícil. Aquí es donde entra Cosmos y realmente simplifica la comunicación entre el núcleo (C ++) y el terreno de JavaScript: los clientes de JS pueden realizar solicitudes arbitrarias y si hay un enlace, esa solicitud se maneja y responde. Un ejemplo es el punto final "mensajes" que permite que cualquier vista envíe datos JSON a cualquier otra vista que esté escuchando (algo así como window.postMessage en HTML5, excepto que este también puede interactuar con módulos C ++). Esta es también la forma en que todos los botones de reproducción del cliente saben si una pista se está reproduciendo o no, o si está disponible sin conexión (otro módulo Cosmos) o si ha guardado una canción para su música.
Otro cambio importante en nuestra pila de tecnología es que hemos movido un poco más la lógica "hacia atrás" para ver los servicios de agregación. Entonces, donde antes haríamos casi toda la lógica en los clientes, solo usando el backend como almacén de datos, ahora hacemos mucho más trabajo en una capa lógica entre los almacenes de datos y los clientes, exponiendo puntos finales muy similares a Cosmos (de hecho, puede llamar a un servidor de la misma manera que llama a un módulo Cosmos, por lo que moverse entre capas no es una molestia). La razón de esto es doble: una, nos permite expandirnos a más plataformas más rápidamente porque hay menos lógica de cliente para implementar y dos, realmente nos ayuda a mantener el comportamiento de nuestros clientes más constante y actualizado porque el cliente está mas estupido". Para mitigar cualquier desaceleración que pueda venir de esto, nos hemos asegurado de que haya reglas de almacenamiento en caché para todos los datos, de modo que el cliente aún conserve los datos localmente, simplemente no es responsable de tanta lógica comercial como solía ser.
La interfaz está escrita en FLEX, revise las fuentes en su máquina Mac o Windows. Verá una gran cantidad de archivos xml que están en el formato de archivo flexible.
Por supuesto, la conexión al servidor y la integración de la plataforma probablemente se haya escrito de forma nativa en c ++. Pero la parte UI es simplemente FLEX ...
Spotify ahora usa Chromium Embedded Framework (CEF) para mostrar una interfaz web que consiste en HTML / CSS / JavaScript dentro de la aplicación de escritorio.