Multimedia: Modelleren en Programmeren 2009-2010!!
!
!
!
!
!
1/7
Ontwerp en Implementatie in Android Groep 5 Blog: http://mume4life.blogspot.com Maarten Lambert, 1ste Master CW Gijs Vanderhoydonk, 1ste Master CW Hans Moorkens, 1ste Master CW Frans Guelinckx, 1ste Master CW Abstract - Dit is het verslag voor de Android-opgave van Multimedia: Modelleren en Programmeren van groep 5. Wij hebben een applicatie uitgewerkt die gebruikers toelaat waar ook ter wereld allerlei informatie op te vragen over CD’s binnen enkele seconden adhv de barcode op de cover. De belangrijkste uitdagingen waren het omzetten van de afbeelding van een barcode naar een eigenlijk barcode, het vinden van een databank die alle nodige informatie bevat en het vinden van audio-samples. We hebben hier vooral uit geleerd hoe het Android-platform in elkaar zit en welke mogelijkheden de nieuwe mobiele devices bieden. Ingediend op: 2 november 2009 —————————— —————————— Door het feit dat de applicatie draait op een 1.Idee draagbaar apparaat, kan de gebruiker eender waar, Initieel was er het idee om de Flex-applicatie te eender welke CD inscannen. Er kan binnen enkele herschrijven voor Android-phones. Het team wou seconden ter plekke beslist worden, op basis van de echter het mobiele aspect van Android (waarover later informatie die de applicatie weergeeft, of het de meer) ten volle uitbuiten en de oorspronkelijke moeite waard is om er geld aan uit te geven. Het MusiCow zou hier zwaar tekort schieten. Er diende mobiele aspect van de applicatie is dus prominent dus een herwerkt storyboard gemaakt te worden. Het aanwezig, maar zoals eerder vermeld heeft het team eerste idee dat er uit de bus kwam is gelijk ook het dit niet volledig kunnen uitbuiten wegens tijdsgebrek. enige gebleven en heeft het team verder uitgewerkt Er had namelijk nog zeer veel functionaliteit tot een volwaardige Android-applicatie. toegevoegd kunnen worden, zoals het opzoeken van prijzen van concurrende winkels, de locatie waar de Kort samengevat dient de applicatie gebruikt te CD ingescanned is, het weergeven van reviews,... worden om informatie op te vragen over CD’s in lokale winkels, bij vrienden thuis, enzovoort; dit alles Helaas is deze applicatie niet de enige in de aan de hand van de barcode op de cover van de CD. Android-wereld die gelijkaardige functionaliteit Men gaat als volgt te werk: de gebruiker neemt een aanbiedt. Er bestaat echter ook niet één enkele foto van de barcode, de applicatie zet deze foto om in autofabrikant in de hele wereld en is het aan een geldige code, vraagt allerlei informatie op bij zeer concurrerende fabrikanten (of in ons geval software uiteenlopende internetdiensten en geeft deze ten developers) om zich te onderscheiden. Daarnaast is de slotte weer. Android-MusiCow afhankelijk van een uitgebreid Initieel was het de bedoeling om naast de artiestnaam, albumnaam en audio-samples ook reviews, geotagging 1, links naar muziek-shops en de mogelijkheid om dit alles op te slaan, te integreren in de applicatie. Tijdsgebrek heeft het team er echter toe aangezet het arsenaal aan diensten in te perken om zo toch een werkende applicatie te kunnen tonen op de demo.
aanbod van APIs, wat ook de Achilles-hiel is van de applicatie. Informatie van verschillende databases kan inconsistent zijn; de tracklist die weergegeven wordt kan bvb niet overeenkomen met de samples die beluisterd kunnen worden. Beter zou zijn als er maar één enkele dienst afgesproken wordt waarvan geweten is dat de informatie consistent en volledig is. Het team had hiervoor Amazon in gedachten, maar deze API is zo groot en ingewikkeld dat het beter leek
1 Geotagging: Het toevoegen van geografische metadata aan uiteenlopende media zoals afbeeldingen, video’s,...
Multimedia: Modelleren en Programmeren 2009-2010!!
om te gaan voor eenvoudigere diensten en zodoende alles op tijd af te krijgen. Om af te sluiten worden de positieve punten van de applicatie nog eens opgesomd. Een androidphone is draagbaar en kan bij wijze van spreken overal mee naartoe genomen worden, informatie opvragen is zo eenvoudig als het nemen van een foto, informatie opvragen gaat zeer snel en alle informatie wordt gebundeld in één enkele applicatie.
2.Storyboard (bijlage 2) 1. Bij het starten van de applicatie wordt de gebruiker aangespoord een barcode te fotograferen. De camera-stream wordt weergegeven met daaronder een “Capture”-knop. 2. Wanneer alle informatie opgehaald is, wordt deze weergegeven onder de verschillende tabs. Bij Info staan oa een albumcover, artiestnaam, albumnaam, reviews... 3. Onder de tab Songs staat een tracklist en wordt er ook de mogelijkheid gegeven aan de gebruiker om samples te beluisteren 4. Onder de tab history staan alle eerder ingescande CDs en de plaats waar ze gescand zijn, weergegeven in google maps. Zoals eerder vermeld, is het team afgeweken van het Flex-storyboard omdat daarbij voornamelijk de draagbaarheid van een Android-phone niet tot zijn recht kwam. Bovendien hebben de reviews en de History-feature het niet gehaald wegens tijdsgebrek; zeer jammer aangezien deze een zeer grote meerwaarde hadden kunnen bieden.
3.Software -ontwerp In deze sectie wordt de architectuur van de applicatie besproken. Tevens zullen enkele overwogen alternatieven voor bepaalde ontwerpbeslissingen aan bod komen en worden de voor -en nadelen kort overlopen. Bespreking architectuur In deze sectie zullen de belangrijkste klassen overlopen worden aan de hand van het architectuurdiagramma dat terug te vinden is in bijlage 1.
!
!
!
!
!
2/7
• MainActivity: Deze klasse stelt de hoofdactiviteit voor die aangemaakt wordt bij het opstarten van de applicatie. De klasse instantieert de verschillende tabs en implementeert een OnClickLister die input van de gebruiker toelaat. • MultiFormatReader: De MultiFormatReader bevat de mogelijkheid een afbeelding in te lezen en om te zetten naar een geldige barcode. Deze klasse komt van de ZXing library die ondersteund wordt door het Android platform. • BarcodeImageConverter: Deze klasse laat toe een image om te zetten naar een array van pixels die door de MultiFormatReader vervolgens kan gebruikt worden om de barcode in te lezen. • Scraper: Aangezien er op meerdere plaatsen html-content van het net geparsed diende te worden, werd er besloten een algemene klasse beschrijft die op basis van patronen snel info uit een website kan halen. Indien er later nog meer webinhoud geparsed zou moeten worden, zou dit zeer snel en simpel kunnen gebeuren. • MP3Scraper: Deze klasse implementeert de Scraper klasse. Ze gebruikt de website "www.musicmp3.ru" om op zoek te gaan naar samples van een bepaalde cd. Aan de hand van onderzochte terugkerende patronen werd een systeem ontwikkeld waarbij de link naar elk sample snel gevonden kan worden. • MP3Player: Hier wordt het afspelen van muziek verzorgd. Ze krijgt een lijst van albumliedjes terug vanuit de hiervoor besproken MP3Scraper en geeft mogelijkheid ze te beluisteren. • AsinFinder: Dit is een tweede klasse die de Scraper klasse gebruikt voor het vinden van informatie op webpagina's. De applicatie gebruikt de Amazon API voor de omzetting van een barcode naar een Amazon product code (Asin). Dit is nodig omdat de Asin code gebruikt wordt voor het ontvangen van het bij de barcode horende album en artiest. • SignedRequestHelper: Deze hulpklasse werd overgenomen uit de Amazon API. De klasse krijgt de juiste argumenten mee om een request te doen, en geeft vervolgens de juiste url om de request uit te voeren terug. • AsinInfoRetreiver: Deze klasse staat in voor het ontvangen van informatie over de artiest
Multimedia: Modelleren en Programmeren 2009-2010!!
en het album. Ze gebruikt hiervoor zowel de MusicBrainz API als de Last.FM API. • AsinInfoHandler: De AsinInfoHandler kan op basis van een Asin code overgaan naar een album en artiest naam. Ze gebruikt hiervoor de MusicBrainz API die verderop besproken zal worden. • TrackListHandler: Deze klasse gebruikt tevens de MusicBrainz API. Ze haalt een lijst van de liedjes op die bij het gevonden album horen. • AlbumInfoHandler: Hier wordt de Last.FM API aangesproken voor het ontvangen van specifieke album info. • ArtistInfoHandler: Ook deze klasse zal op een een gelijkaardige manier als de AlbumInfoHandler op zoek gaan naar artiestinfo. Ze gebruikt net zoals de vorige klasse de Last.FM API. Overwogen alternatieven Bij het ontwerpen van de applicatie werd rekening gehouden met heel wat API's. De functionaliteit van deze API's is deels overlappend waardoor er evenwel voor een aanpak met minder API's gekozen had kunnen worden. Er had met name heel wat info vanuit de Amazon API gehaald kunnen worden. Uit het verslag van de Flex implementatie van groep 11 bleek echter dat zij heel wat problemen ondervonden met deze API. Ze was met name traag en erg omslachtig om te gebruiken. Om deze problemen in ons project te vermijden, werd het gebruik van Amazon beperkt tot de omzetting van een barcode naar een Amazon productcode. Hieraan heeft dan één projectlid gewerkt zodat de overige leden de tijd kregen zich te concentreren op andere API's. De overige functionaliteit werd vercvolgens opgevuld door de Musicbrainz API en de Last.FM API. Deze beslissing had als belangrijk voordeel dat mogelijke problemen vermeden werden en dat er meer mankracht ingezet kon worden in andere aspecten van het project. Het nadeel is dat er nu met meerdere API's gewerkt moest worden wat leidt tot langere loading times, een complexer ontwerp en het aanleren van nieuwe API's.
4.Implementatie in Android 4.1.Belangrijkste moeilijkheden & aanpak Om het werk te optimaliseren werd bij het project werd onderscheid gemaakt tussen volgende
!
!
!
!
!
3/7
taken. Voor iedere taak was 1 persoon verantwoordelijk. • Ophalen van barcode uit figuur • Omzetten van de barcode naar een ASIN • Downloaden en weergeven van informatie over album en artiest. • Zorgen voor goede Muzieksamples. In deze paragraaf zullen verder de belangrijkste moeilijkheden van de implementatie besproken worden. • Bij het tweemaal aanmaken van een HttpURLConnection viel het op dat de tweede connectie steeds genegeerd werd. Na veel debugen opzoekwerk werd er een simpele oplossing gevonden op het net. De oplossing bestaat simpelweg uit het toevoegen van System.setProperty("http.keepAlive", "false") aan het begin van de connectiefunctie. • Een andere moeilijkheid die het team veel tijd gekost heeft is het crashen van de applicatie zonder het weergeven van de foutmelding. Deze problemen kwamen vooral voor bij het implementeren en aanpassen van de layout. Zulke problemen zorgen er natuurlijk voor dat het implementeren van de applicatie tijdsrovend en minder plezierig wordt. • Bij een applicatie die barcodes inscanned is het gebruik van de camera natuurlijk onmisbaar. De camera kon echter niet werkend gekregen worden op de emulator. Een workaround die op een oudere versie van Android werkte kon niet geimplementeerd worden op de gebruikte nieuwe versie. Omdat de camera van de emulator niet te gebruiken was heeft het team ervoor gekozen om foto's van barcodes in te lezen en te verwerken. Lokale afbeeldingen inlezen en deze omzetten naar een bruikbaar formaat voor de barcodeklasse bleek ook niet triviaal, maar omdat er hierover wel veel informatie beschikbaar was, was deze optie te opteren boven de camerafunctie. Natuurlijk zal de camerafunctie wel gebruikt moeten worden indien de applicatie op een echte Android phone runt. • Omdat de layoutmogelijkheden van Android vrij beperkt zijn, is het team er niet volledig in geslaagd de initieel gewenste layout te repliceren. Natuurlijk zal het wel mogelijk zijn een mooie layout te creëren, maar ondanks de mooie model-objectview-georienteerde manier van implementeren kost dit teveel tijd. Omwille hiervan is de layout vrij simpel gehouden.
Multimedia: Modelleren en Programmeren 2009-2010!!
4.2.Interactie met verschillende API's • Amazon: Tegen de verwachtingen in kostte de omzetting van een EAN naar een ASIN code veel moeite. De oorzaak hiervan was te vinden in de communicatie met Amazon. Sinds augustus 2009 vereist Amazon dat alle request van een timestamp en een signature voorzien zijn. Het uitzoeken van de juiste methode om de signature toe te voegen heeft veel tijd gevergd, uiteindelijk werd er een klasse gevonden die de gewenste request van timestamp en signature kon voorzien. • MusicBrainz: Om het album en de artiest om te vragen aan de hand van de ASIN code wordt er gebruikt gemaakt van MusicBrainz. Ook de tracklist van het gewilde album wordt m.b.v. MusicBrainz opgehaald. Last.FM: Omdat MusicBrainz geen uitgebreide info over het album of de artiest heeft wordt er gebruik gemaakt van Last.FM. Dit ook aangezien Last.FM id’s van MusicBrainz aanvaardt, hetgeen integratie vergemakkelijkt. Deze API werd al gebruikt bij de applicatie in Flex, dus de implementatie hiervan was straightforward. • MusicMP3.ru: Deze API wordt gebruikt om de gebruiker samples van het gewenste album te laten horen. Hiervoor wordt gebruik gemaakt van de klasse Scraper, die met behulp van een aantal parameters de gewenste URL uit de HTML-code kan halen. Deze verkregen URL is een directe link naar een MP3-bestand. • Bij een typisch gebruik van de applicatie zal de gebruiker een barcode inscannen. Via de gebruikte barcode library (Zxing) wordt de ingelezen afbeelding omgezet naar een geldige barcode. Vervolgens zal er met Amazon gecommuniceerd worden om de barcode om te zetten in een ASIN code. Deze ASIN kan dan door MusicBrainz gebruikt worden om de artiest, albumnaam en tracklist te verkrijgen. Zodra deze info beschikbaar is zullen de samples van MusicMP3.ru gedownload worden en zullen extra gegevens over de artiest en/of het album van Last.FM opgehaald worden. 4.3.Barcode Library (ZXing) Voor de herkenning van barcodes maakt de applicatie gebruik van de ZXing library voor Android. Om na te gaan hoe goed deze bibliotheek is in het herkennen van verschillende barcodes, heeft het team 41 barcodes getest. Van deze 41 barcodes bleken 32 succesvol herkend te worden. De niet herkende
!
!
!
!
!
4/7
barcodes waren echter wel vaak vervormd en de kwaliteit hiervan was minder duidelijk. Een voorbeeld van een herkende, zowel als van een niet herkende barcodes, is toegevoegd in de bijlage. 4.4.Aanpassing oorspronkelijk storyboard In het oorspronkelijke design was een kadertje aanwezig dat live camerabeelden liet zien. Omdat het koppelen van de camera aan de emulator geen triviale aangelegenheid bleek te zijn is dit kadertje vervangen door de mogelijkheid een afbeelding van een barcode in te laden. Initiëel was het de bedoeling om een geschiedenis van inscande items, samen met hun lokatie te bewaren en dit te koppelen aan google maps. Wegens een gebrek aan tijd is deze feature niet aanwezig in het resultaat. 4.5.Aanpassing oorspronkelijk ontwerp In het eerste ontwerp maakte MP3scraper en ASINfinder gebruik van een eigen scraper. Omdat dit niet efficiënt bleek we rd de scraper code geëxtraheerd en werden MP3scraper en ASINfinder beide afgeleid van de klasse Scraper, die deze nieuwe code bevat.
5.Resultaat In deze sectie wordt kort besproken wat de tevredenheid is van het team over het bekomen resultaat. Als men het storyboard vergelijkt met de huidige applicatie, zal men opmerken dat deze laatste nogal beperkend is t.o.v. het storyboard. Zo zijn de opslag van gescande cd's, de opslag van de locatie waar een cd gescand werd, de voorstelling van de locaties op google maps en het tonen van reviews niet meer geïmplementeerd geraakt. Dit houdt enkele belangrijke beperkingen in die volgens het team toch wel een barrière vormen voor een meer bruikbare succesvolle applicatie. Er is tijdens de loop van het project echter geopteerd voor de meest cruciale aspecten van het project te implementeren. Hiermee wordt bedoeld: barcodes kunnen inlezen, basisinformatie met betrekking tot deze barcode kunnen ophalen en tot slot muziek kunnen afspelen. Algemeen is het team dus zeker en vast te tevreden omdat de kern van applicatie volledig werkende is. De overige uitbreidingen zijn geen zware uitdagingen en zouden in een beperkte tijd ingebouwd kunnen worden.
Multimedia: Modelleren en Programmeren 2009-2010!!
Android projecten die wel reeds tot volwaardige applicaties zijn uitgegroeid, zijn zeker en vast aanwezig op het web. Zo is er bijvoorbeeld ShopSavvy2, dat vooral gericht is op het vinden van de laagste prijs van producten op basis van hun barcode. Een ander voorbeeld is de applicatie Compare everywhere3 , deze applicatie heeft tevens de mogelijkheid samples van liedjes af te spelen, de dichtsbijzijnde locatie te tonen op een google maps document en nog veel meer. Deze laatste applicatie heeft dankzij zijn succes een "developpers challenge" prijs van $275.000 gevonden. Uit deze voorbeelden kan afgeleid worden dat het idee, waarvan het team reeds de kern ontwikkelt heeft, in ieder geval niet onsuccesvol zou geweest zijn in de commerciële wereld.
6.Over Android De eerste globale indruk die het team had van Android en het bijgeleverde ontwikkelplatform is grotendeels dezelfde gebleven in de loop van de ontwikkeling van de applicatie. Hoewel er ook enkele minpunten opgesomd kunnen worden, gaan we deze makkelijkheidshalve bestempelen als kinderziektes. Het Android-platform is nog vrij jong en moet dus nog zijn weg zoeken met de hulp van de feedback van developers4 . Internet wordt ook constant draagbaarder door de verkleining van de toestellen en de toenemende internettoegang. Het is alleszins overduidelijk dat mobiele toestellen die een OS zoals Android of iPhone OS draaien in de nabije toekomst niet meer weg te denken zijn uit het straatbeeld. De integratie in Eclipse ziet er mooi en afgewerkt uit; oa de mogelijkheid om het arsenaal aan XML-files grafisch aan te passen spreekt tot de verbeelding en komt meer dan eens zeer goed van pas. Het was zeker geen slecht idee van Google om de IDE van Android-apps te integreren in Eclipse, een platform dat zijn pluimen al verdiend heeft in de Developer-wereld. Als de ontwikkelaar echter geen echte Android-phone tot zijn beschikking heeft, beginnen de problemen. De meegeleverde emulator is om te
!
!
!
!
!
5/7
beginnen zeer traag en vraagt een immense hoeveelheid werkgeheugen. Het grootste mankement dat is opgedoken, is het gebrek aan enige vorm van camera-simulatie, of het nu adhvde webcam of mockup-filmpjes of -afbeeldingen is. Op het net is er wel een oplossing 5 te vinden om camera-beelden te streamen via een netwerkverbinding, maar deze was gebaseerd op een verouderde versie van de AndroidSDK. Tot slot heeft Android het “voordeel” tegenover de iPhone dat het door verschillende toestanden ondersteund wordt. Bij wijze van spreken kan iedereen een telefoontoestel ontwikkelen waarop Android draait en waar dus ook iedereen applicaties voor kan schrijven. De praktijk6 geeft Apple toch nog steeds een voordeel met een marktaandeel van 40% als we kijken naar het internetgebruik van mobiele telefoontoestellen. Android daarentegen vertegenwoordigt 7% en is net zoals de iPhone nog steeds in stijgende lijn vooruit aan het gaan.
7.Extra http://www.youtube.com/watch? v=zsMdZgBpbtk
8.Besluit In deze opdracht heeft het team geprobeerd toe te passen wat uit vorig project geleerd werd. Zo werd gebruik gemaakt van een Svn-server voor te programmeren en werd gebruik gemaakt van Google docs voor het aanmaken van het verslag in groep. Dit alles om een vlotte samenwerking te bevorderen. Wat het team wel heeft ondervonden, is dat er best reeds vanaf het begin van het project gewerkt moet worden aan het verslag of op zen minst moet bijhouden wat de belangrijke punten zullen worden in het verslag. Vaak kan men zaken, zeker als het aankomt op specifieke technische ontwerpproblemen, beter omschrijven wanneer men er nog wat dichter bijstaat. Het maken van een verslag tijdens de drie weken van het project zorgt eveneens voor een meer
2 http://www.biggu.com/ 3 http://compare-everywhere.com/ 4 Op het moment van schrijven is Android 2.0, Release 1 uitgekomen, met allerlei verbetering tov versie 1.6. 5 http://www.tomgibara.com/android/camera-source 6 http://www.allaboutphones.nl/nieuws/3459/iPhone-Android-en-WebOS-vergroten-hun-marktaandeel.html
Multimedia: Modelleren en Programmeren 2009-2010!!
!
gebalanceerde werktijden waardoor last-minute werk vermeden wordt.
!
!
!
!
6/7
toepassingen kunnen inhouden en dat dit zeker geen toekomstmuziek meer is, maar harde hedendaagse reailiteit.
Voor het overige werd er uit dit project vooral geleerd dat mobiele toepassingen een arsenaal van
9.Appendix Maarten Lambert Binnen sessie Android Tutorials
Buiten sessie
5
Storyboard Vormgeving Ontwerp Implementatie
5
Verslag Totaal
Hans Moorkens Binnen sessie
3
Buiten sessie
5
Binnen sessie
3
Frans Guelinckx
Buiten sessie
5
Binnen sessie
2
Totaal
Buiten sessie
5
Binnen Buiten sessie sessie
3,5
3,5
3,5
2
9
3
4
6
6
6
6
20
5
11
5
5 47,5
10.Bijlagen
Figuur 1: Achitectuur-diagram.
18
0
5 47,5
19 5
45,5
20
11
0
14
0
18
0
24
15
68
0
20
190
190
3
3,5
5 49,5
Gijs Vanderhoydonk
Multimedia: Modelleren en Programmeren 2009-2010!!
Figuur 2: Storyboard
!
!
!
!
!
7/7