#Bobby, a new voice assistant and Snowy successor

1 messages · Page 7 of 1

karmic lion
#

I am not a fan of having two different circles going on there.

wooden wedge
#

yeah

karmic lion
#

Or two big things on different sides in general.

urban solstice
#

where does this sit in terms of palatability

karmic lion
#

(I am also not sure what problem any of the multi-arc/line variations were solving)

wooden wedge
#

I mean, I'm not mad at it, it looks nice

karmic lion
#

I guess this is fine but I feel it draws too much attention to a distinction nobody will really understand

#

The bobby label positioning is fairly subtle

#

Big pink circle will make people ask why there is sometimes, but not always, a big pink circle

edgy flame
#

here is a different thought

#

it gets us colors, it gets us text contrast, icons, widgets, it looks fine. it loses us circles and peeks

wooden wedge
#

I mean, if we don't have peeks we might as well do an arc

karmic lion
#

Why is the icon not at the top now? So it can be there after you scroll?

edgy flame
#

this does feel much more natural

karmic lion
#

I guess because we had the peeks before

#

This is going around in circles

#

Very literally we are just spinning around the screen

wooden wedge
#

we have not gone to the right yet

karmic lion
#

That follows after top

wooden wedge
#

oh, true

karmic lion
#

Then we get peeks again

#

There was a brief right interlude from the timeline

urban solstice
#

we haven't tried 45 degree variations...

wooden wedge
#

yeah, we need to scroll at an angle

#

we could use the accelerometer to change the scrolling direction

edgy flame
#

this is getting somewhere!

#

it's also much closer to the conversation stream on rect

#

this feels like one big stream of thought and not like a million little separate thoughts

wooden wedge
#

what happens if a thing is split into two screens?

edgy flame
#

then it just gets paginated, but keeps its color on the side

wooden wedge
#

I also feel like a lot of the screen real estate is lost

edgy flame
#

with peeks we had zero screen real estate anyway

karmic lion
#

I don't think Bobby needs an icon at this point

edgy flame
#

i really like the bar on the side. i feel it gives the layout a point to ground itself to, which is something the peek layout was missing

karmic lion
#

I guess it needs an icon because now the layout for an action confirmation is exactly the same as the layout for text

wooden wedge
#

I still kinda wish the side bar could be used somehow

#

beyond just color

karmic lion
#

I think I preferred the original version

edgy flame
karmic lion
#

Surely the top one should have green at the bottom

#

Though the line is, confusingly, not actually linear

edgy flame
#

twas a thought. i don't think i like the segmented line

wooden wedge
edgy flame
#

i don't think multiple icons on the left works

#

i also don't like that 'you' icon in context

wooden wedge
#

yeah, that doesn't look very good

edgy flame
#

it feels very early android wear actually

#

(derogatory)

#

hmm

wooden wedge
#

with just peek

#

idk, too busy

edgy flame
#

do you want just edit access to the - you probably have edit access to the same figma

#

it's in drafts on the rebble organization

wooden wedge
#

yeah, I don't wanna deal with that right now

#

it's 01:00

edgy flame
#

hmm

wooden wedge
#

I do wish it was easier to indicate this somehow

wooden wedge
# edgy flame

I was thinking about this earlier with round one in pie chart context

#

but yeah, it's not that simple

edgy flame
#

different widget

barren raptor
#

Something about DST seems to confuse bobby - I have told it to set a reminder for 16, it says it set a reminder for 16 yet the widget says 17

wooden wedge
# edgy flame

honestly this is fine, I would probably still experiment with an arc instead and have the icon on the coloured part, but otherwise it seems fine

barren raptor
#

which did it actually set it for? i guess we'll find out once the clocks change

edgy flame
edgy flame
wooden wedge
# edgy flame hm

does Bobby need an icon here or would an arrow down with a coloured background also work?

#

and just a circle around status bar

edgy flame
#

i don't love making it look just like a notification

edgy flame
#

trying this

#

this is what notifications do

#

just a colorful pip at the bottom

wooden wedge
#

right

#

idk if notifications are a good basis for this

edgy flame
#

i do not think they are

wooden wedge
#

though I do like arcs

#

so it pains me not to have them somewhere

edgy flame
#

there is one thing i havent considered at all here, which is to remove the clock from the statusbar and use that space for more indicators

wooden wedge
#

I don't think it really helps

barren raptor
#

