[Ocs] First draft of Achievements module
Frank Karlitschek
karlitschek at kde.org
Thu Feb 3 12:46:23 PST 2011
On 03.02.2011, at 19:14, Dan Leinir Turthra Jensen wrote:
> On Thursday 03 Feb 2011 18:03:49 Frank Karlitschek wrote:
>> 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?
>
> Ten-four, shall do this momentarily! :)
>
>> 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.
>
> Sounds like a plan to me :)
>
>> This will be an intermediate release before 2.0 which should also happen
>> soon.
>
> Speaking of which, do we have any ideas yet about the OCS planning sprint
> yet? :)
not yes.
It´s not a lack of motivation. It´s a lack of time.
Does this mean that you volunteer to organize the sprint? ;-) ;-)
Cheers
Frank
>
>> 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>
>>
>> --
>> Frank Karlitschek
>> karlitschek at kde.org
>
> --
> ..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