ADD 2010: Отчет Алексеева Алексея
Конференция проходила в Ярославле: четверг-пятница.
От CustIS на конференцию поехало около 13 человек, из них 4 докладчика плюс председатель программного комитета. С гостиницами вышел факап (причем позже случился еще один). И мы решили ехать вечером до Ростова, а утром уже ехать в Ярославль.
В 7 утра с Глебом походили по Ростову — довольно заброшенный городишко. Посмотрели кремль, дошли до озера.
Содержание
- 1 Первый день.
- 1.1 Стас Фомин. Золотая середина. Открытые системы поддержки разработки
- 1.2 Олег Царев, Кирилл Коринский. Сравнительный анализ хранилищ данных
- 1.3 Андрей Бибичев. На пороге дополненной реальности: к чему готовиться разработчикам
- 1.4 Михаил Кокорев. Дополненная реальность через web-камеру
- 1.5 Максим Лапшин. Разработки видеохостинга на Erlang
- 1.6 Java vs. C#
- 1.7 Алексеев Алексей, Николай Гребнев. Статический анализ кода (на примере DDD-фреймворка)
- 1.8 Елена Сагалаева. Искусственный интеллект в играх
- 1.9 После конференции
- 2 День второй.
- 2.1 Андрей Карпов. Современный статический анализ кода
- 2.2 Владимир Климантович. Apache Hadoop
- 2.3 Михаил Черномордиков. HTML5, CSS3 и новый Internet Explorer 9
- 2.4 Андрей Майоров. Об устройстве иерархических структур данных
- 2.5 Евгений Кирпичев. Многопоточное программирование
- 2.6 Андрей Бибичев. Мастер-класс Domain Driven Design
Первый день.
На самой конференции, как и предполагалось, докладчиков было почти одинаково со слушателями. Организаторы для массовки набрали студентов.
Стас Фомин. Золотая середина. Открытые системы поддержки разработки
Рассматривал варианты построения такой системы, показывая, что наш вариант лучший.
- Платные жмут, и никак не «разносишь».
- Можно взять лучшее и интегрировать. Тут я не понял аргументы против. Кто-то пробовал сделать подобное, но как я понял, перегнул палку. В общем, мне показалось, что это не аргумент. Кто-то мог пойти нашим путем, затем обломаться и сказать, что это не работает. И вообще, я считаю, что некоторые наши сервисы на wiki — это ужОс. Конференц-зал, блоги и форумы. Мне кажется, что их интерфейс очень не интуитивный, местами жуть. И не понятно, что плохого, если бы вместо них были бы более специализированные, которые бы также были интегрированы в общую систему.
- Наш путь — взять три системы и сделать все на них. Но помимо трех вылезли еще SvnSearch (кому он нужен в нашей структуре?), Testopia и FeedOnFeeds.
Народ спрашивал про иерархические задачи, и где это все взять. На первый вопрос ответом было: «Используйте зависимости», а на второй сказали, что скоро выложат, следите за http://team.custis.ru.
Стас приехал в 4 утра, на вокзале сделал презентацию, а к докладу ее успел куда-то продевать и показывал старую презентацию. Большую часть материала я слышал несколько раз, но Стасу все нипочем, и рассказывал как всегда зажигательно.
Олег Царев, Кирилл Коринский. Сравнительный анализ хранилищ данных
Был на первой половине рассказа. Говорили, как работать с большими объемами данных. В качестве примера была выбрана задача по хранению друзей в социальной сети. Итог я не запомнил, но всем было очевидно, что хранить надо проиндексированный список ребер.
Привели вычисления скорость работы памяти, при это из-зала говорили другие цифры, утверждая, что память может читать и более мелкие порции, чем одна страничка (4K).
По ходу доклада было много определений и даже утверждений: транзакция, репликация, CAP-теорема. Мне первая часть не очень понравилась, думаю, с такой темой можно было много интересного рассказать.
Андрей Бибичев. На пороге дополненной реальности: к чему готовиться разработчикам
У Андрея была очень крутая презентация. Рассказывал тоже хорошо. Сложно описать, лучше посмотреть. В общем, если бы мне что-нибудь продавали — я бы купил). Наверное, лучшее выступление на конференции. Что запомнилось:
- Рассказал про определение угла, различные фильтры: Калмана и композитный (альфа-бета). Первый сложный, второй дает схожий результат, но сильно проще. Даже привел формулы расчета для последнего (композитного фильтра).
- Было много видео, иллюстрирующих дополненную реальность, способы применения.
- Классификация подходов к Motion capture, которым сейчас занимаются.
Из минусов, мне бы хотелось послушать, про сами методы Motion Capture, в формате нормальной лекции, а не в формате развлекательной презентации, но боюсь большинство меня не поняло бы. Андрей слабал прикольный презентер из пульта wii. Еще запомнилось несколько зачетных шуток. Респект докладчику.
Михаил Кокорев. Дополненная реальность через web-камеру
Во-время доклада ставили Коле кодек. Если в двух словах, то докладчик был вялым, медленно говорил. Даже после того, как поставили кодек, я слушал с трудом. Есть несколько способов распознавания изображения:
- Маркеры. Демонстрировал в живую, как распознаются маркеры, а вместо них на видео нарисована ромашка. Маркеры плохи тем, что они некрасивые, их видно и не налепишь на глаза, а их часто надо распознавать.
- Выделять точки максимального изменения градиента света. Метод без маркеров, но часто плохо работает.
Запомнил библиотеку FaceSDK для распознавания лиц. Сказали, что мега-крутая. И продемонстрировали в живую. Не понравилось, что во-время демонстрации докладчик лазил по интернету в поисках нужного видео (иногда у нас на демонстрации такое бывает). Доклад был вялым, несмотря на очень благодатную тему. И вообще, если бы Андрей в живую мог показать свой продукт, мне кажется зал бы порвало на мелкие клочки.
Максим Лапшин. Разработки видеохостинга на Erlang
Народ шутил, что видел нескольких разработчиков на Erlang-е одновременно. Доклад был интересным и живым. Вобщем, что я запомнил — в Erlang-е есть процессы, которые быстрые, как потоки, но изолированны, как процессы, и поэтому называются процессы. Есть метаданные процессов. Процессы убивают без проблем — нет особых связей между процессами. По метаданным можно найти (родительский?, зависимый?) процесс. И тоже его убить.
И вообще Erlang обладает следующими свойствами.
- Прост. Изучается за неделю.
- Динамически типизирован.
- Лаконичен.
- Идеально масштабируется (за счет изолированности процессов?).
- Поддерживает настоящее горячее копирование, (что важно для длинных сессий?).
- Очень эффективен для работы со StateFull клиентами, что является основой видеохостинга.
- Код плохо читается.
Порадовали слова докладчиков, что исключения не ловим. Зачем? Процесс упадет, но кого это волнует, остальные работают. Интересно, как в таких системах с диагностикой ошибок и вообще они хоть логгируются? Вообще докладчик хорошо рассказывал. Мои вопросы естественны, так как я до этого вообще слышал про Erlang только грязные слухи :)
Java vs. C#
Оказалось, что у всех примерно одно мнение. C# гораздо круче, но Java кроссплатформенная. Я даже не смог сказать плюсы Java, как языка, перед C#. Как мне сказал вечером джавист, кого они волнуют, если в C# есть LINQ:).
Алексеев Алексей, Николай Гребнев. Статический анализ кода (на примере DDD-фреймворка)
Впервые пришлось выступать перед таким количеством народа. Волновался ровно столько сколько должен был на первом выступлении.
К сожалению, видимо, мало кто что понял, и были даже курьезные комментарии/вопросы:
- В twitter: «Я рад за custis, у них есть модный фреймворк для анализа кода»
- Вопрос из зала: «То есть вы сделали костыли для LINQ на CLR-свойствах?»
- На следующий день докладчик, рассказывавший про статический анализ, сказал, что мы не анализируем код, хотя пример с расширениями LINQ демонстрировал места, где мы влезаем и анализируем код.
Был правда человек, который много во что врубился, и задал много правильных вопросов, не зная ни C#, ни Model checking. Еще человек, не слушавший доклад, в коридоре попросил бегло повторить доклад). Доклад вроде бы понравился нашим.
Итого: надо работать надо последовательностью изложения. Еще для выступления на SECR сделать попсовее, там-то точно не поймут.
Елена Сагалаева. Искусственный интеллект в играх
Докладчик — известный блоггер alenacpp. Я даже немного читал блог. В целом доклад ничего, но его название скорее «Некоторые алгоритмы в играх». Был рассказ про эвристики и немного про алгоритмы на графах, но не было эмуляции человеческой деятельности (особенно творческой), которой характеризуется искусственный интеллект (естественно ИМХО, так как это нечеткие определения).
Было сказано, что игра должна доставлять fun игроку. В качестве примера были приведены следующие эвристики:
- Если при стрельбе игрок попадает с вероятностью 50 %, то на третий раз должен железно попасть. Сказали, что это вероятность с состоянием.
- В гонках соперничающие машины должны ехать неподалеку от игрока. Неважно, выигрывает он или проигрывает. Аналогия — машинки на резинке.
Дальше был рассказ про алгоритмы на графах. Точнее, какие используют: Дейкстра, A* и НA*?. Первый я отлично знаю класса с 9-ого. Он ищет минимальные пути от заданной вершини до все остальных. Про A* — слышал. Это Дейкстра с консистентной эвристикой (удовлетворяет правилу треугольника). В худшем случае работает, как Дейкстра, но в лучшем сильно быстрее. Третий — модификация второго; ничего про него не слышал. Надо будет разобраться. На вопрос про количество вершин — ответили, что было 100, а вообще не знают. Следующим вопросом выяснил, что число ребер порядка вершин (как правило в играх регулярное замощение карты). Вообще, для 100 вершин и такого же порядка ребер можно пускать Дейкстру 10000 раз в секунду. И если граф не меняется, то можно Флойдом все вычислить пути для каждой пары. К сожалению не было рассказано, не были ли использованы инкрементальные алгоритмы a-la Беллман-Форд. Именно они используются в сетевом протоколе RIP, где ребра могу появляться и исчезать.
Также понятно, что если граф почти регулярный то пути можно считать без стандартных алгоритмов (грубо говоря формулой)— это вроде часть HA*?
Далее была рассказано как проходить путь. Проблема связана с появление препятствий, которые к тому же могут двигаться. Решение — прибавлять вектор отклонения от помехи.
Итого: спасибо докладчику, но как-то слабовато. Мало было самих алгоритмов, все было ооочень просто и на пальцах, несмотря на то, что я отвлекался на общение по-поводу своего доклада. И, опять-таки, мое предложение к докладчику сделать нормальную лекцию с обзором алгоритмов (например поиска пути на графах) и с доказательством корректности на пальцах.
После конференции
После окончания первого дня конференции оказалось, что для докладчиков наша компания не забронировала гостиницы. Блин я думал прошло три часа, пока разбирались с этим. В общем, Игорь просто доплатил за нескольких человек. Дальше было after-party — я жутко хотел спать после утреннего осмотра Ростова и вечерней подготовки к докладу.
День второй.
Андрей Карпов. Современный статический анализ кода
Доклад был посвящен анализу C++ кода. Большинство ошибок связано с указателями. Нам их проблемы не понять, а им наши. Запомнилось: пишете на C++ — у вас ошибки. Проводил обзор утилит для статического анализа кода на C++, и сам является автором утилиты. Приводил примеры ошибок.
Больше особо ничего не вспоминается, наверное я уже далек от C++ -specific проблем.
Владимир Климантович. Apache Hadoop
Стандартные начало про Hadoop. Рассказали, что есть надстройна над Map/Reduce, которая выполняет SQL-запросы к данным. Слегка коснулся HDFS BigTable и еще чего-то. Улыбнула пара фраз:
- Ну да, падает иногда теряются данные.
- Microsoft бы сделал лучше.
Я уже так или иначе большую часть доклада где-то слышал, поэтому впечатлений особо не осталось.
Михаил Черномордиков. HTML5, CSS3 и новый Internet Explorer 9
Первый раз слушал Михаила. Порадовало, что по опросу, кто пользуется IE поднял руку только Коля и какая-то тетенька. Сказал, что стандарт HTML5 примут не раньше 2022 года, так как много неспецифицированных мест. И уже сейчас HTML5 — это 1100 страниц. Новый IE9 проходит тест на совместимость с HTML5 на 100/100 и отображает SVG на 95/100. Также по производительности быстрее всех, уступая лишь Chrome (правда это бета, а релиз думаю будет медленнее). Вообще, Microsoft больше всех вложил сил в HTML5, точнее сделал больше всех тестов и т. д. В общем, типичная зомби-презентация, я такие не люблю.
Андрей Майоров. Об устройстве иерархических структур данных
Была представлена методология хранения данных, которая состоит из трех видов связей:
- Наследование — все свойства наследуются. При удалении — удаляются.
- Аггрегирование — тоже, что и наследование, но свойства не наследуются.
- Link — просто ссылка.
Далее была рассказана и проиллюстрирована работа с такой организацией данных. Что происходит при удалении, добавлении и перемещении.
Такая структура не подходит для больших объемов данных, зато хорошо работает для не очень большого объема данных, типичный пример — средний web-сайт. Идя на доклад, я рассчитывал увидеть какие-то крутые структуры данных, но это была именно организация данных, без каких-либо алгоритмов, оценок, и т. д.
Докладчик предложил сообществу свой фреймворк SDF, который и умеет работать с данными таким образом.
Евгений Кирпичев. Многопоточное программирование
Был интересный доклад в формате лекции, что мне сильно понравилось.
- Гораздо лучше меня рассказал про структуру Крипке, темпоральные логики. Рассказал про LTL-логику и пример нескольких утверждений. К сожалению, дал неправильные данные, о сложности верификации LTL-логики, мне даже пришлось поправить:). К сожалению, на определениях все и закончилось. Рассказал про Spin и Java PathFinder. Последняя утилита вроде находит по java-программе все dead-lock-и.
- Далее рассказывал, как небольшими изменениями в дизайне можно снизить сложность многопоточного ПО. Я и так, практически, всех шаблонов придерживался интуитивно.
Что запомнилось:- Если надо организовать отправку писем — сделайте абстрактную многопоточную очередь, и используйте ее. Ровно так месяца три назад я и сделал.
- Можно использовать догоняющую стратегию, сделав инфраструктуру для исполнения догоняющих заданий. Это наши Job-ы.
- Были антипатерны, такие, что в жизни я их не встречал. Вообще, я согласен, что большая часть сложности многопоточных программ очень сильно снижается правильной организацией системы.
- Было что-то про векторизацию. Интересный факт — набор ассоциативных операций можно векторизовать, точнее не сам набор операций (с этим все понятно), а последовательный возрастающий фрагменты вычислений (лениво расписывать). Так самая быстрая сортировки — векторный radix-sort. Было очень интересно, но докладчик не стал углубляться, и опять остановился на уровне определений. Еще код в Хаскеле тоже местами векторизуется.
- Что-то про функциональное программирование. Там с параллелизмом все круто — ну мы и не сомневались особо. Рассказывал про STM (Software transaction memory). Это дается бесплатно в ФП, но в обычных языках практически невозможно.
Мне понравилось, что доклад был в стиле лекции. Но не хватало полноценных разборов алгоритмов, оценок, доказательств, ну хоть на пальцах.
Андрей Бибичев. Мастер-класс Domain Driven Design
Пошел послушать конец мастер-класса. Вообще я уже слушал самую первую версию, когда Андрей читал его у нас. Андрей, как обычно, жег понемногу. Но я особо не запомнил — видимо устал уже. Правда, запомнил, что надо внимательно посмотреть на презентацию Greg Young-а по поводу блокировок.
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».
Репликация: База Знаний «Заказных Информ Систем» → «ADD 2010: Отчет Алексеева Алексея»