Никита Прокопов (tonsky) wrote,
Никита Прокопов
tonsky

Categories:

Clojure Cup

Итак, я упоролся еще одним хакатоном. На этот раз 2 дня (то есть со сном, впрочем все равно весьма условным) и никаких споров насчет того, какой язык выбирать.

По ощущениям:

  • В два дня можно что-то осмысленное уложить, но скорее всего не в одного. Нас было четверо, мы загрузились по полной, и то едва-едва сделали самый базовый каркас, без которого приложение вообще смысла не имеет.

  • При обсуждении идей выработали такие критерии:


    1. Прикол приложения должен быть понятен сразу, в течение двух минут.

    2. Приложение не должно ориентироваться на какую-то очень специфичную аудиторию (дизайнеры электроцепей, ищущих коллабораторов через интернет эксплорер, или члены клуба любителей игры в мафию в Новосибирске, обладающие айФонами).

    3. Мы не должны рассчитывать что «это все закрутится, если будет хотя бы какая-то аудитория онлайн», потому что в момент оценки такой аудитории не будет. Нет ничего унылее, чем заброшенное приложение с ежедневной аудиторией в 5 любопытствующих, рассчитанное на то, что каждому нужно дождаться 10 лайков, чтобы получить плюшевого медведя.

    4. Должны легко откусываться и добавляться фичи. Задачу в процессе реализации будут резать напополам, потом оставят четверть или еще меньше. Программисты и с оценками себя сильно перехваливают, и работать придется в состоянии легкого аутизма аврала.

    5. Minimal viable product — приложение должно нести ценность в самой базовой конфигурации. Результату будет не хватать полировки, дизайна, тестов, будут (наверняка) сложности с использованием UI и не будет интеграции ни с чем и не будет мобильных платформ и вообще ничего не будет. И вот в этих условиях костяк все равно должен торчать и радовать. Несмотря на это вот всё.


  • Очень нужен дизайер, который бы все два дня точил кайфную графику. Я пытался совмещать, но я очень мало успел и многие базовые вещи незакончены — физически, счет под конец шел на минуты.



  • Команду надо обкатывать. Собираться за неделю/месяц до события и пробовать сделать что-то похожее на заявку. Я в этот раз накидал заранее прототип, и он мне очень помог во время события — код мы из него не тырили, зато я заранее знал про многие проблемы, которые возникнут на пути, и как их оптимальнее решить. Короче, прототип экономит думательный и решение-принимательный ресурсы. А писать код уже просто, на уровне рефлексов.

  • Выращивание кода на выброс сильно отличается от кода, с которым жить. Вполне возможно, чтобы выиграть, надо ориентироваться на выброс, потому что можно больше успеть. На самом деле, отличается только момент, когда можно начинать жестко говнякать. В первый день у нашего кода еще держалась какая-то структура, и благодаря этому во второй он не развалился совсем в хлам. Если бы хакатон длился неделю, нужно было бы держать в себя в руках до предпоследнего дня.

  • Наверное, вы уже догадались, что нашего кода в паблике не будет, да? :)

  • Очевидно, нужно целиться в те 80%, которые делаются за 20% времени. Но задачу нужно подобрать правильно, чтобы итог можно было использовать без оставшихся 20% (см. выше).

  • Вау-эффект далеко не всегда соответствует сложности задачи. Два простых компонента, соединенных вместе, могут дать что-то супер-полезное (такие идеи сложно найти, впрочем). Наоборот, можно упарываться в коде очень долго, а в итоге сделать что-то, меняющее баланс сил в мире примерно на ноль.

  • В инструменты нужно вложиться. «Лучше час потерять…» Я потратил часа 4 на редактор спрайтов, и в принципе он себя окупил, учитывая, сколько раз я их потом переделывал. Обидно, что я мог бы сделать его заранее (или подобрать готовый), если бы догадался.

  • Незнакомые технологии лучше обходить стороной. Ради фана можно попробовать разобраться с Datomic или enlive, но умножайте все свои планы на 0,1 тогда. Твиттер #clojurecup выл людьми, рассчитывавшими на недавно появившийся core.async и надолго с ним залипшими. Зато незнакомую технологию можно сделать знакомой заранее.

  • Clojure и ClojureScript опять показали себя прекрасно. По сравнению с прошлым разом (15 месяцев назад) CLJS заматерел, 46кб gzipped production js, инкрементальная компиляция проекта 0,2 секунды — раньше я иногда успевал сделать рефреш до перегенерации js файла, теперь нет.

  • По отзывам коллег, «на Кложе тоже можно писать код быстро». Что имелось в виду под «тоже», выяснить пока не удалось.

  • Производительности CLJS хватает выше крыши для 60fsp. Правда, конкретно у нас в последний момент выяснилось, что мы на каждом кадре делаем Image Resize (non-cached) текстуры 2000×2000, но это проблема алгоритма. Причину, к сожалению, я понял только на следующий день :(

  • Кода обработки UI получилось не меньше кода, отвечающего за бой. То есть мы потратили X на то чтобы бойцы двигались и дрались, и еще X на всякие переходы между экранами, состояния входа/выхода/начала/конца etc. Вырожденный пример — туду листы. Серверная часть делается за час, а остальные два дня я так понимаю люди пилят UI. Натурально, за несколько часов до конца контеста идея добавить куда-то еще один select вызывала во всех участниках панику. Слишком многое нужно учесть, слишком много входов и выходов, слишком много невалидных состояний, которые тоже надо обрабатывать. Короче, интерфейсы еще только ждут своего Рича Хики, который разделит их на минимальные несвязанные части и научит соединять их обратно.

  • Мне адски повезло со шрифтом. До сих пор не верю. Максимум, на что я рассчитывал — пиксельный шрифт с латиницей и лицензией, натянутой на наш случай со скрипом. Однако, вот он: http://www.zone38.net/font/

  • Вот еще из любопытного, подметили организаторы: Source control repository type stats: Git 100%, Hg 0%, SVN 0%.


Вот общий итог по всем заявкам (составление и комментарии Юры Строта, с моими пометками — NP):

Из 93 заявок 35 как-то работающих приложений: 6 todo листов, 11 игр, 18 других приложений.

Заметные:

dupe — из туду листов самое нормальное (и единственное)

asylum — типа игра, но на самом деле просто список проблем Австралии. Сделано красиво

pong — пинг-понг на троих ничего так, хоть и простенький

warmagnet — что-то красивое, но фиг пойми как работает) (NP: это Александра Соловьева, недавно прогремевшего по рунету с «самым уматным докладом на конференции программистов» про Clojure, http://solovyov.net/blog/)

words — NP: очень простая, работает, выглядит очень профессионально

vizier — редактор datomic, красивый, но работает только одна страница со всеми схемами

circuit-circus — редактор электронных схем, простенько, но прикольно

clichanked — анализатор сайтов, ищет по урлу заезженные фразы. Красиво и работает

clojurians — база данных кложа-разработчиков. Можно зарегаться, можно поисктаь. Простенько, но работает

codenotes — анализатор репозиториев (всякие FIXME показывает). Выглядит красиво, но у меня работать не хочет. // NP: это Дмитрия Грошева si14, у меня вроде работает

focusoncoding — по кейвордам находит имя, домен и рисует иконку. Прикольно, красиво и работает

pixelpaint — онлайн-рисовалка, простенько, но работает

prefab — RSS-reader, красиво и вроде работает

whatthefn — задачки по кложе, выглядит красиво

Вот что мы в итоге сделали:











Вот как менялось приложение:









А вот фотоотчет:







Адрес приложения: http://kick.clojurecup.com

Credits: Yuri Strot, Alexander Poplavsky, Julie Prokopova, Nikita Prokopov

А ТЕПЕРЬ ВНИМАНИЕ Если вы это прочитали (и вам понравилось), проголосуйте за нас вот тут: http://clojurecup.com/app.html?app=kick. Спасибо!

Кто не видел, то вот еще рассказ про предыдущий хакатон.
Tags: clojure, девелопмент, и такое было, изолента
Subscribe

  • Повышенное чувство собственности

    Бывает, что в интернете кто-то слегка неправ, в какой-то детали, и тогда поправить их будет обычным занудством (90% моих постов, ха-ха), а бывает,…

  • (no subject)

    А вот и инструкция, как замапить CapsLock+IJKL на стрелки и наслаждаться управлением курсором с home row в любом приложении…

  • Не Vim-ом единым

    Появился повод высказаться по поводу Vim, а я давно собирался. Мнение такое, что он, крутой для своего времени, сегодня просто морально устарел.…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 56 comments

  • Повышенное чувство собственности

    Бывает, что в интернете кто-то слегка неправ, в какой-то детали, и тогда поправить их будет обычным занудством (90% моих постов, ха-ха), а бывает,…

  • (no subject)

    А вот и инструкция, как замапить CapsLock+IJKL на стрелки и наслаждаться управлением курсором с home row в любом приложении…

  • Не Vim-ом единым

    Появился повод высказаться по поводу Vim, а я давно собирался. Мнение такое, что он, крутой для своего времени, сегодня просто морально устарел.…