Je bent in het archief : ‘Uncategorized‘

DMT – Drie Minuten Toets

Een van de meest succesvolle apps van HappyWorx is nog steeds FlitsWoorden. Vanwege dat succes heb ik gewerkt aan een mooiere, modernere versie. DMT is een app die gebaseerd is op hetzelfde idee, met een paar verbeteringen. In DMT kan gekozen worden voor 2 methoden van woorden tonen. De eerste is – gelijk aan Flitswoorden – door te tikken op het getoonde woord. De tweede laat na een bepaalde periode het volgende woord zien. Met behulp van een slider rechts in het scherm is in te stellen hoe snel de woorden getoond worden. Het bouwen van DMT was ook het uitgelezen moment om meer aandacht te besteden aan de GUI. Ik heb met behulp van PaintShop Pro een aantal houten “cut outs” gemaakt, die getoond worden als knoppen. Voor het database gedeelte heb ik een methode gebruikt waar ik inmiddels goed bekend mee ben; De SQLite database, die geïnstalleerd wordt op de telefoon. Tot slot bleek er nog een heel leuke snack in de ontwikkeling van deze app te zitten. Ik ben gaan zoeken naar een manier om spraakherkenning te doen, zonder dat daarvoor een Internet Connectie nodig is. PocketSphinx bleek hiervoor uitstekend geschikt. Ik heb een Proof Of Concept… >> Lees meer…

FlashMath – You do the math

After some hours of coding, a new App was published in the Market. You can find it here. This app challenges kids to do math even faster. It requires some settings (max values, types of questions) and then it’s good to go. Coding-wise, not much new stuff in here. I used smart layouting for Landscape / Portrait optimalization. Just define layouts for all the seperate elements and later, include them in a master layout (<include layout=”@layout/calculator_frame” />) in your Layout-Port folder. Now, define a different layout for your Landscape-mode and place it in the Layout-Land folder. That’s it! As for the Settings (Preferences), I really should get down to studying the newly introduced, fragment-style settings. I just used the old (deprecated) methods for now. There is one nice piece of could I would like to highligt. Each time the user answers a question correctly, the time (ms) is stored in an ArrayList. Later, this list is used to calculate a mean time. Now, for adding more fun while crunching the numbers, I wanted to introduce a motivating message when the user does better than he or she did before. But, obviously, the app could’ve just presented a series of very… >> Lees meer…

Imagination Trainer – Developing for older Android versions

This month, I finished work on a brand-new app that jogs your Imagination. Einstein said : “Logic will get you from A to B. Imagination will take you Anywhere”. As a dad, I like to make up bed-time stories. I found it was very hard for the kids to dream up random characters, items and locations for these stories. Those factors combined made this app. Imagination Trainer serves you with nine random images. Can you make up a story that uses all this pictures? Think outside the box. Try to stretch your story and introduce a plot, an intrige or maybe let your kids wonder what image will make its entrance next? Programatically, this was not a very big deal. Until I found out that my code wouldn’t run on pre-Honeycomb Android versions! Don’t be mistaking, there are lots of people who won’t update their phones. My MinSDK was 11, which maps to Android 3.0. This API level was needed, because I used the setAlpha property for ImageView :   view.setAlpha(1f); I actually forgot to set the MinSDK in my AndroidManifest. Within a few hours, complaints started coming in :D. So, I shuffled around some code, and came up with… >> Lees meer…

WieBenIk : Functionaliteit uitgebreid

