2010-12-21

(EN) GPL/CNG Price-Reporter updated




I had a few quiet hours at my familie's place in the days before Xmas while everybody else was off to work.
So I implemented parsing of opening hours into my GPL/CNG price-reporter app for Android.
I also found a few copy&paste bugs when OSM was used as a map.

(EN) PhoneCall for DolphinHD v1.1 / screenshots forced on Android market




I finally made the now required 2 screenshots, to upload "PhoneCall for DolphinHD
v1.1
" to Android market.
When I uploaded v1.0 no screenshots where required.
Even if they where, that was just enough content for 1 screenshot in such a trivial browser-plugin.
Namely to show how it added a call -icon next to a phone-number in a website.
V1.1 luckily now has a settings-page, so there is some content for a second screen shot.

Strangely Google still does not offer to upload localised screenshots.
Must screenshots will contain text and people regularly cannot make
any sense of text in a language they don't speak. Fact of life.


2010-12-17

(EN) Article in Autogas-Börse about my Android app




Cool, Autogas-Boerse.de wants to do a short article on my GPL/CNG Price-Reporter.
I just sent them some new screen shots, the apk and a lot of notes on it.

Cool.
Die Autogas-Boerse.de will einen kurzen Artikel über meinen LPG/CNG Preismelder bringen.
Hab denen gerade Screenshots, apk und viele Stichpunkte geschickt.

2010-12-16

(EN) Working with Andoid Dalvik Bytecode

Wow...
I tried cracking my own licensing-code last night and I got the hang on coding in Dalvik bytecode and smali.
Compared to working with Java-bytecode smali is super easy to understand.
With a dalvik command-reference open on another screen it's not THAT much different then coding in Java.

2010-12-15

(DE) LPG-Preismelder kennt jetzt Rabattkarten

Neu in Version 1.6.0:

Bei Tankstellen welche eine "Kundenkarte" in den Öffnungszeiten erwähnen,
läßt sich ein Rabatt eingeben.
So muss man nur die Tanken für die man eine Karte hat nicht noch alle
extra antippen um die Günstigste zu sehen.

Muss noch in's Französische übersetzt werden und welches Wort
sich in anderen Sprachen dafür in der Datenbank hier etabliert hat
ist noch nicht klar. Geht also erstmal nur in Deutschland.


* Forum-Beitrag

2010-12-12

(EN) Dual Licensing

I just uploaded "Show Firefox Passwords v1.12".

This will be my first app to test the waters of a dual licensing library.
It will work with Android Market Licensing AND AndroidPit App Center licensing.

I'm not totally sure about the first one working on Android <2.2 because
the Google code makes extensive use of android.utils.Base64 wich is only supported on API-level 8 and up.

I also extended the Android Market and AndroidPit AppCenter licensing-code to add translations to the very simple AndroidPit -code, cryptographic checks against tempering and set some traps so the code would detect if it has been tampered with the most common techniques.


Update: After a few weeks there where no complains. The app still sells fine. So everything seems to have worked well.
I also tried to hack a not-obfuscated version of it myself in Android Byte-code and compared to other apps (that I legitimately own) even though it's not obfuscated it's a pain in the *** to crack the licensing library itself.

2010-12-10

(EN) crashes in eclipse

https://bugs.eclipse.org/bugs/show_bug.cgi?id=283503

It's nice to know that the bug you're experiencing
and that keeps you from doing any work at the moment (Linux X64 here instead of the reported Windows 32 in the ticket)
is already known and fixed...
You just don't get that fix via auto-update for quite a while.
GRRRRRRRRRRRR

2010-12-09

(EN) Welcome to the Swype Beta!

I did not expect this to ever happen. :)
Thinking Swype IS the best one-hand usable keyboard (Hold phone in your right hand and swipe/type with your thump)
out there.
The apk certainly IS huge but can be made smaller with some hacking using Apkmanager.

(DE) DolphinHD plugin für Mozilla Weave Version 1.5.1

(Zur Ausnahme mal wieder ein Post in Deutsch. Ich hab grad schlicht nicht die Zeit den Text aus Android-Pit unten noch schnell zu übersetzen.)

Nach der 2 Zeilen-Email in verkrüppeltem Englisch hatte ich schon befürchtungen
aber dann ist doch ein fast erstklassiger Bug-Report von einem User gekommen.
Man wird doch immer mal wieder angenehm überrascht. :)

