MultiSender -mobiilisovellus

Samankaltaiset tiedostot
BaseMidlet. KÄYTTÖOHJE v. 1.00

EASY Tiedostopalvelin - mobiilin käyttöopas

DriveGate -ohjeet. DriveGate-käyttöohjeet: Rekisteröityminen palveluun. Rekisteröitymisohjeet ja rekisteröitymisprosessin kuvaus

Suuli api dokumentaatio

ProTieto Oy. Verottajan ilmoitus. Käyttöohje alihankkijoille

Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen

Tekninen suunnitelma - StatbeatMOBILE

INTINU13A6 Java sovellukset

SoleMOVE lähtevän harjoittelijan ohje

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

SUOMEN PANKIN RAPORTOINTIPALVELUN KÄYTTÖOHJE. Maksutaseen kuukausikysely ulkomaisista rahoitussaamisista ja -veloista (BOPM)

PIC-koodin luominen URF-tietokantaan Participant Portal

Trimble Feedback Mobile app ja rajapinnat Kuvaus

Selaimen kautta käytettävällä PaikkaOpin kartta-alustalla PaikkaOppi Mobiililla

Sisältö. 3 Yleistä 4 Toimittajaportaalin edut 5-10 Rekisteröinti Laskun teko 23 Lasku JIP. 29/05/2015 Anna-Stina Lindblad

OFFICE 365 PIKAOHJE

Käyttöohje. Ticket Inspector. Versio 1.0. Sportum Oy

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

Sähköpostitilin käyttöönotto

SMT / SUOMEN MATKATOIMISTO OY Y-TUNNUS / FO-NUMMER / BUSINESS ID

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

Asio. Ohjelma on selainpohjainen, joten ohjelmaa varten tarvitaan internet-selain. Ohjelmaan pääsee osoitteella

Julkinen. Suomen Pankin ja Finanssivalvonnan suojattu sähköposti: ulkoisen käyttäjän ohje

Käyttäjienhallintatyökalu

Basware toimittajaportaali

Sisällysluettelo 1 Johdanto Root, koko Opalan pääkäyttäjä

Vianova Systems Finland Oy:n Novapoint käytön tuki

Tekstiviestipalvelun rajapintakuvaus

Maventa Connector Käyttöohje

SQL Buddy JAMK Labranet Wiki

SIJAISET.FI KÄYTTÖOHJE TAKSI YRITYKSILLE. 1. Palveluun rekisteröityminen Palveluun kirjautuminen Etusivu... 2

Onecapital Invoicer XML API

Käyttäjähallintapalvelun REST-rajapinnat

M-FILES JÄSENREKISTERIN KÄYTTÖOHJE

OPAS KULTA2 -JÄRJESTELMÄN KÄYTTÖÖN

EASY Tiedostopalvelin - mobiilin käyttöopas

PAROC CALCULUS LASKENTAOHJELMA TIETOKONEELLE ASENNETTAVA VERSIO. Latausohjeet Asennusohjeet

Toimittajaportaalin pikaohje

Ohje vanhemmille - näin alkuun Päikyssä

Käyttöohje. Visy Access Net UPM

KYMP Webmail -palvelu

1. Käytät ensimmäistä kertaa DS Mobile -palvelua 1 Näin aloitat palvelun käytön

SNKK:n M-Files jäsenrekisteri

Ajankohtaista tietoa LähiTapiolan verkkopalvelun pääkäyttäjille

Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden

OHJE 1 (14) Peruskoulun ensimmäiselle luokalle ilmoittautuminen Wilmassa

M-Files jäsenrekisterin käyttöohje

AXXION OY. Hosting-palvelut Asiakasohjeistus Versio 1.0

Opas administraattori-tason käyttäjille. MANAGERIX -ohjelman esittely... 2 Kirjautuminen... 2

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Wilman pikaopas huoltajille

Uudistettu käyttöliittymä osoitteessa

Tekninen suunnitelma - StatbeatMOBILE

Julkisen rajapinnan testausohje Swaggerin kautta

Informaatiotekniikan kehitysyksikkö

Maestro Lappeenranta Mannerheiminkatu Lappeenranta. Maestro Helsinki Huopalahdentie Helsinki

