Блог веб-разработчика v 1.0.0
Symfony2, AngularJS, React, Gulp, PhpStorm и много других страшных слов

Третье место в финале олимпиады по веб-разработке

10 лет назад
4967 просмотров
1С-Битрикс PHP Олимпиада

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

В каждом из городов-участников олимпиаду организовывала компания-партнер 1С-Битрикс. В Краснодаре это была Notamedia. Они действительно качественно организовали мою поездку в Москву, за что им большое спасибо (в частности Андрею и Светлане), но обо всем по порядку.

Полетели

Если вам когда-либо предложат на выбор ночь в гостинице в другом городе или самолет ранним утром, никогда и ни за что не выбирайте самолет.

Я выбрал самолет. Билеты были куплены онлайн и еще дома распечатаны посадочные талоны. Я выбрал 13-й ряд. На удачу так сказать. До этого никогда не летал и не знал что и как оформляется в аэропорту перед полетом, поэтому, наслушавшись советов, оказался там за пару с небольшим часов до вылета.

- У вас все готово, ждите посадки. Сказала не слишком дружелюбная бабушка из окошка под вывеской "Справочная информация". Что ж, делать нечего, придется подождать лишние пару часов. Занятий в аэропорту масса. Можно посидеть на лавочке или поседеть на лавочке, например.

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

Летать - это классно, но лучше делать это днем, т.к. ночью видно чуть больше чем ничего.

Может такси?

В аэропорту Шереметьево очень много таксистов. Пока я дошел до аэроэкспресса их насчиталось человек двадцать пять. Ради интереса узнал сколько стоит такси до Белорусского вокзала:

- Дорого!
- Дорого - это сколько?
- Очень дорого!

Хотябы честно. Ладно, уговорили, поеду на аэроекспрессе. На посадке сообщили чтобы я шел к следующему вагону. "Что, опять?" подумал я, но успел за несколько секунд до закрытия дверей.

Спустя пол часа я был на Белорусском вокзале, где меня встретила Светлана из Notamedia. Потрясающий человек, симпатичная девушка. Без ее компании было бы скучно и не интересно добираться до учебного центра 1С в котором и проходил финал олимпиады. По пути мне рассказали много интересного о самой Notamedia и, конечно, о Краснодарской ее части.

Белый бейджик. Желтая папочка.

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

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

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

Зачем мы вообще собрались возле этого кабинета? Нас уже зовут на второй этаж. Здесь проходило открытие олимпиады. Пришел ректор физического университета Москвы (если не ошибаюсь). Оказывается, олимпиада проводится уже в 28-й раз, а я даже и не вкурсе. Хотя постойте, слышны слова 1С:Предприятие, бухгалтерия. Блин, кажется я не туда попал. Не в тот зал, не на ту олимпиаду! А еще сижу и думаю, откуда вокруг столько девушек. Ну не может случиться, что все они хорошо разбираются в веб-разработке.

У 1С есть забавная традиция: фотографироваться на лестнице с участниками олимпиады. Я тоже пошел на фотосессию, но по пути набрел на кабинет с веб-программистами и пустым столом подписанным моим именем. Здесь я и должен быть. С этой мыслью я по тихому свернул в кабинет к программистам.

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

Четыре с половиной часа на XP

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

Аудитория 9157 наполнилась стуками по клавиатуре. Около тридцати человек, возможно в будущем крутых профессиональных программистов стучали по клавишам в погоне за вторым местом. Да, именно вторым, т.к. за него давали ноутбук, а для любого ИТ-шника он куда "вкуснее" турпоездки в Европу.

Задание первое. Инвертировать файл в условиях ограниченной памяти.

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

Надеюсь, что ни кому в здравом уме не придет в голову загружать файл в память и инвертировать его как строковую переменную. Исходя из этого ограничение в 2 Мб становится вообще не заметным. А использовать временные файлы для подобной задачи мне бы и в голову не пришло, честно говоря.

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

На первом задании снова проявила себя моя карма. У меня отказал FTP. К счастью у всех стоял Denwer, поэтому потраченное на проблемы время особо не повлияло на результат.

В последствии FTP отвалился практически у всех. То работает, то не отвечает. Иван старательно пытался нам помочь, но в итоге пришли к тому, что задания сдавались "как есть". У меня, например, два задания были выложены на FTP, а третье осталось на локальном ПК.

