PRODUKTDOKUMENTASJON



Like dokumenter
Forord. Brukerdokumentasjon

Forord. Testdokumentasjon

PROSESSDOKUMENTASJON

Eksamen i Internetteknologi Fagkode: ITE1526

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Komme i gang med Skoleportalen

Dennis Myhre Oblig 4 Wordpress Dokumentering og Eksamensoppgaver

HTML5. Skjemaer på nettsider. Skjemaer med. Informasjonsteknologi 1 og 2. Gløer Olav Langslet Sandvika VGS

Overordnet beskrivelse og arkitekturskisse

Lærebok. Opplæring i CuraGuard. CuraGuard Opplæringsbok, - utviklet av SeniorSaken -

Testrapport for Sir Jerky Leap

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Labquality/NKK ELEKTRONISK RESULTATSKJEMA VIA INTERNET. Åpning av skjemaet. Logg inn på Participant services. Velg resultatskjemaet

Tilkobling og Triggere

Google Chrome. Microsoft Edge. Mozilla Firefox. Internet Explorer. Opera. Safari

KOM I GANG MED WORDPRESS En enkel guide for å hjelpe deg gjennom det grunnleggende i Wordpress

Publiseringsløsning for internettsider

Testrapport. Studentevalueringssystem

Teknisk veiledning for internettløsningen av «Tempolex bedre læring».

BRUKERVEILEDNING INTRANETT, CMA ASSET MANAGEMENT AS. Dataingeniørutdanningen, Høgskolen i Oslo GRUPPE 15. Kenneth Ådalen. Vegard Gulbrandsen

Kravspesifikasjon. Høgskolen i Oslo, våren 2011 Sted og dato: Oslo, 9. februar Gruppemedlemmer

Produktdokumentasjon. Madison Møbler Administrasjonsside og Nettbutikk

Introduksjon til. For studenter ved NTNU

4.5 Kravspesifikasjon

Oblig 5 Webutvikling. Av Thomas Gitlevaag

Anitool åpner opp for en hel verden av kreative muligheter på nett. Uten koding eller tunge programmer. Dette er enkelt, webbasert og rimelig!

PBL Barnehageweb. Brukerveiledning

CustomPublish.com. Brukere. Introduksjon til brukerhåndtering i CustomPublish

Oppgavesett videregående kurs i NVivo 9

Brukermanual for nettpublisering. frivilligsentral.no

VEDLEGG 1 KRAVSPESIFIKASJON

Vårt nettsted En håndbok for lokale nettredaktører i fylkes- og lokallag

Brukerdokumentasjon for LabOra portal - forfattere

Testrapport Prosjekt nr Det Norske Veritas

Veileder i bruk av GoodReader

S y s t e m d o k u m e n t a s j o n

Brukerveiledning Bruk av siden. Når du går inn på siden får du opp følgende bilde:

Klargjør for dashbord i it s learning

Administrering av SafariSøk

Generell brukerveiledning for Elevportalen

Steg for steg. Sånn tar du backup av Macen din

INF1000 Metoder. Marit Nybakken 16. februar 2004

Compello Invoice Approval

Bachelorprosjekt 2015

Brukerveiledning My Mediasite 7.2 og Mediasite Catalog i Canvas

Læring. Brukerguide + = Hva er KS Læring? Logg deg på Fra forsiden velg Logg inn i øvre høyre hjørne av skjermen. Utstyr for lyd og bilde

student s104111, s107911, s122357

Bruksanvisning for innlegging av nyheter på Tana kommunes nettsted

Mamut Open Services. Mamut Kunnskapsserie. Kom i gang med Mamut Online Survey

Brukermanual. gostudyit.com

Så hva er affiliate markedsføring?

En enkel lærerveiledning

Kjernejournal. Pilotering - Javafri oppkobling

Velkommen til Pressis.

Jon Hammeren Nilsson, Anders Emil Rønning, Lars Grini og Erling Fjelstad

Publisering av statiske og dynamiske websider til klasserom.net fra Dreamweaver og MySQL

Memoz brukerveiledning

BRUKERMANUAL GOSTUDYIT.COM

Vanlige spørsmål. GallupPanelet. TNS Panel-app. TNS Juni 2015 v.1.3

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Lotus Traveler - Manual for installasjon

Manual for PENDULUM MUSIKER WEBSIDE

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

Introduksjon til Telltur

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

RUTEPLANLEGGINGSSYSTEM BRUKERVEILEDNING

Utførelse av programmer, metoder og synlighet av variabler i JSP

WordPress startguide

Veiledning om RSS, Netvibes, Sesam og Diigo

Brukermanual AquaLog Loggføringsverktøy. Brukermanual AquaLog. Aqualog Loggførgingsverktøy

WinMed3. Release Notes Allmenn Våren Release Notes Allmenn Våren 2013 Versjon Side 1

CONNECT 1.7. Funksjoner i Connect. Connect rommer en masse funksjoner som er nyttige i undervisningen. Her presenterer vi noen av våre favoritter.

JEG KAN.. 1.trinn. IT-plan for elever ved Rørvik skole

Kursdokumentasjon for Dreamweaver

Redd verden. Steg 1: Legg til Ronny og søppelet. Sjekkliste. Introduksjon

14. oktober Brukerveiledning for 123klubb for registrert bruker rollen

Administrasjon av kataloger - Oversikt over innstillinger på kataloger

Ordliste. Obligatorisk oppgave 1 - Inf 1020

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Shellscripting I. Innhold

1. I denne tekstboksen kan du søke etter venner, grupper eller sider.

Skilpaddefraktaler Erfaren Python PDF

16 Excel triks det er smart å kunne

Vedlegg LMC intranett

TESTVEILEDNING. PAPIRFLY Fotoweb. EiendomsMegler 1 Norge AS ved Marit Låtun Papirfly ved Christine Skaar. DATO: April, 2013

Brukerveiledning for kontaktpersoner i kommuner og fylkeskommuner

Mamut Enterprise Partner Web Kunde og Partner Web

Ofte spurte spørsmål (FAQ)

Brukerveiledning WISEflow

Eksamen i Internetteknologi Fagkode: IVA1379

Produktrapport Gruppe 9

Installasjon av Windows 7 og Office 2016

Operatør av Doffin er EU-Supply Holding Ltd. (EU-Supply). Direktoratet for forvaltning og IKT (Difi)

Brukermanual. Trio Visit Web. Trio Enterprise 5.0

Innstillinger. Endre Personalia

MedAxess WinMed Brukermanual

Munik sin hjemmeside BRUKERMANUAL LITAL ROZENTAL-EIDE

Spesifikasjon av Lag emne

Brukerguide for

Transkript:

PRODUKTDOKUMENTASJON

