2014-05-24

Data Visualization with d3.js

Еще один элемент нашего стека - библиотека для визуализации данных. Во-первых - библиотека относится к класу реактивных - т.е. сама реагирует на изменения в исходном массиве данных. Во-вторых - само название расшифровывается как Data Driven Documents. На сайте можно найти огромное количество примеров.

Все визуализации делаются на SVG, доступна возможность анимации и создания интерактивных графиков, удобные средства работы с графиками, визуализация геоданных, множество плагинов. Несколько более высокоуровневых библеотек содержат под капотом d3.js.

Итог: книга дает беглый обзор возможностям библиотеки (хотя рассматривать большие портянки кода очень уныло). Если у вас есть потребность визуализации данных - смотрите в сторону этой библиотеки. The New York Times плохого не посоветует.

2014-05-20

Форум для студентов LVL UP: IT-катализатор

Задумка

В начале апреля у народа появилась идея провести форум для студентов местных вузов, с докладами, соревнованием и призами победителям. На меня выпала подготовка заданий для соревнований. Мы с +Евгений Доронин засели и за час набрейнштормили идей для заданий. Главной идеей было отсутствие четких требований как в реальной жизни: вы получаете какие-то исходные данные и ваша задача - понять, что же от вас требуется. Задания должны быть командными (программирование не для одночек). Для решения задач должно хватить университетского курса (ожидались четверокурсники). Задачи можно было решать в лоб, а можно решить написав кусок кода. Задачи должны быть интерактивными и разнообразными, чтобы не тупо сидеть и пялиться в ноутбуки. И должна быть возможность шортката для сообразительных. Ну и в довершение - доклад, который должен был быть максимально абстрактным и не привязанным к какой-либо конкретной технологии (это я вспоминаю те лекции полтора года назад). Подготовил доклад про начало карьеры разработчика, причем за месяц он сильно уехал от оригинальной темы. Дальше будут впечатления от процесса организации мероприятия.

Первая попытка

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

Вторая попытка

На этот раз набралось 40+ студентов из трех университетов. О да, приятная неожиданность: это не студенты ленивые, а административные работники не хотят работать. Вообще такие люди вызывают у меня атомную ярость своей отрицательной производительностью и тем что воруют у людей время. Достаточно пойти в обход их и все начинает работать. В идеале конечно вообще напрямую, но это не всегда возможно.

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

Квест

Состоял из связанной цепочки заданий - для переходя к следующему заданию, нужно решить предыдущее

1. Домашнее задание, дан запароленный zip архив с данными. К архиву прилагается легенда и записка с подсказкой, архив просто вскрыть перебором. (Это почти все сделали, просто скачав переборщик)

2. В архиве находятся логи вида IP:port login pass HTTP-Status. Несколько миллионов строк из них две со статусом 200. Здесь был мой косяк - я закрыл доступ по укзанному адресу и просто забыл его включить, как оказалось самые умные ломились на второй этап из дома (может быть стоило открыть, тогда бы мы увидели победителей еще до начала конкурса). Я указал правильный адрес и все начали на него ломиться. На этом этапе очень многие застряли - всех смутил HTTP который отвечал стандартным апачевским It works. Особо умные попытались доступаться по FTP, попробовать SSH догадалась толко одна комнда. Тут уже отсеялись все, некоторые смогли скачать файлы при помощи pscp, а некотором пришлось давать эти файлы на флешке.

3. В одном из двух аккаунтов (не все догадались проверить оба аккаунта) был запароленный архив с картой офиса, а во втором tar с сотней файлов. Имена фалов были просто шестнадцатеричными кодами символов с паролем к архиву. Это было единственное задание на программирование ну или хотя бы решение в лом на бумажке.

Необходимо найти клад
4. Карта офиса, с обведенной локацией. Локация была горшком с надписью Follow the white rabbit. По офису ходил чувак в футболке с кроликом и выдавал следующее задание.

Х. Тут должно было быть еще два этапа: позвонить по телефону и ответить на вопросы (пришлось отбросить, поскольку не успели записать вопросы) и ссылка на сайт где в исходном коде было спрятано следующее задание. Поэтом кролик выдавал сразу следующее задание.

5. Найти в поиске специальный ролик (переозвучили вступительную речь Гэбриэла из swordfish), где он дает задание подключиться к WiFi и взломать сайт пентагона (была идея вставить процесс интервью из этого же фильма, но по морально-этическим соображениям пришлось отказаться).

