Grants:IEG/Rewrite Extension:QPoll to provide polls and quizes with Lua backend.
status: withdrawn
Individual Engagement Grants |
review grant submissions |
visit IdeaLab submissions |
eligibility and selection criteria |
project:
project contact:
questpc256@gmail.com or questpc@rambler.ru
participants:
summary:
Improve quiz / poll functionality of MediaWiki.
engagement target:
Wikiversity, MediaWiki
strategic priority:
Improving Quality
total amount requested:
5000 USD
2013 round 2
Project idea
editExtension:Quiz used for Wikiversity has very simple correct answer checking abilities without real server-side scripting backend. Also it has no statistical special pages to display user submitted results. I developed Extension:QPoll as a fork of Quiz, but it was never really finished. Before Extension:Scribunto was released, my extension has PHP-based server-side scripting for polls. Example of form definition:
<qpoll id="личные_данные" interpretation="personal_data" max_attempts="99" layout="tabular"> {Личные данные (* - поля обязательные для заполнения) |type="text" emptytext="yes" name="person"} :|name="age" emptytext="no"|Возраст* <<::width=2>> :|name="sex" emptytext="no"|Пол* <<мужской|женский>> :|name="nationality" emptytext="no" catreq=1|Национальность* <<Русские|Татары|Украинцы|Башкиры|Чуваши|Чеченцы|Армяне|Мордва|Аварцы|Белорусы|Казахи|Удмурты|Азербайджанцы|Марийцы|Немцы|Кабардинцы|Осетины|Даргинцы|Буряты|Якуты>> либо другая: <<>> :|birthplace|Место рождения <<>> :|livingplace|Место постоянного проживания <<>> :|education|Образование <<>> :|qualification|Профессия <<>> :|workplace|Место работы <<>> :|occupance|Должность <<>> </qpoll>
Example of interpretation script:
<qpinterpret lang="php"> # we have only one question; this is a shortcut $q = $answer['person']; qp_debug('person',$q); $result = array( 'options' => array( 'store_erroneous' => false ), # possible qpc errors. 'person' is question name (we have only one question) 'error' => array( 'person' => array() ), 'structured' => array( 'age' => $q['age'][0], 'sex' => $q['sex'][0], 'birthplace' => $q['birthplace'][0], 'livingplace' => $q['livingplace'][0], 'education' => $q['education'][0], 'qualification' => $q['qualification'][0], 'workplace' => $q['workplace'][0], 'occupance' => $q['occupance'][0] ) ); # age must be a number from 18 to 100 $min_age = 18; $max_age = 120; if ( !ctype_digit( $q['age'][0] ) || $q['age'][0] < $min_age || $q['age'][0] > $max_age ) { $result['error']['person']['age'] = 'Возраст должен быть числом от ' . $min_age . ' до ' . $max_age; } # we assume that one person may have only one nationality if ( count( $q['nationality'] ) > 1 ) { $result['error']['person']['nationality'] = 'Национальность может быть только одна'; } else { $result['structured']['nationality'] = isset( $q['nationality'][0] ) ? $q['nationality'][0] : $q['nationality'][1]; } # do not display any result to end user $result['long'] = ''; return $result; </qpinterpret>
Pages handling could be rewritten using ContentHandler (to make polls not being dependent on Parser cache). Lua should be used to check submitted quiz / polls.
Project goals
editVisual layout of forms and their interpretation logic can be defined. In theory that could enable advanced functionality for Wikiversity. I had an idea of creating my own psychology tests and language education site using Extension:QPoll, however I was forced to stop developing due to major financial and family troubles.
Part 2: The Project Plan
editProject plan
editScope:
editScope and activities
editI am very short on money, thus cannot spend the whole day on the project. Depending on final time schedule, I probably can develop an alpha or beta version of the project, working 3-4 hours per day.
Tools, technologies, and techniques
editThe core is LAMP, however to interpret the user-submitted results it should also use recently introduced (still unchecked though) Extension:Scribunto possibilities to add new Lua / Parser bindings (hooks).
Budget:
edit$5000
Total amount requested
edit$5000, preferrable in Russian roubles (RUR).
Budget breakdown
editBasically I use these for living and maybe extra to upgrade my hardware (notebook or tablet). Travelling is too expensive to me.
Intended impact:
editTarget audience
editMaybe it can be used at Wikiversity. But of course I am not sure that my coding level is good enough for deployment. I still do not write unit tests for PHP / Javascript, because it sufficiently slows the development. Usually I test via debug logging or temporarily patching the code. If there is the need for 100% code coverage and tests that would slow down the development sufficiently, especially because I am the sole developer. However I saw the worse extensions than mine.
Fit with strategy
editLanguage education and psychology tests can be much more flexible when used together with server-side scripting.
Sustainability
editExtensions sometimes has to be updated to keep them compatible to new versions of core, bugfixing and so on. Even non-Wikimedia deployed extensions.
Measures of success
editNumber of extension installations, number of user requests at extension's statistical page(s).
Participant(s)
editI am Dmitriy Sintsov the sole possible participant of this project. I worked with MediaWiki sites at Yaroslavl Demidov University in Russia since 2009, then with former Psychologos wiki (www.psychologos.ru, now switched to another framework) and another wiki sites such as sportswiki.ru, wikimoscow.org. Extensions, skins, shell administration for MediaWiki.
Discussion
editCommunity Notification:
editPlease paste a link to where the relevant communities have been notified of this proposal, and to any other relevant community discussions, here.
Endorsements:
editDo you think this project should be selected for an Individual Engagement Grant? Please add your name and rationale for endorsing this project in the list below. Other feedback, questions or concerns from community members are also highly valued, but please post them on the talk page of this proposal.
- Community member: add your name and rationale here.