In de Google-market maakte Chantal de opmerking dat WieBenIk te moeilijk is. Zij had het geinstalleerd, gespeeld, maar niet geraden dat ze “Google” was. Tja. Ik heb het zelf met 3 anderen 1,5 uur lang gespeeld. We hebben veel gelachen en eigenlijk vonden we het niet echt te moeilijk. Je moet wel je medespelers op het juiste moment een hintje geven … Juist daar dacht ik aan een stukje automatisering. Dit weekend ben ik dus aan de slag gegaan met het maken van 3 hints per woord. Ook de code moest daarvoor een beetje worden aangepast. Op het moment dat we een woord uit de database halen, kunnen we ook meteen de hints erbij laden. De database heeft er dus 3 kolommen bijgekregen, die ik uitlees. De resultaten plaats ik in een String Array, zodat het later makkelijk is om de variabelen te vullen met de verschillende hints. De DBHelper heeft dus een nieuwe methode gekregen : public String[] getRecord(long rowId) { SQLiteDatabase db = getReadableDatabase(); Cursor c = db.query(TABLE_NAME, new String[] { WORD, “HINT1”, “HINT2”, “HINT3” }, _ID + “= ” + rowId, null, null, null, null, null); if (c != null) { c.moveToFirst(); } db.close(); String[] result; result… >> Lees meer…

Nieuwe app : Wie Ben Ik ?

Ik was op zoek naar een leuk spelletje, dat je met veel mensen kunt spelen. Bijvoorbeeld om elkaar iets beter te leren kennen, samen te lachen of gewoon als tijdverdrijf. Het moest een spelletje zijn dat je kunt spelen in een groep, maar ook met z’n 2en. Misschien zelfs wel in de trein, met mensen die je niet kent. Tijdens een weekend van Mensa speelden we “WelkSpel”. Een geweldig leuk spelletje met 3 rondes. In ronde één moet je een omschrijving geven van een persoon, je team moet raden “wie je bent”. Ik begon wat te fröbelen en, tadaa : Wie ben ik op je Telefoon! Dus vandaag heb ik weer een app gepubliceerd in de Market. Ik ben nog bezig met de verfijning en ben dan ook erg nieuwsgierig naar jullie op- en aanmerkingen. Sowieso zit er nog wat werk in de vertaling. Daarnaast ben ik bezig met een andere GamePlay. We noemen het “WelkSpel” en het lijkt een beetje op de ronde ‘raadt de bekende Nederlander’ van Ik Hou van Holland. Het ontwikkelen van deze app ging behoorlijk goed! Inmiddels beginnen de JAVA tutorials hun vruchten af te werpen en begrijp ik een beetje hoe je Object Oriented… >> Lees meer…

Failed to initialize Monitor Thread: Unable to establish loopback connection

Tijdens een Android training sessie kwamen we op sommige PC’s deze foutmelding weer tegen. Het heeft te maken met het feit dat Eclipse niet goed om kan gaan met IPv6 adressen voor de LoopBack adapter. Dit IPv6 adres wordt toegekend door de Toredo Interface. Je kunt deze interface makkelijk uitzetten, dan houdt je PC een IPv4 adres. Ik heb ook geprobeerd of het lukt als je de hosts file aanpast, maar omdat de meeste (zakelijke) systemen dat niet toestaan, lijkt me deze oplossing beter. Mijn eerste tutorial met een filmpje, om te kijken hoe dat bevalt (bij mezelf, maar ook vooral bij de lezers van dit blog). En ook, eerlijk is eerlijk, omdat het publiceren van zo’n filmpje bijdraagt aan mijn doel. Onderaan deze post zal ik het filmpje embedden. Ik denk dat je het wel full screen moet bekijken om alles goed te kunnen zien. Ik ben nog op zoek naar een goede ScreenCam voor dit soort doeleinden (tips, anyone?). BB Flashback lijkt ideaal.. en heeft als nadeel dat je uiteindelijk veel tijd gaat steken in het editten van het geheel. Het liefst zou ik iets hebben, waarmee je dmv een hotkey kunt in- en uitzoomen. Nog even doorzoeken,… >> Lees meer…

Cursus en tutorials online

De afgelopen week heb ik een een paar dagen cursus Android Development gevolgd (kostte me wat vrije dagen, maar was de moeite meer dan waard!). Tijdens de cursus werd mijn vermoeden bevestigd; Eigenlijk zijn het niet de specifieke Android-dingen die ik niet begrijp. Ik heb de JAVA-Basics gewoon niet onder de knie. This, Context, inner- en outer-classes en static operators. Al die termen zeggen mij eigenlijk (nog) helemaal niets. Zie ook deze blogpost. Ik heb de Apps die tot nu toe in de market staan, gebouwd door gewoon maar code kopiëren-en-plakken. Elke keer als ik een fout tegenkwam, heb ik Google geraadpleegd en met veel pleisters en extra code de boel maar weer opgelost. Dat heeft als resultaat dat mijn code niet overeenkomt met welke conventie dan ook (behalve misschien mijn eigen, haha). Tijdens de cursus leerden we onder andere hoe je een XML pagina kunt ‘parsen’ en om kan zetten in FeedItems voor in een Listview. De Listview kun je dan weer tonen in een App. Interessante technologie! Ik dacht meteen aan mijn – vaak voorkomende – ergernis: Als Mensa-lid heb ik toegang tot de ledenlijst, waar ik soms een telefoonnummer of contactgegevens in wil opzoeken. Op dit moment… >> Lees meer…

Alle reclamekansen moet je pakken!

Toen ik een jaar of 17 was, werkte ik bij Domino’s Pizza. De Store Manager vertelde over de eigenaar, die in Amerika woont. Eén van zijn motto’s : “Never miss a marketing opportunity!”. Om deze reden had hij de tegeltjes op de bodem van zijn zwembad laten plaatsen in de vorm van het Domino’s Logo. Er zijn immers luchtvaartmaatschappijen die met hun vliegtuigen boven zijn tuin langsvliegen. Misschien vind je dit voorbeeld vergezocht, maar de grondgedachte houdt stand. Een evenement als het EK leent zich prima voor wat marketing. Daarom : Wil jij ook dat Nederland het EK 2012 wint? Nu kun je de uitslag beïnvloeden! Vuur jouw rocket of desire af voor het #EK 2012! Het is zo eenvoudig; Als we allemaal de krachten bundelen, zorgt het universum voor doelpunten! Installeer NU deze app en voel de kracht van de 13e man. Vuur raketten van verlangen af. Rode kaarten voor de tegenstander? Extra kansen voor oranje? Een keeper die aan de grond gelijmd zit? Wat is het jou waard om dit EK te winnen? Installeer de App en vuur direct je eerste Rocket of Desire af. Rockets zijn GRATIS. Je kunt er zoveel afvuren als je wilt. Met elke… >> Lees meer…

Nieuw in de market : VirtuaFly

Ik ben al een tijdje bezig met een SoundBoard. Het is VirtuaFly geworden, een vrij simpele app die de gebruiker in staat stelt een virtuele vlieg te laten horen. De vlieg kan allerlei avonturen beleven; Verliefd worden, in een shredder terechtkomen en zelfs een kamikaze-zelfmoord-missie uitvoeren. Ik heb geen idee hoe deze app wordt ontvangen door het publiek, maar het werken met geluidsbestanden gaf weer een heel nieuwe dimensie aan het ontwikkelen. Ik ben begonnen met ogg-bestanden. Deze worden het best door de verschillende delen van het Android besturingssysteem verwerkt. De SoundPool-methode die ik gebruikte, bleek niet toereikend. Een Heap Size Overflow was het gevolg. ERROR/AudioCache(34): Heap size overflow! req size: 1052672, max size: 1048576 Dit komt, doordat het Android systeem het ogg geluidsbestand uitpakt in het werkgeheugen. Afhankelijk van het aantal kanalen, de samplerate en andere variabelen, kan dit een groot tot zeer groot bestand tot gevolg hebben. Het vreemde is, dat de applicatie wel gewoon opstart en blijft werken. De geluidsbestanden worden afgespeeld tot op het moment dat het geheugen vol was. In eerste instantie kortte ik de geluidsbestanden zo ver mogelijk in. Pas later vond ik een andere (makkelijker) methode om geluidsbestanden af te spelen ; MediaPlayer…. >> Lees meer…

ComputerIdee nummer 12 (2012)

In nummer 12 van ComputerIdee (jaargang 2012) sta ik, samen met mijn zoons, in de rubriek “Uitsmijter!”. Wat ontzettend leuk om op die manier met andere computer geïnteresseerden een stuk passie en nieuwsgierigheid te kunnen delen. Al eerder op dit blog, in de post doel, verwees ik naar mijn BBSje, dat ik draaide toen ik 13 was. Ik was lid van de Philips Computer Hobby Club (mijn vader werkte bij Philips). Daar zag ik op een maandagavond voor het eerst een modem. Het was een erg duur insteek-kaartje. 45 gulden als ik me het goed herinner. Toch, uiteindelijk, aangeschaft en ingebouwd in mijn P3200. Een prachtige PC, voor die tijd echt een juweeltje. 286AT, 6Mhz processor en 26MB (!) harddisk. Ook een unieke EGA videokaart, die 16 kleuren tegelijk kon weergeven (uit een palet van 64). Die EGA kaart heb ik later vervangen door VGA. Mijn P3200 was een bedrijfssysteem geweest. Je moest hem dan ook aan- en uitzetten met een sleuteltje. Ik deed echt van alles met dat ding, soms stond ie 2 nachten te ratelen om een simpele donut te renderen. Na inbouwen van de modem (‘het’ modem mag ook) werd het helemaal feest. Ineens had ik toegang… >> Lees meer…

How To : Adverteren in je zelfgemaakte App

Monetizeren! Prachtig woord, volgens mij geen correct Nederlands. Engelstalige websites en blogs hebben het over “Monetizing” your App. Hoe moet dat nou precies?Als je wilt weten hoe je een App kan maken, kijk dan bij de Tutorials. Daar wordt onder andere uitgelegd hoe je een ontwikkelomgeving moet opzetten en hoe je je eerste App kunt bouwen. Er van uitgaande dat je een App gebouwd hebt; Hoe moet je die nu “Monetizeren”? ;)… Ten eertse kun je je App verkopen in de markt. Maar een eerdere post laat al zien, dat verkoop helemaal niet de meest winstgevende optie hoeft te zijn. Je kunt ook een willekeurig bedrijf bellen. Of een vakblad. En dan aanbieden dat je een bannertje in je app kan tonen (320×50 pixels). Je kunt dan een afspraak maken over het aantal keren dat de banner getoond wordt, en hoeveel dat blad daarvoor betaalt. Er zitten nadelen aan dat idee. Het belangrijkste nadeel; de advertenties zijn voor iedereen hetzelfde. Ze worden niet ‘op maat’ aangeboden. Ten tweede; Je bent afhankelijk geworden van die ene adverteerder. Natuurlijk kun je er een tweede en een derde bijzoeken, maar dan heb je daar een dagtaak aan. Je was App developer, geen advertentie-verkoper. Andere… >> Lees meer…

