пятница, 18 ноября 2011 г.

"Основы"

Подумал я тут. Часто, умные дяденьки, которые собеседуют тебя для приема на работу спрашивают только "основы". И... все, этим ограничиваются.

Лично у меня такое было 2 раза (а всего собеседований в IT конторы было 6): первый раз на разработчика C++, второй раз на разработчика C# / C++. В первой конторе меня поспрашивали про ООП, как устроены основные структуры данных (map, hash_map), какова максимальная сложность быстрой сортировки (подумав с минуту, понял, что O[n²]), пару вопросов по C и т.д. В общем, я на все отвечал достаточно уверенно и в конце собеседования чувак сказал, что хочет взять меня на работу (впоследствии, правда, оказалось, что им сейчас нужны только старшие девелоперы, но факт остается фактом - человек после 45 минут беседы уже готов был принять меня в команду).

Во второй конторе (DataEast) основной уклон уже был больше в пользу ООП и C#: эксепшены, разница между типами значений/ссылочными типами, что такое protected internal (я ответил неправильно, кстати)… Короче, вся такая вот фигня. На работу меня взяли, на этот раз железно. И зарплату обещали высокую. Однако, отработав 8 дней в DataEast, я уволился. Не понравилось. Но не об этом разговор.

Разговор об том, что многие зацикливаются на "основах". Типа, если человек их не знает, то он полный идиот, у него нет будущего, такого дебила нанимать нельзя. С другой стороны, если человек "основы" знает, то он офигенный программист, берем его 100%. Мне кажется, что это, мягко говоря, неправильно.

Во-первых, давайте сначала определимся, а что же такое "основы" вообще? Что такое полиморфизм, хеш-таблица, красно-черное дерево? А с чего вы взяли? Если уж вы настолько фанатеете от "основ", давайте тогда будем копать глубже и спрашивать, как устроен процессор, какие регистры у него есть, зачем нужен кэш 3го уровня и т.д. А хрен с ним, давайте пойдем еще дальше и будем допрашивать соискателя на тему устройства полевого транзистора, D-триггера и двоичного сумматора? А может вообще погонять по устройству полупроводниковых элементов на атомном (квантовом) уровне? Сами понимаете, что смысла никакого в этом нет, потому что человека, способного на собеседовании правильно, подробно и уверенно отвечать на все вышеперечисленные вопросы в природе не существует (хотя кто знает?:) Поэтому, не надо судить о человеке только лишь потому, что он не знает, что такое хеш-таблица. Может, его в вузе вообще не учили этому? Да даже если он не знает, то что? Может, ему просто это не нужно? Вспомните, когда вы последний раз реализовывали свою хеш-таблицу? Я помню - на 1 курсе НГУ на паскале. После этого я велосипед не изобретал, а пользовался уже готовыми реализациями, благо, каждый мэйнстримовый язык программирования имеет нормальную стандартную библиотеку. И признаться, за 6 лет я уже и подзабыл, как эта хеш-таблица устроена. Просто неиспользуемые на практике знания из головы довольно быстро выветриваются. И что, теперь я тупой? Естественно нет. Трудно себе представить человека, который прошел курс квантовой механики в университете и получил по нему 5, но который не сможет разобраться, как устроена хеш-таблица, если появится такая необходимость.

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

Например, вспомните, сколько раз вы в жизни изобретали велосипед, потратив кучу времени? Лично я делаю это довольно регулярно. И всему виною знания тех самых "основ". Когда-то я участвовал в одном программистском конкурсе и решил замутить свою собственную реализацию AVL-дерева. Потратил полдня. Зачем, если достаточно было погуглить минут 30 и найти готовую реализацию в Интернете? Т.е. получается, что иногда, когда знаешь много, проще написать свое, потому что ты знаешь, как оно устроено, чем поискать готовое стабильное и протестированное решение. Сегодня вот, например, нашел очень полезную Apache библиотеку commons-lang с полезными методами, которых нет в стандартной библиотеке Java. Глянув внутрь, я понял, что мы у себя в нашем проекте несколько раз изобрели велосипед, хотя могли использовать эту библиотеку. Джуниоры писали, думаете вы? Хрен. Велосипедили как раз те самые умные разработчики, знающие "основы".