Задание второе. Роутер на регулярных выражениях.

Очередное банальное задание. Есть набор готовых файлов вроде news.php, photo.php. Требуется написать роутер для парсинга URL наподобие /photos/user/#USERNAME#/album/#ALBUM#/photo-#PHOTO#. Требуется по определенному URL подключать нужный файл и вызывать указанную функцию с нужными параметрами. При этом для каждой переменной заданы ограничения, например только числа и т.п. Роутинг должен работать обязательно на регулярных выражениях, поэтому вариант с реврайтами в .htaccess отпадает.

Ничего сложного, просто набор регулярок, инклудов и пара вызовов функций.

Задание третье. Графическое отображение логов сервера.

Это уже интересней. Иван честно сказал нам, что удивится, если кто-то вообще его выполнит. Задание состоит из двух частей.

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

Вторая: используя GD отрисовать график количества запросов GET и POST. При этом для хранения логов нельзя использовать никакую БД, только файл и только один (тот самый из первой части). Формат файла при этом не ограничивается, т.е. можно придумать что-то свое. Поначалу я хотел использовать SQLite. Ну чем вам не файл? Но подумал, что условия это все же нарушит. Поэтому хранил логи "как есть". Просто дозаписывая текстовый файл. Все равно их парсить, а разница между парсингом строки в 10 символов и в 100 почти не заметна, поэтому не стал ничего выдумывать.

Где-то за час до окончания олимпиады у нас перестала открываться практически любая документация. Интернет как-то странно работал. Мне не привыкать (привет Yota), очень много помню и так, а вот многим участникам было тупо нечем заняться, т.к. Notepad++ не слишком хороший помощник в этом плане, а IDE нам ставить нельзя было. Есть подозрение, что это было сделано специально для своеобразной проверки участников.

Для кого-то сложность заключалась в использовании библиотеки GD, а для меня было не просто составить алгоритм отрисовки самого графика. Не могу сказать, что это было сложно, но я никогда не занимался ничем подобным и в голове, к сожалению, не было готового алгоритма работы (а интернет у нас не работает, помним, да?). Поэтому задача требовала времени и ничего кроме времени, которого мне не хватило на 100% "красивую" работу. Может быть сыграла моя сонливость (ночью перед этим то я не спал), ну да ладно.

Трое в лодке не считая собаки

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

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

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

Пошли бурные обсуждения заданий. Кто-то понимал о чем говорит, а кто-то начал изучение PHP за пару дней до поездки сюда. Было интересно пообщаться, все участники не выражали никакого соперничества и активно беседовали за обедом. И я по прежнему не понимал, что говорит Quang Chau.

Третье место

Церемония награждения длилась около 20 минут. И я был этому рад, т.к. торопился в аэропорт (учитывая первый полет могло случиться что угодно). Традиционно начали с конца. Третье место....О-зар-ни-чук Валерий. Мою фамилию никто не выговаривает с первого раза. Радоваться ли вообще третьему месту? Наверное да. С красными, сонным глазами и слегка натянутой улыбкой я вышел к Ивану за этой победой. Третье место по всей России. Не так уж плохо если подумать.

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

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

Из всех участников только 14 человек были близки к решению третьего задания. И только четырем удалось его сделать практически полностью.

Рейс ЮТ-535

После фотографии на память со всеми победителями олимпиады и, конечно, Иваном. Я отправился в аэропорт Внуково. На удивление, по дороге ничего не случилось. Теперь у меня был с собой пакет с подарками от 1С и парой дипломов-грамот в стекле, поэтому пришлось оформлять багаж, но и здесь все прошло без проблем.

Отзвонившись Светлане в Notamedia о результатах олимпиады я получил столько позитива, что боюсь представить ее реакцию если бы я выиграл. Подобное очень поднимает настроение, так что дорога домой была куда приятнее.

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

А что в итоге?

Перед поездкой многие задавали один и тот же вопрос: Зачем тебе это надо? Я познакомился с новыми, интересными людьми. Получил большое удовольствие от самой поездки. Первый раз летал на самолете. Занял третье место во всероссийской олимпиаде по веб-разработке и получил за это свои плюшки. К тому же, было просто весело.

Что еще почитать