Wednesday, August 11, 2010

Meditation tracker technical post

In this post I'll try to keep current state of development of the aforementioned1 application.

Here's what I've got so far:

1. All screens layouts:
    a. main - done
    b. add - done
    c. practice - done
    d. preferences - done
    e. schedule - done

2. add/edit form
    1. resize/crop image - done
    2. save big and thumb in private storage - done
    2.5 add/edit db action - done
    3. handle edit params  - done
    4. insert/update persistence - done/done
    5. little icon/ big icon issue - done
    6. edit currentCount bug - done

3. main form
    1. smart id/url image display - done
    2. practice long-press context menu with
        a. open, - done
        b. edit, - done
        c. delete - done
    3. show statistic sub-text - done

4. practice form
    1. start practice - done/temp
    2. schedule - done
    3. edit - done
    4. update scheduled date sql - done
    5. big picture's not loading - done
    6. properly format dates - done

5. schedule form
    update date picker - done

6. icon - done

7. session form
    1. layout - done
    2. timer/clock action ? test in real dev - done
    3. handle mala count - done
    4. handle date change - done

BUGS:
    major:
        current count reset after schedule edit - done
        crash on save new - done
        last practice date is one month ahead - done
        crash after taking picture on NEXUS
        custom picture's thumb not showing in main list - done
        scheduled date is one day behind - done
        handle screen rotation for session - done

    minor:
        no-scroll list unjust height calculation
        prevent screen from lock during session - done

FEATURES
    custom mala size
    remove temp image from sd after shot



1 using this word is absolutely irresistible. I just envy the bureaucrats.

And here we go

Somewhat unexpectedly for me the first application I've published on android market is my the most recent side project. So, three weeks of relaxed development, some testing and here we go.


click me to install
Meditation Tracker for Android phones
Meditation Tracker helps you keep track of progress of your practices.
It comes with predefined preliminary practices group (can be switched off in settings). You can create your own practices and create practice schedule based on date you aim to compete practice or number of daily repetitions. It also contains a session timer - simply set timer to required length and you'll be notified when that time has passed. You can be notified by sound or vibration. Each session data (time, repetitions) is stored in database.1


My primary aim was to create visual and functional copy of the same application created for iPhones.

The big idea is to have several coordinated teams bringing same experience to users of different platforms. These applications are in no way ports of each other, they share look, functionality and hopefully feel.

So the Meditation Tracker.


Not much to say at this moment. As I said already this is test-release. In order to help testing - ... well use it and when it crashes, please post somewhere here a bug report including how to reproduce the issue and also the log file is found on the very root of your SD-card of the device (called meditracker.crash.log) - please attach it.

So far there's one known issue: on Nexus One there's an error after taking a photo so I'm really looking forward for error report on that.

Also have a look here. This should be the centralized place for both applications, at least I've talked to them and they find it a good idea.

1 This description is shamelessly copied from the iPhone's application. But intentions are good. I think it's not a bad excuse.

Friday, June 11, 2010

just use this one if you need per-thread smart(produces ints if can) parsing of json numbers:

trait SmartJsonNumberParsing {
  val doubleRe = """.*\..*""".r
  scala.util.parsing.json.JSON.perThreadNumberParser = { n : String => n match { case doubleRe() => BigDecimal(n) case int => BigInt(n) }}
}

Thursday, June 10, 2010

functional programming

Meanwhile "folding" is awesome. If you're from the non-functional-programming background, like me - learn one. Really blows mind as OO used to in the good ol' days.

blogging is about complaining isnt'it?

And here I come, ma.
Scala is a beautiful language which compiles to JVM's or CLR's byte code. Cool? Cool. But it also means that it inherits all the ... little things from those VMs. And Java's biggest thingy I know so far is type erasure.
Compatibility with old code? Great. Support code for win3.1 apps in XP? Perfect idea for marketing dept.
Before getting out of home, check your winkdoodle, because 400 years ago someone didn't and got bitten by the dog. It was huge.
Well, they run XP code in VM on Vista-shmista these days, okay, an option. What do we have in java these days?

scala> List[Pair[String, Any]]("a" -> 2) match { case (h :: t) if h.isInstanceOf[Pair[Int, Any]] => "match!" case emp => "nada" }  :6: warning: non variable type-argument Int in type (Int, Any) is unchecked since it is eliminated by erasure
List[Pair[String, Any]]("a" -> 2) match { case (h :: t) if h.isInstanceOf[Pair[Int, Any]] => "match!" case emp => "nada" }
^
res1: java.lang.String = match!
And those people disallow me picking in nose and call that language type safe? Yeah! Way to go for the backward compatibility!

Saturday, June 5, 2010

even though results seem to look same, refactoring is joy of getting things right, migration is pure pain in the ass of just making it work.

Monday, May 10, 2010

future now


they often say like "future now!" future is by definition the thing that never comes, an unreachable horizon. don't forget* this when they sell you future products.

* there's one exception though. the electric kettle was actually invented in year 3026 and landed in our time because of a simple mistake.