Code Monkey home page Code Monkey logo

steem-fossbot-voter's People

Contributors

ausbitbank avatar cam-b avatar mpawlucz avatar robertsvensson avatar thrize avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

steem-fossbot-voter's Issues

Feature Idea: Multi account support

Add support to add multiple accounts to the voter.

Maybe a section where you can add/remove/modify all the keys that are stored in the script.

This would allow people with multiple accounts to use the bot more efficiently.

New metrics: detect more languages

We only have positive languages checking, and only for four languages: English, German, Spanish and French.

Using the library already used, we can check for many more.

For Asian languages, we would need to do something else, but probably a character set match would work well enough.

Additionally, we could compliment the positive language checking with negative checking, such as post_has_no_english_language_use

Show keywords of posts in stats and email

It is difficult to use the keyword white / blacklist metrics without knowing what kind of keywords are being extracted from posts.

Keywords extracted should be shown on the stats page, and appear in the email / log summaries.

Note that this would require this information being saved in the postsMetadata internal structure.

Separate followers from muted (ignored) users

Currently the steem.js API method getFollowing returns the followers and ignored / muted users together.

These are differentiated by the what field which is blog for followed users and ignore for muted / ignored users.

Fix and documentation for single metric algorithms

So I had an issue where using the "author_is_followed, weight = 1000" algorithm was skipping quite a few of my followed authors posts in my feed. Adjusting MIN_SCORE_THRESHOLD to be lower than the default value seemed to clear this issue up. I will have to play with it more to tune it in better, but figured I'd mention this since it is not included yet in the documentation for "author_is_followed, weight = 1000".

Mentioning carefully tweaking MIN_SCORE_THRESHOLD slowly until feed posts are voted on as desired in the docs might come in handy for some folks using "author_is_followed, weight = 1000". Great bot, thanks a ton for it. Done initial testing, that's all I found so far. Will definitely be firing up my clean machine for a donation very soon. :)

Task: abstract blockchain access away, make implementation agnostic

Be best way to implement both #4 Golos support and #38 try out steemdata would be to abstract blockchain access away from usage code and provide a standard interface to fetch data and request changes (e.g. cast votes) to the blockchain.

Note that these different implementation can be switched at run time so there will be no need to fork the project for Golos support. Similarly, we don't need to permanently choose between steem.js and steemdata, or any other blockchain access method for that matter.

A separate ticket should be raised to add blockchain access method changing in the UI.

Docs: make it very obvious that Heroku Scheduler is "best effort", not guarenteed

The Heroku Scheduler add-on is the suggested method for triggering bot runs (iterations where votes are cast) as described in the installation instructions.

It should be very clearly noted that it is a "best effort" service and may not run every time it is supposed to.

From their manual page:

Scheduler is a “best effort” service, meaning that execution is expected but not guaranteed. Scheduler is known to occasionally (but rarely) miss the execution of scheduled jobs. If scheduled jobs are a critical component of your application, it is recommended to run a custom clock process instead for more reliability, control, and visibility.

This is important information and do avoid confusion and disappointment it should be clear in the instructions.

Redirect user to stats after manual Run Bot command from dashboard

Currently, a user is shown a static message after a successful bot run if triggered manually by them from the dashboard.

There's no technical reason why we should not direct them immediately to the voting stats for that run. This should be done for ease of use and better UX

Document / highlight undocumented features and quirks

Note, this a bug because users could be very confused by some of these

Some features have not been fully documented and there exist some quirks of the software which should be clearly mentioned in the docs.

  • If only one metric with weight >= MIN_SCORE_THRESHOLD, percentage increase is not applied, and voter regulation is only added when voting limit is reached, as a hard value. This is to support algorithms with few metrics to work correctly. Should be clear in the UI that this condition is activated

New metrics: random

For some use cases, it would be good to throw a random score into the mix for every post scoring.

This would be particularly useful for the use case where all the bot does it vote for a large list of whitelisted or followed users.

The random score could be between 0.0 and 1.0 (as is usual for computer library random number generators), and normally distributed. Then the algorithm weight becomes the maximum score to be added (or subtracted, if negative).

Suggested key name: random_normal

Could use other flavours for other probability distributions, e.g. Poisson, exponential, log-normal, etc.

Task: add multi language support

To support the Golos version (Russian), and potentially any other language, we should take out all English language string literals and replace with a translations database.

I suggest we use POEditor for this, it works well, exports directly to GitHub and is free to use, with certain restrictions.

Should add separate ticket to create language selection method, and to translate for each desired language, certainly Russian at least

New metrics: Muted / ignored users

When issue #31 is complete, we can add metrics related to muted / ignored users, which are the opposite of followed user metrics:

  • post_up_voted_num_muted: Number of muted voters who up voted on post
  • post_down_voted_num_muted: Number of muted voters who down voted on post
  • post_up_voted_any_muted: At least one muted voter up voted on post
  • post_down_voted_any_muted: At least one muted voter down voted on post
  • author_is_muted: Author is muted

Should re-score old posts?

Some of the metrics are based on live data which can change, such as who has voted for it, current estimated value, etc.