Bug in 1.5 gefunden:
Wenn noch nie auf einem V3 -Client (V4 nicht betroffen)
Tabs oder Bookmarks zum Syncen Aktiv waren, existiert
für Tabs oder Bookmarks kein Key auf dem Server und das
Login schlägt fehl.
Version 1.5.1 mit einem Fix ist gerade bei Dolphin zum Signieren.

(EN) My experiences with Android Market

So in the last few month I had a number of new apps put in Android Market.
Here I'm trying to document what I learned the hard way regarding best practices.

My background

I'm a professional software developer and consultant doing every kind of Java, C# and even sometimes assembler you can think of.
I did write dozens of large and small commercial and free (as in freedom) desktop, embedded and mobile (Windows Mobile, Blackberry, Linux GPE and Qtopia) applications before coming to Android. I contributed to hundreds more.
On Android I am writing small apps with the motivation of either fulfilling a personal need and/or to learn my ways around new APIs for my day job.
If an app is too useful and was too much work to just give it away for free, I'm offering it for a trivial token price.
1-5eur is no money to even think about. It's a small token to appreciate the work and dedication of the developer.

How market behaves.

Market only works with credit cards.

Being a US company this may be hard to get for Google but people don't have credit cards.
They are simply not as common in many parts of the world as they may be in the US.

You can only have one version of an app in the market.

No beta+stable, no downgrade to the last version if the current is found to have an issue, nothing.
Serious limitation compared to developing applications and publishing them on Sourceforge&co.

Comments are forever.

Comments are not in any way bound to the version that is commented on.
They don't even have a data associated with them.
The username shown cannot be contacted at all.
Users never go back and update a comment they once gave.

Free apps can never get payed.

For some obscure reason you are not allowed to make a free app payed. ever. period.

People never visit the website.

Forget about the website you enter for every product as Google tells you to.
People aren't going to visit them, least of all are they going to give feedback there.

Market licensing is market only

Android Market licensing only works with Android market. AndroidPit has a lib that works with Android Market and AndroidPit App Center but that's it.

Market Licensing is bare bones only.

There is no management-UI for the developer,
there is no buy A get B free,
there is no buy download A for 30 days then buy,
there is no but a reduced price 5 seat license,
there is no floating licenses,
nothing.
It's just a bare bones replacement of copy protection and even in that function it's way too easy to crack.

Best practices.

Release early, release often does not work here.

Coming from Sourceforge&co you may be used to releasing a first version of your work as early as it's basically working. Then collaborate with users to improve it one step at a time.
This does not work on Android Market.
Comments and Ratings for every damn, exotic bug that you could never possibly find without releasing it and having users with that exotic device/account-version/usage-scenario point it out are going to stay. ..forever.
You need good ratings on the very first version for there to ever be users so that a bad comment can have the chance to scroll down at all.
Problem is: only very few people comment at all and the ones who are dissatisfied (even if they are expecting miracles) are the ones most likely to comment.

Cheap Beta, then pricy Release does not work.

So I tried this. Make it clear that it's a beta, that you get it at a fraction of the later price in exchange for bug reports and that the price includes all upgrades to the final versions.
...does not work. People are so used to getting things for free that they complain why the beta is not free.
Problem is: You can't make it free because you'd never be able to make a free app payed later.

Ad-supported apps don't pay off

Compared to even the worst running, cheapest payed apps, these don't pay off at all.
Users are so trained to not click on ads and basically don't even recognize their existence in their field of view anymore.
Just forget about it.
Ads do work on websites that are large and where users spend quite some idle time on the site but not in apps that users open to do a single task on the go and then instantly leave or turn off their phone.

Light+Pro does work

Having a simple "light" version of an app for free and a much better "pro" version payed does work.
However this can only work if there is so much functionality that the free version is still useful at all.
It also more or less requires you to show glimpses of the added functionality of the pro -version in the free one, so that people see what they are missing on.

Conclusion.

Due to limitations that are just ridiculously far from the reality, for single developers you have to sit quietly in your chamber, write an app, test it, update it, improve it, test it in every scenario you can possibly think of, include error-handling with special, translated error-messages for everything that could ever go wrong and everything that can't go wrong.
Then and only then, release it.
Of cause that would mean that your app will never reach that point and thus will never be released at all.
Making any thought about the market itself redundant.

What I didn't try.

I did not try a donation-button or somehow integrating Flattr into apps yet.


