Saturday, January 16, 2016

Timely For Android In Beta

After using the web ui for timelyapp for a while, I got fed up with the "IOS only" policy. So I made my own client using the api provided by timely. So if you want to track your time in timely using android, you are more than welcome to join the beta! Get the app using this link:> Cheers!

Friday, December 4, 2015

Android installation issue, errorcode -505

Recently I have dealt with some installation-issues for an android app:

1st failure, duplicate permission

11-26 17:39:40.730 10166-10166/? E/Finsky: [1] PackageInstallerImpl$2.onReceive: Error -505 while installing com.something.else: INSTALL_FAILED_DUPLICATE_PERMISSION: Package com.something.else attempting to redeclare permission com.something.else.permission.C2D_MESSAGE already owned by com.something.else
11-26 17:39:40.730 10166-10166/? W/Finsky: [1] InstallerTask$3.installFailed: Install failure of com.something.else: -505 null
: This is probably due to an install of the same application on a different profile on your phone. Either make the user uninstall the app for ALL profiles on the phone or rename your C2D permission. This can be done without breaking the gcm-funcitonality by adding a middle-fix between your application-id and C2D_MESSAGE. In my case I renamed "com.something.else.permission.C2D_MESSAGE" to "com.something.else.permission.e.C2D_MESSAGE"

2nd failure, gms bug

 W/PackageManager(1007): Can't install because provider name (in package com.something.else) is already used by com.quoord.tapatalkpro.activity
: add applicationId to the main flavour of your build. Even if it is defined in AndroidManifest.xml, other libraries just reads the build.gradle file. If it is empty it will clash with other applications doing the same thing.

3rd failure, same name as provider in other(random) app

: change authorities of your provider since it has the same authority as a random other app you have installed. E.g. add ${applicationId} as a prefix to your authorities where you declare your provider in the manifest like this:
            android:writePermission=".commonmanager.write" /

Thursday, November 19, 2015

gradle maven-publish credentials

Make your gradle script publish to internal repo by setting password and username as follows:
apply plugin: 'maven-publish' 
apply plugin: 'java'

repositories { 
   maven { 
      credentials { 
            username 'myuser' 
            password 'mypassword' 
      url "http://myinternalrepo.intra" 

Monday, September 21, 2015

assertj java7

Do NOT use assertj v 3.x if you are developing for java 7 or android. You will end up with the error
error: cannot access CompletableFuture
Downgrade to assertj 2.x to fix it if you are using jdk7, use version 1.x if you are developing for android.

Saturday, September 5, 2015

Connecting to redis on heroku with golang

I have an app on heroku using the redis-addon provided by heroku ("Redis Heroku"). To connect to this instance using go-redis, I have found this to be a working solution:
  • The redis url is provided as an environment variable, REDIS_URL
  • To use redis from golang, I use redis-go.  I install this library by typing "go get"
  • Parse the url and extract the user before connecting(unless, you might end up with the error "dial tcp: too many colons in address redis://...")

Monday, September 22, 2014

gradle wsdl2java plugin released

In one of my earlier posts, I described how you can use gradle to generate java source-code from wsdls. This included writing your own tasks, managing dependency etc.

Now, I have written a plugin for this, available at the gradle plugin portal. Go fetch it while it's fresh!

Gradle plugin portal:
How to use the plugin:

If you have any issues, please register them at

Saturday, September 13, 2014

Dropwizard + gradle + heroku

Note: all source code is available at

Since the gradle build pack for heroku is still in beta, it is sometimes not straight forward to use gradle with heroku. This is how I did it with gradle, dropwizard and heroku.
  • Use gradle wrapper, the built in gradle in heroku is still using version 1.0-beta or something. When you use the wrapper, you decide the gradle version yourself. 
  • Use the gradle application plugin
  • For some reason, you must have the dropwizard as a submodule in your gradle project.
  • When deploying the app to heroku, you must tell the app to use the $PORT specified by heroku to listen to http traffic. You set this configuration by setting the WEBAPP_OPTS variable on heroku. This variable is used by the gradle application plugin when launching your java app. The value might vary, depending on your conf.yaml-file. 
heroku config:set WEBAPP_OPTS-Ddw.server.applicationConnectors[0].port='$PORT'
  • The Procfile must point to the shell script generated by the application plugin and the arguments for your application
web: webapp/build/install/webapp/bin/webapp server conf.yaml

  • The dropwizard application itself does not need to have any special config to run on heroku. You can even connect to a mongodb hosted at mongolab without any problems. 

If you want a working starting point for your application, have a look at my github project which is "heroku-ready". Clone it, change it, make it your own and deploy to heroku.