Should posts which have already been scored be scored again?

Not sure what the best way to do this would be? Maybe the entire last run of posts can get looked at again? Really want to avoid things getting messy though.

Reduce default min post age from 30 to about 21 minutes, to encourage better "citizenship"

Current the default MIN_POST_AGE_TO_CONSIDER is set to 30 minutes. This is because in this post it is confirmed that the curation reward is

curation_reward_weight = standard_weight * [(now - post_create_time) / 30_minutes]^2

Voting for a post after 30 minutes or more gives 100% of the curation reward to the curator, as

(30 minutes / 30)^2) = 1 which is 100%

It's anyone's choice how this wish to vote, but as a default we could set the MIN_POST_AGE_TO_CONSIDER so that the curation reward is at 50%, which gives back to authors and could be argued is better for the community.

To find this use

(21.2132034 minutes / 30)^2 = 0.4999999983 which is approx. 50%

Note also that this is just the minimum post age. Depending on when posts are posted, and how often the bot is run, it is highly likely that older posts will be voted for. So what we are really saying is that we want at least 50% of the reward, and will probably take more most of the time.

Replace steem.js with steemdata

Steemdata is reported to have massively increased access speeds and modern query building using a standard MongoDB interface to the Steem blockchain.

It could greatly improve existing queries and also make practical the kind of large data queries needed to implement metrics requiring, for example, summary statistics of the last 100 posts of a certain author, etc.

Needs further investigation but looks promising

Steemit updates potentially causing fatal errors

I am seeing errors in my apps logs similar to the following when trying to access my app on heroku.

2017-02-17T13:05:49.741203+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=f5.herokuapp.com request_id=e61139e8-9ae8-43dd-97fa-a991e4c4e2bb fwd="" dyno= connect= service= status=503 bytes=

Additionally, when the scheduler runs, it seems to hit an exception when making the api call, as seen by the following log entries;

2017-02-17T13:06:02.540589+00:00 app[scheduler.4785]: events.js:160
2017-02-17T13:06:02.540591+00:00 app[scheduler.4785]: throw er; // Unhandled 'error' event
2017-02-17T13:06:02.540591+00:00 app[scheduler.4785]: ^
2017-02-17T13:06:02.540592+00:00 app[scheduler.4785]:
2017-02-17T13:06:02.540593+00:00 app[scheduler.4785]: Error: unexpected server response (301)
2017-02-17T13:06:02.540593+00:00 app[scheduler.4785]: at ClientRequest.response (/app/node_modules/ws/lib/WebSocket.js:719:15)
2017-02-17T13:06:02.540594+00:00 app[scheduler.4785]: at ClientRequest.g (events.js:291:16)
2017-02-17T13:06:02.540595+00:00 app[scheduler.4785]: at emitOne (events.js:96:13)

This seems to have started happening after recent updates, as per the following link;
https://steemit.com/tag/@ausbitbank/release-notes-for-steemit-version-0-1-170216

Thanks :)

Stats: add threshold calculation breakdown chart

The calculation of the score threshold is multi-variable and somewhat complex.

To help understanding, and do aid in picking a good minimum threshold, percentage increase, max votes per day and scoring metrics in general, it would be good to show this graphically in the Stats section.

It could be its own chart or added to the overview chart, perhaps toggle-able on / off (this is very possible with C3js)

New metrics: users that follow / mute you

It would be nice to add users who follow and mute you to this list of users we can check things against, like if the post is theirs or if they've voted on the post.

TODO: the metric key names

Will vote for own posts

The voter bot does not exclude voting on the user's own posts.

Own-votes should either be excluded, or an option to exclude them be added

New metrics: more author stats

Some metrics were originally proposed for authors but were not implemented due to time constraints:

NOTE: these do not include the post being considered at present in their calculations

  • author_last_post_payout: Last post payout, or est payout if payout has not happened yet.
  • author_total_post_payout_avg: Average post payout for all posts by author (sampled on last Nposts)
  • author_total_post_payout_median: Average post payout for all posts by author (sampled on last Nposts)
  • author_last_post_time: Time since last post in minutes (or should it be days?)

To this, we can also add a few more:

  • author_age: Number of days since account registration
  • author_age_since_first_post: Number of days since authors first post

Question

Maybe it would be better to use months instead of days for these?

Task: local installation support

It should be possible to run Voter as a local installation.

The main areas of difference seem to be:

  • Environment variables (process.env.SOMETHING)
  • Redis database
  • Assumption of greater volume of potential data storage

Change square scaled vote limit scaling for score threshold to linear scaled

Currently the number of votes today increment on the score threshold is square scaled. See the graph from the algorithm docs:

graph-squared

From my own further testing and observations since release, I feel that the effect is much to little to begin with, and jumps too much at the end. While this was the intention, the effect is too great. What we have is a sudden cut off when the vote limit is almost reached, and then met. The desired effect is actually to gently reduce voting and still allow votes to trickle through regularly.

The current formula is the blue line, which is:

increase amount = (max score in window - (average + percentage increase)) * ((number of votes today / MAX_VOTES_IN_24_HOURS) ^ 2)

