There seem to be a few badge oriented achievement modules in Drupal.
The more commercial one is based on http://www.badgeville.com/
The module is https://drupal.org/project/badgeville_gamification
Mozilla's OpenBadges is also interesting http://beta.openbadges.org/backpack/login
And there are 2 modules to address those:
https://drupal.org/project/amobb
https://drupal.org/project/achievements
Also, there are comparisons & discussions about this.
https://groups.drupal.org/mozilla-open-badges-learning
https://groups.drupal.org/node/248868
There is also this User Badges module which can be assigned by role or by an adminstrator:
https://drupal.org/project/user_badges
Would be useful to know who is implementing these and what the results have been from any of these approaches.
I think it could potentially be useful for drupal.org, but more interested in how they are working "in the wild" and what can be learned about using them.
Comments
After discussions with morbusiff on twitter
Worth noting tvn's work exploring what could be done with d.o:
https://groups.drupal.org/node/144594
tvn's draft of the reputation system here:
https://groups.drupal.org/node/209448
her discussions of other reputation systems:
https://groups.drupal.org/node/209063
Looks like there was a DrupalCon talk - Drupal.org: reputation system -
but I can't find the link.
Brainstormign session on adoption on d.o:
https://groups.drupal.org/node/312833
Proposal on d.o:
https://drupal.org/node/1540104
Discussion on ideascale
http://drupal-association.ideascale.com/a/dtd/Add-a-reputation-badges-sy...
on stack exchange:
http://drupal-association.ideascale.com/a/dtd/Add-a-reputation-badges-sy...
also note a book from O'Reilly Media:
http://buildingreputation.com/doku.php
--
OpenConcept | Twitter @mgifford | Drupal Security Guide
AMOBB
As I see it, the two major struggles with gamification in Drupal are:
1) The amount of work necessary to create a single meaningful badge (e.g., logic in the code, compelling badge names and images);
2) Connecting these badges to something outside of the single site to give the badge contextual meaning/value (e.g., connecting sites together).
I started the AMOBB module as a proof of concept and heavily relied on previous work that had been done by morbusiff on the Achievements module (which helped to reduce struggle [1]). The goal of AMOBB was to connect the Achievements module in with Mozilla's larger badge framework (thereby attempting to address struggle [2]).
I think that the two primary struggles remain the same, and though both of these modules take first steps at addressing them, they're still first steps.
Meaningful names/images
Thanks Royce..
There is a great example in Symfony..
https://connect.sensiolabs.com/profile/cordoval
http://awards.symfony.com/
Badges can be for
- length of time contributing
- time since first patch in core/module/theme
- experience with D7 or D8
- expereince with twig or symfony
- simpletests or behat
- events attended
- 10+ pages of documentation started
- RTBC's commited
- 250th comment
- Modules maintained
- Most code committed that week
We can start with whatever's easy I figure. Some stuff is going to be easy to pull out of the DB...
I do wonder if we could get some visual inspiration from http://thenounproject.com/
--
OpenConcept | Twitter @mgifford | Drupal Security Guide
From the standpoint of
From the standpoint of achievements (in my parlance, a "badge" is just the visual representation [the image] of an achievement", but my parlance is sourced from games, not gamification), it's easy as pie to start coding those things up. But that doesn't necessarily mean much - one of the grandest concerns of earlier discussions was how to reward people who do not make meaningful contributions to a database - the marketers, for example.
Rewarding those who aren't in the DB
Well, there just aren't enough marketers, but ultimately it comes down to weighting. Tweets for #Drupal could be measured as could other social media. Ideally you'd have press releases go up on the site like:
https://drupal.org/press
And have more than 4 done since D6 was released.... Ultimately though, if we can't motivate 100% of the community using these tools, it doesn't mean that we shouldn't try to leverage these tools to reward the majority of people who are currently participating.
Also, I just ran into this leaderboard idea with badges.
http://drupal-association.ideascale.com/a/leaderboard
--
OpenConcept | Twitter @mgifford | Drupal Security Guide
Badge Designer, Comparisons & More
Interesting discussion about comparable tools here:
https://groups.drupal.org/node/248868
Also, this Google forum seems good.
--
OpenConcept | Twitter @mgifford | Drupal Security Guide
It's mainly a case of agreement...
Use of modules like achievements and amobb do seem pretty effective in creating the technical infrastructure for badges; I'm implementing them on a site right now.
Morbus is quite right that it is the good planning of what constitutes an achievement (and, therefore, a badge) that needs the thought.
Not all badges in the Drupal "ecosystem" can, or even should, be issued by drupal.org. Good achievement that contributes to Drupal happens outside in places like training companies and apprenticeship schemes.
If we are able to agree a set guidelines for what drupal badges shoul be awarded for then we can both issue badges on the d.o website for things measurable there but also act as a badge displayer and badge backpack for all drupal-related badges from the rest of the community.
Oh - and what I REALLY like is the idea of being able to order physical badges to stick on my laptop, but ONLY if I've already added the electronic badge to my d.o backpack...
get the right people in a room...
If we could find out how to simply empower a small group of people to just get on with this, I don't think it's hard to do. Just get them in a room...
Agreed...
If we could get political approval for this idea, we could delegate it's implementation to a team who could roll it out pretty quickly.
I'd be interested in feedback on some of the topics raised in this issue https://drupal.org/node/2203401
--
OpenConcept | Twitter @mgifford | Drupal Security Guide
Drupal and Gamification question...
I work for a gamification company and these are all good issues raised. Exploring the Drupal community, I noticed that gamification is present in the community in two ways: gamification of Drupal sites through modules and gamification of Drupal.org/Drupal core itself to increase support and patch submissions. I strongly agree with the struggles you’ve all identified, especially the difficulty in creating a module that includes all the components that make a well-rounded gamification implementation.
After looking around, I’ve noticed that this thread has many of the main players in gamification on the Drupal community, so I thought I’d inquire here. Why the interest in gamification? Have you noticed that Drupal users need better gamification modules or that the community itself could use more engagement? If there’s anything I’ve missed about where gamification currently stands with Drupal, please educate me!
@mlau - My interest has only
@mlau - My interest has only ever been in the gamification of Drupal-based sites, not in gamifying the Drupal community itself. Ideally, what I want is a flexible, easy gamification platform that can be implemented across a host of educational (my industry) settings. My goal for gamification in education would be to increase interaction and to sustain learning over time.
@mlau - To me gamification to
@mlau - To me gamification to the Drupal community does one main thing. Encourages more contributions!
We need more contributors because its user base is growing faster than its developer base.
Hopefully I can get you to
Hopefully I can get you to come along to the DrupalCon Amsterdam core conversation: https://amsterdam2014.drupal.org/session/recognising-achievements-and-co... then, Elijah? :-)
I want to add a field to the
I want to add a field to the user's profile
'Mozilla backpack email'
and then which collection they want to display in a block.
I can only find: https://www.drupal.org/project/mozilla_openbadges_displayer which relies on the user email . I also can't get it to work. Are there any better solutions before I just do a custom module for this?
I thought this would be an easy one to find
Finding working and
Finding working and up-to-date solutions for issuing Open Badges is not easy. http://badgekit.org offers some infrastructure. The hosted version has been languishing in beta without any recent news. A client asked me to install a self-hosted version, which does not seem ready for full release. Also it is not ideal for Drupal because it is a node.js app, and cannot be run on standard Drupal infrastructure (in our case, Pantheon).
Are you simply looking to
Are you simply looking to create badges and assign them to users? You can do this with the achievements and amobb modules. A bit of patching is required at the moment but it does work.
And, to be honest, all a mozilla badge is is some json and an image. There's nothing to prevent you doing this with some entities, views and so on, if a bit of coding is your thing...
Rachel's right
See...
https://wiki.cybercour.se/wiki/making-badge
... for a walkthrough of a badge system created the way Rachel describes. Most of the custom code was to let course authors define badges as sets of exercises, and then award badges to students as they completed exercises.
Kieran
Kieran Mathieson
kieran@dolfinity.com
Thanks for the heads up. That
Thanks for the heads up. That is useful.
I am thinking of doing a
I am thinking of doing a proof of concept for Rachel's suggestion of using entities. To save work, it seems sensible to start with User Badges module, where the latest dev version constructs a badge as a fieldable entity. I would welcome any thoughts about the merits of this approach.
Do you want badges to be awarded automatically, or by a human?
From User Badges page:
Seems the word "badge" is being used differently. User Badges badges are like the sheriff's badge in a Western. Awarded by the town to show some status or other. Again from the module page:
There's only one sheriff in the town, so only one person can have that badge.
Badges in an Open Badges sense are different. Any number of users can earn the badge. In my use of badges, they are awarded automatically when PHP code confirms that a user has met the criteria.
If you want to do badges in the second sense, use the achievements module. I created a content type called Badge (surprise!) containing the images for a badge, and added some code to integrate it with Achievements.
Kieran
Kieran Mathieson
kieran@dolfinity.com
Thanks. I was thinking that a
Thanks.
I was thinking that a Badge content node would be unique even for the same Open Badges badge because each bagde's blob of json contains at least the user's unique email address. Am I think wrong about this? Is there a better way of getting the user's email address and any other unique fields, than having each user's instance of each badge as a separate node?
John
Ah, I see the confusion
There are two separate business objects:
You were thinking of making a content type for the second one.
That's not how amobb works. The first object type is an achievement from the achievements module. The second object is not represented explicitly. An award is just two pointers: to a badge and a user. Here's JS code from amobb:
var url = Drupal.settings.baseRoot + Drupal.settings.basePath + 'amobb/assertions/' + encodeURIComponent(title) + '/' + Drupal.settings.uid;
title identifies the achievement (the badge). uid is the user being awarded that badge.
The URL calls your site. Your site responds to the call using this code from the .module file.
function amobb_menu() {
$items['amobb/assertions/%/%'] = array(
'title' => 'Assertions',
'page callback' => 'amobb_assertions',
...
function amobb_assertions($achievement_url, $uid) {
// Load the user from $uid.
$user = user_load($uid);
...
$hash = 'sha256$' . hash('sha256', $user->mail . $salt);
...
$assertion = array(
'recipient' => $hash,
...
'badge' => array(
'version' => '0.5.0',
'name' => $achievement['title'],
...
drupal_json_output($assertion);
amobb_assertions() has the badge's title, and the uid of the logged in user (someone being awarded a badge). It grabs the email address of the user and puts it in $hash. That email address is used to identify the user to an OpenBadges server.
$assertion gets sent back to the JS above, which puts it in the variable
url
. The JS then passesurl
to the OpenBadges API:OpenBadges.issue([url]...
So, no separate "badge awarded" business object modeled explicitly.
This might seem messy. That's because it is. It gets messier if your client wants to customize anything. (Hmm, what are the chances of that?)
Kieran
Kieran Mathieson
kieran@dolfinity.com
Thanks again.It gets messier
Thanks again.
Quite high I would think. As more of a full-service and support freelancer than a dev, explaining to clients which bits are easy and which will be very expensive is a big part of my job: another part is trying to anticipate requests clients may think of later.
In this case we do in some sense need to host the record of the badge ourselves, as well as possibly pushing to a Mozilla or other third party badge pack, because there will be a printed machine-readable record of the badge. Probably we need a response from our Drupal site to verify (to our own satisfaction) that the badge has been awarded on our site, in response to a GET request created from a QR code or something of that sort. So the top priority is pushing something to our own database, preferably our main Drupal 7 db (which, AFAIK, does not need to involve the OpenBagdes API). In the Drupal db the badge and the award could still be separate data objects in separate tables.
Oops! I got it wrong
Just realized. The achievements module does a table for storing which users got which achievements. Check the achievement_unlocks table.
Sorry, I should have thought it through more.
Kieran
Kieran Mathieson
kieran@dolfinity.com
Just use achievements and
Just use achievements and amobb, then - it does work...
edit - or employ me... ;-)