Downvote control tool proposal delivery #3

in #downvotes5 years ago (edited)

Hello,

if you are not familiar with the tool, here's the initial post : https://steemit.com/downvotes/@howo/introducing-downvote-control-tool-an-open-source-downvote-tool

tl;dr : This is a tool designed to empower everyone to downvote by creating a toolbox with lots of parameters so that everyone can have their own customized downvoting campaign and target just what they believe is abuse.

It's been three weeks. This week has been mostly implementing features and improving the UI/UX.

You can already find all of the updates live on https://downvotecontrol.com

UI/UX improvements

I felt that the way the global settings were displayed wasn't really pretty so I took some time to trying out a few different layouts, I thoughts of doing tabs like for the other settings or displaying them in a table. But ultimately went with aligning everything, I am still undecided and might go for the table design ultimately because I am unhappy with the way the inputs look like currently.

I did a lot of small UI and UX changes that aren't really visible but that adds up and make up for a nicer experience. For instance you can now use the enter key to perform actions like add, save, login etc

Voting history

Thanks to some of last week's work I was able to push this feature. It's a list of all the votes that you did using downvotecontrol, including why you did them, so you can easily see how your downvote settings are working and if you see yourself downvoting things that you shouldn't be downvoting you can easily adjust your settings and remove your upvotes/downvotes using the unvote button. Looking for someone ? A specific post ? Or a specific vote ? Everything in this table is searchable.

So if I search for "100" it will show me all the votes where I voted at 100%, if I search for "trail downvote" it will show me all the votes that I did while trailing someone. Etc etc, I really like this search feature because it allows you to basically search for whatever you want. Oh and it's dynamic, it will show you results as you type.

Hitlist

This feature might be a little controversial but I felt that it was needed. The concept is simple : downvote an user with y% whenever one of his post or comment reaches a payout higher than x$

Since explaining the feature was so simple, I'll explain some of the algorithm choices that I did :

Algorithm thoughs

I spent quite some time figuring out a way to make it scale, In the first version I refreshed the payout whenever I detected a vote was done on this post, but during tests I realized that some posts recieve thousands of upvotes, making me make thousands of useless calls to the steemit api.

The best solution

So I toyed around a few ideas. I think the best way to tackle this is to use a hivemind node and just call your db locally every x minutes on tracked hitlist authors, and if one of their posts has a payout that is higher than what is written in the hitlist, make a vote. I think this scales very well and can easy scale even more if I "mark" posts that were voted in the past x minutes and only check those. This would basically allow the feature to scale extremelly well and even if you were to hitlist all the active posts on the chain, the tool could handle it.

But it has a huge drawback : it requires you to have a hivemind instance, which consumes a lot of computing power and memory. Currently the tool requires very little ressources ( live version is currently hosted on a 5$ a month digitalocean doplet), I already host and pay for a hivemind node so I could just set the live version to use that node but it means that if anyone wants to run downvotecontrol (it's open source for a reason), their costs will be drastically different. Which I absolutely want to avoid as I want to let anyone run their own version.

The actual best solution

Hence why I decided to go for an alternative version. On my tests it could scale pretty well so I am pretty confident that this is a good solution in terms of costs vs scaling potential. Basically whenever a vote is casted on a post I set a timer stating "I will check in 30 seconds the post payout", but if I detect another vote on it, the timer gets refreshed and we wait 30 more seconds. This is especially useful to handle the load when a lot of people trail each others and you have like 50 votes in the span of 10-15 seconds. So instead of making 50 calls you only make one.

Anyways, I could ramble about technicalities for hours and this update is getting pretty long so I'll stop there :p

That's it for this week. If you like what I do please consider voting for our witness @steempress and for the downvote control tool proposal : https://steemproposals.com/proposal/34

as always you can find the code here :

Front end : https://github.com/drov0/downvote-control-tools-front
Back end : https://github.com/drov0/downvote-control-tool-back
Voting bot : https://github.com/drov0/downvote-control-tool-bot

@howo

Sort:  

I would have understood this if it was explained as if it was for the average joe

Thanks for analysing it properly because am some domt really know about the new downvoting rule. Thanks for sharing

This post has been included in the 201st edition of The Steem News - a compilation of the key news stories on the Steem blockchain.

..thx a lot..seems that downvoting is getting a business...

Congratulations @howo! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You distributed more than 26000 upvotes. Your next target is to reach 27000 upvotes.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

If you are interested in your profile achieving greater reach on the platform, I would like to offer you my translation service

Good information friend, I liked your blog :)