Tuesday, 9 August 2011

Experiences with the Android Market

I finally released WakeMe@ on the Android Market on 2nd August. I'm pretty happy with the state of it at the moment: everything works (as far as I can see). At least it does now, after two rapid updates. There are plenty more features that I want to add, but that's pretty much always the case with any software development. So now I get to discuss what it's like actually having an item on the market.
It costs $25 to be a publisher on the market: the reasoning given is to stop the market filling up with crapware. The problem that the market has with crap, though, is of single people releasing hundreds of tiny "soundboard" or similar apps from which they actually make substantial amounts of money, so having to pay $25 won't stop them. I guess, having said that, the fee is in place: maybe the market would be in a considerably worse state if it wasn't.
My ponderings about monetization really come to the fore now. Atm the app is free. Current plan is to do it the same as Gina Trapani does with her Todo.txt app: charge a small amount on the market, but have it downloadable for free on github. But only when / if it takes off at all: with less than 50 downloads atm, it's not worth it. I believe that anyone who downloads it now, free, will be able to update free forever.
The Google Developer Console is quite good. It doesn't update as often as some people would like, maybe twice daily, but that's fine for me. Indeed, it stops me checking it way more often than I should. It gives quite a lot of statistical analysis, and makes uploading and managing the apps reasonably straightforward.
There is something that is a bit of a pain, but it requires a little background. Every app on the Android Market must be signed by a key unique to the author, to avoid forgeries. This is fine, but the Google Maps API also requires a key that is generated from the same key as the app's key. The shuffling of keys at release time is a little tiresome.
But all in all, the process was fairly painless. Interestingly, only a few days after I released the app on the market, someone has forked my source repository on github: I'm presuming this isn't a coincidence, and that they got the url from the Market page. But that's what social coding and open-source is all about! If someone else can get the information they need from my source, then I'm glad I decided to go the open-source route.

Saturday, 9 July 2011

The Pain of Prettification

"Two months just to make it a bit prettier?" I hear you shout. Yes, and then some. I've made huge leaps, and most of the app is now themed, but I still haven't decided on the colour scheme. That said, I've not had as much time to play with it as I'd like either. As I'm using it more and more, I'm also realizing that there are some usability issues that need addressing, but I think I'd sooner go for an alpha release, and iterate as quickly as I can.
What I'm proudest of atm is the icon. I made it surprisingly quickly, and I still like it. I've shown here the progress from initial idea to final image: the final colour is not set in stone, but I do like it. I flirted originally with doing it in Google Docs, but when I actually tried the drawing thing there I realized it was nowhere near up to the task. I switched to Inkscape, and I would heartily recommend it. If anyone is interested I'm how any bits were done, just drop me a line. Nothing mind-blowing really though.

My current plan is to get WakeMe@ on the market by the end of July: that may not happen, but it should be close.

Monday, 25 April 2011

Style counts


The list of issues that need addressing before I put WakeMe@ on the market is now short. Just one. I need to make it pretty. I've already tidied up the location editing screen (left), but it's very plain: I would like a pretty colour scheme. The screen to track the location (right) has all the features I want (I think), but it's very much thrown together with no real thought.
The problem is that I'm no designer... I'll just have to see how it comes out, and iterate repeatedly until it looks good. Fingers crossed.

Sunday, 13 March 2011

Backing up the internet

Eclim is fabulous.

This post is purely to back up some information, because the original site seems to have disappeared. I found it from a Google cache, but that won't last forever. Here it is (apologies for the shoddy formatting):

Besides .vimrc setting, the complete flow to develop Android app using vim + command line is as follows:
  1. Start eclim by starting its server first. 

    eclimd&
  2. Navigate to project folder. (ex. ~/workspace), and start vim. Use :ProjectCreate to create new project
  3. Alternatively, navigate to existing project (ex. ~/workspace/your_android_app), use

    :ProjectTree <project name>

    to open existing one.

    But with the above .vimrc, vim/eclim should be able to automatically open the project tree view for you by just entering vim.  There is no need to follow this step, indeed.
  4. For editing, :FirstExplorerWindow to the tree view or Ctrl+w Ctrl+w, use :Tlist to open taglist

    Open new tab by <Enter> or open split window by <S>, when navigating in the project file tree view. 
  5. When :w, eclim will do :Validate for you, pointing out live syntax check and display suggestions like what you’ve got in Eclipse. 

    For auto-complete, Ctrl+x Ctrl+u as you’re used to. 
  6. To build project,

    :Ant

    Notes: if there is no build.xml, excute

    :!android update project -p .
  7. To start an AVD, use 

    android list avd

    emulator -avd <avd_name>

  8. To upload project to default emulator or device, 

    :Ant install
  9. To see LogCat debugging log, open another terminal, check available devices by 

    adb devices

    once you got what devices to look at, 

    adb -s <device_name> logcat
  10. To turn off eclimd, in vim, type :ShutdownEclim, or in command line, eclim -command shutdown

