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
[edit]Extension: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
[edit]Visual 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
[edit]Project plan
[edit]Scope:
[edit]Scope and activities
[edit]I 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
[edit]The 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
[edit]Basically I use these for living and maybe extra to upgrade my hardware (notebook or tablet). Travelling is too expensive to me.
Intended impact:
[edit]Target audience
[edit]Maybe 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
[edit]Language education and psychology tests can be much more flexible when used together with server-side scripting.
Sustainability
[edit]Extensions 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
[edit]Number of extension installations, number of user requests at extension's statistical page(s).
Participant(s)
[edit]I 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
[edit]Community Notification:
[edit]Please paste a link to where the relevant communities have been notified of this proposal, and to any other relevant community discussions, here.
Endorsements:
[edit]Do 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.