Verdienrapport #1 – Estimated Earnings, Balance en Tap4Tap

Langzaam beginnen de contouren van het verdienen zich af te tekenen. De eerste stappen richting het doel. Nu wordt duidelijk hoe e.e.a. inelkaar zit en zijn de eerste rapporten beschikbaar. AdMob (adverteren in Apps) heeft al een keer $25 uitbetaald. De “Estimated Earnings” (de geschatte verdiensten per 1.000 indrukken) liggen op dit moment rond de $1,91. Als ik dat extrapoleer; Per maand moeten de Advertenties in de apps ca. 1.000.000 keer bekeken worden om een reëele verdiencapaciteit van iets minder dan 2.000 euro te bereiken. Ter vergelijking; FlitsWoorden heeft op dit moment ongeveer 100 indrukken per dag. FlitsWoorden is ca 4.000 keer geïnstalleerd, waarvan 2.000 actieve installaties. Ik doe een hoop aannames EN… Als 50% van de installaties actief blijft moet FlitsWoorden dus ca. 1.400.000 keer geïnstalleerd worden om te komen tot de 35.000 indrukken per dag (= ca € 65). FlitsWoorden is een mooi model, want er blijven kinderen instromen in groepen 2 en 3 van de basisschool. Onderhouden, dus. Kijkend naar de revenue-grafieken van FlitsWoorden valt op, dat de app het meest wordt opgestart op woensdag. Waarschijnlijk vanwege de halve dag vrij. Ik verwacht tijdens vakanties een dip te zien. Daarnaast verwacht ik vlak voor de start van… >> Lees meer…

