Git Product home page Git Product logo

barbecueboss's People

Contributors

arquicanedo avatar nilsabenson avatar nilsbenson avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

barbecueboss's Issues

How to best use large screens and powerful watches

Following up on my previous comment, for larger screens we can allow for a bit more functionality. Basically "growing into the device". I've had to do a lot of this developing web front ends that support desktop to mobile devices and mobile apps that support a variety of phones with different capabilities. The more the watch offers us, the more we can offer the user. What those things are I don't really know other than more refined layouts right now, but users want to see fancier stuff on their fancier devices. This is also going to require working out a "more complicated" build process so that we can keep memory usage low on low-ram devices and only build in the parts of the code that can actually be used. This would involve at least using monkey barrels and probably something along the lines of the #ifdef support discussed here:
https://forums.garmin.com/developer/connect-iq/f/discussion/7733/solution-for-line-by-line-mc-conditional-compilation/1075703#1075703

User feedback

Here an email I got today after the user saw the demo video of the current development version.

Suggestions/hopes ranked by priority:
Each line should contain
Name (S1, S2, etc is fine if you want to save space)

Already covered

Countdown to next flip maybe as "1:23 - 2" - for 1:23 to the second flip?

Already covered, though in a different format.

Countdown to total time (and if passed 0, continue but as count-up) - this is important: flip times may be a little off on being on time but you do not want to overcook in total.

The total time is an interesting thought. That would be another decreasing total time to the right of the flip time. But then it would be too much info on the screen. Even if we had the space I feel these are good for some but not all users.

Status could be coloured with unstarted timers having "start" instead of flip countdown

I think this is covered already. Unstarted are grayed out. Active ones are white, and critical ones are orange/red.

Settings
Set total time per steak and number of flips (so the app calculates flip time) - typically you would know the total more than the flip time

I find this interesting. I cook the other way around because by setting up the fire I know what temperature I will have, and how many minutes per flip. But I see how other users may look at the total cooking time, and don't care much about the per-flip time.

Allow naming of steaks, maybe just 2 chars so I can better keep track of matching the steak to the timer.

I've never used a text interface on the watch, but I think it would be awful. An alternative would be to give a menu with the most popular steaks: ribeye, nystrip, skirt.

Dynamic list so the steak nearest a flip would go at the top of the list. If you make a dynamic list, it does not matter if not all are visible at the same time. Chances are that the ones coming up would be.

We could experiment with it, but the dynamic list sounds very cumbersome to use. Perhaps the first row would be a fixed row with "New Steak", and all below it with the dynamic list. This could work.

Further comments:
You can delete the "Grill" text - takes too much time
I have a Fenix 6 Sapphire so maybe allow different numbers or different font sizes on different screens?

If we see users want more than 4 steaks we can remove. I agree the "Grill" does not add much value other than giving some context to the screen. The Fenix 6 is now nicely rendered with the new changes.

TimerSelectionMenu can be a picker

  • To get the same look and feel as the rest of the pickers
  • To pre-select the last time from the list without adding the "(last)" that is more of a hack

Vibrate

Implement vibration on flip start, stop, exit. Figure out how to do this in the developer forums and documentation.

After selecting custom timer the screen freezes in the Timer menu

Most of the time, when selecting a Custom timer. After clicking accept, the app freezes in the timer menu showing "Custom".

  • If the accept is pressed again (twice), it goes to seconds selection.
  • If press "up" it correctly selects "1" and switches the screen.
  • If press "Down" it correctly selects "59" and switches the screen.
  • If press "back" it switches momentarily to the minute selection but goes back to the timer selection.

App cleanup, SoC for controllers/UI, etc.

There's not an easy way to contact a developer on github so I'm opening this issue.

I have forked this project and made a large number of changes to it to both increase the functionality, and refactor things to make it easier to maintain/add features moving forward.

  • adds vibration and sound when flip timer ends
  • uses Menu2 for selecting times
  • adds a custom picker for the timer duration
  • changes activity recording to prompt when the application ends rather than between runs of the flip (to make it easier to manage multi-step cooking processes in the future)
  • general UI spacing adjustments

the branch I'm working in can be found here:

https://github.com/nilsbenson/barbecueboss/tree/cleanup-ui

let me know if you're interested in moving forward with this and I can submit a pull request or whatever. we can work out how you want to handle it. I'm not trying to step on anyone's toes, I just found the app interesting and thought I had a lot I can contribute.

