lonk's recent activity

  1. Comment on An idea how to monetize social software in ~tech

    lonk
    Link Parent
    What other perks do you have in mind? I like the time delay because it does not dramatically change paid and free experiences. It's just a nudge. Unlike paywalls. Another option is to pay for some...

    Seeing content a bit sooner is one possible perk, but there are many others.

    What other perks do you have in mind?

    I like the time delay because it does not dramatically change paid and free experiences. It's just a nudge. Unlike paywalls.

    Another option is to pay for some status signifier. But status needs to be earned, not bought to be valuable to others. The $8 dollar blue checkmark on Twitter was just that.

    How else would you nudge users who find value in the service to pay without ruining it for free users?

    1 vote
  2. An idea how to monetize social software

    I wrote the following as a Twitter thread first but I think this idea could work for Reddit/Tildes/Mastadon and would love to know what you folks think of it. Here is how I would monetize a social...

    I wrote the following as a Twitter thread first but I think this idea could work for Reddit/Tildes/Mastadon and would love to know what you folks think of it.

    Here is how I would monetize a social network that could work for Twitter.

    First of all, don’t charge your most valuable users - the power users that create the content for you. Instead focus on the users that get more value from your system - the consumers of the content.

    The idea is simple - introduce a small time delay before content gets seen from the time it is published. For example, on Twitter it could be 1 minute. On Reddit it could be 10 minutes.

    Paid subscribers would have no delay. Importantly - lift the delay for the users that generate a lot of views.

    You can do revenue share with your content creators in proportion to how much time paid subscribers spent on their content.

    And you can also identify your most valuable audience - the paid subscribers. This will help prioritize content moderation decisions, identify abuse, and prioritize appeals.

    The delay would allow you to prioritize which content needs to be indexed instantly (ie from creators that paid subscribers are following) and which you can process on a best effort basis - saving on production costs.

    You can gift subscriptions to your friends and family.

    7 votes
  3. Comment on Prototyping group decision making with automatic delegation in ~tech

    lonk
    Link Parent
    Thanks for the ideas. To test auto-delegation you need a sequence of decisions to be made by the same group. Only over multiple turns of the game can you cultivate trust in the process and between...

    Thanks for the ideas. To test auto-delegation you need a sequence of decisions to be made by the same group. Only over multiple turns of the game can you cultivate trust in the process and between members of the group. Quite possible that experimental economists do such things all the time, but I find it easier to build a website and invite everyone to use it. As an example, I have tried to pitch LinkLonk without a working site and I found it really difficult. For example, it is easy to dismiss it for being a not sophisticated enough collaborative-filtering algorithm. Or that it will instantly become an echo chamber.

    Contacting folks from Loomio and mySociety is a good idea. I've heard of Loomio (tried their demo) but I haven't heard of mySociety.

    The Advogato Trust Metric sounds similar to Personalized PageRank (where each walk starts from a set of seed users) and LinkLonk uses a super-simplified version of Personalized PageRank.

  4. Comment on Prototyping group decision making with automatic delegation in ~tech

    lonk
    Link Parent
    Thanks for the suggestion! What is the main flow in this case? I imagine something like this: Someone creates a group and sends an invitation link to the rest of the group. We expect the...

    Thanks for the suggestion!

    What is the main flow in this case?

    I imagine something like this:

    1. Someone creates a group and sends an invitation link to the rest of the group.
      • We expect the communication channel for this to exist already (some group chat) => the system does not need to send out emails.
      • The invitation link in this case is shared (no individual invitation codes).
    2. When a new member joins they enter a per-group display name so the other members can identify them.
    3. Any group member can create a proposal ("What to play this Friday night") and the initial set of options.
      • Any group member can add new options to an existing proposal.
      • Options from previous proposals should be suggested. If it's a book or a movie, then previously selected options should not be proposed again, but if it's a game or another replayable activity then repeats are ok. Maybe anyone adding a proposal option should be shown all options sorted by popularity and marked whether or not they have been selected in the past (e.g., "selected 4 weeks ago")?'
      • The proposal and each option is a Markdown-formatted text so it can include links and images.
    4. All members can vote and change their vote at any time.
    5. The current results are shown to everyone => no point to hide the current vote distribution. This is unlike other settings where you may want people to express their preference without being affected by the votes of others.
    6. How should the voting be closed?
      • Obviously, it could be closed when everyone has voted.
      • Should it close at a closing time specified at the creation time (e.g., "in 3 days")?
      • Should any member be able to call the vote closed at any time?
    7. When the vote is closed the option that got most votes (including auto-delegated votes) gets selected.
      • Should the group be able to change the decision? For example, the selected board game is missing some pieces.
    8. Notifications. The system notifies members when a new proposal is created and when the decision is made. The users can choose the notification mechanism: email / browser notifications / none.
      • Should the systems send notifications to members who have not yet voted (e.g., 3 hours before the closing time, or maybe at request of any group member)?
      • The user can vote from the email.

    What would you change about this?

    I can see how auto-delegation is a secondary feature to this and the voting tool as described above could be useful without it. I think that's a good thing!

  5. Comment on Prototyping group decision making with automatic delegation in ~tech

    lonk
    Link Parent
    I understand your perspective from the machine learning angle. Auto-delegation is a very simple algorithm that is similar to k nearest-neighbours, where the neighbours are people who voted like...

    I understand your perspective from the machine learning angle. Auto-delegation is a very simple algorithm that is similar to k nearest-neighbours, where the neighbours are people who voted like you in the past decisions and the prediction is how the neighbours have voted on the current issue. It does not attempt to does not attempt predict the outcome of future voting decisions (it relies on the neighbors to vote).

    Perhaps it could be more helpful to view it as a system of incentives. Sort of a decision delegation market. From this angle each group member is an active agent that has goals and uses the rules of the auto-delegation mechanism to achieve them.

    How good the incentives are will determine how easy it will be to game such a system. A couple of protections from gaming:

    • You delegate your vote to people who voted the same as you but did it before you cast your vote. This prevents people who vote last
    • Being able to change your vote in the future to reallocate who you delegate to. This creates a feedback loop into the future. Maybe this would incentivize experts to vote for options that are good long term? Maybe it would create some skin in the game?
    • Your vote is delegated across all group members, which may lower the concentration of power and therefore reduce the rewards from abusing the system.
    • The algorithm is super simple and has no hyper-parameters to tweak in your advantage (see in this comment)

    There definitely could be ways to game the system but it's hard to think of them in an idea-only format. That's why I want to build the prototype.

  6. Comment on Prototyping group decision making with automatic delegation in ~tech

    lonk
    Link Parent
    I'm actually thinking of delegating the vote to multiple people in proportion to how much trust they have earned from you in your past votes. And it will be a super-simplified version of...

    You could split the votes into multiple shares and delegate them to different people in a PageRank-style system to solve this, but that is even harder to understand than delegating a full vote to a single person...

    I'm actually thinking of delegating the vote to multiple people in proportion to how much trust they have earned from you in your past votes. And it will be a super-simplified version of Personalized PageRank, just like the LinkLonk's algorithm. It should be simple to explain:

    • When you vote on something explicitly you split 1 token of your trust among all other people who voted the same way on that issue (before you). If 5 people voted like you then each gets 1/5 of the token.
    • Your vote is auto-delegated in the proportion of your trust tokens held by people who voted on different issues. If there are two options A and B and people who voted on A have 2.5 of your tokens and B has 0.5 then your vote is split between A and B like this:
      • A = 2.5/(2.5+0.5) = 5/6
      • B = 0.5/(2.5+0.5) = 1/6.

    As you said, maybe this information should be used as a suggestion, instead of fully automatic delegation. Or maybe both.

    2 votes
  7. Comment on Prototyping group decision making with automatic delegation in ~tech

    lonk
    Link Parent
    Thank you! It was indeed case #1 and it should be fixed now. Details in this comment That is why I want to prototype auto-delegation. It is hard to trust based on the description of an idea alone....

    Hm, it's probably not case #2 because the recommended articles tend to come from the same few feeds (e.g. this one), most of them food-related. I must've downvoted them a hundred times or so. I've commented on one of the articles.

    Thank you! It was indeed case #1 and it should be fixed now. Details in this comment

    I still think auto-delegation would be a problem though. It'd be fine to suggest who I could delegate my vote to, so I can check out their political views, but I wouldn't want the system to vote/delegate for me automatically. You wouldn't trust Quadratic Voting, and I wouldn't trust auto-delegation -- so, hm. I'm not sure what to make of it.

    That is why I want to prototype auto-delegation. It is hard to trust based on the description of an idea alone. It could be easier if you are able to try it out.

    Auto-delegation would apply only when you don't vote explicitly. When you don't vote in a regular direct democracy your vote is simply ignored. But maybe if it was delegated to people who represented your interest in the past it would be more fair?

    I'm interested in auto-delegation as an alternative to representative democracy, where you have to trust people who are going to represent you in the future (sometimes for 4 years). What is the trust in representatives based on? Pre-election promises? Party affiliation? Reputation? Stands on wedge issues? These are not very direct signs. What matters is how they will vote in the future on issues that will affect you. With auto-delegation you build trust in other people who vote the same as you do. The system automatically builds their track record of how well they represent your interest.

    There is a lot more to the auto-delegation idea, that I haven't talked about. For example, you could change your vote after the fact. Suppose you initially chose option A, but after a year you now understand that it was a poor choice and that option B would be better. Suppose you change your vote from A to B. It won't, of course, change the outcome of the decision, but it would reassign who you will trust more in future auto-delegated votes - you will trust less people who voted for A and will trust more people who voted for B. This mechanism creates an incentive for people to revisit the past decisions and reevaluate if they were good or bad with the benefit of hindsight. This feedback loop is missing in our current group decision making mechanisms.

    2 votes
  8. Comment on Prototyping group decision making with automatic delegation in ~tech

    lonk
    Link Parent
    To calculate recommendations LinkLonk merges your personalized recommendations (from sources that you liked in the past) with generally popular recommendations (from other users and feeds liked by...

    I like LinkLonk, but I wouldn't really trust it to vote for me, not even for book club stuff. It keeps showing articles from feeds I consistently downvote, for example.
    I can think of two cases:

    1. To calculate recommendations LinkLonk merges your personalized recommendations (from sources that you liked in the past) with generally popular recommendations (from other users and feeds liked by other users). That latter is largely meant for new users who have not yet established trust connections through their likes. The generally popular recommendations have a very low weight and if you have liked enough sources then you would not see them ranked high. Because of that assumption, I have not implemented logic to filter out generally popular recommendations from sources that you downvoted in the past.
    2. When an article comes from multiple feeds (like this one from 8 feeds) if you downvoted something else from one of the feeds, then you would still see that content from other feeds. The logic is this: if you don't trust one source it means that you pay zero attention to its recommendations. This is to prevent abuse where someone may earn negative reputation and then use that negative reputation to demote good content.

    To help me understand which case this is, could please comment on LinkLonk under an item that you don't expect to be recommended to you? I am pretty sure it is case #1 and if so I should be able to fix it.

    If the goal is to make a voting system, I'd probably just give the users 'vote credits' ala Quadratic Voting. If someone doesn't care for an issue, they could just hoard their votes for next time or maybe directly give the credits to someone else. It might be nice to have a "suggest me a way to spend my credits given my previous voting behavior"-button though, because the thing about quadratic voting is that it is a bit onerous.

    In Quadratic Voting you are able to purchase votes for money, but the price for each additional vote increases quadratically, so you cannot have unlimited power. This may try to solve some issues with voting but it introduces other issues: in such a system the vote is no longer democratic (1 person = 1 vote) and this may make people doubt the legitimacy and fairness of such decision making mechanism.

    Your idea to give credits introduces incentives to hoard voting credits and then use them for the issues you really care about. Would that make people even more disinterested in more common trivial issues? In such case could special interest win by making certain issues look like they are not worth your vote?

    My goal is to try out the autodelegation idea in a toy project. There are a lot of things to figure out - just like with the bugs in LinkLonk - and it would be good to have some real-life use-case for it. The goal of autodelegation is to cultivate trust in the decision making process, find people who are good at representing the interests of other people and let them use that expertise for good.

    How to invite to the group - by sending email or a link.

    Why not both? Display the link and put a button there that automatically sends an email, maybe with a textbox for a customized message.

    Yes, the answer could be both. Or, for some use-cases, it could be that you don't need to manage the group membership at all. What if the group membership is determined by the domain name of your email address? In that case, <anyaddress>@bookclub.com is a member of "bookclub.com" group. Or groups could be managed by an external system - like Patreon supporters, Discord server members or subscribers to a newsletter.

    2 votes
  9. Prototyping group decision making with automatic delegation

    Hey folks, I want to prototype a tool to help groups of people make decisions using a new decision making mechanism. We have two systems of democratic decision making that have major downsides:...

    Hey folks,

    I want to prototype a tool to help groups of people make decisions using a new decision making mechanism.

    We have two systems of democratic decision making that have major downsides:

    1. Direct democracy - everyone votes on every issue. Downside: not everyone has the time and the necessary expertise to vote on every issue.
    2. Representative democracy - everyone votes who will represent them and the representatives vote on every issue. The downside is the corruption - the representatives may not represent the best interest of those who entrusted them.

    The idea I want to explore is a hybrid of the two systems:

    • Like in a direct democracy you can vote on every issue.
    • If you do not vote on a given issue, then your vote is automatically delegated to people who voted like you in the past.

    To test this out I want to build a website [1] where anyone can create a group and invite others to the group. The group members can create proposals and vote on them to make a decision.

    For the idea to be tested the group needs to make many decisions over time (ie, not one-off polls like strawpoll.*). Only then can it take advantage of the delegation based on “voted like you in the past”.

    The details of the design will depend on the use-case:

    • How should the group roles work? Would it be enough to have owner & member roles?
    • How to invite to the group - by sending email or a link.
    • Should every member be able to propose options or just the creator or the vote?
    • Should the voting be closed automatically after some time or by hand?
    • Do you delegate implicitly or explicitly - ie, have a vote option to delegate.
    • Do you vote for a single option or can you rank options in the order of your preferences?
    • Open ballot vs secret ballot?

    Some ideas for use-cases:

    • Choose the next “team-building” activity at work.
    • Make content moderation decisions.
    • Which book to read next in a book club. Maybe transfer the list of books and the votes from the previous vote to the next.
    • Make and record company decisions by shareholders. In this case you would want to weigh the votes based on share ownership.

    I think starting with a specific use-case in mind is a better strategy than trying to build a generic tool.

    What do you think? What would you use such a tool for?

    [1] - I will likely make it part of my existing project https://linklonk.com/ unless I find an available good-sounding domain name.

    12 votes
  10. Comment on What programming/technical projects have you been working on? in ~comp

    lonk
    Link
    I am going through the process of publishing my website https://linklonk.com as a Progressive Web App (PWA) on the Google's Play Store, following this tutorial:...

    I am going through the process of publishing my website https://linklonk.com as a Progressive Web App (PWA) on the Google's Play Store, following this tutorial: https://chromeos.dev/en/publish/pwa-in-play

    The process is straightforward except for two bits:

    • I uploaded the app bundle to the Play Store and enabled Internal Testing for it, but it the internal testing app link would not work for a few days. Quite a few people have this problem based on StackOverflow questions like this. I think there is some async process that is not reflected in the UI that caused this. Because waiting a few days fixed the issue - I can install the app through the internal testing link.
    • Once I launched the app there was a browser bar at the top - the point of a PWA is to look more like a native app, so the browser bar shouldn't be there. Apparently, I needed verify that I own both the app and the website by placing this file: https://linklonk.com/.well-known/assetlinks.json - it says that an app signed with that certificate is authorized to open all links for linklonk.com/*. The tutorial mentions this asset link in https://chromeos.dev/en/publish/pwa-in-play#digital-asset-links, but the specific steps to follow were missing. And again, after generating and uploading the assetslinks.json file it took a few re-installs and half a day for it to have an effect. This time the asset link file was probably cached somewhere - either on some servers or on my phone.

    Any Android user could already install the LinkLonk PWA directly from the browser (open linklonk.com > open browser menu > select "Add to Home Screen"). This adds the site to the home screen as any other app and it opens the site in full-screen mode - without any browser status bar.

    The Play Store listing creates exactly the same thing. So what's the point? Is it worth going through the process of creating a developer account which requires uploading a government id and paying a $25 fee?

    The above tutorial gives these reasons to list on the Play Store:

    By listing your PWA on Google Play, it becomes discoverable in the world’s largest app store. Google Play also offers app ratings and reviews, giving users insight into your PWA before installing it. Finally, when you list your app in Google Play, you also get the power of Google Play Billing, giving users a familiar payment platform to work with while supporting payments from multiple countries.

    The last point about billing is not relevant, because the site is free to use, but I'd like to see if it can help find more new users.

    The app is still in unreviewed state, so I cannot publish it yet. The holiday season is probably not helping make this process faster. If you have an Android device and would like to help test the app, send me an email at lonk at linklonk domain and I'll add you to the testing group once the app is reviewed and is ready for closed testing.

    Does anyone else have any experience publishing a PWA on Play Store?

    2 votes
  11. Comment on What programming languages or technical projects did you focus on in 2021? What will you focus on in 2022? in ~comp

    lonk
    Link
    For my hobby project LinkLonk, I really enjoyed using Golang for the server part. In particular: The language is simple - even though I don't use it all the time, I find that I can remember the...

    For my hobby project LinkLonk, I really enjoyed using Golang for the server part. In particular:

    • The language is simple - even though I don't use it all the time, I find that I can remember the syntax more often than for other languages (where I have to google how to do a basic for-loop or what not).
    • Excellent backward compatibility - no issues with upgrading the language version (https://go.dev/doc/go1compat). For a project that I do in my spare time the last thing I want to worry about is upgrades. The plan is to introduce generics in a backwards compatible way. This gives me confidence that my code will continue to work as is and I would still be able to use the new features.
    • Great library support for server-side stuff - anything I needed was very easy to find and use: Markdown parser, sending Push Notifications, sending emails.
    • Static typing - I develop the project with large gaps of time in between. I can't keep the state of the code in my head. The static typing checks are a great assistive tool. I don't need to worry about breaking something when refactoring code. At the same time I don't feel like static typing introduces too much boilerplate (unlike C++ or Java).
    3 votes
  12. Comment on What programming/technical projects have you been working on? in ~comp

    lonk
    Link Parent
    Thanks for testing! skybrian@ helped me find the issue over PM. The login dialog was broken only when you tried to open it on the item details page. The details page has a comment form which...

    Thanks for testing!

    skybrian@ helped me find the issue over PM. The login dialog was broken only when you tried to open it on the item details page. The details page has a comment form which fetches the name of the user from the server. But it didn't work in the case when the user was not signed in. This caused the whole page misbehave and the login dialog was affected. I fixed the handling of this case.

    The bug was on the server side handling the /user/profile request when the user was not signed in. There was a pointer variable "currentUser" that I did not initialize when the user was not signed in (since there is no user), but /user/profile tried to access currentUser.name, which caused a panic (a Go analogue for a NullPointerException). To fix it I initialized currentUser with a stub user with an empty name. Result: /user/profile simply returns a user with an empty name, instead of returning an internal error (code 500).

    1 vote
  13. Comment on What programming/technical projects have you been working on? in ~comp

    lonk
    Link Parent
    We don’t have many active users, so the popular page has little content indeed. But you should be getting content from RSS feeds that posted content that you liked before. Are you not getting...

    We don’t have many active users, so the popular page has little content indeed. But you should be getting content from RSS feeds that posted content that you liked before. Are you not getting enough from RSS feeds? If so, maybe you have not yet connected to enough feeds? Please try upvoting a few links or, better yet, submitting links you found elsewhere to https://linklonk.com/submit. That will let the system know which RSS feeds to bring you content from.

    1 vote
  14. Comment on What programming/technical projects have you been working on? in ~comp

    lonk
    Link Parent
    You should feel free to use LinkLonk to collect links just for yourself. The idea of LinkLonk is that the user has control who they want to get recommendations from. If they are not connected to...

    You should feel free to use LinkLonk to collect links just for yourself. The idea of LinkLonk is that the user has control who they want to get recommendations from. If they are not connected to your channel, then the links you add to that channel won’t rank high on their For you page. It’s only the brand new users that are not yet connected to anything will be most affected. In that case the recommendations they see are ordered basically by popularity.

    I remember you posted about this concern of spamming people on Tildes. I think it was in the context of whether too many music links were posted. That should not be a concern on LinkLonk.

    Maybe LinkLonk should have an option to exclude your channel from showing up in popular - so the items from this channel would only be shown to users that happen to also upvote what you put in your channel?

    Thanks for the bug report! When you press Sign in at the top of the page, you should see a dialog, but the fact that it is empty for you means that something is broken. I tested logging out and back in in Chrome on my phone and my laptop and, unfortunately, I couldn’t reproduce the issue - the dialog worked. If you could send me any details - please PM me. Too bad the issue is on the phone - there are no Developer Tools that could be easily checked for errors in the console or in the network requests.

    1 vote
  15. Comment on What programming/technical projects have you been working on? in ~comp

    lonk
    Link
    I'm facing one of the two most difficult problems in programming: naming things[1]. In my personal project LinkLonk, when you upvote stuff you put it into a "collection", but I'm now thinking that...

    I'm facing one of the two most difficult problems in programming: naming things[1].

    In my personal project LinkLonk, when you upvote stuff you put it into a "collection", but I'm now thinking that calling them "channels" would be better.

    Here is what I posted on this topic in https://linklonk.com/item/7735497677823082496:

    I posted an explanation of how collections work on LinkLonk: https://linklonk.com/item/2369676162410512384

    But is collection the right name for it? I came across the word channel and it sounds more fitting.

    Some reasons:

    • Collection is passive, while channel is more active. You don't collect links on LinkLonk for the sake of collecting (though you could do that). But the main goal is to discover more useful information and to help others do the same.
    • Signal-to-noise is a core idea of the LinkLonk's algorithm and it is more related to channels than to collections.
    • When you upvote an item you could say you are "tuning into" the other people's channels that transmitted that item. Or you amplify the volume of channels that resonated with you.
    • A channel has a concept of order, which fits how LinkLonk works - you connect to channels based on what they "transmitted" in the past to get what they will transmit in the future. A collection does not necessarily have an order. For example, in programming language Java, a collection can be ordered (a list) or unordered (a set): "A collection represents a group of objects, known as its elements. Some collections allow duplicate elements and others do not. Some are ordered and others unordered." (source)
    • On LinkLonk you can connect to RSS feeds and to other users' collections. Both are treated in exactly the same way by the algorithm - a sequence of items. Channel is a name that could be applied to both RSS feeds and user collections. But I wouldn't call an RSS feed a "collection". It's a good sign that "channel" covers both sources of information.
    • A collection may give an impression that you can rearrange items (like bookmarks in a folder), while a channel implies ordering by time => less likely to create unmet expectations.
    • Each user starts with one collection that is called default - I don't like this name, but I can't think of anything better. If we use channels then I think the default channel could be called main. I don't know why, but I think main works for channels but not collections.

    I think it is very important to get the names of the main concepts right because better names help users create more accurate models of how the system works.

    What do you think?

    [1] - The other problem is cache invalidation - I solve it by running the server as a single Go binary, so it is easy to keep track of cached state since all changes to the database are done through this binary.

    3 votes
  16. Comment on What programming/technical projects have you been working on? in ~comp

    lonk
    Link Parent
    Tildes seems to have a top-level "Ignore"/"Unignore" functionality. My understanding is that it is used in combination with your own comments - you get notified when someone responds to your...

    Tildes seems to have a top-level "Ignore"/"Unignore" functionality. My understanding is that it is used in combination with your own comments - you get notified when someone responds to your comments in a tree unless you press "Ignore" on the whole tree. Is that right?

    1 vote