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".
  • OpenGL ES 2.0 | Mobiilikehitys
    vaatimia tekstuureita levyltä tai halutaan lähettää tulokset serverille Jollekulle on saattanut tätä lukiessa tulla mieleen että mitenkäs se Windows Phone sitten WP8 pois jättämiseen kohdealustojen joukosta on oikeastaan vain yksi syy OpenGL APIn puute Vaikka ymmärtääkseni WP8 hardis on OpenGL ES 2 0 yhteensopivaa Microsoft ei tapansa mukaan tarjoa standardia rajapintaa vaan pakottaa kehittäjät porttaamaan koodinsa Direct3D lle Ja koska softani tärkeimpiä ominaisuuksia on olla suoraan vertailukelpoinen ympäristöjen välillä ei tuo oikein ollut optio Jos Googlen ANGLE projektista tulee ikina luotettava port WP lle tai jostain taivaasta putoaa OpenGL ajuri teen ilomielin myös WP buildin Tämän vuoden aikana on tarkoitus suoltaa ulos buildit ainakin Blackberry10 lle Sailfish OS lle sekä Ubuntu Phonelle riippuen siitä saadaanko moisia laitteita käsiimme Hyvää kevättä kaikille Linkkejä MMark13 website MMark13 for iOS Apple AppStore MMark13 for Android Google Play 3DMark Android Edition Lisää luettavaa Bringing Portability to the Software Process Reusability and Portability Writing portable code C esimerkki OpenGL ES 2 0 Uutiset OpenGL ES 3 0 tulee oletko valmis October 12 2012 matti Leave a comment Aivan lyhykäisyydessään viimeaikojen uutisvirrasta poimittuna Khronos Group on hiljattain julkaissut OpenGL ES 3 0 standardin speksin ARM satsaa kovasti raudallaan sekä softatyökaluillaan mobiiligrafiikkaan ja toivon mukaan ensimmäiset laitteet nähdään jo pian Poimintoja tärkeimmistä uusista ominaisuuksista Alustariippumaton tekstuurien pakkaus on nyt osa standardia Erittäin suuri helpotus cross platform softan tekijöille Geometry instancing monta kopiota samasta geometriasta helppo esimerkki metsän puut voidaan nyt piirtää säästäen väylän kaistaa kun geometria tarvitsee lähettää vain kerran Occlusion queries rautatuki artefaktien näkyvyyden selvittämiseen Nopeuttaa ja suoraviivaistaa dramaattisesti vaikkapa lens flarejen yms efektien toteuttamista Floating point depth jne tekstuurit pakolliseksi osaksi speksiä Ja mikä parasta 3 0 speksi on 100 taaksepäin yhteensopiva 2 0 kanssa Lähteet OpenGL ES 3 0 specification OpenGL ES 3 0 GLSL specification AnandTech Whats New in OpenGL ES 3 0 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 iOS OpenGL ES 2 0 OpenGL ES 2 0 kehityksen aloittaminen January 19 2012 matti 4 Comments OpenGL ES 2 0 on ollut speksinä olemassa vuodesta 2007 ja tarjolla laitteissakin jo tovin 3D grafiikkaan nojaavia mobiileja menestystarinoita ei ihan Angry Birds mittakaavassa ole näkynyt mutta laitteiden alati parantuessa ja käyttökokemusten karttuessa 3D renderöinti saattaa hyvinkin nousta keskeisempään rooliin mobiilimaailmassakin Eivätkä ohjelmoitavan OpenGL ES 2 0 shader pipelinen mahdollisuudet grafiikan piirtämiseen lopu Tässä artikkelissa käydään läpi muutama asia jotka on tiedostettava ja ehkä jopa osattava aloittaessaan OpenGL ES 2 0 kehitystä Varsinaisena kohdeyleisönä ovat ne joilla on edes jonkinlainen käsitys 3D grafiikan periaatteista ja ovat tehneet joitain asioita vanhanmallisella fixed pipeline OpenGL llä kuten OpenGL ES 1 1 tai desktop maailman OpenGL 1 x mutta tarjonnee teksti hieman lohtua aivan vasta alkajallekin Ensin käydään läpi uudet asiat jotka tulevat vastaan kun siirrytään fixed function renderöinnistä programmable pipelinen maailmaan ja lopuksi rakennetaan yksinkertainen 3D softa iOS lle käyttäen Xcoden OpenGL ES wizardia Matriisit 3D grafiikan kulmakivi kuvausmatriisit olivat sisäänrakennettuina vanhassa OpenGL ssä glPushMatrix glPopMatrix glRotate jne myötä Programmable pipelinessä matriisipinoa ei ole tarjolla ja matriisioperaatiot on toteutettava itse Käytännössä kaikki alustat tarjoavat omat matriisikirjastonsa tähän QMatrix4x4 Qt ssä android opengl Matrix Androidille sekä iOS 5 0 alkaen GLKMatrix4 iPhonelle tarkoitukseen Jos affiinit kuvaukset eivät ole tuttuja aika oppia ne on nyt Kuvausmatriisien hallinta on käytännössä ehdoton vaatimus modernin OpenGL n taitamiselle Shaderit Matriisien ohella shaderit ovat suurin muutos Fixed pipeline hoiti käyttäjän puolesta geometrian transformoinnin ja pikselien piirtämisen programmable pipelinessä kaikki tehdään itse Tämä mahdollistaa valtavan paljon enemmän kontrollia siihen mitä ollaan tekemässä vanha OpenGL käytännössä vaan konfiguroitiin uploadattiin geometria ja tekstuurit asetettiin valot ja transformaatiot ja sen jälkeen OpenGL hoiti loput lopputulokseen ei voinut vaikuttaa kauheasti Kaikki tämä on nyt toisin ja ainakin ne joilla on softwarerenderöintitaustaa iloinnevat tästä Shaderin kirjoittajalla

    Original URL path: http://mobiilikehitys.fi/category/opengl-es-2-0/ (2016-04-30)
    Open archived version from archive

  • Sovelluskehitys | Mobiilikehitys
    timerit jatkavat eloaan ja autorelease pool on jaettu aktivaatioiden välillä Esimerkkiprojekti Xcode 4 5 projektina 40kB zip Android iOS Sovelluskehitys Lua mobiilisoftassa August 21 2012 pertti Leave a comment Käyttämällä skriptikieliä mobiiliohjelmoinnissa voidaan mm edistää koodin jakamista eri alustojen kesken Varsinkin peliohjelmoinnissa skriptien käyttäminen on suosittua Pelilogiikkaa on helposti paljon ja sen kaiken kirjoittaminen erikseen eri ohjelmointikielillä eri alustoille olisi aikaavievää ja virhealtista Eräs varsin suosittu skriptikieli on Lua Lua on suhteellisen helppo yhdistää toiseen projektiin ja siihen on helppo luoda applikaatiospesifisiä laajennuksia Lua on lähtökohtaisestikin suuniteltu laajennuskieleksi ja verrattuna esim Pythoniin Lua on hyvin kevyt Tässä artikkelissa opastetaan miten Luaa voi käyttää iOS ja Android projekteissa Vaihe 0 Luan lähdekoodi Hae Luan lähdekoodi http www lua org ftp Huomaa että Lua on muuttunut jonkin verran versioiden välillä Tämä ohje on kirjoitettu versiolle 5 2 1 Jotkin aiemmalle versiolle kirjoitetut Lua ohjelmat eivät välttämättä toimi suoraan uusimmalla versiolla Näitä ohjeita voi soveltaa myös muihin versioihin mutta ne eivät välttämättä toimi sellaisenaan iOS Vaihe 1 Lua kirjasto Luo uusi kirjastoprojekti Tässä esimerkissä olen antanut projektille nimeksi Lua521 Luan versionumeron mukaan Poista projektiin automaattisesti luodut ProjektinNimi m ja h tiedostot Lisää projektiin Luan lähdekoodipaketista src hakemiston sisältö lukuunottamatta tiedostoja lua c luac c ja Makefile Mene projektin Build Phases ikkunaan ja lisää Copy Headers vaihe Lisää Copy Headers vaiheeseen projektin tiedostot lauxlib h lua h lua hpp luaconf h ja lualib h ja siirrä ne Public osaan Lua kirjasto on nyt valmis käytettäväksi Vaihe 2 Lua kirjaston käyttäminen toisessa projektissa Esimerkkinä käytän kokonaan uutta projektia mutta Luan lisääminen olemassaolevaan projektiin tapahtuu samoin Lisää projektiin viittaus Lua kirjastoprojektiin Tämä tapahtuu kuten minkä tahansa muunkin olemassaolevan tiedoston lisääminen Tässä tapauksessa lisättävä tiedosto on kirjastoprojektin xcodeproj projektitiedosto Aseta projektin targetti riippuvaiseksi Lua kirjaston targetista Lisää Lua kirjasto linkitettäviin kirjastoihin Lisää Header Search Pathsiin polku BUILT PRODUCTS DIR usr local include Nyt projektissa voidaan käyttää Luaa Android Vaihe 1 Lua kirjasto Lua on kirjoitettu C kielellä joten Androidissa tarvitsemme NDK ta sen kääntämiseen Kätevintä on luoda siitä NDK moduli Android NDK n ja NDK modulien käytön opastaminen tässä olisi hieman liian työlästä ja NDK ssa on varsin hyvät dokumentaatiot ja esimerkit Mainittakoon joka tapauksessa että jos et ole aiemmin käyttänyt ja tai luonut NDK moduleita helpointa on luoda yksi hakemisto jonka alle sijoitat kaikki NDK modulit Tämän hakemiston polku pitää olla NDK MODULE PATH ympäristömuuttujassa Luo uusi hakemisto NDK modulihakemiston alle tämän hakemiston nimi on luotavan modulin nimi Kopioi tähän hakemistoon Lua lähdekoodipaketin src hakemiston sisältö lukuunottamatta tiedostoja lua c luac c ja Makefile Luo tähän hakemistoon seuraavansisältöinen Android mk tiedosto LOCAL PATH call my dir include CLEAR VARS LOCAL MODULE liblua521 LOCAL CFLAGS D getlocaledecpoint LOCAL SRC FILES lapi c lauxlib c lbaselib c lbitlib c lcode c lcorolib c lctype c ldblib c ldebug c ldo c ldump c lfunc c lgc c linit c liolib c llex c lmathlib c lmem c loadlib c lobject c lopcodes c loslib c lparser c lstate c lstring c lstrlib c ltable c ltablib c ltm c lundump c lvm c lzio c LOCAL EXPORT C INCLUDES LOCAL PATH include BUILD STATIC LIBRARY Android mk tiedoston rivi LOCAL MODULE liblua521 määrää luotavan kirjaston nimen sen voi muokata haluamakseen Lua kirjastomoduli on valmis käytettäväksi Vaihe 2 Lua kirjaston käyttäminen toisessa projektissa Koska itse Lua kirjasto on NDK moduli pitää sitä myös käyttää NDK lla käännettävän koodin kautta Ohjeita NDK n käyttöön saa muualta Lua kirjastomodulia käytetään kuten mitä tahansa NDK modulia Projektin Android mk tiedostoon lisätään tieto linkitettävästä kirjastosta ja tiedoston lopussa kutsutaan import module makroa Esimerkkiprojektini Android mk tiedosto näyttää seuraavanlaiselta LOCAL PATH call my dir include CLEAR VARS LOCAL MODULE luatest LOCAL CFLAGS std c99 Wall Werror LOCAL SRC FILES luatest c LOCAL STATIC LIBRARIES lua521 LOCAL LDLIBS llog include BUILD SHARED LIBRARY call import module lua521 Kiinnostavat rivit ovat siis LOCAL STATIC LIBRARIES lua521 jossa linkitetään Lua modulin luoma liblua521 kirjasto sekä call import module lua521 jolla sisällytetään projektiin lua521 niminen Lua moduli Vaihe 3 Lua koodin ajaminen Jokaiselle sopivia tyhjentäviä ohjeita on hankala kirjoittaa joten valaisen asiaa muutamalla yksinkertaisella esimerkillä Näitä esimerkkejä soveltamalla päässee yllättävän pitkälle Kaikki esimerkkikoodi on C tä ei Objective tai koodiesimerkkien yhdistäminen muuhun koodiin oli kyse sitten Android tai iOS koodista jätetään harjoitustehtäväksi Yksinkertaisen skriptin ajaminen Lua kirjaston funktiot on esitelty kolmessa h tiedostossa lua h lualib h sekä lauxlib h Koodiesimerkit on kirjoitettu olettaen että kaikki kolme otsikkotiedostoa on sisällytetty lähdekooditiedostoon Huom Nämä ovat nimeomaan C headereita jos Luaa käytetään C koodissa sisällytettävä tiedosto on lua hpp ei muita Seuraava koodinpätkä ajaa lyhyen Lua skriptin 1 2 3 4 5 6 7 8 9 10 11 12 static void luaExample lua State lua luaL newstate luaL openlibs lua const char script print Printing from Lua n luaL loadstring lua script int err lua pcall lua 0 0 0 if err LUA OK const char errMsg lua tostring lua 1 printf Error while calling Lua function s errMsg lua close lua Rivillä 2 luodaan uusi lua State olio Tämä olio on käytännössä kokonainen Lua tulkki Tapauksesta riippuen appissa voisi olla yksi lua State koko sen elinkaaren ajan tai siinä voidaan vaikka luoda ja tuhota lua State ja tarpeen mukaan Kutsun palauttama olio on periaatteessa käytettävissä suoraan mutta käytännössä aina pitää tehdä myös rivillä 3 oleva kutsu joka lataa Lua tulkkiin Luan standardikirjastot Rivillä 5 ladataan merkkijonosta Lua funktio Tässä kohtaa lienee parasta paneutua hieman Lua tulkin C APIin Lua tulkilla on oma operandipino Suurin osa C API kutsuista käsittelee tätä pinoa Esimerkiksi Lua funktion kutsuminen tapahtuu siten että pinoon työnnetään ensiksi kutsuttava funktio ja sitten funktion kaikki argumentit ensimmäisestä aloittaen Tämän jälkeen kutsutaan lua call tai lua pcall funktiota Tämä kutsu poistaa funktion ja argumentit pinosta kutsuu funktiota ja funktion palattua työntää funktion mahdolliset paluuarvot pinoon ensimmäisestä aloittaen Kun uusi Lua tulkki luodaan pino on tyhjä Kutsu luaL loadstring funktioon lukee annetusta merkkijonosta Lua funktion ja työntää sen pinon päällimäiseksi Tämän kutsun jälkeen siis pinon päällimmäinen ja ainoa olio on tuo Lua funktio tai virheilmoitus jos funktion lataaminen epäonnistui Rivillä 6 kutsutaan edellisellä rivillä ladattua funktiota Käytettävä C funktio on lua pcall Ero lua call ja lua pcall funktioiden välillä on että lua pcall p protected palauttaa virhekoodin jos kutsu epäonnistuu Funktio lua call sen sijaan käyttää Lua tulkin virheenhallintajärjestelmää joka lähtökohtaisesti tulostaa virheilmoituksen ja kaataa koko appin Kannattaa siis 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 suoritetaan kutsu Argumenttien määrä on 2 ja haluamme enintään 2 paluuarvoa Kutsun onnistuttua lukemme riveillä 20 ja 21 paluuarvot pinon pohjalta funktio ja argumentit ovat poistuneet pinosta C funktioiden kutsuminen Lua koodista Esimerkki C funktion kutsumisesta 1 2 3 4 static int myCFunction lua State lua int numArgs lua gettop lua printf myCFunction called with d args n numArgs for int i 1 i Ajettaessa tämä tulostaa seuraavaa myCFunction called with 2 args arg 1 5 arg 2 bacon myCFuntion returned 3 141592 and second retvalue Lua koodista kutsuttava C funktio on muuten samankaltainen kuin mikä tahansa C funktio mutta se saa argumenttinsa ja palauttaa arvonsa Lua pinon kautta Kaikkien Luasta kutsuttavien funktioiden on otettava yksi argumentti tyypiltään lua State ja palautettava int Kun funktiota kutsutaan annetussa lua State ssa on pinossa funktion saamat argumentit ensimmäinen pinon pohjimmaisena jne eikä mitään muuta Argumenttien määrä saadaan tietää pinon korkeudesta Argumenttien tyypit voidaan myös selvittää Funktio palauttaa arvoja siten että kaikki paluuarvot työnnetään pinoon ensimmäisestä aloittaen ja funktion varsinainen paluuarvo C mielessä kertoo Lua paluuarvojen määrän Pinoa ei tarvitse erikseen puhdistaa ennen palaamista Rivillä 2 selvitetään argumenttien määrä Riveillä 4 6 oleva silmukka tulostaa kaikki funktion saamat argumentit muutettuaan ne ensin merkkijonomuotoon Funktio palauttaa kolme arvoa ne työnnetään järjestyksessä pinoon riveillä 8 10 Rivillä 11 palautetaan paluuarvojen määärä Riveillä 18 21 on taulukko jonka avulla C funktio liitetään Luaan Taulukossa on tietueita joissa ensimmäinen arvo on funktion nimi Luassa ja toinen arvo on pointteri varsinaiseen funktioon Viimeisenä on on tietue jossa molemmat arvot ovat NULL Tässä liitetään vain yksi funktio mutta samalla voisi liittää useammankin funktion Rivi 23 lukee em taulukon ja luo Lua taulukon jossa on annetuilla nimillä viittaukset annettuihin C funktioihin Tässä tapauksessa siis Lua taulukko jossa on arvolla myCFunction viittaus rivin 1 funktioon Rivillä 24 tämä taulukko annetaan globaalin muuttujan myCFunctions arvoksi Lua koodissa rivillä 27 kutsutaan myCFunctions taulukon myCFunction jäsentä ts edellä määriteltyä C funktiota Funktiokutsu tehdään kuten muutkin Lua funktiokutsut Tässä funktiolle annetaan 2 argumenttia Funktion 2 ensimmäistä paluuarvoa asetetaan paikallisten muuttujien a ja b arvoiksi Kuten tulosteesta huomataan funktion kolmas paluuarvo jää huomiotta Voit kokeilla panna breakpointin myCFunction funktioon Ohjelman pysähtyessä ko breakpointiin voit tarkastella kutsupinoa ja huomata että kutsu on tullut Lua tulkin sisältä Aloittelijat Ulkoasu Windows Phone Windows Phone sovelluskehitys Androidin ja iPhonen rinnalla August 2 2012 tony Leave a comment Windows Phonen astuminen iOS n ja Androidin rinnalle on saanut aikaan hieman hämmennystä joidenkin loppukäyttäjien ja sovellusten tilaajienkin mielissä Siinä missä iOS iPhone iPad Android ja jopa poistuva Symbian muistuttavat toisiaan yleisasultaan kukin tietenkin erottautuen omilla pienillä eroavaisuuksillaan Windows Phone on tietoisesti suuntautunut erilleen muista omalla Metro suunnittelukielellään Ohje maassa maan tavalla Suunnitellessa uutta sovellusta mille tahansa alustalle yleispätevänä ohjenuorana voitaneen antaa Kunkin tyyppisen mobiililaitteen käyttäjä haluaa systemaattisen käyttäjäkokemuksen ja käyttöjärjestelmälle tunnusomaisen sekä varsin yhdenmukaisen ulkoasun sovelluksille Sovelluksen käyttöönotto on tällöin mahdollisimman luontevaa eikä vaadi syvällistä perehdytystä Tämä halu kumpuaa usein niin käyttäjien puolelta kuin myös käyttöjärjestelmien toimittajilta Jotkut palvelujen kehittävät mieltävät ajattelevansa käyttäjän parasta pyrkimällä mahdollisimman yhdenmukaiseen käyttöliittymään laitteen käyttöjärjestelmästä riippumatta mutta päätyvät tekemään käyttäjälle karhunpalveluksen On poikkeustilanne että ihmiset käyttävät samaa sovellusta eri käyttöjärjestelmillä mutta varmaa että he käyttävät sitä muiden saman käyttöjärjestelmän sovellusten lomassa Suunniteltaessa sovellusta usealle alustalle täysin samaa konseptia ei siis voi aina käyttää Vaikka iPhone ja Android sovellukset voivat muistuttaa toisiaan hämmentävän paljon niillä on eronsa WP llä erot ovat muihin alustoihin verrattuna huomattavat Esimerkki Alla käytännön vertailuesimerkki IMDB sovelluksesta Applen iPhonelle ja Windows Phonelle Kuva 1 iPhone versio IMDB n sovelluksesta Kuva 2 WP versio IMDB sovelluksesta Edellä esitetyt kuvat osoittavat selvästi että iPhonen käyttäjät eivät pitäisi WP n tyylisestä sovelluksesta puhelimessaan mikäli se edes pääsisi Applen App Storeen eivätkä vastaavasti Windows Phone käyttäjät halua iPhone Android tyylistä sovellusta laitteilleen Toisilleen vieraat esitystavat vaativat sovelluksen arkkitehdilta jo konseptin varhaisessa vaiheessa ydinidean hahmottamiskykyä ja näkemystä mitä kukin loppukäyttäjä haluaa siltä Microsoftin sivuilta löytyy englanniksi esimerkkejä erilaisista sovellustyypeistä Windows Phonella Päätelmä Metro tyyliohjeita noudattavat Windows Phone sovellukset ovat niin toimintalogiikaltaan kuin ulkoasultaan selvästi erilaisia kuin iOS Android taustaiset sovellukset vaikka tarjottava toiminnallisuus olisi sama Windows Phonen tarjoaman visuaalisesti rikkaan Panorama näkymän avulla yritysten brändäys ja yleensäkin halutut teemat sovelluksissa voidaan saada muita alustoja vahvemmin esille kuva 2 Tämä toki vaatii ylimääräisen graafisen aineiston luomista Vaikka Windows Phonella vältetään käyttöliittymäelementtien ylimääräisiä koristeita kuten liukuvärejä tekstuureita varjostuksia ja kiiltoefektejä sisältö pyritään vastaavasti tuomaan esiin niin että lopputulos voi hyvin olla kauniimpi kuin muilla alustoilla Android iOS iPhone ohjelmistokehitys sovelluskehitys WP7 wp8 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 kuvan lataamista selaimeen ja sitten etsiä uudelleen avaa dialogissa vaan riittää että raahaa sen selaimeen suoraan Skitchistä Kuvien lataaminen kaikkien nähtäville skitch comiin käy sekin yhdellä klikkauksella Screenshot Journal 1 59 Tietokoneen lisäksi kuvakaappauksia tulee helposti ottaneeksi valtavat määrät puhelimelta Valitettavasti Apple on katsonut viisaaksi näyttää kuvakaappaukset samassa läjässä puhelimella otettujen valokuvien kanssa Apuun tulee Screenshot Journal joka poimii kuvakaappaukset erilleen kuvavirrasta ja tarjoaa keinoja kuvien hallintaan Jos tykkää nahkaefekteistä ja tikkauksista sovellukseen kannattaa tutustua jo niiden vuoksi Ovat keskimääräistä hienommat Kuvansiirtäjä Mac OS X n mukana tuleva kuvansiirtäjä ei ole tainnut saada ainuttakaan päivitystä sitten ensimmäisen Mac OS X version ja käyttöliittymä on muutamilta osin rasittava Jos puhelimelta haluaa noutaa kuvakaappauksia se on kuitenkin kevyempi vaihtoehto kuin iPhoto Jos tiedät Kuvansiirtäjää paremman vaihtoehdon kerro toki kommenteissa iOS Simulator Cropper ilmainen Laitteella kuvakaappauksien ottaminen on kaikesta huolimatta vähän jähmeää Käyttöohjeita promokuvia yms varten on usein kätevämpää ottaa kuvakaappaukset suoraan Xcoden Simulator ohjelmasta iOS Simulator Cropper ottaa kuvakaappauksen pelkästään simulaattorissa pyörivästä ohjelmasta nimeää sen halutulla tavalla ja lisää haluttaessa kuvan ympärille iPhone kuoret kiiltoineen kaikkineen Myös status barin poistaminen kuvan ylälaidasta onnistuu helposti jos vaikka haluaa lisätä kuvakaappaukset App Storeen Applen ohjeiden mukaan ilman palkkia iPhone Configuration Utility ilmainen Sovellusten ja provisiointiprofiilien asentaminen onnistuu periaatteessa iTunesilla mutta sillä on paha tapa synkronoida valtavia datamassoja joka välissä heti kun se löytää koneeseen kytketyn puhelimen Kätevämpi työkalu on Applen tarjoama iPhone Configuration Utilyty Sen avulla voi mm asentaa IPA muotoisia sovelluksia laitteelleen kun sellainen tarve tulee Saatavilla myös Windowsille Quicklook plugin for provisioning profile files ilmainen Provisiointiprofiilien kanssa tappelu on iOS kehityksessä väistämättä vastaantuleva hupi Tuskaa vähentää jos voi kätevästi varmistua että sovelluksen pitäisi teoriassa asentua halutulle laitteelle Tämä kätevä lisäpalikka antaa Finderille kyvyn näyttää suoraan mitkä testilaitteet sovelluksen provisiointiprofiiliin on lisätty UDID ilmainen Jotta voisi varmistua että oma puhelin on tuettu pitäisi tietää puhelimen UDID koodi Sen saa selvitettyä iTunesilla mutta Apple on tehnyt sen siinä

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

  • Porttautuva koodi mobiilissa | Mobiilikehitys
    C olisi aina varma valinta mutta puhtaalla C llä syntyy tulosta kovin hitaasti ja dynaamisten tietorakenteiden merkkijonojen jne käsittely on melko kömpelöä Valitsinkin siksi pykälää korkeamman abstraktiotason eli C n Ohjelmointikielen version valintaan kannattaa paneutua myös hetken eikä sännätä käyttämään heti uusinta itse en uskaltanut vielä tähän projektiin valita tuoreinta C 11 versiota vaikka se oliskin tarjonnut muutamat elämää helpottavat asiat kuten auto tyypin muuttujille sisäänrakennetun säiekirjaston ja paljon muuta Sittemmin olen perehtynyt tarkemmin C 11 feature support matriisiin merkittävillä kääntäjillä GCC clang MSVC ja vaikuttaa että aika on kypsä sen käyttöönotolle Ohjelmointikielen valinnan jälkeen seuraava looginen askel on kartoittaa APIen ulkoisten kirjastojen tarve ja koettaa vaikkapa proof of concept hengessä varmistaa että kirjastovalinnat täyttävät tarpeet MMark13 projektissa tarvitsin säikeistystä joten käytin hyväkseni tietoa että kaikki kohdealustani ovat UNIX perillisiä ja siten tarjoavat POSIX threads pthreads paketit Tarvittiin myös JSON kirjastoa pienellä googlauksella löysin jsoncpp paketin jonka koodi dokumentaatio oli poikkeuksellisen laadukkaan oloista ja joka istui suoraan tarpeisiini Kenties tuosta löydöksestä riemuitessani kirjoitin seuraavan askeleen eli tuloslaskelma JSON lähetyksen palvelimelle abstraktion läpi siten että kirjoitin alustoille omat toteutuksensa sen sijaan että olisin käyttänyt ilmiselvää ratkaisua libcurlia Tajusin mokani vasta projektin loppumetreillä enkä rupea yleensä korjaamaan jotain joka toimii joten saivat jäädä Lisäksi otin mukaan simppelin C MD5 toteutuksen Halusin toteuttaa softani käyttöliittymän alustariippumattomasti siten että se käyttäytyy kaikilla laitteilla samalla tavalla ja myös näyttää samalta Etsinkin melko laajalti OpenGL pohjaista Widget kirjastoa mutta löytämäni paketit olivat joko aivan järjettömiä bloatteja tai sitten erittäin huonolaatuisen näköistä koodia usein molempia että päädyin kirjoittamaan hyvin lightweight toteutuksen aivan alusta erään intensiivisen viikonlopun aikana Eli ainakin yksi pyörä tuli keksittyä uusiksi toisaalta aikaa ei tuohon uponnut paljoa lopputulos miellyttää silmää homma oli erittäin hauskaa ja lisäksi vieläpä opin paljon Lisäksi tarvittiin seuraavat asiat alustariippuvasti softan bootstrapping softa hardisinformaation penkomista laitteelta joitain sekalaisia pikkujuttuja sekä resurssifilejen lukeminen systeemistä tähän olisi voinut käyttää ihan fread ia mutta halusin toisaalta käyttää Qt n mainiota resource systeemiä jonka kanssa tuo taas ei toimi Alla muutama konkreettinen koodiesimerkki alustariippuvasta koodin jaosta CommonFunctionsQT cpp std string RandomUuid mid 1 36 strips the curly braces added by toString duh return std string QUuid createUuid toString mid 1 36 toUtf8 CommonFunctionsIOS cpp std string RandomUuid CFUUIDRef theUUID CFUUIDCreate NULL CFStringRef cfuuid CFUUIDCreateString NULL theUUID CFRelease theUUID NSString uuid NSString cfuuid uuid autorelease return std string uuid UTF8String Kurkistetaan vielä korkealla tasolla ohjelmiston toimintaa ja sitä miten alustariippuva ja porttautuva osa koodia pelaavat yhteen iOS buildissa tarvittava wrapperkoodi on luonnollisesti Objective C aa kokemus osoitti ettei sen ja C maailman sekoittaminen keskenään ole triviaalia tai kovin eleganttia ja kehotankin eristämään kyseisen rajapinnan mahdollisimman pienelle alalle Käytännössä toimiva pattern on antaa Objective C koodille yksisuuntainen has a patternin mukainen suhde porttautuvaan C koodiin ja rakentaa iOS specific toteutus C luokalle joka hoitaa callbackien tarvitseman alustariippuvan koodin Qt maailma on natiivisti C aa joten siellä ei tarvittu taikatemppuja Ohjelman toimintalogiikka pääpiirteittäin Alustariippuvainen osa ottaa vastaan inputit muuttaa niiden datatyypit alustariippumattomaan muotoon ja välittää ne eteenpäin allaolevalle porttautuvalle osalle Käytännössä inputit ovat Redraw timer iOS ssa

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

  • matti | Mobiilikehitys
    mutta jos yo mekanismi on jo toteutettu viidelle muulle alustalle on edessa iso muutostyö ja paljon hampaita kiristeleviä ihmisiä Turha asynkronia näin yksinkertaisessa asiassa hankaloittaa sekä pirstaloittaa arkkitehtuuria Ongelman ratkaisu lähtee UI frameworkin toiminnan ymmärtämisestä 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 2D Grafiikka iOS CGAffineTransformation ja UI elementit May 4 2012 matti Leave a comment Affiinit kuvaukset ovat käytännössä pakon sanelemina tuttuja kaikille 3D grafiikkaohjelmointia harrastaneille mutta ne ovat aivan yhtä hyodyllisiä joskaan eivät samalla tavalla edellytys tasossa toimiessa iOS n Cocoa Touch tarjoaa useita tapoja manipuloida UIView ien jokaisen näkyvän UI widgetin kantaluokka paikkaa framen sijainnin muuttaminen taitaa olla päivittäisessa käytössä yleisin tapa ja se onkin riittävä ja oikea valinta suurimpaan osaan tapauksia Mutta jos elementtejä halutaan skaalata tai kiertää rotate tarvitaan muita konsteja CGAffineTransformation esittää 3 3 matriisia jolla tason 2D affiinit kuvaukset voidaan esittää UIView luokalla on transformation niminen property jonka animoitavuus tekee affiineista kuvauksista erittäin voimakkaan työkalun Esimerkiksi UIView n siirtäminen koordinaatteihin tx ty tapahtuu CGAffineTransformation n avulla seuraavasti CGAffineTransform transform CGAffineTransformMakeTranslation tx ty view transform transform Jos on tottunut siirtelemään elementtejä muokkaamalla framen sijaintia kannattaa huomioida että CGAffineTransformation lla tehtävät siirrot translation kohdistuvat elementin 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 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

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

  • Julkaisu | Mobiilikehitys
    AdView adView AdView findViewById R id adView adView loadAd new AdRequest 4 Olet valmis markkinoi applikaatiotasi sosiaalisessa mediassa 5 Profit AdMob Android julkaisu Mainokset Android Julkaisu Kehitysympäristö Sovelluskehitys Ice Cream Sandwich julkaistu October 19 2011 taneli Leave a comment Google ja Samsung pitivät tänä aamuna yhteisen julkistustilaisuuden jossa päivänvalon näkivät Googlen uusi Android 4 0 käyttöjärjestelmä Ice Cream Sandwich sekä Samsungin kehittämä uusi Google Nexus puhelin Uuden Android käyttöjärjestelmän suurimmat uudistukset keskittyvät lähinnä parempaan käyttökokemukseen Seuraavassa lista tärkeimmistä käyttäjille näkyvistä uudistuksista Parannettu UI Kuten aikaisempien versioiden kanssa myös Ice Cream Sandwich tuo uuden käyttöliittymäteeman ja värimaailman Lisäksi uusi kirjasintyyppi parantaa tekstin selkeyttä ja luettavuutta suurempia näyttöjen kanssa Aloitusnäytön kansiot Android 4 0 ssa käyttäjät voivat ryhmitellä applikaatioita ja pikakuvakkeita näppärästi omiin kansioihin Ryhmittely onnistuu helposti raahaamalla kuvakkeita toistensa päälle Widgettien koot muutettavissa Yksi ainakin allekirjoittaneelle mieluisa uudistus on mahdollisuus muuttaa widgettien kokoja Kokomuutokset ovat toki olleet mahdollisia Android 3 x laitteissa mutta nyt myös muutkin kuin tablet käyttäjät pystyvät käyttämään koko näyttöalan fiksusti hyödyksi Lukitusnäytön uudistus Myös lukitusnäyttö on saanut uudistuksia uudessa näytössä on mahdollista tehdä asioita ilman että lukitusta tarvitsee avata Esimerkiksi käyttäjä voi avata Kamera applikaation ja ottaa kuvia tai hallinnoida soitettavaa musiikkia Datakäytön kontrollointi Ehkäpä suurin Ice Cream Sandwich sta löytyvä innovaatio on datakäytön kontrollointityökalu Käyttäjä voi liittymäsopimuksesta riippuen asettaa erilaisia muistutuksia ja rajoituksia datakäytölle jolloin käyttäjän pitäisi säästyä ikäviltä laskuyllätyksiltä Muita uudistuksia Näiden uudistusten lisäksi Android 4 0 ssa on paljon muita uudistuksia Mainitsemisen arvoisia asioita ovat uudistetut Kamera ja Galleria applikaatiot Galleria applikaatioon on lisätty myös muutamia kuvankäsittelyominaisuuksia Näiden lisäksi kalenteria on parannettu sekä käyttöjärjestelmästä löytyy nyt myös saneluominaisuus Kehittäjiä kiinnostavat uudistukset Kehittäjien kannalta katsottuna Android 4 0 n tuoma suurin uudistus on että Android 3 0 ssa julkistetut uudet ominaisuudet kuten Action Bar Fragment luokka parannettu tuki suurille näytöille ja HTTP Live Streaming ovat nyt käytettävissä sekä puhelimissa että tableteissa Tämän lisäksi Ice Cream Sandwich tuo toki oman osuutensa uusien ominaisuuksien listaan Social API Social API tarjoaa yhteisen rajapinnan käyttäjän tietojen ja sosiaalisen kanssakäymisen hallintaan Social API n avulla voidaan hallinnoida helposti käyttäjän kontakteja profiilitietoja status päivityksiä ja valokuvia Calendar API Uudistetun Kalenteri applikaation ja Calendar API n avulla käyttäjän kalenterin lukeminen ja uusien kalenterimerkintöjen lisääminen helpottuu Android Beam Android Beam on NFC en perustuva ominaisuus joka mahdollistaa tietojen helpon siirtämisen NFC laitteiden välillä Beamin avulla on mahdollista siirtää esimerkiksi kontaktitietoja kuvia ja videoita sekä liittyä keskusteluun tai videopuheluun Multimediauudistukset Android 4 0 tarjoaa uuden low level tuen streamauksen hallintaan Uudistus mahdollistaa paremman mediadatan hallinnan esimerkiksi applikaatio voi itse hakea datan purkaa kryptauksen ja sen jälkeen ohjata datan käyttöjärjestelmälle näytettäväksi Toinen mukava multimediaan liittyvä uudistus on audio remote control API joka mahdollistaa musiikkisoittimien ohjauksen lukitusnäkymästä niin että käyttäjän voi hallinoida soitettavaa musiikkia avaamatta puhelimen lukitusta Näiden lisäksi Ice Cream Sandwich iin on lisätty WebP ja VP8 tuki sekä tuki Matroskalle jossa sisältö on joka Vorbis ja VP8 formaatissa UI uudistukset 4 0 ssa on mukana uusi GridLayout luokka jolla on mahdollista luoda matalampia UI hierarkioita mikä puolestaan tarkoittaa nopeampaa käyttökokemusta Toinen varsin mukava uudistus

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

  • Mobile Dev Camp Helsinki 2013 | Mobiilikehitys
    be published Required fields are marked Name Email Website Comment You may use these HTML tags and attributes a href title abbr title acronym title b blockquote cite cite code del datetime em i q cite strike strong 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

    Original URL path: http://mobiilikehitys.fi/mobile-dev-camp-helsinki-2013/ (2016-04-30)
    Open archived version from archive

  • lari | Mobiilikehitys
    lari Leave a comment Seuraavassa lyhyesti avattuna muutamia syitä siihen miksi yritysten ja brändien kannattaa toteuttaa mobiilisivusto optimaalisen selaamisen ja käyttäjäkokemuksen varmistamiseksi Mobiiliselaus on erittäin vahvassa kasvussa maailmalla Morgan Stanleyn analyytikkojen arvioden mukaan mobiili Internetselaus ohittaa desktop selaamisen määrän vuoden 2013 aikana ja jatkaa merkittävää kasvua tämän jälkeenkin Huomattavaa on että iOS laitteiden osuus selaamisesta on tällä hetkellä erittäin suuri Android ja muut alustat kasvavat nyt ja todennäköisesti myös tulevaisuudessa huimaa vauhtia Mobiilidatan ja mobiililaajakaistojen määrä on myös Suomessa merkittävässä kasvussa Mobiililaajakaistapenetraatio vuoden 2012 vaihteessa oli jo yli 30 kaikista matkapuheliliittymistä ja jatkaa tasaista kasvuaan Merkille pantavaa on myös se että noin 70 uusista myydyistä mobiililaitteista on älypuhelimia tai tabletteja joissa mobiiliselaaminen on mielekästä Elisa 2011 osavuosikatsaus Q3 lehdistömateriaali Edellä mainittujen asioiden lisäksi kannatta huomioida myös muut mobiilin tuomat lisäedut verkkosivukonseptin laajentamiseen liittyen kuten lokaation hyödyntäminen jne PS Avaamme pian myös Qvikille uudet sivut jotka on arvaatte sen mobiilioptimoitu 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

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

  • Push-viestit ja push-palvelin – mitä ne ovat? | Mobiilikehitys
    välittömästi Ihmisillä on nykyään hyvin usein monia sähköpostitilejä todennäköisesti tietty tili varattuna henkilökohtaiseen viestintään ja jokin toinen tai toiset tilit yleisempään viestintään kuten rekisteröitymisiin ja muihin harvemmin käytettyihin palveluihin Viestin ja loppukäyttäjän kohtaaminen saattaa tapahtua vasta päivien tai viikkojen kuluttua itse lähetystapahtumasta koska käyttäjät eivät välttämättä seuraa aktiivisesti kaikkia tilejään Push viestit saavuttavat vastaanottajan viimeistään muutaman minuutin sisällä lähetyksestä Käyttäjien voidaan olettaa saaneen ja huomioineen viestin lähes välittömästi sillä puhelin värisee soittaa mahdollisesti merkkiäänen ja ruudulla tapahtuu visuaalinen päivitys Pushin avulla sisältöä mobiiliviestintään Niin massaviestit kuin käyttäjien profiloinnin kautta yksilöidyt viestit kannattaa muotoilla huolellisesti ja sisällyttää niihin jotain joka oikeuttaa välittömän yhteydenoton käyttäjiin Pelkkä tekstitieto esimerkiksi vaikkapa Liikkeemme on auki tänäänkin klo 9 18 voi olla paikallaan sillöin tällöin muistuttamassa palvelun olemassaolosta Suositeltavampaa olisi kuitenkin antaa käyttäjille arvokkaampaa informaatiota jota epush viestipalvelua käyttämättömät eivät tietäisi Esimerkiksi Muotisuunnittelijamme on tänään liikkeessämme klo 18 asti antamassa henkilökohtaisia vinkkejä Skumppaa 50 ensimmäiselle tyyppinen viesti tuo lisäarvoa viestiin ja on myös käyttäjille syy olla liittyneenä viestipalveluun Varsinkin lyhytaikaiset kaikille tarjottavat tiedotteet ja edut houkuttelevat palvelusta kiinnostuneet liittymään palveluun saadakseen tiedon tapahtumista ensimmäisten joukossa Push viestivaihtoehdot Push viestit ovat perusidealtaan samankaltaisia kaikissa laitteissa viesti saapuu se mahdollisesti avataan ja siihen sidottu mobiilisovellus käynnistyy ja näyttää lisätietoa asiasta Applen iOS laitteilla push viestit tulevat laitteen ruudulle ja käyttäjä voi reagoida siihen välittömästi tai palata asiaan myöhemmin uudelleen viestikeskuksen kautta Näkyvän viestisisällön lisäksi viestiin liitetään usein myös käyttäjälle näkymätöntä tietoa kuten mikä merkkiääni soitetaan viestin saapuessa tai mitä dataa palveluun halutaan välittää sisällönpäivittämisen mahdollistamiseksi Windows Phone laitteille on tarjolla puolestaan usean tyyppisiä push viestejä joista perusvaihtoehto toast on samankaltaisin muiden alustojen push viesteihin verrattuna Windows Phone laitteelle on mahdollisuus lähettää myös raw ja tile viestejä Raw viestit tarjoavat mahdollisuuden palvelulle syöttää tietoa esimerkiksi kuponki mobiilisovellukseen taustalla ilman että sovelluksen pitää hakea tietoa erikseen Tile viesteissä puolestaan palvelu voi syöttää sovellustiileen vastaa muilla alustoilla suurin piirtein ikonia työpöydällä taustakuvia tekstejä ja numerotietoa Tämän avulla voidaan toteuttaa esimerkiksi käyttäjän työpöydän uutissovelluksen ikonin sisällönmuutos tai vastaava tilapäivitys Android laitteilla mahdollisuuksia on useita Käytännössä kehittäjä voi päättää mitä tehdään push viestin tullessa Yleisin käytäntö kuitenkin on että käyttäjälle näytetään notifikaatti jonka hän voi avata silloin kun on siihen sopiva hetki Voidaan kuitenkin tehdä monimutkaisempiakin toteutuksia esimerkiksi käsketään laite lataamaan jokin iso tiedosto ja vasta sen jälkeen ilmoitetaan käyttäjälle notifikaatilla Käyttäjälle ei ole pakko ilmoittaa push viestistä mitään vaan se voi pelkästään olla taustalla tapahtuvaa logiikkaa Toimintaympäristö Push viestipalvelun käynnistämisen jälkeineen tapahtuva viestien lähetys voi parhaimmillaan olla varsin yksinkertaista ja suoraviivaista Palvelun tarjoaja luo uuden push viestin syöttämällä lähettävässä palvelussa lomakkeeseen viestin tiedot Lähetysnapin painamisen jälkeen tiedot siirtyvät push viestipalvelimelle joka lähettää viestin edelleen Applen Googlen ja Microsoftin kautta mobiililaitteille Edellä kuvattu toimintatapa vaatii kuitenkin sen että palvelun kehittäjä on joko itse kehittänyt push palvelimen viestien välittämiseen tai käyttää tarjolla olevia kaupallisia vaihtoehtoja Qvik on toteuttanut push palvelimen ja tarjoaa sitä mielellään kaikkien asiakkaiden käyttöön Jatkamme Push teknologiasta ja viestintäarkkitehtuurista tarkemmin seuraavassa artikkelissa Kuva 1 Push viestipalvelin lähettää viestit mobiilikäyttäjille Post navigation Previous Post NPG Card julkaistu Windows Phone lle Next Post

    Original URL path: http://mobiilikehitys.fi/push-viestit-ja-push-palvelin/ (2016-04-30)
    Open archived version from archive