Forord Denne produktdokumentasjonen er delt i to deler. Del 1 er dokumentasjon av fase 1 og inneholder kartlegging av kjente communities. Denne delen av prosjektet ble utført for å finne ut hvilke elementer som er gjengangere i populære communities-sider på nettet. Del 2 er dokumentasjon av fase 2; nettstedet mymp3tone, utviklet med tanke på resultatet av fase 1. Hensikten med del 2 er å gi en introduksjon og oversikt over teknologien og oppbygningen av systemet mymp3tone.com. Systemet er skrevet i.net og Java og det forutsetter derfor at leseren bør ha kjennskap til disse teknologiene. I tillegg bør bruker ha noe kjennskap til database- og GUI-programmering. Dokumentet er i første omgang beregnet for utviklerne i Smartlink som skal vedlikeholde, videreutvikle og forbedre systemet. Det er også laget en brukermanual av produktet, derfor vil ikke produktdokumentasjonen inneholde dette. Det gis derimot oversikt over oppbygning av database, strukturering av kode og installasjon og krav til systemet. Kun relevant kode er beskrevet i dette dokumentet. All kode for produktet er tilgjenglig på medfølgende CD. Page 2 of 48

Innholdsfortegnelse Forord... 2 Innholdsfortegnelse... 3 1. Del 1: Kartlegging... 5 1.1 Innledning... 5 1.2 YouTube... 5 1.3 myspace.com... 6 1.4 facebook... 8 1.5 hi5... 9 1.6 bebo... 10 1.7 Bolt... 11 1.8 friendster... 12 1.9 eblogger... 13 1.10 Utvikling YouTube vs Bolt... 14 1.11 Utvikling hi5 vs Bebo... 14 1.12 Grafiske sammenligninger... 15 1.12.1 Daily Reach:... 15 1.12.2 Daily Traffic Rank Trend:... 15 1.12.3 Daily Pageviews:... 16 2 Konklusjon... 17 2. Del 2: Utvikling av applikasjonen... 18 2.1 Beskrivelse av programmet... 18 2.1.1 Bakgrunn... 18 2.1.2 Oversikt... 18 2.1.3 Systemkrav... 18 3. Teknologier... 19 3.1 Rammebetingelser... 19 3.2 Utviklingsmiljø... 19 3.3 Nettlesere... 19 3.4 Beskrivelse av teknologier... 20 3.4.1 ASP.NET 2.0... 20 3.4.2 C#... 20 3.4.3 CSS... 20 3.5 Sikkerhet... 20 3.6 Integritet... 24 4. Database... 25 Page 3 of 48

4.1 Arkitektur... 25 4.2 Databasestruktur... 25 4.3 Databasemodell... 26 4.4 Tabelloversikt... 27 5. Beskrivelse av system... 30 5.1 Generell beskrivelse... 30 5.2 Navigasjonsmodell... 30 5.3 Brukers syn på systemet... 31 5.3.1 Use-Case 1 Anonym Bruker... 31 5.3.2 Beskrivelse av use-case Anonym Bruker... 31 5.3.3 Use-Case 2 Innlogget bruker uten profil... 33 5.3.4 Beskrivelse av use-case Innlogget bruker uten profil... 33 5.3.5 Use-Case 2 Innlogget bruker med profil... 34 5.3.6 Beskrivelse av use-case Innlogget bruker med profil... 34 6. Hoveddeler av systemet... 36 6.1 Sideoppbygning... 36 6.2 Masterpage... 36 6.3 Header... 37 6.4 Footer... 37 6.5 Hovedside... 38 6.6Venstre panel... 38 6.7 Høyre panel... 38 6.8 Mappestruktur... 38 6.9 Utvalgte metoder... 40 6.9.1 Metoder... 40 6.9.2 Page_load metoden... 40 6.9.3 _tune_is_private(int _id)... 42 6.9.4 _return_joined_date() / _toal_users()... 43 6.9.5 _check_for_profile()... 44 6.9.6 _get_top_ringtones()... 45 Figurliste... 47 Vedlegg... 48 Vedlegg 1... 48 Page 4 of 48

1. Del 1: Kartlegging 1.1 Innledning Denne delen er fase 1 av prosjektet og dokumenterer kartlegging av kjente community-sider. Denne kartleggingen danner grunnlaget for hvilke elementer, vi i samarbeid med oppdragsgiver, fant det naturlig å ha med på nettstedet mymp3tone.com. 1.2 YouTube Youtube.com er primært en tjeneste som tilbyr opplasting og deling av videofilmer. Tjenester som ikke krever ikke innlogging 1. Søke i og se på videoer som andre har lastet opp. 2. Sende url med video til email adresse. Tjenester som krever innlogging 1. Deling av video. 2. Kommentere andres video. 3. Stemme på videoer. 4. Lage og dele spillelister. 5. Legge en video til 'Dine favoritter'. Andre tjenester 1. Videoer er sortert på kategori. 2. Videoer er sortert på forskjellige kanaler (komikere, musikere etc). 3. Mange forskjellige top-lister (mest vist i dag, top rangert, mest diskutert, mest linket etc). Page 5 of 48

