archive-fi.com » FI » M » MOBIILIKEHITYS.FI

Total: 273

Choose link from "Titles, links and description words view":

Or switch to "Titles and links view".
  • October | 2012 | Mobiilikehitys
    Käytännössä kaikissa moderneissa käyttöliittymäkirjastoissa on 1 N UI säiettä jotka palvelevat käyttöliittymää ns event loopin tapahtumakieriö toim kautta Event loop ottaa inputteja komponenteilta timereilta tai vaikkapa muilta säikeiltä alustakohtaisten viestinvälitysmekanismien välityksellä ja tarjoilee niitä kiinnostuneille kuuntelijoille Käytännössä jokaisella säikeellä on tasan yksi tai nolla jos kyseessä ei ole UI ta palveleva säie event loop ja yleisesti mobiilikäyttöjärjestelmissä UI ta palvelee vain yksi säie kerrallaan Käyttöliittymä kumminkin toimii jouhevasti niin kauan kuin tätä säiettä ei varata kerralla liian pitkäksi aikaa pitkäkestoinen laskenta täytyy joka jakaa pieniin osiin tai tehdä muissa säikeissä Event loopiin perustuvat järjestelmät sallivat yleensä event looppien sisäkkäisen ajamisen nesting tällöin vanha event loop aktivaatio pysähtyy eikä jatka ennenkuin sisempi loop aktivaatio loppuu Tätä voidaan hyväksikäyttää asynkronian poistamiseksi API metodin sisällä ajetaan uusi aktivaatio kuunnellaan asynkronista vastausta ja lopetataan aktivaatio kun vastaus on saatu Tällöin APIa kutsuva metodi blokkaa koko suorituksen ajan On kuitenkin erotettava tämä semaforin odottamisesta säiehän ei ole idlena vaan suorittaa sisempää event loop aktivaatiota Rakennetaan esimerkkitoteutus iOS lle Halutaan tehda seuraavanlainen kutsu void requestAndLogInput InputDialog dlg InputDialog dialog dlg showModal NSLog Dialog input was dlg getInput Aloitetaan dialogin luomisesta Tähän käytetään normaalia Cocoa Touch boilerplatea InputDialog dialog NSArray nibViews NSBundle mainBundle loadNibNamed InputDialog owner nil options nil InputDialog dlg nibViews objectAtIndex 0 retain autorelease return dlg Määritellään metodi jolla dialogi näytetään modaalisti se asettuu päällimmäiseksi ja blokkaa kunnes dialog on suljettu iOS lla event loop tunnetaan nimellä Run loop ja sitä vastaavat APIt ovat NSRunLoop sekä Core Foundationin CFRunLoop void showModal Lisätään dialogimme keywindow n ylimmän lapsen ylimmäksi lapseksi jolloin dialogi päätyy päällimmäiseksi view stackiin UIWindow keyWindow UIApplication sharedApplication keyWindow UIView topmostView keyWindow subviews objectAtIndex 0 topmostView addSubview self Sijoitetaan dialogi suunnilleen keskelle ruutua CGSize s topmostView bounds size self center CGPointMake s width 2 s height 2 70 Ajetaan nested run loop aktivaatio jolloin showModal kutsu blokkaa CFRunLoopRun Lopuksi määritellään dialogin sulkeva IBAction IBAction okPressed Poistetaan dialogi näkyvistä self removeFromSuperview Pysäytetään sisempi run loop aktivaatio kontrolli palaa ulommalle ja showModal kutsu palaa CFRunLoopStop CFRunLoopGetCurrent Valmista Ja koska kyseessä ovat erilliset run loop aktivaatiot eivätkä erilliset run loopit esimerkiksi timerit jatkavat eloaan ja autorelease pool on jaettu aktivaatioiden välillä Esimerkkiprojekti Xcode 4 5 projektina 40kB zip Uutiset Jo yli puolet iPhoneista päivitetty uusimpaan iOS 6 0 käyttöjärjestelmään October 3 2012 niko Leave a comment iPhonen käyttäjät ovat päivittäneet puhelimiaan ahkerasti Alle kahdessa viikossa on iOS 6 0 n osuus noussut kuuteenkymmenen prosenttiin kaikista iPhoneista ja iPadeissa vastaavat luku on 45 lähde BGR Samaan aikaan Androidilla vain hiukan yli 25 käyttäjistä on päivittänyt laitteensa 4 x x käyttöjärjestelmiin lähde developer android com Suurin osa käyttäjistä on jymähtänyt Gingerbreadiin joka ilmestyi jo kaksi vuotta sitten Syy niheään päivitykseen löytyy laitevalmistajista jotka tarjoavat erittäin hitaasti ja huonosti päivityksiä vanhempiin laitteisiin ja myös uudempiinkin Apple puolestaan tukee laitteita takautuvasti huomattavasti ahkerammin ja uusin iOS 6 0 oli tarjolla heti nyt jo kolme vuotta vanhaan iPhone 3gs puhelimeen iPad 1 tosin tipahti hiukan harmillisesti kyydistä pois iPhone kehittäjille käyttäjien päivitysinto tarkoittaa sitä että uusien käyttöjärjestelmien tuomat edut päästään hyödyntämään nopeammin

    Original URL path: http://mobiilikehitys.fi/2012/10/ (2016-04-30)
    Open archived version from archive


  • September | 2012 | Mobiilikehitys
    sitten Windows Phonella ei ollut Suomessa lainkaan markkinaosuutta tarinoita mobiilikehityksen maailmasta Mobiilikehitys fi Mobiilikehitys fi on Qvik Oy n työntekijöiden ylläpitämä blogi jonka kirjoittajilla on vankka mobiilialan asiantuntijuus Blogissa käsitellään kaikkea mobiilikehitykseen liittyvää ja vähän siitä vierestäkin Seuraa Facebookissa Seuraa Twitterissä Blogin RSS syöte Onko yrityksesi vailla mobiiliosaajia Qvik Oy tekee suuret ja pienet mobiiliprojektit ota yhteyttä niin käynnistetään sinun yrityksesi mobiiliprojekti Recent Posts Sijaintipalvelut iOS applikaatioissa 2 Geokoodaus Sijaintipalvelut iOS applikaatioissa OUYA Android konsoli Windows Phone 8 ja parantunut HTML5 tuki Porttautuva koodi mobiilissa Archives November 2013 August 2013 June 2013 April 2013 February 2013 January 2013 December 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 April 2011 March 2011 February 2011 January 2011 Categories Alustat 63 Android 24 HTML5 7 iOS 30 Windows Phone 12 Julkaisu 5 Käyttöjärjestelmät 4 Laitteet 5 iPad 4 OpenGL ES 2 0 4 Sovelluskehitys 26 2D Grafiikka 2 Adapterit 1 Animaatio 1 Arkkitehtuuri 1 Debug 2 Manifest 2 Resurssit 2 SQL tietokanta 1 Tallentaminen 1 Testaus 1 Ulkoasu 7 Widget 2 Tiedotteet 3 Tutoriaalit 18 Aloittelijat 11 iOS 5 4

    Original URL path: http://mobiilikehitys.fi/2012/09/ (2016-04-30)
    Open archived version from archive

  • August | 2012 | Mobiilikehitys
    lähes poikkeuksetta käyttää lua pcall ia Lua pcall lle annettavat argumentit ovat lua State argumenttien määrä paluuarvojen enimmäismäärä ja message handlerin indeksi pinossa 0 ei ole validi indeksi vaan se merkitsee että message handleria ei ole pinon indeksit alkavat 1 stä Tässä tapauksesssa emme välitä yhtään argumenttia funktiollemme emmekä ole kiinnostuneita sen mahdollisista paluuarvoista Rivillä 7 tarkistetaan onnistuiko funktiokutsu Jos paluuarvo on LUA OK 0 funktiokutsu onnistui ja pinossa on nyt funktion mahdolliset paluuarvot kuitenkin enintään niin monta arvoa kuin lua pcall kutsussa oli määrätty Tässä tapauksessa pino on siis tyhjä Muu paluuarvo merkitsee että funktiota suoritettaessa tapahtui virhe Paluuarvo kertoo virheen laadusta jotain katso tarkempaa tietoa Lua Reference Manualista mutta tässä tapauksessa tarkastelemme vain virheilmoitusta Jos kutsu epäonnistuu pinoon työnnetään funktion paluuarvojen sijaan virheilmoitus Rivillä 8 haemme virheilmoituksen pinosta Indeksi 1 tarkoittaa pinon päällimmäisintä alkiota negatiiviset indeksit lasketaan pinon päältä alkaen Tässä esimerkissä tänne ei koskaan tulla mutta voit kokeilla virheenhallintaa muokkaamalla Lua skriptin virheelliseksi Rivillä 11 lua State tuhotaan Lua close kutsun jälkeen lua State a ei voi enää käyttää Jos appissa luodaan Lua tulkkeja tarpeen mukaan on tärkeää muistaa tuhota ne lua close kutsulla kun niitä ei enää tarvita etteivät ne jää varaamaan muistia Argumentit ja paluuarvot Seuraavassa on esimerkki Lua funktiosta joka ottaa argumentteja ja palauttaa arvoja 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 static void argsAndRetsExample lua State lua luaL newstate luaL openlibs lua const char script local arg1 arg2 n print Lua function was called with arg1 and arg2 n local ret1 arg1 arg2 n local ret2 arg1 arg2 n return ret1 ret2 n luaL loadstring lua script lua Number arg1 3 7 arg2 1 printf calling Lua function with f and f n arg1 arg2 lua pushnumber lua arg1 lua pushnumber lua arg2 int err lua pcall lua 2 2 0 if err LUA OK lua Number ret1 lua tonumber lua 1 lua Number ret2 lua tonumber lua 2 printf Lua function returned f and f n ret1 ret2 else const char errMsg lua tostring lua 1 printf Error while calling Lua function s n errMsg lua close lua Ajettaessa tämä tulostaa seuraavaa calling Lua function with 3 700000 and 0 100000 Lua function was called with 3 7 and 0 1 Lua function returned 3 600000 and 0 370000 Tarkastellaan ensin Lua koodia LuaL loadstring funktiolla ladattu Lua funktio on tyypiltään nk vararg funktio Kaikki sen saamat argumentit on luettavissa vararg lausekkeesta joka on muodoltaan kolme peräkkäistä pistettä Lause local arg1 arg2 rivillä 6 asettaa paikallisen muuttujan arg1 arvoksi funktion ensimmäisen argumentin ja muuttujan arg2 arvoksi toisen argumentin Jos argumentteja ei ole tarpeeksi muuttujan arvoksi tulee nil Rivillä 10 Lua funktio palauttaa arvoja Lua funktio voi palauttaa useita arvoja tässä tapauksessa palautetaan kaksi arvoa Rivillä 12 ladataan funktio kuten edellä Funktion argumentit työnnetään pinoon funktion jälkeen Tässä kutsumme funktiota kahdella argumentilla Riveillä 16 ja 17 työnnetään argumentit pinoon Rivillä 18

    Original URL path: http://mobiilikehitys.fi/2012/08/ (2016-04-30)
    Open archived version from archive

  • July | 2012 | Mobiilikehitys
    että se etsii 2x loppuvat tiedostot ja näyttää ne korkearesoluutioisella näytöllä jQuery Retina Display Plugin on jQuery plugin joka toimii vastaavalla tavalla kuvien nimikäytäntö on tosin hieman erilainen sillä retina kuvan nimen perässä täytyy lukea 2x Jos JavaScriptissä halutaan suorittaa erilaista logiikkaa eri pikselitiheyden näytöille näytön pikselitiheyden saa selville julkisesta muuttujasta window devicePixelRatio Jatkoluettavaa Optimising for High Pixel Density Displays Menacing Cloudin artikkeli aiheesta vähän eri näkökulmasta englanniksi Resoluutio Kuvatekniikka Wikipedian lyhyehkö artikkeli resoluutiosta joka sisältää myös vähän kuvausta pikselitiheydestä List of displays by pixel density Wikipedian kattava lista tämän hetken näytöistä ja niiden pikselitiheyksistä englanniksi Aloittelijat iOS Kehitysympäristö Ulkoasu UX Apuohjelmia iOS designereille July 3 2012 matias Leave a comment Xcode on asennettu mitä nyt Tässä kokoelma apuohjelmia ja muita resursseja jotka helpottavat iOS sovellusten kehitystä ja erityisesti käyttöliittymäsuunnittelua Templaattikokoelmat Omnigraffle on suosikkityökaluni rautalankojen laatimiseen Da5id n kokoelma on paras tietämäni iOS templaatti OmniGrafflelle Tuotantokelpoista jälkeä tarvittaessa Teehan Lax n Photoshop kokoelma on mainio Kannattaa malttaa nähdä sen verran vaivaa että tekee 1x grafiikat sille tarkoitetun tyylipohjan avulla niin kuvat pysyvät mahdollisimman tarkkoina Liveview ilmainen Liveview näyttää iPhone tai iPadin ruudulla valitun alueen tietokoneen työpöydältä Tämä on hyödyllistä jos haluaa tarkistaa miltä grafiikat näyttävät retina näytöllä ja että tekstit ovat varmasti luettavissa Sovelluksen avulla voi toteuttaa myös yksinkertaisen wizard of oz demon operoimalla näkymiä tietokoneelta ja antamalla puhelimen käyttäjän käteen iExplorer ilmainen iOS laitteissa ei ole tiedostojenhallintaa Joskus on kuitenkin hyödyllistä nähdä mitä tiedostoja minnekin kertyy iExplorer on Mac ohjelma jolla pääsee selaamaan puhelimensa tiedostorakennetta xScope 29 99 xScope tarjoaa vastaavan toiminnallisuuden kuin Liveview Lisäksi sen avulla voi mittailla eri elementtien kokoja tietokoneen näytöltä ja lisätä apuviivoja Tuleepa mukana virtuaalinen viivoitinkin Apuviivoista on apua esim Xcodessa jonka omat viivat toimivat vähän kankeasti Ostin sovelluksen aikoinaan alennusmyynistä Täysi hinta on hieman tyyris Jos tarvitset vain viivoitinta katso Free Ruler Se on ilmainen mutta toimii vähän bugisesti uusilla käyttöjärjestelmillä Mittaamisesta puheen ollen itse käytän jatkuvasti kuvakaappausnäppäinkomentoa eri asioiden koon mittaamiseen Painamalla komento shift 4 voi ottaa kuvakaappauksen halutusta näytön alueesta Ominaisuutta voi käyttää myös elementtien kokojen selvittämiseen ja kun painaa esciä ennen kuin päästää hiireen irti säästää maailman turhalta kuvaruutukaappaukselta Hex color picker ilmainen Kuvakaapparin lisäksi Mac OS X ssä on mainio pipettityökalu värien poimimiseen Sen käyttöliittymä on peruja Next ajoilta ja pelkään pahoin että moni ei edes tiedä sen olemassaolosta Suurennuslasia klikkaamalla voi valita haluamansa värin kuin Photoshopin pipetillä Ja mikä parasta tämä toimii myös ohjelmien välillä Kätevää on myös siirtää värejä sovellusten välillä raahaamalla värin valitsimen alalaitaan Mac OS X n värivalitsinta voi tehostaa asentamalla Hex color picker laajennuksen Sen avulla saa näkyviin suoraan värin heksa arvon mikä on hyödyksi myös web suunnittelussa Skitch ilmainen Vakavamielisempään kuvakaappausten ottamiseen kannattaa hankkia Skitch Se on yksi ohjelmista joita ei voi suositella kylliksi Kuvakaappausten ottamisen lisäksi Skitchillä voi tehdä niihin kätevästi merkintöjä tekstiä nuolia vapaita tuherruksia Paras puoli on kuvien jakaminen Jos kuvan raahaa pois Skitchistä siitä luodaan automaattisesti tiedosto kovalevylle ilman että kuvaa joutuisi itse erikseen tallentamaan Jos haluaa vaikkapa lisätä Jiraan kuvakaappauksen löytämästään bugista ei tarvitse ensin tallentaa tiedostoa ennen

    Original URL path: http://mobiilikehitys.fi/2012/07/ (2016-04-30)
    Open archived version from archive

  • June | 2012 | Mobiilikehitys
    VoIP integraatio Internet Explorer 10 Natiivikoodin käyttömahdollisuus DirectX 9 3 ja Direct 3D grafiikkatuki NFC Near Field Communication Lompakko maksaminen Nokian NAVTEQ kartat Sovellusten sisäiset ostokset monia yrityspuolelle tärkeitä lisäyksiä kuten Secure boot bitlocker salaus etähallinta Monet edellämainituista ominaisuuksista eivät ole sinänsä ihmeellisiä ja niiden olisi pitänyt olla jo mukana WP7 versiossa Toisaalta useat uudet ominaisuudet ovat todella mielenkiintoisia Tartutaan muutamaan jäljemmin mainittuun Yhteinen ydin Windows 8 n kanssa Tableteissa kannettavissa ja pöytäkoneissa käytettävä Windows 8 käyttöjärjestelmä perustuu samaan ytimeen kuin Windows Phone 8 käyttöjärjestelmä Tämä yhdistettynä yhteisiin ajureihin ja oheiskomponentteihin kuten grafiikkapiirien DirectX sekä natiivikoodituki pitäisi ainakin teoriassa tuoda huomattavaa apua ohjelmien siirtämiselle alustalta toiselle Näin voidaan odottaa entistä useamman korkean profiilin peli ja hyötyohjelmajulkistuksen sisältävän myös WP version mikä lisää erinomaisesti Windows Phone 8 n menestymismahdollisuuksia VoIP integraatio VoIP Voice over IP tuodaan integroituna toiminnallisuutena Tämä tarkoittaa sitä että puhelut näkyvät täysin samanlaisina puheluina kuin perinteiset puhelut eli VoIP ohjelmaa ei tarvitse erikseen käynnistää toiminnon käyttämiseen Kehittäjät saavat samalla rajapinnat omien Skype n tyylisten sovellusten tekemiseen Nähtäväksi jää miten operaattorit suhtautuvat tähän edistysaskeleeseen Lompakko NFC NFC tuo sinänsä kätevän tavan tiedostojen jakoon laitteiden välillä mutta yhdessä Lompakkotoiminnon ja SIM kortin kanssa maksaminen ottaa harppauksen eteenpäin WP8 ssa tulee olemaan mahdollista sisällyttää puhelimeen Debit luottokortti jäsenyys ja kanta asiakaskortteja alennuskuponkeja yms IT tuki Company hub eli työpaikalle omistettu näkymä puhelimessa yhdessä BitLocker salauksen ja etähallinnan kanssa luo oivat puitteet yrityksille jotka käyttävät Windows työasemia Suurin osa yrityksistä ja ihmisistä maailmassa käyttää Windows käyttöjärjestelmää joten entiset järjestelyt muuntautuvat toimimaan melko kitkattomasti yhdessä Windows Phone puhelimien kanssa Yhteinen tausta käyttöjärjestelmillä tuonee ylläpidettävyyden suhteen helpotusta IT osastoilla Loppukäyttäjätkään eivät pitäne huonona johdonmukaista käyttökokemusta työaseman ja puhelimen välillä sekä mahdollisen Windows kotikoneen kanssa Kuva 2 Yritysvalikko WP8 ssa julkaisu windows phone wp7 8 wp8 tarinoita mobiilikehityksen maailmasta Mobiilikehitys fi Mobiilikehitys fi on Qvik

    Original URL path: http://mobiilikehitys.fi/2012/06/ (2016-04-30)
    Open archived version from archive

  • May | 2012 | Mobiilikehitys
    keskipisteeseen eivätkä esim sen vasempaan yläkulmaan Kuvauksia voi ja pitää yhdistää usean operaation lopputulos mahtuu yhteen samaan kuvausmatriisiin sen ominaisuuksien vuoksi Eri kuvausmatriisit kerrotaan yhteen oikeassa järjestyksessä ja lopputuloksella kuvataan transform v elementti uuteen sijaintiin skaalaan ja tai orientaatioon Esimerkiksi voidaan yhdistää translate scale rotate CGAffineTransform transform CGAffineTransformIdentity transform CGAffineTransformTranslate transform tx ty transform CGAffineTransformScale transform kScaleFactor kScaleFactor transform CGAffineTransformRotate transform kRotationAngle M PI 180 0 view transform transform Kuten aina affiinien kuvausten kanssa on huomioitava operaatioiden järjestys translaatio ensin rotaatio sitten järjestys siirtää kappaletta origosta ja sen jälkeen kiertää sitä kehää pitkin rotaatio ensin translaatio sitten järjestys kiertää kappaletta oman keskipisteensä ympäri ja sen jälkeen siirtää kappaletta uuteen paikkaansa Esimerkkitoteutus Ohessa yksinkertainen single view sovellus joka pyrkii esittelemään yllä läpikäydyn asian joustavuuden ja voiman visualisoimalla ristinollaruudukon ja 5 kpl kumpaakin pelimerkkia O X koskettamalla pelimerkkiä kyseinen merkki tarttuu mukaan ja sille tehdään pieni skaalaus rotaatio ihan vain demonstraation takia Kaikki kappaleen manipulaatio tehdään CGAffineTransformation lla Esimerkkisovelluksen ruutukaappaus Esimerkkisovelluksen lähdekoodi Xcode projektina 42kB ps jos termi affiini kuvaus tuntuu kryptiseltä niin käytännössä sen määritelmä on että kys operaatiossa kuvattava eli transformoitava kappale ei muuta mittasuhteitaan tai muotoaan neliö pysyy neliönä niin sitä siirrettäessä skaalatessa kuin kierrettäessäkin Lisää aiheesta Quartz 2D Programming Guide Wikipedia Affine Transformation tarinoita mobiilikehityksen maailmasta Mobiilikehitys fi Mobiilikehitys fi on Qvik Oy n työntekijöiden ylläpitämä blogi jonka kirjoittajilla on vankka mobiilialan asiantuntijuus Blogissa käsitellään kaikkea mobiilikehitykseen liittyvää ja vähän siitä vierestäkin Seuraa Facebookissa Seuraa Twitterissä Blogin RSS syöte Onko yrityksesi vailla mobiiliosaajia Qvik Oy tekee suuret ja pienet mobiiliprojektit ota yhteyttä niin käynnistetään sinun yrityksesi mobiiliprojekti Recent Posts Sijaintipalvelut iOS applikaatioissa 2 Geokoodaus Sijaintipalvelut iOS applikaatioissa OUYA Android konsoli Windows Phone 8 ja parantunut HTML5 tuki Porttautuva koodi mobiilissa Archives November 2013 August 2013 June 2013 April 2013 February 2013 January 2013 December 2012 October 2012 September

    Original URL path: http://mobiilikehitys.fi/2012/05/ (2016-04-30)
    Open archived version from archive

  • March | 2012 | Mobiilikehitys
    min device width 321 and max device width 999 Tällä tavalla määritellyt tyylitiedostot näkyvät esimerkiksi iPhonen vaakatilassa ja iPadin pystytilassa Alla kuvankaappaus Qvikin kotisivuilla Laatikot on asetettu 2 2 gridiin jolloin ne ovat luettavia Koska laatikoiden tarkoitus on tässä tapauksessa pysyä tasalevyisenä niin ne eivät vie enää koko ruutua tilaa On kuitenkin täysin mahdollista tehdä niin että kaksi laatikkoa veisivät aina sen 50 ikkunan leveydestä Tällöin niiden leveys määritellään CSS ssä prosenttilukuna sen containerista Qvikin sivut on tehty myös näyttämään käytännölliseltä myös mobiililaitteella eli 320px tai kapeammilla näytöillä Lisätietoa media queryjen käytöstä löytyy englanniksi W3C n sivuilta CSS media queries iOS OpenGL ES 2 0 Reaaliaikaista kuvankäsittelyä OpenGL ES 2 0 lla March 12 2012 matti Leave a comment Näytönohjaimen GPU shader prosessorit tarjoavat hyvän mahdollisuuden tehdä tehokasta ja toteutuksesta riippuen rinnakkaista laskentaa CPUn ohella Nykyisten mobiililaitteidenkin shaderit ovat huomattavan tehokkaita niiden on kyettävä pyörittämään 3D pelejä 30fps jotta käyttökokemus ei kärsi ja tämä puolestaan tarkoittaa hurjaa määrää laskutoimituksia sekunnissa Kuten edeltävässä postauksessani mainitsin signaalinkäsittely on yksi luonnollinen sovelluskohde Tässä postauksessa katsotaan hieman miten valjastaa GPU reaaliaikaisen kuvankäsittelyn käyttöön ja toteutetaan geneerinen konvoluutiomatriisi shaderilla Toteutus on iPhone spesifinen mutta helposti portattavissa muille alustoille Esimerkkiämme varten kuvadata haetaan laitteen kameralta aina kun saadaan uusi kuva se uploadataan OpenGL lle tekstuuriksi Tämä tekstuuri sitten renderöidään konvoluutioshaderin läpi toiseen tekstuuriin Tämän uuden tekstuurin data luetaan ulos OpenGL ltä ja käytetään esimerkin vuoksi vain näytetään ruudulla Pelkästään tähän käyttöön tuloksen kierrättäminen tekstuurin UIImage kautta on tietysti kamalan tehotonta kun se voitaisiin suoraan piirtää näyttömuistiin Tämänkaltainen toteutus kuitenkin mahdollistaisi monenlaista käsittelyä tulosdatalle Lisäksi koodiesimerkki näyttää kuinka OpenGL ES 2 0 lla renderöidään tekstuuriin Katso prosessin kuvaava tilakaavio alla Konvoluutiofiltterit Konvoluutio ja kuvankäsittelyyn käytetyt matriisit kernel ovat tämän artikkelin laajuuden ulkopuolista asiaa katso linkit postauksen lopussa mutta esittelen toimintaperiaatteen nopeasti niin shaderin koodi aukeaa ehkä paremmin Käytän tässä 3 3 kerneleitä suorituskyvyn ja koodin selkeyden vuoksi 5 5 kernelillä saadaan aikaan huomattavasti parempia tuloksia Otetaan käsittelyyn helppotajuisin käytetyistä kerneleista blur kerneli 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 Tehdessä muunnosta tälläisellä matriisilla jokainen kuvan pikseli käsitellään asettamalla matriisin keskimmäinen alkio sen kohdalle jolloin matriisin muut alkiot asettuvat ympäröivien pikselien kohdalle sitten keskipikselille lasketaan uusi arvo kertomalla jokainen pikseli arvolla joka matriisissa on sen kohdalla ja laskemalla näiden kertolaskujen tulokset yhteen Blur matriisin tapauksessa pikseli ja kaikki sen naapurit kerrotaan 1 9 llä jolloin pikselin arvoksi tulee 9 pikselin keskiarvo Konvoluutiokerneleillä voi toteuttaa vaikkapa viivantunnistusta blurreja ja sharpenointia Esimerkkitoteutus Toteutus sisältää geneerisen convolution kernel shaderin Convolution fsh ja neljä eri kerneliä emboss blur gradient sharpen Käytettyä kerneliä voi vaihtaa lennosta täppäämällä ruutua Sovellus syöttää kuvia iPhonen pääkameralta GLSLn läpi ja piirtää tuloksen ruudulle Ohessa muutama screenshot Macbook Pro piirrettynä Embossinging filterin läpi Macbook Pro piirrettynä Sharpening filterin läpi Siinäpä tämänkertainen anti ensi episodissa sitten taas jotain aivan muuta Lisää luettavaa Wikipedia Convolution Sample Convolution Kernels for Image Processing Image Filtering With GLSL Esimerkkitoteutuksen koodi 36kB convolution GLSL kernel Kuvankäsittely matrix OpenGL ES 2 0 reaaliaikainen Shader Aloittelijat HTML5 Mobiilisovellus web tekniikoilla perusteet March 9 2012 anton Leave a comment Perinteisillä web tekniikoilla on nykyään mahdollista tehdä natiivisovelluksen kaltaisia puhelimen tai tabletin näytöllä paremmin käytettäviä sovelluksia Tällöin sovellus on käytettävissä puhelimen web selaimella tai se voidaan paketoida natiiviapplikaatioksi esimerkiksi PhoneGap kirjaston avulla Web applikaation ero mobiilioptimoituun web sivustoon on natiiviapplikaation kaltaiset komponentit mahdollinen offline tila sekä animoidut siirtymät näkymien välilä Lisäksi web applikaatio voi sisältää puhelimen natiiviominaisuuksia hyödyntäviä toimintoja kuten esimerkiksi kameraa tai kiihtyvyysanturia Tässä artikkelissä kuvataan mobiiliapplikaation kehityksen perusteet olettaen että lukija on tutustunut web kehityksen saloihin etukäteen Jos et ole ennen tehnyt web sivustoja niin Google on listannut oivia web tutoriaaleja joilla pääsee helposti alkuun Suomenkielistä sisältöä kaipaaville sisältöä on vähän hankalammin löydettävissä mutta esimerkiksi Haaga Helian verkkojulkaisusivuilta löytyy aiheesta kohtuullisesti suomenkielistä sisältöä Mobiiliapplikaation luonti Esimerkiksi iOS ja Android ympäristöt tarjoavat mahdollisuuden lisätä web applikaation työpöydälle Tällöin iOS llä web applikaatio näkyy ohjelmanvaihtonäkymässä ja sillä on ikoni ja ns splashscreen natiivisovelluksen tapaan Alla on esimerkkipohja puhtaalle mobiiliapplikaatiolle DOCTYPE html html head title Testiohjelma title meta name viewport content width device width initial scale 1 maximum scale 1 user scalable no meta name apple mobile web app capable content yes meta name apple mobile web app status bar style content black link rel apple touch startup image href images startup png link rel apple touch icon href phone icon png link rel apple touch icon sizes 72x72 href pad icon png link rel apple touch icon sizes 114x114 href phone icon retina png link rel apple touch icon sizes 144x144 href pad icon retina png head body Tekstiä body html Web applikaation asetukset laitetaan head tagien sisälle Tämä esimerkki määrittää web applikaatiota seuraavasti meta name viewport content määrittää sovelluksen näkyvän alueen asetukset sivu on aina laitteen näkymän levyinen sekä pysty että vaakasuunnassa käytetty Tyypillisellä web sivustolla on zoomausominaisuus joka kuitenkin on monesti mobiiliapplikaatiossa epätoivottu ominaisuus Tässä esimerkissä tämä toiminnallisuus on disabloitu määrittämällä viewportille user scalable no Lisää viewport metatagin käytöstä löytyy esimerkiksi Mozilla developer networkin dokumentaatiosta englanniksi meta name apple mobile web app capable ja meta name apple mobile web app status bar style ovat Applen iPhonessa ja iPadeissa toimivat meta tägit Näistä ensimmäinen aktivoi applikaatiomaisen käytön jolloin ohjelmaa käytettäessä Safari piilottaa sen osoitepalkin Lisäksi kun ohjelma lisätään kotinäytölle ja avataan klikkaamalla ko lisättyä applikaatioikonia ohjelma avataan kokoruutunäkymään ilman ylä ja alapalkkia link rel apple touch icon määrittää ohjelman ikonin kun sen lisää työpöydälle Nimestään huolimatta se toimii myös Android laitteilla versiosta 2 1 eteenpäin Esimerkissä on lisätty ikoni useammalle eri koolle esimerkiksi 114 114 on ikoni iPhonen retina näytölle jossa ikonin standardikoko on juuri 114 x114 Uuden retina iPadin kuvakkeen koko on oletettavasti 144 144 mutta tätä tietoa ei ole vielä vahvistettu Lisätietoa ikoneiden määrittämisestä ja muista Mobile Safarin web applikaatioiden asetuksista löytyy Applen Safari Web Content Guidesta Mobiiliohjelman kehitys Mobiilisovelluksen käyttöliittymät ohjelmoidaan käyttäen HTML CSS ja JavaScript tekniikoita HTML on kuvauskieli joka jäsentää sisällön ja CSS luo sisällölle tyylit JavaScriptillä tuodaan sisältöön elämää esimerkiksi animaatiota tai transitioita On teoriassa mahdollista kehittää mobiiliohjelmistoja puhtaasti käyttämällä

    Original URL path: http://mobiilikehitys.fi/2012/03/ (2016-04-30)
    Open archived version from archive

  • February | 2012 | Mobiilikehitys
    varsin todennäköistä että push ilmoituspalvelut lisääntyvät sovelluksissa Tiedonvälitystapa tarjoaa yrityksille loistavan tavan erottautua toisistaan Se antaa mahdollisuuden vaikkapa edulliseen täsmämarkkinointiin pienille kohderyhmille laajaan joukkoviestintään tai vaikkapa erittäin lyhyen aikaa voimassa oleviin erikoistarjouksiin Aloittelijat Alustat iOS Tutoriaalit Manuaalinen muistinhallinta for dummies iOS alustalla osa 2 February 13 2012 jussi Leave a comment Edellisessä osassa esiteltiin tapa yksinkertaistaa muistinhallintaa tekemällä luokkamuuttujista propertyja Tällä kertaa syvennytään hieman siihen miten ja milloin Objective C kutsuu retain ja release metodeja objekteille Lopuksi vielä muutama huomautus objektien säilömisestä kokoelmien sisällä Alla olevassa EsimerkkiYksi h tiedostossa on esitelty muuttuja minunTeksti josta on tehty property Objective C luo propertyille automaagisesti mutator metodit eli metodit joilla muuttujan sisältöä voidaan helposti manipuloida EsimerkkiYksi h interface EsimerkkiYksi NSObject NSString minunTeksti property nonatomic retain NSString minunTeksti void esimerkkiMetodi end Alla olevassa Esimerkki m tiedostossa on havainnollistettu miten minunTeksti objektia voidaan käsitellä gettereilla ja settereilla EsimerkkiYksi m implementation EsimerkkiYksi synthesize minunTeksti void esimerkkiMetodi Asettaa minunTeksti muuttujaan tekstin Mun teksti self minunTeksti NSString stringWithString Mun teksti Tekee saman asian eri syntaksilla self setMinunTeksti NSString stringWithString Mun teksti NSLog Teksti minunTeksti NSString toinenTeksti Asettaa toinenTeksti muuttujan viittaamaan minunTeksti muuttujaan toinenTeksti self minunTeksti NSLog Toinen teksti toinenTeksti Sama asia eri syntaksilla toinenTeksti self minunTeksti NSLog Toinen teksti toinenTeksti end Ohjelmoija voi myös korvata muuttujiensa mutator metodit haluamillaan Yläpuolella olevaan EsimerkkiYksi luokan tapauksessa metodit voisi kirjoittaa auki seuraavanlaisesti NSString minunTeksti return minunTeksti void setMinunTeksti NSString uusiTeksti Nostaa uusiTeksti muuttujan retainCounttia yhdellä Ottaa vastuun objektista uusiTeksti retain Vapauttaa minunTeksti muuttujan minunTeksti release Asettaa minunTeksti muuttujan minunTeksti uusiTeksti Jos kyseiset metodit sisällytetään luokkaan niitä kutsutaan aina kun minunTeksti muuttujaa pyydetään tai asetetaan self notaation kautta Mahdollisia ongelmatilanteita syntyy jos setterin sisällä kutsutaan retain ja release metodeja väärissä järjestyksissä Toinen asia mikä pitää muistaa luodessa omia mutator metodeja on se ettei niiden sisällä pidä koskaan käyttää self notaatiota Alla esimerkki tilanteesta jossa ohjelma menee loputtomaan looppiin koska ohjelmoija käyttää getter metodin sisällä self notaatiota Jos olet epävarma on parasta olla muokkaamatta propertyille luotuja mutator metodeja EI NÄIN NSString minunTeksti return self minunTeksti Tapauksissa joissa objekteja säilötään esimerkiksi NSArray tai NSDictionary kokoelmien sisällä on huomioitavaa että sisään syötettäville objekteille kutsutaan automaattisesti retain metodia Muistivuotojen välttämiseksi kokoelmiin tulee syöttää vain autoreleasettuja objekteja ellei objektin oleteta säilyvän kokoelman tuhoutumisen jälkeen Alla esimerkki kokoelmien käytöstä void populoiArray EI NÄIN NSString testi NSString alloc initWithString Testi teksti self testiArray NSArray arrayWithObject testi testi muuttuja ei ole autoreleasettu Muistivuoto syntyy kun testArray tuhotaan void populoiToinenArray NÄIN NSString testi NSString stringWithString Testi teksti self testiArray NSArray arrayWithObject testi testi muuttuja on autoreleasettu testiArray ottaa sen haltuun ja vapauttaa sen kun testArray tuhotaan iOS iPhone memory management muistinhallinta iOS Navigaatio Ulkoasu UX Mitä voimme oppia Facebook sovelluksen kotinäkymän kehityksestä February 3 2012 matias Leave a comment Applen tarjoama standardiratkaisu iPhone sovelluksen osiosta toiseen liikkumiseen on enimmillään viisipaikkainen tab bar Jos on tarvetta useammalle osiolle viimeiseksi valinnaksi voidaan laittaa kolme pistettä ja sijoittaa tämän taakse listamuodossa lisäkohteita Apple tulee omissa sovelluksissaan toimeen tällä ratkaisulla mutta usein on tarvetta toteuttaa navigaatio jotenkin muuten Tärkeitä kohteita saattaa olla enemmän kuin viisi

    Original URL path: http://mobiilikehitys.fi/2012/02/ (2016-04-30)
    Open archived version from archive