Thursday 29 December 2011

How to fail at promoting your Android App

I'm not a markerteer, I'm a developer. I like creating things then showing them off for better or worse reactions (usually worse). For my 9-5, we've been given the opportunity to work on and release side projects to the Android market. After releasing an app on there, I wanted to try to figure out how to go about getting it downloaded by people.

The market I was going for was going to be a challenge, the app enables people to create lip sync videos, this obviously narrows down your userbase from predominantly content consumers to content creators. Nevertheless, I googled how to promote your app and really, it seemed there wasn't much resources out there, other than a stackoverflow post from 2008 (perhaps I'm suffering from a search bubble?). So here are the aproaches I tried and their results.

DISCLAIMER: I am not a markerteer, I just did this as a fun learning exercise.

Attempt 1: Social Networks
So step one for me was to talk to my friends and tell them how awesome my app was and how they needed to download it right now. I posted it on my Facebook wall and Tweeted about it. (I didn't go hyperbolic about it, just one single quirky post.)

Results: This generated around 50 downloads and a bunch (~10) of good reviews.
Cost: £0.
Conclusion: Good for good reviews, perhaps I could of spammed my friends more.

Attempt 2: Blogs
There are a lot of Android blogs out there, so googled Android blogs, and e-mailed the reviewers asking them to review the app. I recieved some generic replies asking me for money for their premium review service, which I ignored. But, perhaps I'll try this out in future.

Results: 0 downloads.
Cost: £0.
Conclusions: I should investigate a premium review.

Attempt 3: Ad Networks
Facebook
Facebook is great for targeting the users you want to see your advert, you can select your age demographic, gender and interests. You can't select multiple interests, it either someone who loves music OR someone who loves Android, not both. Felt like a bad idea. I initially targetted Android users, but no one wanted to click my advert. I expanded to music, but still hardly anyone wanted to click my advert.

The advert took around a day to verify, and there was no minimum pre-payment, you're charged after.

Results: 47 clicks. ~0 downloads
Cost: £4.71.
Conclusions: Perhaps people are just too educated to the advert placements that they just filter them out, that's what I do. Or most likely my advert creating skills are poor.

Adwords
Let's you specify lots of keywords for your campaign, which, is ok. Can't target users like Facebook, but the main problem here was that keywords simply cost too much. A targeted keyword ranged between £1.50 to £2.50. This was too much for my beliefs, so I set it to £0.50. Of course, no one clicked on the targeted keywords. But the budgeted money magically disappeared at the end of the week from their 'Display Network' which charged £0.07 per click.

The advert took around a few days to verify, and the minimum pre-payment is £10.00.

Results: 142 clicks. ~0 downloads.
Cost: £10.00
Conclusions: Not convinced this is the right way to go.

Admob
Google's other advertising platform is more interesting. You can target the phone and OS, not so much the interests or user age like Facebook, but you can really pick out a phone that you know works with your app. Since you can get a few disheartening 1/5 stars from one of the hundreds of customized Android devices that you never managed to test your application on and discover that it doesn't function correctly on that device.

Also note when specifying the region, it's probably best to decouple your adverts into individual regions to keep the minimum cost per click low. As if you select UK on it's own, its $0.05 per click, if you select USA on it's own, it's $0.15 per click, if you select them both it jumps to $0.25, if you add in Japan it'll jump to $0.76.

The advert took a week to verify and the minimum pre-payment is $50.00.

Results: So far after a day of heavily targetted advertising (region+device) we've had 310 impressions and 0 clicks.
Cost:$0.00 ($50.00 pre-payment)
Conclusions: I like how you can pick which OS and phone you want to target. Probably can get more with different regions targetted.

AppBrain
This service allows you to pay per install, which is great to boost your download figures at the least. There's no OS/phone filtering or demographic selection. The recommended cost per install is $0.60, and the minimum is $0.20, I went with $0.20.

Initially the app wasn't on their directory, but I e-mailed them and they added it within a day. The minimum pre-payment is $100


Results: It's only been a day, we've had 1,289 impressed, 22 clicks and only 3 installs. We did get an extra rating during that period; a bad rating.
Cost: $0.60 ($100 pre-payment).
Conclusions: At least it's a gauranteed install your paying for. Although if you're releasing an app which hasn't been tested on every single Android device out there and has a risk of not running on one of them (i.e. uses Camera API/NDK/OpenGL), you may get some negative reviews.

Others?
Open Source
I like open sourcing things, I hear it can also promote your app virally via the developer community. In future I plan on open sourcing the source code to provide an explaination on how the code works. However, as it's a work project, I'll need to go through a couple of check points before getting this done.

Everbadge
Another pay per install service, however it seems to require an SDK for app download verification. The app was already released, and I couldn't add the SDK at this stage.

Conclusion
Of course, real life advertising would require a much bigger budget than I was prepared to sacrifice for my experiment. But, I thought this post may be interesting to small time developers like me. In the end, I am not a markerteer. But, if you have any suggestions, please leave a comment.

Monday 26 December 2011

Quran Project - Loading 3D Obj Models

Reading e-books is like eating marmite. You either love it or hate it. Myself personally, I read lots of articles, but never have the attention span to get through a book. Currently we're working together with the Quran Project charity (http://quranproject.org) in trying to re-create your typical reading experience into something more as an interactive 3d novel. The basic idea being that you get to browse the different chapters of the book, by swiping through different scenery and animations that hopefully entice you to read on more than perhaps you normally would.



Working along with a 3d artist has it's challenges, ranging from getting your naming conventions right to importing the assets created.

The models I'm working with have been exported from Maya as obj files. In the past I'd write my own exporter into my own personal favoured file format. However, I took this opportunity, to go with the flow for compatibility reasons and work on getting obj files imported into the application engine I'm working with.

I found a great ObjLoader tutorial series online here (http://nccastaff.bournemouth.ac.uk/jmacey/RobTheBloke/www), I tested out the provided tutorials with the model exported and found that tutorial3 was everything I needed to get to the obj description.



Integrating the objloader header and cpp file into an iOS project can be done with minimal changes to get it compiling. Those being to comment out win32 specific includes and switch from the OpenGL method of drawing polygons using glBegin and glEnd, into an OpenGL ES compatible vertex array using GL_TRIANGLES.

So the first step would be to take the loaded in vertices and draw them using OpenGL ES's GL_TRIANGLE construct, but of course this would lead to an incomplete scene.


What we need to do is switch from OpenGL's GL_POLYGONS to OpenGL ES' GL_TRIANGLES. To do so we can create a triangles from the first vertex and remaining vertices of the polygon.

As in if we have a 5 sided polygon.
We'll make a triangle from the first three vertices (v1, v2, v3).
Then, the first vertex and the next two (v1, v3, v4).
Then finally, the first vertex and the last two (v1, v4, v5).



You can grab the source code from the Open Source cross platform application framework (here) with the file to watch out for being CCModelObj.cpp.

Wednesday 19 October 2011

Social Poetry - Open Sourced

FaceStalker the working title for the SocialPoetry project has gone gold across three platforms. To mark the approval for the iPhone, Android and Windows versions, the source code has been open sourced on GitHub.

All links to download the app and source code for the relevant platforms can be found here: http://softpoetry.com/projects/facestalker/

Sunday 2 October 2011

Social Poetry release candidate

The social poetry project that was conceptualised a couple of months ago, has finally hit its release candidate milestone. Over the next coming weeks, it will be submitted to the relevant app stores. This app has been written as a showcase for a soon to be released open source cross platform 3d application development framework, so the actual source code for it will also be released very soon.



Wednesday 20 July 2011

Rapid Software Architecture Design Tools

In an ideal world you'd want design the system architecture first, then program in conformance to the architecture design. Back in University I used tools such as Rational Rose for modelling UML class interaction diagrams. This was great to be able to detail in what classes you've decided to use post-design and to get a good mark from my tutor. But, for the actual design process it was slow, unintuitive, boring and a pain to deal with. Pen and paper for rapid prototyping was my best friend in discovering the best architecture to go with.

Now say hello to the world of cutting edge software, where new system constraints are being discovered as these systems are built and interact with each other. You end up constantly re-designing your architecture to fit in with these constrains, which means the actual step of modelling your architecture on a tool such as Rational Rose becomes a fad.

When modelling your architecture becomes a second thought, you lose the ability to effectively communicate to other developers and project managers how a system works and what the cost would be of developing new features to the software. This is bad. There has to be a better way.. What we need is rapid software architecture design tools.

So in this effort to discover such a tool, I've shortlisted the following tools for trialing.
  • Microsoft Visio (Windows, commercial)
  • yEd (Windows/OSX/Linux, free)
  • GraphViz (Windows/OSX/Linux, free)
  • Dia (Windows/OSX/Linux, free)
  • Visual Paradigm (Windows/OSX/Linux, commercial)
  • Enterprise Architect (Windows, commercial) 
  • OmniGraffle (Mac, commercial)
Now remember, the use case of this tool is to re-architect systems more intuitively than using a pen and paper. I will be very harsh in my scoring, as I will be comparing these tools to using a pen and paper.

Microsoft Visio 2003
I'd heard great things on this tool. Firstly it's the recommended tool of choice as my company has a license for it, mind you it's only a licence for the 2003 edition. Now, I really really hope they've improved on it since then because using this tool is like having your eyelids pierced while watching a Justin Bieber music video. It is so UGLY. UGLY to use, UGLY to look at. The lines are rigid, the connection sections stand out too much, a dialog box pops up just to rename a class. Even if I managed to model the most intricate architecture in the world ever with this tool after years of practice, if I showed the results to someone, they'd probably stab their eyeballs out as relief from looking at this monstrosity.

Score: 0/5
Please don't use or recommend this software.

yEd
I'm using the mac version and it looks and feels pretty dated. I don't understand why the class boxes don't resize if you give them a name that doesn't fit the box. Panning is unintuitive. Creating arrows is a mystery, and it seems to like creating classes every time you left click the mouse. Well, at least it's nicer to look at than Visio.

Score: 2/5
Has potential, may come back to using this later.

GraphViz
I've kind of used this tool before when generating a DOXYGEN, well not really. The doxygen tools generated the chart automatically and I did nothing. My gut tells me that this tool will be useless unless you're a command line VIM junkie.. My gut was right. I have no idea how to use this tool to create charts. When you launch it, the an open file dialog box appears. If you have any clue as to how to create charts using this tool. Please let me know.

Score: -1/5
Waste your time with Microsoft Visio.


Dia
It's almost as ugly as Visio. The OSX version feels like a hack, with the shortcut keys being all wrong. When you move a class, the arrows don't follow. The lines can be diagnal, but the classes don't lock inline with other classes so it gets pretty messy, pretty quick.

Score: 1/5
It's free, but other than that I have no iDia why I'd use this tool.

Visual Paradigm & Agilian
Agilian popped up when installing Visual Paradigm, it claimed to be the solution for agile software development, so with the buzz on Scrum going on I picked to install that. Looks like Eclipse, feels like Eclipse, when I tried to draw a class diagram, the UML class toolbox was empty, reappeared later though, but you get the idea that it's buggy. Suffers from the same issue of not resizing a class box when you input a long name. Doesn't provide indicator lines when placing a class down for the first time, so you always have to place a class down, rename it, then replace it again. Gets a bit too excited when placing down associations, as in, you place one down, it places it wrongly, you try to drag it to the right place, but instead it decides to turn into a game of Snake. I give up with this, there has to be something better.

Score: 0/5
I can't believe people actually pay to be tortured.

Enterprise Architect

While the website looks like the kind of thing mothers of the future will be teaching their children to stay away from. With their malware inspired use of stock photos of corporation towers and business executives shaking hands. My workmate said that he loved it, and it did the job really well. On launch it asks you which version you want to use, Professional, Enterprise, Business, blah blah, listing no feature differences.. Whatever, I went with Business and Software Engineering. The interface looks a lot like Microsoft Visual Studio 2010, which is a good thing. The class boxes are shaded, which means that it'll impress project managers who are used to looking at shaded PowerPoint boxes. Well, that's enough of the good. The text is too small, creating links between classes is a pain, you drag one between classes then you have to select the connection type from a drop down, very cumbersome. I quizzed my workmate on this and he admitted that he had only used it once.. a long time ago.. to impress his boss.

Score: 1/5
Packed with so much features that you will never use.

OmniGraffle
Macintosh fan boys love this tool. I'm on a MacBook Pro, so why not me? Oh my god, there's a cloud chart. Seriously! Look..
Not really useful for the class connections, but it is pretty fun to use. Ok, what about for a proper class diagram? Well, there's no class diagram option in the menu, but surprisingly enough you can import a xCode project. The parser only works on Objective C classes which is pretty limited and modifying the class contents is challenging. Overall, it's really more of a drawing tool than for classes which is a real shame.

Score: 2/5
Shame it's not built for software architecture diagrams.

Conclusion
I give up. Pen and paper is the way to go for rapid design. For software architecture modelling (after you've got a good sense of the design), I think I'll go back to yEd and give that another spin.

If you have any suggestions for good software design tools, please let me know. I'm desperate..

Monday 11 July 2011

From lib_json to Jansson

I love homogeneity when it comes to developing software. Sure, heterogeneity is required when dealing with undefined cutting edge high performance systems. But for application development, where software elegance and maintainability are key. You really don't want to tie yourself down to platform specific libraries especially in the current "App" world where you want to hit as many platforms as possible. This is why I recently switched to Jansson for my JSON parsing needs.

Jansson is a C JSON library which doesn't depend on other libraries, so if like me you need something to run on Android's NDK which doesn't support STL, you want to be using this.
http://www.digip.org/jansson/

Since I find sample code to be the easiest way of picking up a new library..

Here is example code showing you how to parse your friends list from Facebook's graph api using lib_json.
 #include "json.h"  
   
 ...  
   
 std::string jsonResponse( reply->data.buffer );  
 Json::Value root;  
 Json::Reader reader;  
 const BOOL parsingSuccessful = reader.parse( jsonResponse, root );  
 ASSERT( parsingSuccessful );  
 if( parsingSuccessful )  
 {  
   const Json::Value jsonData = root["data"];  
   const uint length = jsonData.size();  
     
   for( uint i=0; i<length; ++i )  
   {  
     Json::Value text = jsonData[i];  
       
     std::string jsonStringName = text["name"].asString();  
     std::string jsonStringID = text["id"].asString();  
       
     // We can now do something with our Name and ID  
   }  
 }  

Here is example code showing you how to parse your friends list from Facebook's graph api Jansson.
 #include "jansson.h"  
   
 ...  
   
 json_error_t error;  
 json_t *root = json_loads( reply->data.buffer, 0, &error );  
 if( root )  
 {  
   json_t *jsonData = json_object_get( root, "data" );  
   if( json_is_array( jsonData ) )  
   {  
     const uint length = json_array_size( jsonData );  
     for( uint i=0; i<length; ++i ) // Iterates over the sequence elements.  
     {  
       json_t *jsonObject = json_array_get( jsonData, i );  
         
       json_t *jsonID = json_object_get( jsonObject, "id" );  
       const char *jsonStringID = json_string_value( jsonID );  
         
       json_t *jsonName = json_object_get( jsonObject, "name" );  
       const char *jsonStringName = json_string_value( jsonName );  
         
       // We can now do something with our Name and ID  
     }  
   }  
   json_decref( root ); 
 }  

Piece of cake :)

Saturday 2 July 2011

Social Poetry - First Prototype

I spend a lot of my life on Facebook, it's great what they've done with social networking. But, I've always found quirks in the user experience. I've been lately imagining a world where I could easily run through my friends lists, see the status updates and photo galleries in a minority report inspired way. It really irks me that such beautiful beautiful user generated data is only really being exploited by stupid social games like Farmville.. Grr.
I hate Farmville.

So last weekend I set myself the challenge of seeing what I could do with the Facebook APIs, and the following video presents the outcome.



I'm pretty busy this weekend, but I plan on getting at the very least a photo gallery viewer for all my friends.

Currently I'm targeting Qt for the prototype as I'm initially tailoring it as a Desktop Windows/Mac prototype. However as the codebase is based off OpenGL, I have got it running on iPhone and Android.

If you're interested in this project, let me know and I'll be happy to give you an early release.

Friday 1 July 2011

Freedom Square

This 4th of July the Americans won't be the only ones out in the streets with something to celebrate about..


The game that should not have been made will be available for one day and one day only.



Tuesday 24 May 2011

Tahrir Square II: He's Back!

Well it's finally done! After spending the last three weekends stoned out on the concept. I can finally play as a cybernetic Egyptian dictator.

Watch the trailer and give me your feedback on whether I should release this or not.

Sunday 22 May 2011

Best Hijabs Online

http://mh-couture.com

Well my friend runs a Hijab fashion website called MH Couture. For some reason Facebook decided to ban all links to her site.

So being an awesome software engineer, I figured I'd try to circumvent their ban.

First, I first tried using a URL shortner (goo.gl, tinyurl), but that didn't work.

I then tried to upload a webpage redirect using PHP by changing the header, but that didn't work.
 <?php
header( "Location: http://mh-couture.com" );
?>

Finally, I used a javascript redirect, and that worked.
<script type="text/javascript">
<!--
window.location = "http://mh-couture.com"
//-->
</script>


kthanksbye

Tuesday 17 May 2011

Music Gym

When I work out at the gym, I need my music to motivate me.

The first issue I have with the iPhone for gym music, is that whenever I want to change tracks, due to the touch screen, I'm forced to always pull the phone out of my pocket and touch the screen.

The second issue is that, whenever I switch tracks, they always start from the beginning so to keep my psyche up, I need to manually fast forward into the chorus.

To solve these issues, I put together..
MUSIC GYM!


(prepare to notice the awesome 3D interface)

When you go to the next track, it jumps straight into the chorus.
When you switch to 'Gym Mode', you'll be able to skip tracks by double tapping the volume buttons.

I use it at the gym now, and everyone thinks I'm on steroids because I've put on so much mass!
and that I'm on steroids. (not really).

Bonus Rage Comic

Friday 22 April 2011

Mosque Finder for Females

Generally over here in the UK, mosques tend to cater for male practioners of the Islam faith. Last year Faith Matters took a look at the top 100 mosques in England that meet 5 core criteria that Muslim women wanted to see within mosques in the country.

With the help of Faith Matters, I am happy to announce that the first iOS Mosque Finder app for Females is now available on the Apple App Store, completely free for a limited period.


Get it here
http://itunes.apple.com/app/women-in-islam-mosque-finder/id431515052

Sunday 27 March 2011

Egyptian Stock Market - Before and After Mubarak


There's been a lot of panic lately about the Egyptian stock market. When it last opened it's value dropped by 10% as we can see in the chart below.



However, if we look back a few years, you'll notice that latest drop in value is insignificant in comparison to it's overall devaluation under Mubarak's rule.

Saturday 26 March 2011

SoftPoetry - Mission Statement

SoftPoetry.com is open.

Our mission statement is simple.
We write software. We write games. We write poetry.