Kommentar Lite oversiktlig side, veldig mye reklame og linker. Forstyrrende ikoner som blinker. YouTube s utvikling (kilde : http://www.alexa.com ) 1.3 myspace.com Figur 1.2.1 YouTube's utvikling MySpace.com er primært et nettsamfunn for å kommunisere med venner og bekjente, men nettsiden tilbyr også brukere en del andre tjenester. Tjenester som ikke krever ikke innlogging 1. Søke etter bekjente som har profil. 2. Søke i og se videoer, blogger og forum. Tjenester som krever innlogging 1. Laste opp filer. 2. Lage profil. 3. Legge til venner. 4. Lage ringetoner. 5. Selge dine ringetoner (til venner). 6. Stemme på videoer. Page 6 of 48

Andre tjenester 1. Brukere av myspace som er på MSN Messenger kan linke profilsiden sin opp mot Messenger slik at kontaktene på Messenger enkelt kan besøke brukerens profil på myspace. 2. Siden har en egen oversikt over alt fra ledige jobber til små og store gjenstander som er til salgs. 3. Kategorisering av alle tjenester (videoer, blogg etc). 4. Søkefunksjon for hele nettsiden. 5. Søkemuligheter innenfor alle tjenester (forum, blogg etc). Kommentar Registreringen krever mye informasjon. Når man har fylt ut alle felter som kreves (navn, e-post, land, fødselsdato etc.) så blir man først spurt om man vil laste opp bilde til profilen, deretter blir man spurt om man vil invitere venner, og så først kommer man inn på sin egen profil. Siden er litt uoversiktlig og noe rotete, mye reklame. MySpace s utvikling (kilde : http://www.alexa.com ) Figur 1.3.1 MySpace's utvikling Page 7 of 48

1.4 facebook Facebook er en side som består av mange separate nettverk, hovedsaklig skoler og firmaer. Tjenester som ikke krever ikke innlogging 1. Take the Tour lær om Facebook. 2. Finn ut om venner er registrert ved å skrive inn e-postadressen din, Facebook går deretter igjennom din kontaktliste og gir deg eventuelle treff. Tjenester som krever innlogging 1. Søke etter personer. 2. Se profiler. 3. Sende private beskjeder. 4. Opprette grupper. 5. Legge ut bilder. 6. Skrive / se på wall en til andre brukere. 7. Bli medlem av en gruppe. 8. Se på bilder, se gruppeinformasjon. Kommentar Hvis man ser bort fra at man må registrere seg for å kunne gjøre noe som helst er dette en meget ryddig og oversiktlig nettside. Alle tjenestene er lett å bruke. Designet er rolig og behagelig. Meget lite reklame sammenlignet med de andre nettstedene i denne kartleggingen. Facebook s utvikling (kilde : http://www.alexa.com ) Figur 1.4.1 Facebook's utvikling Page 8 of 48

1.5 hi5 hi5.com er en tjeneste for å holde orden på vennene dine. Finn andre mennesker med samme interesser som deg selv. Tjenester som ikke krever innlogging 1. Søke blant alle profiler (søkeverktøy som ikke fungerer optimalt). 2. Se på andre sine profiler. 3. Se på / høre på bilder / video / musikk. Tjenester som krever innlogging 1. Lage og redigere egen profil. 2. Legge til venner. 3. Laste opp bilder / video / musikk. 4. Innmelding i grupper. 5. Sende / motta melding fra andre brukere. 6. Kommentere andres bilder / videoer og / eller musikk. 7. Chat. 8. Editere din og andres «tavle». Kommentar Pen og oversiktlig side som er brukervennlig. Litt reklame, men ikke overdrevent mye. Registreringen krever en del informasjon om brukeren. Hi5 s utvikling (kilde : http://www.alexa.com ) Figur 1.5.1 Hi5's utvikling Page 9 of 48

1.6 bebo Bebo er et sosialt nettverk som tilbyr brukere å dele bilder og lage blogg. Muligheter for å lage quiz er og avstemmninger. Tjenester som ikke krever innlogging 1. Se andres profiler og det de eventuelt deler. Tjenester som krever innlogging 1. Lage / editere profil. 2. Legge til venner. 3. Laste opp filer (bilder / musikk / video). 4. Lage quiz. 5. Starte blogg. 6. Starte «polls» (avstemninger). 7. Lage «widgets» (små applikasjoner som kan gjøre alt fra nyttige til unyttige operasjoner). 8. Editere din og andres «tavle». Kommentar Krever litt mye informasjon ved registrering. Felter som ikke fylles ut i profilen fremstår blanke, noe som ikke ser helt bra ut. Noen få reklameannonser som blinker, kan være slitsomt for brukerne. Bebo s utvikling ( kilde : http://www.alexa.com ) Figur 1.6.1 Bebo's utvikling Page 10 of 48

1.7 Bolt Bolt er (i følge dem selv) den beste nettsiden for opplasting og deling av video, bilder og musikk på nettet. Tjenester som ikke krever innlogging 1. Se på videoer. Tjenester som krever innlogging 1. Opplasting av filer. 2. Deling av filer. 3. Skrive blogg. 4. Skrive kommentarer. Kommentar En helt grei nettside som minner om YouTube når det kommer til tjenester. Siden har et ryddig utseende og vesentlig mindre reklame enn mange av de andre sidene i denne kartleggingen. Bolt s utvikling ( kilde : http://www.alexa.com ) Figur 1.7.1 Bolt's utvikling Page 11 of 48

1.8 friendster Friendster er et nettsamfunn for å holde kontakt med venner og kjente. Tjenester som ikke krever ikke innlogging 1. Søke etter personer og se profilene fra søketreffet. Tjenester som krever innlogging 1. Opprette grupper. 2. Anmeldele musikk, bøker, filmer og tv-program. 3. Motta bursdagsalarmer på e-post. 4. Velge hvem som kan legge til kommentarer i profilen din. 5. Skreddersy profilen din med egne farger, musikk og video. Andre tjenester 1. Tilbyr i store trekk de samme tjenestene som Myspace.com, som for eksempel en oversikt over stillingsannonser og ledige leiligheter for leie etc. Kommentar Pen og ryddig side uten for mye reklame. Friendster s utvikling ( kilde : http://www.alexa.com ) Figur 1.8.1 Friendster's utvikling Page 12 of 48

1.9 eblogger Blogger er et publiseringsverktøy for personer som er mest opptatt av å blogge. Tjenester som ikke krever ikke innlogging 1. Ingen tjenester. Tjenester som krever innlogging 1. Opprette blogg. 2. Publisere bilder. Andre tjenester 1. Brukerne kan publisere tekst og bilder via mobil. 2. Velg mellom mange forskjellige skin s (grafikk / utseende). Kommentar Enkelt å registrere seg, kun tre steg for å komme i gang. Siden er gjennomført og har et pent design. Minimalt med reklame. Blogger s utvikling ( kilde : http://www.alexa.com ) Figur 1.9.1 Blogger's utvikling Page 13 of 48

1.10 Utvikling YouTube vs Bolt Figur 1.10.1 Utvikling YouTube vs Bolt 1.11 Utvikling hi5 vs Bebo Figur 1.11.1 Utvikling hi5 vs Bebo Page 14 of 48

1.12 Grafiske sammenligninger 1.12.1 Daily Reach: Figur 1.12.1.1 Daily reach 1.12.2 Daily Traffic Rank Trend: Figur 1.12.2.1 Daily traffic rank trend Page 15 of 48

1.12.3 Daily Pageviews: Figur 1.12.3.1 Daily pageviews Page 16 of 48

2 Konklusjon Etter å ha brukt god tid på hvert enkelt nettsted har vi kommet frem til at de fleste community-sider på internett krever en del informasjon ved registrering. Noen av nettstedene krever såpass mye informasjon at man nesten ikke har lyst å registrere seg, fordi prosessen er relativt kjedelig og tar tid. Det er helt klart en ulempe, også med tanke på at mange personer ikke ønsker å fylle inn informasjon om for eksempel sivilstatus, fødselsdato etc. En annen sak som også er viktig for en community-side er at den er oversiktlig og ryddig. Reklame er definitivt en uting når annonsene er store, har rulletekst og / eller blinkende ikoner. Når det kommer til tjenester som er populære så er det tydelig at opplasting og deling av bilder, videoer og musikk står øverst på listen. Det er også populært med rating-muligheter for opplastede filer (spesielt videoer). På den måten blir det motiverende for brukere å laste opp filer for så å se om de når opp på topplistene (for eksempel Topp 5 videoer ). I forhold til design og brukergrensesnitt ser vi at det varierer en del hvordan de forskjellige sidene er utformet. Vi har tro på et enkelt design med få farger, en enkel meny som er lett å bruke og reklame som ikke tar altfor mye oppmerksomhet. Tooltips (informasjon som vises når man holder datamusen over en fane, link etc.) er en brukervennlig metode for å gi en kort forklaring på hvert enkelt valg i brukergrensesnittet. Selv om design og brukervennlighet har en del å si for populariteten er det til syvende og sist media som "bestemmer" hvilke sider som blir populære. F.eks vil et enkelt søk i VG's arkivdatabase på "YouTube" resulterer i over 100 treff, mens et søk på "Bolt" resulterer i 0 treff. Dette er to sider som er så og si identiske i både oppbygning og virkemåte. De tilbyr også samme type tjenester. Bolt har faktisk eksistert lengre enn YouTube, likevel er det sistnevnte som er desidert mest populær. Vi kan konkludere med at det er en klar sammenheng mellom mediaomtale og populariteten til community-sidene. Page 17 of 48

2. Del 2: Utvikling av applikasjonen 2.1 Beskrivelse av programmet 2.1.1 Bakgrunn Mymp3tone.com er en tjeneste hvor brukere kan laste opp- og lage et utsnitt av en låt, og deretter laste ned låten til sin mobil via wap. Smartlink AS ønsket å videreutvikle dette nettstedet med community-tjenester, og dette har vært vår oppgave. Tjenesten har vært lansert i Australia men vi vet ingenting om hvor mange brukere tjenesten har og hvor populær den er per dags dato. 2.1.2 Oversikt Produktet er en komplett community-portal med hovedvekt på tilpassing av mp3-låter til ringelyder og sms-signaler. Siden gir brukere mulighet til å publisere sine egne ringelyder for et bredt publikum. Den gir også brukere tilgang til en stor database med fritt tilgjengelige lyder for mobil. Siden er delt inn i to deler; en for de som kun er interessert i å laste ned låter til sin mobil, og en for de som er interessert i å dele låtene sine med andre, samt få tilgang til andres delte låter. Hovedgrunnen til at portalen er bygget opp på denne måten er at oppdragsgiver ønsker flest mulig registrerte brukere til nettstedet. At brukerne får tilgang til å bruke tjenesten uten å måtte registrere seg med en hel del personlig informasjon, gjør at flere velger å registrere seg enn det som ville vært tilfellet dersom bruker ville blitt presentert et stort registreringsskjema ved første gangs bruk. Dette er informasjon som er gitt til oss fra oppdragsgiver som mener at jo flere steg brukeren må gjennom, jo lettere er det for bruker å miste interessen for nettstedet. For å få fullt utbytte av nettstedet er man avhengig av en mobiltelefon som støtter wap i tillegg til nettilgang. Nettstedet krever i utgangspunktet ikke at bruker har spesielle datakunnskaper men man bør ha en viss forståelse for hvordan man bruker en mobiltelefons wapfunksjon. 2.1.3 Systemkrav For å kunne bruke systemet trenger bruker kun nettilgang og mobiltelefon med wap-støtte. Utviklerne trenger Microsoft Visual Studio med AJAX Control Toolkit installert. Page 18 of 48

3. Teknologier 3.1 Rammebetingelser Arbeidsgiver hadde brukt ASP.NET og J# i sin eksisterende løsning, så det var natulig for oss bruke ASP.NET når vi skulle videreutvikle løsningen deres. Vi har lest at J#(J Sharp) skal ut av rammeverket til.net i nærmeste framtid, derfor valgte vi heller å erstatte dette med C# ( C sharp). Dette var også helt greit for oppdragsgiver. Siden ingen på gruppen hadde kompetanse i.net fra før, ville det bli en stor, men interessant utfordring å sette seg inn i dette. Arbeidsgiver ønsket også at vi skulle bruke AJAX Control Toolkit til ratingen av låter. Ellers hadde vi det ganske fritt med tanke på hvordan oppgaven skulle løses, men de ønsket å beholde noen av elementene de hadde i sitt opprinnelige designet. Det var også et krav fra bruker å bruke det innebygde log-in-systemet til.net. 3.2 Utviklingsmiljø Vi valgte å bruke Microsoft Visual Studio 2005 som utviklingsplattform. Ganske enkelt fordi det var dette som ble anbefalt av oppdragsgiver. Det var også dette utviklingsmiljøet vi kom til å jobbe med i faget Webprogrammering i.net. 3.3 Nettlesere En webapplikasjon bør, og skal kunne vises tilnærmet likt i de aller fleste nettlesere, iallefall de tre store; Microsoft Internet Explorer, Mozilla Firefox og Opera. Vi har derfor kontinuerlig testet applikasjonen vår i følgende nettlesere; Firefox v2.0.0.3, Opera 9.20, Microsoft Intenet Explorer 7.0.6 og 6.0.2. Grunnen til at vi har testet i to forskjellige versjoner av Microsoft Internet Explorer er at vi har funnet ut at de to versjonene tolker html-tags forskjellig. Dette sammen med at mange som bruker Microsoft Internet Explorer ikke oppdaterer til nyeste versjon, gjorde at vi valgte å ta med begge disse i testene. Brukere av Firefox og Opera er mest sannsynlig flinkere til å holde seg oppdatert, så vi har ikke testet applikasjonen i eldre versjoner av disse. Vi har heller ikke testet applikasjonen med mindre oppløsning enn 1024 * 768, da veldig få, om i det hele tatt noen, idag bruker lavere oppløsning. Page 19 of 48

3.4 Beskrivelse av teknologier 3.4.1 ASP.NET 2.0 ASP.NET er den delen av.net-rammeverket som omfatter utvikling på web (System.web). Dette kan være alt fra en liten enkel personlig hjemmeside til store enterprise-applikasjoner. ASP.NET omfatter både web-applikasjoner og web- services. 3.4.2 C# C# ( C sharp ) er et objektorientert programmeringsspråk som er skreddersydd for.net. C# bygger i likhet med Java på C/C++, men det finnes en del forskjeller. C# er relativt raskt med C++ -muligheter som bl.a. pekere. Syntaksen og programmeringsstrukturen ligner på Java. 3.4.3 CSS CSS er en forkortelse for Cascading Style Sheets. CSS er en utvidelse av HTMLstandarden og er laget for at man lettere skal kunne formatere ett eller flere dokumenter. CSS brukes for å skille kode og design, noe som gjør at det blir mye mer oversiktlig. Ved å endre informasjon i en CSS-fil kan man designe om et helt nettsted. 3.5 Sikkerhet Smartlink ønsket å bruke innloggingssystemet som er innebygd i ASP.NETrammeverket. Dette gjorde jobben for oss veldig mye enklere med tanke på sikkerhet ved innlogging og registrering. Dette er elementer som har gjennomgått mye testing og som er utviklet av veldig flinke programmerere. Siden vi sender med f.eks id til en låt som argument fra en side til en annen, vil det være enkelt for en datakyndig bruker å endre disse verdiene, for å få tilgang til data han/hun ikke skal ha tilgang til. De vil enkelt kunne endre id-nr i urlvinduet i browseren sin. Vi har derfor lagt inn mange kontroller i C# -koden for å hindre at brukere får tilgang til låter de ikke skal ha tilgang til. For visning av låter gjelder dette kun for låter som er satt som private av eier. Alle andre låter skal alle brukere ha mulighet til å gå inn å se/ høre på. Vi løste dette ved å lage en metode som sjekker om en låt er private. Se fig (3.5.1). Denne metoden returnerer false dersom låten ikke er private og true dersom låten er private. Dette alene er ikke nok, siden brukere skal ha tilgang til å vise sine egene private låter. Derfor måtte vi også implementere metoden _check_if_tune_is_logged_in_users(int _id) (fig 3.5.2). Det denne metoden gjør, er å returnere true dersom låten som er gitt som argument tilhører den innloggede bruker, og false hvis ikke. Ved hjelp av disse metodene er det enkelt å avgjøre om pålogget bruker faktisk har rettigheter til å se / høre på den aktuelle låten. Page 20 of 48

protected Boolean _tune_is_private(int _id) Boolean private_tune = false; string query = "SELECT tune_id FROM users_tune " + "WHERE " + "tune_id = @requested_tune_id " + "AND " + "share_tune = 0" ; try using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) con.open(); using (SqlCommand com = new SqlCommand(query, con)) com.parameters.addwithvalue("@requested_tune_id", _id); SqlDataReader rdr = com.executereader(); if (rdr.read()) private_tune = true; con.close(); // end try catch (SqlException) catch (IndexOutOfRangeException) return private_tune; // end of metod _tune_is_private Fig. 3.5.1 Listing av metode _tune_is_private(int _id) Page 21 of 48

protected Boolean _check_if_tune_is_logged_in_users(int _id) Boolean retur_verdi = false; // user is logged in if (User.Identity.IsAuthenticated) // get the userid string userid_users = Membership.GetUser().ProviderUserKey.ToString(); // build the query string query = "SELECT tune_id FROM users_tune " + "WHERE user_id = @userid_users " + "AND " + "tune_id = @requested_tune_id"; try using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) con.open(); using (SqlCommand com = new SqlCommand(query, con)) com.parameters.addwithvalue("@userid_users", userid_users); com.parameters.addwithvalue("@requested_tune_id", _id); SqlDataReader rdr = com.executereader(); if (rdr.read()) retur_verdi = true; con.close(); // end try catch (SqlException) _sql_error(); catch (IndexOutOfRangeException) _sql_error(); return retur_verdi; Fig 3.5.2 Metoden _check_if_tune_is_logged_in_users(int _id) De samme metodene brukes også for å hindre uvedkommende å editere- og slette låter de ikke har tilgang til. Alle sidene som krever innlogging, bruker.net- rammeverket sin innebygde funksjon User.Identity.IsAuthenticated og HttpContext.Current.User.Identity.IsAuthenticated for å identifisere brukere som pålogget. På de sidene som i tillegg krever at bruker har opprettet en brukerprofil, bruker vi metoden _check_for_profile(). Denne metoden returnerer true dersom innlogget bruker har profil og false hvis ikke. For mer detaljert informasjon om denne metoden hendvises det til kildekoden på CD. Page 22 of 48

Potentially dangerous client input value, dvs html-tags og script kode, og lignende, blir håndtert direkte i.net- rammeverket, så dette har vi ikke behøvd å ta hensyn til. Et annet punkt vi har tatt hensyn til er om en bruker prøver å få tilgang til kataloger han/hun ikke har tilgang til. Default- url'en til siden er mymp3tone.com/startpage.aspx. Om bruker fjerner startpage.aspx, vil han/hun normalt da få tilgang til kataloglistingen. Se fig 3.5.3. ASP.NET viser automatisk filer ved navn default.aspx, så ved å legge en fil med det navnet ned i hver katalog vil bruker få opp den filen istedet for katalog- listingen. Se fig 3.5.4. Fig 3.5.3 Kataloglisting uten default.aspx filen i katalogene. Fig 3.5.4 Kataloglistingen med default.aspx i hver katalog. Page 23 of 48

3.6 Integritet Rating-funksjonen på mange av dagens nettsteder, f.eks snutter.no, bruker enten sessions eller cookies for å lagre informasjon om en bruker har ratet en låt/video eller ikke. Dvs at ved å slette cookies og sessions vil bruker få tilgang til å rate objektet på nytt. Dette gjør det også veldig enkelt å lage et script som kan gå kontinuerlig for å få opp ratingen på objekter. Siden det var et ønske fra oppdragsgiver at man kun skal kunne rate låter én gang, valgte vi å lagre disse dataene i en databasetabell. Eneste mulighet for bruker å rate samme låten flere ganger er da å opprette en ny bruker for hver gang han/hun skal rate. Dette er en operasjon som vanskelig lar seg gjøre ved hjelp av script. At brukere registrer seg flere ganger er noe man får gjort veldig lite med. Page 24 of 48

4. Database 4.1 Arkitektur Denne figuren viser flyten i webapplikasjonen. Figur 4.1.1 Flyten i webapplikasjonen 4.2 Databasestruktur Alle data blir lagret i en database. Aspnetdb.mdf, som er en del av ASP.NET, er brukt som grunnlag, siden oppdragsgiver ønsket å benytte de innebygde funksjonene i.net for registering og pålogging til websiden. Page 25 of 48

4.3 Databasemodell Figur 4.3.1 viser hvordan databasetabellene er bygd opp, samt relasjonenen mellom tabellene. Oversikten finnes også i større format. Se vedlegg nr 1. Figur 4.3.1 Databaseoversikt Page 26 of 48

4.4 Tabelloversikt Under følger oversikt over alle 8 tabellene i databasen. Aspnet_Users Beskrivelse: Dette er en av de innebygde tabellene i aspnetdb.mdf som inngår i.net rammeverket. Oppdragsgiver ønsket at vi skulle bruke dette. Vi har tatt med denne tabellen for å vise relasjonene mellom denne og våre tabeller. Relasjon: UserID er FKi tabellene userprofile og wap_profile. Userprofile Beskrivelse: Denne tabellen inneholder informasjon om brukers personlige profil. Relasjon: Profile_id er FK i tabellen profile_has_ratings. Denne tabellen har PK'en UserId fra aspnet_users som FK. Page 27 of 48

Users_tune Beskrivelse: Denne tabellen inneholder informasjon om alle låtene. Id_saved_tune er PK i tabellen der Smartlink lagrer sine låter og opptrer derfor som FK i denne tabellen. Tabellen der Smartlink lagrer sine låter er ikke beskrevet her ettersom dette ikke tilhører oppgaven vår. Relasjon: Tune_id er FK i tabellene profile_has_ratings, tune_comment, wap_profile og tune_has_ratings. Tune_rating Beskrivelse: Denne tabellen inneholder en låts stemmer. Relasjon: Rating_id er FK i tabellen tune_has_rating. Tune_has_ratings Beskrivelse: Denne tabellen er en hjelpetabell for å hindre en mange-til-mange relasjon. Relasjon: Den har PK fra tabellene tune_rating og users_tune som FK. Page 28 of 48

Profile_has_rating Beskrivelse: Denne tabellen er en hjelpetabell for å hindre en mange-til-mange relasjon. Relasjon: Den har PK fra tabellene userprofile og users_tune som FK. Tune_comment Beskrivelse: Denne tabellen inneholder en låts kommentarer. Relasjon: Den har PK fra tabellen users_tune. Wap_profile Beskrivelse: Denne tabellen inneholder låtene i wapprofilen. Relasjon: Den har PK fra tabellene users_tune og aspnet_users. Page 29 of 48

5. Beskrivelse av system 5.1 Generell beskrivelse Målgruppen for mymp3tone.com er alle som er opptatte av personlige ringelyder og sms-signaler til mobil. Folk som har gått lei av å betale mye penger for en ringelyd de ikke har mulighet til å høre på forhånd og som som regel er av veldig dårlig kvalitet. Community-delen er for å få folk til å aktivt bruke siden til noe mer enn kun å laste ned låter. 5.2 Navigasjonsmodell Figur 5.2.1 viser flyten i systemet. Når bruker entrer mymp3tone.com har man flere valg. Page 30 of 48

Figur 5.2.1 Navigasjonsmodell 5.3 Brukers syn på systemet Her viser vi hvordan en sluttbruker vil oppleve systemet. Dette gjør vi ved hjelp av use-case diagram og en beskrivelse av disse. 5.3.1 Use-Case 1 Anonym Bruker Figur 5.3.1.1 viser hvordan en anonym bruker opplever systemet. 5.3.2 Beskrivelse av use-case Anonym Bruker Home Dette er første siden som bruker møter i det han kommer til siden mymp3tone.com. Page 31 of 48

Create Tune Siden for å laste opp- og lage sin egen unike ringetone / sms-signal lastes. Her kan bruker laste opp sin egen mp3-låt, klippe ut det utsnittet som bruker vil ha, velge lengde på låten, fra 1 sekund til 45 sekund. For å overføre denne til mobilen må brukere registrere sin personlige konto på mymp3tone.com. Demo Denne siden inneholder en grafisk demonstrasjon bestående av 5 steg, som tar brukeren gjennom alle de stegene han/hun må igjennom for å få lastet ned sin unike ringetone / sms-signal til mobilen. Prices Viser en oversikt over hva det koster å bruke mymp3tone.com FAQ Frequently asked questions. Her kan brukeren få svar på ting han/hun eventuelt måtte lure på. About En side som informerer brukeren hva mymp3tone.com er. Login Her kan brukere som har registrert seg på mymp3tone.com før, logge seg inn på siden. Dette medfører at brukeren får flere valg, beskrevet i de andre usecasene. Her har vi brukt ASP.NET's innebygde log-in funksjon. Register Her kan brukere opprette sin egen konto på mymp3tone.com. Dette må gjøres for å kunne utnytte siden fullt ut. Du kan f.eks ikke laste ned låter til mobilen din før du har registrert deg. Her har vi brukt ASP.NET's innebygde registerfunksjon. Search Tune Bruker kan her søke etter låter, artister, album etc. View Tunes Ut i fra søk etter låter kan bruker trykke seg videre for å se detaljert informasjon om en enkelt låt. Page 32 of 48

5.3.3 Use-Case 2 Innlogget bruker uten profil Figur 5.3.3.1 viser hvordan en anonym bruker opplever systemet. 5.3.4 Beskrivelse av use-case Innlogget bruker uten profil Kort beskrivelse av nye case for innlogget bruker på mymp3tone, som ikke har laget seg en brukerprofil. Home, Create Tune, Demo, Prices, FAQ, About og search oppfører seg akkurat som ved use-case 1. Logout Bruker logger ut fra siden og blir til en anonym bruker. Får da rettigheter etter use-case 1 diagrammet. Wapprofile Her kan bruker til enhver tid se hvilke låter han/hun har tilgjengelig på sin wapportal. Bruker får også en oversikt over alle tidligere låter som han/hun har lastet ned fra mymp3tone.com. Page 33 of 48

Create Profile Her kan bruker opprette sin egen profil. Denne profilen brukes i community delen av mymp3tone.com, og gir bruker tilgang til mange nye funksjoner. Disse er beskrevet i use-case 3 diagrammet. 5.3.5 Use-Case 2 Innlogget bruker med profil Figur 5.3.5.1 viser hvordan en anonym bruker opplever systemet. 5.3.6 Beskrivelse av use-case Innlogget bruker med profil Bruker har her tilgang til de samme sidene som ved use-case2, med unntak av create profile. Page 34 of 48

My Tunes Her får bruker listet ut alle låtene sine på mymp3tone.com, med hurtigknapper til add to wap, delete tune og edit tune information. View Profile Bruker får her listet ut informasjonen som mymp3tone.com har lagret om han/henne. Samt en oversikt over brukerens mest populære- og høyeste rangerte låter, etc. Edit Profile Bruker kan endre sin personlige informasjon. Edit Tune Bruker kan endre informasjonen om låten sin. Noen valg vil være umulig å endre, som f.eks varigheten på låten. Delete Tune Brukeren kan slette sine egne låter på mymp3tone.com. Rate Tune Bruker kan rate andre brukere sine låter. Brukeren kan kun rate en låt 1 gang. Han/ hun har heller ikke mulighet til å rate sine egne låter. Comment Tune Bruker kan kommentere sine egne og andre sine låter. Antallet kommentarer pr bruker pr låt er ubegrenset. Logout Bruker logger ut av mymp3tone.com. Page 35 of 48

6. Hoveddeler av systemet 6.1 Sideoppbygning Figur 6.1.1 Startside 6.2 Masterpage I ASP.NET 2.0 har man mulighet til å lage noe som kalles "MasterPages". Dette er en teknologi som gir sidene dine et felles utseende uten bruk av "frames". En masterpage erstatter altså rammeverket som tidligere ble inkludert på websider. Når du skal opprette en ny side i en webløsning som benytter masterpages, så oppretter du en side på grunnlag av den masterpage du ønsker. Man kan ha flere masterpages for samme nettsted. På masterpage kan man opprette en eller flere contentplaceholdere hvor undersidene til websiden blir vist. Alt annet innhold, dvs det som ligger i selve masterpage-filen, forblir uforandret. Man kan selvfølgelig ha dynamisk innhold på selve masterpage'n som forandrer seg ettersom f.eks bruker logger på og logger av. Figur 1.2 viser masterpage slik den ser ut hos oss. Venstre og høyre panel, samt header og footer er den delen av masterpage'n som ikke forandrer seg, mens hovedsiden er contentplaceholderen som viser alle de andre sidene. Page 36 of 48

Figur 6.2.1 Masterpage 6.3 Header Her finner du mymp3tone.com-logoen og menylinjen. Figur 1.3 viser menylinjen når bruker ikke er registrert og figur 1.4 viser menylinjen når bruker er registrert og logget inn. Figur 6.3.1 Ikke logget inn Figur 6.3.2 Logget inn 6.4 Footer Denne inneholder ingen funksjon bortsett fra kort informasjon om hvem som har laget siden. Page 37 of 48

6.5 Hovedside Her ligger contentplaceholderen som viser alle sider. På de fleste sider går det igjen en informasjonsboks. Denne informasjonsboksen er bygget opp av tre bilder satt i en tabell. Figur 6.5.1 Informasjonsboks 6.6Venstre panel Dette panelet lister ut top fem ringetoner, siste fem opplastede sms og mest nedlastede låter. Figur 6.6.1 Panel 6.7 Høyre panel Her listes siste fem opplastede ringetoner og top fem sms ut. Dette panelet inneholder også et søkefelt. 6.8 Mappestruktur Under finnes en oversikt over mappene systemet inneholder. I App_Codemappen ligger alle klassene som inneholder felles metoder som mange av undersidene bruker. I App_Data-mappen ligger databasen. Bin inneholder elementer laget av AJAX Control Toolkit for å kontrollere rating-systemet. Cssmappen inneholder stilsettet. Error_pages inneholder alle sidene som håndterer unntakene som blir kastet. Images inneholder bilder. Page 38 of 48

Figur 6.8.1 viser alle mapper og mappestrukturen. Mappe App_code App_data Bin css error_pages images Innhold Denne inneholder to klasser med felles metoder som mange av de andre.cs-filene bruker. Denne inneholder ASPNETDB.MDF, som er selve databasen. Dette er en katalog som blir automatisk laget når man bruker AJAX toolkit i ASP.NET. Etter ønske fra oppdragsgiver. Inneholder main.css Inneholder html-sider som generer feilrapporter dersom det f.eks skjer noe galt ved oppkobling mot databasen eller dersom bruker taster inn noen verdier som gir overflowexception. Inneholder alle bilder. Figur 6.8.1 Mappestruktur Page 39 of 48

6.9 Utvalgte metoder 6.9.1 Metoder Detaljert listing og forklaring på utvalgte metoder som går igjen i mange av undersidene i mymp3tone.com. Vi har kun valgt å ta med enkelte metoder her da det å liste ut og kommentere alle ville blitt veldig uoversiktilig. For øvrig dokumentasjon på alle metodene henvises det til kildekoden på CD. 6.9.2 Page_load metoden Denne metoden lastes hver gang en aspx side lastes inn i nettleseren din. Vi har brukt denne metoden for å sikre integriteten til applikasjonen. Den vil variere noe fra side til side, ettersom tilgangen brukeren har til siden ikke er den samme.eks. alle brukere har tilgang til demo.aspx siden, men kun brukere som er logget på og har laget seg en brukerprofil har tilgang til edit_profile.aspx. Denne metoden er også brukt for å hindre at brukere manuelt prøver å se på låter (de som er private) de ikke har tilgang, slette låter som de ikke selv har lastet opp etc. Hentingen av req_tune_id, som blir sendt med som argument i url en er lagt inn i en try-catch blokk for å hindre at brukere taster inn bokstaver eller tall som er for store. Vi har valgt å converter agrumentet til int32. Dette skulle være mer enn nok til å lagre alle låtene. Vi bruker den innebygde funksjonen User.Identity.IsAuthenticated for å sjekke om bruker er logget på. Den aktuelle listingen er hentet fra edittune.aspx.cs protected void Page_Load(object sender, EventArgs e) // datatype that holds different information about the user / tunes Boolean hasprofile = _check_for_profile(); Boolean privatetune = _tune_is_private(); Boolean yourtune = _check_if_tune_is_logged_in_users(); Boolean tune_exsist = _does_tune_exsist(); // set this to 0, if zero, no agrument is given int requested_tune_id = 0; try requested_tune_id = Convert.ToInt32(Request.QueryString["req_tune_id"]); /* * if something goes wrong here the user has * manually typed in a number or a string * The user will then automatically be * sent back to the startpage. */ catch (OverflowException) Response.Redirect("startpage.aspx"); catch (FormatException) Response.Redirect("startpage.aspx"); Page 40 of 48

// The user isnt logged in if (!User.Identity.IsAuthenticated) _not_logged_in(); // The user is logged in, but doesnt have a userprofile else if (User.Identity.IsAuthenticated &&!hasprofile) _no_profile(); // The user is trying to reach the page with no argument else if (requested_tune_id == 0) _no_argument(); // The user is trying reach a tune that doesnt belong to him/her else if (!yourtune) _private_tune(); // The tune is private and it doesnt belong to the user else if (privatetune &&!yourtune) _private_tune(); // The requested tune id doesnt exist. else if (!tune_exsist) _no_tune(); // The user is allowed to edit the tune information else if (!IsPostBack) _get_selected_tune(); // end of method page_load Page 41 of 48

6.9.3 _tune_is_private(int _id) Denne metoden inngår blant annet i edittune.aspx.cs og detailedtune.aspx.cs. Det denne metoden gjør er å returnere false dersom låten er public og true dersom låten er private. Ved hjelp av denne metoden kan vi da hindre brukere å liste ut låter som de ikke har tilgang til. Det er kun låter som er lagret som public som andre enn eier av låten skal ha tilgang til. Inneholder samme try-catch som metoden page_load, med tanke på Overflow og Format-exception. Dette igjen for å hindre at brukere manuelt forandre req_tune_id til en ugyldig verdi. SQL-spørringen : "SELECT * FROM users_tune WHERE tune_id = @requested_tune_id AND share_tune = 0" Denne spørringen resulterer i at det blir søkt i hele users_tune- tabellen der tune_id er lik argumentet til låten som det spørres etter, der hvor share_tune = 0 (dvs at låten er privat). Dersom denne spørringen får treff, settes variablene private_tune til true. Hvis ikke vil metoden returnere false. Det er også lagt inn relevante catch blokker for selve oppkoblingen og søkingen i databasen. protected Boolean _tune_is_private(int _id) Boolean private_tune = false; string query = "SELECT tune_id FROM users_tune " + "WHERE " + "tune_id = @requested_tune_id " + "AND " + "share_tune = 0" ; try using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) con.open(); using (SqlCommand com = new SqlCommand(query, con)) com.parameters.addwithvalue("@requested_tune_id", _id); SqlDataReader rdr = com.executereader(); if (rdr.read()) private_tune = true; con.close(); // end try catch (SqlException) catch (IndexOutOfRangeException) return private_tune; // end of metod _tune_is_private Page 42 of 48

6.9.4 _return_joined_date() / _toal_users() Dette er veldige enkle metoder som bruker funksjoner innebygd i.net til å hente ut fra databasen når en bruker registrerte seg på siden, og for å liste ut hvor mange som er registrert i databasen. Listingen av disse metodene er tatt med for å illustrere hvordan innebygde funksjoner i.net enkelt løser oppgaver som ville krevd mer koding i andre språk. If-setningen i _return_joined_date() funksjonen må være med siden et kall på Membership.GetUser().CreationDate.ToString(), vil kaste en NullReferenceException dersom bruker ikke er logget på. Ved hjelp av User.Identity.IsAuthenticated trenger vi ikke bruke en try-catch for å fange opp det unntaket. protected string _return_joined_date() string ret_val = ""; if (User.Identity.IsAuthenticated) ret_val = Membership.GetUser().CreationDate.ToString(); return ret_val; protected int _total_users() int ret_val = 0; ret_val = Membership.GetAllUsers().Count; return ret_val; Page 43 of 48

6.9.5 _check_for_profile() Denne metoden sjekker om pålogget bruker har registrert seg med en brukerprofil. Den returnerer false dersom bruker ikke har profil og true dersom bruker har profil. Den blir bl.a brukt for å avgjøre hva slags personlige meny du får og for å se om du har tilgang til create_profile.aspx. protected Boolean _check_for_profile() // set the hasprofile returnvalue to false Boolean hasprofile = false; // has the user already created a profile, asume no. string userid_profile = null; /* hent ut skjema navn og beskrivelse */ string query = "select * from aspnet_users,userprofile where user_id = @userid"; // is the user authenticated? if (User.Identity.IsAuthenticated) string username = Membership.GetUser().UserName.ToString(); // get userid from loggedin user from the aspnet_userid table string userid = Membership.GetUser().ProviderUserKey.ToString(); // get username for loggedin user from the aspnet_userid table try using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) con.open(); using (SqlCommand com = new SqlCommand(query, con)) com.parameters.addwithvalue("@userid", userid); SqlDataReader rdr = com.executereader(); while (rdr.read()) userid_profile = rdr["userid"].tostring(); // end of while // end of using (sqlcommand) // end of using(sqlconnection) // end of try catch (SqlException) catch (IndexOutOfRangeException) // end og if(is.au..) // set correct value for loggedin user if (userid_profile == null) hasprofile = false; else hasprofile = true; // return the value return hasprofile; // slutt på check_for_profile() Page 44 of 48

6.9.6 _get_top_ringtones() Denne metoden lister ut de 5 ringetonene som har høyest rating. For å få til dette må det først opprettes et view av alle stemmene som låtene har fått. SQLspørringen til dette er lagret i stringen make_top5. Når dette viewet er laget kjøres det en enkel spørring opp mot dette viewet. Disse view'ene som blir laget av denne metoden og metoden _get_top_sms_signals() blir slettet for hver gang siden lastes, dette skjer i metoden _drop_views(). protected void _get_top_rintones() /* * This string creates a view that holds all the rating a tune has * gotten. divided the sum with the number of ratings to give * a table that list the tune with average rating. */ string make_top_5 = "CREATE VIEW [Top ringtones] AS " + "SELECT DISTINCT tune_id,name,sum(rating)/count(rating_id) AS topringtone " + "FROM users_tune,tune_rating,tune_has_rating " + "WHERE " + "tune_id = users_tune_tune_id " + "AND " + "rating_id = tune_rating_rating_id " + "AND " + "share_tune = 1 " + "AND " + "duration >5 " + "GROUP BY name,tune_id "; string get_top_5 = "SELECT * FROM [Top ringtones] " + "ORDER BY " + "topringtone DESC"; try using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) // open the connection con.open(); using (SqlCommand com = new SqlCommand(make_top_5, con)) com.executenonquery(); // end using con.close(); // using // end try catch (SqlException) // only redirct to main_page Response.Redirect("startpage.aspx"); // end catch catch (IndexOutOfRangeException) // only redirct to main_page Response.Redirect("startpage.aspx"); // end catch Page 45 of 48

try using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) con.open(); using (SqlCommand com = new SqlCommand(get_top_5, con)) SqlDataReader rdr = com.executereader(); int count = 1; // counts the ringtones int number_to_show = 5; // number of tunes to list out lbl_top_ringtones.text += "<div id=\"list\"> <table cellpadding=\"0\" cellspacing=\"0\" width=\"130\" height=\"20\" border=\"0\"><tr><td class=\"register_heading\"> Top " + number_to_show + " ringtones </td></tr>"; while (rdr.read()) if (count <= number_to_show) lbl_top_ringtones.text += "<tr><td class=\"top_text\"><a href=detailedtune.aspx?req_tune_id=" + (int)rdr["tune_id"] + ">" + (string)rdr["name"] + "</a></td></tr>"; // end if count++; // end while lbl_top_ringtones.text += "<tr><td class=\"bottom\"></td></tr> </table></div>"; // end inner using con.close(); // end outer using // end try catch (SqlException) Response.Redirect("~/../error_pages/sql_error.htm"); // end catch catch (IndexOutOfRangeException) Response.Redirect("~/../error_pages/outofrange.htm"); // end catch // end of method Page 46 of 48

Figurliste Figur 1.2.1 YouTube's utvikling... 6 Figur 1.4.1 Facebook's utvikling... 8 Figur 1.5.1 Hi5's utvikling... 9 Figur 1.6.1 Bebo's utvikling... 10 Figur 3.1.5.1 Bebo's utvikling... Error! Bookmark not defined. Figur 1.7.1 Bolt's utvikling... 11 Figur 1.8.1 Friendster's utvikling... 12 Figur 1.9.1 Blogger's utvikling... 13 Figur 1.10.1 Utvikling YouTube vs Bolt... 14 Figur 1.11.1 Utvikling hi5 vs Bebo... 14 Figur 1.12.1.1 Daily reach... 15 Figur 1.12.2.1 Daily traffic rank trend... 15 Figur 1.12.3.1 Daily pageviews... 16 Fig. 3.5.1 Listing av metode _tune_is_private(int _id)... 21 Fig 3.5.2 Metoden _check_if_tune_is_logged_in_users(int _id)... 22 Fig 3.5.3 Kataloglisting uten default.aspx filen i katalogene.... 23 Fig 3.5.4 Kataloglistingen med default.aspx i hver katalog.... 23 Figur 4.1.1 Flyten i webapplikasjonen... 25 Figur 4.3.1 Databaseoversikt... 26 Figur 5.2.1 Navigasjonsmodell... 31 Figur 5.3.1.1 viser hvordan en anonym bruker opplever systemet.... 31 Figur 5.3.3.1 viser hvordan en anonym bruker opplever systemet.... 33 Figur 5.3.5.1 viser hvordan en anonym bruker opplever systemet.... 34 Figur 6.1.1 Startside... 36 Figur 6.2.1 Masterpage... 37 Figur 6.3.1 Ikke logget inn... 37 Figur 6.3.2 Logget inn... 37 Figur 6.5.1 Informasjonsboks... 38 Figur 6.6.1 Panel... 38 Figur 6.8.1 Mappestruktur... 39 Page 47 of 48

Vedlegg Vedlegg 1 Page 48 of 48