Janne Juntunen ASIAKASOSAN STREAMAUKSEN TOTEUTTAMINEN QT- MEDIASOITTIMEEN
|
|
- Pentti Sariola
- 8 vuotta sitten
- Katselukertoja:
Transkriptio
1 Janne Juntunen ASIAKASOSAN STREAMAUKSEN TOTEUTTAMINEN QT- MEDIASOITTIMEEN
2 ASIAKASOSAN STREAMAUKSEN TOTEUTTAMINEN QT-MEDIASOITTIMEEN Opinnäytetyö Janne Juntunen Tekniikan yksikkö Oulun seudun ammattikorkeakoulu
3 OULUN SEUDUN AMMATTIKORKEAKOULU TIIVISTELMÄ Koulutusohjelma Opinnäytetyö Sivuja + Liitteitä Tietotekniikan koulutusohjelma Insinöörityö 38 + Suuntautumisvaihtoehto Aika Ohjelmistosuunnittelu Työn tilaaja Nice Business Solutions Finland Oy Työn tekijä Janne Juntunen Työn nimi Asiakasosan streamauksen toteuttaminen Qt-mediasoittimeen Avainsanat Qt, Phonon, GStreamer, Linux, Maemo, MeeGo, streamaus, multimedia, RTP Opinnäytetyössä tehtiin streamaus- eli virtaustoistotoiminnallisuus mediasoittimeen. Työssä jatkokehitettiin Qt:n multimediakirjasto Phononilla tehtyä mediasoitinta Maemo-mobiili-Linux-alustalle. Työn tilaajana toimi Nice Business Solutions Finland Oy, jonka tiloissa työosa suoritettiin. Opinnäytetyötä oli tekemässä kaksi opiskelijaa. Tässä raportissa keskitytään asiakasosan toteutukseen. Työn tarkoituksena oli tutustua streamaukseen. Työn aikana tavoitteisiin lisättiin tutustuminen Qt:n tukeen kolmannen osapuolen teknologioille.työ määriteltiin sisältämään pelkän alustavan toiminnallisuuden. Suunnitteluvaiheessa työn aiheeseen tutustuttiin ottamalla selvää saatavilla olevista mahdollisuuksista. Loppujen lopuksi kohdealustan takia käytetyksi teknologiaksi valikoitui GStreamer. Työssä päätettiin käyttää RTP (Real-time Transport Protocol) -protokollaa, ja itse datan siirtoon UDP (Universal Datagram Protocol) -protokollaa. Toteutusvaiheessa työhön toteutettiin yksinkertainen käyttöliittymäkomponentti Qt:lla. Itse streamin vastaanottaminen ja toistaminen hoidetaan GStreamerkomponentilla, joka on sisäistetty ohjelman lähdekoodiin. Toteutusvaiheessa tehtiin myös tarvittavat muutokset ohjelmaan, jotta kolmannen osapuolen kirjastoja voidaan käyttää. Opinnäytetyö onnistui odotusten mukaisesti. Ohjelmalla voidaan sekä lähettää että vastaanottaa RTP-streamia. Työn aikana päästiin tutustumaan sekä streamaukseen yleisesti että Qt:n tukeen kolmannen osapuolen kirjastoille. Lopputuloksena on toiminnallisesti alkeellinen, mutta kehityskelpoinen mediasoitin. 3
4 SISÄLTÖ TIIVISTELMÄ... 3 SISÄLTÖ JOHDANTO KÄYTETYT TEKNOLOGIAT N Maemo Qt Projektitiedosto qmake Widgetit Signaalit ja slotit Phonon RTP GStreamer STREAMAUSOHJELMAN MÄÄRITTELY SUUNNITTELU JA TOTEUTUS Suunnittelu Toteutus media.pro mediaplayer.h ja mediaplayer.cpp streamingclient.h streamingclient.cpp TULOKSET JA JOHTOPÄÄTÖKSET LÄHTEET
5 1 JOHDANTO Qt-käyttöliittymäkirjasto on ollut viime vuosina paljon puhuttu ja kohuttu aihe ohjelmistosuunnittelun alalla. Norjalaisen Trolltechin 90-luvulla lanseeraama kirjasto lähti alulle vallankumouksellisesta ajatuksesta käyttöliittymäkirjastosta, jolla voisi luoda ohjelmistoja, jotka toimisivat laitteella kuin laitteella. Vuonna 2008 Nokia osti Trolltechin ja Qt:stä tuli todellinen vaihtoehto Symbian-käyttöliittymälle. Tämän myötä Qt:n suosio alalla lähti rankkaan nousuun (1.) Opinnäytetyössä lähdimme, minä ja luokkakaverini Tuomas Kehusmaa, jatkokehittämään aiemmin koulun kolmessa harjoitteluprojektissa luomaamme mediasoitinta Maemo-käyttöjärjestelmälle. Työn tilaajana, kuten harjoitteluprojekteissakin, toimi Nice Business Solutions Oy, Fujitsun ja Nokian omistama ohjelmistoalan alihankkijayritys, jonka tiloissa Oulun Teknologiatiellä työosuus suoritettiin. Ohjelmiston alkuperäisenä tarkoituksena oli tutustua Qt:hen käyttöliittymäkirjastona sekä sen Phononmediakirjaston tuomiin mahdollisuuksiin videon ja audion toistossa, tavoitteet, joihin olimme päässeet harjoitteluprojektien aikana. Itse opinnäytetöiden aiheeksi valikoitui audion streamaus verkon yli, luonnollinen kehitysaste, kun samalla laitteella olevan audion ja videon toisto oli jo ohjelman toiminnallisuuksissa. Aiheen valintaan vaikutti myös se, että tämä mahdollisti selvän kahtiajaon asiakkaaseen ja serveriin, olihan työstä tarkoitus kirjoittaa kaksi raporttia. Raportissa selvitän sekä asiakaspuolen toimintaa että koko ohjelman suunnitteluprosessia. Tästä johtuen raportissa esiintyy siellä täällä tekijänä me, jolloin kyse on ongelmasta, jota ratkoimme keskenämme. Opinnäytetyö lähti liikkeelle puhtaalta pöydältä. Kummallakaan osapuolella ei ollut streamauksen toteuttamisesta aiempaa kokemusta. Työn alussa selvisi nopeasti, että ratkaisu täytyisi etsiä Phononin ulkopuolelta kolmannen osapuolen ratkaisuna, koska Phononissa ei ollut toiminnallisuutta tähän 5
6 suuntaan. Näin ollen työhön tuli isoksi osaksi myös sen selvittäminen, miten Qt pärjää kolmannen osapuolen ohjelmistokirjastoja käytettäessä. 6
7 2 KÄYTETYT TEKNOLOGIAT Projektissa toteutimme Qt:llä toteutettuun mediasoittimeen streamaustoiminnallisuuden pohjapiirteissään. Kohdealustana oli Nokian N900, kosketusnäytöllinen internet-tabletti, jonka käyttöjärjestelmänä toimii Maemo 5. Mediasoittimen perustoiminnot on tähän mennessä tehty käyttäen Qt:n omaa mediakirjastoa Phononia. Phononissa ei kuitenkaan työn tekoaikaan (versio 4.3.1) ollut streamaustoimintoa, joten päädyimme käyttämään projektissa GStreamer-multimediakirjastoa. Tiedonsiirto tapahtui käyttäen RTP-protokollaa. Tässä luvussa käsitellään edellämainittuja teknologioita ja sitä miten kohdealusta täytyy ottaa huomioon projektia toteuttaessa. 2.1 N900 N900 on viimeinen Nokian kehittämistä internet-tableteista, jotka käyttävät Maemo-käyttöjärjestelmää. Ensimmäinen Maemoa käyttänyt laite julkaistiin vuoden 2005 marraskuussa: Nokia 770 Internet Tablet, jolla pystyi selaamaan internettiä WLAN (Wireless Local Area Network) -yhteyttä käyttäen. Muita laitteita ovat N800, joka mahdollisti Skype/VoIP-puhelut WLAN:n yli, ja N810, ensimmäinen Nokian internet-tableteista, jossa oli täydellinen QWERTY-näppäimistö kosketusnäytön ohella. Helmikuussa 2010 Mobile World Congress -tapahtumassa Intel ja Nokia ilmoittivat aloittavansa yhteistyön Maemon jatkokehityksessä ja parempien päätelaitteiden tuottamisessa. Uusi MeeGo olisi suora jatko sekä Maemolle että Intelin Moblin-käyttöjärjestelmälle. (2; 3.) 2.2 Maemo Maemo on käyttöjärjestelmä, joka on jo kehityksen alkuvaiheessa rakennettu vapaan lähdekoodin periaatteita kunnioittaen ja koko kehitystyön ajan 7
8 muiden isojen vapaan lähdekoodin projektien (Linux kernel, Debian, GNOME) kanssa tiiviissä yhteistyössä. Käyttöjärjestelmän ydin on ARM/OMAP-pohjainen Linux-ydin, jonka päälle itse GNU (GNOME Not Unix) C -kirjastoon pohjaava käyttöjärjestelmä rakentuu. Maemon järjestelmäarkkitehtuuri ja yleinen tiedostohierarkia on kehitetty Debianjakelun vastaavien pohjalta. Maemon Hildon-käyttöliittymäkirjasto on puolestaan rakennettu GNOME-projektin GTK+-kirjaston pohjalle. (4.) 2.3 Qt Qt on luokkakirjasto, joka on kehitetty helpottamaan ohjelmistojen luontia usealle eri alustalle. Qt:n suunnittelu ja toteutus mahdollistavat saman lähdekoodin käytön useissa eri alustoissa. Tämä mahdollistetaan ohjelmointirajapinnalla, jossa järjestelmäkohtaiset toteutukset eivät näy ohjelmoijalle. Qt on täysin oliopohjainen. Pääasiassa ohjelmointi tapahtuu C++:lla. Tosin version myötä maaliskuussa 2011 Nokia toi mukaan QML-scriptikielen. Kuvassa 1 on Qt:n modulaarinen luokkarakenne. (1; 5, s. 3.) KUVA 1. Qt:n modulaarinen luokkarakenne (6.) Projektitiedosto Qt-ohjelmassa tärkein yksittäinen tiedosto on projektitiedosto. Se ohjaa ohjelman kääntämisen ensimmäistä vaihetta, jossa qmake, moc (metaobject 8
9 compiler) ja uic (user interface compiler) esikääntävät Qt-ohjelman tiedostoista alustakohtaiset tiedostot, jotka lopulta käännetään ja linkitetään ohjelmaksi. (5, s. 38.) Projektitiedostossa on listattuna ohjelmaan kuuluvat lähdekoodi-, otsikko-, käyttöliittymä- ja muut resurssitiedostot. Projektitiedostossa lukevat myös muut kääntämisen kannalta olennaiset tiedot tarvittavista Qt:n kirjastoista aina kolmannen osapuolen kirjastoihin. Myös mahdolliset alustakohtaiset kääntöehdot on kirjoitettu projektitiedostoon. Seuraavassa on esimerkki. (7.) Projektin tiedostot löytyvät otsikoiden HEADERS ja SOURCES alta sekä tarvittavat Qt-kirjastot QT-nimekkeen alta. Esimerkistä puuttuu projektin käyttöliittymätiedostot, jotka voidaan luoda käyttämällä QtCreatorin mukana tulevaa Designeria. Projektitiedostossa käyttöliittymätiedostot listataan FORMS-nimekkeen alle. (7.) 9
10 2.3.2 qmake qmake on työkalu, jota Qt käyttää helpottaamaan usealle alustalle kääntämistä. Sen pääasiallinen tehtävä on lukea projektitiedostoa ja luoda alustakohtainen Makefile, joka ohjaa ohjelman lopullista kääntämistä ja linkittämistä. (7.) Widgetit Qt:llä tehdyt käyttöliittymät pohjaavat widget-elementteihin. Jokainen graafinen käyttöliittymäelementti on oma widgetinsä, joiden ulkoasua ohjaa ikkunassa oleva muotoiluwidget. Normaaleja widgetejä ovat esimerkiksi painonapit ja liukuvalitsimet. Kuvassa 2 on esimerkkejä widgeteistä. (5, s. 5.) KUVA 2. Esimerkkejä widget-elementeistä (5, s. 5.) Muotoiluwidget (englanniksi layout) on elementti, jolla mahdollistetaan widgetin ulkoasun joustava hallitseminen. Koodiesimerkissä ohjelman pääikkunawidgetille annetaan ristikkomuotoiluwidget. (5, s. 6) 10
11 Muotoiluwidget tuo mukanaan seuraavat automatisoidut keinot ulkoasun hallitsemiseksi: lapsiwidgetien sijoittaminen järkevä oletuskoko järkevä minimikoko kokomuutosten käsittely sisällön automaattinen päivitys, esimerkiksi fonttikoon tai muun widgetien sisällön muuttuessa lapsiwidgetejä näytettäessä ja piilottaessa lapsiwidgetejä tuhottaessa. Seuraavassa esimerkkikoodissa lisätään QGridLayout-muotoiluwidgetiin kaksi painonappia: 11
12 Ensimmäisenä addwidget-funktion kutsussa annetaan widget, joka layoutiin lisätään. Numerot funktion kutsussa puolestaan merkkaavat seuraavaa järjestyksessä ensimmäisestä viimeiseen: 1. Sijainti y-akselilla (Solu 0.0 vasemmassa yläkulmassa) 2. Sijainti x-akselilla 3. Widgetin pituus y-akselin suunnassa 4. Widgetin pituus x-akselin suunnassa. (5, s. 6; 8) Signaalit ja slotit Qt:ssä widgetit viestivät keskenään käyttäen signaaleihin ja sloteihin perustuvaa tapahtumakäsittelijää. (9.) Qt-ohjelmassa signaalien ja slotien käytön mahdollistavat metaobjektit. Metaobjekti on metaobject compilerin eli moc:n käännön yhteydessä luoma väliaikainen C++-tiedosto, joka sisältää signaalien ja slotien välisien yhteyksien käytännön toteutuksen. Metaobjektit sisältävät myös ajonaikaista informaatiota luokasta. Jotta moc tietäisi, mistä tiedostoista metaobjektit pitää luoda, täytyy luokan määrittelyn yhteydessä otsikkotiedostossa olla Q_OBJECT-makro. Tämä makro täytyy siis löytyä jokaisen signaaleja ja sloteja käyttävän luokan määrittelystä. (9; 10.) Jokaisella widgetillä on omat signaalinsa ja slotinsa, joiden välisiä yhteyksiä pääohjelma hallitsee. Esimerkiksi aina kun painonappia painetaan, lähetetään napin clicked()-signaali. Tämä signaali voidaan yhdistää slotteihin, joissa tehdään halutut toimenpiteet. Yhdistäminen tapahtuu yleensä kutsumalla QObject-luokalta perittyä connect-funktiota ja antamalla parametreinä seuraavan informaation: 1. Lähettävä objekti (esimerkeissä käyttöliittymästä löytyvä painonappi) 12
13 2. Lähetettävä signaali (painonappien clicked(), lähetetään nappia painettaessa) 3. Vastaanottava objekti (luokka jossa yhteys luodaan) 4. Vastaanottava slot tai signaali (haluttu toiminnallisuus). Koodissa slot esiintyy ja käyttäytyy normaalin funktion tavoin. Signaalien ja slotien välisiä yhteyksiä voidaan muokata missä tahansa vaiheessa ohjelman koodia. Koska systeemi käsittelee signaalit pääohjelmassa, toisiinsa yhteydessä olevien widgettien ei tarvitse olla tietoisia toisistaan ja muistivuotojen mahdollisuus pienenee sekä monikäyttöisten komponenttien suunnitteleminen helpottuu. (9; 11.) Phonon Multimedian toistoon Qt käyttää Phonon-kirjastoa. Tämä alun perin vapaan lähdekoodin KDE (K Desktop Environment) -projektissa alkunsa saanut multimediakirjasto kehitettiin alkujaan mahdollistamaan alustasta riippumaton ohjelmointirajapinta mediatoistolle. Phonon ei itse toista mediaa vaan hyödyntää alustakohtaista mediakirjastoa ja sen ominaisuuksia. Linuxilla käytössä on pääasiallisesti GStreamer. (12.) 2.4 RTP Real-time Transport Protocol on protokolla, joka mahdollistaa datan reaaliaikaisen siirron sovellustasolla internetin yli yhteen tai useampaan päätepisteeseen. RTP ei takaa siirron laatua eikä ole vastuussa mahdollisten resurssien varaamisesta. Datasiirtoa valvotaan RTCP (Realtime Transport Control Protocol) -protokollan avulla, joka paitsi valvoo siirtyvää dataa myös mahdollistaa päätelaitteiden välisen minimaalisen 13
14 kommunikaation. RTP ja RTCP on määritelty RFC3550-standardissa, joka on julkaistu vuoden 2003 heinäkuussa. (13.) 2.5 GStreamer GStreamer on vapaan lähdekoodin periaatteisiin perustuva ohjelmistokirjasto, jonka avulla voidaan luoda mediaa toistavia ohjelmistoja. GStreamerin kehitys alkoi vuonna 1999 ja ensimmäinen julkinen versio oli julkaistu versio Huolimatta projektia hallinneen RidgeRunyhtiön ajautumisesta taloudellisiin ongelmiin projektin kehitys oli nopeaa ja jo vuoden 2004 maaliskuussa julkaistiin Nykyinen versio on , joka on uusin vakaan 0.10.x-sarjan versio. (14.) GStreamer käyttää niin sanottua pipeline-menetelmää luodakseen helposti muokattavissa olevia mediatoistoratkaisuja. Pipeline-menetelmässä jokainen pienikin osa mediatoistotapahtumaa tapahtuu oman plug-ininsa kautta, jotka ovat yhteydessä toisiinsa pipelinen sisällä. Jokaiselle mediakoodekille on omat encode- ja decode-plug-ininsa, kuin myös jokaiselle streamia muokkaavalle toiminnolle. Versiosta 0.10 lähtien plug-init on jaettu neljään pakettiin taulukosta 1 löytyvin perustein. (15; 16.) TAULUKKO 1. GStreamerin plug-in-paketit ja niiden lyhyt kuvaus (16.) Plug-in-paketti Kuvaus Base Paketti sisältää plug-init, jotka ovat hyvin viimeisteltyjä ja ylläpidettyjä. Tämä paketti sisältää myös pluginien suunnittelua ja toteuttamista helpottavia kirjastoja. Good Paketti, joka sisältää laadukkaat GNU LGPL (Limited General Public 14
15 Licence) -lisenssin alla julkaistut plug-init. Bad Paketissa ovat plug-init, joiden toiminta on epävarmaa, dokumentointi puutteellista, testaus ei ole ajantasalla ja/tai ylläpito ei ole ajantasalla. Ugly Paketissa ovat plug-init, jotka ovat täysin toimivia, mutta joiden lisenssit voivat aiheuttaa ongelmia ohjelmaa julkaistessa. Seuraavassa on kuvailtu lyhyesti ohjelman asiakasosassa käytetyt plug-init: gstrtpbin on plug-in, joka sisältää kaikki RTP- ja RTCP-protokollien käyttämiseen tarvittavat toiminnallisuudet yhdessä pluginissa. Plug-in on luotu helpottamaan RTP-yhteyden luomista ja ylläpitoa. Tämä plug-in löytyy Good-paketista. udpsrc on plug-in, joka ottaa vastaan dataa UDP (User Datagram Protocol) -protokollan yli. Plug-in ei muokkaa tulevaa dataa, mutta sen voi yhdistää gstrtpbinin rtpsrc- ja rtcpsrc-elementteihin. Ohjelmassa plug-inia käytetään sekä RTP-, että RTCP-datan vastaanottamiseen serveriltä. Tämä plug-in löytyy Good-paketista. udpsink on plug-in, joka lähettää dataa UDP-protokollan yli. Ohjelmassa plug-inia käytetään RTCP-datan lähettämiseen serverille. Tämä plug-in löytyy Good-paketista. rtpmpadepay on plug-in, joka ottaa vastaan RTP:n yli siirtyvän datan ja muuntaa sen MPEG-audioksi. Tätä plug-inia täytyy käyttää kun 15
16 haluaa vastaanottaa mp3-streamia. Tämä plug-in löytyy Goodpaketista. mad on plug-in, jolla MPEG-audio muutetaan raw-audioksi. Tämä plugin löytyy Ugly-paketista. audioconvert on plug-in, jolla audiota voidaan muokata eri muotoon. Tämä plug-in löytyy Base-paketista. audioresample on plug-in, jolla audion näytteenottotaajuutta voidaan muuttaa. Tämä plug-in löytyy Base-paketista. autoaudiosink on plug-in, joka etsii automaattisesti järjestelmästä sopivan elementin audion toistamiselle. Tämä plug-in löytyy Goodpaketista. (17.) 16
17 3 STREAMAUSOHJELMAN MÄÄRITTELY Opinnäytetyössä toteutetaan streamaustoiminnallisuus mediasoittimeen. Ohjelma, jonka pohjalle työ tehdään, ja työn käyttöliittymä on toteutettu käyttäen Qt-ohjelmointikirjastoa. Itse streamaus toteutetaan käyttäen GStreamer-mediakirjastoa. Työn lopputuloksena on ohjelma, jolla voi ottaa yhteyden toiseen laitteeseen ja joko lähettää tai vastaanottaa tosiaikaista mediastreamia. Kuvassa 3 on ohjelman toiminta periaatetasolla. KUVA 3. Streamausohjelman toiminta periaatetasolla Kun serveri lähettää streamia, ohjelma lukee serverin kovalevyltä mediatiedostoa ja lähettää luetun datan UDP-yhteyden yli RTP-protokollaa käyttäen. Asiakas puolestaan ottaa vastaan RTP-paketteja ja toistaa ne käyttäen vastaavia laiterajapintoja. Tämä raportti keskittyy ohjelman asiakasosaan. Työ rajattiin sisältämään vain alustavan toiminnallisuuden, josta ohjelmaa voidaan kehittää edelleen. 17
18 4 SUUNNITTELU JA TOTEUTUS Ohjelma on rakennettu yksinkertaisen luokkarakenteen mukaisesti, jokainen käyttöliittymä ja engine omana kokonaisuutenaan. Tämä rakenne helpottaa uusien toiminnallisuuksien lisäämistä jälkeenpäin, koska jokainen osa on erillinen kokonaisuutensa, joka huolehtii vain ja ainoastaan itsestään. Tulevaisuudessa kuitenkin käyttötapausten ja ohjelman eri osien välisen interaktion lisääntyessä täytyy miettiä, voisiko eräänlainen MVC (Model View Controller) -malli olla käytännöllisin. Opinnäytetyö toteutettiin yhtenä Scrum-tyylisenä Agile-sprinttinä, jonka aikana käytiin läpi yksi vesiputousmallin tapainen kehityskaari. Sprinttimme kesti 30 työpäivää. Kuvissa 4 ja 5 on kuvattu näiden mallien periaatteet. KUVA 4. Scrum-kehitysmallin toimintaperiaate (18.) 18
19 KUVA 5. Vesiputousmallin periaate (19.) 4.1 Suunnittelu Määrittelyn suoritimme aloituspalaverin yhteydessä. Itse projektin aloitimme selvittämällä, mitä mahdollisuuksia streamauksen toteuttamiseen on olemassa, ottaen huomioon projektin erityistarpeet. Päädyimme tarkastelemaan lähemmin kahta vaihtoehtoa. Suunnitteluvaiheessa tutustuimme VideoLAN Organizationin avoimen lähdekoodin projekteihin, nimellisesti VLC playeriin ja libvlcmediakirjastoon, joka on suunniteltu tuomaan VLC playerin toiminnallisuudet ohjelmistosuunnittelijoiden käytettäväksi. libvlc oli erityisen kiinnostuksen kohteena myös siitä syystä, että VLC playerin Maemo-versio oli julkistettu. Päädyimme kuitenkin jättämään libvlc:n projektimme ulkopuolelle, koska oli mielestämme sekava ratkaisu implementoida kokonainen mediakirjastokokonaisuus yhden ominaisuuden vuoksi. Toinen lähempään tarkasteluun päätynyt ratkaisu streamauksen implementointiin oli GStreamer. Tähän päädyimme siksi, että tiesimme jo Phononin käyttävän kyseistä mediakirjastoa ja Maemon repositorystä, eli Linux-käyttöjärjestelmissä käytettävästä ohjelmistovarastosta, löytyi toimiva GStreamer-käännös. GStreameriin päädyttyämme jouduimme kuitenkin 19
20 miettimään, aiheuttaisiko GStreamerin C-kielellä oleva toteutus ongelmia C++-syntaksia olevan Qt-ohjelmamme kanssa. Suurin ongelma tuli GStreamerin tarvitsemasta Gnome main loopista, jota GStreamer-ohjelmat käyttävät ohjelman sisäiseen viestintään ja väliaikaisten resurssien varaamiseen ja vapauttamiseen. Onneksi huomasimme ohjelmaa testatessamme, että ohjelmamme main loop pystyi hoitamaan nämä tehtävät. Yksi vaihtoehtoinen ratkaisu, jota selvitimme, oli käyttää GStreamerin C++rajapintaa, omassa vapaan lähdekoodin projektissaan kehitettävää gstreamermm:ää. Ongelma gstreamermm:ssä kuitenkin oli sen kyseenalainen Maemo-tuki ja hiljainen päivitystahti. Lopulta päädyimmekin jättämään gstreamermm:n pois projektista. 4.2 Toteutus Työn toteutus aloitettiin luomalla streamaukselle käyttöliittymä-, luokka- ja otsikkotiedostot. Kuvassa 6 on projektin rakenne QtCreatorissa. KUVA 6. Projektin rakenne QtCreatorissa 20
21 Tässä raportissa käsitellään lähemmin ainoastaan tähän projektiin liittyvät tiedostot ja tiedostomuutokset media.pro Projektin päätiedosto on media.pro, joka määrittää ohjelman kääntöprosessin: kertoo, mitä tiedostoja käännetään ja mitä kirjastoja käännöksessä huomioidaan, sekä ohjaa mm. moc:n toimintaa. Seuraavassa koodiesimerkissä ovat projektitiedostoon tehdyt muutokset: Selviä muutoksia ovat uusien tiedostojen lisääminen: SOURCES-listaan streamingclient.cpp ja HEADERS-listaan streamingclient.h. Jotta GStreameriä pystyttiin käyttämään ohjelmassamme, täytyi kirjasto lisätä LIBS-listaan sekä GStreamerin ja GLibin otsikkotiedostojen polut INCLUDEPATH-listaan. Nämä rivit tarvitaan, jotta qmake osaa tehdä tarvittavat muutokset projektia käännettäessä. Tarpeelliseksi huomattiin myös lisätä rivi CONFIG += no_keywords. Tämä rivi kieltää moc:tä määrittämästä Qt:n avainsanoja signal, slot, foreach ja emit. Rivi tarvittiin, koska GStreamer käyttää avainsanaa signal. Normaalisti projektitiedostossa olisi myös ohjelman käyttöliittymätiedostot FORMS-listan alla, mutta aiemmissa projekteissa kohtaamiemme ongelmien 21
22 takia käyttöliittymäkirjastot jätettiin merkitsemättä. Käytännössä qmake ei huomannut käyttöjärjestelmätiedostoihin tekemiämme muutoksia. Kiersimme ongelman tekemällä muutokset suoraan otsikkotiedostoon, jonka Qt:n uic käännön yhteydessä luo käyttöliittymätiedostosta. Nämä tiedostot löytyvät projektin kääntökansiosta nimellä ui_(luokan_nimi).h ja ovat automaattisesti käyttöliittymätiedostoa luodessa linkitettynä vastaavaan otsikkotiedostoon riippumatta siitä, onko käyttöliittymätiedostoa olemassa vai ei mediaplayer.h ja mediaplayer.cpp Kuvassa 7 on ohjelmamme päänäkymä. KUVA 7. Ohjelman pääikkuna Streamaukselle oli pääikkunassa jo oma nappinsa, joka tarvitsi vain ottaa käyttöön. Suurin yksittäinen muutos oli dialogi, jossa valitaan, käynnistetäänkö serveri- vai asiakasohjelma. Kuvassa 8 on QDialog-widget, joka aukaistaan Streaming-nappia painaessa. 22
23 KUVA 8. streamingdialog Ohjelmakoodissa dialogi ja kaksi lisättyä painonappia näkyvät pieninä muutoksina. Otsikkotiedostoon lisättiin seuraavat määrittelyt: Jotta napit toimisivat, täytyy niille luoda otsikkotiedostossa myös slotit. Koska GStreamer käyttää avainsanaa signal, jouduttiin Qt:n omat avainsanat ottamaan pois käytöstä. Tästä johtuen Qt:n normaali avainsana slots on korvattu sanalla Q_SLOTS. Itse luokkatiedostossa dialogi luodaan muiden käyttöliittymäelementtien yhteydessä setupmainpage-funktiossa, joka on ajojärjestyksessä ensimmäisenä. 23
24 Dialogille ja sen layoutille varataan tila muistista käyttämällä avainsanaa new. Widgetiä luodessa määritellään myös, onko widget lapsiwidget vai hallitseeko se itse itseään. Jos widget on lapsiwidget, laitetaan sen vanhempi sulkujen sisään; esimerkissä this viittaa mediaplayer-luokasta tehtyyn olioon. streamingdialogin setgeometry-funktio on QWidget-luokalta peritty funktio, jolla määritetään widgetin koko. Tässä tapauksessa laitoimme kooksi nelikulmion, jonka sivujen pituudet ovat 696 ja 396 pikseliä. Samalla periaatteella luodaan myös dialogin painonapit: Kun painonapit on luotu, lisätään ne dialogin muotoiluwidgetiin: connectsignals-funktiossa yhdistetään painonapin clicked-signaali slottiin: Itse slotissa luodaan streamingclient-olio ja laitetaan se näkyville: 24
25 4.2.3 streamingclient.h streamingclient.h-luokka hoitaa itse streamin vastaanoton ja soiton. Tässä osiossa käydään läpi luokan otsikkotiedosto olennaisilta osin. Alla on otsikkotiedoston ohjelmakoodi kokonaisuudessaan: Seuraavalla koodinpätkällä varmistetaan, ettei luokkaa määritellä useaan kertaan: 25
26 Seuraavat luokat linkitetään käännösvaiheessa tiedostoon: QWidget-luokka tarvitaan, koska streamingclient periytyy QWidget-luokasta. ui_streamingclient.h on luokan käyttöliittymätiedosto käännettynä otsikkotiedostoksi. gst.h ja glib.h tarvitaan, koska luokka käyttää GStreameriä. Luokka periytyy QWidget-luokasta. Tämä mahdollistaa luokalle QWidgetin ominaisuudet. Seuraavaksi määritellään luokan tarvitsemat slotit. Q_OBJECT-makro kertoo kääntäjälle, että Qt:n signaalit ja slotit ovat käytössä luokassa. Otsikkotiedostossa määritellään myös luokan funktiot. Konstruktorille annetaan viittaus ohjelman pääikkunaan. Funktion toinen parametri määrittää, onko streamingclient lapsiwidget. Jos konstruktoria kutsuessa annetaan viittaus toiseen widgetiin, tehdään widgetistä streamingclientin vanhempi. 26
27 Viimeisenä luokkaan määritellään pelkästään streamingclientille näkyvät muuttujat: muuttuja, jolla päästään käsittelemään käyttöliittymän komponentteja, sekä osoitinmuuttuja, jolla voidaan viitata ohjelman pääikkunaan streamingclient.cpp Itse streamingclient-luokan koodi löytyy streamingclient.cpp-tiedostosta. Ensimmäisenä ajojärjestyksessä on konstruktori: Ensimmäisenä konstruktorissa käynnistetään GStreamer kutsumalla gst_init_check-funktiota. Tämä funktio toimii samalla testinä, voiko GStreamer käynnistyä, ja jos käynnistyminen ei onnistu, palauttaa funktio boolean-arvon 0. Tätä hyödyntäen funktiota käytetään if-lauseen ehtona. Lauseella palataan ohjelman pääikkunaan, jos GStreamerin käynnistäminen epäonnistuu. Konstruktorissa laitetaan näkyviin myös streamclient-luokan käyttöliittymä kutsumalla käyttöliittymän setupui-funktiota. Lisäksi kutsutaan 27
28 connectsignalsstreamingclient-funktiota, jossa luokan tarvitsemat signaalit yhdistetään sloteihin. Ensimmäisellä connectilla yhdistetään pushbutton_close-painonappi pääikkunan setandshowmainpage-funktioon ja streamingclient suljetaan. Toinen nappi yhdistetään streamingclient-luokan initclient-funktioon, jossa itse streamin vastaanotto ja kuuntelu tapahtuvat. initclient-funktio on streamingclient-luokan pääfunktio. Koko luokan toiminnallisuus on sijoitettu tähän funktioon. Kun initclient-funktiota kutsutaan, ensimmäiseksi määritellään muutamia ohjelman tarvitsemia vakioarvoja. AUDIO_CAPS on näistä määrityksistä tärkein, koska ilman niitä ohjelma ei tietäisi, mitä muotoa siirrettävä audio on, eikä siten osaisi purkaa RTPpaketteja saatikka toistaa purettua audiota. Tiedot sisältävät streamin tiedostomuodon, sen sisältämät mediat, enkoodauksen sekä kellotaajuuden. Seuraavat kolme määritystä ovat osa ohjelman nykymuotoista perustoimintaa ja liittyvät ohjelman testaukseen. Todellisuudessa nämä kolme tulisi määrittää serverin lähettämien caps-tietojen perusteella. AUDIO_DEPAY määrittää GStreamer-plug-inin, jolla RTP-paketit puretaan. Tässä tapauksessa kyseessä on mpa (eli MPEG Audio, tutummin yleinen mp3-audio). AUDIO_DEC määrittää streamin toistoon käytettävän plug-inin ja AUDIO_SINK plug-inin, jolla audio lopulta lähetetään kaiuttimiin. 28
29 Seuraavaksi luodaan GStreamerin tarvitsemat elementit: GstElement on perusluokka, josta jokainen pipelinen elementti luodaan. Elementille luodaan toiminnallisuus kutsumalla vastaavaa GStreamerin funktiota. g_assert-funktio on GLib-kirjastoon kuuluva testifunktio, joka lopettaa ohjelman, jos parametrina annetun elementin luonti ei ole onnistunut. Seuraavassa luodaan pipeline, joka hallitsee muita elementtejä ja huolehtii siten koko streamingclient-luokan toiminnallisuudesta. Seuraavana luodaan toiminnallisuus elementeille, jotka ovat suorassa yhteydessä serveriin käyttäen UDP-protokollaa. Tähän tehtävään käytetään udpsrc- ja udpsink-plug-ineja, udpsrc:tä vastaanottamaan ja udpsinkiä lähettämään dataa. Jotta elementteihin saataisiin tietyn plug-inin toiminnallisuus, täytyy kutsua gst_element_factory_make-funktiota ja antaa parametreinä halutun plug-inin nimi ja halutun elementin nimi. g_object_set-funktiolla voidaan muuttaa elementin asetuksia. Funktio ottaa parametreinä ensimmäiseksi olion, jonka asetuksia muutetaan. Seuraavana annetaan asetuksen nimi ja sen jälkeen uusi arvo, johon asetus asetetaan. Funktio osaa muuttaa useita arvoja yhdellä kutsulla, joten parametrien määrä ei ole vakio. Näin ollen funktion viimeisenä parametrinä täytyy aina antaa NULL, jotta funktio tietää, milloin asetuksien muuttaminen lopetetaan. 29
30 rtpsrc ottaa vastaan RTP-dataa UDP:n yli. rtpsrc tarvitsee siis paitsi portin, jota kuunnellaan, myös ohjelmassa aiemmin määritellyt caps-tiedot. Kuten jokaisessa RTP-yhteyttä käyttävässä ohjelmassa, täytyy myös tässä ohjelmassa siirtää RTCP-dataa. rtcpsrc ottaa vastaan edellä mainittua dataa serveriltä. rtcpsink puolestaan lähettää RTCP-tietoja serverille. Sen tyyppinä on udpsink. Seuraavalla rivillä luodut elementit lisätään pipelineen: Seuraavaksi vastaanotettu audio täytyy muuttaa muotoon, jossa se voidaan toistaa. audiodepay muuntaa RTP-datan normaaliksi äänidataksi: Seuraavat elementit hoitavat audion toiston, aina puretusta datasta kaiuttimiin asti. 30
31 Kun kaikki elementit on luotu, ne voidaan lisätä pipelineen ja linkittää toisiinsa: rtpbin on elementti, joka hallitsee RTP- ja RTCP-yhteyksiä. Tämä elementti helpottaa huomattavasti yhteyden muodostamista ja ylläpitoa. Jotta rtpbin voisi hallita yhteyttä, täytyy rtpsrc, rtcpsrc ja rtcpsink yhdistää rtpbinin vastaaviin padeihin. rtpsrc yhdistetään binin recv_rtp_sink_0-padiin, samoin kuin rtcpsrc recv_rtcp_sink_0- ja rtcpsink send_rtcp_src_0-padeihin. rtpbin käyttää dynaamisia padeja, joiden lopullinen yhteys luodaan vasta ohjelman käytön aikana, kun rtpbin löytää pipelinestä vastaanotettavaa streamia vastaavan depay-elementin. Tämän takia ohjelma tarvitsee 31
32 callback-funktion, jota kutsutaan kun ohjelma saa yhteyden. Jotta rtpbinin lähettämä GLib-signaali huomattaisiin, tarvitaan myös seuraava rivi, jolla GLib-signaali yhdistetään callback-funktioon. Callback-funktiossa yhdistetään rtpbin pipelinen myöhempiin elementteihin. Kun yhteys rtpbinin ja pipelinen välillä on luotu, voidaan pipeline laittaa soittotilaan, jolloin streami toistetaan. 32
33 5 TULOKSET JA JOHTOPÄÄTÖKSET Opinnäytetyön tuloksena oli määrittelyjen mukainen ohjelma, jolla voitiin luoda sekä serveri, joka lähettää audiostreamia, että asiakas, jolla streamia pystytään kuuntelemaan. Ohjelmassa käytettiin menetelmiä ja teknologioita, joiden hyödyntäminen on mahdollista siinäkin tapauksessa, kun kohdealustana on Maemo-käyttöjärjestelmä. Itse kohdelaitteella emme ohjelmaa valitettavasti päässeet testaamaan, mutta lähiverkossa kahden Linux-koneen välillä ohjelma toimi odotetusti. Työn toteuttamiseen haastetta toivat käytännössä puhtaalta pöydältä alkanut streamaustoiminnon kehittäminen: tiesimme olemassa olevia teknologioita, mutta emme miten ne käytännössä toimivat ja miten niitä voitaisiin käyttää Qt-ohjelmassamme. Haastetta toi myös dokumentaation ja aiempien käyttäjäkokemuksien näennäinen vähäisyys: projektia suunnitellessa ja määritellessä oli hankala tehdä ratkaisuja, koska tunnuimme olevan ensimmäisiä, jotka yrittivät käyttää GStreameriä nettistreamin lähettämiseen ja vastaanottamiseen. Näin ollen aikaa suunnitteluun ja määrittelyyn kului aiottua enemmän. Qt:n tuki kolmannen osapuolen teknologioille oli myös yksi selvitettävä asia työssä. Tähän löytyi onneksi esimerkkejä ja dokumentaatiota enemmänkin, ja GStreamer-toiminnallisuuden rakentaminen Qt-ympäristöön onnistui yllättävänkin helposti. Pieniä hankaluuksia tosin tuotti kokemuksen puute Linux-käyttöjärjestelmien kanssa, ja GStreamer- ja GLib-kirjastojen löytäminen vei vähän aikaa toteutusvaiheessa. Loppujen lopuksi projekti kuitenkin onnistui odotettuun tapaan. Saimme kokemusta Linux-järjestelmistä ja Qt:n käyttämisestä kolmannen osapuolen teknologioiden kanssa sekä tutustuimme GStreameriin multimediakirjastona. Työn valmistumisen ja raportin palauttamisen välisenä aikana ovat teknologiat ja käytetyt järjestelmät kerinneet muuttua useaankin otteeseen, 33
34 ovathan kyseessä paljon käytetyt ja suositut teknologiat. Näin ollen työmme ei ole enää ihan yhtä ajankohtainen. Qt:hen on tullut Phononin lisäksi myös QtMultimedia-moduuli, joka tuo uuden mahdollisuuden kevyeen matalan tason multimediatoistoon. Phonon on vielä monipuolisempi mutta raskaampi vaihtoehto. Nokia on myös julkaissut uuden QtMobility-API:n (Application Programming Interface), joka on suunniteltu sisältämään kevyitä mutta tehokkaita, erityisesti mobiililaitteille suunniteltuja ratkaisuja esimerkiksi paikannukselle, kameralle, videokuvan ottamiselle yms. QtMobilityn sisältämässä QtMultimedia-moduulissa ei kuitenkaan ole ohjelmaamme jo ennen opinnäytetyötä sisältyneitä toiminnallisuuksia, ja Phononin puuttuessa QtMobility-API:sta ohjelman kääntäminen QtMobilitylle ei olisi aivan yksinkertaista. (20; 21.) Myös Phononin kehitys jatkuu KDE-projektin alaisuudessa, uusin julkaisu on versio Tosin dokumentaatiosta ei tällä hetkellä selvinnyt, onko projektissa implementoitu RTP-protokollaan perustuva netin yli streamaaminen. (22.) GStreamerin kehitys on edelleen jatkuvaa ja plug-ineja päivitetään aktiivisesti; kirjoituksen aikaan uusin vakaa julkaisu on kesäkuulta 2011: GStreamer Core , Base ja Good Suuria muutoksia RTP-protokollaa käyttäviin plug-ineihin ei ole kuitenkaan tullut. (23.) Maemo-käyttöjärjestelmä, samoin kuin N900-puhelin, ovat jääneet historiaan mutta Maemon epävirallinen jälkeläinen MeeGo on vielä hengissä: MeeGoon pohjaava Harmattan-järjestelmä on käytössä Nokian uudessa N9- puhelimessa. (24.) Loppuyhteenvetona mielestäni ohjelmamme on hyvin kehityskelpoinen, joskin vielä alkeellinen mediasoitin, jossa varsinkin streamausosassa on paljon potentiaalia jatkokehitykselle. Esimerkiksi ohjelmamme on tällä hetkellä täysin riippuvainen koodiin määritellyistä parametreistä, jotka tulisi siirtää netin yli käyttäen esimerkiksi Qt:n erittäin käyttökelpoista QtNetwork- 34
35 moduulia. Netin yli voisi siirtää esimerkiksi myös soitettavan kappaleen tiedot, soitettavan soittolistan tiedot sekä mahdolliset toistoon liittyvät komennot kuten kelaus, kappaleen vaihtaminen tai soiton laittaminen tauolle. 35
36 LÄHTEET 1. Qt (framework) Saatavilla: Hakupäivä Evolution of Maemo. Saatavilla: Hakupäivä MeeGo Saatavilla: Hakupäivä Software Platform. Saatavilla: Hakupäivä Qt 4.6 Whitepaper Saatavilla: whitepaper. Hakupäivä Modular Class Library Saatavilla: Hakupäivä qmake Manual Saatavilla: Hakupäivä Widgets and Layouts Saatavilla: Hakupäivä Signals and Slots Saatavilla: Hakupäivä Meta-Object System Saatavilla: Hakupäivä QObject Class Reference Saatavilla: Hakupäivä
37 12. Phonon Overview Saatavilla: Hakupäivä RTP: A Transport Protocol for Real-Time Applications Saatavilla: Hakupäivä GStreamer Saatavilla: Hakupäivä Taymans, Wym - Baker, Steve - Wingo, Andy - Bultje, Ronald S. - Kost, Stefan, Bins and pipelines. Saatavilla: on-intro-basics-bins.html. Hakupäivä GStreamer Plug-ins splitup. Saatavilla: Hakupäivä Overview of available plug-ins. Saatavilla: Hakupäivä Scrum (development) Saatavilla: Hakupäivä Waterfall model Saatavilla: Hakupäivä Qt Mobility 1.2: Qt Mobility Project Reference Documentation Saatavilla: Hakupäivä
38 21. Qt 4.7: QtMultimedia Module Saatavilla: Hakupäivä Development/Tutorials/Phonon/Introduction Saatavilla: Hakupäivä GStreamer Core , Base Plugins , Good Plugins stable release Saatavilla: Hakupäivä Nokia N Saatavilla: Hakupäivä
Qt perusteet. Juha-Matti Vanhatupa. (vanhan kurssin Graafisen käyttöliittymän ohjelmointi materiaalia)
Qt perusteet Juha-Matti Vanhatupa (vanhan kurssin Graafisen käyttöliittymän ohjelmointi materiaalia) Sisältö Käännösprosessi MetaObjectSystem Hyödyt Qt:n moduulit Qt käyttöliittymän muistinhallinta Debug-tulosteet
Mobiilimaailma murroksessa 2011 Tommi Teräsvirta, Tieturi
Business is evolving, you should too. MeeGo ulkona vai myöhässä? Mobiilimaailma murroksessa 2011 Tommi Teräsvirta, Tieturi Helsinki, Tampere, Turku, Stockholm, Göteborg www.tieturi.fi MeeGo YALMP (Yet
ELM GROUP 04. Teemu Laakso Henrik Talarmo
ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................
Qt kaikkialla? 9.4.2010
Qt kaikkialla? Helsinki Tammasaarenkatu 5, 00180 Helsinki, Tel. 09 431 551 Tampere Satakunnankatu 18, 33210 Tampere, Tel. 03 315 861 Turku Lemminkäisenkatu 32 A, 20520 Turku, Tel. 02 263 571 Qt Qton C++
BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä
Pekka Ryhänen & Erkki Pesonen 2002 BlueJ:n käyttö Nämä ohjeet on tarkoitettu tkt-laitoksen mikroluokan koneilla tapahtuvaa käyttöä varten. Samat asiat pätevät myös muissa luokissa ja kotikäytössä, joskin
IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit
IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,
ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014
18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,
Qt-käyttöliittymäkirjasto
Qt-käyttöliittymäkirjasto Matti Lehtinen makaleht@cc.jyu.fi 26.11.2007 Tiivistelmä Tässä raportissa tarkastellaan Qt-käyttöliittymäkirjastoa ja sen käyttöä C++-kielellä. Raportissa tarkastellaan ensiksi
KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma / Tietoverkkotekniikka. Joni Korjala APACHE WWW-PALVELIN Seminaarityö 2012
KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma / Tietoverkkotekniikka Joni Korjala APACHE WWW-PALVELIN Seminaarityö 2012 SISÄLLYS 1 JOHDANTO 3 2 WWW-PALVELIMEN TOIMINTA 4 3 OMINAISUUDET
Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }
Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin testattaviin toiminnallisuuksiin, kuten olion tarjoamiin metodeihin.
KYMENLAAKSON AMMATTIKORKEAKOULU
1 KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma / Tietoverkkotekniikka Ole Halonen GNU-ohjelmointityökalut Linux-järjestelmät 206101310 Seminaarityö 22.11.2012 2 Sisällysluettelo 2 1 Johdanto
Felipe Ballester TI07
Felipe Ballester TI07 Työpöytäympäristöllä tarkoitetaan ohjelmistokokonaisuutta, joka antaa käyttöjärjestelmälle graafisen ilmeen ja hallinnointiominaisuuksia Työpöytäympäristön komponentteja ovat mm:
Kieliversiointityökalu Java-ohjelmistoon. Ohje
Kieliversiointityökalu Java-ohjelmistoon Ohje 2/6 SISÄLLYSLUETTELO 1 YLEISTÄ OHJELMASTA... 3 2 PÄÄ-IKKUNA...4 3 YLÄVALIKKO... 4 3.1 TIEDOSTO... 4 3.2 TOIMINTO... 4 3.3 ASETUKSET... 5 3.4 OHJE... 5 4 VÄLILEHDET...5
Linux. 00 Keskeiset piirteet. Unix ja Linux Helsingin ammattikorkeakoulu Stadia Vesa Ollikainen (muokannut M.Mäki-Uuro) Kysymyksiä
Linux 00 Keskeiset piirteet Tux-pingviinin kuva: Larry Ewing, Simon Budig ja Anja Gerwinski Kysymyksiä 1. Mikä Linux on? 2. Kuinka Linux syntyi ja kehittyy? 3. Mitkä ovat Linuxin vahvuudet? 2 1 Linux on
Taulukot. Jukka Harju, Jukka Juslin 2006 1
Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti
Qt pohjaisen paikkatietotyökalun suunnittelu ja toteutus
Qt pohjaisen paikkatietotyökalun suunnittelu ja toteutus (Julkinen osa) Samu Laaksonen Opinnäytetyö Huhtikuu 2012 Tietotekniikan koulutusohjelma Ohjelmistotekniikka 2 TIIVISTELMÄ Tampereen ammattikorkeakoulu
Olio-ohjelmointi Javalla
1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi
15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien
Unix-perusteet. Unix/Linux-käyttöjärjestelmä ja sen ominaisuudet
Unix-perusteet Unix/Linux-käyttöjärjestelmä ja sen ominaisuudet Mikä on unix? Monen käyttäjän käyttöjärjestelmä Siis monta käyttäjää ja monta ohjelmaa jokaisella Kaikkiin koneisiin mikrosta supertietokoneeseen
DXL Library ja DXL-kielen olemus. Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/
DXL Library ja DXL-kielen olemus Pekka Mäkinen Pekka.Makinen@softqa.fi SoftQA Oy http/www.softqa.fi/ DOORS extension Language DXL on DOORSin laajennuskieli, jolla voidaan kehittää lisätoiminnallisuutta.
Graafisen käyttöliittymän ohjelmointi Syksy 2013
TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Syksy 2013 Luento 10 Rinnakkaisuus käyttöliittymäohjelmoinnissa Juha-Matti Vanhatupa Rinnakkaisuus ja käyttöliittymäohjelmointi
13/20: Kierrätys kannattaa koodaamisessakin
Ohjelmointi 1 / syksy 2007 13/20: Kierrätys kannattaa koodaamisessakin Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy
Loppuraportti. Virtuaali-Frami, CAVE-ohjelmisto. Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu. Versio
1 Loppuraportti Virtuaali-Frami, CAVE-ohjelmisto Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu Versio 1.0 15.1.2006 2 Sisällys Tiivistelmä... 3 1 Johdanto... 4 1.1 Dokumentin tarkoitus...
PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER
PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER Group 16 Ville Laatu Henri Myllyoja - i SISÄLLYSLUETTELO 1. DEBUGGERI YLEISESTI... II 1.1 Debuggerin käyttämien... ii 1.2 Debuggerin käynnistäminen... ii
JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002
JReleaser Yksikkötestaus ja JUnit Mikko Mäkelä 6.11.2002 Sisältö Johdanto yksikkötestaukseen JUnit yleisesti JUnit Framework API (TestCase, TestSuite) Testien suorittaminen eri työkaluilla Teknisiä käytäntöjä
Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla
Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla ALKUHARJOITUS Kynän ja paperin avulla peilaaminen koordinaatistossa a) Peilaa pisteen (0,0) suhteen koordinaatistossa sijaitseva - neliö, jonka
Fronter Varauskalenteri-työkalu
Fronterin varauskalenteri 1 Fronter Varauskalenteri-työkalu 1. Yleistä 2. Varauskalenterin toimintaperiaate 2.1. Varauskalenteriin siirtyminen 2.2. Varauskalenteri 2.3. Varauksen tekeminen 2.3.1. Toistuvan
Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Ylläpitodokumentti Boa Open Access Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari
QT tyylit. Juha Järvensivu 2008
QT tyylit Juha Järvensivu juha.jarvensivu@tut.fi 2008 Sisällys QStyle Style sheet Tyyli (QStyle) Kapseloi widgettien Look And Feel ominaisuudet Toteutettu QT:ssa QStyle luokkaan Sisäänrakennettuja tyylejä
Graafisen käyttöliittymän ohjelmointi
TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Luento 2 Tapahtumapohjainen ohjelmointi Juha-Matti Vanhatupa Sisältö Tapahtumapohjainen ohjelmointi Tapahtumakuuntelijoiden
Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:
Dokumentaatio, osa 1 Tehtävämäärittely Kirjoitetaan lyhyt kuvaus toteutettavasta ohjelmasta. Kuvaus tarkentuu myöhemmin, aluksi dokumentoidaan vain ideat, joiden pohjalta työtä lähdetään tekemään. Kuvaus
BaseMidlet. KÄYTTÖOHJE v. 1.00
KÄYTTÖOHJE v. 1.00 KUVAUS BaseMidlet on matkapuhelimessa toimiva sovellus jolla voi etäkäyttää Tiimi 7000 sarjan säätimiä. Copyright Team-Control Oy, oikeudet muutoksiin pidätetään. TiiMi on Team-Control
5. HelloWorld-ohjelma 5.1
5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2
11/20: Konepelti auki
Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon
Ohjelmointi 1. Kumppanit
Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5
Ohjelmistojen mallintaminen. Luento 11, 7.12.
Ohjelmistojen mallintaminen Luento 11, 7.12. Viime viikolla... Oliosuunnittelun yleiset periaatteet Single responsibility eli luokilla vain yksi vastuu Program to an interface, not to concrete implementation,
Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla
Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,
Android ohjelmointi. Mobiiliohjelmointi 2-3T5245
Android ohjelmointi Mobiiliohjelmointi 2-3T5245 Mikä on Android? Linux kernelin päälle rakennettu, Googlen kehittämä sovelluspino mobiilisovelluksiin Erillinen versio puhelimelle ja taulutietokoneille
C-ohjelmoinnin peruskurssi. Pasi Sarolahti
C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java) Tavoite Opiskelija ymmärtää olio-ohjelmoinnin problematiikan. Opiskelija osaa määritellä ja käyttää itse
Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.
MagicDraw-pikaohje Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia. Alkuvalmistelut Windows (sali TC205) 1) Kirjaudu sisään TTY:n intra-tunnuksella.
TIE Ohjelmistojen suunnittelu
TIE-20200 Ohjelmistojen suunnittelu Luento 8: Lokalisointia/kansainvälistystä TIE-20200 Samuel Lahtinen 1 Ajankohtaista Viimeiset viikkoharkat tarjolla, aiheena kansainvälistäminen/lokalisointi Viikkoharkkoja
Javan perusteita. Janne Käki
Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).
15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:
9. Periytyminen Javassa 9.1
9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.
KUVANKÄSITTELY THE GIMP FOR WINDOWS OHJELMASSA
KUVANKÄSITTELY THE GIMP FOR WINDOWS OHJELMASSA Ohjeistuksessa käydään läpi kuvan koon ja kuvan kankaan koon muuntaminen esimerkin avulla. Ohjeistus on laadittu auttamaan kuvien muokkaamista kuvakommunikaatiota
Uudelleenkäytön jako kahteen
Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta
Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo
Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...
Interfacing Product Data Management System
Interfacing Product Data Management System Tekijä: Työn valvoja: Mats Kuivalainen Timo Korhonen Esitelmän sisältö Työn suorituspaikka - Ideal Product Data Oy Käsitteitä Työn tavoitteet Työn tulokset 1/5
Joonas Ruotsalainen GIT PIKAOPAS. Tutkielma 2011
1 Joonas Ruotsalainen GIT PIKAOPAS Tutkielma 2011 2 SISÄLTÖ 1. JOHDANTO... 3 2. ASENTAMINEN... 4 3. KÄYTTÖ... 4 3.1 Perusasetukset... 4 3.2 Git:n ottaminen käyttöön projektissa... 5 3.3 Tiedostojen lisääminen
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 12.4.2010 T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 1 / 34 Graafiset käyttöliittymät Tähän asti kirjoitetuissa ohjelmissa on ollut tekstipohjainen käyttöliittymä.
Ohjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 6: Graasten käyttöliittymien ohjelmointia Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 29. 2. 2012 Sisältö 1 GUI-ohjelmointia
Qt-ohjelmointitekniikat Java-osaajan näkökulmasta
Tampereen ammattikorkeakoulu Tietojenkäsittelyn koulutusohjelma Matti Nieminen Opinnäytetyö Qt-ohjelmointitekniikat Java-osaajan näkökulmasta Työn ohjaaja Työn tilaaja Tampere 6/2009 FL Paula Hietala Kilosoft
Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit
Ohjelmiston testaus ja laatu Ohjelmistotekniikka elinkaarimallit Vesiputousmalli - 1 Esitutkimus Määrittely mikä on ongelma, onko valmista ratkaisua, kustannukset, reunaehdot millainen järjestelmä täyttää
Voit käyttää tekemääsi ohjelmaa seuraavan viikon harjoituksissa, joten kopio työsi hedelmät talteen äläkä tuhoa niitä.
Viikkoharjoitus 1 Viikkoharjoituksessa tutustutaan signal-slot mekanismiin, QT:n Creatorin käyttöliittymäeditoriin, testataan debuggerin käyttöä, katsotaan debug-tulosteiden käyttöä ja käytetään dump-metodeita.
Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:
Linux-harjoitus 6 Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: http://www.mysql.com/, MySQL-tietokantaohjelman kotisivu. http://www.mysql.com/doc/en/index.html,
S-38.118 Teletekniikan perusteet
S-38.118 Teletekniikan perusteet Laskuharjoitus 3 Paketoinnin hyötysuhde 1 Harjoitus 3 koostuu: Demoluento (45 min) Datan siirtäminen Internetissä yleensä Laskuesimerkki datan siirtämisestä Äänen siirtäminen
Sisältö IT Linux 2001:n uudet ominaisuudet IT Linux 2001:n yhteensopivuus Red Hat 7.0:n kanssa Asennuksen valmistelu
Sisältö 1 IT Linux 2001:n uudet ominaisuudet 1 1.1 Uudet ominaisuudet......................... 1 1.2 KDE 2.0................................. 2 1.3 XFree86 4.0.1.............................. 2 1.4 Uusi
Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia
Ohjelmistojen mallintaminen, kurssikoe 15.12. esimerkkivastauksia Tehtävä 1 a: Ohjelmistotuotantoprosessi sisältää yleensä aina seuraavat vaiheet: määrittely, suunnittelu, toteutus, testaus ja ylläpito.
Scratchbox ja Maemo. Nokia 770 Internet Tablet-ohjelmistokehitys. Timo Savola. Movial Oy. FUUG:in kevätristeily 20.3.2006. <tsavola@movial.
Scratchbox ja Maemo Nokia 770 Internet Tablet-ohjelmistokehitys Timo Savola Movial Oy FUUG:in kevätristeily 20.3.2006 Osa I Scratchbox Scratchbox Ristiinkääntöympäristö Cross-compilation
4. Luokan testaus ja käyttö olion kautta 4.1
4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään
Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat
Linux rakenne Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat Linux ydin Ytimen (kernel) päätehtävä on tarjota rajapinta
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos TKT-3200 Tietokonetekniikka I Harjoitustyö 4: Cache, osa 2.. 2010 Ryhmä Nimi Op.num. 1 Valmistautuminen Cache-työn toisessa osassa
Harjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.
eduroamin käyttöohje Windows
eduroamin käyttöohje eduroamissa liitytään verkkoon käyttäen 802.1x:ää. Tätä varten tarvitaan suplikantti ja tietokoneissa voidaan käyttää Windowsin tai Linuxin oma suplikanttia. eduroamiin voidaan myös
AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin
AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013
TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli
TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2
Valppaan asennus- ja käyttöohje
Versio Päiväys Muokkaaja Kuvaus 0.9 16.2.2006 Tuukka Laakso Korjattu versio 0.1 Antti Kettunen Alustava versio Sisällysluettelo 1 Johdanto...2 2 Valppaan asennus...3 2.1 Valppaan kääntäminen...3 2.2 Valmiiksi
Sukupuu -ohjelma. Ossi Väre (013759021) Joni Virtanen (013760641)
Sukupuu -ohjelma Ossi Väre (013759021) Joni Virtanen (013760641) 7.11.2011 1 Johdanto Toteutimme C -kielellä sukupuuohjelman, johon käyttäjä voi lisätä ja poistaa henkilöitä ja määrittää henkilöiden välisiä
AutoCAD-natiiviobjektin toteutus
AutoCAD-natiiviobjektin toteutus Kontiotuote OY Maailman toiseksi suurin hirsitalotoimittaja Aloittanut toimintansa 70-luvulla Liikevaihto vuonna 2003-37,355 Milj. euroa josta vientiä 7,376 Milj. euroa
Kerro kuvin 3:n uudet ominaisuudet
Verkkosivu: www.haltija.fi Puhelin: 09 612 2250 Sähköposti: asiakaspalvelu@haltija.fi Kerro kuvin 3:n uudet ominaisuudet Kerro kuvin 3 on kehitetty uudelleen perusteista lähtien. Kaikki, mikä oli mahdollista
CT50A2601 Käyttöjärjestelmät Androidin ja Symbianin vertailu Seminaarityö
CT50A2601 Käyttöjärjestelmät Androidin ja Symbianin vertailu Seminaarityö 0349955 Pekka Hyvärinen 0342194 Joonas Heikelä 0327708 Miro Temonen 0350122 Sami Tuominen Yleistä Seminaarityö osa kurssia Käyttöjärjestelmät
TIE Ohjelmistojen suunnittelu
TIE-20200 Ohjelmistojen suunnittelu Luento 12: Lokalisointia/kansainvälistystä TIE-20200 Samuel Lahtinen 1 Sisältöä Kansainvälistäminen/lokalisointi Mitä asioita voi liittyä kansainvälistämiseen/lokalisointiin?
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu
Liite 1: skenaariot ja PoC tulokset 1. Palvelun kehittäjän näkökulma Tilanne Vaatimus Ongelma jos vaatimus ei toteudu Palvelun uusi versio on Palveluiden kehittäminen voitava asentaa tuotantoon vaikeutuu
812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä
812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus
Suvi Junes Tietohallinto / Opetusteknologiapalvelut 2012
Tiedostot Uudet ominaisuudet: - Ei Tiedostot-kohtaa alueen sisällä, vaan tiedostonvalitsin, jolla tiedostot tuodaan alueelle siihen kohtaan missä ne näytetään - Firefox-selaimella voi työpöydältä raahata
XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy
IBM Collaboration Forum ٨.٣.٢٠١١ XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy ٢٠١١ IBM Corporation Domino-sovelluskehitys Nopea kehitysympäristö (Rapid application development,
PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki
PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet
Visual Case 2. Miika Kasnio (C9767) 23.4.2008
Visual Case 2 Miika Kasnio (C9767) 23.4.2008 Työn tarkasti: Jouni Huotari 24.4.2008 1 SISÄLTÖ 1. TYÖN LÄHTÖKOHDAT... 2 2. PERUSTIEDOT... 2 3. ASENTAMINEN... 2 4. OMINAISUUDET... 3 4.1. UML-kaaviot... 4
Tech Conference 28.-29.5.2015. Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI
Tech Conference 28.-29.5.2015 Visual Studio 2015, C#6,.NET4.6 Heikki Raatikainen #TechConfFI Yleistä Avoimuus Open Source ja tuki yleisesti käytetyille ei-ms työkaluille Kaikki alustat tuettuna:.net 5
SYMBIANIN SERIES 60 JA PUHELIMEN PERUSTOIMINNOT
T-121.200 KÄYTTÖLIITTYMÄPSYKOLOGIA SYMBIANIN SERIES 60 JA PUHELIMEN PERUSTOIMINNOT Kirsi Männistö kmannist@cc.hut.fi T-121.200 Käyttöliittymäpsykologia 1 (7) Kirsi Männistö Sisällysluettelo 1 JOHDANTO...
Jouko Nielsen. Ubuntu Linux
Jouko Nielsen Ubuntu Linux 19.4.2017 SISÄLLYS 1 UBUNTU... 3 2 LUETTELO VERSIOISTA... 4 3 OMINAISUUDET... 4 4 ASENNUS... 5 5 UBUNTU SERVER... 9 LÄHTEET... 10 3 1 UBUNTU Ubuntu on debian pohjainen Linux
Simulaattorin asennus- ja käyttöohje
Linux ja Windows XP Versio Päiväys Muokkaaja Kuvaus 0.2 16.2.2006 Mikko Halttunen Katselmoinin jälkeen 0.1 13.2.2006 Mikko Halttunen Alustava versio Sisällysluettelo 1 Johdanto... 3 2 Simulaattorin asennus...
Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö
Matopeli C#:lla Aram Abdulla Hassan Ammattiopisto Tavastia Opinnäytetyö Syksy 2014 1 Sisällysluettelo 1. Johdanto... 3 2. Projektin aihe: Matopeli C#:lla... 3 3. Projektissa käytetyt menetelmät ja työkalut
UCOT-Sovellusprojekti. Asennusohje
UCOT-Sovellusprojekti Asennusohje Ilari Liukko Tuomo Pieniluoma Vesa Pikki Panu Suominen Versio: 1.00 Julkinen 15. joulukuuta 2006 Jyväskylän yliopisto Tietotekniikan laitos Jyväskylä Hyväksyjä Päivämäärä
Febdok 6.0 paikallisversion asennus OHJEISTUS
Febdok 6.0 paikallisversion asennus OHJEISTUS Sisällys 1 YLEISTÄ 1 2 ASENNUKSEN VALMISTELUT 2 2.1 VARMUUSKOPIOT 2 2.2 ASENNUSTIEDOSTON LATAUS, WWW.FEBDOK.FI 2 2.3 ASENNUSTIEDOSTON LATAUS, FEBDOK:IN SISÄINEN
Aimo-ohjauspaneelin käyttöohje Sisällys
Aimo-ohjauspaneelin käyttöohje Sisällys Tunnusten tilaaminen... 2 Sisäänkirjautuminen... 3 Käyttöliittymä... 4 Ryhmätekstiviestien lähettäminen... 5 Ryhmät... 7 Push-viestien lähettäminen... 12 Mobiilipalvelun
5. HelloWorld-ohjelma 5.1
5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2
S11-09 Control System for an. Autonomous Household Robot Platform
S11-09 Control System for an Autonomous Household Robot Platform Projektisuunnitelma AS-0.3200 Automaatio- ja systeemitekniikan projektityöt Quang Doan Lauri T. Mäkelä 1 Kuvaus Projektin tavoitteena on
WINE API ja Virtualisointiohjelmistot
WINE API ja Virtualisointiohjelmistot Yleistä Winestä Ohjelmisto, joka mahdollistaa Windows -pohjaisten ohjelmien käytön kuissa käyttöjärjestelmissä Toimii yhteensopivuuskerroksena ohjelman ja käyttöjärjestelmän
JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?
JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,
ITKP102 Ohjelmointi 1 (6 op)
ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat
Makrojen mystinen maailma lyhyt oppimäärä
Makrojen mystinen maailma lyhyt oppimäärä Makrot osana SAS-teknologiaa Yleiskuva Jouni Javanainen Aureolis lyhyesti Aureolis on jatkuvia Business Intelligence -palveluita tuottava asiantuntijaorganisaatio
Tiedostonhallinta. Yleistä
Tiedostonhallinta Tiedostonhallinnan kautta voi muokata kaikkia näkymän tiedostoja. Sitä tarvitaan näkymien räätälöintiin ja joidenkin asetusten muuttamiseen. Yleistä Tiedostojen tarkastelu ja muokkaus
Pörisevä tietokone. morsetusta äänikortilla ja mikrofonilla
Pörisevä tietokone morsetusta äänikortilla ja mikrofonilla 1 Tiivistelmä Idea toteuttaa seuraavat vaatimukset: 1. kommunikointi toisen opiskelijan kanssa (morsetus) 2. toisen opiskelijan häirintä (keskittymistä
Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla
Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään
ZENworks Application Virtualization 11
ZENworks Application Virtualization 11 ZENworks / perinteinen asennus ZENworks virtualisointi Ei erillistä asennusta Ei vaadita erilisiä oikeuksia Oletusasetukset mukana Eri versiot samanaikaisesti Sama