6. Когда они подключались и открывали сайт (очевидно пришлось поднять BIND и закрыть доступ к остальному интернету) начинал тикать таймер и показывалась фотка QR кода, который они видели на 4 этапе (тут две из трех команд сделали шорткат, считав этот код еще на обеде). Остальных ждал неприятный сюрприз - они не дожны были успеть ввести код и в браузере вешался куки и их перенаправляло на страницу Game Over. Сам Пентагон я наклепал на CherryPy джаст фо фан (может быть как-нибудь выложу сырцы всего этого безобразия).


Студенты

Больше всего опасался что никто не сделает первое задание, которое ушло домой, но, опять приятная неожиданность, смогли сделать почти все. В каждой команде были ноутбуки и не пришлось париться с правильным разделением команд. Второе необходимое условие для победы - наличие в команде линуксоида смогла обеспечить только одна команда, которая в итоге и одержала победу. Остальным пришлось ждать подсказок для перехода на следующие этапы. Больше всего опечалило то, что на четвертом курсе у студентов отсутствуют навыки быстрого решения простых задач на каких-нибудь скриптовых языках - когда дело дошло до написания кода все начали открывать Delphi и RAD Studio (о боже), Visual Studio (ну хоть что-то), накидывать на форму компоненты и батоны. После 20 минут набирания кода, пришлось им намекнуть: ребята, не укладываетесь по времени, не дублируйте работу, пока один пишет код, откройте гугл и решите задачу в лоб, на это уйдет 5 минут.

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

P.S. сам доклад, кому интересно.

2014-05-10

Programming Groovy 2

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

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

Отметил для себя развитие языка на нескольких примерах (GORM и SwingBuilder): в сторонней библиотеке красиво написали какую-то функциональность, это вносится в стандартную библиотеку груви, исходная библиотека переписывается на стандартный код. Описание простых примитивов на которых строятся сложные конструкции языка, эффективно уничтожает магию (хотя этих примитивов и больше чем в питоне, сказывается необходимость делать синтаксис совместимым с джавой). В отличие от PEP20 нет философии There should be one - and preferably only one - obvious way to do it. Для многих вещей есть сильно не один вариант реализации. Итог, книгу стоили прочитать раньше, поскольку многие крутые вещи типа замыканий, приходили долгим путем проб и ошибок, а в груви это настолько естественно и повсеместно что я был поражен. Хотя понял бы я их и как бы я их воспринял если бы начал читать раньше - большой вопрос. Одни изобретают деревянные велосипеды, а другие просто пришли в магазин и уехали на транспортном средстве из натотехнологий и современных материалов.

Итог: книга годная, джавистам, стоит бросить все и начать читать - гарантированно расширит сознание.

2014-05-05

Angular.js


Продолжаю изучать стек технологий на будущей работе. Обе книги оказались тоненьким брошюрками. Начал со стартера, закончил DI. После jQuery двусторонний биндинг кажется очень необычным подходом к пользовательскому интерфейсу. Да и вообще разделяя View в большом приложении на собственный MVC, нужно вовремя остановиться. Да и вообще, возвращаться в мир js после vaadin, как учиться заново ходить.

Сам фреймворк содержит роуты, через #!, должно быть поиск-френдли, но так и хочется при первом обращении отдавать отрендереную страницу, а тут и до node.js недалеко (жаль видео еще не выложили).

Про то что инъектить зависимости в JS я даже и не думал. Кстати с этим связана некоторая магия: javascript не умеет получать имена параметров у функциии. StackOverflowwith the blood of demons and spawn of satan, apparently. Regex?! Would be cool if there was a built in way in JS, wouldn't it.

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

2014-05-03

The definitive guide to Grails 2

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

Сама книга - годный такой справочник проводящий по основным элементам стека: MVC, GORM. В самом grails ничего особо нового по сравнению с тем же django, хотя позади чувствуется огромная махина Spring и абстракции поверх абстракций. Плагины вынесены в самый конец, хотя стоило начать именно с них - полезно за понимания базовых элементов grails.

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

Грельсовцы совершили классическую ошибку, расположив совместно используемые сущности далеко: вместо
package/
    view
    controller
они сделали:
controller/
    package
view/
    package
мы тоже совершили такую ошибку, но осознали и начали потихоньку переносить.

Удивился, что система сборки gant, а не gradle. Как и в django, через метаклассы расширяются доменные объекты и динамические метода проходят через methodMissing, позволяя генерировать разухабистое DAO. После статического мира джавы, несколько неуютно.

Итог: магии почти нет, стек понятный, хотя и очень толстый.