FirehoseCommunity / DEFCON

6 stars 4 forks source link

As a user, I should be able to upvote posts #29

Closed kenmazaika closed 8 years ago

kenmazaika commented 8 years ago

There may be a gem that makes this trivial.

First step, research is there a gem we should use? If you find one, let's talk about it in the GitHub issue.

Second step, implementing the ability to upvote.

kenmazaika commented 8 years ago

Let's have @amarkpark be assigned this once she accepts the group invite.

robertsapunarich commented 8 years ago

I did a quick search and found this. https://github.com/ryanto/acts_as_votable

kenmazaika commented 8 years ago

What are your thoughts on the gem, @amarkpark?

amarkpark commented 8 years ago

@robertsapunarich's https://github.com/ryanto/acts_as_votable find is a great option, I'm also looking at https://github.com/bouchard/thumbs_up which is a slightly more full-featured option and appears to be patched more recently. I'm giving them both due diligence before making a recommendation.

kenmazaika commented 8 years ago

Another, more of a kitchen sink, social network gem is socialization, you may want to investigate: https://github.com/cmer/socialization

amarkpark commented 8 years ago

@kenmazaika will do... Question: do we want the ability to tabulate "karma"? Or do we want to support the FUTURE ability to do so in a later incarnation?

kenmazaika commented 8 years ago

I hadn't thought about that, but I LOVE the idea! So the answer is.... maybe? I'm definitely open to feedback from @robertsapunarich @ceceliahavens @Matt-Lepley

amarkpark commented 8 years ago

At this time it looks like Ken's suggestion of the socialization gem is well mapped out and has a good feature set and is at least current to within 4 months. The docs clearly lay out all the model states and the methods associated with the states such that it would probably be easy to implement. But it is missing the ability to A) downvote and B) track karma that I can see. The thumbs_up gem has karma and up and down voting but lacks the ability to 'follow' or 'mention'. I will dig a bit more to see if there are any that combine all of this functionality while the group decides what elements are most important because as I can tell it will be the feature set that decides which gem to use:

feature thumbs_up socialization
acts like: stackoverflow twitter
upvote x x
downvote x
karma x as # likes
weighted karma x
follow x
mention x
kenmazaika commented 8 years ago

Awesome research, Amanda!

ceceliahavens commented 8 years ago

Can you explain your vision for Karma, and weighted Karma? I'd also like to discuss the pros and cons of using a karma system. Since I live in the charming land of fielding hate messages daily (buckle of the bible belt, plus AIDS Service Org, plus serving as one of the spokespersons for refugee resettlement in our community, has me probably hyper-sensitive to looking at things from all angles before advancing) I cannot foresee anyone finding karma to be offensive, but it does stem from religious doctrine and that alone gives me the desire to at least have a discussion on it. In theory I like the concept of accumulating Karma, as long as we feel it doesn't ostracize, trivialize or offend a group of student's religious sensibilities. FHP has students from all over the world and we want to be inclusive. What are your thoughts on the matter, does anyone foresee a problem with using a Karma system?

amarkpark commented 8 years ago

Another optional upgrade is this gem that allows in-margin comments a la Medium: http://aroc.github.io/side-comments-demo/ . I may be breaking the KISS rules with this last one.

@ceceliahavens Karma as I understand it allows the users who participate in the forums to have something akin to rankings of most-active. And the thumbs_up gem allow for weighted karma which could potentially (off the top of my head) play out as +1 point for posting a post, +.5 points for commenting on or voting on a post, perhaps even +.5 points per x-number-of-likes on a post you post... and potentially points for moderators... who knows! But it is essentially a system of measuring activity within the channel. So then the readers can judge a post/response by how active the user or comment is and thus some advice might be more impactful based upon the higher-level-activity of the entity.

You can see similar things in for instance amazon.com reviews when some reviewers have 5000 reviews and some only have 2.

I'm gonna go out on a limb and say that @kenmazaika is likely to disable the downvoting to avoid that whole flame-war epidemic thing altogether... Am I correct here Ken?

amarkpark commented 8 years ago

