Original Post By Tecnorata from Merida, Venezuela.
Endomondo Pro is an application to monitor and keep a very detailed record of any sport practiced using any phone with Android OS, with this we can measure distance, time, speed, calories consumption and other values that we are interested, I've been using to monitor my mountain bike outings but can be used for other sports, is very simple to use in the app market can get the free version which lacks some features available, such as energy saving function or the Instrument connection via bluetooth as Cardio or cadence meters up and here I leave the pro version that is complete in all its functions Endomondo Pro installed After we find a small green silhouette similar to PacMan in our App Drawer as is then the only downside of this application is not fully translated into Spanish, but this should not pose problem for anyone, since the application is very intuitive to use and easy to understand.
Here you can see the main application screen, clicking on the various fields can be selected readings as well as data that we want to enable the reproduction of music while we exercise as well as select the sport and how we do it is very important to enable GPS to make a proper record of the route traveled, then the GPS is hooked to the satellite readings and track logs are accurate.
After this she will ask registranos either by email or using our facebook account is something that takes a minute or two. or we can enter without registration, we recommend you register the application.
pressing the first field we can select the sport among many pre tabi as well as certain we can create our own activity if the list is not
clicking on any of the four data fields you want to register can choose as you can see in the image below
clicking on the center of the screen you can choose which goal we want to register either a basic training, complete a route or a manual entry that is a very particular taste of each user
In the field with a musical note can enable playback of music stored on our SD card, if you have more than one media player program installed which we wish to ask us and whether it is the one used by default by the program, I I recommend the default music player android since it is lighter and does not consume so many resources in memory and other more specialized players, a common mistake is to turn the player apart before starting the application, if we do that the phone will restart in the middle practice after running out of memory to handle both processes Endomondo requires GPS and mobile networks to function
countdown field can select how long must elapse before the application starts monitoring, missing 5 seconds a voice warns, is that you can install the library tts in Spanish but still I have not been able to operate.
After completing an activity we see a very detailed history of it, and if you want in the advanced settings you can choose to raise our practices to our online account to finalize them. practices we can see by date.
if you select a practice you can see an outline of the route traveled on google maps, if you were using the music player will see musical notes indicate the songs played along the route and if you click on a note we will see that song is that moment was playing
if you click on the upper right you can see a log mile after mile of the route traveled in the log you can see the part-time and total kilometers traveled as well as the slower and fast space travel indicated by a turtle and a hare. clicking the globe icon returns to the map display.
Below you can see the Advanced settings field where we can change our weight if we want the phone to connect via bluetooth to the instruments you want, heart rate monitor, cadence meter steps, etc., and if we use the controls on the headphones to stop or start the application, we can also choose whether we want the application to detect when we are stopped and the recording and restart it automatically if you choose this option when this happens a voice will let us know, we can also choose whether we want to hear words encouragement and if we use the energy saving mode, when using this mode is lost precision in recording the route using the GPS in favor of extending the duration of the battery, but we can choose units that want to make records, if in kilometers or miles.
I just hope you all will find useful this application to register their sports.
MOD EDITED: WAREZ REMOVED
INFRACTION ISSUED
Richards_234 said:
Original Post By Tecnorata from Merida, Venezuela.
Endomondo Pro is an application to monitor and keep a very detailed record of any sport practiced using any phone with Android OS, with this we can measure distance, time, speed, calories consumption and other values that we are interested, I've been using to monitor my mountain bike outings but can be used for other sports, is very simple to use in the app market can get the free version which lacks some features available, such as energy saving function or the Instrument connection via bluetooth as Cardio or cadence meters up and here I leave the pro version that is complete in all its functions Endomondo Pro installed After we find a small green silhouette similar to PacMan in our App Drawer as is then the only downside of this application is not fully translated into Spanish, but this should not pose problem for anyone, since the application is very intuitive to use and easy to understand.
Here you can see the main application screen, clicking on the various fields can be selected readings as well as data that we want to enable the reproduction of music while we exercise as well as select the sport and how we do it is very important to enable GPS to make a proper record of the route traveled, then the GPS is hooked to the satellite readings and track logs are accurate.
After this she will ask registranos either by email or using our facebook account is something that takes a minute or two. or we can enter without registration, we recommend you register the application.
pressing the first field we can select the sport among many pre tabi as well as certain we can create our own activity if the list is not
clicking on any of the four data fields you want to register can choose as you can see in the image below
clicking on the center of the screen you can choose which goal we want to register either a basic training, complete a route or a manual entry that is a very particular taste of each user
In the field with a musical note can enable playback of music stored on our SD card, if you have more than one media player program installed which we wish to ask us and whether it is the one used by default by the program, I I recommend the default music player android since it is lighter and does not consume so many resources in memory and other more specialized players, a common mistake is to turn the player apart before starting the application, if we do that the phone will restart in the middle practice after running out of memory to handle both processes Endomondo requires GPS and mobile networks to function
countdown field can select how long must elapse before the application starts monitoring, missing 5 seconds a voice warns, is that you can install the library tts in Spanish but still I have not been able to operate.
After completing an activity we see a very detailed history of it, and if you want in the advanced settings you can choose to raise our practices to our online account to finalize them. practices we can see by date.
if you select a practice you can see an outline of the route traveled on google maps, if you were using the music player will see musical notes indicate the songs played along the route and if you click on a note we will see that song is that moment was playing
if you click on the upper right you can see a log mile after mile of the route traveled in the log you can see the part-time and total kilometers traveled as well as the slower and fast space travel indicated by a turtle and a hare. clicking the globe icon returns to the map display.
Below you can see the Advanced settings field where we can change our weight if we want the phone to connect via bluetooth to the instruments you want, heart rate monitor, cadence meter steps, etc., and if we use the controls on the headphones to stop or start the application, we can also choose whether we want the application to detect when we are stopped and the recording and restart it automatically if you choose this option when this happens a voice will let us know, we can also choose whether we want to hear words encouragement and if we use the energy saving mode, when using this mode is lost precision in recording the route using the GPS in favor of extending the duration of the battery, but we can choose units that want to make records, if in kilometers or miles.
I just hope you all will find useful this application to register their sports.
Click to expand...
Click to collapse
Are you the developer of this app?
Otherwise you are posting warez.
http://forum.xda-developers.com/showthread.php?t=729448
I'm the developer of atmosHere (play on words of atmosphere) Weather for Android, an Android app to make weather smarter, and simpler. The app is "Card UI" based, similar to that of Google Now, and is powered first and foremost by the hyper accurate Forecast.io. By using Google's Fused location Provider, we can get your exact location and get down to the minute weather information, all while also getting data for the upcoming week! The app prioritizes information based on the current weather conditions. So if there is a weather alert for your location, that will be the first card you will see! Similar concepts are used else where, if it's raining or snowing, you will get a card for nearby traffic accident counts. This pattern is used throughout the app. This makes it extremely simple to get glance-able information about what is going on right now, and other data that applies based on the conditions. The card ui also makes it simple to fling down a little further for the upcoming week weather, chances of rain, device sensor readings (barometric pressure, temps, etc), pollen counts, UV index, astronomy information, and many more! The app is also extremely configurable, by allowing users to toggle what information they want to see, allowing them to personalize the data they get within the app!
Just recently (last night) I added a new feature that I have yet to see from any other Forecast.io powered app. Forecast.io provides TONS of information, but for the normal person it is hard to parse through all the data given and make sense of it and what it means for the weather. So i have taken the data given, and "pre-parsed" it in a sense, and turned it into a friendly, readable, format when needed. For example, forecast.io provides a summary for a given days' forecast, "Breezy starting in the afternoon, continuing until the evening." and then this is where I come in and add additional, relevant information. So if there is a high chance of rain in the forecast, I will add precipitation information, "75% chance of rain, with light rain starting at 5pm". This gives you the chance of rain, how heavy it will be (can range from very light to very heavy), and then the forecasted time of that precipitation! I also do the same for the given temperature. So you may see "High for today of 35, with a low of 25" and if it will "feel" warmer or cooler than the given temperature, it will also let you know! This makes the forecast for every day personalized and relevant, and lets you very quickly flip to a given day's forecast and know exactly what the forecast is. No need to flip through charts of data, and stare at numbers trying to make sense of them!
The app also features data from other services to aid with contextual information, such as traffic conditions, marine and ski conditions, latest earthquake information, and even a feed of National Weather Service Audio Streams! This will be built out even further going forward, allowing users to custom tailor the weather information they are shown!
The app also features radar data of all types, from precipitation, to weather alerts, and plenty more! Your Android standards such as widgets, notifications, and even extensions for the ever popular DashClock and Muzei are included! The app has already been optimized for Android Wear once it is released to the public. Google Glass has not been forgotten either, as there is a build ready to go for when Google Opens up GDK app distribution!
I have a G+ community setup that I am posting information about updates, bugs, and asking random questions for possible future updates. I will also answer any questions or I am open to just good old conversation! I am always open to suggestions of new ideas for the app. It's been extremely enjoyable thus far getting that app to where it is, and look forward to keeping that going. I also have no problem answering any emails if you prefer taking that route. The about section of the app includes all contact information you could ever need.
Youtube Demo video
Play Store Link
G+ Community
I have been doing weekly releases, and the app has improved tremendously over the last few weeks. We are now sitting in the top 30 in free weather app!
I have also worked on a free version, as some people have seemed hesitant to purchase without being able to really try the Card UI style out first.
So atmosHere Weather Free has been published just today!
Google Play Feature!
atmosHere Weather is now being featured on Google Play!
Feel free to join the G+ Community as well to follow development, make suggestions, or report bugs! There's a current Reddit thread right now as well.
I bought this the other day for my brand new Note 4. After installing all it would do is tell me i was running an unlicensed version. Pretty odd behavior considering i bought it via the play store. Had to request a refund pretty much immediately. Shame. I liked the look of this.
I am developing a new Pebble watch app to display which street food trucks are currently open for business and its current location for a given city.I will be using an API that currently collects this information for food trucks in 9 different cities.
I backed the Pebble kickstarter project and I have since written several watch apps, mostly in the transportation area, including one for various bus systems and the BART train. I wrote the apps for myself, but they have also been proven to be useful to thousands of other users.
I also wrote several watch face style apps that aggregated open sourced watch face apps, which enables users to have over 40 ACTIVE watch faces (not in the locker) that will only use up 3 of the 8 watch face slots.
Outside of Pebble, I have been working full time as a senior software engineer for many years and I am very into starting with a well-thought-out design and using the agile process and test first. Anyone monitoring my checkins will see how I will build and unit test each portion of the app. I've had several weeks to work out the design, so I'm ready to start the coding for tomorrow's official start.
Update: The API now supports 14 cities. I have enabled only the 13 cities that actually have trucks signed up for the service that are reporting their schedules. This is more than the 9 cities originally promised by my pitch.
iOS users can download the latest pbw from the downloads section of this project. See my reply below for instructions. Android users can download the latest app from the Pebble App Store.
source code link: http://github.com/mikebikemusic/FoodTrucks
XDA:DevDB Information
Food Trucks, ROM for the Pebble
Contributors
pebblemike
Version Information
Status: Stable
Current Stable Version: 1.0
Stable Release Date: 2014-09-03
Current Beta Version: 0.3
Beta Release Date: 2014-08-21
Created 2014-08-14
Last Updated 2014-09-04
What cities are you supporting? I just moved to Austin and could use a method for navigating the 10,000,000 trucks here.
mcongrove said:
What cities are you supporting? I just moved to Austin and could use a method for navigating the 10,000,000 trucks here.
Click to expand...
Click to collapse
Unfortunately, the API I will use does not yet support Austin or for that matter, the SF Bay Area where I live. The cities in the current API are Boston and Tallahassee in the US and Vancouver, Victoria, Ottawa, Edmonton, Halifax, Calgary and Toronto in Canada.
Like you, the first thing I asked the API developer when I contacted him was when he would cover Oakland. He is very interested in expanding. In fact, 3 of the cities on the above list are new. He said it takes some time to contact and get the truck drivers to buy into reporting their schedules into his app, but it's very easy, so once they start doing it, the information returned by the API is quite good. Better than the other APIs I considered.
Mike
UI Design
It's 10:01 Fri Aug 16 on my pebble as I start writing this...
Documenting and sorting out my mental design of the Food Trucks app UI. A lot of it is based on providing a similar UI to what I used for my BART app.
UI: On Pebble screen, 3 views:
1. Startup text to alert user if Pebble app is not responding, which, if responding gets replaced with
2. Menu of Food truck names and their locations, truncated, and when one is selected,
3. Scrolling text. Full details of the selected truck, including full name, location, ending time and other details such as phone #, type of food, etc.
Configuration screen: Shows list of supported cities. User picks one. Choice is remembered across Pebble runs and reboots.
Task Breakdown
Prototyping phase:
API example output is captured and JSON is analyzed. Use jsbin to write the necessary loops to iterate across trucks.
Filter out the unwanted data and extract the data needed for the menu and the details.
Decide on the format of the JSON to be sent to the Pebble watch.
Decide on the message sequencing between the watch and the javascript.
Code and debug the text layer in the main window to be used during startup.
Code the App Message interface in C. Use the text layer as a debugging screen.
Code the javascript so it sends mock menu data for a sunny day use case in the filtered format expected to be sent when the real data is connected.
Debug the C to Javascript interface.
Evaluate reliability and check for memory leaks.
Code the menu layer into the main window and display the received data in the menu.
Code the Scrolling Text Layer as a separate window pushed onto the main window.
Code the Javascript mock data for the details format.
Debug the interface and check for memory leaks.
Integration coding and testing:
Using Javascript prototype code from task 1 above, write the API call, analyze the incoming JSON and transform it to the expected data for the tested interface.
Debug using live data.
Write the configuration html and javascript.
Mock up edge and exception data cases and fix bugs.
Design icon and marketing materials.
If time permits, replace static arrays with malloc/free data.
Check and fix any memory leaks.
Release first version.
pebblemike said:
Prototyping phase:
API example output is captured and JSON is analyzed. Use jsbin to write the necessary loops to iterate across trucks.
Filter out the unwanted data and extract the data needed for the menu and the details.
Decide on the format of the JSON to be sent to the Pebble watch.
Decide on the message sequencing between the watch and the javascript.
Code and debug the text layer in the main window to be used during startup.
Code the App Message interface in C. Use the text layer as a debugging screen.
Code the javascript so it sends mock menu data for a sunny day use case in the filtered format expected to be sent when the real data is connected.
Debug the C to Javascript interface.
Evaluate reliability and check for memory leaks.
Code the menu layer into the main window and display the received data in the menu.
Code the Scrolling Text Layer as a separate window pushed onto the main window.
Code the Javascript mock data for the details format.
Debug the interface and check for memory leaks.
Integration coding and testing:
Using Javascript prototype code from task 1 above, write the API call, analyze the incoming JSON and transform it to the expected data for the tested interface.
Debug using live data.
Write the configuration html and javascript.
Mock up edge and exception data cases and fix bugs.
Design icon and marketing materials.
If time permits, replace static arrays with malloc/free data.
Check and fix any memory leaks.
Release first version.
Click to expand...
Click to collapse
In an ideal world, I would do the development in more or less the above order. But, as pointed out in the email sent to the 20 finalists there are early deadlines. I want to make this app available to all Pebble owners. This project won't need a companion app for Android or iOS, so I don't have to worry about Whitelisting. However, I will need to bundle the JS with a working API call by the end of next week. To that end, my goal is to start working on integration coding tasks 1, 2, 3, and 5 by Thursday, so I can post a beta on Friday.
This prompted me to consider what else I can accelerate. I decided to give the new CloudPebble Graphical UI Editor a try and see if it will build what I planned to do for prototyping tasks 5, 10 and 11. I may end up writing two applications. one that I can rapidly write and test code with, and the other where I assemble the tested code into the UI.
Update: I tried CloudPebble Graphical UI Editor, but it does not yet allow me to make either a SimpleMenuLayer or a ScrollLayer. It will be easier for me to build this myself.
bundle early, bundle often
FWIW - as I understand it, you don't need the javascript finalized (though that's certainly very good) - but you do need to have *a* bundled version of your javascript in place before they collect. It seems silly, but I've just published a barebones version of my app w/ javascript enabled that warns, specifically, that it's only published for javascript bundling. (Then again, the whole javascript pre-approval process in the walled garden that is IOS is pretty silly, IMO)
I don't think you technically need to make it public, you just need a published/ready version, but I went ahead and did so because I'm a paranoid type, and my free time is too limited to chance it. Once any version of your javascript has been published, I gather the updates in the future are made available on the order of minutes not weeks.
cynorg said:
FWIW - as I understand it, you don't need the javascript finalized (though that's certainly very good) - but you do need to have *a* bundled version of your javascript in place before they collect. It seems silly, but I've just published a barebones version of my app w/ javascript enabled that warns, specifically, that it's only published for javascript bundling. (Then again, the whole javascript pre-approval process in the walled garden that is IOS is pretty silly, IMO)
I don't think you technically need to make it public, you just need a published/ready version, but I went ahead and did so because I'm a paranoid type, and my free time is too limited to chance it. Once any version of your javascript has been published, I gather the updates in the future are made available on the order of minutes not weeks.
Click to expand...
Click to collapse
That's good to know, John,
Since the first 3 tasks of my prototype will get me to usable JS code for my integrated app, I'm not too concerned, even if it gets bundled and distributed.
But I thought that published/ready meant that Android uses would be able to download it immediately. I wouldn't want to publish anything that didn't work.
Mike
UPDATE:
Hey, everybody. Cherie just posted: "Submit your JS changes before 8/19/2014 11:59AM PST"
Progress Updates
Aug 15 2pm - Prototype task 5 is done. Github repository created. Stub checked in.
Aug 15 2:20pm - Prototype task 1 is done. jsonanalysis.js checked in.
Aug 15 3:00pm - Prototype task 2 is done. jsonanalysis.js updated.
Aug 15 4:00pm - Prototype task 3 is done. jsonanalysis.js updated.
Aug 15 7:00pm - Prototype task 4 is done. 3 unit tests passed. main.c updated.
That's it for today.
Aug 16 8:00am - Added assertions to debug and exercise app message sequencing, refactored unit tests. main.c checked in. Unit test output:
I realized that task 6 depends on task 7 so, I'm starting 7 first.
Aug 16 8:30am - Prototype task 7 is done.
Aug 16 10:30am - Prototype task 8 is coded, but has timing issue
Aug 16 4:00pm - Prototype task 9 is done. I decided that the memory leak "Still allocated <42949" is bogus because the only allocations were 1 window and 1 text layer and both got deallocated. (removing either destroy results in a reasonable 2 digit number leak). I then implemented and am satisfied with Prototype task 10 being done.
Aug 17 8:30am - Did task 12 before task 11. Both needed to work at the same time anyway. Code checked in.
I am declaring the Prototype phase complete and moving on to integration. Will change my status from Testing to Alpha.
Aug 17 9:30am - Integration tasks 1 and 2 went smoothly. Real data looks like I expected.
Aug 17 noon - Integration task 3 is working, but I have to go off to play music with friends. Will try to put together what I need to publish a beta on the Pebble App Store either tonight or tomorrow.
Aug 17 10:40pm - Put together enough of integration task 5 that I could publish the app as a beta. Because of the all the unit testing, there should not be too many bugs. However, I will continue to build a lot of edge tests, add one more icon that shows up on the watch, and fix any bugs I find through my additional tests or get reported. Your comments, suggestions and bug reports are welcome. I also need to update my website.
Aug 19 9:30am - Found and fixed several bugs. Published a more stable 0.2 beta. See release notes.
Aug 19 10:00pm - Started coding integration task 4. What I'm doing for that is expanding on the function testRequestSceduleFor(city) in the javascript. Since I don't want to ship all this test code with the app, I created a test branch where I will put the additional code. Fixes will merged into master. I'll be testing handling of very long string sizes and very large number of trucks. I already know the C program will fail because I'll be sending more data than the fixed sizes I put in. Since I have time, I will convert to malloc/free to fix these failures.
Aug 21 7:30am - Completed all tasks except for releasing a 1.0 version and updating my website. API now has Checked source code of 0.3 into github. I consider this a release candidate.
Aug 22 7:00am - Website is now updated with this app. Banner for the app store was updated to 10 cities. Here are screen shots of the food truck icon on the pebble, the startup screen and the no food trucks are open yet message.
Aug 27 7:00am - Updated configuration from 10 cities to 13 cities. More will be added as truck data becomes live.
Sept 3 9:30pm - Bumped version number to 1.0 after giving a number of iOS users a chance to download and use the app. Finalized the marketing materials to match the number of cities supported.
AppMessage timing issue
I've just implemented the AppMessage code for my app which requires a rapid sequence of requests and responses that is always kicked off from the javascript side. It's working fine when all my logging is in place, so I disabled the log messages and now it gets stuck after the first round-trip message. The message sequencing for the test is as follows:
JS: send count of 30 to C
C: request item 0 to JS
JS: returns item 0 to C
C: request item 1, then both sides go idle. JS does not get the message.
I found that if I add a psleep(100) before each request in the C code, it will get farther, but will eventually stop at a different item number, for example:
Not sure why yet. The send / receive code in the C program is a slight variant of the todo list demo app in the 2.0 sdk, also similar to what's in the weather and quotes apps in the 2.2 sdk.
Code as it stands is checked into github.com/mikebikemusic/FoodTrucks
I'll probably figure it out while out doing errands today.
====================================================
Update: Searching through the pebble forums, I found a few others who had similar problems. One of whom said his solution was in the todo list demo app, without explaining what his fix was, which didn't help me much. There was mention in several places about waiting for an ACK, but never an example. I updated my SDK to 2.4.1, but the demo apps all looked pretty much like mine. So, I re-read the app_message API looking for a way to set a callback for an ACK and noticed that app_message_outbox_begin can return,APP_MSG_BUSY. I then coded a retry/timeout using psleep, and lo and behold, the code is now working. Looking back at the 3 SDK samples they will all do the same dumb thing: throw away the request if it can't be sent immediately.
A little experimentation and measurement and I found that sometimes the wait between outgoing messages to the JS can be up to 1 second. I coded up a stress test that ran for a number of minutes and kept running even through an incoming phone call conversation. I caught this screenshot right before stopping it (over 20,000 round trips without stopping):
Bogus memory leak report
I started to see the following during testing of starting and stopping my app:
[PHONE] pebble-app.js:?: JS: starting app: 19177E4B-72D9-4B0C-B9D3-497C77488971 Food Trucks
[PHONE] pebble-app.js:?: app is ready: 1
[INFO] ocess_manager.c:291: Heap Usage for App <Food Truck: Total Size <13348B> Used <5692B> Still allocated <0B>
[PHONE] pebble-app.js:?: JS: stopping app: 19177E4B-72D9-4B0C-B9D3-497C77488971 Food Trucks
[PHONE] pebble-app.js:?: JS: starting app: 19177E4B-72D9-4B0C-B9D3-497C77488971 Food Trucks
[PHONE] pebble-app.js:?: app is ready: 1
[INFO] ocess_manager.c:291: Heap Usage for App <Food Truck: Total Size <13348B> Used <5248B> Still allocated <42949
[PHONE] pebble-app.js:?: JS: stopping app: 19177E4B-72D9-4B0C-B9D3-497C77488971 Food Trucks
[PHONE] pebble-app.js:?: JS: starting app: 19177E4B-72D9-4B0C-B9D3-497C77488971 Food Trucks
[PHONE] pebble-app.js:?: app is ready: 1
[INFO] ocess_manager.c:291: Heap Usage for App <Food Truck: Total Size <13348B> Used <5692B> Still allocated <0B>
[PHONE] pebble-app.js:?: JS: stopping app: 19177E4B-72D9-4B0C-B9D3-497C77488971 Food Trucks
[PHONE] pebble-app.js:?: JS: starting app: 19177E4B-72D9-4B0C-B9D3-497C77488971 Food Trucks
[PHONE] pebble-app.js:?: app is ready: 1
[INFO] ocess_manager.c:291: Heap Usage for App <Food Truck: Total Size <13348B> Used <5692B> Still allocated <0B>
[PHONE] pebble-app.js:?: JS: stopping app: 19177E4B-72D9-4B0C-B9D3-497C77488971 Food Trucks
Since only 24kb is available, 42949 makes no sense. It reports no leaks if my code also creates/destroys the scrolling window. It's almost as if I need to do a minimum amount of memory allocation before the leak detector works properly.
Release Notes
0.1 Aug 17 10 pm Published first beta to allow a working pebble-js-app.js to be bundled and to solicit user beta testing.
0.2 Aug 19 9:30 am Watch icon added. Changed startup message. Pre-build scroll window and its layers at startup. Bug fixes: Prevent multiple scroll windows when repeating select button quickly. Reset scroll to top when selecting details. Clear prior city's list when switching cities.
0.3 Aug 21 7:30 am Built javascript driven testing of C app. Used it to debug malloc/free code. The Javascript tests exercise the app with unrealistically large strings and large numbers of trucks coming from the API. In examining the API, I found that the developer added 5 new cities, so I added them also to the configuration screen. I will be doing live testing for all the cities before publishing an official 1.0 release.
Update: Aug 21 7:30 pm Of the 5 new cities I tested, only 1 had active trucks, so I removed the other 4 from the drop down. Fortunately, this is a simple server-side fix to hide the others until they are ready.
malloc/free challenge/solution
I ran into a little snag (which I eventually solved) during the conversion from using a fixed size array for the menu titles and subtitles to allocating them on the fly with malloc/free. I wanted to change the pointer directly in the menu_items.title without having to allocate a separate array of pointers. Problem was that title and subtitle are declared const, so free(menu_items.title) gets a compiler error.
I discovered that reinterpret_cast<> and const_cast<> are not supported by the compiler. Eventually I tried a simple (void *) cast, which did the trick. Then I refactored the code so that one bottleneck method took care of the free function and updating the pointer. I'm pretty proud of that code change. It's aware of the two string pointers that are not malloc'ed and provides an interface that prevents accidental leaks when my code dynamically changes the menu list.
Comments about developing using cloudpebble.com
I started writing pebble apps using cloudpebble soon after it first came out. I didn't have to install a dev system at home and I could make a quick bug fix at work, if necessary. I've since installed the development tools at home and used that primarily. I decided to give cloudpebble a second look for this competition. It's progressed a lot, but there are still some things on my wish list.
I find it a bit inconvenient when I have compile errors that I cannot see unless I open a second browser window to view source and errors side by side. A single button to flip back and forth between the compile logs and the current source code would really help.
Cloudpebble does not allow me to check in files unrelated to compilation, such as the configuration html. At one point, I tried to commit new code and I got an error (with no error message, just the word error). I figured out it was because of updates I had done to files unrelated to the compilation, but the only choice I had might have replaced all the new code I wrote with the previous commit. So I made a backup of my changes, updated the project and pasted back the changes.
Finally, as I had mentioned at the start of the challenge, the new code generation feature did not help me because I needed layers that were not supported yet. I ended up creating those layers while I was trying to track down the false memory leak report. I like doing that because now, if the app runs out of memory due to too many trucks in the menu, it won't fail to create the scroll layer for those that made it into the menu. Hmm, I need to put together a test case for that...
Feedback Anyone?
Android users can download my app from the Pebble store.
iOS users can get an advance copy here. The easiest way to load on iOS is to put the pbw file on your dropbox and, from dropbox, select the file and Open In Pebble.
Use the Reviews, Feature Requests, and Bug Reports tabs at the top of this development page. Also, search for "Food" in the Pebble store to find my app and tap the heart button on it. I see 5 already!
Adding another city
Looks like several more city's data has come online. I've added Hamilton (Near Toronto), Surrey, and Kitchener-Waterloo to the configuration. The other new city, Columbus, Ohio just has a few trucks using streetfoodapp.com. Only 2 of the 20 trucks registered with streetfoodapp.com in Columbus are promoting themselves this way.
If you live in Columbus, Surrey, or Kitchener-Waterloo that list just a few trucks, go tell your favorite food truck vendors to start publishing their schedule on streetfoodapp.com. If you live in a city not supported, click here to request your city
Feature creep vs planned development
It may seem like I've stopped working on my app now that it's feature complete and stable, but that's not entirely true. Yes, I've requested and am awaiting feedback from users, and I'm especially interested in seeing what happens when iOS users can see the app on their app store. That should happen any day now, since I met the Aug 19 deadline for JS bundling. I needed to publish another bug fix 2 days later, and one of the fixes I planned would have required a minor change to my JS. That JS fix was for an edge case that could only occur with the artifical data I supplied as a unit test that had a string size much larger than any in real data. If I updated my JS, iOS users would be delayed getting the other C code fixes. So, I chose to ship 0.3 with the original JS. It is interesting to note that when I reverted my JS manually, and published it, the dev-portal considered it a different version, so I pulled that release and reverted the JS to what I checked in to github. It turned out to be a whitespace difference. So, word of caution, the JS is compared byte by byte (or maybe a checksum).
Meanwhile, I have considered a few improvements. And I've experimented with one of them, which required further JS changes. The change will eventually go to the master branch, but rather than providing an improvement that nobody really cares or needs, I'd rather wait for feedback and act on that first, rather than announce future planned improvements. As features creep in, it's easy for the app to become more complex to use.
I'll give you one example. I'm on the west coast and when I look at the times reported for the Boston food trucks, the times are off by 3 hours. Should I fix it? Some would say, of course. But think about it. Are the real users who use this app going to be in a different time zone when they need to go out to lunch and open my app? Extremely unlikely. Both JS and the pebble watch API fall flat on their face when it comes to determining time zone differences, both dealing only with local time. I know how to compute that offset by calling another TZ API like I did for my Any Time Zone app. What I chose to do instead was contact the Food Truck API developer suggesting he provide all API users with a TZ offset in the data response. He has agreed to do so in a future API version. This is how planned development should work.
Mike
1.0 released
I posted my 1.0 build last night. It is available in both the Android and iOS Pebble App Stores for download.
The goal of this watch app is to use the accelerometer of the watch to measure real-world distances between button presses, using a high sample rate during measurement. Additional functionality/methods for measuring is planned if the lack of gyroscope and the error introduced from double integration proves too great for this to be remotely reliable.
Implementation wise, it's will be a watch app (not a face) so we have access to buttons. Instructions will be displayed on screen with minimally an option to calibrate (to a known distance) and an option to perform a measurement. Any manual settings (set and forget) will be available via a configuration/settings screen on the phone and stored in persistent storage on the watch. It is unlikely that the app will work without the phone connection, simply because A) the calculations will be fairly involved, and are likely better handled in JavaScript on the phone, B) it's uncertain how much accelerometer data we'll be able to retain in memory to allow sufficient time for measuring - if we can buffer it on the watch and offload it to javascript for later processing, we can potentially measure longer or with more precision.
The motivation for this is for estimating dimensions - rooms, yards/lawns, camping sites, game fields, etc. without needing to carry anything extra, and to get some familiarity with using the accelerometer (as I'm already familiar with the other pieces, having written a fairly involved watch face, Timely)
As the development period doesn't officially start until tomorrow at 1pm EST, I'm focusing purely on planning/theory/research right now - keeping track of it in Trello here.
Current timeline:
2014-08-15, 1PM EST:
- Create github repository, create compile and upload basic app to appstore with javascript enabled (for IOS bundling), begin actual development.
2014-08-22:
- Sanity check: 1 week in, basic UI and functionality should be done, working on javascript calculations
2014-08-29:
- Add additional methods for measurement (pedometer/counter, etc.) and ensure settings page is in place, then resume algorithm work.
2014-09-05, 5PM EST:
- Publish final code to github and final app to store, sanity check, confirm/test all functionality until the 8PM deadline.
Thoughts/comments/suggestions welcome, especially from anyone who's dared to try to use a single accelerometer with no gyroscope to double integrate and approximate distances
XDA:DevDB Information
Measured, Tool/Utility for the Pebble
Contributors
cynorg
Version Information
Status: Alpha
Created 2014-08-15
Last Updated 2014-08-14
Status Updates
Latest Status:
2014-08-15, 2pm EST
- repository created on GitHub, basic/placeholder assets created for Pebble publication, basic watch app compiled and published for IOS javascript bundling.
2014-08-16, 11pm EST
- integrated basic appmessaging and configuration functionality
2014-09-06, 5pm EST
- Nope! I absolutely didn't get an opportunity to complete this (let alone work on it much) during the contest window, due to various reasons. I'm still committed to making this happen, and will work on it as time permits.
Apologies to those who were looking forward to measuring things from their wrist this weekend!
Git Repository: github.com/cynorg/PebbleMeasured
Wonderful new idea!