(it didn't hear me quite right but the gist still stands)

#

to be very clear, the story here is that the clocks change today in my country (in about 10 minutes, actually)

wooden wedge
#

well, in all of europe

barren raptor
#

So I'm assuming that something somewhere is noticing that and adjusting the timestamps, but then other things don't know that they've been adjusted

wooden wedge
#

it's eu dst

edgy flame
#

i am done for the night, i have new books

#

i don't know if we've gotten anywhere but we've learned things

barren raptor
#

...oh my god dst confuses pebbleos too

#

When I view the future timeline it thinks it's the timeline for 29 march "yesterday"

edgy flame
#

that's probably what did it, if sometimes the model is writing times and sometimes the app is writing times

barren raptor
#

now that DST has occured i can confirm that the pebble is no longer confused but also that it did in fact write the wrong times

edgy flame
#

urghh

wooden wedge
#

my thoughts exactly

edgy flame
#

you and freakified are both supposed to have edit access to everything, that's what the admin dashboard says, but i think Figma has Streamlined everything to where you can't have edit access without having a full paid editor seat

wooden wedge
#

I don't even see I'm a part of any team tbh

edgy flame
#

huh

#

there should be a thing at the top left of your files page, under your account, where you can switch what team you're looking at

#

can you show me?

#

wait no i don't think you were in the rebble team actually

#

I've clicked "approve edit request" in my email, try now

wooden wedge
#

this entire experience is so weird

edgy flame
#

it wants money

wooden wedge
#

oh, terrible

#

I can use it for 3 days without paying at least

edgy flame
#

hell, okay, i guess upgrading our figma plan means that now nobody can ever have edit access without paying $16 a month for it

#

that's really frustrating

wooden wedge
#

I wish figma had some better alternatives

#

I am also really bad at using it, so that's fun

#

this is what I was thinking yesterday

#

I have too much love for circles

edgy flame
#

the thing i like about the flat line is that it makes it feel like you're scrolling a continuous stream

#

it has the same effect as scrolling timeline

#

the circles break it up into individual chunks again

#

though they look really good

karmic lion
wooden wedge
#

maybe the amount of screen taken up by the circle could depend on the presence of icon

#

it doesn't have to be that large always

karmic lion
#

The confirmation generated by the app does have correct timezone information, so that gets adjusted, but nothing generated on the server is correct.

wooden wedge
#

because I think if you do a rotating circle animation on the side, you could make it look like a stream

#

that does get into the failed idea of lines on the side though

#

that makes me wonder, how does the watch draw all of those curves?

edgy flame
#

i dunno i don't think I'm a believer in left circle

wooden wedge
#

pdc with beziers?

edgy flame
#

watch can draw circle

#

probably just draws a very big circle outside the screen

wooden wedge
#

using draw commands?

edgy flame
#

yeah

wooden wedge
#

that seems inefficient

edgy flame
#

no bezier but yes circle

wooden wedge
#

it can do beziers too

edgy flame
#

can read the code

wooden wedge
#

that's true

karmic lion
#

IIRC it can also draw partial arcs so I might guess it doesn't draw the entire circle

#

(though I very vaguely recall that drawing circles is actually more performant than drawing arcs)

wooden wedge
#

fun

#

also I'm apparently wrong about beziers

#

good thing I went to check myself

karmic lion
#

That caltrain example that comes up occasionally exposed exciting bugs because when it was first written it would only partially render

#

Because it actually took longer than a frame to draw the circles in it and apparently at the time if you missed the deadline you just got what was done.

#

In that context you can't really tell it's slow because there are no animations, but be wary of circular performance.

wooden wedge
#

it is a circle

karmic lion
#

Makes sense

wooden wedge
karmic lion
#

Between the big thing on the left and the space left for the dot on the right we are getting quite close to just using a rectangle for the actual content

#

A chunk is currently reserved from the top, left, right, and bottom

wooden wedge
#

it does kinda seem that no matter what we do we end up with a square side

#

I have one more idea actually

#

widgets with icons would have a rounded side to accomodate an icon

#

it would be straight otherwise

karmic lion
#

What does the weather widget do?

wooden wedge
#

there are two different weather widgets

#

so the answer depends

karmic lion
#

Three!

wooden wedge
#

three

karmic lion
#

Two are fairly similar though

wooden wedge
#

it might take over the entire screen

#

I think a line turning into a circle from the side kinda animation could be nice for that too

#

I mean, really to give that illusion you would just move a circle of the same color as the line from outside the screen onto the screen

#

I don't think anything more complex is necessary

karmic lion
#

You say that but doing this requires throwing away the concept of these all being on a scroll layer and instead doing bespoke screen switching everywhere

#

The animation is simple but being in a position to do them seems less so

edgy flame
#

yeah

wooden wedge
#

well, it could also be an animation of the center of the circle getting closer while the radius gets smaller to make the illusion of the upper and lower points being static while the middle expands out into the middle

#

it's like blowing the line on the left into a balloon

edgy flame
#

Bobby's weather widgets are very good as is, i don't feel the need to mess with them

wooden wedge
karmic lion
#

This is generally true. Except for always line on the left, I guess

wooden wedge
#

that still seems like it would require pages

karmic lion
#

Scroll layers have a paginated mode

wooden wedge
#

that does make it easier

karmic lion
#

Since otherwise doing any sort of scrolling on round is a disaster

#

Suddenly realising that bobby's text height shortcut probably assumes it's rectangular. And not having wild pagination things happen

#

That's fun

#

It actually might not assume either of those things

#

The FormattedTextLayer probably also makes this assumption

#

Sigh

wooden wedge
#

round support sounds hard from every perspective

weary ether
#

wow this site is awesome

#

(sorry to interrupt, just checkign it out now)

wooden wedge
#

it really is!

#

there are so many good wikis out there

edgy flame
#

this was overall the reason i assumed you wouldn't want to do bobby on round :p

karmic lion
#

Essentially yes

#

Lots of work for 6% of users

#

Presumably soon much less

chilly moat
# edgy flame

as someone just scrolling through this discussion for the first time now, the far left is my favourite

#

if that's helpful

wooden wedge
#

feedback is always helpful

#

I feel like maybe with the line the widgets should always be full sceeen, since that does let you do big icons which feel more appropriate on the round

edgy flame
#

i like big icons in general on pebble

wooden wedge
#

yeah

#

we did specifically design small icons for this app!

#

which seems antithetical

#

to the goal of big icons

edgy flame
#

ive been playing the long con of making everything in bobby really big

wooden wedge
#

I still would like the main conversation stuff to be high contrast white/black somehow

#

I do like the line on the side even if I wish it was a circle somehow

rain plinth
#

Does the time always show 12:34? I've been using this for a couple weeks, am I just now realizing this?

sick apex
#

it always shows the current time for me

#

that's what it's supposed to do

wooden wedge
#

I wonder if it uses ancient certificates or something

#

bypassing that error by disabling ssl requirement doesn't help much

#

which I feel like I should have known

covert ingot
#

Does this help? #hackathon-002 message

wooden wedge
#

nope, still getting sslerror

wooden wedge
#

that being said, I might be doing something wrong, because I can't fetch quota either

rain plinth
# sick apex it always shows the current time for me

Hmm it seems to be working as expected again, but I did see in all the round mockups above the time was 12:34. Maybe my app got stuck in some default mode. It was still working mostly as intended, but I missed a reminder and then checked the time and it was way off. But my device time outside the app was correct. Oh well, I'll see if it happens again

karmic lion
#

I have seen that just show 12:34 instead of the actual time, though I've not had a chance to look into why.

#

It wouldn't affect any functionality, though.

karmic lion
#

Runs the spectrum from "that's very cool" to "large language models are a sin and nothing useful could ever be built with them"

#

And also one guy who specifically really hates Gemini models and says this in every place Bobby shows up

sick apex
#

it's funny, it feels like the Pebble subreddit is the outer exterior to a hidden speakeasy or something

the tonal difference is sharp

#

the subreddit has a bunch of normal, if bland posts, but it's the front for the Discord server where all the interesting stuff happens

silver vale
#

Is there a reason the Github repo has issues disabled? I wanted to suggest support for self hosted LLMs via Ollama

edgy flame
#

hmm - Bobby as a rebble product just works, with very little setup, and we'd like to keep it that way, but I encourage you to fork the project and add support yourself!

#

sounds like it could be cool. would you want to host the backend for Bobby as well, or just the llm?

silver vale
#

Just the LLM. Mostly just privacy and ethical concerns.
Alright, I might do that.

karmic lion
#

But also I have no interest in that feature

coarse cedar
#

You can fork it, but be aware that Bobby uses the Google GenAI library so you'd need to rewrite quite a bit

karmic lion
#

It now has issues, unclear how that was disabled

#

I will also continue to specifically push back on the privacy concerns, given that a) you are not Google's customer, and also b) Google is contractually obliged not to do anything with the data.

rough cliff
# karmic lion It now has issues, unclear how that was disabled

Forks have issues disabled by default. Weird GitHub thing. You can technically "leave the fork network" if you want it to be a standalone repo (that is, if you never want any connection to Katharine/tiny-assistant ever again) in the repo settings, so you won't have weird GitHub fork limitations

#

Though this may interfere with some licensing things? Probably not but I'm not sure if being a fork has anything to do with this

silver vale
#

Ah okay if that is not a desired feature, I'll consider making a fork.

#

I strongly do not trust Google to oblige by the contract since they have absolutely no incentive to do so and you have no way to proof they do not use the user data for training. It is highly unlikely IMO that they do not use that data.

#

Now whether this concerns me enough to fork the project rather than just use it is another question, I probably don't care enough, but we'll see

#

where can I find the privacy policy of Bobby / Rebble?

#

ah found it, but it says "Last updated 2021", does it cover Bobby?

wooden wedge
sick apex
#

citation needed but I could've sworn I heard one of the rebblers mentioning that

karmic lion
#

They have a forty billion dollar cloud business, of which this is part, wholly dependent on the concept that they do not inspect the content of the workloads they're running

#

It would be completely insane and open them up to a huge array of wild lawsuits

#

It would also be illegal in the EU to use the data for training

#

There's also minimal benefit to them doing so - Google gets plenty of query data from search, Gemini-the-product, Google Assistant, etc. - and that data actually has meaningful feedback, unlike wholly opaque enterprise API usage.

karmic lion
#

Of course, since Rebble runs on GCP, if you believe they inspect the Gemini data they are legally and contractually obliged not to use, you should also assume that they are (illegally) using all data sent to Rebble for similar purposes.

silver vale
#

For me it's really more a matter of principle, I understand this all and know you act in good faith, and I'll probably even just use Bobby as is.

#

I just like always having a way out of big cloud services if possible, that doesn't mean I don't use them.

#

But yeah I would advice adjusting your privacy policy to be clear about what Bobby does if you don't want to get into legal trouble in the EU, I doubt that small disclaimer is really enough. But I'm no lawyer.

karmic lion
#

The disclaimer is not very subtle, you have to consent when you launch the app

silver vale
#

I didn't, the consent showed but then the app closed before I could read the rest. Next launch it didn't show it.

karmic lion
#

That should not be possible

#

Unless you saved the settings in the mobile app and were also using one of the releases that crashed when you did that

#

Which would both override the consent flag and also dismiss it

silver vale
#

I just saw it because it installed on my watch, I saw the screen but then I was in the app settings on my phone checking the settings. When I looked back on my watch I was in the launcher.

silver vale
karmic lion
#

The 1.1 release should not crash when you save settings

silver vale
#

But again it's not a bit deal, I understand and consent to what I'm using, even if I'm not entirely sure what legal entity actually processes my data here, but it's Rebble right?

karmic lion
#

