Magic, Badges, and Punnery (Week 5)

  • Jun 28, 2012
  • 2 Comments

 

For me, this week has revolved around magic sort and badge organization.

 

Magical Mayhem

I spent a day or so continuing to organize the details of magic sort. I know what I want all the sort criteria to be, but there are many and figuring out the hierarchy of precedence has been challenging. Along with building spreadsheets for easier ordering manipulation, I took some time to examine how scoping works on models, since I planned to create scopes and combine them as the main way of creating the sort.

By Tuesday, Jordana and I agreed that I should create a “first iteration” version of magic sort, that didn’t consider all aspects, but still held onto the principle mechanics. I drafted this and we went over it, making minor changes to the order in which things should be prioritized. For example, popular worlds are more likely to be liked by users and therefore to inspire them, as opposed to worlds that have “good” badges, but aren’t necessarily interesting. I had planned to first get all the worlds with the appropriate badges and then to order them by popularity, but it makes sense to sort all the worlds by popularity and then remove (or shift down) the worlds without the appropriate badges. This way there aren’t appropriate but boring worlds showing up at the top of the results. After finalizing this simplified magic sort, I began coding. I started on the worlds index page.

At first I was trying to use just scopes, but when I finally found an example of sorting by the count of a world’s has_many object (likes), it turned out that the scope would only return worlds that had a count of greater than zero likes. I also needed to sort by the existence of something (followings) that belongs_to something (user) of which a world has_one, so scoping was just getting too complicated. I switched to just defining methods in the model and that has been pretty successful so far. Worlds are sorted by their remix count. Ties are broken by the like count, and further ties are broken by the views count. Within each tier of worlds (same number of remixes, likes, and views, respectively) the worlds created by a user’s followee are at the top of the tier.

Now I’m working on creating methods that indicate in what way a world/challenge/user is related to another world/challenge user. I’ll then use the feedback from these methods in order to weight certain relationships based on their nature and distance. For example, remixing is more important than bookmarking which is more important than liking, but proximity to the active user is also important. For this reason, a world remixed by a user who liked the same world as the active user might be less important than a world bookmarked by a user who remixed the same world as the active user. This is because despite the first world’s relationship involving remixing, the remix is further down the line away from the active user. I’ll need to find a way to check that mutually exclusive cases are handled appropriately, mostly in the case of the “created by” relationship.

 

Breaking Down Badges

Aside from aspiring to do magic, I have spent this week working with the other muggles to organize badges into a logical, expandable system. There are three main categories of things we think are badge-worthy: performing desirable, community-side actions; correctly using programming constructs to accomplish higher level goals; and identifying IDE features and using them to improve ease and logicalness of code construction.

At the first meeting, we divided up into three subgroups; Caitlin and I were in the community-side actions group. The members of each subgroup came up with a list of things they thought fit their category and then we all set about writing post-it notes for each of these potential badges. We then organized each set of notes into what we thought was a logical progression through four levels (bronze, silver, gold, platinum). Caitlin and I came up with five paths that a user could fall into: story creator, challenge creator, apprentice, master, and librarian. The first step of the story creator path is to share a world and/or enter a challenge, after which the first step of all the other paths is also an option. The story creator badge mostly involves creating worlds with increasing complexity. The challenge creator is good at prompting others, and creates increasingly useful, entered, or inspiring challenges. The apprentice learns from another user by remixing and following that user and his/her worlds. The master helps other users improve skills (s)he has already mastered by providing examples and suggestions. The librarian takes it upon him/herself to organize the site by improving and adding tags, as well as creating compilation worlds through remixing. The other groups also came up with great structures for organizing the other two sets of badges within the level system.

At the second badges meeting, we divided up into different groups by having one member of the original groups stay, and the other members join a different group. I stayed, and was joined by Patrick. We organized badges into a system based on a storytelling structure, meaning fitting badges into groups based on overarching concepts that LG users should learn. We tried to incorporate the level system as well, again using four levels as the ideal. Patrick and I struggled to find “storytelling” goals that could encompass community-side actions, but we ended up with five categories, which we enjoyed naming. “Sharing is Caring” involves all things about world creation aside from remixing. “Challenging others” is for the user who is good at creating challenges that prompt others. We included the progression of entering challenges in that category as well, it being the challenge-centric badge. The “Imparting wisdom” category encompassed things having to do with having followers or having your worlds remixed multiple times, since those things imply that other users are learning from your worlds. “The more you know” is the mirror of the “Impart wisdom” badge, and deals with learning from others through goal setting and following. “Remix-a-lot” is the remix badge, for the user who learns best from remixing others’ worlds.

At the second badge meeting, the decision was made to combine the construct and IDE badge sets into one, colossal set. We collectively made a copy of that entire set of post-its so that two groups could work on the reorganization of that set. After finishing out community-side badge organization, Patrick and I each joined a group working on the IDE-side badges. I worked with Michael and Jordana, and we came up with seven (awesomely named) categories. “From beginner to winner” is the initial badge, which includes all the things we think a user should learn in order to be proficient at world sharing on Looking Glass. “Animazing animations” includes things like joint manipulation, useful DoTogethers, and other things that would help a user create better, more fluid and realistic animations. “The only badge that counts” deals with loops, synchronization, and ways to re-use code effectively. “Un-conditional Love” teaches the user about conditionals, including many aspects of if and while statements. “Arrays to the finish” deals with arrays, for each in _ ’s, each in _ together’s, and other groups of objects. “Cool tricks” encompasses the set of things we thought were useful, but not essential to success, for example setting the fog density in a scene. “Finders keepers” were small, useful aspects of the IDE that users would benefit from knowing about, but that are not significant enough to warrant a badge. We had talked at a previous meeting about having some sort of IDE scavenger hunt, in which users locate different features of Looking Glass and sort of construct their own toolbox for later use.

The decision regarding which structure is going to be implemented for each type of badge is still being made, but a lot of progress was made this week, and it will be easier to choose a system for badges, having outlined in detail several different options, each with obvious pros and cons.

 

Comments

  • caitlin

    caitlin said:

    <p>One of the things we should consider in the magic sort space is how to handle worlds/content that doesn't have much feedback yet. If the most awesome world ever appears after there's already a lot of content, then it's unlikely to ever get recognized as the coolest world ever because no one will ever go that far down the rankings. That may already be in your plans and if so, awesome. If not though, it's something we need to give some thought to.</p> <p>It was a pretty epic meeting. But I think some good stuff is coming out, so hopefully in the long run we'll all think it was worth the investment. Thanks!</p>

    Posted on Jun 29, 2012
  • markatch

    markatch said:

    <p>Ah, that's a very good point. I hadn't really considered that new, awesome worlds would have trouble surfacing.</p> <p>Perhaps there's a grace period of [a month] where new worlds get randomly mixed into the top tier of the sort. After the grace period ends, perhaps they get sorted back in based on their popularity. One thing I've been thinking about is how to sort out already-viewed worlds, so that most of the shown worlds are new. I want to have a "view" relationship so that either a world knows who has viewed it, or a user knows which worlds (s)he has viewed database side. I could then filter out a majority of these worlds (though they would still show up in Genevieve's search results, because you've got to have a way to reach them somehow), which would help make room for newer worlds of merit that could slowly make their way up through the ranks.</p>

    Posted on Jun 29, 2012

Log In or Sign Up to leave a comment.