DurationPicker fonts out of proportion for the Venu watch

I found this for the Venu (the only round-390). The custom PickerLayout.xml does not seem to take any effect.

I looked at the code for DurationPicker.mc. It seems that the text is hard coded and set to FONT_MEDIUM or not specified (which probably defaults in the FONT_MEDIUM).

The option may be to exclude Venu from the list of devices.

    var title = new WatchUi.Text({:text=>Rez.Strings.durationPickerTitle, :locX=>WatchUi.LAYOUT_HALIGN_CENTER, :locY=>WatchUi.LAYOUT_VALIGN_BOTTOM, :color=>Graphics.COLOR_WHITE});

    factories[1] = new WatchUi.Text({:text=>Rez.Strings.timeSeparator, :font=>Graphics.FONT_MEDIUM, :locX =>WatchUi.LAYOUT_HALIGN_CENTER, :locY=>WatchUi.LAYOUT_VALIGN_CENTER, :color=>Graphics.COLOR_WHITE});

No way to stop a timer once you've started it

Did a simple test last night. Grilled 2 salmon patties and toasted the buns at the same time. Setup two timers, one for the patties and one for the bread. Once the bread was ready the patties still had a few minutes to go but I couldn't stop the bread timer and it kept flipping.

Temperature sensing

Having temperature sensing would be a game changer. All the rules of thumb are good but nothing beats the temperature input.

I was investigating this a few weeks ago and the ANT+ protocol is interesting. This seems to be well supported by Garmin devices. https://www.thisisant.com/consumer/ant-101/what-is-ant. I wonder what are the practical differences between ANT+ and blueetooth are. The Bluetooth has range and there are several food thermometers using bluetooth for phones. There is currently no ANT+ thermometer for food out there.

Two interesting directions:

  • Piggyback on an opensource implementation of thermometer via blueetoth and relay that info from the phone into the barbecueboss app. (Unless new watches let you read bluetooth).
  • Develop new ANT+ thermometer hardware for pairing to watch. However, the set of people who enjoy grilling and have a Garmin watch may be very small.

Meat picker for custom steak names

I actually was thinking about this. For smoking, there are lots of rough guidelines for pork/poultry/beef/etc for cooking by time/temp/weight. I was thinking we could add a smoking calculator which would ask for the meat type and weight and calculate the time, recommended internal temp, and a "flip time" which would be for checking the cooking temp, water, wood, and finally the internal temp of the meat. We won't be able to support it on all devices (because of memory limitations most likely) but it would require a simple meat picker which we could also use for naming the items on the grill timer. Just a thought.

Cooking habits from users (all our install base)

I have noticed that Garmin allows the app to pull data from the watch. It would be interesting to pull the flip patterns. This could be used two ways: (1) to optimize the app defaults, (2) create a custom experience for every user. For this we need more data, but I think it can be done. One, we need more info about what the user is cooking. Two, we need a rating system (stars).

It would be interesting to know that as soon as I tell the app that I am cooking a ribeye, it pulls the best "recipe" based on prior successes you've had.

Maybe it is too much, but would be a cool feature.

Implement a background service like multi-timer to support long-term timers w/o app running

The multi-timer app has a clever way of using a background service with temporal events to keep track of long-running timers while the app is "closed".

Since app timers are killed when the app closes, we need a way to let something run similarly for extended periods and this seems to be the best approach. This service would be usable by the app, widget, or glance view to see the overall status of a smoking operation.

Discard activity option

The current interaction always saves. Implement a discard option.

save?-> (no) -> discard? -> (no) -> cooking
save?-> (no) -> discard? -> (yes) -> exit

Add new state to state machine.

Add support for rectangular devices

There's no technical reason why we can't, and by using the screen size layouts it's pretty easy to do. I have already mocked up experimental support for the Edge 1030 and 520 and it's really just tweaking layout positions to get it to look right and adding swipe support in addition to the hard button support.

Multiple timers

Feature requested by user. Have multiple timers to track multiple steaks.

Timer reset weirdness when changing times for an existing timer

I haven't been able to figure out the exact steps but this has happened twice:

  • Start with a custom timer
  • let it run, auto flip, etc
  • set to another custom value
  • let it run
  • try to set to a preset value (1/2/3/4/5)
  • it fails to set to the proper time and seems to set to 1 minute

This is the rough set of steps but I've only been able to reproduce it on accident while using the app so I'm not 100% sure what's happening.

Allow users to disable/enable GPS and activity recording