Tuesday, 1 March 2011

Fun with vim, fun with alpha, no fun with apks

I've been distracting myself for the last couple of days by installing eclim: it really is pretty amazing. I have yet to use it in anger, but I'm a vim user at heart: the last few months using Eclipse have felt like I was cheating (in a particularly inefficient way: a touchpad is even less efficient than a mouse).

The alpha testing so far has taught me a lot. There was one major bug that I had never seen, and a strongly desired enhancement (that I had planned, but much longer term), both of which are now sorted. It's also given me a good idea of how others will actually use the app: not necessarily the same way that I do.

But the biggest thing it has taught me is that it's not easy enough to install an apk file. When I tried to help my friend install it on her HTC Desire, it took much longer than it should, and we ended up having to install a file manager app from the market. So my next stage will be beta, and it will be on the market: it's so much easier to just send people a url that they can install from.

Wednesday, 23 February 2011

Alpha

Since I now a small legion of people (well, about 5) that I've coerced into helping me test my app, I figure I may as well make the apk public. So I've added it to the github downloads page. Feel free to check it out, so long as you leave comments telling me how well it worked!

Thursday, 17 February 2011

Revisiting monetization of open source on a pre-alpha high

I'm nearly ready to send my app out friends to test it. I should start compiling a list of people that have different phones...

Once this stage is done, and people are out there testing the functionality, then I need to prettify it. The previous prettification was pretty basic, so I need to go all out, re-skin buttons, etc.

After my discussion of how to money from open source a while back, another option came to my attention. In short, charge for the app on the Android market, but provide the app as an apk for free on the web. The way Gina describes it, the money that you pay for the market version buys you two things:
  1. Automatic updates via the market
  2. The warm fuzzy feeling that you're helping the project
This option sounds very appealing to me. It's making everything as hard as possible for pirates: what are they gonna do, give out the apk? I do that already! Apart from people who want to help the project, who will always pay, it relies on people's laziness: it's much easier if they spend a pound or two on the market, then the app automatically gets better over time.
My current plan is to start out with it for free, while I'm getting my friends to test it. Also so that any early adopters (who are bound to have a rough time, there will be bugs!) don't have to pay for it. When do I switch to charging? That will depend on how much take-up there is, I guess.

Saturday, 22 January 2011

References in Source Code

I've made quite a bit of progress: I've made my app more and more usable. Hopefully in a month or two I'll be ready for alpha testing.

But this post is about something completely different, about something that I haven't talked about yet here (or anywhere actually). Maybe it's the academic in me, maybe the obsessive-compulsive, but I'm planning to publish alongside my app references to all the open-source code / other resources that helped me to code it. In fact, I've already started, but it's a bit slap-dash atm. I had been planning some sort of awk or similar based system so that I can put a particular keyword in my code, then a script goes through and pulls them all out later. But now I've started doing that, it's making my code look a little unsightly (there are some long urls out there).

What do people think? Is it necessary to reference at the point where the code was used? Or should I just keep my simple list (but maybe add a description for each of what I got from there)?

Saturday, 18 December 2010

Screenshot time

I've got the app to a certain point. The basics all work: it now handles a database of saved locations. I thought this would be a good time to blog with some very early screenshots. I should point out that the gui is only at "functional" level: it needs to be made pretty at some point.


Tuesday, 14 December 2010

Lack of provision

or
What To Do When getProviders Returns An Empty List

I rearranged some stuff recently, and afterwards, the app broke. After some digging, I discovered that it was because getProviders, which is supposed to give me a list of the types of location providers present on the device (gps, network, and so on), was returning an empty list. I ran to Google, which has very much been my friend throughout this, and discovered pretty much everyone saying it was because the permissions were not set.
But that can't be the case for me! It worked a couple of days ago!
So I faffed, looking into what other things it could be, but it pretty much all came back to that. So I checked my AndroidManifest.xml, and sure enough, there were the lines:
<uses-permission android:name="android.permission.INTERNET">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission></uses-permission>
So it can't be that. So I faffed a bit more. Eventually, I looked back at the commits since it worked. Oooh. There was one on the AndroidManifest.xml. That's suspicious. "Whitespace cleanup" you say? Well, nearly. Actually, I'd moved the permissions from outside to inside the <application>, where they're useless. So I moved them back, and all is well.
I'm blogging about it mostly because I swore I would, having dug so deep into the internet, and not found the solution to my particular problem, I wanted to post it for others to benefit from. So if you're reading this and you think the obvious problem doesn't apply to you, it probably does.
One beneficial side-effect was my discovery and first usage of Log.wtf, which, naturally, stands for "What a Terrible Failure".