Другая причина - это обычная гордость (или гордыня, что еще хуже). Бывало ли с вами такое, что сидишь полдня, втыкаешь чужой код, пытаешься его понять, а подойти к автору кода не позволяет твоя гордость? "Я же умный, я и сам смогу разобраться!". Вот так и тратишь кучу времени. А тем временем, твой коллега-junior, студент НГТУ, увидев тот же самый код, просто подойдет да расспросит автора. И быстро во всем разберется. А если человек еще и ленивый, так это вообще п%#^ец. Такой программист вообще отказывается делать работу, придумывая всякие отмазки типа "Я че быдлокодер вам веб-сервисы делать? Пусть вот студент Петя этим занимается" или "У меня стаж 3 года. Я нанимался тут задачи раздавать, ну на худой конец, архитектуру программы делать, а вы меня тут заставляете какой-то там отчет генерировать".

В общем, мое мнение следующее. Не зацикливайтесь на "основах". Как наличие, так и отсутствие определенных знаний еще ничего не означает. Собеседование должно быть разносторонним (и вообще, оно должно состоять из нескольких этапов, как делают все престижные IT-компании типа Лаборатории Касперского или Гугла). Если человек изучал микроконтроллеры в университете и писал на ассемблере, то уж наверняка он разберется в ООП и C#. Не делайте поспешных выводов. Если человек знает наизусть все паттерны проектирования, то это еще ничего не значит. Дайте ему тестовое задание. Пусть докажет, что сможет применить их на практике. Включите в тестовое задание как можно больше различных технологий. Пусть попыхтит. Когда я устраивался в компанию, в которой я работаю сейчас, для тестового задания мне пришлось разобраться с основами Eclipse, Maven, Tomcat, Struts, Freemarker, jQuery (со всем этим, я столкнулся первый раз). Было трудно, но зато я был уверен, что буду работать в компании, куда не берут всякий шлак (в противоположность DataEast).

вторник, 20 сентября 2011 г.

Как NAT разруливает ping

Долго сидел и втыкал, как NAT разруливает Echo Request - Echo Reply. С TCP все понятно: там для идентификации сессии есть порты. Но Ping ведь про TCP ничего не знает. Он реализован через ICMP, в котором нет портов! И как же тогда?

Все оказалось намного тупее, чем я предполагал. Echo Request (type = 8) и Echo Reply (type = 0) относятся к такому типу ICMP-сообщений, в которых есть специальные поле Identifier (или Query Id). Называются они ICMP Query Messages. Ну так вот, при отправке ответа на Echo Request хост проставляет этот Query Id тем же самым значением. Соответственно, NAT маршрутизатор, когда такое сообщение получает, смотрит в таблицу трансляции, видит, что такой идентификатор в ней есть, и понимает, куда передать пакет :)

пятница, 1 июля 2011 г.

ФИТ - жулики :)

Короче, дело было на выпускном ФИТа. Еще за месяц до него мне пришла в голову идея организовать игру вроде "Кладоискателей". Смысл был прост:
  • Есть три команды.
  • Нужно найти клад.
  • Чтобы найти клад, нужно бегать по точкам, отмеченным на карте и выполнять задания.
  • После выполнения каждого задания команда получает ключ и знает, какая точка следующая.
  • Маршрут всех команд разный, но конец маршрута один и тот же - палатка, где лежит клад.

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

Мне как организатору конкурса было интересно, как народ выполняет придуманные нами задания: показывают спам-бота без слов, плавают за воздушными шариками в море, решают кроссворд, собирают паззл и т.д. Поэтому у палатки я не караулил. А когда пришел, то офигел: клада не было. Ну, думаю, пипец база НГУ, бродит здесь всякое ворье. Расстроился. Через минуту прибегает первая команда, затем вторая, третья. Ну и говорю: "У нас ЧП, ребята, клад украли из палатки..."

Дальше клад все-таки из леса принесли и захавали.

