Пьеса в двух актах про спорт и рельсы

    В этом году мы решили поучаствовать в RailsRumble – соревновании для Rails разработчиков, где команды за 48 часов должны предоставить полностью рабочий сайт с великолепно воплощенной идеей. Очень хочется поделиться с хабрасообществом впечатлением от участия в конкурсе.

    Наш проект – сайт для футбольных фанатов, которые интересуются жизнью своих кумиров в социальных сетях: Sport for Social Fans.

    Ниже небольшая пьеса в двух актах, с пятью действующими лицами и антрактом.



    Отделение первое


    Преамбула

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

    Амбулаторные работы

    На этом этапе самым сложным было выкристаллизовать идею будущего сервиса. И сделать это не в безвоздушном пространстве, а опираясь на условия конкурса – на разработку у нас будет не больше 48 часов и 4 человек. И да, конечно, победа не главное, главное участие, но сервис должен привлечь пользователей и расположить судей.

    Это был один из самых сложных этапов. Мы действовали по принципу вычеркивания, и логика зума была примерно такой:
    спорт --> популярный спорт --> футбол --> болельщики --> фолловинг клуба/игрока
    На выходе мы получили идею: сделать сайт, который поможет фанатам отслеживать социальную активность их команды в соцсетях (Facebook, Twitter, Instagram).
    На это ушел еще один день.

    Мама, мама, что я буду делать

    В этом действии самым трудным было не поддаться искушению и хотя бы на каждое второе предложение по фичам отвечать «нет». Итого мы сказали «нет» примерно около десяти раз – например, бейджам для пользователей, регистрации и премодерации. И пока об этом не пожалели.

    Десяток «нет» обеспечил нам несколько жирных «да»: поиск по команде и игроку, трансляция официальных аккаунтов и постов пользователей по хештегам, чуть-чуть статистики. Мы собрали статическую информацию и перешли к работе над дизайном.
    Потратили один день.

    Здесь рыбу заворачивали

    В этом месте мы возьмем паузу – про дизайн, надо полагать, не так интересно. Скажем только, что мы делали акценты на привлекательность и юзабилити.
    Хотелось привлечь пользователя дизайном, а удержать контентом и удобством. Кажется, получилось.


    Последнее, что хочется добавить перед антрактом: мы (честно-честно) не читерствовали и до начала схватки не притрагивались к коду. Дизайн был последней предварительной заготовкой.
    На прототип интерфейса и дизайн ушло два дня.

    Антракт


    Пока вы стоите в очереди за колпачком эспрессо (с коньяком, разумеется) и бутербродом с икрой, мы расскажем вам немного нашу диспозицию перед боем. Итак, в составе нашей труппы один дизайнер, один фронтенд и два бэкенд разработчика. И режиссер менеджер — за кулисами.
    География: Новокузнецк, Тольятти, Мариуполь, Гвадалахара (неожиданно?). Это был наш козырь – после старта мы смогли писать код непрерывно все 48 часов. *звенит третий звонок*

    Отделение последнее


    Техника речи

    С точки зрения технологий, нам хотелось быть на высоте. Взяли:
    Ruby on Rails 4,
    nginx + unicorn + capistrano
    Postgres + redis
    faye
    coffeescript, ember.js

    Четко распределили обязанности каждого в команде. Тонны работы ложились на бэкенд, поэтому географическое расположение разработчиков нам сильно помогло.

    Сложности были с огромным объемом данных, заносящихся в базу данных.
    Мы отслеживаем более 400 хештегов и аккаунты игроков, команд в трех социальных сетях: Facebook, Twitter, Instagram. Каждую секунду генерится более 100 сообщений, база безудержно растет, а мы должны выдерживать нагрузки (и хабра-эффект тоже). Задача интересная.

    Начнем с того, что мы решили хранить посты пользователей в Postgres. Без redis не обошлось, т.к. сообщения идут потоком, каждый раз проверять, есть ли то или иное в базе, было бы слишком расточительно.

    В Redis организовали кеш по id сообщений. Был использован SortedSet: благодаря тому, что операция добавления и проверки имеет сложность log(n), мы планировали не терять на этом производительность. Так же параметром приоритета было время добавления. Мы не хотели хранить все id записей вечно и поэтому удаляли посты с низким приоритетом (в нашем случае это показатель времени).

    Второй момент использования redis (хотя до него и не дошло): несмотря на то, что faye использует pub/sub, слать все приходящие сообщения мы побоялись. Мы решили использовать схему, при которой при заходе пользователя на сайт фронт шлет запрос на контроллер с id сущности, по которой нужны сообщения. И так он делает каждую минуту, пока пользователь просматривает страницу.

    Эта блокировка записывается в redis, где примерно через минуту удаляется, если не пришел повторный запрос. Тем временем при создании сообщений хук, который публикует в faye, при каждой попытке проверяет: а ждет ли кто вообще это сообщение. И, если никто не ждет, пропускает это действие.

    Фронт, как мы и говорили, на ember.js. Это, как оказалось, отличный выбор для быстрого одностраничного приложения. Правда, из-за сложностей, которые возникают даже при небольшом отклонении от его идеологии разработки веб-приложений, после неудачных поисков решения пришлось переделывать интерфейс под него.

    Марафон

    Здесь было трудно придерживаться линии партии – минимализма. 48 часов – это гораздо меньше, чем требуется. И нужно было продолжать ограничивать себя в своих желаниях.
    Очень многое мы не успели – например, мы больше занимались кодом, чем контентом для пользователей. Проблему мы видим в том, что, зайдя на сайт, не каждый быстро разберется, зачем он.

    Занавес


    Разбор полетов

    Большим упущением мы считаем тот факт, что мы повернулись лицом к судьям и оказались по отношению к пользователю немного вполоборота. У нас нет описаний того, зачем нужно наше приложение и как его использовать – то есть практически нет промо-контента.

    Не все во фронте идеально. Не успели до конца отточить интерфейсы.

    Не успели до конца протестировать демоны, занимающиеся сбором контента из соц.сетей. Если возникают проблемы, god, конечно, перезапускает все, но часть их до сих пор не ясна.

    Не хватило времени добавить реалтайма проекту с faye, хотя для этого все было готово. По задумке, количество постов, подписчиков и новые посты должны были обновляться автоматически, производя wow-эффект и вызывая бурные аплодисменты.

    Но в целом, мы довольны проделанной работой. А насколько рабочий и интересный проект у нас получился – решать вам.

    Послесловие

    Хочется пожелать удачи всем командам из России.
    Вот список тех, кого мы нашли, наверняка их намного больше.
    rb.r13.railsrumble.com
    octoscrum.r13.railsrumble.com
    listio.us
    object.r13.railsrumble.com
    undev-angels.r13.railsrumble.com
    talk-tree.r13.railsrumble.com
    www.trackcha.com
    railsrumble.com/entries/54-sevastopol-rb
    plugin.r13.railsrumble.com
    getbacktoreading.com
    tip4commit.com
    Поделиться публикацией

    Комментарии 22

      +1
      Хотелось бы посмотреть на код, он open source?
        +3
        По окончанию конкурса все отправить в опенсорс. Оформим как подобает сначала :)
        +1
        Витя молодец! Доберись и до хоккея, пожалуйста :)
        ну и удачи, буду держать кулаки за тебя!
          0
          ок!
          0
          Интересный сервис, но чего мне захотелось в первую очередь: разделение всего потока на языки. К примеру, я знаю русский и английский, поэтому посты на остальных языках не нужны.

          Как раз сегодня на ЦП увидел анонс trackcha, но с производительностью там огромнейшие проблемы.
            0
            Насчет языков, отличная идея! спасибо!
              0
              Когда мы делали Трэкчу, нам пришлось поставить маленькое количество воркеров, т.к. для того, чтобы обработать звук в видео — ему нужно скачать сам видос, потом экстракнуть звук, разбить на фингерпринты и отправить на распознавание на Echoprint. К сожалению, эти три дня по правилам RailsRumble мы ничего не можем трогать ни в коде ни на сервере, поэтому мы настроили все так, чтобы ничего не упало за три дня судейства. Видосы конвертируются по очереди. :)

              После того как дадут доступ, мы подтюним все еще, конечно, сервис продолжит жить. И, да, в скором времени обязательно тоже напишем пост на Хабре про свои впечатления от Рамбла.
                0
                Круто :) Жду и ваш обзор
              0
              забыли plugin.r13.railsrumble.com
              А почему вас нет в составе команды?
                0
                Добавил.

                В составе команды могло быть до 4х человек. Т.к. я ничего не делал поэтому меня там и нет) Но на хабр пишу я и пиарю нас тоже я) Как-то исторически так сложилось.
                  –2
                  Это неспортивно. Давайте сделаем 4 участника и еще 10 человек копирайтеров, твитботов и тд.
                    +2
                    Неспортивно — это если бы я участвовал в разработке и прочем. Писать на хабр пришлось мне, потому-что я единственный, у кого хватает кармы на публикацию поста.

                    И самое главное — на судейство в railsrumble моя публикация никак не влияет. Как то так :)
                      0
                      а в планировании проекта вы участвовали? по-правилам нельзя даже юзер стори писать до соревнования.
                      Мне кажется — вы нарушаете правила.
                      Кроме того, есть еще приз симпатий участников. И как раз тут пост на хабре может что-то изменить.
                      Пока вы писали в твиттер от имени вашей команды — ваши участники писали код.
                      В остальных командах люди писали в твиттер вместо того, чтобы писать код.
                      В любом случае — дело ваше. Однако в рейлзрамбле интерес спортивный и играть стоит по правилам. Нет — карма ваша
                        +1
                        По прежнему не вижу нарушений со своей стороны, извините.
                +2
                Спасибо за классный обзор закулис процесса :) У вас получился очень классный, лаконичный, отполированнный проект. Желаем вам удачи, как и всем командам из России!
                  0
                  Спасибо :)
                  Дада, надеюсь кто-то из наших соотечественников займет призовые места!
                  0
                  Молодцы. Сам делал подобное, только собирал твиты, по принципу TJournal, популярное за сутки! Собирал твиты не по хешам, а по аккаунтам.
                  Собрал команду из аккаунтов игроков, руководство клуба, официальные и близкие к клубу МЕДИА, а так же бывших игроков и легенд. Наиболее полно, собрал по Ливерпулю, потому что… гладиолус :) По остальным командам АПЛ, собирал по мере сил и знания.

                  Читать игроков и оф. аккаунты клубов — не очень интересно. В основном, они все «политкорректны». Есть, конечно, исключения: Джо Бартон, например, набирает много ретвитов :)
                  Зато есть много других футбольных личностей, которые куда интереснее. Например бывшие игроки, футбольные журналисты, иллюстраторы, статисты и блоггеры. Вот что более интересно!

                  Конечно, это куда сложнее, чем парсить по хешу, но это может дать интересный контент. А сейчас, вы объединили фанатские сайты в одном месте.

                  Я понимаю, что все это нужно было успеть за 48 часов и это только платформа, которую нужно будет развивать. Мне кажется, будет куда интереснее собрать подобную информацию, нежели оф. аккаунты. Это конечно, даст посетителей, но в основном, будет дублировать фанатские или просто спортивные сайты.

                  Меня самого очень интересует подобная тема. Удачи вам ребята и буду рад помочь. YNWA!

                    0
                    Спасибо за интересные идеи :)
                    0
                    Мы тоже из России — tip4commit.com/

                    Наш сервис дает возможность поддержать опенсорс проекты с помощью биткоинов или немного заработать контрибьютя в опенсорс.
                      0
                      Добавил вас
                      0
                      Молодцы, круто!
                      Расскажите хеш теги в твиттере в ручную отбирали или как то список автоматически получили?
                        0
                        Все ручками :)

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое