Здравствуй, %username%!
Известное выражение «Кадры решают всё» в ИТ-компаниях актуально, как ни в какой другой отрасли. На тему подбора персонала написано много, а мы хотели бы сосредоточиться на таком явлении, как вузовский «День карьеры». Недавно нам довелось поучаствовать в подобном мероприятии на факультете ВМК МГУ. В этом посте мы хотим поделиться некоторыми впечатлениями от увиденного.
Как известно, заполучить грамотного профессионала работодателю можно, пойдя по двум направлениям:
Оба пути имеют свои достоинства и недостатки. Большинство компаний (и мы в их числе) в своей работе сочетают указанные подходы. И если с поиском подготовленного профессионала всё более-менее понятно, то где брать молодого да раннего, способного за приемлемое время дорасти до нужного уровня?
В этом плане определённые преимущества есть у компаний, имеющих налаженные связи с вузами. Эксперт, читающий спецкурс или руководящий дипломным проектированием, безусловно найдёт контакт и наладит общение с подающим надежды студентом. Но этот вариант ни разу не массовый и развёрнут во времени на долгие месяцы.
Чтобы расширить потенциальную «зону контакта» между будущими работниками и потенциальными работодателями, придуманы «дни карьеры» — такие специальные мероприятия, на которых обе стороны процесса могут быстро понять кто чего стоит и завязать отношения, которые при должном внимании и ответственности могут стать долгими и счастливыми.
В общем, если «дни карьеры» существуют, то не грех ими воспользоваться. Мы решили поработать на факультете ВМК МГУ, а при положительном опыте – распространить его и на другие учебные заведения.
Работодателю стать участником Дня карьеры несложно. Эти мероприятия заранее анонсируются, их организовывают специально назначенные люди — в нашем случае это были специалисты Центра трудоустройства ВМК. После коротких переговоров мы оказались в составе компаний-участников Дня карьеры-2014 (всего таких компаний оказалось шестнадцать).
Времени на подготовку обычно много не бывает. Здесь очень хорошим подспорьем является опыт участия в выставках, форумах, конференциях и других подобных публичных мероприятиях. Точка присутствия компании на Дне карьеры – это стенд с её представителями, рекламными материалами и оборудованием. Только рекламируются на стенде не продукты и услуги, а сама организация как работодатель. Ну и конечно стенд – это то место, где можно присмотреться к потенциальному контингенту начинающих специалистов.
«Открывать Америку» в вопросах подготовки стенда не собираемся. Разве что специфика материалов должна быть соответствующей – идя на День карьеры, работодатель должен запастись как минимум описаниями вакансий и стажировок, которые он может предложить интересующимся. Некоторые наши коллеги выдавали для заполнения желающим бланки анкет – тоже грамотное решение. Всякие сопутствующие плюшки типа небольших корпоративных сувениров, конфет и печенек конечно же приветствуются благодарным студенческим сообществом.
Большим плюсом будет присутствие на стенде симпатичной доброжелательной девушки. Кроме шуток, многим застенчивым студенткам (на ВМК есть и такие!) комфортнее начать общение именно с дамой, нежели с присутствующим здесь же мужественным небритым ИТ-бруталом.
Конечно, надо заранее подготовиться к ответам на вопросы «Чем занимается компания», «Каковы условия работы», а также «Какого цвета стулья в офисе» (ага, ровно такие вопросы советуют задавать здесь.
В принципе, работа представителей компании на Дне карьеры складывается из очевидных вещей – общение, ответы на вопросы, обмен контактами etc. Так что позвольте сюда больше не углубляться, а сказать пару слов о фишках.
Чтобы эти обоюдные смотрины были (а) более продуктивными и (б) более интересными — мы на описываемом мероприятии решили устроить небольшие технические конкурсы для посетителей Дня карьеры. Для компании – простейший фильтр, отбирающий активных и сообразительных, для посетителей – возможность себя показать, мозги размять да приз (sic!) получить.
Конкурсные задания мы придумали из трёх различных областей, представляющих интерес для нас как для работодателя. Первое задание было посвящено работе с соцсетями, второе — безопасности беспроводных ЛВС, а третье – восстановлению информации на носителе. Уровень сложности при составлении заданий для себя определили как в целом невысокий, т.к. всё происходит параллельно учебному процессу и достаточным временем для соревнований мало кто располагает.
По просьбам посетителей стенда публикуем информацию по конкурсам.
Сразу скажем, что, несмотря на наши ожидания, это задание не стало хитом. Возможно, студенты посчитали сложной самую первую задачу из предложенного перечня, а может причина в чём-то ещё. Конкурс предполагал ряд задач на построение и анализ социального графа (у этой штуки масса применений в маркетинге). Граф собирались формировать на основе данных, которые о себе предоставили пользователи одной из популярных социальных сетей.
Итак, стартовой задачей конкурса «ВМК в ВК» был сбор исходных данных для социального графа. Звучала она так:
Напишите или найдите приложение, которое позволит вам получить из социальной сети «Вконтакте» список студентов ВМК МГУ вашего года выпуска, сведения из их профилей (как минимум — имя, фамилию и пол) и их связи между собой.
Поскольку для сбора данных из «Вконтакте» можно использовать API, предполагалось, что участники пойдут по следующему пути. Сначала — регистрируем Standalone приложение по ссылке. После создания приложения откроется страница с информацией о нём, в URL страницы указан ID приложения, его также можно найти на вкладке «Настройки». Для авторизации приложения и получения токена нужно открыть страницу, подставив вместо
адресная строка будет иметь вид
Значение
Авторизация нужна для использования метода
Для работы с API можно использовать Ruby-библиотеку VK-ruby. Приведённый ниже простенький скрипт предназначен для получения информации о пользователях, указавших ВМК МГУ в качестве факультета обучения, и их друзьях (что-то подобное мы ожидали увидеть у участников). Собираются данные для пользователей, указавших 2012-2021 год выпуска.
Данные сохраняются в JSON формате, имеющем следующий вид
Для дальнейшего использования средств графового анализа (а это почти все оставшиеся задачи конкурса «ВМК в ВК») необходимо преобразовать собранные данные в другой формат. Приведённый ниже код позволяет получить список рёбер графа друзей пользователей для каждого из указанных годов выпуска.
Каждая строчка полученных CSV файлов будет иметь следующий формат
Данные такого формата могут быть загружены в большинстве средств графового анализа.
(В принципе, мы провели работу по получению этих данных заранее и были готовы поделиться ими на стенде. Подсказки анонсировались, но очередь за ними не стояла – вот тебе и интерес к социальным сетям со стороны современной молодёжи)
Задача №2 предполагала выполнение минимального анализа полученных данных: гендерный состав, пользователи с наибольшим числом друзей, среднее число друзей у пользователя. Ожидалось, что задача будет решаться с помощью простеньких скриптов. Подходов к их написанию много, не будем заострять на этом внимание. Цимес задачи (и дополнительные баллы) — в другом. Где же тот аналитик, который подошёл бы к нам и сказал: «Да здесь же немеряно ботов и каких-то левых личностей?» Этот вывод в общем-то прост, достаточно повнимательнее посмотреть на собранные сведения, а точнее – на перечни «друзей».
Как видно из названия, задача №3 — «Урок рисования» — состояла в визуализации нажитого непосильным трудом при решении первой задачи. «Наверное, все будут использовать Gephi, проблем быть не должно» — подумали мы. Но не срослось. Изображения социального графа ВМК в ВК от наших конкурсантов мы так и не дождались. Кстати, в качестве примера для участников демонстрировались социальные графы действующих курсов факультета, отрисованные в i2 Analyst’s Notebook (в отличие от бесплатного Gephi это коммерческий продукт от IBM).
А вообще при желании можно было найти и другие инструменты для визуализации социального графа.
Наконец, заключительная задача №4 этого конкурса была наиболее «математической»: диаметр максимальной компоненты связности графа, плотность графа, метрики центральности вершин, центральность по собственному вектору, центральность по «промежуточности»… Всё тот же Gephi в помощь, а точнее – его встроенные инструменты для анализа социального графа.
Вывод по первому конкурсу такой: несмотря на ожидаемую личную заинтересованность («да это же про нас!») и общий интерес к теме соцсетей — задания «не пошли». То ли времени погуглить и немного покодить было маловато, то ли задание показалось излишне академичным. А может интерес перебили другие конкурсы – там-то предлагалось аж негодяев-террористов отлавливать да головоломки на флэшке решать!
Как следует из задания, собака зарыта в беспроводной сети. Эту сеть мы развернули на период проведения Дня карьеры в вестибюле факультета. По сети гоняли (по протоколу HTTP) с одного ноутбука на другой рисунки в формате GIF. Картинки являли собой QR-коды, в которых скрывались координаты «объектов интереса» в Москве и Санкт-Петербурге (например, Дом Правительства РФ, аэропорт Шереметьево, МИД, Лужники, ВВЦ, крейсер «Аврора» и так далее, заканчивая Московским зоопарком). За повторение передачи серии из 20 рисунков с периодичностью раз в 30 секунд отвечал небольшой скрипт.
Дальнейшее кул-хацкерам и ветеранам вардрайвинга может быть не очень увлекательно, а для тех, кто «угадал все буквы, но не смог назвать слово» — небольшой комментарий.
Включив WiFi-адаптер на ноутбуке и попробовав «послушать эфир», конкурсанты, взявшиеся за это задание, легко обнаруживали незащищённую WiFi-сеть с названием vulkan. Для перехвата открытого трафика в WiFi-сети предполагалось использование конкурсантами инструментария типа Wireshark, tcpdump и тэдэ. Рассказывать о том, как пользоваться этим ПО, здесь пожалуй не совсем уместно, проще посмотреть сюда и сюда.
После перехвата трафика в нём можно было обнаружить рисунки следующего вида:
Дальнейшим логичным шагом является распознавание полученных QR-кодов и получение информации о географических координатах (широта и долгота) объектов. На финальном этапе – вводим координаты в поисковик или в гео-сервис, получаем точку на карте и…
Алекс не зря надеялся на Юстаса. Поздравляем победителей! Кстати, зоопарк кажется никто так и не спас.
Этот конкурс оказался едва ли не самым популярным. Возможно потому, что в придачу к листовке с заданием конкурсанту вручалась флэшка. Да и задание умещалось в одно предложение: в недрах флэшки «заботливо» спрятаны файлы: изображение, текст и архив – найдите их! Но за кажущейся простотой скрывался реальный взрыв мозга. Почему?
При подготовке конкурса надо было придумать, как прятать информацию. Высказывались разные идеи: сделать «потерянный» раздел на носителе и сохранить в него информацию, сделать стеганоконтейнер из картинки… Необходимым условием было совмещение «открытой» информации (нашей рекламы, да) и «спрятанной». Мы остановились на идее, когда информация записывается за пределами раздела. Для упрощения поиска информации носитель должен быть изначально проинициализирован нулями. Мы решили записать часть информации перед разделом, а часть после. Касательно подходов к восстановлению – определили три уровня сложности: восстановление в автоматическом режиме (при помощи утилит восстановления данных), вручную (hex-редакторы дисков) и на десерт — простенькая стеганография.
Объектом первого уровня сложности стал jpeg-файл. Его «положили» в 1024 сектор от окончания партиции в виде непрерывного блока. В конце концов, на фоне нулей он должен был быть заметен.
Объектом для ручного восстановления стал текст (позаимствовали некоторые перлы на bash.im). Причём текст — фрагментированный. В конце каждого фрагмента мы записали номер сектора, в котором находится следующий фрагмент. Чтобы задание не показалось слишком простым, для основного текста использовали Unicode, а указатель на следующий сектор представили в виде десятичного номера в ASCII. В качестве стартового сектора для цепочки взяли сектор №1024. Тут нужно сказать, что раздел у нас начинался с сектора №2048. Мы разместили фрагменты в следующей цепочке: 1024=> 964=> 475=> 235=> 1800=> 1720=> 823=> 615=> 1100=> 1920=> 345=> 1418=> 1634=> 1980=> 1320. В первом фрагменте оказался текст «Vulkan — задание.», а в конце –информация о том, что «Вот Вы и дошли до конца задания…»
Объект третьего уровня сложности — архив rar, дописанный в конец jpeg-файла. Как известно, архиватор rar ищет свою начальную сигнатуру по всему файлу, что позволяет сохранить rar-архив в конце произвольного файла, например jpeg. При автоматическом восстановлении jpeg размер файла будет определён по заголовку, а остальное будет отсечено, и только любознательные смогут определить наличие архива. В архив мы положили документ «Vulkan.docx» с цитатой из уважаемого всеми айтишниками А.С. Пушкина. В последний момент мы решили запаролить архив словом «Vulkan» (фраза «Вулкан — «ключ» ко всему» как намёк на пароль к архиву и начальный фрагмент была размещена на листовке с заданием).
Мы предполагали, что участники конкурса сначала восстановят картинку, потом текст, а там и до архива рукой подать. Но понимая, что в условиях ограниченности времени что-то могло «пойти не так» — подготовили несколько подсказок.
Поиск сигнатуры rar-архива должен был привести участников к концу jpeg-файла. Окончание архива можно было определить по последовательности нулей, записанных в конце. Выделив архив, участники должны были столкнуться с необходимостью указать правильный пароль (девятая подсказка в помощь).
В общем да, организаторы явно намудрили)
В конкурсе решило участвовать несколько десятков человек. Попробовав сходу найти информацию самостоятельно, студенты стали организовывать команды из двух-трёх человек. Кто-то пошёл с заданием на лекцию, а потом пожаловался, что на занятии запретили «играться» на ноутбуках. Дефицит времени был на лицо…
Какие результаты? Объект первого уровня сложности нашли два одиночных участника и три творческих дуэта. Объект второго уровня не дался никому. И наконец одна команда была близка к нахождению третьего объекта за 10 минут до подведения итогов, однако у ребят возникла проблема с определением конца файла.
Тем не менее награды нашли своих героев — участников, добившихся наилучших результатов – как в этом, так и в двух других конкурсах.
Закончилось всёбаней и шашлыком мини-лекцией о низкоуровневой работе с машинными носителями.
Считаем, что мероприятие удалось. Атмосфера — душевная, интерес – неподдельный. Итоги станут понятны позднее, но уже можно сказать, что при должной подготовке подобные встречи могут быть очень продуктивными. Дни карьеры привлекают буквально всех – от первокурсников до дипломников. Нам даже довелось пообщаться с выпускником позапрошлого года, который решил поискать для себя что-то новое на Дне карьеры родного факультета.
Честно говоря, в это мероприятие мы постарались вложить частичку нашей айтишной души. Надеемся, что все остались довольны и пользу от произошедшего получили немалую.
Известное выражение «Кадры решают всё» в ИТ-компаниях актуально, как ни в какой другой отрасли. На тему подбора персонала написано много, а мы хотели бы сосредоточиться на таком явлении, как вузовский «День карьеры». Недавно нам довелось поучаствовать в подобном мероприятии на факультете ВМК МГУ. В этом посте мы хотим поделиться некоторыми впечатлениями от увиденного.
Содержание
Часть первая, организационная
Как известно, заполучить грамотного профессионала работодателю можно, пойдя по двум направлениям:
- найти на рынке готового специалиста;
- самостоятельно «вырастить» сотрудника с требуемыми компетенциями.
Оба пути имеют свои достоинства и недостатки. Большинство компаний (и мы в их числе) в своей работе сочетают указанные подходы. И если с поиском подготовленного профессионала всё более-менее понятно, то где брать молодого да раннего, способного за приемлемое время дорасти до нужного уровня?
В этом плане определённые преимущества есть у компаний, имеющих налаженные связи с вузами. Эксперт, читающий спецкурс или руководящий дипломным проектированием, безусловно найдёт контакт и наладит общение с подающим надежды студентом. Но этот вариант ни разу не массовый и развёрнут во времени на долгие месяцы.
Чтобы расширить потенциальную «зону контакта» между будущими работниками и потенциальными работодателями, придуманы «дни карьеры» — такие специальные мероприятия, на которых обе стороны процесса могут быстро понять кто чего стоит и завязать отношения, которые при должном внимании и ответственности могут стать долгими и счастливыми.
В общем, если «дни карьеры» существуют, то не грех ими воспользоваться. Мы решили поработать на факультете ВМК МГУ, а при положительном опыте – распространить его и на другие учебные заведения.
Работодателю стать участником Дня карьеры несложно. Эти мероприятия заранее анонсируются, их организовывают специально назначенные люди — в нашем случае это были специалисты Центра трудоустройства ВМК. После коротких переговоров мы оказались в составе компаний-участников Дня карьеры-2014 (всего таких компаний оказалось шестнадцать).
Времени на подготовку обычно много не бывает. Здесь очень хорошим подспорьем является опыт участия в выставках, форумах, конференциях и других подобных публичных мероприятиях. Точка присутствия компании на Дне карьеры – это стенд с её представителями, рекламными материалами и оборудованием. Только рекламируются на стенде не продукты и услуги, а сама организация как работодатель. Ну и конечно стенд – это то место, где можно присмотреться к потенциальному контингенту начинающих специалистов.
«Открывать Америку» в вопросах подготовки стенда не собираемся. Разве что специфика материалов должна быть соответствующей – идя на День карьеры, работодатель должен запастись как минимум описаниями вакансий и стажировок, которые он может предложить интересующимся. Некоторые наши коллеги выдавали для заполнения желающим бланки анкет – тоже грамотное решение. Всякие сопутствующие плюшки типа небольших корпоративных сувениров, конфет и печенек конечно же приветствуются благодарным студенческим сообществом.
Большим плюсом будет присутствие на стенде симпатичной доброжелательной девушки. Кроме шуток, многим застенчивым студенткам (на ВМК есть и такие!) комфортнее начать общение именно с дамой, нежели с присутствующим здесь же мужественным небритым ИТ-бруталом.
Конечно, надо заранее подготовиться к ответам на вопросы «Чем занимается компания», «Каковы условия работы», а также «Какого цвета стулья в офисе» (ага, ровно такие вопросы советуют задавать здесь.
В принципе, работа представителей компании на Дне карьеры складывается из очевидных вещей – общение, ответы на вопросы, обмен контактами etc. Так что позвольте сюда больше не углубляться, а сказать пару слов о фишках.
Часть вторая, практическая
Чтобы эти обоюдные смотрины были (а) более продуктивными и (б) более интересными — мы на описываемом мероприятии решили устроить небольшие технические конкурсы для посетителей Дня карьеры. Для компании – простейший фильтр, отбирающий активных и сообразительных, для посетителей – возможность себя показать, мозги размять да приз (sic!) получить.
Конкурсные задания мы придумали из трёх различных областей, представляющих интерес для нас как для работодателя. Первое задание было посвящено работе с соцсетями, второе — безопасности беспроводных ЛВС, а третье – восстановлению информации на носителе. Уровень сложности при составлении заданий для себя определили как в целом невысокий, т.к. всё происходит параллельно учебному процессу и достаточным временем для соревнований мало кто располагает.
По просьбам посетителей стенда публикуем информацию по конкурсам.
Конкурс первый. «ВМК в ВК»
Сразу скажем, что, несмотря на наши ожидания, это задание не стало хитом. Возможно, студенты посчитали сложной самую первую задачу из предложенного перечня, а может причина в чём-то ещё. Конкурс предполагал ряд задач на построение и анализ социального графа (у этой штуки масса применений в маркетинге). Граф собирались формировать на основе данных, которые о себе предоставили пользователи одной из популярных социальных сетей.
Итак, стартовой задачей конкурса «ВМК в ВК» был сбор исходных данных для социального графа. Звучала она так:
Напишите или найдите приложение, которое позволит вам получить из социальной сети «Вконтакте» список студентов ВМК МГУ вашего года выпуска, сведения из их профилей (как минимум — имя, фамилию и пол) и их связи между собой.
Поскольку для сбора данных из «Вконтакте» можно использовать API, предполагалось, что участники пойдут по следующему пути. Сначала — регистрируем Standalone приложение по ссылке. После создания приложения откроется страница с информацией о нём, в URL страницы указан ID приложения, его также можно найти на вкладке «Настройки». Для авторизации приложения и получения токена нужно открыть страницу, подставив вместо
%ID%
полученный ID приложенияoauth.vk.com/oauth/authorize?client_id=%ID%&response_type=token&_hash=0
адресная строка будет иметь вид
oauth.vk.com/blank.html#access_token=%TOKEN%&expires_in=86400&user_id=%UID%
Значение
%TOKEN%
необходимо сохранить для дальнейшего использования.Авторизация нужна для использования метода
users.search
для поиска заданных пользователей. Списки друзей пользователей можно получать без авторизации по ссылке api.vk.com/method/friends.get?user_id=%UID%
в JSON.Для работы с API можно использовать Ruby-библиотеку VK-ruby. Приведённый ниже простенький скрипт предназначен для получения информации о пользователях, указавших ВМК МГУ в качестве факультета обучения, и их друзьях (что-то подобное мы ожидали увидеть у участников). Собираются данные для пользователей, указавших 2012-2021 год выпуска.
Скрипт для получения данных
require 'open-uri'
require 'vk-ruby'
require 'json'
token = "%TOKEN%"
(2012..2021).each do |year|
app = VK::Application.new access_token: "#{token}"
users = []
offset = 0
begin
us = app.users.search(university: 2, university_faculty: 23, university_year: year, count: 1000, fields: 'sex', offset: offset)
users += us[1..-1]
offset += 1000
end while us.length > 1
cmc_uids = Set.new users.map{|u| u['uid']}
users.map! do |u|
uid = u['uid']
page = open("https://api.vk.com/method/friends.get?user_id=#{uid}").read
friends_ids = Set.new JSON.parse(page)['response']
u['friends'] = friends_ids.to_a
cmc_friends = friends_ids.intersection cmc_uids
u['cmc_friends'] = cmc_friends.to_a
u
end
File.open('cmc_' + year.to_s + '.json', 'w') { |file| file.write(users.to_json.gsub(/,\{/, ",\n{")) }
end
Данные сохраняются в JSON формате, имеющем следующий вид
[{"uid":%UID%,
"first_name":"%ИМЯ_ПОЛЬЗОВАТЕЛЯ%",
"last_name":"%ФАМИЛИЯ_ПОЛЬЗОВАТЕЛЯ%",
"sex":%ПОЛ%,
"friends":[%ID_ДРУЗЕЙ%],
"cmc_friends":[%ID_ДРУЗЕЙ_С_ВМК_ТОГО_ЖЕ_ГОДА_ВЫПУСКА%]},...]
Для дальнейшего использования средств графового анализа (а это почти все оставшиеся задачи конкурса «ВМК в ВК») необходимо преобразовать собранные данные в другой формат. Приведённый ниже код позволяет получить список рёбер графа друзей пользователей для каждого из указанных годов выпуска.
Скрипт для преобразования в csv
require 'json'
require 'csv'
(2012..2021).each do |year|
users = JSON.parse File.read('cmc_' + year.to_s + '.json')
names_hash = Hash[users.map{|u| [u['uid'], "#{u['last_name']} #{u['first_name']}"]}]
sex_hash = Hash[users.map{|u| [u['uid'], u['sex']]}]
res = users.map do |u|
u['cmc_friends'].map do |id2|
["#{u['last_name']} #{u['first_name']}", u['sex'], u['uid'], id2]
end
end.flatten(1)
CSV.open("#{year}.csv", 'w'){|csv| res.each{|u| csv << u}}
end
Каждая строчка полученных CSV файлов будет иметь следующий формат
%ИМЯ_ПОЛЬЗОВАТЕЛЯ%,%ПОЛ%,%ID_ПОЛЬЗОВАТЕЛЯ%,%ID_ДРУГА%
Данные такого формата могут быть загружены в большинстве средств графового анализа.
(В принципе, мы провели работу по получению этих данных заранее и были готовы поделиться ими на стенде. Подсказки анонсировались, но очередь за ними не стояла – вот тебе и интерес к социальным сетям со стороны современной молодёжи)
Задача №2 предполагала выполнение минимального анализа полученных данных: гендерный состав, пользователи с наибольшим числом друзей, среднее число друзей у пользователя. Ожидалось, что задача будет решаться с помощью простеньких скриптов. Подходов к их написанию много, не будем заострять на этом внимание. Цимес задачи (и дополнительные баллы) — в другом. Где же тот аналитик, который подошёл бы к нам и сказал: «Да здесь же немеряно ботов и каких-то левых личностей?» Этот вывод в общем-то прост, достаточно повнимательнее посмотреть на собранные сведения, а точнее – на перечни «друзей».
Как видно из названия, задача №3 — «Урок рисования» — состояла в визуализации нажитого непосильным трудом при решении первой задачи. «Наверное, все будут использовать Gephi, проблем быть не должно» — подумали мы. Но не срослось. Изображения социального графа ВМК в ВК от наших конкурсантов мы так и не дождались. Кстати, в качестве примера для участников демонстрировались социальные графы действующих курсов факультета, отрисованные в i2 Analyst’s Notebook (в отличие от бесплатного Gephi это коммерческий продукт от IBM).
А вообще при желании можно было найти и другие инструменты для визуализации социального графа.
Наконец, заключительная задача №4 этого конкурса была наиболее «математической»: диаметр максимальной компоненты связности графа, плотность графа, метрики центральности вершин, центральность по собственному вектору, центральность по «промежуточности»… Всё тот же Gephi в помощь, а точнее – его встроенные инструменты для анализа социального графа.
Вывод по первому конкурсу такой: несмотря на ожидаемую личную заинтересованность («да это же про нас!») и общий интерес к теме соцсетей — задания «не пошли». То ли времени погуглить и немного покодить было маловато, то ли задание показалось излишне академичным. А может интерес перебили другие конкурсы – там-то предлагалось аж негодяев-террористов отлавливать да головоломки на флэшке решать!
Конкурс второй. «Алекс-Юстасу»
Как следует из задания, собака зарыта в беспроводной сети. Эту сеть мы развернули на период проведения Дня карьеры в вестибюле факультета. По сети гоняли (по протоколу HTTP) с одного ноутбука на другой рисунки в формате GIF. Картинки являли собой QR-коды, в которых скрывались координаты «объектов интереса» в Москве и Санкт-Петербурге (например, Дом Правительства РФ, аэропорт Шереметьево, МИД, Лужники, ВВЦ, крейсер «Аврора» и так далее, заканчивая Московским зоопарком). За повторение передачи серии из 20 рисунков с периодичностью раз в 30 секунд отвечал небольшой скрипт.
Дальнейшее кул-хацкерам и ветеранам вардрайвинга может быть не очень увлекательно, а для тех, кто «угадал все буквы, но не смог назвать слово» — небольшой комментарий.
Включив WiFi-адаптер на ноутбуке и попробовав «послушать эфир», конкурсанты, взявшиеся за это задание, легко обнаруживали незащищённую WiFi-сеть с названием vulkan. Для перехвата открытого трафика в WiFi-сети предполагалось использование конкурсантами инструментария типа Wireshark, tcpdump и тэдэ. Рассказывать о том, как пользоваться этим ПО, здесь пожалуй не совсем уместно, проще посмотреть сюда и сюда.
После перехвата трафика в нём можно было обнаружить рисунки следующего вида:
Дальнейшим логичным шагом является распознавание полученных QR-кодов и получение информации о географических координатах (широта и долгота) объектов. На финальном этапе – вводим координаты в поисковик или в гео-сервис, получаем точку на карте и…
Алекс не зря надеялся на Юстаса. Поздравляем победителей! Кстати, зоопарк кажется никто так и не спас.
Конкурс третий. «Прятки на флэшке»
Этот конкурс оказался едва ли не самым популярным. Возможно потому, что в придачу к листовке с заданием конкурсанту вручалась флэшка. Да и задание умещалось в одно предложение: в недрах флэшки «заботливо» спрятаны файлы: изображение, текст и архив – найдите их! Но за кажущейся простотой скрывался реальный взрыв мозга. Почему?
При подготовке конкурса надо было придумать, как прятать информацию. Высказывались разные идеи: сделать «потерянный» раздел на носителе и сохранить в него информацию, сделать стеганоконтейнер из картинки… Необходимым условием было совмещение «открытой» информации (нашей рекламы, да) и «спрятанной». Мы остановились на идее, когда информация записывается за пределами раздела. Для упрощения поиска информации носитель должен быть изначально проинициализирован нулями. Мы решили записать часть информации перед разделом, а часть после. Касательно подходов к восстановлению – определили три уровня сложности: восстановление в автоматическом режиме (при помощи утилит восстановления данных), вручную (hex-редакторы дисков) и на десерт — простенькая стеганография.
Объектом первого уровня сложности стал jpeg-файл. Его «положили» в 1024 сектор от окончания партиции в виде непрерывного блока. В конце концов, на фоне нулей он должен был быть заметен.
Объектом для ручного восстановления стал текст (позаимствовали некоторые перлы на bash.im). Причём текст — фрагментированный. В конце каждого фрагмента мы записали номер сектора, в котором находится следующий фрагмент. Чтобы задание не показалось слишком простым, для основного текста использовали Unicode, а указатель на следующий сектор представили в виде десятичного номера в ASCII. В качестве стартового сектора для цепочки взяли сектор №1024. Тут нужно сказать, что раздел у нас начинался с сектора №2048. Мы разместили фрагменты в следующей цепочке: 1024=> 964=> 475=> 235=> 1800=> 1720=> 823=> 615=> 1100=> 1920=> 345=> 1418=> 1634=> 1980=> 1320. В первом фрагменте оказался текст «Vulkan — задание.», а в конце –информация о том, что «Вот Вы и дошли до конца задания…»
Объект третьего уровня сложности — архив rar, дописанный в конец jpeg-файла. Как известно, архиватор rar ищет свою начальную сигнатуру по всему файлу, что позволяет сохранить rar-архив в конце произвольного файла, например jpeg. При автоматическом восстановлении jpeg размер файла будет определён по заголовку, а остальное будет отсечено, и только любознательные смогут определить наличие архива. В архив мы положили документ «Vulkan.docx» с цитатой из уважаемого всеми айтишниками А.С. Пушкина. В последний момент мы решили запаролить архив словом «Vulkan» (фраза «Вулкан — «ключ» ко всему» как намёк на пароль к архиву и начальный фрагмент была размещена на листовке с заданием).
Мы предполагали, что участники конкурса сначала восстановят картинку, потом текст, а там и до архива рукой подать. Но понимая, что в условиях ограниченности времени что-то могло «пойти не так» — подготовили несколько подсказок.
Подсказки
Первая подсказка указывала на возможность восстановления автоматическими утилитами (с указанием соответствующих программ). Как говорится, бери и пользуйся!
Вторая подсказка указывала на необходимость анализа носителя при помощи дисковых hex-редакторов (некоторые из них были перечислены в качестве примера).
Третья подсказка говорила, что в начале диска находится MBR, в котором указываются свободные и занятые сектора. Мы надеялись, что участники обратят внимание на интервал с 1 по 2047 сектор, в котором «вдруг» оказались данные.
Четвёртая подсказка говорила о том, что текстовый документ может представлять собой последовательность символов в какой-нибудь кодировке.
Пятая подсказка говорила о том, что символы можно представить как в UNICODE, так и в ASCII. Переключение между видами отображения кодировок в HEX-редакторе должно было помочь увидеть текст и цифры в конце. Для привлечения внимания использовался символ «=».
Шестая подсказка говорила о том, что в любой файловой системе задаётся последовательность, в которой считывают сектора, и ещё раз было напоминание про пятую подсказку и необходимость поиска начального фрагмента.
Просмотр hex-редакторами открытого раздела (подсказка №2) должен был показать участникам отсутствие дополнительной информации в открытом разделе и подтолкнуть к поиску за пределами раздела (подсказка №3). Начало раздела с 2048 сектора должно было обратить внимание на участок с 1 по 2047 сектор. Конечно, кто-то мог случайно натолкнуться на блок данных, но таких случайностей мы не ждали. Так как носитель был «явно обнулён», то нужно было сравнить этот участок с нулевой областью. Тогда участник сразу увидит сектора с данными. Для упрощения интерпретации данных были сделаны подсказки 4 и 5. Подсказка 6 помогала в конце UNICODE-части перейти на ASCII.
Седьмая подсказка указывала различные типы файлов и их сигнатуры. Среди них указывалась сигнатура rar-архива.
Восьмая подсказка указывала на начальные сектора текстового файла и jpeg-файла.
Девятая подсказка – повтор «намёка» из листовки-задания: «Vulkan – «ключ» ко всему!»
Вторая подсказка указывала на необходимость анализа носителя при помощи дисковых hex-редакторов (некоторые из них были перечислены в качестве примера).
Третья подсказка говорила, что в начале диска находится MBR, в котором указываются свободные и занятые сектора. Мы надеялись, что участники обратят внимание на интервал с 1 по 2047 сектор, в котором «вдруг» оказались данные.
Четвёртая подсказка говорила о том, что текстовый документ может представлять собой последовательность символов в какой-нибудь кодировке.
Пятая подсказка говорила о том, что символы можно представить как в UNICODE, так и в ASCII. Переключение между видами отображения кодировок в HEX-редакторе должно было помочь увидеть текст и цифры в конце. Для привлечения внимания использовался символ «=».
Шестая подсказка говорила о том, что в любой файловой системе задаётся последовательность, в которой считывают сектора, и ещё раз было напоминание про пятую подсказку и необходимость поиска начального фрагмента.
Просмотр hex-редакторами открытого раздела (подсказка №2) должен был показать участникам отсутствие дополнительной информации в открытом разделе и подтолкнуть к поиску за пределами раздела (подсказка №3). Начало раздела с 2048 сектора должно было обратить внимание на участок с 1 по 2047 сектор. Конечно, кто-то мог случайно натолкнуться на блок данных, но таких случайностей мы не ждали. Так как носитель был «явно обнулён», то нужно было сравнить этот участок с нулевой областью. Тогда участник сразу увидит сектора с данными. Для упрощения интерпретации данных были сделаны подсказки 4 и 5. Подсказка 6 помогала в конце UNICODE-части перейти на ASCII.
Седьмая подсказка указывала различные типы файлов и их сигнатуры. Среди них указывалась сигнатура rar-архива.
Восьмая подсказка указывала на начальные сектора текстового файла и jpeg-файла.
Девятая подсказка – повтор «намёка» из листовки-задания: «Vulkan – «ключ» ко всему!»
Поиск сигнатуры rar-архива должен был привести участников к концу jpeg-файла. Окончание архива можно было определить по последовательности нулей, записанных в конце. Выделив архив, участники должны были столкнуться с необходимостью указать правильный пароль (девятая подсказка в помощь).
В общем да, организаторы явно намудрили)
В конкурсе решило участвовать несколько десятков человек. Попробовав сходу найти информацию самостоятельно, студенты стали организовывать команды из двух-трёх человек. Кто-то пошёл с заданием на лекцию, а потом пожаловался, что на занятии запретили «играться» на ноутбуках. Дефицит времени был на лицо…
Какие результаты? Объект первого уровня сложности нашли два одиночных участника и три творческих дуэта. Объект второго уровня не дался никому. И наконец одна команда была близка к нахождению третьего объекта за 10 минут до подведения итогов, однако у ребят возникла проблема с определением конца файла.
Тем не менее награды нашли своих героев — участников, добившихся наилучших результатов – как в этом, так и в двух других конкурсах.
Закончилось всё
Заключение
Считаем, что мероприятие удалось. Атмосфера — душевная, интерес – неподдельный. Итоги станут понятны позднее, но уже можно сказать, что при должной подготовке подобные встречи могут быть очень продуктивными. Дни карьеры привлекают буквально всех – от первокурсников до дипломников. Нам даже довелось пообщаться с выпускником позапрошлого года, который решил поискать для себя что-то новое на Дне карьеры родного факультета.
Честно говоря, в это мероприятие мы постарались вложить частичку нашей айтишной души. Надеемся, что все остались довольны и пользу от произошедшего получили немалую.