PS. Игра народу понравилась (:

воскресенье, 19 июня 2011 г.

О том, как мы снимали в супермаркетах Академгородка

Некоторые уже, наверное, слышали об открытом национальном проекте Страна без глупостей. Так вот, мы, двое выпускников НГУ, Женя и Сергей, тоже захотели внести свои 5 копеек в развитие этого проекта и решили пройтись по нескольким супермаркетам новосибирского Академгородка с целью выяснить, запрещает ли администрация магазинов проводить фото- и видеосъемку в торговых залах.

Если вы не в курсе незаконности запретов на фотосъемку в магазинах, то лучше сначала пройтись по следующим ссылкам и ознакомиться:

Итак, вооружившись фотоаппаратами и выдержками из различных законов РФ, мы пошли.

Торговый центр


Первым на очереди был ТЦ на Ильича. Заходим в торговый зал, начинаем фотографировать товары. Курица, пельмени, рыба. Наши действия замечает продавщица из-за стойки и весьма недружелюбно говорит что-то вроде: "Таблички для кого висят? Ща охрану вызовем!". Видимо, речь шла о таких табличках:



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

Терпение, в конце концов, кончилось, и я решил сфотографировать прямо перед носом у охранника. Не заметить он меня не мог, и вот тут все и началось. Диктофон записал разговоры плохо, поэтому пишу приблизительно:

- Удаляй снимок!
- Почему я должен это сделать?
- Удаляй снимок, не понял что ли? Здесь съемка запрещена.
- На каком основании? Где это написано?

Охранник берет меня за руку и подводит к той самой табличке с запретом на фотосъемку.

Подходит еще один представитель охраны. Начинаем объяснять, что такие запреты являются незаконными. Он в ответ говорит, что это требование начальства. Мы в общем-то понимаем, что охранников винить смысла нет - они всего лишь делают свою работу, поэтому просим администрацию. Подходит девушка и начинает объяснять нам, что "это частная собственность", "здесь у нас должны соблюдаться определенные правила" и что-то в этом духе. Мы просим документ, подтверждающий поручение начальства ввести запрет на фотосъемку. Девушка отвечает, что такого документа предоставить не может, у начальства сейчас выходной. Мы говорим, что в таком случае будем продолжать снимать. Девушка отходит, пытается дозвониться до начальника, но без результата.

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

Золотая роща


Следующая на очереди была Золотая роща на Морском. Здесь было немножко веселее. Наш процесс съемки товаров был замечен практически сразу. Подходит охранник за 50 и говорит:

- Ребята, а кто вам тут разрешил снимать?
- А кто запретил?
- Как кто? По закону нельзя, закон о торговле, пойдемте покажу!

Я офигел. Оказывается, существует закон, котором явно написано про запрет на фотосъемку в магазинах. А мы и не знали. Проходим к стенду, он начинает копаться в бумажках, приговаривая: "Сейчас найду...". Пока он ищет, мы объясняем:

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

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

Мы говорим, что раз в правилах ничего нет, и закона тоже нет, то запрещать они нам ничего не могут. Снова идем вглубь магазина и продолжаем снимать.

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

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

Городок


Сразу же рядом с "Рощей" располагается Городок. Здесь на нас вообще никто не реагировал. На всякий случай попробовал снять всю полку с товарами прямо перед носом у сотрудницы магазина - ноль внимания. Охраны в магазине нет, так что мы пошли дальше.

Холидей


Последним был Холидей.

Я сделал несколько кадров, и меня заметил охранник с рацией:

- Парень, удали снимок, пожалуйста.
- На каком основании?
- Нельзя фотографировать в магазине. Вы представительное лицо какой-то организации?
- Мы частные лица, - говорит Сергей.
- Я представитель Российской Федерации, и мне этого достаточно, - отвечаю я.
- Коль, - говорит охранник другому по рации, - короче, они не хотят удалять фотографию. Говорят, что они представители Российской Федерации и где хотят, там и снимают.

Мы просим показать табличку, запрещающую фотосъемку в магазине. Такая действительно висела на входе в магазин:



Далее идет разговор с девушкой из персонала магазина. Она звонит кому-то: то недозванивается, то не может получить четких инструкций. Пытаемся объяснить, что запрет на съемку является незаконным. Показываем распечатку с выдержками из Гражданского Кодекса и Конституции. Девушка читать отказывается, ссылаясь на то, что это всего лишь клочок бумаги, который ее ни к чему не обязывает. Аргумент о том, что устные запреты руководства и незаконная табличка на двери нас тоже ни к чему не обязывают, игнорируется.

Она продолжает вести с кем-то переговоры по телефону, мы продолжаем фотографировать, в какой-то момент от нее звучит указание охранникам: "Так, все ребят, выводи их." Пара охранников просит нас (на словах) удалиться из магазина. Мы отказываемся, а Сергей предупреждает, что если с их стороны к нам будет предпринято физическое воздействие, будет вызвана милиция. Наверное имело смысл просто молча проигнорировать просьбу и посмотреть, что они собираются делать :). Тем не менее некоторое время мы просто продолжаем беспрепятственно снимать все, что попадает в поле зрения.

Тут приезжает полиция. Заходят два суровых милиционера с бронежилетами и автоматами.



Девушка (та, которая отказывалась читать закон) говорит милиционеру:

- Вот эти двое нарушают запрет на фотосъемку!
- А почему она запрещена? - резонно интересуется милиционер.
- Нууу... вот запрещена. (явно потухшим голосом)

Дальнейший диалог мы не услышали, потому что они ушли за пределы торгового зала и продолжили диалог там. Тем временем "фотосессия" товаров из Холидея продолжается.



Проходит несколько минут, к нам подходит все тот же милиционер и просит наши документы. В ответ я прошу представиться и предъявить служебное удостоверение. Удостоверение было предъявлено, и мы показали паспорта с временной регистрацией. Прапорщик Иванов (фамилия изменена, не из соображений сохранения анонимности, а потому что настоящую забыли) неспеша просматривает паспорта, спрашивает, как мы можем доказать, что не связаны с Аль-Каедой :). Все дело происходит прямо на кассе Холидея, где мы уже расплачивались за бутылочку воды. После осмотра он заявляет:

- Значит так, ребята. Ща я позвоню в отделение, и наведу о вас справки, нет ли случайно за вами какого долга перед Родиной. Ну, вы понимаете, не задолжали ли чего?

Проходим в служебное помещение Холидея, он звонит куда-то, диктует наши паспортные данные и начинает ждать ответного звонка. Пока ждем, он говорит, что за каждого пойманного уклониста "ловцу" выплачивается премия в 10000 р. До сих пор непонятно, прикалывался или нет :).

В общем, дальше было понятно, что ни за какие нарушения нас задерживать не собираются, потому что задерживать, в принципе, не за что. Мы объяснили, что хотим добиться отмены запретов на фото- и видеосъемку в магазинах. Милиционер заметил: "Правильно, надо всколыхнуть это болото!". Мы предложили ему провести разъяснительную работу с персоналом магазина на тему незаконности запрета на видеосъемку, мотивировав это тем, что подобные вызовы могут повториться в дальнейшем. Он сказал, что просто впредь будет выписывать магазину какую-то бумагу для штрафа за ложный вызов, если будут вызывать за проведение кем-либо фотосъемки.

В итоге они уехали, и мы тоже покинули магазин.

Итог


Таким образом, все оказалось несколько лучше, чем мы ожидали.

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

Что мы собираемся делать дальше? Будем писать письма директорам Торгового Центра, Золотой Рощи и Холидея, где будем требовать отмены запрета на съемку и проведения разъяснительной работы с персоналом. Дадим им некоторое время, скажем, месяц, после чего проверим, были ли выполнены требования. Если нет, то будем подавать в суд.

А тем временем, призываю всех неравнодушных к данной проблеме проводить аналогичные "фотосессии" в других магазинах.

суббота, 4 июня 2011 г.

Синхронизация любой папки или файла Windows в Dropbox

Неожиданно пришла в голову довольно капитанская, но полезная идея, как синхронизировать файлы и директории, которые НЕ лежат в папке Dropbox. Ответ - использовать символические ссылки. Просто не все знают, что в винде они тоже есть (команда mklink в Windows 7). Как это делается, писать не буду, потому что в Интернете это уже описано 100500 раз, например на хабре.

вторник, 31 мая 2011 г.

Карта базы отдыха "Университетская"

Вчера от нефиг делать решил векторизовать карту базы отдыха НГУ. А мало ли, вдруг кому понадобится. Выкладываю результаты своей работы здесь в svg-формате.