* discussion about this post on Market Help Forum (english only)
* Diskussion über diesen Post auf AndroidPit (German only)
* My wiki with Android projects
* All my apps on AndroidPit

2010-12-08

(EN) Clickable Telephone-Numbers

Today, before work I started work on a new DolphinHD-plugin for Android.

I'm tired of copying telephone-numbers out of web pages, so I make them clickable.
It's my first step with Website<->Java Android App interaction using the javascript access to running web sites.

Update: Dolphin Labs signed it and it's in Android Markt now.

Wiki-Page: DolphinHDPhoneCall

(EN) late night hacking - OpenCellID for Android

Last night I had an idea how to make
my OpenCellID-client for Android better.
Got out of bed and shortly after there was a new version 1.1.1 .
If you have no API-key it will now upload the cells with mine.

(DE) jmstv-ablehnen.de

"Wir lehnen den #http://www.blogger.com/img/blank.gifJMStV ab - und ihr?"
http://jmstv-ablehnen.de

Dieser Staatsvertrag is so ein Rotz.
Nur fürchte ich schaffen wir es nicht mehr ihn zu stoppen.
Merken diese Pfeifen nicht was sie da machen?

2010-12-05

(EN) "Firefox Sync for DolphinHD" on Android supports V4

2 nights and 3 days of hacking.
Now it's done! :)

"Firefox Sync for DolphinHD" version 1.5 now supports storage format 4
and SimplifiedCrypto.

It will be released IN THE NEXT DAYS.
(I need to find a way to test that it still works with V3 somehow.
Then Dolphin Labs needs to sign it.)
* existing versions are always upgraded through Android Market or
AndroidPit (whereever you got it from)
* V3 and V4 are both supported
* V3 passphrases are upgraded to V4 syncKeys if the server is on V4
* it is prepared to use storage api 1.1 but does still uses 1.0 for
the time being
* J-PAKE is not implemented yet as it does not exist in Firefox yet
and thus cannot be tested.
* I'd love to support sync-key input via QR-code but that proposal is
not going to make it into Firefox

help-page with feedback and instructons:
https://sites.google.com/site/firefoxsyncfordolphinhd/

my development notes:
http://sourceforge.net/userapps/mediawiki/marcuswolschon/index.php?title=Projects/AndroidDolphinHDFirefoxSyncPlugin

app on androidPit:
http://www.androidpit.de/de/android/market/apps/app/biz.wolschon.android.dolphinhd.firefoxsyncplugin/Firefox-Sync-for-DolphinHD

Both "show firefox passwords"-apps (free and pro version) will be
updated to support storage format 4 in a few days. They are small
helper-apps to instantly look up a passwort, bookmark or tab on the go
without setting up a full browser and synchronize it regularly.


Update: it's in Android Market now.

2010-12-04

(EN) Firefox Sync for DolphinHD and storage format 4

I hacked away since yesterday evening and now I can finaly log in and see the tabs of other computers using the new storage format 4 and a sync-key upgraded from an existing v3 passphrase.
J-PAKE does not exist yet and QR-codes are never to be implemented in firefox, so I guess I'll have to add a way to enter new syncKeys by (on screen) keyboard.

Hmac-computation again is a problem. It works but produces the wrong results.
I am still not sure about the new key-storage. Getting the default key is straightforward but correctly handling multiple keys is not obvious.

I'll keep on hacking tomorrow.

http://sourceforge.net/userapps/mediawiki/marcuswolschon/index.php?title=Projects/AndroidDolphinHDFirefoxSyncPlugin

2010-12-02

(EN) DolphinHD plugin for Mozilla Weave Version 1.4

Version 1.4 is not in the Android Market and on AndroidPit-Market.

Took the oportunity to email the people who have installed and then canceled
the older versions. With Checkout you can at least email them. Even if you
don't know and relation between nick in comments and anonymized email+customer.

2010-12-01

(EN) DolphinHD plugin for Mozilla Weave Version 1.4




My Weave-Plugin for DolphinHD on Android is ready in version 1.4 .

With lots of help from the mozilla-guys I got the HmacSHA256-code running.
With lots of trial and error and I managed to syns tabs back to the server.

I also fixed some FCs on Android <2.2 and added some new config-options to disable syncing tabs and hide the icon to open tabs from other computers. (And of cause a setting to set the name of the browser-instance to be shown in the tabs-list.)

I also found some small shortcomming in the Mozilla-code and some trivial things that differ between the protocol-specification and how Mozilla implemented it.