Charlotte's Twitter Playground

Nothing on here takes, steals, uses your data but for the moment you press the button. I'll try to explain what each one does.

Authorization Questions?

If you want to know a bit more about how/why authorization is required for some of these

So - Twitter uses OAuth for authorization - this is a SSO (Single Sign On) affair, meaning that you login to Twitter, i.e. when you put your username/password in, you're doing this on Twitter not here.

After you've logged in, you give permission for whichever app to have the permissions it asks for, now, this should be the bare minimum a developer needs. There are a couple of reasons why this might not be the case:

  1. The developer is lazy - it's hugely easier to write something where you know there are no restrictions in place
  2. The dev needs the permissions - for example, if one of these wanted to add a 'block' for you, it would need 'write' permissions, but not access to your DMs
  3. The dev wants to do something nefarious - like add themselves to your follower list and then mute their account (which is exactly what the original 'Family' devs were doing)

Aaaanyhews, once you decide to authorize Twitter sends back a token to me, this is then used by me whenever I ask the API for anything. This basically allows Twitter to know that I am asking the API on your behalf.

I could keep that token, to allow you to not have to authorize each time you come here, by default - I won't be doing this - for me there are a few reason - 1 - I'm too lazy and 2, I really don't see the need.

For any of the things below, I'll try to explain exactly what is happening, what permissions I need for that, and well - you never have to press on it!

I am willing to show you the code should you want to, and might whack it into an OSS thing later on - just being lazy remember!


Families

This is just a silly way to see who you most interact with - and can lead to some fun conversations!

Read-only

I need this to be able to view your mute/block lists. Without it - there is a chance that the person you've been having a 'discussion' with turns up in the family due to the way the algorithm works.

See someone who you don't want there? Mute/Block and regenerate - they should be gone!

I only need 'read' permissions, you can see this when you get to the 'authorize' page - there is no need for me to write to your timeline.

The side-effect is that I don't have a 'Tweet this' button - as with everything, it's a compromise, but I figure that as most people know how to screenshot - it's less of an issue - and means you have full control over what is presented to the world as you.

This is super basic, (as I think most of these things are) - the original 'Families' thing would change from day to day (depending on how active you are) and was entirely based on mentions - by people, and at others.

We have 3 things we're looking for, Parents, Children and a Spouse (how archaic) - anyway, I work these out like this:

  • Parents - The top 2 people who mention you - this uses your mentions timeline
  • Children - Top top n people you mention. n in this case is set to 4 (though we can go as high as we want) - the other peeps are ordered (desc) then we just Take(n) if this results in hitting a set of people who are all the same in terms of how much you've mentioned them? We just go 'as it came' which I guess is pseudo random.
  • Spouse - This is the 1 person you mention and mentions you the most - this is worked out from the Parent/Child lists together.
  1. Get you
  2. Get mutes & blocks
  3. Get Parents (from most recent 200 mentions)
  4. Get Children (from most recent 200 tweets)
  5. Remove all mutes and blocks from Parent/Child collections
  6. Order Parents/Children by 'number of mentions' descending
  7. Take 2 Parents
  8. Take n Children
  9. Get profile image Uris from each 'person' - resize to 138x138px (don't ask)
  10. Overlay across the template (drawn in Paint if you want to know)
  11. Render it on the screen.
An error has occurred. This application may no longer respond until reloaded. Reload 🗙