В цвете с подписями



В цвете без подписей



Ч/б с подписями



Ч/б без подписей


вторник, 24 мая 2011 г.

Алгоритм получения диплома

Публикую здесь задачи, которые нужно сделать для успешного получения диплома. Надеюсь, что это окажется полезным не только мне.

1. Доделать аннотацию. В заголовке должно быть: «Аннотация к квалификационной работе на соискание степени магистра студента 2 курса магистратуры физического факультета Иванова Ивана Ивановича. Тема такая-то». В конце - подпись студента. Аннотацию переплетать с дипломом не нужно (просто вложить в уже переплетенный диплом). 2 экземпляра.

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

3. Отдать работу рецензенту. Проверить, чтобы название работы в рецензии точно совпадало с названием квалификационной работы. Рецензия подписывается рецензентом. Подпись рецензента заверяется печатью отдела кадров института. Рецензию вкладывать в диплом не нужно. 2 экземпляра.

4. Переплести дипломы в кабинете 102 НГУ. Экземпляры работ складывать крест-накрест на стол. Часы работы - с 9 до 12:30, с 14 до 17. Срок изготовления - 2-3 часа.

5. Подписать переплетенные работы. Аккуратно, без помарок.

6. Доделать отзыв научного руководителя. Проверить, чтобы название работы в отзыве точно совпадало с названием в дипломе. Отзыв подписывается руководителем и заверяется печатью отдела кадров института. 2 экземпляра.

7. Доделать список публикаций с полным библиографическим описанием. Подписывается научным руководителем и студентом. 2 экземпляра.

8. Итого, 2 экземпляра дипломной работы, 2 аннотации, 2 рецензии, 2 отзыва и 2 списка публикаций отдаются секретарю кафедры до 31 мая включительно.

9. Сдать в деканат зачетную книжку.

10. Проверить оценки в приложении к диплому (в деканате).

11. Расписаться в справке на защиту (в деканате).

12. Приготовить и выучить презентацию к защите.

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

14. Защититься. Рецензента можно и нужно приглашать на защиту. Если же его не будет, то рецензию просто зачитает один из членов ГАКа. У магистров АФТИ защита 9 июня в 14:00 (конф.зал ИАиЭ).

15. Собраться после защиты группой и как следует побухать.

16. Заплатить 400 рублей за диплом, принести чек в деканат, расписаться в ведомости.

17. Прийти на вручение диплома и получить его! (Дата пока неизвестна).

18. Также после защиты нужно заполнить обходной лист. Хотя начинать подписывать его можно и до защиты.

Вроде все? Если будут какие-то замечания, обязательно напишите, я исправлю/дополню.

Образец заполнения обложки диплома



Примеры документов


Аннотация
Рецензия
Отзыв
Отзыв (с рекомендацией в аспирантуру)

Обходной лист


пятница, 4 марта 2011 г.

Весна наступила

Вот, наконец, и наступило мое любимое время года. Скоро начнет все таять, оживать. День становится все длиннее и длиннее. Кроме того, 27 марта переведут часы на час вперед (в последний раз), и тогда вообще темнеть будет поздно. Кстати, я поощряю отмену "зимнего времени" Медведевым, потому что ненавижу, когда зимой темнеет рано.
Весна - время перемен. Я скоро, после 1.5 лет отдыха, наконец буду работать. И на этот раз уже без халявы, на полной 40-часовой рабочей неделе.
Кроме того, эта весна - последняя студенческая весна в жизни. 6 лет обучения пролетели очень быстро. Даже как-то неинтересно теперь жить будет, что ли. Грустно покидать стены родного университета. А может быть, и наоборот, ведь если вспомнить, какими экзаменами по функану и квантам нас дербанили.
Ну и, в конце концов, весна это клево, потому что в апреле будет мой д/р :) Надо будет придумать нормальную программу. В прошлом году день рождения я не праздновал, потому что был в Москве в командировке. Кстати, хочу в Москву - мне там очень понравилось. Жить в ней нереально, но отдохнуть пару недель можно. В общем, ждите меня там, я когда-нибудь туда приеду! Или в Питер :)