Инструкция по установке краудсорсинговой платформы PyBossa

Фрагмент интерфейса CrowdCrafting
Фрагмент интерфейса CrowdCrafting
уже рас­ска­зы­ва­ли об откры­той кра­уд­сор­син­го­вой плат­фор­ме PyBossa, пред­на­зна­чен­ной для созда­ния и запус­ка при­ло­же­ний, кото­рые исполь­зу­ют онлайн-помощь доб­ро­воль­цев для выпол­не­ния задач, тре­бу­ю­щих чело­ве­че­ско­го опы­та, зна­ний и интел­лек­та. Теперь мы при­во­дим подроб­ную инструк­цию по уста­нов­ке плат­фор­мы для осу­ществ­ле­ния соб­ствен­но­го про­ек­та.

Краудсорсинг для решения макро-задач

Пред­ставь­те, что вам нуж­но про­смот­реть несколь­ко мил­ли­о­нов фото­гра­фий и отобрать толь­ко те, на кото­рых при­сут­ству­ют люди. Выпол­нить такую обра­бот­ку для десят­ка фото­гра­фий не пред­став­ля­ет слож­но­сти , но для обра­бот­ки даже тыся­чи потре­бу­ет­ся слиш­ком мно­го вре­ме­ни и уси­лий. С дру­гой сто­ро­ны, ком­пью­те­ры без уста­ли спо­соб­ны обра­ба­ты­вать по несколь­ко тысяч фото в час, но постав­лен­ная зада­ча им не по силам.

Плат­фор­ма для рабо­ты с мик­ро­за­да­ча­ми PyBossa поз­во­ля­ет решить постав­лен­ную зада­чу (и мно­же­ство ей подоб­ных), рас­пре­де­ляя меж­ду десят­ка­ми экс­пер­тов-поль­зо­ва­те­лей про­стей­шие вопро­сы и сохра­няя отве­ты. Такой ком­би­ни­ро­ван­ный под­ход мак­си­маль­но пол­но исполь­зу­ет силь­ные сто­ро­ны людей (воз­мож­ность почти мгно­вен­но про­ве­сти ана­ли­ти­че­скую рабо­ту) и ком­пью­те­ров (хра­не­ние и обра­бот­ка резуль­та­тов). Для дости­же­ния еще боль­шей надеж­но­сти PyBossa выда­ет одно и то же зада­ние несколь­ким экс­пер­там и ни один экс­перт не полу­ча­ет одно и то же зада­ние два­жды.

Для созда­ния сво­е­го набо­ра мик­ро­за­дач (в тер­ми­нах PyBossa он назы­ва­ет­ся при­ло­же­ние) и загруз­ки исход­ных дан­ных мож­но вос­поль­зо­вать­ся веб-интер­фей­сом – осо­бой слож­но­сти в этом про­цес­се нет. Самая слож­ная часть в настрой­ке при­ло­же­ния – это созда­ние пред­став­ле­ния зада­чи для экс­пер­та. Для дости­же­ния мак­си­маль­ной гиб­ко­сти в отоб­ра­же­нии задач и полу­че­нии отве­тов авто­ры про­ек­та напи­са­ли спе­ци­аль­ную биб­лио­те­ку на язы­ке Javascript –PyBossa.js, кото­рая явля­ет­ся пол­но­цен­ным кли­ен­том сер­ви­са CrowdCrafting.

PyBossa.js

Биб­лио­те­ка вхо­дит в стан­дарн­тую постав­ку сер­ве­ра PyBossa для само­сто­я­тель­но­го раз­вер­ты­ва­ния. Кро­ме это­го, она явля­ет­ся неза­ви­си­мым моду­лем и может быть загру­же­на из соб­ствен­но­го git репо­зи­то­рия https://github.com/PyBossa/pybossa.js

Для исполь­зо­ва­ния биб­лио­те­ки необ­хо­ди­мо лишь под­клю­чить её как обыч­ный javascript модуль:


После это­го ста­но­вит­ся воз­мож­ным полу­чать зада­чи с сер­ве­ра и сохра­нять отве­ты поль­зо­ва­те­ля-экс­пер­та.

Формат обмена данными PyBossa

В PyBossa и при­ло­же­ние и зада­ча явля­ют­ся JSON объ­ек­та­ми с пред­опре­де­лен­ным набо­ром полей. При­мер JSON объ­ек­та при­ло­же­ния:

Снимок экрана 2013-06-17 в 14.47.32

Снимок экрана 2013-06-17 в 14.50.54

Для отоб­ра­же­ния вопро­са зада­чи, на кото­рый нуж­но полу­чить ответ, исполь­зу­ет­ся пара­метр description. Напри­мер, для при­ло­же­ния FlickrPerson вопрос зву­чит так: “Види­те ли Вы чело­ве­ка на этом фото?”. short_name – пара­метр, содер­жа­щий крат­кое наименование(SLUG) при­ло­же­ния. Поле info не име­ет жест­ко задан­ной струк­ту­ры, в нем могут содер­жать­ся про­из­воль­ные дан­ные при­ло­же­ния (к при­ме­ру шаб­ло­ны отоб­ра­же­ния зада­чи).

Зада­ча в Pybossa име­ет такую струк­ту­ру:

Снимок экрана 2013-06-17 в 14.51.56

