schollz / kiki

An experimental social network that works offline.
https://kiki.network
MIT License
46 stars 6 forks source link

Scuttlebutt? #4

Open iskrisis opened 6 years ago

iskrisis commented 6 years ago

Hi i found you on projectboard.

I am wondering is this completely different alternative to scuttlebutt? You mention patchwork - i use scuttlebutt/patchwork and quite enjoy it. I was thinking about making some apps that use scuttlebutt for different purposes but i wonder if it is worth it to make another social network system.

Can you elaborate?

schollz commented 6 years ago

Yeah this is completely different. I think it's a little simpler than the scuttlebutt protocol.

iskrisis commented 6 years ago

I really like your stuff @schollz and considering you posted that you need help i am thinking about it (i am mainly designer + frontend dev). I am also super interested in social networks (my master thesis is about design of social networks and i got some ideas around it). I just don't know if you really need some help since it seems like fast "write to learn" project.

Thanks for answers!

schollz commented 6 years ago

Thanks @krisak !

Would you be so kind as to forward me a link to your thesis (zack.scholl@gmail.com)? I've been reading up social networks and it would be great to have a really recent resource!

Maybe I posted this project a little early - I'm am still in a learning phase. My goal is to have a much simpler and federated version of patchwork/scuttlebutt - something that I can easily have my technophobic parents be able to use so they don't have to resort to Facebook anymore.

iskrisis commented 6 years ago

You just made the project much more appealing.

I would love to send you the thesis but i doubt you can speak Czech so it would probably be not much of a use. I am currently somehow working on present parts of it in english (since i am thinking about appling for phd) but that will happen who knows when.

I love the idea you have with your project. The thing with patchwork is that it is like twitter - it is public "blogging" platform. Great for discussion but it is not about your inner circle. I do "evangelism" about social networks for people around me and at some point i was hosting https://github.com/humhub/humhub but that thing is just clone of facebook so after while nobody was really sure why to use it and not use facebook instead. It is sort of pointless.

But i think it can be done much better. There is such a big opportunity when you realize that you don't have to do things the way facebook does it. For example current networks don't help with quickly organizing meeting with your friends because they don't want you to go out socialize they want you to socialize at home on the network.

The best social network probably would be the one where you wouldn't have to spent any time at but you would still get all the needed information.

So i am thinking maybe i could write down some ideas and questions and if you will find some of that interesting and we will be on similar note.. i might be able to help with design + frontend. I can't help much with backends since i am not very experienced in that (i actually like Go and tried to learn it but my backend experience is doing sites and cms stuff with node.js and PHP mostly just reusing the ecosystem).

schollz commented 6 years ago

You're right I don't speak Czech, but I can still get value out of it in figures and especially references! I found one good reference [1] which helped me a lot with direction, but I'd like to read more.

The best social network probably would be the one where you wouldn't have to spent any time at but you would still get all the needed information.

I think this is key. The needed information is the hard thing though. My ideal for kiki was to make it easy to share pictures and little updates with my close family and friends without having to have rely on Facebook or anything else in-between. Your idea for needed information is interesting - the information to promote socializing in the real world would be good.

I would be very grateful if you wrote down some questions and ideas! Right now I'm using Patchwork as the template for kiki, in that it is basically a Twitter you store on your computer off-line with different "channels" you can subscribe to. There were things I found were missing in Patchwork that I needed for kiki, like:

Never showing photos unless you are following

Its possible in Patchwork to just post NSFW photos which will show up on everyone's feed (and be stored in everyone's computer). My parents would be appalled by this so I made kiki block all photos from public people, unless you are following them.

Obey storage limits

In Patchwork the storage grew a lot. I'm not sure how many users there are on Patchwork, but I only really engaged with a few of them and was surprised at how much space it required. So in kiki I made some settings that allows you to only store a limited amount of data from those who you don't follow. Data can still be transferred effectively through special "hubs" that basically don't put a large cap on this limits. It also deters people from spamming the network, because their stuff will get deleted unless they have followers.

Allow a totally private network

AFAIK there is no federation in Patchwork. Luckily there is no spam in Patchwork yet, but federation seems to me to be the easiest way to mitigate spam on a network like this. So in kiki the federation is super simple - everything is the same except the region keys which can be generated and used at anytime. This way, I could create a region just for my friends and family (or classroom or business, etc.) and we would be totally insulated from any spam. Anyone could still join the network, they would just need to be invited (i.e. given the region key for our federated network).

Web interface

I believe someone setup something like this for Patchwork - but I had trouble with the interfaces I tried. I like having a downloadable app, but most people use their phones for posting things so I wanted to make sure kiki could work behind a web interface. Actually, my next plan is to make a simple service that allows users to "log in" to their feed via authentication server that just reverse proxies into a Docker instance of kiki. For more technological people, you can just use Web Auth + HTTPS to secure a website dedicated to hosting kiki, so that it can be accessed on a phone.

Multi-computer support

I know there is someone working on this in Patchwork - but this is absolutely crucial for me because I work on various computers all the time and I'd like to be able to see the same feed on all of them without jumping through hoops. In kiki this is really easy - just sharing of a single file. In Patchwork I can't imagine it will be easy - they are using append-only logs which means things have to be synced in order to work, or they will have to do some blockchain type of restructuring of the log when things become out-of-sync.

Editing/deletion

The inability to edit and delete posts in Patchwork is what I find most frustrated. This is also hard for them to change - since they are using the append-only log. Since kiki is based on a "bag of letters" type model, this is no problem. Editing is just letter with a reference of which to be replaced. Deletion is just a letter that references deletion. The synchronization has some logic builtin to throw away "old" edits too, so that this kind of editing doesn't build up in the storage.