Honestly I am sort of annoyed the settings show up at all, I need to reconcile that with the on-watch behaviour of asking the same questions

silver vale
#

The app is officially by Rebble?

karmic lion
#

It's the Rebble Foundation

silver vale
#

But yeah with all that aside, great work on the app, it's really cool! And it actually got me motivated to looking into making my own apps that capture that Pebble look and feel. It's just so cozy.

karmic lion
#

Anyway I will fix it so that the consents are not skipped if you save the settings and then also quit the app; this is unintentional

chilly moat
#

selfhosting an LLM seems like a huge waste to me, i don't understand why i see so many people doing it

#

of all the things you could pick to selfhost why would you pick the most resource intensive one

silver vale
#

It's not really that hard, you just need a server or PC with a somewhat modern GPU in it

#

for some usecases you don't even need that much

#

for what Bobby needs even just a CPU run model is good

chilly moat
#

i'd be personally more interested in a simpler NLP-based backend, an LLM seems overkill when you just want to set reminders. but i guess that would be something entirely different than bobby

karmic lion
#

I think running Bobby on a CPU is dubiously viable

coarse cedar
#

honestly I can see bobby running with one of the new gemma 3 models

karmic lion
#

Gemini 2.0 Flash is generally assumed to be a ~40 billion parameter model, which is not tiny, and I don't think I'd particularly enjoy the results of using a less capable model

weary ether
#

I think your choice of Gemini 2.0 Flash is Very Safe for a few different reasons

coarse cedar
#

its just a great model price wise

weary ether
#

and I think using a Google model looks good

#

for lack of a better way to say it

#

brand loyalty if you will

#

'hey thanks for letting this super valuable software out of the cage and approving my awesome AI-on-wrist app and don't worry because it uses Gemini'

#

just my outside take

karmic lion
#

The number one reason it uses Gemini is to get it approved for release in the first place

weary ether
#

there you have it

karmic lion
#

Previously it used gpt-3.5-turbo (in 2023)

weary ether
#

also, RWS is GCloud?

karmic lion
#

Yes

weary ether
#

so, that makes things 'easier' I would guess

karmic lion
#

It can do, but Bobby accesses Gemini via AI Studio instead of via Vertex AI, so it doesn't get the integration benefits

weary ether
#

gotcha

karmic lion
#

If you look at the (new) asr, or the audio-debug-mode, they have no credentials or even allowance for providing credentials

#

They are just magically authenticated

coarse cedar
#

thats actually really cool

karmic lion
#

(the actual underlying mechanism is that there is a GCP service account with relevant access, and then a kubernetes service account bound to that GCP service account, and then the pod runs under that service account. so GCP grants the pod access to the relevant resources, and only those resources)

weary ether
#

I'm sure whenever I look at Bobby it's like I'm looking at the top of the iceberg

#

sounds like a sophisticated setup

karmic lion
#

by Google

#

there's a reason that Bobby has Copyright 2025 Google LLC at the top of every file 😄

chilly moat
#

oh lol

weary ether
#

I'm glad Bobby saw the light of day but I lament that Big Tech Corps "own" everything an employee does

karmic lion
#

such is life

weary ether
#

I respect that attitude

karmic lion
#

Technically, due to restrictions under California law, they only own things I make that are relevant to their current or reasonably forseeable lines of business

chilly moat
#

i die a little inside whenever i sign a new employment contract

karmic lion
#

this was useful when I worked at Pebble, which had a very small set of current or forseeable lines of business

#

it is not at all helpful at Google

coarse cedar
karmic lion
#

yes

#

everything I do for Rebble is actually done by Google

#

or, at least, owned by Google

weary ether
#

frickin' Google

karmic lion
#

Google explicitly disclaims my actions

chilly moat
karmic lion
#

(see the disclaimer at the bottom of bobby's readme for further detail)

coarse cedar
#

at least the google rebblers got pebbleos open sourced

karmic lion
#

in any other US state they own everything without restriction

coarse cedar
#

I am still so thankful for that, yall are the best!

karmic lion
#

(I forget what the other state is)

chilly moat
#

yeah i assume it's not done for legal reasons i just see it a lot

karmic lion
#

Every contract I've ever signed went the other way and just said "we own everything", then had a little note about "except as required by california law"

chilly moat
#

oh huh wild

#

good on california for having that then

coarse cedar
#

well it doesnt really work for google because they do like almost everything

chilly moat
#

the legend i've heard is that those types of clauses only became common after steve wozniak used equipment from his job at HP to design the apple 1

#

no idea if that's true

karmic lion
#

Google gives me two options: I can ask them to waive their interest, or I can ask them to let me release it as open source

#

I've done the former a few times and it's actually the easier path, but they'll refuse if it sounds like a thing they make

chilly moat
#

years ago i used to see github repos under the google org with a disclaimer to the effect of "this is not an official google project, but was made by a google employee"

#

do they still do that

karmic lion
#

Yes

silver vale
#

Rebble services are US based?

coarse cedar
#

yes I think so

silver vale
#

I didn't really think about that before, I don't know if I feel comfortable with that, but what can you do.

#

Well I guess it doesn't really matter all too much

#

is it correct then that Google and Rebble have to provide backdoor access to the data if asked by the US government?

#

well I guess I sound a bit paranoic here but I generally just try to avoid any of my data entering the US if at all possible these days

#

and yes this is hypocritical beeing on Discord, but I have no other option, since the Pebble development happens here

fervent steppe
#

as a member of the Board of Directors of the Rebble Foundation, I will say that we will comply with any lawful request from a government that has jurisdiction over us

rough cliff
#

I personally think the extremely limited set of data Rebble actually has about you will not be interesting at all to the U.S. Government. Unsure how knowing what watchfaces you have will help solve hypothetical crime
Also, if they want data about you, let's just say you have bigger problems 😄

valid shadow
#

I am in love with Bobby, really impressive work

sage laurel
#

Just subscribed to Rebble to try this out 🙂

#

Since Katharine mentioned trying to add various integrations with mixed success #1345564272289120296 message
It'd be awesome if Bobby could behave as an MCP client so folks can plug in whatever external tools they want. IIUC the new streamable HTTP transport supports remote connections, so I think you can configure an MCP server with just a URL that could be provided from the app settings, e.g. Cline supports this .

sage laurel
edgy flame
#

what if we got rid of the peek and just had a tiny content indicator triangle on each screen

#

each individual widget would feel much less cramped

wooden wedge
#

that's kinda what I was thinking

#

but then you are missing out on animations!!!

#

(I'm just joking, I don't think it matters all that much)

edgy flame
#

we can still have animations!

karmic lion
wooden wedge
#

also maybe the default time should be intentionally incorrect

#

like 43:21

#

34:56

#

I would have suggested 00:00, but that's actual time in 24h clock, or 88:88, since that's a default on 7 segment displays, but that has a meaning of its own, which is not great

karmic lion
#

sigh

#

looking at Google's API pricing because the OpenStreetMap POI data is Not Great, and $0.035 per search request feels infeasible on a $2/month budget.

#

generally I want to avoid risking people actually hitting the quota limit

#

the inevitable endpoint of this feels like adding more tiers to the rebble subscription entirely to fund bobby quota points. which is an exercise I don't particularly want to undertake.

hollow rivet
karmic lion
#

57 requests per month

hollow rivet
#

Not per day per month

#

Yeah brain not braining

karmic lion
#

assuming the only thing you do is fetch POI data

hollow rivet
#

Oh yeah that 2 dollars is also for the rest of the services too?

karmic lion
#

all bobby usage is budgeted at $2/user/month

#

when you have caused us to spend $2 on you, you get locked out for the rest of the month

#

anyway I have returned from my holiday and can now look at this

#

though I'm still on holiday, just now physically at home

#

and I am still inclined to not spend too much time writing software for the time being

south edgeBOT
karmic lion
#

but that's the 12:34 bug

#

for some reason my IDE no longer knows about any standard C functions

south edgeBOT
karmic lion
#

and that fixes a) the ability to skip consents by saving in the app config page, and also b) crashing when you save in the config page while the consents are visible

