По традиции, мы опять упоролись хакатоном.
TL;DR
видео-демка (Ссылка на голосование внизу поста)
Про идею
Меня давно волновало, что все сервисы для докладчиков какие-то, ну, никакие. Да, хочется поделиться слайдами после доклада (speakerdeck, slideshare), но хочется чтобы у презентации какая-то жизнь была после этого, а не «слил и забыл». Или можно «делать слайды» (google docs, prezi, slides.com), но мне вот не кажется, что ключ к крутому докладу в эффектных слайдах или головокружительных переходах. Т.е. это вишенка, но на торте, которого сейчас ни у кого нет. А то что есть - всё в разных уголках, сделал на google docs, показал из pdf, залил на slideshare, на вопросы отвечаешь в ЖЖ.
Так родился Deckatron - сервис презентаций, на котором можно придумать, создать, показать, ответить на вопросы, опубликовать свою презентацию и украсть чужую.
Начинается все с markdown-редактора. Текст накидывается прямо на сайте, и markdown, на мой взгляд, идеальный формат для того, чтобы быстренько записать, упорядочить разрозненные мысли и составить план. Беда всех редакторов слайдов - в них невозможно «думать», слишком много возни, чтобы поправить текст, поменять порядок, добавить пару мыслей. У нас вся презентация - один сплошной текстовый документ. Что может быть проще?
Дальше нужно добавить немного разметки (стандартные markdown заголовки, выделения, ссылки, списки, конечно, плюс разделители слайдов --- и ===). Из этого автоматически генерируются слайды. Важно, что если вы слайды уже почти сделали, а потом поняли, что нужен еще один раунд брейншторминга, вы остаетесь внутри того же самого удобного и гибкого текстового документа. В обычных редакторах чем полнее ты сделал слайды, тем сложнее что-то глобально реорганизовывать, и тем меньше хочется это делать.
У редактора есть WYSIWYG, так что в реальном времени видно, что там получается из слайдов (не переносится ли заголовок, входит ли код, не мешает ли фон). Подготовка заканчивается выбором цветовой темы.
Дальше по идее должен идти режим репетиции, но я пока не уверен, чем он должен от режима презентации отличаться. В любом случае, здесь у нас пока пусто.
И наконец презентация! Тут у нас все для этого и даже больше. Полноэкранный режим - разумеется.
Есть еще режим зрителя: когда ты заходишь на главную страницу, там есть секция «Live right now», т.е. презентации, которые прямо сейчас идут.
Если в такую ткнуть, она тоже откроется на полный экран и можно видеть, как докладчик переключает слайды в реальном времени. Удобно, если сидишь за колонной в зале, например. Плюс видно, сколько человек смотрит прямо сейчас (такое же есть на slides.com)
Ну и вторая важная фича - вопросы докладчику. Пока идет доклад, можно открыть специальный попап, задать вопрос или проголосовать за чужой (ради этого, например, существует целый отдельный сервис sli.do).
В конце доклада вставляется специальный слайд, на котором показаны наиболее популярные вопросы (да, больше не надо специально делать слайд «Вопросы?»). Естественно, всё это в реальном времени, без перезагрузок, на server push и вебсокетах. Мне нравится, как традиция (слайд в конце со словом «вопросы») реализуется современными технологиями на качественно новом уровне и начинает буквально выполнять ту функцию, которую она до этого только обозначала.
Наконец, что происходит после доклада? У вас хорошая порция материала, он уже структурирован, глупо выбрасывать его. Выложить слайды часто недостаточно. Видео делают долго (а ажиотаж штука быстро протухающая), да и смотреть его потом часто мучительно медленно. Декатрон позволяет доклад грамотно выложить - разбавить слайды комментариями, чтобы получился такой блог-пост с картинками. Можно начать с поста, потом добавить слайдов, можно сделать слайды, потом дописать комментарии - как больше нравится. Главное, что другие люди смогут это прочитать и извлечь пользу. Идея родилась
два с половиной года назад, опробована
тут,
тут и
тут.
Тут еще неплохо бы сделать вопрос-ответ секцию (только не комментарии), и возможность ответить на уже заданные по ходу доклада вопросы для начала, но пока этого нет.
Наконец, уже просто веселухи ради, мы прикрутили кнопку «Fork this deck», которой можно скопировать себе презентацию и поправить как угодно. Осмысленный вариант использования - самому делать вторую/третью/четвертую версию однажды уже рассказанного доклада. Неосмысленный - социализация, что ли?
Про реализацию
Мы сделали это все за двое суток командой из четырех человек. Clojure, ClojureScript, Http-kit, Rum, Transit, Instaparse. Без DataScript-а.
Экраны мы проектировали в Precursor (проект, выросший из ClojrueCup, между прочим), его даже
можно посмотреть Очень много углов срезано, держится буквально на соплях. Из страшного - markdown парсер мы писали сами, и он получился, что называется, «с особенностями». Синхронизация данных работает только по оптимистичному пути - если что-то пойдет не так, в лучшем случае undefined behaviour. Презентации хранятся в обычных файлах. Логинов нет, аутентификация по автоматически выдаваемой куке.
Короче, все, что не портит в первом приближении user experience, сделано по максимально простому пути. Фокус - на фичах, а не техническом совершенстве, которое, скорее всего, на таких масштабах никто не сможет оценить.
Из хорошего - мы сделали довольно изящную систему синхронизации. Взяли
clojure.data/diff чтобы вычислять дельты между произвольными словарями и написали функцию patch которая может эти дельты применять. Дальше, на любое изменение мы шлем, бродкастим и применяем эти дельты где можем. Кайф в том, что механизм универсальный и автоматический, поэтому вся работа со стейтом локальная, ничем не ограниченая (меняй как хочешь), и где-то в фоне по волшебству просасывается ко всем. Например, вопросы на слайды я добавил где-то за час (из него минут 20 я сердечко для лайков искал), и написал 0 строк кода чтобы они были риалтаймовыми - они по-другому просто получиться не могли. В идеальном мире, конечно, данные будут не словарями, а CRDT, а редактор текста вообще OP, и тогда это еще и надежно заработает, но за два дня такого не успеть (ну или нужен опыт работы со swarm.js, которого не было).
Что я хочу сказать - в будущем, когда клиент-серверное общение будет настраиваться одной кнопкой по принципу «вот ip сервера, общайтесь», и дальше оно как-то само, в фоне, с fallback на localStorage и прочими оптимизациями, тогда заживем. Стоимость веб-приложений упадет до нуля практически (ну, если еще вместо box модели нормальные констрейнты прикрутят).
Заключение
Я больше всего горжусь идеей - мне кажется, это вполне серьезное продуктовое предложение, без скидок на хакатон. Т.е. если бы оно работало, я бы им только и пользовался. Плюс то, что все собрано в одном месте, ценно само по себе. Мне нравится, что презентацию можно начать, сделать, доложить и опубликовать, не выходя из одной вкладки в браузере. Презентационным платформам пора бы запрыгнуть на поезд Web 2.0 и начать думать дальше PowerPoint модели.
Ну и я очень доволен, что мы сделали достаточно много фич, по крайней мере, чтобы показать поддержку полного цикла жизни презентации. Продуктивно и организованно провели два дня. Жалею только, что кнопка «Read» стоит до «Present», а не после.
ВАЖНО!
Как обычно, нам нужен ваш голос. Да-да, именно ваш! Если идея вас впечатлила, пройдите на
clojurecup.com/voting, залогиньтесь через github и проголосуйте за Deckatron (команда The Other Guys).
В главных ролях:
Олександр Шишко,
Михаил Акованцев,
Ренат Идрисов и я.
Предыдущие серии:
2013,
2014