SÄHKÖPOSTIN SALAUSPALVELU

Sähköposti ja uutisryhmät

Windows Server 2012 asentaminen ja käyttöönotto, Serverin pyörittämisen takia tarvitaan

Asiointipalvelu. Asiakkaan sisäänkirjautumisohje

Salasanojen turvallinen tallentaminen KeePass ohjelmalla

VSP webmail palvelun ka yttö öhje

Sanomapavelinohjelmiston käyttöohje (Vanha versio RO)

Käyttäjätunnus Användarnamn Username. Salasana Lösenord Password. Kieli Språk Language. Kirjaudu sisään / Logga in / Login

Sisällys Clerica Web-sovellusten käytön aloittaminen 2

Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.

Sähköpostitilin luonti

MOBILITY-ONLINE OHJEITA LÄHTEVILLE OTHER TEACHER/STAFF/RDI MOBILITY-OPETTAJILLE JA HENKILÖKUNNALLE

Viva-16. Käyttöohje Veikko Nokkala Suomen Videovalvonta.com

TOOLS KÄYTTÖOHJEET OPETTAJALLE

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

Aivoliitto ry:n jäsenrekisteri Ohjeita yhdistyksille

JulkICT portaalin käyttöohje

Tietokantojen hallinta

2. Liikennöitsijä saa omaan sähköpostiinsa käyttäjätunnuksen ja salasanan palveluun kirjautumista varten.

Hirviö Järjestelmätestauksen testitapaukset ja suoritusloki I2

Käyttöohje. Versiohistoria: versio Mari Kommenttien perusteella korjattu versio

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

Interfacing Product Data Management System

Opponointitestaus VYM -> LiKe

Kanta PHR:n CapabilityStatement ja REST-API. Eeva Turkka

Alkuun HTML5 peliohjelmoinnissa

Järjestelmäarkkitehtuuri (TK081702)

Raporttiarkiston (RATKI) käyttöohjeet Ohjeet

Toimittajaportaalin pikaohje

Elisa Toimisto 365. Pääkäyttäjän pikaopas

Visma Nova. Visma Nova ASP käyttö ja ohjeet

EMVHost Online SUBJECT: EMVHOST ONLINE CLIENT - AUTOMAATTISIIRROT COMPANY: EMVHost Online Client sovelluksen käyttöohje AUTHOR: DATE:

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0

Skype for Business ohjelman asennus- ja käyttöohje Sisällys