BTW @robertsapunarich @ceceliahavens @Matt-Lepley @kenmazaika a search for "vote" in rubygems.org has yeilded at least a dozen pages of results, so I'm sifting through to see if there are any other viable options. I was thinking a medium-like voting/commenting option might be cool as it integrates comments and shares/likes in a novel way. It might require basing the platform on a making a medium-like editor, which there are gems for, but I don't want to change the paradigm mid-game. So if anyone has thoughts about it let me know so I can focus my search.

(edit:) Heh... the number of results MAY have something to do with a votable gem creation being a part of a Tealeaf Academy course... so there may not be that many differences here

colinrubbert commented 8 years ago

If you don't want to reinvent the wheel, we've got a pretty successful and functional up vote system on the lightning talks app. It's pretty simple to implement... Down votes on a community driven application isn't necessary, down votes promote negativity. Our community should always be positive and designed to prop everyone up. Down votes can be toxic.

amarkpark commented 8 years ago

@colinrubbert Did you write it from scratch or implement a gem?

colinrubbert commented 8 years ago

@amarkpark scratch, it's fairly simple.

amarkpark commented 8 years ago

My final thoughts RE: functionality of upvote gems cited: We don't HAVE to make the upvote decision based upon the other features. Sharing, Following, and Member Karma have their own gems to add that functionality as distinct from the voting functionality. Though I'm not sure the Sharing shares within the platform, it may just be for social shares to established other platforms. So sharing intra-platform MAY require the mention functionality of the socialization gem. (And there are at least 2 karma-adding gems that might make up the difference.) We might need to write it to implement it in @colinrubbert's solution, unless you have already added sharing Colin? (I always want to add an extra L to your name...)

colinrubbert commented 8 years ago

For features such as upvotes, sharing, following etc are all pretty simple features to write. Having a gem specifically handle these things may be overkill...I might have missed out on something from last night's meeting but things feel like they are becoming a bit overcomplicated already.

colinrubbert commented 8 years ago

Let's keep this simple right out the gate. Let's just implement a simple and functional upvote feature. If we decide that we want to expand upon that we can always do that in the future. Remember the smaller we can go with a feature, the easier it is to maintain.

amarkpark commented 8 years ago

Yeah, Ken suggested there may be a Gem for it in the meeting. That's why we were discussing the Gems.

kenmazaika commented 8 years ago

My gut tells me we should use both gems, both thumbs_up (for upvoting- for the sweeeeeeet karma support) and socialization (for everything else). Building it from scratch would certainly work too. Either way, it's up to you @amarkpark, do whatever you think the right call is.

colinrubbert commented 8 years ago

The one thing that I would look into with the gems, if you use them, is whether or not the page reloads upon clicking a thumbs up or share. The big gripe I have with our lighting talks app is that when you click on a topic and give it a thumbs up it reloads the page. It's a small annoyance but would be 100x more user friendly if it didn't have to refresh the whole page.

I bring this up because it depends on how we will be implementing the main page with the posts on them. If we have an infinite scroll, really long single page, or click to show more posts and you are very deep into the past posts a page reload would be truly annoying throwing you back to the top of the page. I've ran across certain apps like that and I tend to open links in a new tab if I want to follow a link to not have to start from the beginning again.

It would be awesome if we didn't have to deal with a page reload for every post like we encounter. Whether you use a gem or build from scratch consider page reloads and user functionality on this feature.

If you're truly brave you could find a JS solution :smile:

amarkpark commented 8 years ago

Here are my thoughts... perhaps Colin would be kind enough to point me towards the current implementation's upvote code and I can start adding all of the "best of" features for a FHP community karma system that includes platform specific upvotes, weighted karma, follows and mentions/shares with successive PRs.

We could call the karma the "awesome_factor". Don't know why but that just came to me out of the blue.

It will obviously take longer if I do it from scratch but it will also not have the bloat. If I can use Colin's code as a base this wouldn't become a blocker task for anyone else but instead a value-add task. I would be happy to look into a JS option. Any new skill is useful to add to the toolbelt...

I'm guessing with the page reload issue you've removed turbolinks?