#

also, performing the migration from the old consent storage to the new consent storage is the first time that keeping track of the previous version has paid off

#

so now I am glad I bothered to keep track

#
void consent_migrate() {
  if (version_is_updated() && !version_is_first_launch()) {
    // If we're updating from version 1.1 or older, consent agreement was implied by LOCATION_ENABLED being set
    // (either true or false).
    if (version_info_compare(version_get_last_launch(), (VersionInfo) {1, 1}) <= 0) {
      APP_LOG(APP_LOG_LEVEL_INFO, "Performing consent migration from version 1.1.");
      // If the location enabled state is set, that's equivalent to consent agreement version 1.
      if (persist_exists(PERSIST_KEY_LOCATION_ENABLED)) {
        persist_write_int(PERSIST_KEY_CONSENTS_COMPLETED, 1);
      }
    }
  }
}
#

also for Reasons, my Android app is currently running watch app version 1.2 against JS version 0.26

#

so don't assume those get updated in lockstep I guess

rough cliff
#

I am not sure of pricing per request though.

#

Possibly Yelp too

karmic lion
#

(In fact we are using it)

#

I am actually not entirely sure what value Mapbox is providing me in exchange for the money we pay them

#

but it's a small enough amount of money that I am not particularly fussed about it.

#

(in fact it's zero because we will probably never break the free tier)

#

We've had a few reports of mapbox (and thus presumably its backing source, OSM) being very wrong, though

#

I'm sort of leaning towards Google, because cheap incorrect data is not very useful

acoustic wolf
#

I wonder if Gemini itself can access weather data

coarse cedar
#

Wait they only have "Contact us" pricing

karmic lion
#

I did consider it when I was looking for reviews but it wasn't better

#

I also am not clear on what their data source is given foursquare is not very alive these days

#

It looks like their free dataset doesn't have opening hours, which is arguably the most useful property for bobby-type questions

#

("is the Safeway open?")

#

OSM has them but apparently not very accurately.

#

Google charges Enterprise pricing for that data, which works out at $35/1000 requests

#

though on the plus side for that price I do also get a star rating and a bunch of other data mapbox doesn't have

#

The last time I went digging the general consensus seemed to be that Google is the only entity with a good POI database. Maybe Yelp, but their pricing is similar if not worse anyway.

rough cliff
#

It seems Google and Yelp have the best data, and well, they know and it reflects in their pricing.

karmic lion
#

Creating and maintaining a POI database sounds like a wild activity to try to undertake

#

alas.

celest pulsar
#

it feels like the kind of project that is doomed unless you can motivate a major percentage of venue owners to not only enter their data themselves (or pay someone to do it for them) but also keep that data updated

karmic lion
#

indeed

#

Though even that doesn't work well enough

#

Which is why Google has wild projects like "regularly phone every business that exists and check what their hours are"

celest pulsar
#

it feels like leveraging location data would be a lot easier for at least the businesses that tend to have more than 3 customers at a time

#

but they're already doing that, of course

celest pulsar
karmic lion
#

They do automate that

#

duplex is a real thing that is in use

coarse cedar
#

I remember that demo

karmic lion
#

(for that matter the automated AI calls they pitched at I/O also actually shipped, but it's pretty rare to get into the state where google offers to do it)

#

you need to be asking it to make you an appointment at a business that does not have a website

#

and the business is of a supported type

celest pulsar
#

that does seem rare

#

using the website is probably a lot cheaper resourcewise

#

and possibly less error prone

karmic lion
#

the results from google maps are much nicer

#

but the pricing remains insane.

#

or at least insane while constrained to a $2/month budget.

#

maybe I'll try it anyway

#

people probably don't do that many location queries

#

in fact I should have data on this

celest pulsar
#

you could add a premium tier for...high volume users

#

unless that complicates things too much

karmic lion
#

then I have to touch Rebble's billing code 😦

#

it is a scary place

#

the actual number of location queries, across all users over the last month, fits in the free tier.

#

(which is 1,000 queries)

celest pulsar
#

that's encouraging

karmic lion
#

I could go the wild and wacky route and charge zero quota credits until the monthly limit is exceeded

#

which is sort of weird because it makes quota usage for a single user dependent on the global usage of bobby

celest pulsar
#

tragedy of the commons incoming

#

well, not really. people's life doesn't get arbitrarily better the more location queries they send

karmic lion
#

well it might if they have many location-related problems

#

I think I will actually do this

karmic lion
south edgeBOT
karmic lion
#

time to do some incomprehensible Cloud Stuff

karmic lion
#

I have done some incomprehensible Cloud Stuff

#

Bobby now uses Google Maps to fetch POI data

#

let me know whether it's better or worse

#

Google Maps uses a significant chunk of your quota (about 2% per invocation), but only once the global free limit is exhausted.

karmic lion
#

such is life

#

on the plus side, good odds that at least in the forseeable future, the global quota will never be exhausted, and so you never actually get charged against your personal quota

#

oh, also Bobby now has star ratings for each place, so it can tell you about that. so that's nice.

south edgeBOT
karmic lion
#

I asked my partner to try out the new POI stuff

#
2025/04/07 00:38:18 calling function poi
2025/04/07 00:38:19 Searching for POIs matching "things to do"
2025/04/07 00:38:19 Charged against global quota gplaces_text_search
2025/04/07 00:38:19 Found 10 POIs
2025/04/07 00:38:19 http: panic serving 130.211.2.174:58620: runtime error: invalid memory address or nil pointer dereference
goroutine 2756 [running]:
net/http.(*conn).serve.func1()
    /usr/local/go/src/net/http/server.go:1947 +0xbe
panic({0xd22ac0?, 0x15b4120?})
    /usr/local/go/src/runtime/panic.go:791 +0x132
github.com/pebble-dev/bobby-assistant/service/assistant/functions.searchPoi({0xfa3818?, 0xc00080cc30?}, 0xc00020fdc0, {0xca2660, 0xc0000b1700})
    /go/src/app/service/assistant/functions/poi.go:176 +0xbb3
github.com/pebble-dev/bobby-assistant/service/assistant/functions.CallFunction({0xfa3818, 0xc00080cc30}, 0xc00020fdc0, {0xc00010861d, 0x3}, {0xc0006bc410, 0x43})
    /go/src/app/service/assistant/functions/functions.go:105 +0x358
github.com/pebble-dev/bobby-assistant/service/assistant.(*PromptSession).Run.func1(0xc00063d928, 0xc00063d700, 0xc00035c540, 0xc0008122d0, 0xc000399740, 0xc000399770, 0xc00020fdc0, 0xc0003996e0, 0xc0003996d8)
    /go/src/app/service/assistant/session.go:304 +0x1187
github.com/pebble-dev/bobby-assistant/service/assistant.(*PromptSession).Run(0xc00035c540, {0xfa3818, 0xc00080c5a0})
    /go/src/app/service/assistant/session.go:324 +0xbea
github.com/pebble-dev/bobby-assistant/service/assistant.(*Service).handleQuery(0xc00020f480?, {0xfa29e0, 0xc00035c4e0}, 0xc0006f7900)
    /go/src/app/service/assistant/assistant.go:107 +0x134
#

that went well.

#

fixed that now

karmic lion
#

pffft.

#

obviously important and relevant to the question: the weather in Paris this week.

#

also apparently relevant: the time in Paris in 3.8838854e+07 seconds

south edgeBOT
karmic lion
#

Techniques in prompting: telling the model that I will sue it if it doesn't follow the instruction.

quasi steeple
#

Have you tried positive reinforcement? Offer it a cookie

sick apex
#

tell it it'll get paid extra if it does well

quasi steeple
#

No need to outright lie to it 😂

karmic lion
#

The suing came to mind because I was instructing it to include attributions where necessary

#

"do this": no response
"You must do this": no response
"You must do this for legal reasons": no response
" You must do this for legal reasons or you will be sued": 100% compliance rate

acoustic wolf
#

what if you give Bobby a fake legal notice

#

will it freak out

south edgeBOT
karmic lion
#

one bit maps

#

aside from the logo, anyway.

#

also available in 64-colour

#

(the colours are tuned to make sense after showing on a Pebble screen)

#

but I don't think I have the memory for lots of colours.

#

the logo is a problem, I'll have to stamp a monochrome version over it or something.

#

(its presence is nonnegotiable, but surely they can't quibble over the monochrome display not displaying it in colour)

#

I guess for the monochrome version I could just say that anything that isn't a shade of grey gets shunted to black.

karmic lion
#

some success in getting the model to generate these.

#

overlapping markers aren't great.

#

not sure what I can do about that, though.

#

(re: grey - I'm intending to dither that)

#

64 colour version, incidentally

#

not sure the extra colour is worth three times the memory usage.

#

my kingdom for xip or something.

#

in general it will be interesting to see what this all looks like when I strip out the antialiasing and such

#

it looks like this. elegant.

karmic lion
#

probably not going to do much better than this in 1-bit.

quasi steeple
#

Does the map come in layers? How are you converting it?

karmic lion
#

there we go, calling that Good Enough for 1-bit.

#

I guess I'll go up to 2-bit for snowy and see if I can make that less bad by keeping some of the antialiasing.

karmic lion
#

for the dithered water, I've set that to pure blue (#0000FF) and then translate any pure blue in the resulting image to dithered grey

#

originally I just set it to 50% grey but that resulted in dithering the antialising, which was undesirable.

quasi steeple
#

Gotcha, seems like a good method

#

2bit looks great

karmic lion
#

I have yet to do 2-bit

#

the ones up above were many bit

#

the pebble colour palette is quite limiting

#

well the last few were one bit

#

but the original ones I was posting were many bits

quasi steeple
#

Ah sorry, misread the message

#

Not dumb, just tired

#

Well, a little dumb

#

The last 1bit looks great then lol

karmic lion
#

2 bit is so much better

#

not sure how to indicate the user's current location without colours, which none of these have

#

I have a map layout that actually uses colours but I don't think I want to spend the memory to use it, especially if I'm trying to antialias

quasi steeple
#

Can you save memory by using a limited pallet? You'd need like what, 5 colors at most?

karmic lion
#

well that's four colours to be apparently black and white

#

the next step gets me eight colours.

#

but that image is already multiple kilobytes

#

1995 byte PNG, then decompressed into a ~3 kilobyte GBitmap

#

plus the memory usage of the PNG decoder

#

I think I can just send it as a 2-bit palletised pbi to save on that overhead

#

but that's still 3k, plus whatever the size of the chunks I transmit it in is

#

I am pretty short on memory so this is a real problem.

#

I will have to figure out what the pbi format actually is

#

also still need to figure out what the "you are here" marker is

#

blue circle won't cut it if I can't show blue

quasi steeple
#

Create a quasi svg renderer for the pebble, then just send the streets as two coordinates for a line, some text for the street and then some squares and circles for forest/water

karmic lion
#

I feel this would use more than 3k in code space

#

but it would solve my aliasing problems completely.

quasi steeple
#

Boom, everything just got way more complicated 😅

karmic lion
#

but also I don't have that sort of data

#

also for legal reasons I must use Google Maps, specifically

quasi steeple
#

Yeah that makes sense

karmic lion
#

I could play really exciting games like having the watch render the you are here marker

#

stick a single pixel marker onto the map, find the coordinates of the marker on the server, delete it, then send those coordinates to the watch to use.

#

this doesn't solve any problems on diorite, though, because I still can't use colour

quasi steeple
#

Can you overlay a cross hair marker on the map and invert its colors so it stands out on the background?

karmic lion
#

might be a smart move on colour watches though

#

sure, or I could just put a white outline around it

#

I was thinking a little arrow maybe

#

one bit is the least useful number of bits.

quasi steeple
#

Alternatively, or additionally, can you have the center of the map always be the "you are here" location?

karmic lion
#

I could do that, but then if all the pins are off to the same side you've wasted a lot of map

quasi steeple
karmic lion
#

currently I am just sticking all the markers on the map and leaving it to Google's judgement what bounds to use

#

(it already has this, that's what pdcs are)

#

no text on those, though.

#

maybe I could give it a little animation.

#

circle with pulses coming out

#

that's workable on black and white

quasi steeple
#

That'd be cute

karmic lion
#

it's also what every map app does, though usually the circle is blue

quasi steeple
#

Flashing arrow maybe

karmic lion
#

also the pulsing usually indicates the position is live, which it wouldn't be

quasi steeple
#

Does the map have to have the google logo? Or can you put a nice looking footer with the copyright info?

karmic lion
#

I can't get rid of that

#

there's no way to tell it to not be there, and it would be a terms violation to crop it out

#

if the image were wider it'd have a copyright notice instead of a logo

quasi steeple
#

Gotcha

karmic lion
#

apparently they switch to the logo at less than 180 pixels wide

karmic lion
#

the logo is also very antialised, which makes it exceedingly annoying to fix up

quasi steeple
#

Interesting, kinda amazed they even support such small sizes in this dat

karmic lion
acoustic wolf
#

sad

karmic lion
#

it does annoy me that they explicitly support a monochrome map (not 1-bit, but all greyscale) but then stuff a colour logo on it

#

why D:

#

it is very heavily antialised and also very bright which makes it pretty annoying to convert to 1-bit

#

also note that the road passing through the o has changed the antialising - they're doing transparency

#

very tempted to just grab the monochrome logo from their website and paste it over the colour one

quasi steeple
#

Can you make multiple requests with different elements on and off so you can do different levels of antialising?

karmic lion
#

I could but I am not sure how it would help

quasi steeple
#

Mostly thinking out loud, sorry if its distracting

#

I assume the logo is always in the same place? Overlaying the monochrome version is a good idea

#

Could probably manually tweak it to look better if needed. I would hope the lawyers wouldn't care about a few changed pixels if it makes the logo more readable

karmic lion
#

the letter E, obviously

acoustic wolf
#

I wonder if one could ask Google to make a logo for low density screens

karmic lion
#

their logo is actually fine for the size/density, it's the colours that are a problem

#

that logo is not just the standard logo downsized, some effort was involved in making it tiny

#

it'd be nice if we could just show the G though

#

although that, again, only works in colour

acoustic wolf
#

a dithered G for B&W

karmic lion
#

maybe less black location markers?

acoustic wolf
#

they're too big for such a small screen size

karmic lion
#

Hard to make them smaller and still put a letter in them

#

and without the letter there's not really any point

#

but generally yes, I agree

#

These are the built-in ones Google provides, which do also have two smaller sizes but they won't put letters in those

#

if I draw my own images I can in principle make them smaller.

#

thanks, really helpful

hollow rivet
#

How readable are the pins if you make them transparent with a border? And with a border around the text too. My guess is it'd be way too busy but 🤷

karmic lion
#

for now I have messed around with generating map images enough

#

I should probably see about actually getting them onto a watch

#

apparently I was the last person who touched pebble's pbi generation, who knew

karmic lion
#

well, not that.

wooden wedge
#

I call this one "4 towere"

#

the towers even have a bit of an evil vibe with an outline of a face in them

karmic lion
#

I flipped a bit in the header

#

several things went wrong this time

#

…I'm not sure what happened to this one

#

something has gone wrong in the top right. maybe?

quasi steeple
#

The google logo looks better

karmic lion
#

I hand-pixeled it

#

anyway I have 2-bit pbi conversion working now

#

(also 1-bit and 4-bit palettes, in theory, but not non-palettised images)

#

now I just need to shove this all the way down to the watch

#

nothing wrong with the conversion here

#

(I'm just converting these back with pbi2png from the firmware for now)

#

the message key list is getting silly

#

there are currently 69 of them

#

oh, it'd also be nice to draw a scale on the map

#

that was the other thing I wanted.

#

hm.

#

problem: I have no idea what the scale is

acoustic wolf
#

why does it look like an offbrand Pokémon

karmic lion
#

no idea what happened there, it seems like something's wrong but it doesn't feel like an image encoding error

#

Maybe the Core Time 2 will have oodles of app memory available and I can afford the full colour image

#

and also a bigger one

acoustic wolf
#

I do wonder why the runtime reserved heap is so large on basalt

karmic lion
#

there shouldn't be any

acoustic wolf
#

66kB reserved for app heap, 30kB for the AppState struct

karmic lion
#

oh, that

acoustic wolf
#

I didn't bother looking at it but from what I saw it was for RockyJS

#

maybe one day we can fix it and finally have more than 64kB of heap space

karmic lion
#

most of the reason appstate is so big is because it has an entire framebuffer in it, which is 24k on its own

#

(and also actually located in your app's accessible memory space, just not part of the heap)

quasi steeple
#

I think the scale is going to make things too difficult to read

acoustic wolf
#

right, the colour watches had a legacy framebuffer in AppState too

#

that's another 3kB

karmic lion
#

The primary value in the map, I think, is having some idea of relative locations

#

is it telling you about the pub in the next town or the one down the road?

acoustic wolf
#

maybe a set of custom markers

#

how many potential markers can you have on screen?

karmic lion
#

in theory, it could decide to put ten on screen.

#

(well in theory it can put an unbounded number on screen, but ten is the largest number of locations it's likely to have at a time)

#

it is instructed to keep it to three or four

acoustic wolf
#

maybe some 10x10 or 16x16 custom markers

#

with different shapes

karmic lion
#

maybe

#

though then it has to reference the shapes by name in the text

#

which is weird

#

if I had the code space I'd probably already have my own text layout engine so I could embed not-text in them.

acoustic wolf
#

well it's one or the other

karmic lion
#

or change fonts mid-flow

acoustic wolf
#

~XIP~

karmic lion
#

there's already a FormattedTextLayer that can do markdown-style headings

#

it's used all over the place

acoustic wolf
#

I wonder if you could just display the marker with the text

acoustic wolf
#

mm, screen resolution hardcodes

karmic lion
#

😄

acoustic wolf
#

I did not know about a FormattedTextLayer

#

this will be useful for a chat client

karmic lion
#

well it's part of Bobby, rather than a thing that generally exists

#

but one could reuse it

acoustic wolf
#

yeah

karmic lion
#

bobby vs New Google Assistant:

acoustic wolf
#

the STT model is the worst I've used

karmic lion
weary ether
#

This is incredible!

karmic lion
#

full screen width is pretty but also an extra 600 bytes over the original size.

#

also the code to handle hanging on to these images is another 3k or something in itself

#

sigh

#

also I guess there's some sort of memory leak in there somewhere, judging by Still allocated <1800B>.

#

really I'm just going to have to start dealing with memory pressure sanely.

#

throw things out if I need more space

#

handwave fragmentation and hope it somehow isn't a problem

#

bonus, more zoomed in map

edgy flame
#

@shell jetty

edgy flame
#

here is the state of things

wooden wedge
#

no need to show them separately

shell jetty
#

looks good! though i might actually consider two levels: an MVP that just adapts the existing UI as closely as possible while adding pagination, and an aspirational design for like the ultimate bobby round adaptation

#

also having just seen the 3.x round main menu, i actually think something like that could be ideal

#

pretty colored circles

wooden wedge
#

we disagreed a lot about the direction, so seeing any of the ideas on the screen might make it easier to visualise the best of them

#

on that note, I will have my round next week I think, so I might be able to test the interface a bit

#

(as much as I wish I found a ptr to buy, I'm just traveling to the country where my stash of pebbles is)

shell jetty
#

i'll put together some rough concepts to try and show what i'm thinking!

wooden wedge
#

hell yeah, can't wait

karmic lion
#

As long as it uses zero code space and does not increase overall complexity 😄

wooden wedge
#

maybe it uses negative code space and reduces complexity

karmic lion
#

I think at this point my basic take on round support is that it should paginate and have different widget layouts but otherwise be unchanged.

karmic lion
#

it is really, really easy to make a pebble reboot

#

whatever happened to having memory protection

karmic lion
#

this map is code, apparently

#

also all things considered I think that's a decently legible map

covert ingot
#

Yeah that's looking good!

karmic lion
#

still need to get the "your position" marker in there

#

also maybe render the pins on the watch so I can do them in colour

#

(but, again, code space, my eternal enemy)

edgy flame
#

that is very cool

#

that is so so so very cool!! omg

covert ingot
#

Could the Bobby backend not add the pins?

karmic lion
#

No, the problem is the size of the image.

#

That is a 2-bit image, and I've used all the bits to get antialiasing to work

#

To add more colour would make it a 4-bit image, which would double its memory usage

#

I don't have that much memory to spare

covert ingot
#

Oh I see

karmic lion
#

Which is why it's in greyscale on a colour watch

covert ingot
#

Yeah makes sense, but you could render a colour layer on top of the image

karmic lion
#

I could

#

as I suggeted above!

#

but again: code space

#

I'm already planning to render the "you are here" marker on the watch, I think, because it'd be nice to make that blue or something.

covert ingot
#

Yeah sorry that was me agreeing with you, not suggesting your idea back to you 😁

karmic lion
#

I may also end up making the map not be full width

#

every pixel counts

#

actually this isn't true, every fourth pixel counts

#

the other three would be padding anyway

#

I might also see how much code space saving I can get by simplifying the image manager so it can only hold one image at a time

#

it's not like I have the memory for lots of images anyway

#

(I can handle two, if the conversation is otherwise short)

#

a different concept

#

this is so precarious that the 'report conversation' screen now crashes the app.

#

although once it sort of worked but the loading animation failed to load

#

bah

#

maybe this is infeasible with the amount of memory I have

#

honestly any new Bobby features are probably infeasible with the amount of memory I have

south edgeBOT
karmic lion
#

well I've pushed a branch for posterity

#

but I'm not sure this is worth pursuing.

#

maybe the Core Time 2 will have a giant pile of memory

wooden wedge
#

time to rewrite with pebble.js to not need to have any additional watch-side code

karmic lion
#

hm.

#

(she says, and then runs off to build an overcomplicated solution to the problem)

wooden wedge
#

can't wait for the results of that

covert ingot
#

Is that the sound of a 2am bedtime approaching

rough cliff
#

Sleep is overrated

karmic lion
#

have another map

#

aand reset the watch again

#

the frequency with which I crash the entire OS is annoyingly high.

fervent steppe
#

indeed, 'y u no know why rebooted?'

#

that is a quite good looking map, and arguably better than my car manages to render on its 24bpp instrument cluster

karmic lion
#
[21:17:05] malloc.c:16> Out of memory! Need to allocate 389 bytes; 436 bytes free.
[21:17:05] pressure.c:57> Memory emergency! Trying to free memory.
[21:17:05] pressure.c:70> Calling memory pressure callback 0x2001e695 with priority 0
[21:17:05] image_manager.c:253> Memory pressure! Destroying the oldest image.
[21:17:05] pressure.c:72> Freed some memory!
[21:17:05] malloc.c:27> Freed 3708 bytes, heap size is now 4144. Retrying allocation of 389 bytes.
#

I seem to be losing several thousand bytes somewhere, though

#

should probably figure out where they're going

#

possibly related: errors about PNG decoding when no PNG decoding should be taking place at all

karmic lion
#

watch reset again

#

sigh.

karmic lion
#

well now (almost) all of the allocations go through this system

#

so if an alarm goes off when the map is onscreen, it unloads the map to show the alarm instead of crashing

#

this is still not a great place to be though

#
[22:25:43] gpath.c:543> Unable to allocate memory for GPath call
[22:25:43] gpath.c:543> Unable to allocate memory for GPath call
[22:25:43] gpath.c:543> Unable to allocate memory for GPath call
[22:25:43] gpath.c:543> Unable to allocate memory for GPath call
[22:25:43] gpath.c:543> Unable to allocate memory for GPath call
[22:25:43] gpath.c:543> Unable to allocate memory for GPath call

well, all the ones I can control, anyway.

#

I think my other take is that all bobby development is canceled because it's just not possible to fit anything into the available space.

shell jetty
karmic lion
#

it would also be nice if any of the development tooling worked at all

#

apparently I can save 7k by deleting all my logging

#

that's a decent chunk.

#

of course now I have no logging.

worn wind
#

I just installed Bobby on my Pebble time steel. I set a reminder but I don't get a notification when the reminder is due. Is there something I need to do to get the notification?

karmic lion
#

and there goes the entire system again for some reason.

karmic lion
shell jetty
karmic lion
#

none of it matters if everything I do is going to cause random system resets with no predictability

#

this functionally kills the project.

south edgeBOT
karmic lion
#

ah shit

quasi steeple
#

Is it worth removing support for POI if it allows development to continue? Maybe limit that feature to watches with the memory to use it?

karmic lion
#

the crashing all the time is independent of the POIs. ish. who knows.

#

between a) being out of memory, and therefore unable to add any more code to the app, and also b) everything just crashing all the time because Pebble, ongoing work is discouraging.

quasi steeple
#

Yeah that's fair. Well I just ordered a pebble time steel I found on eBay. I've done a bit of Dev on esp32s, though nothing with a screen. Any recommendations on where I could be useful for Dev?

south edgeBOT
karmic lion
#

1-bit maps for 1-bit screens

#

don't ask what happened to San Carlos

karmic lion
#

wow, colour.

obtuse oriole
#

This is all bonkers in the best way possible.

shell jetty
#

It's really impressive to me how Bobby has achieved the-thing-that-Siri-And-Alexa-Were-Marketed-As while none of the major players offer anything like it

#

i just asked several follow up questions about this week's weather and it got them all

karmic lion
#

I don't understand Google Maps' marker layering logic, if indeed there is any logic

#

I have discovered that the flaw in my 'stick a pixel in to figure out where the user is located' plan is that, if a marker happens to render above that, the user location pixel is no longer visible

#

apparently this is b/35819311, which has been open for over fifteen years.

#

ugh

#

one gets the general impression that static maps are basically unmaintained.

#

I also wonder what horrifying thing happened to the text here

#

oh I seeee

#

ugh

#

everything has consequences

#

okay, fixed wild text rendering problems

#

once again, it was caused by antialiasing

#

incidentally, for comparison, this is an image directly from Google

#

and this is what it looks like on the pebble

edgy flame
#

that is really well done

karmic lion
#

I suppose in principle I could stamp the google logo back in on the watch side and thus have it in colour

#

though that would cost more memory, and still be an awkward approximation, so pass.

#

also involved in this: the world's most half-arsed pbi encoder

karmic lion
#

okay, on iOS I'm being getting invalid token errors

#

that's exciting

#

what are these tokens the iOS app is giving me that aren't real

#

it appears to just be making them up, they don't exist anywhere

#

ughhhhhhh

#

it is, it's just making the token up

#

there's no way this can work

#

what are you doing, ios

#

the answer to what it's doing is: if you ever install it from the appstore, it gets a real timeline token. if you then sideload it, it removes the locker entry (and incidentally invalidates the associated timeline token), but continues to use that cached timeline token forever

#

fucking pebble apps.

#

screenshot on a real black and white device

#

I guess I should make the 'you are here' dot black, it doesn't stand out at all in the current grey

#

sure, that'll do.

south edgeBOT
karmic lion
#

hm, I was going to use the running pony as a loading animation, but I don't think I have the memory for it in this context

#

guess I'll just have the pulsing dots

#

"but I don't have the memory for it" is an annoyingly common sentiment.

#

in most contexts these images don't cost me all that much memory because I just throw them away if I need the space

#

but I can't do that for the loading animation for the image itself

karmic lion
#

and I crashed my watch again

#

why is the watch crashing

#

completely impossible to debug, I will never know

#

now you get a nice icon when we throw an image out due to low memory.

#

fragmentation appears

[03:46:55] malloc.c:32> Out of memory! Need to allocate 3616 bytes; 3936 bytes free.
[03:46:55] pressure.c:70> Memory emergency! Trying to free memory.
[03:46:55] malloc.c:37> Failed to allocate memory: couldn't free enough heap.
[03:46:55] ault_handling.c:97> App fault! {1d272bb4-cf00-4e3e-a7f3-7394309e0341} PC: 0x80074c0 LR: 0x80a5b15
Program Counter (PC)    : 0x80074c0  ???
Link Register (LR)      : 0x80a5b15  ???
#

maybe I should just statically allocate one image worth of space so I never have to worry about being able to allocate 3600 bytes in one go

#

of course, this means that you are always paying this cost.

karmic lion
#

meh, I give up.

#

not enough memory around to do this.

#

waste of two days.

south edgeBOT
acoustic wolf
#

I wonder how much memory you could squeeze out by doing stuff like packed structs

karmic lion
#

Possibly a negative amount, because packed struts generally require additional code to access their values

#

There are kilobytes disappearing somewhere I can't immediately identify, so evidently there is room for improvement

#

But I'm no longer motivated to chase it

#

Things act very weird in the low memory state

#

Like the dictation UI gets stuck on a full progress bar

karmic lion
#

I guess I could still pull it off if I make it suck

#

Shrink from full width, 1 bit only

#

That's still 1500 bytes for a map

#

But that's better than 3600

#

meh

#

😦

quasi steeple
#

I'd rather have Bobby and no map than no Bobby and no map. Maybe take a break from this feature and work on other aspects of the code?

#

I guess what I'm suggesting is do what you need to so you don't burn out

karmic lion
#

Well I wasn't particularly working on anything else anyway

#

Unless people have interesting suggestions it's basically a finished product

quasi steeple
#

fair enough, just checking

karmic lion
#

The maps did look pretty good n watches aside from the part where the app crashed. Or the watch crashed.

#

I am sad I can't ship them; I think they make the POI features much more useful

quasi steeple
#

in vector_layer.c, your vector_layer_destroy method doesn't look like it's freeing the VectorLayerData.GDrawCommandImage pointer, is it taken care of somewhere else?

karmic lion
#

Yes, whatever created the image still owns it

quasi steeple
#

gotcha

#

holy crap do I hate C

shell jetty
karmic lion
#

Train schedules would be cool

#

Better transit information in general would be nice

#

I tried this once but I was never able to get it to behave well

#

That's all server-side work so it's a plausible thing to dig into.

shell jetty
#

IIRC the problem is transit data is either you have to pay for it or deal with every transit agency's weird individual APIs

karmic lion
#

Bobby pays for many things; as long as the pricing is reasonable it's fine.

#

And ideally pay as you go

shell jetty
#

does google maps expose train schedules programmatically?

karmic lion
#

I don't think so.

shell jetty
#

alas

karmic lion
#

I used Here before, which does expose information

#

Original Bobby had features that post-Google Bobby still lacks:

  • transit information and routing
  • stock prices and information
  • smart home controls
  • pebble health support
#

Removed variously because they were terrible or impossible

#

The Hue stuff I'm sad about, that worked well but a security change broke it

shell jetty
#

alas it seems HERE doesn't support japanese train schedules (admittedly they are probably one of the most complex ones to deal with)

shell jetty
#

yeah too bad about the smart home stuff, that's such a killer app for voice assistants

karmic lion
#

Variously:

  • the transit information was never presented usefully
  • there is no legitimate source for stock market data
  • Hue broke my thing, and Home Assistant is just not the experience I want to offer
  • health info was underbaked and not worth the cost of including the support
shell jetty
#

makes sense, most health queries would probably be something like "how many steps did i take today", which doesn't seem particularly useful

urban solstice
#

Particularly not when it's one buttonpress away from the watchface anyway

karmic lion
#

well it is if you want it to be

#

oh I misread

#

yes.

urban solstice
#

One feature I personally would appreciate - synchronising reminders to the Google Tasks calendar; or, alternatively, a separate "task" reminder that explicitly does this

Setting reminders requires that you know that at a given future time, you will be wearing your watch and be conscious to acknowledge it (or, have notifications set to never timeout, and be consistently diligent about checking through them)
I find that tricky to keep up consistently. With tasks/reminders I set via Google Assistant, I can rely on the notification staying in my phone's drawer and/or in my calendar until dismissed, snoozed, or marked complete, but reminders set via Bobby are quite ephemeral 😅

Having tried to interact with G's reminders (before it became Tasks) programmatically in the past I know it's painful. I can only hope that Tasks is better; but one obvious roadblock is that the Pebble app does not see the Google Tasks "calendar" as a calendar that could be synchronised...

karmic lion
#

That's fair. I don't know how interested I am in digging into it, though - at the moment Bobby has no possible way to do any of this because it's just JavaScript on your phone, so it's a big lift.

#

But timeline reminders are pretty meh, I feel.

#

They are the Pebble Thing

urban solstice
#

Mmm. One thing I had considered was extending Timeline via a third-party "also copy any custom pins to a calendar" task, but the (publicly visible, at least) API does not allow pulling, just pushing.
I reckon just that alone would alleviate my user story

karmic lion
#

Technically the pulling API is just as public as the pushing one if you can get a bearer token

urban solstice
#

Just a case of getting the token and capturing the API call, right

karmic lion
#

pypkjs has an implementation (that polls every ten seconds or something; please don't do that)

urban solstice
#

I realise this is quicky getting out of scope of this thread; but you're the right person to ask, so:
Can I create a JS-only app that could make these (authenticated) API calls via the phone app on some cadence/trigger?

I'm also perfectly happy with a "just for me and anyone who cares enough to capture their auth token" solution, but releasing it on the store would be pretty sick

karmic lion
#

There's no good way to run periodically

#

Nothing stops you other than that, I think.

#

(you can set wake-up timers, but they actually launch the app on the watch and so are disruptive)

urban solstice
#

Unfortunate 😊
The phone JS context otherwise has access to the user's token?

karmic lion
#

Not the correct one; they'd have to extract it and you'd need to make it configurable

#

I misread your message again, I think

#

Oh well

urban solstice
#

Hueh; either way I think that puts us firmly in the realm of "off-store solution dressed up as well as it can be" if I want to have it shareable. Thanks for saving me some RnD time 😛

celest pulsar
#

personal opinion: daytrading stocks is like gambling for the vast majority of people, who have neither the experience nor the knowledge to do it profitably. so easy, non-expert onroads to frequently buying/selling stocks (like keeping track of price fluctuations) are a trap. it's an anti-feature....not that people realize that before they lose most of the money they put in...

#

on the topic of tasks, I'd prefer a solution that hooks into android's task system, rather than the google backend. there are people who keep tasks in other backends (caldav/nextcloud/outlook/whatever), that are usually left out when solutions focus on google services

sick apex
edgy flame
#

i'd be more than happy with the watch not talking to me

#

do u actually want that, or is it just a thing voice assistants are supposed to do?

wooden wedge
#

I would love to see l10n and text size settings applying to bobby, which I don't think it does right now?

#

I would also love more integrations with things like home assistant, but that seems impossible

edgy flame
#

oh that's very true

#

ContentSize is a big one for an app that's mostly text

sick apex
#

Obviously it should have a toggle in Bobby settings if it does materialize

#

but like if I'm driving or bicycling, stopping to read about Gavrilo Princip is unsafe, you know?

#

better to hear it be spoken aloud

wooden wedge
#

how do you operate bobby if you are driving or cycling

#

that seems concerning enough for either

sick apex
#

quick launch

wooden wedge
#

you still need to click a button

karmic lion
#

Pressing physical buttons is pretty feasible

#

I'm pretty excited to make it talk, but only if i don't have to pay the memory cost for the audio

#

Hopefully I can just send it some audio from PebbleKit JS.

karmic lion
wooden wedge
#

poi map that no longer exists should display the compass direction in your current position

#

I found a reason for compass in bobby

karmic lion
#

I have come to the conclusion that I could put the maps back in, but it would be the last feature

#

In general there is space for about one more feature

#

I don't think it's the correct last feature

#

After that all new features will be Core Time 2 exclusive

#

(because 128k of memory is much more generous)

#

(or maybe someone will get XIP working and it'll stop mattering)

#

Localisation is probably a good idea

wooden wedge
#

you mean l10n?

karmic lion
#

I'll write whole words if I want to

#

It's actually easier when using swipe typing

#

Internationalisation is, too

wooden wedge
#

l10n and i17n are the least readable shortcuts

karmic lion
#

you lost a letter there

wooden wedge
#

god damn it

barren raptor
#

kubernetes isn't even that long, I'm not sure why k8s is neccesary

wooden wedge
#

k8s is just stupid

karmic lion
#

It's a lot of syllables and "k8s" is one

#

(it's pronounced "kates")

wooden wedge
#

ok, I hate that more

barren raptor
#

saving 3 sylabbles is not worth kates

karmic lion
#

Also it's easier to explain than the pronunciation of Kubernetes

#

(ku-ber-net-ease? ku-ber-neets?)

#

(it's the former)

wooden wedge
#

I have heard so many pronunciations

karmic lion
#

The real question is how you pronounce kubectl

wooden wedge
#

ku ber nay tees is my fave because it's just mad

barren raptor
# karmic lion Also it's easier to explain than the pronunciation of Kubernetes

Kubernetes - Parody of Barracuda by Heart

Parody Lyrics by Jeff Price
(Lyrics support team Rick Ashford, Tony Oros, Roger Moore and Russ Dastrup)

Vocals - Lisa Giacoletto
Drums - Jeff Price (SUSE)
Guitar - Roger Moore (SUSE)
Bass Guitar - Sean Rickerd (SUSE)
(Tony Oros stand in in the video)

Studio - Man Versus Music in Salt Lake City, Uta...

▶ Play video
karmic lion
#

(koob cuttle? cube kuttle? koob control? cube control?)

barren raptor
karmic lion
#

(there is no consensus)

wooden wedge
#

cube see tea el

karmic lion
barren raptor
#

lmao

wooden wedge
#

that's disappointing

karmic lion
#

Or, of course, Kube Cuddle

chilly moat
#

i pronounce it "kuh-beck-tull"

karmic lion
#

Alas

chilly moat
#

this isn't a joke btw i've had coworkers get mad at me for this

karmic lion
#

As they should

#

Actually I have heard that but generally as a deliberately contrarian option

rough cliff
#

Sequel vs S-Q-L, cube control vs koob cuttle

The IT version of "potato, po-tah-to"

karmic lion
#

But it's been over five years now since I worked on Kubernetes so maybe everyone changed their mind

#

In retrospect a career mistake, they were giving me multiple trophies a year

#

Yup

#

(weirdly, it's not in the actual article)

wooden wedge
#

none of the people in the picture look happy to be there

karmic lion
#

I think it's because we were all just presented a log

wooden wedge
#

is that what that is

karmic lion
#

They told us we were getting this award in advance and comped our tickets

#

Then dragged us on stage and gave us a log in a bucket

#

Chop wood, carry water

wooden wedge
#

I can't believe y'all were not eternally thankful to cncf for the log and bucket

#

severance tier award

karmic lion
rough cliff
#

That's odd

karmic lion
#

I have many feelings on the CNCF and by extension the Linux Foundation

#

They aren't positive

#

Also they drilled a hole in bottom of the bucket so they could bolt the wood to it

#

Which feels like a message of some sort

rough cliff
#

Not carrying much water with that bucket

edgy flame
#

chop wood, carry water...?

wooden wedge
#

chop no wood, carry no water

karmic lion
#

Google's prizes were better.

rough cliff
#

It would also be slightly difficult to chop that wood

rough cliff
#

Very nice looking cube.

sick apex
#

my dad got awarded a chunk of coal encased in a resin cube once

#

for his work at the refinery he works at

karmic lion
#

You can pull the cube apart, it's in a few pieces

edgy flame
#

that is a cool cube

karmic lion
#

The G runs straight through vertically and the rest stack on top

#

Makes great sounds while you do it too

rough cliff
#

That's cool

karmic lion
#

Absurd degree of resonance

rough cliff
#

Not the sound part but you know

#

Not the fastest mobile typer 😅