My incessant ramblings
I recently attended the Pebble Developer London Meetup (November 27th) because I thought it would be useful for my dissertation to meet and speak with like minded Pebble developers.
The meetup comprised of a quick talk from a developer at Pebble who was responsible for the recent redesign on the developer section of the Pebble website, who I was able to speak with after the event and discuss the Pebble.
After the introduction a handful of developers gave quick talks on their apps and how the developed them, including idea creation and development tools they used. These tools included some custom made ones that the developers have made available to everyone for free. These aren’t really of much use to me because most of the features are now included in Pebble’s own web based IDE, cloudpebble.net which is great for me as I can develop very easily on my Chromebook or any other machine at university without needing to install anything or clone any repositories.
After the talks, we were encouraged to speak with other attendees where I met some other like minded developers and was able to show off my Driver Timer. This was useful for throwing ideas around and getting advice.
Overall I found the meetup to be a very rewarding experience and I was able to exchange contact details with other developers. The organising are thinking of doing the meetup on a monthly basis and I would be very happy to attend again.
The Endomondo (https://www.endomondo.com) Pebble application was recently updated and as a fitness app the tracks time, it shares a lot of similarity with my Driver Timer. The Pebble is a very limited device, the screen is very small and can only display black and white. With this in mind I have to consciously consider my design to be as simple as possible, but still easy to use. I really like the Endomondo design and thought I could use some aspects from it:
As you can see it has nice big numbers, not unlike my Driver Timer, but it also has text labels for each timer. This was something I had considered, but decided against it as I thought for the text to be readable it would have to be quite large and therefore look cluttered. But Endomondo was able to used a small font size and it still looked clean and usable, so I tried it on my Driver Timer.
Added labels for timers
I stuck with the same typeface as the numbers, Google’s Robot light, to keep some consistency and because of the reasons I stated before, it is designed for small, digital screens.
Tidied up some code
Removed more legacy code from origin repo.
The original repository I cloned for my Driver Timer used five separate code files, I was able to reduce this to a single code file and remove a lot of legacy unneeded code in this commit. This should make editing easier going forward and increase performance of the Driver Timer by requiring less resources.
Cleaned up actionbar icons
The original stopwatch project was first built during the Pebble SDK1 days (this is probably why the project would not build), the SDK has since moved onto version 2 which brought a lot of improvements. One of these improvements was the action bar layer (http://developer.getpebble.com/docs/c/group___action_bar_layer.html). Before, the project was using a static image for the button menu bar. This is fine but the action bar brings some improvements. Firstly, it makes applications on the Pebble keep a sense of unity, helping the user to familiarise themselves with new applications easier. It also gives the user a sense of feedback by highlighting the button’s action on the screen as they press the button.
Today I committed a quite a few updates for my Driver Timer, I will go over them one by one.
Added rest timer functionality [WIP]
Rest timer basic functionality is now operational.
Reset timer mapped to bottom button.
Drive timer stops when rest timer starts and vice versa.
Reset button resets rest timer too.
Saved state works for reset timer.
For the Driver Timer to be more useful, it needed to track rest time too. EU driving laws state that a rest period of at least 45 minutes must be completed before a total of 4 and a half driving hours.
This commit added early functionality of how it will work in my Driver Timer. It needs to be resettable by the user, the driver timer needs to automatically stop when the user puts the Driver Timer into rest mode and the app needs to remember how long the user has been resting if the Driver Timer has been exited. Due to a limitation of the Pebble watch, background operations (such as I am using in the Driver Timer when the app has been exited with the timers still counting) can only run up to two hours. This is save battery life and improve overall performance of the device as it only has limited resources.
Fixed persistent state for rest timer
Added vibrate alerts for rest timer (15 and 45 minutes).
Reset drive timer at 45 minute rest.
Added some EU rules to rest timer
If rest is less than 15 minutes, reset to zero when going back to drive mode.
If rest is more than 15 minutes but less than 45 minutes, reset rest to 15 minutes when going back to drive mode.
If rest is greater than or equal to 45 minutes reset drive timer to zero.
I added a vibrate alert for the user when the rest timer reaches 15 and 45 minutes. EU driving laws state that the 45 minute rest period can be split into two chunks, the first needs to be at least 15 minutes. The rest timer will reset to zero if drive mode is enabled before the rest time exceeds 15 minutes. If the rest timer is more than 15 minutes but less than 45 minutes, the rest timer will reset to 15 minutes if drive mode is enabled. If the rest timer reaches 45 minutes, the user is alerted with a vibration and the drive timer is reset to zero, allowing the user to drive for another 4 and half hours until rest is needed again.
Changed app icon and fixed post rest drive reset
I created an icon in Adobe Illustrator for the Driver Timer which I then exported as a .png. I used the universal drive symbol seen on a lot HGV tachograph units.
Changed button icons and order
Changed icons to mimic typical tachograph buttons
Up until this point, the original stopwatch icons were still being used for the button menu. I created some icons for the buttons and rearranged the order to fit with how the different timers were displayed on the screen.
Fixed drive button behaviour
Previously needed drive button to be pressed twice after a fully completed rest period.
The drive button was required to be pressed twice after a full rest period to change the mode back to drive. This was because the first press would reset the rest timer and the second press would start the drive timer. I found this was not very user friendly or intuitive, so I combined both actions to a single button press.
Removed/commented out a lot of legacy code
Lap code not needed for driver timer.
The original repository (https://github.com/Katharine/pebble-stopwatch) which I used as a starting point for my Driver Timer has a lot of functionality I did not need. This included a lap timer function which I removed the majority of in this latest commit.
Change typeface and size
Changed number typeface to Google’s Roboto Light and increased the font size to make better use of the screen width.
Some UI improvements, increased font size and font change to make it easier for the user to see the times. I chose Google’s Roboto font (http://www.google.com/fonts/specimen/Roboto) because it was designed for small digital screens (it is the default font for the latest versions of Android) and it is also free and open source. Also to tie it in with my final project, which will home automation via Google Glass. Google Glass runs a custom version of Android, and also uses the Roboto font.
Today I tested my Driver Timer application in a real world environment while I was driving at my part time driving job. I discovered a couple of bugs in the application which I fixed afterwards.
Fixed continuous vibrate alert
The vibrate alert wouldn’t stop because I had it set to alert the driver when he reached four and a half hours driving time. I also had programmed the timer to stop at four and a half hours but not reset so the user could see the time, thus the when the timer stopped it was perpetually four and a half hours. My fix for this issue was for the alert to vibrate at four hours, twenty-nine minutes and fifty nine seconds.
Fixed incorrect seconds for vibrate alerts and removed unnecessary hours display for rest time placeholders
For the thirty minute drive time remaining alert I had incorrectly worked out when this should alert the user, so this was fixed. For the place holder rest time I also removed the hour digits because the maximum rest required is just forty five minutes, so hours are not needed.