GPS traces recorded on a watch can be pretty noisy. If you stand in the same spot for a while, you're not going to get the exact GPS position recorded for the entire time you're there. The same happens when you move, it's not a smooth trace.
Strava (and I assume to some extent Garmin) apply some smoothing to these raw GPX traces to try and improve the path, or remove some of the noise.
You'd be missing out on this post-processing by taking the data raw. Ofc you can implement something similar yourself, but I wanted to point out that these platforms are doing a little bit more than just displaying the GPX trace.
When parsing high end Garmin and Apple fit files, it appears a lot of their smoothing is done before writing to the fit file. They’re in a very workable state straight out of the gate.
Yes. The location data you get from CoreLocation has been processed already, in that it is the output of combining the inputs from the GPS, Wi-Fi access points, cell towers, magnetometer, accelerometer, and gyroscope sensors.
Workout data might take it a step further, as you tell it the type of workout, and I'm assuming WorkoutKit might do something like adjust the distance filter that specifies how far the device has to travel before triggering a location update event to minimize battery use during the workout.
I wander often on many smartwatch/sport tracking forums/subreddits, and it's fairly frequent that people ask how to deal with smoothing and get back raw data. Some love how Garmin smooths out a race track run for them and make gps trail stick perfectly to a lane. Some pull their hair out seeing their lake run being smoothed out to make it look like they jumped over fences and private properties.
I often find my garmin traces confusing as well, it's not objectively better.
Some users may be confused about Garmin functionality. If you select the Track Run activity profile on a standard 400m track then it will generate a perfectly smooth and consistent route every time. This is only possible because it knows the exact shape of a standard track and can adjust the location data points to fit.
All fitness trackers (and mobile devices in general) do some level of smoothing on location data before recording it to an activity. There is no "raw data" to get back. The developers try to select smoothing algorithms that produce a good result in most cases but there will always be occasional discrepancies. This is usually due to poor signal quality including multipath reflections when the device doesn't have a clear line of sight to the sky due to structures or trees.
Garmin devices don't only use "GPS". They support multiple GNSS constellations including Glonass and Galileo, and depending on the selected mode may use all of those simultaneously to improve location accuracy.
I read the first two paragraphs and the post presumably criticising folks for using AI is so clearly written by AI. It's got all the tell tail claude-isms in it.
Analogies about 'students and exams' that don't quite fit. The sentences ending in artificially punchy short phrases. The 'correction' and dash-as-reveal in "they can't answer it - no one can".
It's not good, or a compelling read, and I think it's lazy not to have swept through and fixed these things.
The original Typescript version of the AI SDK has two parts. A backend part called Vercel AI-SDK, and a frontend part called AI UI SDK.
When you make an LLM call, if you use the streaming responses (typical of token streaming into applications) then the response from the LLM provider comes in a specific format; mostly made up of individual json events, one for each text-delta or token generated, and some framing around start/stop. That API format differs across different LLM providers, and also isn't that convenient to process for what you actually want to show in the client/browser.
The backend portion of these sdks (AI-SDK) are an abstraction over the LLM provider, and re-write the 'events' that you get back from the LLM provider into an abstracted json format that's a little bit easier to work with. And not coupled to a specific provider.
The frontend portion of these SDKs (AI UI SDK) helps you to render those message into a frontend interface, and uses the same abstracted format that the backend uses.
There's one big missing piece though, and that's the fact that the transport between frontend and backend is over a single HTTP+SSE stream. If that connection fails, all the work that the backend is doing cannot be transported to the frontend anymore. The HTTP connection also doesn't allow for useful features like cancellation, steering, interruption, and multiple devices.
If you want those, checkout Ably AI Transport, which targeting the _transport_ section between backend and frontend, to make sure you get reliable experiences in the UI regardless of which AI provider or SDKs you use.
This is a backend written in go that's wire-protocol compatible with the (catchy named) Vercel AI UI SDK; which is an SDK for helping to build AI chat apps. The original Vercel AI SDK backend is in typescript.
I think they really missed the opportunity to add in resumable streaming after a dropped SSE connection, or multi-device support. Because these SDKs are easy to drop-in to your applications, but hard once you actually try and build resilient systems on top of them. Systems that can heal from dropped connections, or support multiple users or multiple devices.
ADK seems like a better thought through SDK family, I use Go, Py is most mature, also TS and Java. The docs still need a lot of work to cover all the languages, it's pretty hit or miss right now, but one can also have a coding agent look at the source and an example for another language. Notably to your complaint, I have a coding agent that if the client drops, the llm/agent keeps working in the background. This requires it being set up as a server, which implies tool calls happen there instead of where the client is. I used Dagger as the "sandbox" more for easy time traveling / forking than being a sandbox. The well designed interfaces that allow custom implementations are what hooked me on ADK.
reply