На основании обсуждения поста "Сравнение модулей кармы, репутации и рейтинга", делаю выводы про то, какой должна быть толковая реализация "кармы". Кроме того, Теоретические измышления, толкование понятий и разницу между ними читайте в этом самом посте ("Сравнение модулей кармы, репутации и рейтинга"), а здесь я хочу собрать все идеи и предложения, которые относятся именно к карме.
Кроме кармы, выделились ещё такие направления как "опыт"и "репутация", но об этом позже...
Напомню, что карма - это отношения пользователя и системы. За плохие деяния пользователя наказывают, за хорошие - поощряют.
Назначение системы "кармы"
- создания благотворной почвы для развития сообщества,
- защита сообщества от вандалов и тех, кто пытается разрушить сообщество,
- защита самой системы от разрашения,
- поощрение и направление деятельности сообщества.
Что такое "хорошо"и что такое "плохо"?
Для сайта должно быть сформировано 2 списка: плохие дела и хорошие дела. Для разных сайтов это будут разные списки, но всё таки можно сделать некоторые обобщения, потому что это не оффлайн, а сеть и действия пользователя на сайте ограничены возможностями движка.
Плохие поступки:
- публикация спама. Оценка: система и пользователи.
- публикация бессмысленных комментов или статей. Оценка: только пользователи.
- вредные действия по отношению к системе (сайту). Например, попытки взлома или разрушения. Оценка: система и пользователи.
Хорошие поступки:
- публикация качественного контента (комментарии или посты). Оценка: только пользователи.
- участие в развитии системы (например, сообщения о спаме, участие в улучшении сайта и др.). Оценка: только пользователи.
Правила сайта
Правила сайта (системы) должны быть известны пользователям, чтобы они знали, что хорошо и что плохо. В правилах также нужно описать методы наказания и поощрения. Варианты реализации:
- можно использовать модуль Legal, который показывает правила сайта при регистрации и вынуждает согласиться с ними. При внесении изменений он опять же требует каждого пользователя согласиться с ними снова.
- Можно сделать простую текстовую страницу, где будут приведены правила сайта и обновлять эту страницу в случае необходимости.
Первый вариант более человечный, а второй стоит на позиции "незнание закона не освобождает от ответственности".
Наказание и поощрение
Здесь мы ограничены не воображением, а реальными возможностями движка:
- автоматическая смена ролей (как это делает User Karma).
Krotty@drupal.org">Krotty@drupal.orgпредложил сделать роли, которые будут исключаться из автоматического назначения:Не хватает возможности исключения ролей для которых карма бы считалась, а дополнительные роли, соответствующие значению кармы - не назначались бы.
Пример. На сайте создана роль - "временный бан", не дающий возможности пользователю использовать часть сервисов сайта. Если мы же используем еще и карму, то этот пользователь получит еще и роль определенную его значением кармы, которая отменит ограничения роли "временный бан".
Но это не недостаток UserKarmа как таковой, а следствие того, что итоговые права для пользователя при наличии нескольких ролей определяются операцией OR. - удаление проблемного комментария или поста пользователя
- временное отключение пользователя
- удаление всего контента пользователя (как бы с водой и ребенка не вылить...)
- удаление пользователя (имеет смысл, если новый пользователь не имеет таких же прав как и удаляемый)
- материальное вознаграждение или ущерб (например, если на сайте есть платная регистрация, то удаление пользователя это материальное наказание. Поощрение: увеличение скидки на покупки в собственном магазине или начисление виртуальных тугриков, которые можно обменять на что-то реальное)
- другие методы поощрения и наказания - предлагайте (методы должны быть автоматизированными).
Методы анализа действий пользователя
Автоматическая оценка силами системы
Некоторые действия система может отслеживать сама. Вот они:
Плохие поступки
- публикация спама
- вредные действия по отношению к системе - полностью учесть не удастся, нужно использовать также оценку пользователей.
Хорошие поступки
- участие в развитии системы (например, сообщения о спаме, участие в улучшении сайта и др.) - полностью учесть не удастся, нужно использовать также оценку пользователей.
Не так уж и много, к сожалению. Может быть я что-то упустил?..
Оценка действий другими пользователями системы
Оценка других пользователей является субъективной, но они тоже часть системы и нужно это мнение учитывать. Список того, что пользователи могут оценивать:
Плохие поступки
- публикация спама.
- публикация бессмысленных комментов или статей.
- вредные действия по отношению к системе (сайту). Например, попытки взлома или разрушения.
Хорошие поступки
- публикация качественного контента (комментарии или посты).
- участие в развитии системы (например, сообщения о спаме, участие в улучшении сайта и др.).
Корректировка субъективности оценок пользователей
Для снижения субъективности оценки действий других пользователей нужно как-то учесть личность того, кто оценивает.
Речь вот о чём: есть действие, но кто-то сочтет его ужасным, кто-то плохим, кто-то терпимым, кто-то полезным и так далее. Это как-бы лояльность пользователя к данному виду действий. Нужно учесть, что люди по разному оценивают действия направленные на других и направленные на себя.
Если удастся получить информацию о том, как конкретный пользователь оценивает данное действие, описанное в правилах, то можно делать автоматическую корректировку его оценок.
Проблема в том, что со временем эти оценки могут меняться...
Как все это можно реализовать?
Например, можно при регистрации показывать не правила в виде текста, а под каждым пунктом показывать голосовалку, где пользователь должен поставить свою оценку этому действию (но не мере наказания или поощрения!).
Но как учесть то, что со временем пользоваля, ранее лояльного к спаму, начнет это доставать и он станет ярым борцом против спама?...
Виджет для оценок
Danпредложил использовать разные шкалы для оценок:
1. Сделать многомерную шкалу. Делить все оценки на хорошие и плохие, и ещё хуже, смотреть разницу - дело бесполезное, на мой взгляд. Например человек может писать хорошие статьи в свой блог, но сильно флудить в форумах. "Хорошо"это или "плохо"? Нет, это просто две разные оценки: "полезные статьи", "флуд в коментах". Как их будет интерпретировать админ - его сугубо личное дело.
Другими словами, модуль должен позволять создавать несколько шкал оценок и "привязывать"начисление очков дополнительными модулями к разным шкалам.
ingumsky@drupal.org">ingumsky@drupal.orgнаписал:
Обычно читатель готов воспользоваться только одной шкалой и только для того сообщения (комментария, видеофайла и так далее), которое его зацепило. Причём, по сути, не так важно, какова градация это шкалы — реально используется около пяти значений, не больше. И то читатель поставит оценку только в том случае, если объект оценивания вызвал у него сильную реакцию.
Причём, если смотреть по комментариям на всяких фотосайтах, охотнее голосуют те, кто хочет похвалить, а не поругать (ещё одно «узкое место»!) И, кстати, оценки обычно ставят, отталкиваясь от максимальных значений. Возмущённый читатель, не раздумывая, поставит «минус пять», восхищённый — «плюс пять», а вот тройки и двойки ставить будут вряд ли. По опыту могу сказать так же, что на оценку материала может большое влияние оказывать то, как голосующий относится к предмету материала, а не а не к самому материалу. Вот у меня сайт болельщиков футбольного клуба — после победы над сильным соперником пользователи поставят хорошие оценки любому отчёту о ней, а после поражения — вряд ли найдётся два-три человека, которые вообще сунуться голосовать. В общем, Ваша идея действительно очень интересна, но я не уверен, что выполнима.
Вывод, шкала оценок должна иметь 5 плюс-минус 2 значений и нужно учесть эффект Полианны, когда пользователи дают только позитивные оценки, а негативные стараются не давать.
Виджет для разных оценок может быть и один. Например такой список вариантов:
- смешно - НЕ добавляет репутации автору, но учитывается иначе. Например, для рейтинга (пузомерки)
- спасибо - НЕ добавляет репутации автору, но учитывается иначе. Например, для рейтинга (пузомерки)
- +1 - добавляет +1 к репутации автора
- +2 - добавляет +2 к репутации автора
- +3 - добавляет +3 к репутации автора
И это не моя идея. Это из статьи, ссылку на которую я привел с самом начале обзора. Посмотрите внимательно - я нахожу это лучшим решением на данный момент. Привожу ссылку ещё раз:
http://www.rsdn.ru/?forum/Info.aspx?name=info.forum.rating - описание виджета для голосования.
Связь с оффлайн жизнью
peterпредложил:
1. Возможность админу добавлять определенное количество кармы/репутации (по результатам действий в реале)
Так как карма - это отношения пользователя и системы, то это к карме не относится. То есть карма не учитывает действия, репутацию пользователя оффлайн, а только действия в системе.
Учет репутации и опыта
Если для расчета реакции системы на плохие и хорошие поступки будут учитываться репутация и опыт, то мы получим систему, которая будет позволять беспредел "старикам"и заслуженным, а наказывать только новичков. Поэтому я думаю, что честнее будет наказывать и поощрять всех одинаково. Хотя я понимаю, что система управления типа "дедовщина"тоже имеет свои плюсы, но прощу учесть, что речь идет о некой идеализированной реализации кармы, которая соседствет с идеальной системой репутации и ещё более идеальной системой опыта.
Таким образом, системы кармы, репутации и опыта должны сосуществовать рядом, но не влиять на карму.