Есть такая оффлайн новогодняя игра "Тайный Санта". Уже давно играю в нее со своими друзьями на каждый Новый год.
Что бы проще было определять, кто кому дарит подарок, создал сайтик, где мои друзья могли оставить Email, и им на почту пришел бы результат генерации.
И года 4 назад задумался над созданием такого приложения для соц сети. Было бы гораздо проще приглашать друзей в контакте, чем кидать ссылку на сайт. Хотел сделать на флеше, но его за 4 года, так и не начал изучать. Поняв, что ждать больше нельзя, создал iframe приложение.
Запуститься я планировал первого декабря. Как раз люди начнут задумываться над тем, где и с кем праздновать Новый год, и как его весело провести. Теперь понимаю, что нужно было запускаться на недели 2-3 раньше. Может и на месяц.
Итак, приступил к работе
За основу взял фреймворк Yii. Его я более менее хорошо знаю, плюс с ActiveRecord все очень простенько делается. Так как сложной логики со сложными JOIN в приложении не планировалось, и я весь функционал вынес в JavaScript(в том числе и API запросы к контакту), то и особой нагрузки на приложение не планировалось. Так что можно было немного полентяйничать. Тем более что приложение, по сути своей, «умрет» после Нового года, а при возможной, резко возросшей нагрузке, на пару недель я смогу позволить себе сильный сервер.
Времени у меня был месяц, поэтому многое из задуманного я не успел реализовать. Оставлю это на следующий Новый год.
Так как в угоду дедлайяна я урезал маловажные функции, то у меня получилось довольно маленькое приложение.
Все запросы к БД — это достать список людей, участвующих в событии.
Из API Vkontakte я тоже использовал только «Получить список друзей текущего пользователя» и «Получить информацию о пользователях по списку ID»
Крупный недосмотр в логике
Написал скрипт, который распределяет людей. И тут оказалось, что я не учел одну маленькую детальку.
Логика была простая, есть два одинаковых массива со списком пользователей.
Пробегаюсь по случайно перемешанному первому массиву, и для каждого его элемента достаю из второго массива случайного пользователя, проверяя, не дарит ли пользователь сам себе подарок.
Но сначала я не предусмотрел такую вещь, что если последнему пользователю первого массива останется только он сам во втором массиве, то либо человек дарит сам себе, либо бесконечный цикл.
Решил я это проблему добавлением проверки последних 2х элементов.
На предпоследнем пользователе смотрим, если в массиве для распределения им есть последний пользователь, то предпоследний дарит последнему. Таким образом, последнему никогда не достанется он сам. Его заберет предпоследний. А так как массив изначально был перемешан, то распределение будет случайным.
Релиз
Проработав все выходные и вечера в ноябре, 30го я закончил работу над приложением. Дедлайн был практически соблюден. Оставил публикацию приложения на 1е декабря, и лег спать. Утром, отправляя на модерацию, я проверил все настройки приложения и сервера. В настройках заметил один пункт, на который раньше не обращал внимание: «Адрес сайта» с http и https. А сертификата то у меня и нет. Как его покупать и ставить, я понятия не имел.
Мои действия для решения проблемы:
1) Google;
2) 1300 рублей на покупку сертификата;
3) 1,5 часа в попытках поставить сертификат и настроить Apache;
4) 300 рублей знакомому админу и 5 минут настройки под это дело nginx-а;
Все работает.
Тем, кто не в курсе, самый простенький сертификат можно быстро купить и быстро настроить.
Модерация.
С технической стороны все вроде готово. Отправляю на модерацию вечером воскресенья.
Отвечают довольно быстро, но ответ неутешителен:
Недостаточная функциональность приложения для прохождения модерации, но вам необязательно проходить модерацию, приложение доступно всем пользователям без проверки.
Как же не обязательно? А прием оплаты? Ведь без возможности монетизации рука не поднимется много вкладывать в раскрутку приложения. А с монетизацией хоть оправдание для самого себя(или больше для жены) будет. Мол, не просто так деньги трачу, можем заработать еще.
Конечно, дело не в деньгах, такого рода приложение даже не окупится, но хочется идею приложения донести до максимального количества людей, а собственных денег на это явно не хватит.
Извините, отвлекся. Итак, формулировка «Недостаточная функциональность приложения». Что же это такое? Попросил разъяснить.
Разъяснили:
К сожалению, мы не даем более подробных комментариев по изменению или улучшению функциональности приложения.
Начал гуглить. Понял, что я не первый такой, но как-то, это не сильно меня утешило.
Взглянул на свое приложение еще раз, и действительно, что видит человек, зашедший в приложение: Кнопку «Создать встречу», и уже созданную по умолчанию встречу, ну и симпатичную фоновую картинку.
У бедных модераторов, скорей всего, нет ни времени, ни желания вникать в суть игры/приложения. И, наверно, это правильно. Это можно использовать как критерий оценки юзабильности приложения. Если модератор не понял, то, наверное, и пользователь не поймет. Нужно что-то менять.
Вынес немного функционала на главную страницу, дополнил разделом «помощь».
Отправляю заявку повторно, в комментарии списком перечислил весь основной функционал, которым обладает мое приложение. Если честно не ждал одобрения.
Но оно пришло:
Приложение внесено в список одобренных.
Теперь осваиваю рекламные механизмы контакта. Но об этом в следующей статье, статье подведения итогов работы новогоднего приложения.
Ошибки и выводы:
Ошибка: 4 года хотел сделать приложение, а начал делать за месяц до запуска.
Вывод: Начинайте делать, как можно раньше. По-любому будут нюансы, которые повлияют на дату запуска проекта. Да, много об этом пишут, и говорят, но все равно все, все оставляют на последний момент.
Ошибка: Не взял в расчет время прохождения модерации.
Вывод: Я посчитал, что модерацию пройду сразу же. Не правильное ожидание. Если запуск моего приложения задержать на 2 недели, то уже не будет смысла его запускать. Так что, нужно было предвидеть возможные проблемы прохождения модерации. Как минимум, нужно было погуглить на этот счет.
Ошибки: Не подумал о механизмах рекламы приложения.
Выводы: Тут наверно, у меня просто мало опыта. Получилось так, сделал приложение, одобрили, и что дальше?
А были бы уже подобраны рекламные площадки, были бы какие-то договоренности. Да хотя бы рекламные посты были бы заготовлены, было бы легче.
Конечно это не все мои ошибки, но это самые основные.
Всем удачи.
Автор: nProfessor