Saturday, 6 November 2010

Next stop, DB/UI

Just a blog post to keep me thinking about things.
So I've got the basic functionality working, and I've actually used it "in anger" (i.e. I've got it to alert me when I'm approaching my destination). Naturally, once I've set it, I remember to get off the train anyway, but that's not the point. Interestingly, and surprisingly for me, I find getting it to find the location from the network the best. It uses very little battery (compared to GPS), and is reliable enough to detected location to within 1.5km or so (which is usually all that the app needs).
But now I've got to the stage where there is one thing missing: usability. This separates off into three things.

  1. It needs a database of previously saved locations, so you don't have to find the location every time (which can take 10-15 minutes, if the data connection is bad).
  2. It needs a UI which works the way people expect it to, rather than the way I threw things together to begin with.
  3. The alarm needs to be more configurable. At the moment it just sets off the default alert whenever the location changes to something within the specified radius.
I'm starting at the top and working down. Thanks to Another Android Blog, I've got a database installed in my app and working, but at the moment not actually storing any useful information. I think the next point of call will be the UI: I can't start storing / using multiple database entries without a complete change to the UI, so that's what's coming next. When I get round to it.

Incidentally, I don't know if this is the way these things are generally done, but I find that actually using my app on a semi-regular basis for what it's intended has kept me looking for the most important things to improve about it. I don't think the app would ever come about if it wasn't something I actually used. 

Sunday, 29 August 2010

Monetizing and Open Source

I would love to be able to go part time at my (currently full time) work and spend more time doing Android dev, but to do that I'll need to be making something out of it. Long term, I'm thinking about the monetization of Wake Me At and other Android development that I do.
There seem to be three options:
  1. Charge for the app
  2. Put ads on the app
  3. Ask for donations
The problem is, I'm a bit of an open source advocate. If we assume that everyone in the world is bad, and they are going to do their very best to get something without paying for it, then 1 and 2 are a problem. I can charge for the app, but then someone could just download the source code and get it for free. Likewise, they can download the source code, and remove the ads. Asking for donations is the only evil-proof source, but then the evil people just won't pay.

But I think people are both lazy and not evil. I think, I hope, that if I were to charge 99p for an app, it's not worth their while to go and download the source, compile, etc. Hopefully at least some of them will do it purely to support my work. Likewise, and possibly even more so, with ads (though I hate ads, as a general rule): hacking into the code to remove the ads won't be easy for non-programmers. I wonder if the source of the ad hooks will even be open-sourcable... it might have private information in it (though I would think that's unlikely).
Anyway, this is just me thinking out loud. All thoughts gratefully received.

Project One: Wake Me At

I realized (thanks to zabdiel's comment on my first post) that I hadn't actually posted on what my first Android app was going to be (assuming you don't count my funky live wallpaper: maybe I'll put that up here some day, might be useful to someone).

It's intended for train travellers (but could have other uses). It's intended to be the electronic equivalent of hanging a sign round your neck saying "Please wake me when we get to Nuneaton", but getting your phone to wake you with an audible (or otherwise) alarm, using its GPS or other location services.

There appear to be apps like this for the iPhone, but I'm deliberately not investigating too much: I'm going to do it anyway as an exercise in learning Android developing, and if it's very different to the other available apps it might stand more of a chance of getting noticed.

Code can be found here:
   http://github.com/spookypeanut/Wake-Me-At

Current state of the app is that you can click a button, and it pops up a map with your current location marked with a (rather too large) X. Still very early days!

Sunday, 22 August 2010

It begins (a little late)

I felt I should have a blog about my android development, so here it is. When I created it, a few weeks ago, I thought Android development was going to be very quick and straightforward: it probably would be, but my Java is *very* rusty, and I'm rapidly coming to the conclusion that I don't learn new languages / apis / tools as easily as some. I'll get there, but it's gonna take me longer than I had hoped. Anyway, in the meantime, here's a link to the github repository of my first app, in case you want to follow my (slow) progress.

http://github.com/spookypeanut/Wake-Me-At