Ideeënstroom – So much to do…

Ik ben een beetje aan het fröbelen met Speed.java. Daarmee kan ik de fruitjes in aPpLeZ wat snelheid geven. Terwijl ik dat zo aan het doen ben schieten de ideeën door mijn hoofd. aPpLeZ moet beter, leuker en uitgebreider. Ondertussen komt het eerste crashrapport van de Google Playmarket binnen. Een gebruiker is zo vriendelijk geweest om op Rapport te drukken (bedankt, Peter ;)). java.lang.NullPointerException at happyworx.nl.Applez.MainGamePanel.onDraw(MainGamePanel.java:271) at happyworx.nl.Applez.MainThread.run(MainThread.java:58) Voor apps die obscure code bevatten, bevatten stacktraces obscure symboolnamen. … Wat er bedoeld wordt met “obscure symboolnamen” weet ik niet precies, maar wat er misgegaan is, gelukkig wel. Op regel 271 van de MainGamePanel worden de appeltjes getekend. Kennelijk heeft het spel geprobeerd een appel te tekenen die er niet meer was. Dat komt waarschijnlijk door de snelheid (traagheid) waarmee sommige arraylists worden leeggemaakt. Ik heb fluks één en ander veranderd in de code en een nieuwe versie in de Market gelanceerd. Nee, helaas geen team van testers om een uitgebreid test traject mee uit te voeren ;(. Ondertussen bedenk ik allemaal leuke extraa’tjes. Appels die langzaam groter worden (dan zijn ze makkelijker te pakken), een levelcounter, na level 5 gaat dan alles draaien, na level 10 ook bewegen. Je kunt… >> Lees meer…

How-to : Een simpele Game Loop

Mijn aPpLeZ-Game is gebaseerd op een eenvoudige tutorial, Droidz . In de komende posts zal ik uitleggen hoe het raamwerk van de game eruit ziet en hoe je zelf een simpele game kunt bouwen. Daarnaast zal ik ingaan op de problemen die ik tegenkwam bij het ontwikkelen van Applez. Uiteindelijk heb ik, voor Applez, 12 vragen gesteld aan de StackOverflow community. Als je in die community even zoekt op mijn naam, kun je vrij makkelijk de vragen over Applez vinden. Goed. Een game. Hoe werkt dat eigenlijk in Android? Je moet bedenken dat er sprake is van een eenvoudige architectuur. De basis is eigenlijk : Controleer gebruikersinput > Controleer plaatsen en gebeurtenissen van objecten (Physics) > Verwerk data > Teken het scherm > Speel geluid af. Daarna begint de loop weer opnieuw. Dat alles gaat zo snel, dat je erop moet rekenen dat je bij een simpel spelletje, zoals Applez, al snel 50 keer per seconde het scherm kunt tekenen (50 Frames per Second). In de tekening bij deze post kun je de beschreven architectuur herkennen. Hieronder geef ik de code voor een simpele game-loop. CopPa (jep, CopyPaste 😉 ) maakt gebruik van een Background, een View, een Thread en… >> Lees meer…

aPpLeZ gepubliceerd in de Market

Link naar market Het is zo ver.. weer een nieuwe game van mijn hand in de Market! De vakantie is nuttig geweest, vooral om even afstand te nemen en een Architectuurtje te maken. Dat bleek toch nodig. De code is nog steeds niet zo mooi als zou kunnen, maar het spelletje werkt en is volgens mij ook best leuk om te doen. Ik werk nog aan geluid (om het echt irritant te maken) en een deel-op-facebook knop voor je scores ;). Andere verzoekjes? Roept u maar! Dan even inzoomen op het verdienmodel (want uiteraard dient ook aPpLeZ bij te dragen aan het doel). Ik heb weer gekozen voor een in-App advertising model. Mijn vriendinnetje raadde me aan om full-screen ads te gebruiken tussen de levels in. Ik denk dat die inderdaad erg goed werken. Toch heb ik gekozen voor – voorlopig – bannerads. Vooral omdat de game nog niet voorziet in levels van verschillend moeilijkheidsniveau. Omdat er geen XML bestanden zijn die de Layouts vormen, was voor implementatie van de Advertisements nog best een truukendoos nodig. In mijn Activity maak ik een RelativeLayout aan. Daar voeg ik zowel het GamePanel als de AdView aan toe ; rl = new RelativeLayout(this);… >> Lees meer…