Esimerkkinä - ilmainen blogi-julkaisujärjestelmä. WordPress:stä on myös palvelimelle asennettava versio (WordPress.

Ohjeet S-ryhmän tuotetietoportaaliin

2. Kirjoita sähköpostiosoitteesi sille varattuun kenttään ja paina Lähetä varmistusviesti -painiketta.

Sisältö. Päivitetty viimeksi Sivu 2 / 14

Käyttöohje. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Lumme-verkkokirjaston tiedonhaun opas Pieksämäen kaupunginkirjasto

ILMOITUSSOVELLUS 4.1. Rahanpesun selvittelykeskus REKISTERÖINTIOHJE. SOVELLUS: 2014 UNODC, versio

Employee Self Service

Transkriptio:

MultiSender -mobiilisovellus Mikko Makkonen Opinnäytetyö Joulukuu 2017 Tietotekniikka Ohjelmistotekniikka

TIIVISTELMÄ Tampereen ammattikorkeakoulu Tietotekniikka Ohjelmistotekniikka Makkonen Mikko: MultiSender -mobiilisovellus Opinnäytetyö 17 sivua Joulukuu 2017 Tämä opinnäytetyö sisältää mobiiliohjelman toteuttamisen, jossa selitetty mitä funktioita on käytetty ja mitä ne tekevät. Raportti sisältää myös vähän yleistä tietoa käytetyistä kielistä ja ohjelmista. Asiasanat: ohjemointi, mobiili

ABSTRACT Tampereen ammattikorkeakoulu Tampere University of Applied Sciences Tietotekniikka Ohjelmistotekniikka MIKKO MAKKONEN: MultiSender Mobile Application Bachelor's thesis 17 pages December 2017 This thesis report includes mobile application description and its functions explained. The report also includes information about used programs and coding languages. Key words: programming, mobile

4 SISÄLLYS 1 JOHDANTO... 6 2 OHJELMAT, LIITÄNNÄISET JA KIELET... 7 2.1 Visual Studio... 7 2.2 Apache Cordova... 7 2.3 JQuery... 7 2.4 JavaScript ja HTML... 7 3 KOODAAMINEN... 9 3.1 Login... 9 3.2 Puhelinluottelon haku... 10 3.3 Tietojen haku serveriltä... 11 3.4 Tietojen Lisääminen, muuttaminen ja poistaminen... 12 4 POHDINTA... 16 LÄHTEET... 17

5 LYHENTEET JA TERMIT HTML JS AJAX XML Hypertext Markup Language JavaScript Asynchronous JavaScript and XML Extensible Markup Language

6 1 JOHDANTO Työn tarkoituksena oli luoda mobiilisovellus, jolla voi lukea puhelinluetteloa ja lähettää haettua tietoa serveriin. Puhelimesta saatu tieto voidaan lukea ja käyttää esimerkiksi asiakkaiden yhteenotossa. Ohjelman lopputarkoitus on antaa yrityksille helppotapa ottaa numeroita ja tietoja puhelimesta jota käyttää esimerkiksi markkinoinnissa.

7 2 OHJELMAT, LIITÄNNÄISET JA KIELET Tässä osiossa mainitaan yleisimmät ohjelmat ja ohjelmointikielet mitä projektissa tuli käytettyä. Osioissa kerrotaan yleisesti mitä ne tekevät ja hieman mihin sitä on käytetty projektissa. 2.1 Visual Studio Visual studio on ilmaiseksi käytettävä ohjelmointiympäristö, joka sisältää peruskirjastot valmiiksi monille kielille. Visual Studiolla voidaan luoda ohjelmia käyttöjärjestelmille, selaimille ja mobiilialustoille. Ohjelmointikielistä löytyvät mm. C, C++, Java, HTML/Javascript, Visual Basic, F#, C#, Node.js ja Python. Ilmaisessa versiossa on puutteita verrattuna maksulliseen versioon. Siitä puuttuvat esimerkiksi arkkitehtuuriohjelmia, testaustyökaluja ja jotkin koodin kääntö työkalut. Visual studio oli pää ohjelma projektin tekemiseen. 2.2 Apache Cordova Apache Cordova on Visual Studion tuettu liitännäinen, jolla voidaan luoda mobiilisovelluksia kaikille alustoille käyttäen HTML/Javascript/CSS -koodikieliä. Cordova on avoin koodikieli ja sillä ilmainen. Tämän erillaisen koodauksen takia mikään ohjelma ei ole natiivi kyseiselle alustalle vaan hybridi. Cordovaa käytettiin projektissa sen joustavuuden takia monessakäyttöliittymässä yhtäaikaa. 2.3 JQuery JQuery on nopea, pieni ja kattava Javascript -kirjasto. Se tuo HTML kieleen esimerkiksi dokumentin manipulointia, tapahtumanhallinnan, animaatioita sekä Ajaxin. Ajax tuo helppokäyttöisen APIn joka toimii monissa selaimissa. Ajaxin kautta saadaan helppo yhteys serveriin ja takaisin puhelimeen. JQueryä käytettiin Ajaxin helpon yhteyksien takia. 2.4 JavaScript ja HTML

8 JavaScript on yksi suuremmin käytetyistä verkkosivujen toteutuskielistä, jolla saa sujuvia ja hyvän näköisiä verkkosivuja. Koska kyseinen ohjelma on verkkosivupohjainen, käytetään sitä kyseisessä ohjelmassa. HTML on alkuperäinen verkkosivujen tekemiseen tarkoitettu kieli. Se on vanhempi kuin JavaScript ja yleisesti kaikkien verkkosivujen pohja mihin lisätään muita kieliä.

9 3 KOODAAMINEN Kaikki koodaaminen tapahtuu HTML ja JavaScriptiä käyttäen. Ohjelman käyttöliittymä on tehty HTML kieltä käyttäen. JavaScriptiä käytetään sisäiseen koodiin, jolla haetaan ja lähetetään tietoa puhelimesta. Koodiesimerkeissä näkyy viittauksina mitä mikäkin funktio tekee koodissa. Toistuvissa koodin pätkissä kommentit on otettu pois. Kommenteista saadaan helposti selville mitä mikäkin kohta koodissa on tarkoitus tehdä. Yleisesti kommentteja laitetaan ainakin funktioiden alkuun jossa tulee selväksi mitä se tekee. Kommenttien merkitys koodissa ei ole suuri, mutta se auttaa muita jotka lukevat samaa koodia ymmärtämään mitä tietyt osiot tekevät. Näin ei tarvitse kysellä alkuperäiseltä tekijältä tai alkaa itse tutkimaan ja tuhlaamaan aikaa. Monissa koodinpätkissä näkyy huomattavasti samaa koodia, varsinkin Ajax kutsuissa. Koska Ajax kutsut on Jqueryn valmiita funktioita ei tarvitse muuttaa kuin komentoa millä sitä kutsutaan. Tietysti kaikkien kutsujen tulos on erinlainen mitä saadaan vastauksena onnistumisesta. 3.1 Login Kirjautuminen tapahtuu käyttäjätunnuksella ja salasanalla, jotka haetaan käyttöliittymän kahdesta tesktilaatikosta. Käyttäen Ajax POST komentoa lähetetään käyttäjätunnus ja salasana serverille Json -muodossa. Vastauksena saadaan tieto, onnistuiko kirjautuminen ja henkilökohtainen token, joka säilytetään muistissa kirjautumisen ajan. Kirjautuessa käyttäjätunnus ja salasana muutetaan Json muotoon, jota vastaanottava laite lukee. Tämän jälkeen saadaan vastauksena, onnistuiko kirjautuminen vai ei. Jos kirjautuminen onnistuu, saadaan dataa takaisin joka tallennetaan loginid nimiseen muuttujaan. Tätä tunnusta käytettään muissa kutsuissa henkilökohtaisena tunnuksena. Tunnuksen avulla ei etsitä, haeta tai muuteta väärän henkilön tietoja. Tärkeää kirjautumisessa ja muissa funktioissa mitä käydään läpi on nappien moninkertainen painallus. Alla olevassa koodissa on kommentoitu pätkä koodia jolla poistetaan napin ominaisuus väliaikaiseksi, jotta sitä ei voitaisi painaa useampaa kertaa ja tuoda

10 ongelmia. Ongelmana esimerkiksi moninkertainen painallus on datan ylikuormitus ja vastaan otettavan datan käyttö. Sillä sisään kirjautumista ei ole tarkoitettu käytettäväksi useamman kerran saman henkilön. //Sisään kirjautumisen functio function handlelogin() { //otetaan nappi pois käytöstä kun sitä on kerran painettu ja estetään mominkertainen painallus $("#submitbutton").attr("disabled", "disabled"); //tekstikentistä haettu käyttäjätunnus ja salasana var u = $("#username").val(); var p = $("#password").val(); //lähetettävä käyttäjä tunnus ja salasana yhdistetty yhteen var senddata = { "email": u, "password": p ; //Tiedon lähetys $.ajax({ //ajax funktio millä tunnustetaan mitä function pitää tehdä type: "POST", //osoite mihin tieto lähetetään url: "http://api.malli.net/login", //tieto muutetaan suoraviivaiseksi tekstiksi jsonista data: JSON.stringify(sendData), //tiedon tyyppi contenttype: "application/json", Accept: "application/json", datatype: "json", //onnistunut kirjautuminen success: function (data, status) { alert("status: " + JSON.stringify(status)); loginid = JSON.stringify(data);, //vika ilmoitus error: function (status) { alert("fail: " + JSON.stringify(status)); ); //Login napin käyttö takaisin $("#submitbutton").removeattr("disabled"); returnfalse; 3.2 Puhelinluottelon haku Puhelinluettelosta haetaan tiedot ContactFindOptions() -functiolla. Lisäominaisuutena voidaan hakea kaikki nimet luettelosta tai vain ne jota halutaan. Lisäksi voidaan muokata mitä tietoja näytetään haun jälkeen. PickContact() -listaa kaikki nimet luettelosta, josta voidaan valita yksi jonka tiedot tallennetaan savedcontact muuttujaan. Tätä muuttujaa käytettään tiedon lähettämiseen. Onnistuneessa haussa käytetään onsuccess() -

funktiota, joka esittää haetun tuloksen ruudulle. Esimerkissä ruudulle tulee näkyviin sukunimi, etunimi ja tunnus. 11 var savedcontact; //Etsii halutulla nimella tai numerolla puhelinluettelon function handlefind() { //hakee tekstilaatikosta kirjotetun tekstin var name = document.getelementbyid("name").value; var options = new ContactFindOptions(); //käyttää kirjoitettua nimen etsinässä. Tyhjänä hakee kaikki tiedot options.filter = name; //hyväksyy monta saman nimistä henkilöä options.multiple = true; //mitä tietoja haetaan var fields = ["displayname", "name", "organizations"]; //ilmoittaa haun tuloksen navigator.contacts.find(fields, onsuccess, onerror, options); ; //Hakee kaikki tiedot ja listaa ne. näistä valitaan yksi joka tallennetaan function savecontact() { navigator.contacts.pickcontact(function (contact) { //tallentaa valitun henkilön tiedot savedcontact = contact alert('tallennettu:' + JSON.stringify(savedContact));, function (err) { alert('error: ' + err); ); function onsuccess(contacts) { for (var i = 0; i < contacts.length; i++) { alert( "Family Name: " + contacts[i].name.familyname + "\n" + "Given Name: " + contacts[i].name.givenname + "\n" + "Id: " + contacts[i].name.id + "\n" ); ; 3.3 Tietojen haku serveriltä Tietojen hakeminen tapahtuu Ajax GET -functiolla. Vastauksena saadaan haettujen henkilöiden tiedot Json -muodossa. Tämä tieto tallennetaan getdata -muuttujaan mistä tieto on saatavilla käyttäjälle. Jos halutaan hakea vain yhden henkilön tiedot. Uutena muuttujana käytetään tokenia, joka on aikaisemmin tallennettu loginid muuttuja sisäänkirjautumisesta. Tällä tunnuksella varmistetaan että haettu tieto kuuluu sinulle eikä jollekkin muulle.

12 var getdata; //hakee serveriltä tallennetut tiedot function handleget() { $("#getbutton").attr("disabled", "disabled"); var token = JSON.parse(loginid); $.ajax({ type: "GET", url: "http://api.malli.net/accounts/", contenttype: "application/json", Accept: "application/json", datatype: "json", headers: { "X-Access-Token": token, success: function (data, status) { alert("status: " + JSON.stringify(status)); getdata = data;, error: function (status) { // error handler alert("error: " + JSON.stringify(status)); ); $("#getbutton").removeattr("disabled"); returnfalse; 3.4 Tietojen Lisääminen, muuttaminen ja poistaminen Tietojen lisääminen tapahtuu json -muodossa. Lähetyskutsuna käytetään Ajax POST - funktiota. Tiedot otetaan käyttöliittymän tekstilaatikoista. Tiedot lähetetään yksi kerrallaan. Alemmassa koodissa on malliesimerkki, miltä täytetty henkilötieto näyttäisi. Kaikkia tietoja ei ole pakko täyttää lähetyksessä. Kun lähetys onnistuu, saadaan vastauksena tieto tapahtumasta. senddata -muuttujan sisältö voidaan korvata myös handlefind() -funktion tuloksella savedcontact -muuttujalla. //lisää serverille tietoa function handlepost() { $("#postbutton").attr("disabled", "disabled"); var senddata = savedcontact; //esimerkki lähetettävästä tiedosta var senddata = { "firstname": "Tom", "lastname": "Tester", "nickname": "Awesome-Tom",

13 "phone": "+35840123132", "email": "tom.tester@dummy.org", "address": "Street 12 A 456", "zip": "00010", "city": "Helsinki", "companyname": "Acme Ltd.", "website": "http:\/\/dummy.org", "note": "This is created at API TESTS" ; var token = JSON.parse(loginid); $.ajax({ type: "POST", url: "http://api.malli.net/accounts", data: JSON.stringify(sendData), contenttype: "application/json", Accept: "application/json", datatype: "json", headers: { "X-Access-Token": token, success: function (data, status) {, alert("status: " + JSON.stringify(status)); error: function (status) { // error handler alert("fail: " + JSON.stringify(status)); ); $("#postbutton").removeattr("disabled"); returnfalse; Tietojen muuttaminen serverissä tapahtuu samalla tavalla kuin sinne lisääminen. Lähetyskutsuna käytetään Ajax PUT -metodia. Muuttaessa lähetetään kaikki tiedot uudestaan ja yliajetaan vanha. Tiedot lähetetään Json -muodossa. Jotta oikean henkilöntietoja muutetaan, käytetään henkilötiedon serveritunnusta. Kyseisen tunnuksen näkee, kun hakee serveriltä tiedon henkilöstä. Tässäkin voidaan käyttää savedcontact -tallennettua muuttujaa, jos haluaa päivittää tietoja. Palautteena saadaan tieto, menikö tiedot perille. Tämän jälkeen voidaan vielä varmistaa contactsearch() funktiolla menikö tiedot varmasti perille. //päivitä tietoja function handleupdate() { $("#updatebutton").attr("disabled", "disabled"); var senddata = savedcontact; //esimerkki var senddata = {

14 "firstname": "Jerry", "lastname": "Tester", "nickname": "Awesome-Tom", "phone": "+35840123132", "email": "Jerry.tester@dummy.org", "address": "Kultalampi 8", "zip": "33710", "city": "Tampere", "companyname": "Acme Ltd.", "website": "http:\/\/dummy.org", "note": "This is created at API TESTS" ; var token = JSON.parse(loginid); $.ajax({ type: "PUT", //esimerkki haku osoitteesta, jossa on päivitettävän henkilön tunnus osoitteen lopussa url: "http://api.malli.net/accounts/2202", data: JSON.stringify(sendData), contenttype: "application/json", Accept: "application/json", datatype: "json", headers: { "X-Access-Token": token, success: function (data, status) {, alert("status: " + JSON.stringify(status) error: function (status) { // error handler alert("fail: " + JSON.stringify(status)); ); returnfalse; $("#updatebutton").removeattr("disabled"); Henkilön poistaminen tapahtuu tunnuksen avulla, joka lisätään osoitteeseen samalla tavalla kuin tietojen päivityksessä. Lähetys kutsuna käytetään Ajax DELETE. Vastauksena saadaan, että kyseinen henkilö on poistettu. //poistaa henkilöitä function handledelete() { $("#deletebutton").attr("disabled", "disabled"); var token = JSON.parse(loginid); $.ajax({ type: "DELETE", url: "http://api.malli.net/accounts/2203",

15 contenttype: "application/json", Accept: "application/json", datatype: "json", headers: { "X-Access-Token": token, success: function (data, status) {, alert("status: " + JSON.stringify(status)); error: function (status) { // error handler alert("fail: " + JSON.stringify(status)); ); returnfalse; $("#deletebutton").removeattr("disabled");

16 4 POHDINTA Opin uusia asioita, kuten HTML ja Javascript -kielet, joita en ollut ennen käyttänyt perusasioita lukuun ottamatta. Suurimpana ongelmana oli laiskuus käynnistää Visual Studio ja alkaa koodaamaan, jonka vuoksi projekti venyi huomattavasti. Otin lopuksi itseäni niskasta kiinni ja kävin koko projektin uudestaan lävitse ja sain aikaiseksi jotain hyväksyttävää. Tulevaisuutta varten pitää ottaa kantaa siihen, että etätyö on tällä hetkellä erittäin vaikeaa koska eksyn muihin asioihin liian helposti. Toisena asiana on aikarajat jotka olisi pakollisia, jotta olisi suurempi paine saada asiat valmiiksi oikeaan aikaan eikä kaksi vuotta myöhemmin.

17 LÄHTEET Apache Cordova -dokumentti https://cordova.apache.org HTML, Javascript -malleja www.w3schools.com Yleistä tietoa ohjelmistoista ja kielistä en.wikipedia.org