Simply remove raising the number of votes today to MAX_VOTES_IN_24_HOURS ratio to the power of 2, leave as is. This results in the orange line, which is:

increase amount = (max score in window - (average + percentage increase)) * (number of votes today / MAX_VOTES_IN_24_HOURS)


Note that this may be made irrelevant by issue #7

Email digest delayed until next vote

The email digest will only send the daily report when the next vote is cast on the next day.

It should send when the next bot run occurs, whether or not there is a vote to be cast.

Feature Idea: Manual curation

Add a section in the voter to manually add links for the bot to vote on.

Manual curation would be useful for people who want to add links to vote on.

To add efficency users should be able to queue up several posts.

New metrics: post payout settings detection

Could add metrics for the various payout settings posts can be set as?

  • post_payout_is_powerup: Post payout is set to Power Up 100%
  • post_payout_is_default: Post payout is set to Default (50% / 50%)
  • post_payout_is_decline: Post payout is set to Decline payout

New metrics: More NLP

Add more NLP (Natural Language Processing) metrics for post content:

  • number of profanities (with retext-profanities)
  • number of readability warnings (with retext-readability)
  • number of spelling mistakes (with retext-spell)
  • number of incorrect English usages (with retext-usage)

Some of these may be useless but it is worth checking out what is available through retext since we're already using it.

We should also expand the use of sentiment anaylsis by using boolean values for negative, neutral and positive sentiment.

Thank You

Hi personz,

I have just discovered your project trough github tags, and I would like to tell you how awesome it is.

I love the beautiful d3 charts, amazing documentation and the licensing choice. I see and feel the love you've put into the project, and I'm looking forward to its success.

Please let me know when the new release is ready, and I will re-steem the announcement as well as share it with the whales.

Cheers,

@Furion

Cannot clear white / black list

No action is taken if a previously non-empty white / black list is cleared and updated, the previous contents persist.

Reproduction steps:

  1. Open Edit Algo page in web app
  2. Clear any previously non-empty whitelist or blacklist
  3. Click the Update button

Expected behavior:

White / blacklist which was cleared is now cleared after update

Actual behavior:

White / blacklist contents do not change

Improve server start up time

Because of the way that Heroku server idling works, the server needs to be completely created from a compiled binary every time it idles. It will idle within a short period of disuse.

The start up time for the server is very long and could probably be improved a lot with some simple adjustments. This would make the web app seem a lot more responsive and improve UX.

Add more "personalisation" to web app UI

Could use the user's Steemit name more prominently. Such as "personz voter bot" instead of "Voter", etc.

Note, should only show this when there is an active session, to protected the privacy of the user.

I would feedback on the best way to do this one.

Add voting power conservation

Currently, when counting the number of votes cast in the last 24 hours, the bot counts the total, which includes up votes and down votes.

I'm not sure what the best way of handling this would be, but I think an adjustment should be made.

Since the bot is concerned only with up voting, perhaps only the up votes should be counted.

However, since down voting reduces voting power, perhaps they should be counted. But maybe separately?

From a voting power conservation / wise usage perspective, maybe instead restricting voting (by threshold adjustment) using number of votes per day, it would be better to use the change in voting power directly?

New metrics: Supporter image (badge) or phrase

This would enable a customisable "support" badge, or text phrase, etc., to be recognised for special attention by the bot. It would allow focused support clubs, guilds, or other organisations.

Because an image, or any other web resources, is just a string, setting it to an image, video or phrase is essentially the same thing. Note though that the image (or other resource) used would have to not only be the same image file but reside at the same hosting service.

This proposal requires the addition of a field to the internal algorithm object, something like support_string, and the ability to set it via the front end UI on the Edit Algo page.

The actual metric would be something like:

post_has_supporter: Post contains supporter string (badge URL or phrase)

NOTE: anyone would be able to add this to a post, so it may not be a sought-after feature.

Get "resteemed" posts feed

In the Steemit.com UI front end there is the possibility to "resteem" a post by another user. This is like retweeting a tweet on Twitter, and their post appears in the feed of anyone who follows the resteem-er.

Can we get this information from steem.js? If so it could be another feed source.

In fact, we're only using the new posts feed in the current version. Maybe this could be expanded in general to allow users to pick a feed or multiple feeds?

Needs some careful consideration, we also do not want to overcomplicate things.

New metrics: cheetah comment

Due to the (at)cheetah bot account having such a high standing in the community, it would be an interest metric to see if cheetah has left a comment on the post.

cheetah can indicate:

  • it found similar content on another website
  • that the author is on the cheetah blacklist

Feature: reading list mode (do not vote)

There is a certain use case for the bot in which is it only used to look through posts when the user is not able to engage with the social network, such as going on holiday, weekend or even at night.

To facilitate this slightly more positive usage, we should make a big obvious pause button on the dashboard to pause the bot. This will prevent it from casting votes but it will still process votes.

Improve algorithm testing

The algorithm testing is not very developed. Several features should be improved and added:

  • Variable number of new posts to fetch
  • Improve UI with stats as well as post list
  • Improve test email / log

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.