Notices


Reply
Thread Tools
Posts: 262 | Thanked: 315 times | Joined on Jun 2010
#1
Hi all,

I've been developing a PyGTK app called Habit Jewel (the name is a homophone of 'habitual') for a few weeks now, and it's available in extras-devel.

Habit Jewel tracks your habits for each day, motivating you to reach your goals by recording how often you fulfill the habits you have set up for yourself. The idea is that with the knowledge that you are recording the results you will be motivated to make time to do the habits.

Basically you define some habits and for each one specify how many times per week you want to do it, i.e. a quota. Until you reach this quota for the current week, the habit will display in Habit Jewel every day. Once you reach it it will drop to the bottom of your habits list (with any other fulfilled or missed habits) until the next week.

Also, habits can be partially completed in increments of 25%.

To set a habit's completion status for a given day, tap and hold on the checkbox icon at the far right of the habit and then select 'Done', 75%, 50%, 25%, 'Missed' (meaning you didn't do it), or 'Clear' ...

The difference between 'Clear' and 'Missed' is that clear resets the habit back to an unknown status - you may have done the habit but not gone back and updated it in Habit Jewel.

On top of this, for habits with a target duration (e.g. 'Practise violin for 20 minutes') there is a built-in countdown timer that will use the selected habit's duration by default. You can also change the countdown time to do more or less. If the timer is started it will count down and then play a sound to notify you.

The daily habits view, which is the main screen, shows some mini bar graphs beside each habit, showing how many times you've completed the habit in the last 7 days. There are also some numbers alongside the habit description: the overall completion total for the habit for the current week / the quota you'd like to reach : the day number of the day currently displayed (Monday = 1, Tuesday = 2, etc).

Tap and holding on the habit description itself allows you to edit the habit, pause it (make it go away - e.g. if you are on holiday), delete the habit (but nothing is really every deleted - see the Master Habits List), etc.

I plan to build the Stats page that is on the main menu soon, which will show some numbers and graphs.

I also have a plan for each habit to be linked to a specific goal, so you can create the goals and then link the habits that support them. This will mostly be useful for stats purposes, and will be optional.

I've also pondered going in the direction of gamification later, whereby you might get some kind of meaningless but fun virtual 'gifts' or gold coins or other score in the application as you keep doing your habits.

It's somewhat beta at this stage, but should be fairly stable. I have made code changes so that the database schema should be automatically backed up and then upgraded to the version appropriate for the running code without any data loss.

IN CASE OF EMERGENCY ONLY!
Now that the schema upgrades automatically on startup if it's out of date, nobody should have to do this, but just in case.

If you have any issues starting the application after upgrading from a previous version, one thing you could do is to rename your database so that a new one is created.

Code:
mv ~/.habitjewel/database ~/.habitjewel/database.bak
CHANGELOG
## [0.7.5] - 2016-09-19
### Changed
- Ditched gstreamer for calling aplay via os.system() to try to fix battery drain issue

## [0.7.4] - 2016-09-18
### Changed
- Tweaks to timer to address potential battery drain issue

## [0.7.3] - 2016-09-15
### Changed
- Changed wording of Target time label on timer page to be less ambiguous

## [0.7.2] - 2016-09-15
### Changed
- Fixed crash when exiting timer that is running

## [0.7.1] - 2016-09-13
### Added
- Icon on timer start/stop button

### Changed
- Nicer formatting and colouring of habits in day habits list
- Other display tweaks
- Moved change log from main script to CHANGELOG.md (this file)

## [0.7.0] - 2016-09-12
### Added
- Countdown timer with audible alarm, accessible for time-based habits on current date only

## [0.6.1] - 2016-09-11
### Changed
- Refactored history gathering
- Tweaked mini bar graph display
- Disabled main menu Stats button (for now)

## [0.6.0] - 2016-09-11
### Added
- Mini bar-graphs next to each habit which display completion status for previous days

### Changed
- Created HabitJewelDB class and moved all database functions there
- Added schema version check and upgrade script for schema vers 0.4 and 0.5
- Bumped minor version number due to schema changes
Attached Images
    

Last edited by Xagoln; 2016-09-19 at 23:41.
 

The Following 15 Users Say Thank You to Xagoln For This Useful Post:
Fatalist's Avatar
Posts: 141 | Thanked: 190 times | Joined on Feb 2012 @ Barcelona - Spain
#2
It looks exactly the app I need in my daily life Thanks for developing it!
 

The Following 3 Users Say Thank You to Fatalist For This Useful Post:
Posts: 262 | Thanked: 315 times | Joined on Jun 2010
#3
I've now uploaded version 0.7.1 of Habit Jewel (see the first post for full details).

Notable changes:
  • Inbuilt countdown timer
  • mini graphs for each habit, showing completion history

The countdown timer is available by tap and holding on the checkbox, then selecting 'Open Timer'. The countdown time will default to the daily target for the habit, deducting some time if the habit has already been partially completed on that day. The timer will play a sound when the time is up.