В зада­че так­же при­сут­ству­ет поле info, не име­ю­щее жест­кой струк­ту­ры. Един­ствен­ное огра­ни­че­ние – все зада­чи одно­го при­ло­же­ния долж­ны обла­дать иден­тич­ной струк­ту­рой это­го поля.

Пример заполнения поля info

В при­ло­же­нии FlickrPerson (тесто­вое при­ло­же­ние crowdcrafting) сто­ит зада­ча поис­ка чело­ве­ка на фото­гра­фии, поэто­му info зада­чи содер­жит два эле­мен­та:

Снимок экрана 2013-06-17 в 14.52.24

Пер­вый эле­мент – это ссыл­ка на стра­ни­цу Flickr c иссле­ду­е­мым фото и вто­рой – пря­мая ссыл­ка на фото­гра­фию. Эти два эле­мен­та исполь­зу­ют­ся при отоб­ра­же­нии зада­чи поль­зо­ва­те­лю для отоб­ра­же­ния фото и созда­ния ссыл­ки на стра­ни­цу Flickr.

Представление задачи пользователю

В даль­ней­шем будем рас­смат­ри­вать тесто­вое при­ло­же­ние FlickrPerson //crowdcrafting.org/app/flickrperson/

Для пред­став­ле­ния зада­чи экс­пер­ту созда­ет­ся HTML шаб­лон. В шаб­лоне будут отоб­ра­жать­ся сле­ду­ю­щие эле­мен­ты: вопрос зада­ния, фото­гра­фия, общее коли­че­ство отве­тов теку­ще­го поль­зо­ва­те­ля, кноп­ки отве­тов “да”, “нет”, “не знаю”.

Снимок экрана 2013-06-17 в 14.56.12Снимок экрана 2013-06-17 в 14.56.24

Для запол­не­ния шаб­ло­на реаль­ны­ми дан­ны­ми и сохра­не­ния отве­тов исполь­зу­ет­ся биб­лио­те­ка PyBossa.js.

Загрузка данных задачи

Pybossa.js содер­жит два настра­и­ва­е­мых мето­да, поз­во­ля­ю­щих отоб­ра­жать зада­чи в зави­си­мо­сти от тре­бо­ва­ний при­ло­же­ния:

Снимок экрана 2013-06-17 в 14.58.13

Поскольку работа по получению задач с сервера и отправке ответов на сервер происходит в асинхронном режиме и еще необходимо получить изображение со стороннего сервера, каждый из методов получает дополнительный параметр deferred(//api.jquery.com/category/deferred-object/), отслеживающий завершение загрузки изображения и запускающий процедуру дальнейшей обработки.

Метод pybossa.taskLoaded осу­ществ­ля­ет полу­че­ние зада­чи с сер­ве­ра, загруз­ку изоб­ра­же­ния с сай­та Flickr и запуск про­це­ду­ры запол­не­ния шаб­ло­на:
Снимок экрана 2013-06-17 в 14.59.36Снимок экрана 2013-06-17 в 14.59.46

Метод pybossa.presentTask вызы­ва­ет­ся после того как дан­ные зада­чи были загру­же­ны с сер­ве­ра и пре­об­ра­зо­ва­ны в объ­ект JSON. При­мер зада­чи:

Снимок экрана 2013-06-17 в 15.02.40

Создан­ный объ­ект JSON пере­да­ет­ся как пара­метр с име­нем task в метод pybossa.presentTask. В этом мето­де мы про­ве­ря­ем, что мы полу­чи­ли с сер­ве­ра не пустое опи­са­ние зада­чи. Пустое опи­са­ние озна­ча­ет, что экс­перт решил все доступ­ные зада­чи, и в этом слу­чае мы пря­чем шаб­лон отоб­ра­же­ния зада­чи и бла­го­да­рим экс­пер­та за про­де­лан­ную рабо­ту. В про­тив­ном слу­чае мы под­став­ля­ем дан­ные зада­чи в шаб­лон.

PyBossa.js пред­по­ла­га­ет асин­хрон­ную отправ­ку отве­та экс­пер­та на сер­вер, и это объ­яс­ня­ет необ­хо­ди­мость вто­ро­го пара­мет­ра мето­да: deferred. Этот объ­ект зацик­ли­ва­ет рабо­ту с зада­чей – при успеш­ном сохра­не­нии отве­та будет запу­ще­на про­це­ду­ра загруз­ки сле­ду­ю­щей зада­чи с сер­ве­ра:

Снимок экрана 2013-06-17 в 15.03.20

Снимок экрана 2013-06-17 в 15.03.30
Необ­хо­ди­мо заме­тить, что мы обра­ба­ты­ва­ем любой вари­ант отве­та, исполь­зуя собы­тие onClick кно­пок отве­та “Да”, “Нет”, “Не знаю” с помо­щью сле­ду­ю­ще­го кода:

Снимок экрана 2013-06-17 в 15.04.47

Сохранение ответа пользователя

Метод pybossa.saveTask сохра­ня­ет отве­ты на выдан­ную зада­чу. Если мы посмот­рим на опи­са­ние зада­чи, полу­ча­е­мое мето­дом pybossa.taskLoaded, то уви­дим, что у зада­чи есть пара­метр task.id (иден­ти­фи­ка­тор зада­чи), кото­рый мы и будем исполь­зо­вать для сохра­не­ния отве­та. Для уве­дом­ле­ния экс­пер­та об успеш­ном сохра­не­нии отве­та будем пока­зы­вать сооб­ще­ние:

Снимок экрана 2013-06-17 в 15.06.46