It may just be because I've been using the watch a lot for other things, but also may be related to making the app controller static but I've noticed heavy batter drain since installing and using the dev build.

Regardless of whether it's my usage or if it's a bug we should make a quick pass and:

  • add a shutdown() method to the controller that stops timers / cleans up event subscriptions / stops GPS / etc
  • call this method in the place(s) the app exits to make sure all timers and everything are stopped as the app closes

This should probably be called in the App class when the app is exiting.

Main screen optimization for round watch

Great idea, useful app. Would be ni e to optimize it for round watch for the main screen, but timer is visible and working great.

I'm trying to investigate the watch type this user has.

Thanks for downloading and using the app. In the upcoming release we've optimized the main screens for round and square watches. What watch do you use?

Smoking reminders to check the temperature / water / smoke

It would be really useful for smoking if the app could wake up periodically and let you know to go check the temperature, water status (for smokers with water), and wood status to make sure everything is good.

Another good check would be to warn the user 30 minutes or so before the timer is done to check the internal temperature of the meat so you know if the time needs to be extended.

Total time timer

I think this is useful for things you're cooking that don't require a "correct" flip time. Something that's not seared and doesn't have an internal temp to worry about. Think grilling corn, onion, etc. For corn you just need to make sure it gets rotated and cooked for half an hour or whatever and that it gets rotated regularly but you're not trying to cook it medium rare. I think this is probably useful but we may need to play around a little to figure out how to do it while keeping it fairly simple.

If something does not have the concept of flip (e.g., onion), total time is sufficient. The interface can ask first for total time, and then how many flips. If the flip==0 then this captures the onion case.

Remember previous flip settings

Now the new flip counter starts from the user-selected minutes menu. An improvement would be to start at the same time than the previous flip finished. This covers the case when the fire was too hot and instead of requiring 3 minutes only 2:30 are needed. The next flip timer should start 2:30 and not 3 as it was originally thought.

Reuse last timer picked by the user

Chances are that picking the last time is better than starting with a default value. This way is more natural to the cooking habits of each user.

I wonder if an app can write/read data from the watch filesystem. This would be a way to persist the last timer.

Timer Menu default times

It may be just me, but 1 minute does not do anything to food. I don't think I have ever used a 1 minute timer.

Now that we have the Custom Timer, I think we can consider reducing this list to for example:

  • Stop
  • 2
  • 3
  • Custom

Dynamic lists

Dynamic list so the steak nearest a flip would go at the top of the list. If you make a dynamic list, it does not matter if not all are visible at the same time. Chances are that the ones coming up would be.

This would actually not be difficult - you've already pretty much written it. We just need to encapsulate the meats & their status into a class (maybe a drawable) and onUpdate() we sort them and then draw them. Generally speaking I think this would be a good idea because we could both support potentially larger fixed-length lists of meats and down the road expand it to be dynamic on devices where it's easier to support.

Long Press

Is a long press available in the event handlers?

[Released version] Ongoing timer resets when a notification is received

I was grilling today and set a custom timer of 15:00. I was 3 minutes into the counter when I got a notification from WhatsApp. After the notification clears from the watch, the screen resets the timer.

I suspect this is also a bug on the [development] version. Perhaps with one of the methods of the BehaviorDelegate.

I will debug this from the source code and on the watch. The simulator does not cover the notifications.

Fenix 6 Layout

Now I have a stable version using the SteakMenuLayout.xml under the multitimer branch. For some reason, the FONT_SMALL for the Fenix6 is huge in the simulator.

The goal is to create a Fenix 6 layout that looks more reasonable that what it is now.

Below the screenshot on the f235.

Screen Shot 2020-06-02 at 10 28 14 PM

Color blind friendly color scheme

I like the way it is now, but something to keep in mind is color-blind users. Users always ask for colors to denote things, and it's nice to have but there are a lot of people out there who may not be able to distinguish between them. It's always a good idea to have color be additional and the primary method of visually notifying status should be something that doesn't require it. I'm not really sure how to do that here because the font sizes are difficult to work with. Also, I'm not color blind so I don't know how easily someone can distinguish what's there now. Maybe we just sit on any changes until we have a better suggestion. I think it's usable as-is.

Repeatable app crash (recovered from the logs) when "Stopping" a timer

ERROR: Unhandled Exception
DETAILS:
STORE_ID: 030305743c6e484a9bd8ce2ca0249651
CALLSTACK:

ERROR: Circular Dependency Error
DETAILS:
STORE_ID: 030305743c6e484a9bd8ce2ca0249651
CALLSTACK:
@pc = 0x100039e2
@pc = 0x10000405
@pc = 0x1000033d

ERROR: Circular Dependency Error
DETAILS:
STORE_ID: 030305743c6e484a9bd8ce2ca0249651
CALLSTACK:
@pc = 0x100039e2
@pc = 0x10000405
@pc = 0x1000033d

ERROR: Circular Dependency Error
DETAILS:
STORE_ID: 030305743c6e484a9bd8ce2ca0249651
CALLSTACK:
@pc = 0x100039e2
@pc = 0x10000405
@pc = 0x1000033d

ERROR: Circular Dependency Error
DETAILS:
STORE_ID: 030305743c6e484a9bd8ce2ca0249651
CALLSTACK:
@pc = 0x100039e2
@pc = 0x10000405
@pc = 0x1000033d

ERROR: System Error
DETAILS:
STORE_ID: 08760e1e16c74a61ab0c6c4a9b632b3f
CALLSTACK:
@pc = 0x100000c6
@pc = 0x1000003d

ERROR: System Error
DETAILS:
STORE_ID: 08760e1e16c74a61ab0c6c4a9b632b3f
CALLSTACK:
@pc = 0x100000c6
@pc = 0x1000003d

ERROR: Symbol Not Found Error
DETAILS:
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
Rez (initialize:57)
/Users/canedo/eclipse-workspace/barbecue_app/source/welcomeView.mc (onLayout:14)

ERROR: Symbol Not Found Error
DETAILS:
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
Rez (initialize:57)
/Users/canedo/eclipse-workspace/barbecue_app/source/welcomeView.mc (onLayout:14)

ERROR: Invalid Resource Specified
DETAILS:
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
T:\TVM\api\WatchUi.mb (setBitmap:1435)
T:\TVM\api\WatchUi.mb (initialize:1355)
Rez (WelcomeLayout:19)
/Users/canedo/eclipse-workspace/barbecue_app/source/welcomeView.mc (onLayout:14)

ERROR: Invalid Resource Specified
DETAILS:
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
T:\TVM\api\WatchUi.mb (setBitmap:1435)
T:\TVM\api\WatchUi.mb (initialize:1355)
Rez (WelcomeLayout:19)
/Users/canedo/eclipse-workspace/barbecue_app/source/welcomeView.mc (onLayout:14)

ERROR: System Error
DETAILS:
STORE_ID: bfbcb162f21549cb8185dad7e6dc4595
CALLSTACK:
@pc = 0x1000034c
@pc = 0x10001497
@pc = 0x10001248

ERROR: System Error
DETAILS:
STORE_ID: 08760e1e16c74a61ab0c6c4a9b632b3f
CALLSTACK:
@pc = 0x100000c6
@pc = 0x1000003d

ERROR: System Error
DETAILS:
STORE_ID: 08760e1e16c74a61ab0c6c4a9b632b3f
CALLSTACK:
@pc = 0x100000c6
@pc = 0x1000003d

ERROR: System Error
DETAILS:
STORE_ID: 08760e1e16c74a61ab0c6c4a9b632b3f
CALLSTACK:
@pc = 0x100000c6
@pc = 0x1000003d

ERROR: Symbol Not Found Error
DETAILS:
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
Rez (initialize:105)
/Users/canedo/eclipse-workspace/barbecue_app/source/WelcomeView.mc (onLayout:14)

ERROR: Symbol Not Found Error
DETAILS:
STORE_ID: 00000000000000000000000000000000
CALLSTACK:
/Users/canedo/eclipse-workspace/barbecue_app/source/MenuDelegate.mc (onSelect:29)
/Users/canedo/eclipse-workspace/barbecue_app/source/MenuDelegate.mc (onMenuItem:17)

Activity is created after the app crashes

The activity is recorded when the app crashes. It is not a big of a deal but during testing you end up with several failed activities in your history that you then have to delete manually.

I wonder if the app can have a method that is called before panic.

My phone speaks out the laps as things are flipped

During my test I had my phone with me. The watch + CIQ app on the phone decided it would be hilarious if they talked and phone spoke the laps out to me as I was flipping. I didn't even know this was a thing and I don't really like it. Need to see if we can disable activity voice prompts for this specific app.

Apache 2.0 License

I created the 'add-license-1' branch with the LICENSE (Apache 2.0) and the AUTHORS files waiting for your review.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.