Arti Zirk - Syncly MusicSync

From ICO wiki
Revision as of 14:26, 8 December 2015 by Arzirk (talk | contribs) (Veel teksti)
Jump to navigationJump to search

Esitlus

Esitluse slaidid on siin: http://slides.com/artizirk/musicsync

Syncly MusicSync

Syncly MusicSync on minu Java[1] kodu töö. Tegu on üsnagi KISS teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.

Idee

Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. youtube-dl on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.

#!/bin/bash
youtube-dl -i -x --download-archive .archive.txt -f bestaudio "http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ"
adb push -p * /sdcard/Music/

Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack[2] nimega aga see ei lahenda ära lugude telefoni saamis probleemi.

Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.

Planeering

Kõigepealt alustasin Androidi platvormi dokumentatsiooni lugemisega ja üritasin enamvähem paika panna mida ma androidi rakenduses kuvada tahaksin ning tegin endale enamvähem selgeks kuidas Androidi poolt ära teostada.

Selle lõpptulemuseks on midagi sellist

Edasi panin paika punktid mida mul oleks vaja et backend server teeks:

  • Playlistide kuvamine / lisamine / eemaldamine
  • Playlistides olevate lugude kuvamine
  • Teadete genereerimine playlisti lugude lisamise/eemaldamise korral

Tehnoloogiate valik

Backend serveri kirjutamiseks tuli teha valik kuidas ma täpselt selle ära lahendan kasutades mis asju.

Playlistide ja seal olevate lugude salvestamiseks otsustasin kasutada MongoDB andmebaasi mis on üks NoSQL andmebaas JSON sarnaste dokumentide salvestamiseks. Valisin MongoDB just selle pärast, et olen seda varasemalt kasutanud, arenduse käigus andmestruktuuri muutmine on üli kerge ning kuna SQL pole mulle eriti kunagi meeldinud.

YouTubest lugude allalaadimiseks hetkel ainuke laialt toetatud varjant on kasutada youtube-dl pythoni programmi. On olemas ka erinevaid veebilehti mis oskavad YouTubest alla laadida helifaile aga ka need suuretõenäosusega kasutavad midagi sarnast tagaplaanil. Kuna youtube-dl on kirjutatud Pythonis siis on selle kasutamine Pythoni scriptides kergem ja annab rohkem võimalusi selle käitumise muutmiseks kui mõne muu lahenduse kasutamine.

Kuna mu arti.ee serverist pole eriti palju kettapinda, et sinna ka muusika ära mahutada siis otsustasin kasutada Amazon S3 pilveservereid kuhu Youtubest allalaetud muusika paigutada ning sealt neid vajadusel telefoni tõmmata.

Genereeritud teadete edastamiseks sobib mulle väga hästi nginx-push-stream-module mis võimaldab kergesti genereerida Server Sent Events striimi mida on võimalik töödelda väga kergelt kõigi programeerimis keeltega ja veebilehitsejatel on sse tarbimise jaoks sisseehitatud tugi javascriptis.

HTTP API ehitamiseks, mille kaudu teha päringuid serveri pihta, otsustasin teha kasutades Pythoni teeki nimega Falcon. Falcon on minimaalne Pythoni WSGI liidest täitev teek HTTP RESTful api'de tegemiseks. Siin on näide sellst kui ilus lõpptulemus jääb kasutades Falconit https://gist.github.com/artizirk/ae9cf28d1f45ef0aa965

Backendi implementeerimine

TODO

Viited