Generic framework

In the end, I found Patchwork a bit limiting. While their are generic protocols for social networks (ActivityPub) I thought something really simple that does the basic type of social networking might fill a void and be applicable to other types of social networks (like the one you mentioned). I'm not sure if this is true, and kiki might already be too specific to be of use to someone else. However, the language of the kiki letters is generic and other purposes of letters could be added at any time.

I realize this is a lot, I decided to be really thorough in case someone else from Patchwork came along this thread and was wondering what are the main differences between kiki and Patchwork.

[1]: Kietzmann, Jan H., et al. "Social media? Get serious! Understanding the functional building blocks of social media." Business horizons 54.3 (2011): 241-251.

iskrisis commented 6 years ago

Thank you! I also hope this will not be too long. I agree with all of what you said and i also think it is important to zoom out even further without going into tech.

The problem i have with patchwork is that it is actually not specific enough. Only differing feature is that it works offline. Except that it is very conservative in its design. It doesn't bring anything new to the table. I don't believe it can get adoption outside the privacy minded techy leftist crowd that is there now (who came there mostly because Dominic Tarr, André Staltz and Substack are famous in node.js community).

It is in the details. For example the thing with Likes. They don't even realize this but the way Patchwork implements likes/thumb up is just taken from Facebook and i would argue it is against what they try to achieve. From design point of view if you want to promote discussions then you don't want to have likes there at all since Like is easy way out - you read something like and you feel like you made some effort. By not having it more people will chip in why they like it - what they think. If you want fast way to give opinion you need more than like. You minimally need dislike (or some broader pallet but that is hard and might make stuff even worse). Up+Down is also great for ranking - reddit is build around this. Facebook does not because they are focused on keeping you there so you want people only to get likes so they get addicted to them without danger of anything negative which might make them leave the computer and do something else (and contemplate on why people dislike it). Scuttlebutt takes this straight from Facebook playbook because they all want to be happy and positive. Fine but this does not make critical community or better individuals. By the way having only LIKE is Facebook invented feature not something that was common before.

Some of the stuff that come to mind from my thesis that might be important here.

Memory

Society is build around forgetting. Time helps forgiving and it is because of the fact that our memory forgets. I believe this is problematic on "never forget" type of social networks of today and it will be even worse as people build up more history. I am not talking about some kind of Snapchat - send naked picture that can be viewed only once thing. I mean the fact that everything you post is recorded forever. Forgetting is opt in not opt out - you have to make effort to forget something. This can be very problematic in longer term because people and their views change. You can't escape your past since it is all recorded and people can just scroll down and judge you in context of your past. This gets hot when people change their political views (that happens all the time especially when you are young).

It would be much better if the network was forgetting and users might just mark the stuff they don't want to go away. If it is not worth one click that marks is as important then it is not worth keeping in memory. This would also help to show what kind of person you are by keeping the stuff you think is important.

Forgetting would also help greatly from technical standpoint as you can imagine. You would have much less problems with size of data because it would be cleaning itself.

Social network as virtual assistant

These things are sort of connected. How could the network work for you - more like some kind of assistant?

Order algorithm

The magic of the commercial networks is in the way they feed you the posts. Most of the open-source ones just do chronological order. Facebook tries to guess mix of posts that will keep you there the longest. How could we liberate this? The power of the order algorithm should be in the hands of user. Some of them might like the chronological. Some of them would like to maybe rank the importance of users/topics so they get the important ones sooner. Some technical ones would like to straight up plug in their sorting function. The thing is there can be lot of done here that might lead to great experience.

Limiting yourself

This is part of the algorithm but setting some kind of budget is great way to get the most ouf of social networks. I use this on sites like Hacker news - i want only to see 20 most important posts of the day. This prevents users from mindless scrolling through stuff they actually don't care much about.

Events - calendar

Often neglected but probably one of the most important thing people use social networks for. Most of my friends use facebook solely because they can easily make event there - announce the details and invite other friends. This can be done much better (help with deciding where and when etc). I think it is requirement to have this in social network - patchwork somehow has this but it is just another post and gets lost very easily.

Adoption - Hosting

At some point i came to conclusion that the most probable way for regular people around me to "decentralize" would be give them some kind of system that would replace most of the stuff they need. Everybody is willing to buy cheap Arm board + hdd if it can host their dropbox, password manager, maybe their CV site and social network. The problem is how they will set it up. Everything requires you to be server admin. There is nothing coming close to ease of use of android/iphone in installing apps. At some point i was thinking about using android and old phones but it is not optimal.

It could greatly help with any p2p network if many of its users have tiny homeservers hosting it. I have to look for some operation system like that because i want to help with it. It is crucial for any effort around p2p space.


By the way KIKI used to be my nickname when i was young. Everybody called me that and some family members still do even when i am 190cm-100kg now.

iskrisis commented 6 years ago

@schollz hi i probably killed the whole discussion somehow. I don't want to bother you but i am not sure how i caused this. I was just trying to bring up some ideas... sorry if it was waste of time.

Cheers

xeoncross commented 5 years ago

While their are generic protocols for social networks (ActivityPub) I thought something really simple that does the basic type of social networking might fill a void and be applicable to other types of social networks (like the one you mentioned).

Reading the project Readme immediately made me think of ActivityPub. Your "letters" are structured almost the same way. I would strongly encourage you to use ActivityPub instead of a custom dialect. The only thing I don't like about ActivityPub is second-class support for encryption.