Lmao I guess I locked myself out by logging in too much while debugging, oops

Tweetbot to the rescue (and the previous post was made with my mastodon cross poster)

Spent all my evening debugging session issues that would only happen in a production environment so this calls for a celebration. First deploy on a prod environment that actually works lmao 🎉

Had to dig GitHub issues because `shrink-ray` is dead, its maintained fork requires old dependencies that don't build on macOS (seemingly), so I ended up `compress-next` which is a fork of `compression` w/ brotli compression github.com/Econify/compression

Network is shit but I got basic gif/video playback working and looking alright.

Media working inside of quote tweets and I didn't have to change any styles (yet) for it to look nice

Later this week I want to get tweet actions working somehow (minus reply) which also means I'll need to think about how to _not_ duplicate tweets in my Redux store whilst being able to have a different RT/liked state for each account/column. Should be fun 😅

Got (un)liking working with instant UI feedback while the network request happens. All the while without duplicating a whole tweet's worth of state to store that 😌

Found out about Lucide which is basically Feather Icons but with more icons so that'll be perfect for placeholder(?) icons lucide.dev/

I wanted to implement a mentions column tonight but then I remembered I had to juggle between API v1 and API v2 types and: yeah no I'm not doing this tonight 😩

I also wanted to try to mock some UI up and: urgh yeah I'll figure this out later lmao

Stuck between a rock (copying current TweetDeck's UI) and a hard place (making something similar but different) and I think I'll just improvise as I implement more stuff.

(That said if you have ideas and want to help on the UI side of things, hmu)

A few helpers and a refactor later, we got mentions column baby

I'm a bit bummed out because I wanted to use the API v2 endpoint for mentions but it returns V2 tweets which dont contain as much as what you get from 1.1 so I use the mentions 1.1 endpoint and lookup tweets on API v2 to grab more things AND THEN make my own representation

I could probably do the opposite but, uh, I did it that way for the home timeline and that's how Tweetbot does it AFAICT so I went for the easy route for now. It wouldn't be too tricky to change anyway.

Not pictured but before taking the screenshot I had an hilarious bug that only manifested now.. I was sorting the tweet IDs in such a way that mentions from 6 years ago were showing up, basically running `_.sortBy(t=>t,['desc']` where some of the ids were shorter than the others

which I obviously didn't notice until now because the home timeline of my test account has recent tweets, good thing I'm using that test account for that because I 100% wouldn't have seen that until much later otherwise lmao

I DIDN'T GET THE SORTING COMPLETELY RIGHT EITHER because sorting big-ass integers as strings didn't work as intended. Anyway, sorting them as floats works fine, phew.

@Eramdam i feel like you're going to hit edge cases because of float precision

@codl maybe but i dont really see what else I could do short of using Big Ints lmao

@codl fuck you're right, hum, guess I'll need to sort by date as a last resort

Follow

@Eramdam what's wrong with BigInts? also idk how you're sorting but you could split the id into a top and bottom part, compare top parts as integers, and only compare bottom parts if the top parts are equal

@codl well,
A) they're not widely supported yet iirc
B) they're not free to use.

That said, I checked a bit more and:
- IDs are sequential but I feel like edge cases could be possible but very unlikely
- I checked how current TweetDeck does its sorting and... it's not that much more complex lmao

@codl (code is deobfuscated and i renamed the variables for clarity)

@Eramdam oh that's clever. length comparison first then lexicographic comparison if they match

Sign in to participate in the conversation
Chitter

Chitter is a social network fostering a friendly, inclusive, and incredibly soft community.