[Ocs] First draft of Achievements module

Frank Karlitschek karlitschek at kde.org
Thu Feb 3 10:03:49 PST 2011


Hi Dan,

I thing the module specification looks good and there was no further feedback on the list.
So I think we can put your draft into the OCS spec.

Can you merge this into the current 1.6 spec?
I will also draft a few changes witch where requested by some people during the Linux App Store meeting (AppStream) 2 weeks ago.

I plan to release everything together as 1.7 in a few days.

This will be an intermediate release before 2.0 which should also happen soon.


Cheers
Frank


On 14.01.2011, at 02:01, Dan Leinir Turthra Jensen wrote:

> Hi again!
> 
>  Please check the updated version: http://paste.kde.org/2460/ :) The 
> following is still replies to Cornelius' replies to me. I've attempted to take 
> into account all the comments given to me from the surprising number of people 
> who came forward to help with it :)
> 
> On Thursday 13 Jan 2011 15:11:22 Cornelius Schumacher wrote:
>> On Thursday 13 January 2011 Dan Leinir Turthra Jensen wrote:
>>>  As some of you know already, the Gluon project, in particular the
>>> 
>>> GamingFreedom.org site, is basing its social interaction features on OCS.
>>> Since we are all about gaming, we will obviously be needing some
>>> achievement system. However, rather than simply jumping at it and
>>> creating something useful only for games, with Frank Karlitschek's
>>> blessing i have spent the last couple of days working on a first draft
>>> of the
>>> specification for an OCS extension module for achievements. Please find
>>> this draft in the attached txt file.
>> 
>> Nice. I have a couple of comments and questions:
>> 
>> * It's trivial to fake achievement progress by just operating the API, e.g.
>> with a simple curl call on the command line. Is this a problem?
> 
>  Basically i have been trying to come up with a way of ensuring this which 
> did not include some kind of super-secret-secret-keypassphrase server/client 
> handshake thing as employed in the various closed source solutions, and have 
> come up empty. So, what we (Daskreech and i) came up with after a discussion 
> on IRC last night was to add a clientside timestamp to the calls which set 
> progress. The reason for this would be that it allows for some further 
> serverside logging of the user's progress updates, so that moderators and such 
> can base their decisions on more data.
> 
>> * Is there a mechanism needed to manage visibility of achievement progress?
>> So a user could decide to only show his achievements to his friends or to
>> no one at all.
> 
>  This is a good question. Yes, i would like for this, but i am wondering how 
> to add it sensibly. Any ideas for that one? :)
> 
>> * In the XML there is a tag "contentID". To have consistent spelling I
>> would recommend to change that to "content_id".
> 
>  done, thanks :)
> 
>> * It's not explicitly stated, but I assume the achievement id unique across
>> all content. Maybe that should be stated explicitly.
> 
>  That's the idea, yes - not strictly required, i guess, but that's the idea. 
> So yeah, added a comment to that effect :)
> 
>> * Some of the status codes are redundant with HTTP codes, like achievement
>> doesn't exist, which should give a 404 response code on the HTTP level.
>> This might not be a problem, provided, that the internal and the HTTP
>> codes are consistent. To avoid this in advance, it might be nice to remove
>> the redundant internal codes from the XML. Not sure, though.
> 
>  Right, i moved it around to make it 404 errors :)
> 
>> * What's the difference between setting progress to zero and resetting
>> progress? Are there really to different calls needed.
> 
>  This is primarily because you can only set progress to a higher level than 
> it was before. However, with the new types added due to discussions with a 
> person who used to work with an existing framework for achievement tracking, 
> resetting by storing 0 wouldn't work anyway any longer, because we just have 
> so many other possibilities. Plus, of course, the argument that actually 
> having a call to reset the progress is equivalent to delete (which i have done 
> it as now)
> 
>  Finally, i have taken your suggestion for a more RESTful API into account, 
> and restructured the spec considerably. Thank you greatly for the help! :)
> 
>> As a last comment, I would propose a different URL scheme to make the API
>> more REST-like. The idea would basically be to have two HTTP resources,
>> one representing the general achievement data, and another one for the
>> user's progress, plus a POST call for setting progress. This is how the
>> scheme would look like:
>> 
>> # General achievement data
>> 
>> Get list of available achievements for content:
>> 
>> GET achievements/content/<content_id>
>> 
>> Create new
>> 
>> POST achievements/content/<content_id>
>> 
>> Get one:
>> 
>> GET achievements/content/<content_id>/<achievement_id>
>> 
>> Edit one:
>> 
>> PUT achievements/content/<content_id>/<achievement_id>
>> 
>> Delete one:
>> 
>> DELETE achievements/content/<content_id>/<achievement_id>
>> 
>> 
>> # User-specific achievement data (including progress data)
>> 
>> Get all achievements for given user for all contents:
>> 
>> GET achievements/user/<user_id>
>> 
>> Get all achievements for given user for given content:
>> 
>> GET achievements/user/<user_id>?content_id=<content_id>
>> 
>> Get specific achievement:
>> 
>> GET achievements/user/<user_id>/<achievement_id>
>> 
>> 
>> # Set progress
>> 
>> POST achievements/progress/<achievement_id>?progress=<value>
> 
> -- 
> ..Dan // Leinir..
> http://leinir.dk/
> 
>                          Co-
>                            existence
>                          or no
>                            existence
> 
>                          - Piet Hein
> _______________________________________________
> Ocs mailing list
> Ocs at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/ocs


--
Frank Karlitschek
karlitschek at kde.org






More information about the Ocs mailing list