У вас есть такие друзья, которые всё время что-то записывают в тетрадку или в файлик в Google Docs? Вы спрашивали у них о том, зачем они это делают, и что именно они туда пишут? Если нет, то отвечу за них (не за всех, но за многих):
Это употребляемая еда (в том числе её энергетическая ценность), расходы, время, затрачиваемое на сериалы (игры, работу, спорт), их планы на будущее, их ощущения от того, что они потребляют (например, оценка шоколадок) и прочие метрики и сведения об их жизни.
Но задумайтесь: если информации настолько много, и она настолько подробна, то ведь наверняка из этих данных можно что-то получить? Используя их, можно вычислить что-то ещё. Найти тенденции, закономерности. И тогда это уже будет не просто тетрадка, а действительно ценный и незаменимый инструмент, который не только позволяет хранить информацию, но и может давать советы. Он мог бы рекомендовать человеку скорректировать что-то в своей жизни таким образом, который, согласно результатам статистического вычисления, с наибольшей вероятностью даст желаемый результат.
Именно такую систему я бы и хотел описать более подробно: программный продукт, способный собирать информацию (на начальных этапах это в основном те данные, которые пользователь предоставляет самостоятельно, регулярно занося их в систему) и, анализируя её, находить в ней различные тенденции, связывать разнообразные аспекты человеческой жизни по каким-либо общим параметрам (например, обнаруживая хронологическую связь) и информировать пользователя в том случае, если у системы есть для него какие-либо рекомендации, советы или предостережения.
Одним из ключевых компонентов этого программного комплекса является система автоматического обнаружения тенденций (сокращённо — САОТ).
![Иллюстрация: между двух книг лежит толстая тетрадка с пружиной](https://habrastorage.org/r/w780q1/getpro/habr/post_images/178/cb1/c1d/178cb1c1dac6dccf6854755b12aa58b6.jpg)
Данные 2ndb предполагается хранить и обрабатывать на стороне сервера. Это обеспечивает доступность данных со всех пользовательских устройств, а также возможность взаимодействия между пользователями.
При построении архитектуры данного программного комплекса необходимо заранее учитывать возможность его использования с помощью различных клиентских приложений. Это означает, что все компоненты, обеспечивающие хранение и обработку информации о жизни пользователей, должны быть реализованы в виде бэкэнда, предоставляющего интерфейс (API), через который к нему смогут обращаться клиентские приложения.
Прежде всего планируется реализовать только одно клиентское приложение — браузерное (сайт 2ndb). Однако позже можно добавить и другие (работающие, разумеется, через тот же бэкэнд, с теми же данными). Например, клиентские приложения для мобильных телефонов, приложения для персональных компьютеров, работающие отдельно от браузера, и даже отдельные устройства.
Работающее на компьтере пользователя клиентское приложение может, во-первых, позволить пользователю быстрее вносить в систему информацию, а во-вторых, такое приложение могло бы собирать некоторую информацию даже без участия пользователя: например, записывать, как много он играет в компьютерные игры, как много общается в социальных сетях, и как много занимается чем-либо, связанным с его работой, а также сколько знаков набирает на клавиатуре, с какой скоростью печатает и так далее и тому подобное.
Специальные устройства могут автоматизировать ввод тех данных, которые нельзя автоматически получить ни через браузер, ни через отдельное приложение. Например, можно выпустить и продавать наручный датчик пульса, который будет автоматически добавлять показания в нашу систему.
На начальных этапах бо́льшая часть информации будет вноситься пользователями вручную.
Примеры таких данных:
В дальнейшем, по всей видимости, будут появляться возможности вносить различную информацию автоматически. Например, если пользователь просыпается по будильнику, и будильник он ставит на телефоне, то мы могли бы автоматически брать то время, на которое он ставит будильник, как его вероятное время пробуждения.
А ещё мы можем выпускать устройства, которые бы стояли у пользователей дома и автоматически вносили в нашу систему информацию о том, насколько много CO2 содержится в воздухе, которым дышит пользователь (для этого можно использовать современные датчики, основанные на принципе бездисперсионной инфракрасной спектроскопии), насколько яркий свет в комнате, где он находится (для этого потребуется добавить в устройство селеновый фотоэлемент, и, возможно, оснастить ещё какими-то компонентами, которые обычно содержат хорошие люксметры), и так далее.
В этом случае, обнаружив во вносимой пользователем информации какую-либо негативную тенденцию, система сможет посоветовать ему почаще проветривать квартиру и поярче включать свет — если, конечно, она обнаружит соответствующие корреляции с данными о CO2 и освещённости за соответствующий период времени (и если автоматические анализаторы написаны таким образом, чтобы подобная корреляция не рассматривалась как обыкновенное совпадение — а в некоторых случаях, вероятно, потребуется так и сделать, чтобы было меньше «шума» из бесполезных советов).
Ещё один пример — определение уровня шума в помещении (с помощью всё того же устройства, либо, кстати, даже с помощью микрофона его компьютера, если у него установлена наша программа, и микрофон достаточно точно передаёт звук). Если судя по данным, которые вносит пользователь, у него стресс, а у нас есть информация о том, что в его квартире шумно, мы можем посоветовать ему способы решения (мало ли, может, он и не думал, что это так важно), типа звукоизоляции и прочего. А если всё это ещё и после 11-ти вечера — то заодно советуем поговорить с соседями/написать заявление.
Типы данных с дополнительными опциями
Для некоторых типов данных можно указывать дополнительные опции. Например, если вносится информация про секс, то можно добавлять половых партнёров, указывая о них различные релевантные параметры. Если указываются физические упражнения, то можно выбрать тип упражнения (бег, подтягивания, отжимания и так далее), и при этом для некоторых типов могут появляться дополнительные поля (например, не только количество повторений, но и затраченное время, либо даже субъективное впечатление о вызванной физической усталости).
Внесение планов
Помимо информации о том, что уже произошло или происходит прямо сейчас, пользователь может также добавлять то, чем он планирует заниматься. Он может, в том числе, настраивать и напоминания, чтобы система заранее сообщала ему, какие у него добавлены планы на ближайшее время.
Для планов нужно ещё обязательно ввести параметр осуществлённости. То есть в тот день, на который у тебя что-то было запланировано, система тебя спрашивает, сделал ли ты это реально, потому что это очень важно для статистики и анализа.
Некоторые данные вносятся пользователем (либо приходят от клиентского оборудования или ПО), а некоторые — генерируются (вычисляются) автоматически, на основе других данных.
За это отвечают специальные модули — генераторы данных.
Примеры данных, которые могут быть рассчитаны на основе других данных:
В некоторых случаях именно сгенерированные данные будут использоваться анализаторами. К примеру, если у человека увеличился вес — возможно, он просто растёт (системой ведь будут и дети пользоваться). А вот если у него увеличился ИМТ — то тут уже другое дело, и тут действительно имеет смысл искать корреляцию с другими данными, что-то советовать и так далее.
Если совсем увлекаться написанием генераторов, то можно сделать даже калькулятор калорий и учёт витаминов и минеральных веществ, содержащихся в приготавливаемых блюдах (если системе известно, что именно ест пользователь, и в каких количествах).
«У вас фосфора в рационе маловато, может, сегодня рыбу приготовим?»
Очевидно, что у многих людей жизнь насыщенная, и они могут забывать внести информацию, которая нужна для автоматического анализа их жизни.
Вариантом решения могут быть автоматические напоминания — например, в виде писем, отправляемых по электронной почте, SMS-сообщений, push-оповещений на мобильном телефоне (когда у нас уже будет мобильное приложение для работы с систесой) и так далее.
Время от времени люди будут забивать на то, чтобы внести данные. Если никак это не обрабатывать, то сайт будет некорректно строить статистику, анализаторы будут делать ошибки и так далее. Автоматическое обнаружение пробелов возможно, но не всегда (потому что для некоторых типов данных неизвестно, почему пользователь их не вносил — потому что они фактически не менялись за это время, или потому, что он забил).
Поэтому нужен механизм, позволяющий человеку указать, что в такое-то время он забил на ввод данных — в этом случае система просто вычеркнет этот период и не будет использовать его для построения статистики и анализа (а информация о промежуточном состоянии будет сгенерирована автоматически, путём усреднения данных до и после пробела).
Анализаторы — специальные программные модули (модули автоматического анализа данных о пользователях), которые получают данные определённого типа, после чего могут сравнивать их с другими данными, либо с теми же данными за другой промежуток времени, могут создавать оповещения для пользователей и так далее.
Анализатор, например, обнаруживает, что человек стал меньше спать или больше есть, а заодно пробует найти совпадающие хронологически негативные тенденции (например, он планировал 10 встреч с друзьями, но фактически состоялось в два раза меньше — только 5), и, если они (согласно критериям, используемым этим анализатором) достаточно значимые, то добавляет в оповещение информацию о том, что, возможно, улучшив этот параметр, человек также повлияет на такие-то другие.
Тот факт, что анализаторы могут использовать не только данные о прошедших днях, но и планы, вообще говоря, может быть очень полезен для пользователей. Например, если ранее для данного пользователя наблюдалось, что часто, встречаясь с друзьями, он невообразимо много пьянствовал, а тут вдруг в планах появилось 4 разных встречи подряд (каждый день по одной), то система должна предупредить его о том, что рекомендует воздержаться от чрезмерного употребления алкоголя (особенно в том случае, если предыдущее употребление алкоголя было очень давно и есть опасения, что его организм просто не будет готов к такой нагрузке).
Ещё один пример анализатора — проверка корректности дозировки. Если пользователь, например, принимает какие-то лекарства, то система может проверять, соблюдает ли он правильные интервалы и дозировку, и, если обнаруживает какие-то проблемы (например, ей известно, что это конкретное лекарство в таких количествах принимать нельзя, либо, например, доза нормальная, но это лекарство нельзя сочетать с алкоголем, а у пользователя внесена информация о том, что он сегодня пил), то немедленно информирует пользователя (и, при необходимости, его врача).
Разумеется, система также может в заданное время напоминать пользователю о необходимости принять лекарства (а в конце курса, например, сообщить, что больше их принимать не нужно).
Глобальная статистика
Имея доступ к данным всех пользователей, можно собирать очень нехилую статистику для исследований. За деньги можно продавать доступ к страницам общей статистики или даже к raw-данным (то есть необработанным данным — например, в том виде, в котором мы храним их в базе данных).
В перспективе у учёных будет возможность получать потрясающе подробную информацию об очень большом количестве людей, и использовать эту информацию в исследованиях. Причём с возможностью фильтровать её по времени, городу, полу, возрасту, и так далее.
Супер-таргетированная реклама
Реклама на сайте (в мобильном приложении, etc) может быть невероятно таргетированной. Настолько таргетированной, что едва ли кто-то другой может предложить рекламодателям что-то подобное.
Сайт обнаруживает, что пользователь уже 100500 раз пробовал определённую физическую тренировку, и каждый раз у него не получается добиться нужного результата. И тут бац — ему выдаётся реклама о том, что в его городе есть тренер, у которого суперская программа вот конкретно для тренировки этого типа.
Или, например, если мы знаем, что пользователю будет полезна какая-то конкретная еда, мы можем посоветовать ему кафе и рестораны, которые находятся неподалёку от него, и где подают такие блюда.
Экспертная оценка
Ещё один интересный способ монетизации — экспертная оценка данных определённого вида, собранных о том или ином пользователе. Например, есть некий человек, который усердно занимается каким-то определённым спортом. Тем не менее, у него уже на протяжении долгого времени не получается достичь таких результатов, которые ему нужны. В таких случаях система может предложить пользователю провести экспертную оценку — часть информации о нём (в виде таблиц, графиков и так далее) будет предоставлена эксперту, компетентному в соответствующей области (в данном случае это может быть спортивный тренер), после чего он, проанализировав эту информацию (сколько именно занимался пользователь, какие упражнения он делал, какие перерывы были между занятиями, чем пользователь питался и так далее), сможет написать пользователю экспертное заключение, в котором изложит своё ви́дение ситуации и даст рекомендации, которые могут ему помочь.
Для пользователя это, во-первых, удобно: не нужно самому искать эксперта, он доверяет нашей системе, и знает, что у нас работают хорошие люди, которые готовы действительно профессионально разобрать его конкретный случай, то есть он не наткнётся на шарлатанов, которые только утверждают, что разбираются в теме (в данном случае в физкультуре, спорте).
Во-вторых, вся информация уже собрана — ему не нужно задумываться и вспоминать, как проходили занятия. В системе всё уже есть (если, конечно, он всё вносил). Опять же, не нужно беспокоиться на тему того, что можно что-то упустить — эксперт получит настолько подробные данные, насколько возможно (а если бы пользователь сам к кому-то обратился, то ему пришлось бы либо вспоминать, и он мог бы что-то упустить, либо идти с распечатками данных, экспортированных, опять же, из нашей системы).
В-третьих, что важно, система может запоминать, при каких обстоятельствах какая экспертная оценка была вынесена. Эти данные могут автоматически (или полуавтоматически, с участием специалистов) добавляться в анализаторы, и в дальнейшем, если у кого-то другого будет возникать похожая ситуация, система может автоматически советовать ему приблизительно то же самое.
С этой точки зрения, возможно экспертная оценка в каких-то случаях могла бы предоставляться и бесплатно — если, например, очевидно, что после внесения результатов в систему автоматический анализ данных такого типа действительно будет улучшен (и система, скажем, сможет выдать новые рекомендации для большого количества пользователей).
В некоторых случаях пользователь может захотеть поделиться информацией определённых типов с кем-либо другим — например, со своим лечащим врачом или с кем-то из родственников. Поэтому имеет смысл добавить возможность указывать других пользователей, для каждого из которых указывать те типы информации, которые должны быть для него доступны.
Возможно, что в какой-то момент также потребуется синхронизация данных с внешними источниками. Например, больница, в которой пользователь проходит лечение, может захотеть хранить имеющуюся в системе информацию, относящуюся к здоровью пользователя, на своих серверах (и, возможно, тоже как-либо обрабатывать её). Или обратный случай — пользователь прошёл лечение в больнице, и теперь здоров, но собранная о нём информация (в частности, сведения о том, как именно проходило лечение, какие были использованы медикаменты, были ли проведены какие-то операции, результаты обследований и так далее), имеющаяся в больнице в электронном виде, была бы полезна в нашей системе. Тогда, соответственно, мы опять же могли бы воспользоваться компонентом синхронизации, который бы собрал эти данные и добавил (импортировал) в нашу систему (чтобы их можно было использовать для автоматического или экспертного анализа, отображать пользователю, передавать в другие больницы, где ещё, возможно, будет лечиться пользователь, и так далее).
Экспорт данных может быть нужен либо для гиков (если пользователь сам умеет программировать, то он может захотеть сам написать ПО, которое будет производить такой анализ данных, которого, допустим, нет у нас), либо для людей, которые просто хотят использовать информацию (в виде таблиц, графиков и так далее) где-то ещё. Например, хотят показать распечатку врачу, либо повесить где-нибудь в комнате на стене, либо вообще попытаться предоставить в суде в качестве подтверждения алиби (мол, я не мог быть на месте преступления, я вон спортом занимался в этот момент, сами смотрите).
В случае с гиками, разумеется, формат должен быть удобным для программной обработки (machine-friendly) — например, XML или JSON. А в случае со всеми остальными формат должен быть наоборот таким, чтобы информацию было легко просматривать и печатать на принтере (возможно, например, PDF, но в каких-то случаях многие также будут очень рады экспортировать данные в Excel).
Автоматическое принятие решений на основе полученных от системы рекомендаций
У пользователя признаки депрессии, а он в последнее время сидит в темноте? Включим свет поярче (если он живёт в таком доме, и мы можем это регулировать). Мы определили, что у пользователя сильный стресс, и ему явно не до разговоров? Отключаем входящие звонки на мобильнике. Разумеется, это всего лишь примеры, и вообще тут много технических сложностей, но в целом такое полезное вмешательство (с целью заботы) некоторых может весьма радовать. А для остальных необходимо оставить возможность это не включать.
Обнаружение связей в общей статистике
Допустим, в системе есть много пользователей, и они, например, подробно указывают, какой у них бывает стресс: общение с соседями, снятие показаний счётчиков ранним утром и так далее.
Если системе известно, что несколько пользователей живут примерно в одном и том же месте, и регулярно указывают стресс одинакового типа (а тем более ещё и с корреляцией по времени суток), то, как знать, может у них вообще общая проблема?
Система даже может связать их друг с другом (если они указали в настройках, что согласны на такие приколы). Может ещё и помогут друг другу чем-то. :)
Публикация в социальных сетях
Может быть полезно для раскрутки — друзья пользователя видят, что наша система публикует у него данные (разумеется только те, для которых он включил такую публикацию), и могут сами начинать интересоваться системой.
Речь идёт о публикации, например, в ЖЖ или Твиттер. Пользователь, допустим, указывает, что сделал 15 подтягиваний на турнике, и это сразу размещается, например, на его стене во «ВКонтакте», вместе с красивым графиком (а также красивой картинкой с силуэтом соответствующего упражнения и так далее).
Анализ сетевой жизни пользователя
Если системе известно, где именно в Интернете обитает пользователь, то она может автоматически собирать и записывать о нём информацию. Эту информацию, в таком случае, смогут тоже использовать анализаторы. Пользователь стал больше читать, и система обнаружила, что ему теперь в среднем ставят больше лайков в социальных сетях? Отлично, надо поделиться с ним этой прекрасной новостью (пусть в его сознании утвердится тот факт, что то, что он теперь больше читает, положительно сказывается на отношении людей к нему).
А высший пилотаж — это лексический анализ текста, написанного на естественном языке (наши потенциальные пользователи, скорее всего, пишут в социальных сетях и в блогах в основном на русском и на английском, хотя, безусловно хочется, чтобы со временем системой начали пользоваться люди со всего мира — поэтому разрабатывать систему необходимо изначально с расчётом на интернационализацию). Если мы можем определять настроение (взгляды, предпочтения) пользователя по тому, что он пишет, то мы сразу же получаем огромное количество новых данных, которые тоже можно эффективно использовать для анализа.
Гамификация
Интересный способ увеличивать участие пользователей — гамификация (или игрофикация, см. статью в Википедии). Например, можно выдавать всякие там бэйджи тем, кто что-то делает круто (например, систематически начинает меньше бухать).
Впрочем, гамификация с настоящими игровыми уровнями (а не скучными «ачивками») — это намного более крутая гамификация, людей она привлекает, мне кажется, значительно сильнее.
Например, это может выглядеть следующим образом. Браузерная игра. Гонки. Вид сверху. Отображается красивая трасса — в зависимости от уровня это может быть город, пустыня, горы и так далее. В начале игры человек попадает на первый уровень, на старт. Его скорость — 0 км/ч. Традиционного управления нет — то есть стрелочкой «вверх» разогнаться нельзя, поворачивать тоже не нужно. Для того, чтобы набрать скорость, необходимо, чтобы в системе появилась какая-либо положительная информация о жизни пользователя. Это может быть даже конкретное, случайным образом сгенерированное задание — например, если мы знаем, что человек может подтянуться на турнике три раза подряд, то говорим ему, что теперь ему нужно дойти до 4 раз. Как только это происходит, человек получает бонус к скорости — например, +60 км/ч. Эта скорость держится в течение часа, а потом начинает уменьшаться — скажем, на 1 км/ч в минуту. Таким образом (при таком бонусе к скорости и такой скорости замедления), спустя два часа машина остановится. Однако если человек снова зайдёт в игру и выполнит следующее задание — машина не остановится, а будет ехать дальше. Либо, если он сделает это уже после остановки, то машина вновь разгонится и продолжит ехать.
Как только машина достигает финиша, человек сразу же переходит на следующий уровень, на старт. Скорость машины при этом сохраняется. На первом уровне задания очень простые, такие, чтобы выполнить их мог почти кто угодно (но, в то же время, такие, чтобы от них был положительный эффект — для здоровья, кругозора и так далее). А дальше задания становятся сложнее, и человеку может понадобиться пропустить задание. Но сделать это сразу он не может — придётся ждать 1 час после того, как задание появляется. Соответственно, если он не может справиться и со вторым заданием (оно не подходит для него), то придётся зайти в игру ещё через час, и так далее.
Таким образом, у людей есть стимул заходить в игру (и выполнять какое-нибудь задание) несколько раз в день, чтобы их машина продолжала ехать. Кроме того, на трассе отображается не только машина играющего, но и другие машины (это могут быть «компьютерные игроки», либо друзья пользователя), то есть можно соревноваться.
Ещё один вариант — проведение марафонов. Люди объединяются в группу и начинают делать что-то прекрасное (что-то определённое, что их объединяет — например, они могут заниматься растяжкой). Если кто-то перестаёт двигаться вперёд, его автоматически выкидывает из марафона. А чтобы оставаться в нём, нужно фигачить, не прекращая. Причём можно сделать так, чтобы люди могли делиться впечатлениями (или, например, советами) с другими участниками марафона.
Внесение данных о других людях
Возможно, стоит сделать, чтобы данные можно было вносить не только о себе, но и ещё, например, о своих детях — мамы будут довольны. Многим из них, я полагаю, очень не помешали бы автоматические рекомендации о том, чего именно не хватает их детям. А так система сможет автоматически предлагать им кучу всего, что они сами упустили из виду: определённым образом разнообразить рацион ребёнка, играть с ним в какие-нибудь развивающие игры, и так далее.
Кроме того, возможно, стоит сделать, чтобы можно было давать другим людям доступ на внесение данных от твоего имени. Например, врачу. А в случае с внесением данных о детях, например, их воспитательнице или няне.
Увеличение количества типов данных и анализаторов
В будущем должно быть много самых разных данных. Чтобы, например, можно было указывать, что научился играть такую-то композицию с темпом 140 ударов в минуту (хотя раньше доходил только до 120, и то с небольшими ошибками).
Или, например, добавлять прочитанные книги. Система может проверять, какие книги предшествовали этой книге у других пользователей (но отсутствуют в списке прочитанных у этого пользователя), и предполагать, что, возможно, ему было бы неплохо прочитать вот это.
Вообще говоря, у пользователя всё время должно быть впечатление, что сайт с ним сотрудничает. Что ему, вообще говоря, очень повезло — у него появился как будто друг, которого очень беспокоит его здоровье, знания и всё такое прочее. Тогда у него будет отличный стимул продолжать пользоваться этой системой.
А ещё можно будет выяснить, что, например, 54% людей, прочитавших определённую книгу, в течение следующего месяца статистически значимо улучшили определённый параметр в своей жизни.
Интеграция с сайтами в Интернете
В школьных учебниках в конце раздела часто бывают вопросы «Проверь себя». Мы могли бы реализовать модуль, который можно было бы добавлять на сайты с различными обучающими материалами (статьи, учебники и так далее). Прочитал статью (раздел, whatever), нажал в конце на кнопку «Закрепить информацию» (или «Закрепить усвоенное»).
После того, как пользователь нажимает на кнопку, она меняет цвет (с оранжевого на зелёный, например), и на ней слева появляется галочка: в БД теперь записано, что этот пользователь хочет запомнить факты из этой статьи. Потом на специальной странице пользователь сможет выбирать ответы на эти вопросы (впрочем, можно сразу же предлагать пользователю туда перейти) — столько раз, сколько понадобится. Если он будет часто ошибаться, то один и тот же вопрос у него будут спрашивать много-много раз, даже спустя месяц. И только когда он начнёт каждый раз отвечать правильно, сайт отвязывается с этим вопросом.
Тут, опять же, может быть игровая составляющая, соревнование. Например, обогнать друзей по количеству набранных очков. А ещё может быть общий рейтинг, в котором можно стать самым крутым.
Ещё могут быть бонусные вопросы, ответов на которые в статьях вообще нет. Такие вопросы, где нужно подумать или погуглить.
Информацию о том, насколько хорошо пользователь отвечает (а значит — насколько хорошо он сейчас усваивает информацию, по крайней мере, на тех сайтах, где был добавлен наш модуль), можно тоже добавлять в нашу систему, и она тоже может затем использоваться анализаторами.
Также может быть реализован автоматической сбор и внесение данных об активности на сайте. Для начала — чтение статей. В современных браузерах с помощью Page Visibility API можно определять, выбрана ли на данный момент определённая вкладка сайта. Если выбрана — включаем таймер (пользователю его показывать необязательно, разумеется), а также отслеживаем прокрутку страницы. Если пользователь переходит на другую вкладку, таймер отключаем до тех пор, пока он не вернётся обратно на вкладку со статьёй. Если пользователь прокрутил страницу до конца текста, и на таймере такое время, за которое, вероятно, статью можно было прочитать (должно зависеть от количества знаков), то автоматически добавляем данные о том, что статья прочитана (можно заодно указать скорость чтения — хотя нужно учитывать, что она может снижаться в тех случаях, когда читателю интересно и он больше задумывается над содержимым, хотя вообще мог бы читать и быстрее).
Разумеется, ручное редактирование данных всё равно не помешает, чтобы можно было и убрать статью из прочитанных (мало ли, может кто-то другой прочитал, не перелогинившись), и добавить вручную (в случае, если прочитал, не авторизовавшись на сайте — с другого устройства, например, или вообще на бумаге).
Это, кстати, будет очень полезно и с точки зрения глобального сбора статистики — это же правда здорово: можно узнать, какие статьи просто открывают и закрывают, а какие действительно читают. Самое интересное, что я, кажется, даже не слышал, чтобы кто-то это делал (хотя предполагаю, что такая идея уже могла приходить в голову другим людям).
Что думаете?
Если идея проекта вам нравится — пишите мне по электронной почте: aruseni.magiku@gmail.com. Могу рассказать, как появились такие мысли. Ну, а ещё у меня есть расчёты, так что могу поделиться информацией о том, сколько стоит всё это (или по крайней мере часть из вышеописанного) разработать, и сколько на это нужно времени.
Это употребляемая еда (в том числе её энергетическая ценность), расходы, время, затрачиваемое на сериалы (игры, работу, спорт), их планы на будущее, их ощущения от того, что они потребляют (например, оценка шоколадок) и прочие метрики и сведения об их жизни.
Но задумайтесь: если информации настолько много, и она настолько подробна, то ведь наверняка из этих данных можно что-то получить? Используя их, можно вычислить что-то ещё. Найти тенденции, закономерности. И тогда это уже будет не просто тетрадка, а действительно ценный и незаменимый инструмент, который не только позволяет хранить информацию, но и может давать советы. Он мог бы рекомендовать человеку скорректировать что-то в своей жизни таким образом, который, согласно результатам статистического вычисления, с наибольшей вероятностью даст желаемый результат.
Именно такую систему я бы и хотел описать более подробно: программный продукт, способный собирать информацию (на начальных этапах это в основном те данные, которые пользователь предоставляет самостоятельно, регулярно занося их в систему) и, анализируя её, находить в ней различные тенденции, связывать разнообразные аспекты человеческой жизни по каким-либо общим параметрам (например, обнаруживая хронологическую связь) и информировать пользователя в том случае, если у системы есть для него какие-либо рекомендации, советы или предостережения.
Одним из ключевых компонентов этого программного комплекса является система автоматического обнаружения тенденций (сокращённо — САОТ).
![Иллюстрация: между двух книг лежит толстая тетрадка с пружиной](https://habrastorage.org/getpro/habr/post_images/178/cb1/c1d/178cb1c1dac6dccf6854755b12aa58b6.jpg)
Использование ПО
Данные 2ndb предполагается хранить и обрабатывать на стороне сервера. Это обеспечивает доступность данных со всех пользовательских устройств, а также возможность взаимодействия между пользователями.
При построении архитектуры данного программного комплекса необходимо заранее учитывать возможность его использования с помощью различных клиентских приложений. Это означает, что все компоненты, обеспечивающие хранение и обработку информации о жизни пользователей, должны быть реализованы в виде бэкэнда, предоставляющего интерфейс (API), через который к нему смогут обращаться клиентские приложения.
Прежде всего планируется реализовать только одно клиентское приложение — браузерное (сайт 2ndb). Однако позже можно добавить и другие (работающие, разумеется, через тот же бэкэнд, с теми же данными). Например, клиентские приложения для мобильных телефонов, приложения для персональных компьютеров, работающие отдельно от браузера, и даже отдельные устройства.
Работающее на компьтере пользователя клиентское приложение может, во-первых, позволить пользователю быстрее вносить в систему информацию, а во-вторых, такое приложение могло бы собирать некоторую информацию даже без участия пользователя: например, записывать, как много он играет в компьютерные игры, как много общается в социальных сетях, и как много занимается чем-либо, связанным с его работой, а также сколько знаков набирает на клавиатуре, с какой скоростью печатает и так далее и тому подобное.
Специальные устройства могут автоматизировать ввод тех данных, которые нельзя автоматически получить ни через браузер, ни через отдельное приложение. Например, можно выпустить и продавать наручный датчик пульса, который будет автоматически добавлять показания в нашу систему.
Внесение данных в систему
На начальных этапах бо́льшая часть информации будет вноситься пользователями вручную.
Примеры таких данных:
- Время пробуждения
- Время отхода ко сну
- Стресс (включая указание источника стресса, а также приблизительной продолжительности и интенсивности)
- Радость
- Прочие эмоции
- Текущий рост
- Текущий вес
- Физические упражнения
- Простуда, болезни
- Секс
- Мастурбация
- Месячные
- Беременность и роды
- Время, затраченное на работу
- Время, затраченное на личные занятия, не относящиеся к работе
- Еда
- Алкоголь
- Сигареты
- Прочие психоактивные вещества
- Игры (например, настольные)
В дальнейшем, по всей видимости, будут появляться возможности вносить различную информацию автоматически. Например, если пользователь просыпается по будильнику, и будильник он ставит на телефоне, то мы могли бы автоматически брать то время, на которое он ставит будильник, как его вероятное время пробуждения.
А ещё мы можем выпускать устройства, которые бы стояли у пользователей дома и автоматически вносили в нашу систему информацию о том, насколько много CO2 содержится в воздухе, которым дышит пользователь (для этого можно использовать современные датчики, основанные на принципе бездисперсионной инфракрасной спектроскопии), насколько яркий свет в комнате, где он находится (для этого потребуется добавить в устройство селеновый фотоэлемент, и, возможно, оснастить ещё какими-то компонентами, которые обычно содержат хорошие люксметры), и так далее.
В этом случае, обнаружив во вносимой пользователем информации какую-либо негативную тенденцию, система сможет посоветовать ему почаще проветривать квартиру и поярче включать свет — если, конечно, она обнаружит соответствующие корреляции с данными о CO2 и освещённости за соответствующий период времени (и если автоматические анализаторы написаны таким образом, чтобы подобная корреляция не рассматривалась как обыкновенное совпадение — а в некоторых случаях, вероятно, потребуется так и сделать, чтобы было меньше «шума» из бесполезных советов).
Ещё один пример — определение уровня шума в помещении (с помощью всё того же устройства, либо, кстати, даже с помощью микрофона его компьютера, если у него установлена наша программа, и микрофон достаточно точно передаёт звук). Если судя по данным, которые вносит пользователь, у него стресс, а у нас есть информация о том, что в его квартире шумно, мы можем посоветовать ему способы решения (мало ли, может, он и не думал, что это так важно), типа звукоизоляции и прочего. А если всё это ещё и после 11-ти вечера — то заодно советуем поговорить с соседями/написать заявление.
Типы данных с дополнительными опциями
Для некоторых типов данных можно указывать дополнительные опции. Например, если вносится информация про секс, то можно добавлять половых партнёров, указывая о них различные релевантные параметры. Если указываются физические упражнения, то можно выбрать тип упражнения (бег, подтягивания, отжимания и так далее), и при этом для некоторых типов могут появляться дополнительные поля (например, не только количество повторений, но и затраченное время, либо даже субъективное впечатление о вызванной физической усталости).
Внесение планов
Помимо информации о том, что уже произошло или происходит прямо сейчас, пользователь может также добавлять то, чем он планирует заниматься. Он может, в том числе, настраивать и напоминания, чтобы система заранее сообщала ему, какие у него добавлены планы на ближайшее время.
Для планов нужно ещё обязательно ввести параметр осуществлённости. То есть в тот день, на который у тебя что-то было запланировано, система тебя спрашивает, сделал ли ты это реально, потому что это очень важно для статистики и анализа.
Генераторы данных
Некоторые данные вносятся пользователем (либо приходят от клиентского оборудования или ПО), а некоторые — генерируются (вычисляются) автоматически, на основе других данных.
За это отвечают специальные модули — генераторы данных.
Примеры данных, которые могут быть рассчитаны на основе других данных:
- Продолжительность сна (если известно время отхода ко сну и пробуждения)
- Индекс массы тела (если известны масса тела и рост)
В некоторых случаях именно сгенерированные данные будут использоваться анализаторами. К примеру, если у человека увеличился вес — возможно, он просто растёт (системой ведь будут и дети пользоваться). А вот если у него увеличился ИМТ — то тут уже другое дело, и тут действительно имеет смысл искать корреляцию с другими данными, что-то советовать и так далее.
Если совсем увлекаться написанием генераторов, то можно сделать даже калькулятор калорий и учёт витаминов и минеральных веществ, содержащихся в приготавливаемых блюдах (если системе известно, что именно ест пользователь, и в каких количествах).
«У вас фосфора в рационе маловато, может, сегодня рыбу приготовим?»
Напоминание о необходимости внести информацию
Очевидно, что у многих людей жизнь насыщенная, и они могут забывать внести информацию, которая нужна для автоматического анализа их жизни.
Вариантом решения могут быть автоматические напоминания — например, в виде писем, отправляемых по электронной почте, SMS-сообщений, push-оповещений на мобильном телефоне (когда у нас уже будет мобильное приложение для работы с систесой) и так далее.
Корректная обработка пробелов в данных
Время от времени люди будут забивать на то, чтобы внести данные. Если никак это не обрабатывать, то сайт будет некорректно строить статистику, анализаторы будут делать ошибки и так далее. Автоматическое обнаружение пробелов возможно, но не всегда (потому что для некоторых типов данных неизвестно, почему пользователь их не вносил — потому что они фактически не менялись за это время, или потому, что он забил).
Поэтому нужен механизм, позволяющий человеку указать, что в такое-то время он забил на ввод данных — в этом случае система просто вычеркнет этот период и не будет использовать его для построения статистики и анализа (а информация о промежуточном состоянии будет сгенерирована автоматически, путём усреднения данных до и после пробела).
Анализаторы
Анализаторы — специальные программные модули (модули автоматического анализа данных о пользователях), которые получают данные определённого типа, после чего могут сравнивать их с другими данными, либо с теми же данными за другой промежуток времени, могут создавать оповещения для пользователей и так далее.
Анализатор, например, обнаруживает, что человек стал меньше спать или больше есть, а заодно пробует найти совпадающие хронологически негативные тенденции (например, он планировал 10 встреч с друзьями, но фактически состоялось в два раза меньше — только 5), и, если они (согласно критериям, используемым этим анализатором) достаточно значимые, то добавляет в оповещение информацию о том, что, возможно, улучшив этот параметр, человек также повлияет на такие-то другие.
Тот факт, что анализаторы могут использовать не только данные о прошедших днях, но и планы, вообще говоря, может быть очень полезен для пользователей. Например, если ранее для данного пользователя наблюдалось, что часто, встречаясь с друзьями, он невообразимо много пьянствовал, а тут вдруг в планах появилось 4 разных встречи подряд (каждый день по одной), то система должна предупредить его о том, что рекомендует воздержаться от чрезмерного употребления алкоголя (особенно в том случае, если предыдущее употребление алкоголя было очень давно и есть опасения, что его организм просто не будет готов к такой нагрузке).
Ещё один пример анализатора — проверка корректности дозировки. Если пользователь, например, принимает какие-то лекарства, то система может проверять, соблюдает ли он правильные интервалы и дозировку, и, если обнаруживает какие-то проблемы (например, ей известно, что это конкретное лекарство в таких количествах принимать нельзя, либо, например, доза нормальная, но это лекарство нельзя сочетать с алкоголем, а у пользователя внесена информация о том, что он сегодня пил), то немедленно информирует пользователя (и, при необходимости, его врача).
Разумеется, система также может в заданное время напоминать пользователю о необходимости принять лекарства (а в конце курса, например, сообщить, что больше их принимать не нужно).
Способы монетизации
Глобальная статистика
Имея доступ к данным всех пользователей, можно собирать очень нехилую статистику для исследований. За деньги можно продавать доступ к страницам общей статистики или даже к raw-данным (то есть необработанным данным — например, в том виде, в котором мы храним их в базе данных).
В перспективе у учёных будет возможность получать потрясающе подробную информацию об очень большом количестве людей, и использовать эту информацию в исследованиях. Причём с возможностью фильтровать её по времени, городу, полу, возрасту, и так далее.
Супер-таргетированная реклама
Реклама на сайте (в мобильном приложении, etc) может быть невероятно таргетированной. Настолько таргетированной, что едва ли кто-то другой может предложить рекламодателям что-то подобное.
Сайт обнаруживает, что пользователь уже 100500 раз пробовал определённую физическую тренировку, и каждый раз у него не получается добиться нужного результата. И тут бац — ему выдаётся реклама о том, что в его городе есть тренер, у которого суперская программа вот конкретно для тренировки этого типа.
Или, например, если мы знаем, что пользователю будет полезна какая-то конкретная еда, мы можем посоветовать ему кафе и рестораны, которые находятся неподалёку от него, и где подают такие блюда.
Экспертная оценка
Ещё один интересный способ монетизации — экспертная оценка данных определённого вида, собранных о том или ином пользователе. Например, есть некий человек, который усердно занимается каким-то определённым спортом. Тем не менее, у него уже на протяжении долгого времени не получается достичь таких результатов, которые ему нужны. В таких случаях система может предложить пользователю провести экспертную оценку — часть информации о нём (в виде таблиц, графиков и так далее) будет предоставлена эксперту, компетентному в соответствующей области (в данном случае это может быть спортивный тренер), после чего он, проанализировав эту информацию (сколько именно занимался пользователь, какие упражнения он делал, какие перерывы были между занятиями, чем пользователь питался и так далее), сможет написать пользователю экспертное заключение, в котором изложит своё ви́дение ситуации и даст рекомендации, которые могут ему помочь.
Для пользователя это, во-первых, удобно: не нужно самому искать эксперта, он доверяет нашей системе, и знает, что у нас работают хорошие люди, которые готовы действительно профессионально разобрать его конкретный случай, то есть он не наткнётся на шарлатанов, которые только утверждают, что разбираются в теме (в данном случае в физкультуре, спорте).
Во-вторых, вся информация уже собрана — ему не нужно задумываться и вспоминать, как проходили занятия. В системе всё уже есть (если, конечно, он всё вносил). Опять же, не нужно беспокоиться на тему того, что можно что-то упустить — эксперт получит настолько подробные данные, насколько возможно (а если бы пользователь сам к кому-то обратился, то ему пришлось бы либо вспоминать, и он мог бы что-то упустить, либо идти с распечатками данных, экспортированных, опять же, из нашей системы).
В-третьих, что важно, система может запоминать, при каких обстоятельствах какая экспертная оценка была вынесена. Эти данные могут автоматически (или полуавтоматически, с участием специалистов) добавляться в анализаторы, и в дальнейшем, если у кого-то другого будет возникать похожая ситуация, система может автоматически советовать ему приблизительно то же самое.
С этой точки зрения, возможно экспертная оценка в каких-то случаях могла бы предоставляться и бесплатно — если, например, очевидно, что после внесения результатов в систему автоматический анализ данных такого типа действительно будет улучшен (и система, скажем, сможет выдать новые рекомендации для большого количества пользователей).
Предоставление доступа для других людей, синхронизация, экспорт
В некоторых случаях пользователь может захотеть поделиться информацией определённых типов с кем-либо другим — например, со своим лечащим врачом или с кем-то из родственников. Поэтому имеет смысл добавить возможность указывать других пользователей, для каждого из которых указывать те типы информации, которые должны быть для него доступны.
Возможно, что в какой-то момент также потребуется синхронизация данных с внешними источниками. Например, больница, в которой пользователь проходит лечение, может захотеть хранить имеющуюся в системе информацию, относящуюся к здоровью пользователя, на своих серверах (и, возможно, тоже как-либо обрабатывать её). Или обратный случай — пользователь прошёл лечение в больнице, и теперь здоров, но собранная о нём информация (в частности, сведения о том, как именно проходило лечение, какие были использованы медикаменты, были ли проведены какие-то операции, результаты обследований и так далее), имеющаяся в больнице в электронном виде, была бы полезна в нашей системе. Тогда, соответственно, мы опять же могли бы воспользоваться компонентом синхронизации, который бы собрал эти данные и добавил (импортировал) в нашу систему (чтобы их можно было использовать для автоматического или экспертного анализа, отображать пользователю, передавать в другие больницы, где ещё, возможно, будет лечиться пользователь, и так далее).
Экспорт данных может быть нужен либо для гиков (если пользователь сам умеет программировать, то он может захотеть сам написать ПО, которое будет производить такой анализ данных, которого, допустим, нет у нас), либо для людей, которые просто хотят использовать информацию (в виде таблиц, графиков и так далее) где-то ещё. Например, хотят показать распечатку врачу, либо повесить где-нибудь в комнате на стене, либо вообще попытаться предоставить в суде в качестве подтверждения алиби (мол, я не мог быть на месте преступления, я вон спортом занимался в этот момент, сами смотрите).
В случае с гиками, разумеется, формат должен быть удобным для программной обработки (machine-friendly) — например, XML или JSON. А в случае со всеми остальными формат должен быть наоборот таким, чтобы информацию было легко просматривать и печатать на принтере (возможно, например, PDF, но в каких-то случаях многие также будут очень рады экспортировать данные в Excel).
Возможности расширения
Автоматическое принятие решений на основе полученных от системы рекомендаций
У пользователя признаки депрессии, а он в последнее время сидит в темноте? Включим свет поярче (если он живёт в таком доме, и мы можем это регулировать). Мы определили, что у пользователя сильный стресс, и ему явно не до разговоров? Отключаем входящие звонки на мобильнике. Разумеется, это всего лишь примеры, и вообще тут много технических сложностей, но в целом такое полезное вмешательство (с целью заботы) некоторых может весьма радовать. А для остальных необходимо оставить возможность это не включать.
Обнаружение связей в общей статистике
Допустим, в системе есть много пользователей, и они, например, подробно указывают, какой у них бывает стресс: общение с соседями, снятие показаний счётчиков ранним утром и так далее.
Если системе известно, что несколько пользователей живут примерно в одном и том же месте, и регулярно указывают стресс одинакового типа (а тем более ещё и с корреляцией по времени суток), то, как знать, может у них вообще общая проблема?
Система даже может связать их друг с другом (если они указали в настройках, что согласны на такие приколы). Может ещё и помогут друг другу чем-то. :)
Публикация в социальных сетях
Может быть полезно для раскрутки — друзья пользователя видят, что наша система публикует у него данные (разумеется только те, для которых он включил такую публикацию), и могут сами начинать интересоваться системой.
Речь идёт о публикации, например, в ЖЖ или Твиттер. Пользователь, допустим, указывает, что сделал 15 подтягиваний на турнике, и это сразу размещается, например, на его стене во «ВКонтакте», вместе с красивым графиком (а также красивой картинкой с силуэтом соответствующего упражнения и так далее).
Анализ сетевой жизни пользователя
Если системе известно, где именно в Интернете обитает пользователь, то она может автоматически собирать и записывать о нём информацию. Эту информацию, в таком случае, смогут тоже использовать анализаторы. Пользователь стал больше читать, и система обнаружила, что ему теперь в среднем ставят больше лайков в социальных сетях? Отлично, надо поделиться с ним этой прекрасной новостью (пусть в его сознании утвердится тот факт, что то, что он теперь больше читает, положительно сказывается на отношении людей к нему).
А высший пилотаж — это лексический анализ текста, написанного на естественном языке (наши потенциальные пользователи, скорее всего, пишут в социальных сетях и в блогах в основном на русском и на английском, хотя, безусловно хочется, чтобы со временем системой начали пользоваться люди со всего мира — поэтому разрабатывать систему необходимо изначально с расчётом на интернационализацию). Если мы можем определять настроение (взгляды, предпочтения) пользователя по тому, что он пишет, то мы сразу же получаем огромное количество новых данных, которые тоже можно эффективно использовать для анализа.
Гамификация
Интересный способ увеличивать участие пользователей — гамификация (или игрофикация, см. статью в Википедии). Например, можно выдавать всякие там бэйджи тем, кто что-то делает круто (например, систематически начинает меньше бухать).
Впрочем, гамификация с настоящими игровыми уровнями (а не скучными «ачивками») — это намного более крутая гамификация, людей она привлекает, мне кажется, значительно сильнее.
Например, это может выглядеть следующим образом. Браузерная игра. Гонки. Вид сверху. Отображается красивая трасса — в зависимости от уровня это может быть город, пустыня, горы и так далее. В начале игры человек попадает на первый уровень, на старт. Его скорость — 0 км/ч. Традиционного управления нет — то есть стрелочкой «вверх» разогнаться нельзя, поворачивать тоже не нужно. Для того, чтобы набрать скорость, необходимо, чтобы в системе появилась какая-либо положительная информация о жизни пользователя. Это может быть даже конкретное, случайным образом сгенерированное задание — например, если мы знаем, что человек может подтянуться на турнике три раза подряд, то говорим ему, что теперь ему нужно дойти до 4 раз. Как только это происходит, человек получает бонус к скорости — например, +60 км/ч. Эта скорость держится в течение часа, а потом начинает уменьшаться — скажем, на 1 км/ч в минуту. Таким образом (при таком бонусе к скорости и такой скорости замедления), спустя два часа машина остановится. Однако если человек снова зайдёт в игру и выполнит следующее задание — машина не остановится, а будет ехать дальше. Либо, если он сделает это уже после остановки, то машина вновь разгонится и продолжит ехать.
Как только машина достигает финиша, человек сразу же переходит на следующий уровень, на старт. Скорость машины при этом сохраняется. На первом уровне задания очень простые, такие, чтобы выполнить их мог почти кто угодно (но, в то же время, такие, чтобы от них был положительный эффект — для здоровья, кругозора и так далее). А дальше задания становятся сложнее, и человеку может понадобиться пропустить задание. Но сделать это сразу он не может — придётся ждать 1 час после того, как задание появляется. Соответственно, если он не может справиться и со вторым заданием (оно не подходит для него), то придётся зайти в игру ещё через час, и так далее.
Таким образом, у людей есть стимул заходить в игру (и выполнять какое-нибудь задание) несколько раз в день, чтобы их машина продолжала ехать. Кроме того, на трассе отображается не только машина играющего, но и другие машины (это могут быть «компьютерные игроки», либо друзья пользователя), то есть можно соревноваться.
Ещё один вариант — проведение марафонов. Люди объединяются в группу и начинают делать что-то прекрасное (что-то определённое, что их объединяет — например, они могут заниматься растяжкой). Если кто-то перестаёт двигаться вперёд, его автоматически выкидывает из марафона. А чтобы оставаться в нём, нужно фигачить, не прекращая. Причём можно сделать так, чтобы люди могли делиться впечатлениями (или, например, советами) с другими участниками марафона.
Внесение данных о других людях
Возможно, стоит сделать, чтобы данные можно было вносить не только о себе, но и ещё, например, о своих детях — мамы будут довольны. Многим из них, я полагаю, очень не помешали бы автоматические рекомендации о том, чего именно не хватает их детям. А так система сможет автоматически предлагать им кучу всего, что они сами упустили из виду: определённым образом разнообразить рацион ребёнка, играть с ним в какие-нибудь развивающие игры, и так далее.
Кроме того, возможно, стоит сделать, чтобы можно было давать другим людям доступ на внесение данных от твоего имени. Например, врачу. А в случае с внесением данных о детях, например, их воспитательнице или няне.
Увеличение количества типов данных и анализаторов
В будущем должно быть много самых разных данных. Чтобы, например, можно было указывать, что научился играть такую-то композицию с темпом 140 ударов в минуту (хотя раньше доходил только до 120, и то с небольшими ошибками).
Или, например, добавлять прочитанные книги. Система может проверять, какие книги предшествовали этой книге у других пользователей (но отсутствуют в списке прочитанных у этого пользователя), и предполагать, что, возможно, ему было бы неплохо прочитать вот это.
Вообще говоря, у пользователя всё время должно быть впечатление, что сайт с ним сотрудничает. Что ему, вообще говоря, очень повезло — у него появился как будто друг, которого очень беспокоит его здоровье, знания и всё такое прочее. Тогда у него будет отличный стимул продолжать пользоваться этой системой.
А ещё можно будет выяснить, что, например, 54% людей, прочитавших определённую книгу, в течение следующего месяца статистически значимо улучшили определённый параметр в своей жизни.
Интеграция с сайтами в Интернете
В школьных учебниках в конце раздела часто бывают вопросы «Проверь себя». Мы могли бы реализовать модуль, который можно было бы добавлять на сайты с различными обучающими материалами (статьи, учебники и так далее). Прочитал статью (раздел, whatever), нажал в конце на кнопку «Закрепить информацию» (или «Закрепить усвоенное»).
После того, как пользователь нажимает на кнопку, она меняет цвет (с оранжевого на зелёный, например), и на ней слева появляется галочка: в БД теперь записано, что этот пользователь хочет запомнить факты из этой статьи. Потом на специальной странице пользователь сможет выбирать ответы на эти вопросы (впрочем, можно сразу же предлагать пользователю туда перейти) — столько раз, сколько понадобится. Если он будет часто ошибаться, то один и тот же вопрос у него будут спрашивать много-много раз, даже спустя месяц. И только когда он начнёт каждый раз отвечать правильно, сайт отвязывается с этим вопросом.
Тут, опять же, может быть игровая составляющая, соревнование. Например, обогнать друзей по количеству набранных очков. А ещё может быть общий рейтинг, в котором можно стать самым крутым.
Ещё могут быть бонусные вопросы, ответов на которые в статьях вообще нет. Такие вопросы, где нужно подумать или погуглить.
Информацию о том, насколько хорошо пользователь отвечает (а значит — насколько хорошо он сейчас усваивает информацию, по крайней мере, на тех сайтах, где был добавлен наш модуль), можно тоже добавлять в нашу систему, и она тоже может затем использоваться анализаторами.
Также может быть реализован автоматической сбор и внесение данных об активности на сайте. Для начала — чтение статей. В современных браузерах с помощью Page Visibility API можно определять, выбрана ли на данный момент определённая вкладка сайта. Если выбрана — включаем таймер (пользователю его показывать необязательно, разумеется), а также отслеживаем прокрутку страницы. Если пользователь переходит на другую вкладку, таймер отключаем до тех пор, пока он не вернётся обратно на вкладку со статьёй. Если пользователь прокрутил страницу до конца текста, и на таймере такое время, за которое, вероятно, статью можно было прочитать (должно зависеть от количества знаков), то автоматически добавляем данные о том, что статья прочитана (можно заодно указать скорость чтения — хотя нужно учитывать, что она может снижаться в тех случаях, когда читателю интересно и он больше задумывается над содержимым, хотя вообще мог бы читать и быстрее).
Разумеется, ручное редактирование данных всё равно не помешает, чтобы можно было и убрать статью из прочитанных (мало ли, может кто-то другой прочитал, не перелогинившись), и добавить вручную (в случае, если прочитал, не авторизовавшись на сайте — с другого устройства, например, или вообще на бумаге).
Это, кстати, будет очень полезно и с точки зрения глобального сбора статистики — это же правда здорово: можно узнать, какие статьи просто открывают и закрывают, а какие действительно читают. Самое интересное, что я, кажется, даже не слышал, чтобы кто-то это делал (хотя предполагаю, что такая идея уже могла приходить в голову другим людям).
Что думаете?
Если идея проекта вам нравится — пишите мне по электронной почте: aruseni.magiku@gmail.com. Могу рассказать, как появились такие мысли. Ну, а ещё у меня есть расчёты, так что могу поделиться информацией о том, сколько стоит всё это (или по крайней мере часть из вышеописанного) разработать, и сколько на это нужно времени.