The mini graphs simply show the completions for the last 7 days for each habit. Their colour will vary according to two things:
  1. whether they are in the current week (and so count towards this week's quota, and
  2. the percentage complete (the higher, the more green the bar will appear; the lower, the more yellow.

If you've been holding off installing due to my warnings about stability, now is a better time to install.

And if you have any suggestions for enhancements please let me know and I'll consider them.

I'm still planning to add a more indepth Statistics page and a few other things.
 

The Following 5 Users Say Thank You to Xagoln For This Useful Post:
Posts: 368 | Thanked: 975 times | Joined on Aug 2013
#4
Nice app. Intuitive, responsive and will be very useful.
The timer didn't work for me. Opening the timer and starting it didn't result in any timer progress and after pressing the backspace it crashed.
I can reproduce it (the rest seems to work fine).

For managing projects it would also be nice to add a fixed duration and / or completion date for a habit.
 

The Following 2 Users Say Thank You to t-b For This Useful Post:
Posts: 262 | Thanked: 315 times | Joined on Jun 2010
#5
Originally Posted by t-b View Post
Nice app. Intuitive, responsive and will be very useful.

The timer didn't work for me. Opening the timer and starting it didn't result in any timer progress and after pressing the backspace it crashed.
I can reproduce it (the rest seems to work fine).

For managing projects it would also be nice to add a fixed duration and / or completion date for a habit.
Thank you very much for your feedback.

I found and fixed the issue with closing the timer window while a timer was running. The updated package (0.7.2) is in the repos now.

I actually think the timer was running when you encountered the issue. It's just that during development I decided not to show too much in the way of animations while the timer is running, in order to conserve battery. The timeout which checks the remaining time/expiry runs only every 10 seconds. To give per-second countdown I'd have to reduce this to 1 second, I think. I didn't want to be waking up the CPU every second since I decided this type of measurement didn't need to be high accuracy/resolution.

The only visual feedback (apart from the button icon changing between pause and play) is that the horizontal slider moves as the time counts down, but you'll have to wait 1 minute after starting the timer to see that.

My reasoning was that we're supposed to be focusing on the task at hand, not watching the screen. When I get around to adding an Options dialog I may add the option for more immediate visual feedback from the timer though.

Re the fixed duration/completion date, I actually did design the database with that in mind, and in fact every habit has a start date and end date in the habits table. It's just a case of adding the UI options to manage these. All the database queries use the start date and end date correctly already, so it shouldn't be too much work.

And I still have further additions in mind for the next burst of coding.
 

The Following 3 Users Say Thank You to Xagoln For This Useful Post:
Posts: 83 | Thanked: 91 times | Joined on Nov 2015 @ NIgeria
#6
What an app!!! Any hopes for a Sailfish port?
__________________
Sony C6 > Sony Ericsson K310 > Sony Ericsson K750 > N70 > N73 > N81 > N82 > N79 > E7 > N9 > Jolla
 

The Following 2 Users Say Thank You to dameceno For This Useful Post:
Posts: 368 | Thanked: 975 times | Joined on Aug 2013
#7
Originally Posted by Xagoln View Post
The only visual feedback (apart from the button icon changing between pause and play) is that the horizontal slider moves as the time counts down, but you'll have to wait 1 minute after starting the timer to see that.

And I still have further additions in mind for the next burst of coding.
Tried the update and it is indeed working fine. Thanks!
The only thing that I think is still confusing is that the Target: is not changing - it keeps mentioning "xx minutes (not started)"

Great to see you are planning to expand the program. I love these kind of time management tools and the more options the better
Another thing I like about the app is that the design is very finger friendly.
 

The Following 3 Users Say Thank You to t-b For This Useful Post:
Posts: 262 | Thanked: 315 times | Joined on Jun 2010
#8
Originally Posted by t-b View Post
Tried the update and it is indeed working fine. Thanks!
The only thing that I think is still confusing is that the Target: is not changing - it keeps mentioning "xx minutes (not started)"

Great to see you are planning to expand the program. I love these kind of time management tools and the more options the better
Another thing I like about the app is that the design is very finger friendly.
Yes, I was looking at it last night and realised that the (not started) really makes it seem like the timer's not doing anything. That refers to whether the habit is already partially completed for the current day, but I couldn't think of any alternative wording I was happy with so I've changed it to show nothing for habits that are 0% completed.

I uploaded 0.7.3-1 last night with that change, but I wasn't paying attention and uploaded it twice by accident. That build of the package seems to be unusable from the repos (doing apt-get update; apt-get install habitjewel gives an error about a file size mismatch for me). I've just uploaded a new build (0.7.3-2) to fix this, but it will take the repos probably 3-4 hours to make it available.
 

The Following 4 Users Say Thank You to Xagoln For This Useful Post:
Posts: 262 | Thanked: 315 times | Joined on Jun 2010
#9
Originally Posted by dameceno View Post
What an app!!! Any hopes for a Sailfish port?
I was planning to do an Ubuntu Touch port first actually. I will consider Sailfish (Qt-based, I presume). I can't make any promises as I have a lot of other stuff to do.

In fact that's a big part of the reason Habit Jewel came about - I tend to focus with laser-like intensity on my current project to the detriment of all the other things I want to do on a regular basis (besides washing and eating though, well for the most part... )
 

The Following 3 Users Say Thank You to Xagoln For This Useful Post:
Posts: 262 | Thanked: 315 times | Joined on Jun 2010
#10
I noticed that when I left Habit Jewel running full time, my phone would go from almost full to almost empty battery overnight.

This would only manifest after having used the countdown timer, allowing the time to expire so the sound was played, and not having closed Habit Jewel after.

I believe I've tracked this down to the use of gstreamer & pygst to play the countdown timer sound. I have now changed to using /usr/bin/aplay, called via os.system(). No more battery drain for me.
 

The Following 3 Users Say Thank You to Xagoln For This Useful Post:
Reply

Tags
habits, motivation

Thread Tools

 
Forum Jump


All times are GMT. The time now is 23:33.