Открыть список
Как стать автором
Обновить

Комментарии 35

Ни хрена себе тестовое задание. А зарплату за него заплатят?
А что тут собственно такого? В задание не сказано использовать NGINX, а простой рабочий прототип можно сварганить за пару часов. Окценты были сразу расставлены:
Верстка не важна, уделяйте основное внимание бэкенду, оформлению кода, мелочам.
Честно говоря, как мне кажется, тестовое задание как явление себя изжило в некотором роде. Лучше всего навыки демонстрирует активность на github/bitbucket/etc, при этом не обязательно иметь свои проекты — форки и даже оформленные отчёты об ошибках очень красочно иллюстрируют способности человека.

Как мне кажется, тестовое задание стоит давать только для людей «без опыта работы», но и то тестовое задание не должно быть всеобъемлющим. Я бы предложил для тестового задания просто любую задачу с ProjectEuler.
Желательно после двухсотой )))
А если у человека нет аккаунта и/или совсем нет активности на github/bitbucket? Он вообще программировать не умеет?
Ну нет у меня времени влезать в opensource-разработки, нету. А проблемы или баги, которые встречаются, обычно уже описаны и зафиксированы.
Тогда, скорее всего, вы не сможете показать никакой готовый код из-за SLA, так что придётся оценивать как «без видимого результата работы», что для работодателя аналогично случаю «без опыта работы». Любой человек может научиться писать код не работая нигде, не у каждого будет проект, который стоит показать, так что остаётся для этого случая и остаются тестовые задания, но, как я и сказал раньше — тестовое задание не должно быть тестовым проектом, так как это слишком.
Кстати, к решению вашего тестового задания можно было и существенно проще подходить, но тогда действительно грош цена такому решению будет и оно не покажет всего потенциала.
Скорее вакансия кодера/технолога, а не программиста. Решили не конкретизировать и написать «разработчик»…
Мы будем поднимать несколько backend серверов, поэтому нам понадобится балансер и Supervisor. Изначально я думал о HAProxy в качестве балансера, но тут меня осенило, что картинки может хорошо раздавать NGINX. В итоге в начале архитектура мне показалась такой: NGINX балансирует соединения и раздает статику с диска, 4 сервера Tornado обрабатывают запросы, Redis синхронизирует backend.


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

Тестовое задание — это не только проверка ваших навыков кодера, но и навыков разработчика: умение обдумать, сформулировать и задать вопросы по заданию. Отсутствие вопросов обычно сильно портит впечатление.

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

К сожалению, данное тестовое задание было наполнено по большей части поиском библиотек и администрированием, в нем очень мало программирования. Что хотел выяснить работодатель этим заданием мне не очень понятно.

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

А может нужно было позадавать уточняющих вопросов? Когда разработчик уточняет детали задачи перед ее выполнением, то это его также характеризует помимо самого тестового задания.

Лично мне не понятно зачем Вам было погружаться впервую очередь в вопросы масштабирования и производительности, когда в требованиях об этом ни слова.
Я попытался сделать решение, которое бы устроило конкретно меня, если бы я выдал кому-либо такое задание. Сразу после получения задания я отписал работодателю, что более не имею интереса к его вакансии, таким образом смысла себя как то себя характеризовать перед работодателем не было.
Выполнять это задание таким образом как повод разобраться с технологиями, которые до этого не трогали — это ок.
Но когда разработчик на полном серьёзе вместо того, чтобы делать то, что нужно бизнесу пишет свою универсальную операционную систему, которая поможет решить задачу через год — то работодателю становится всё ясно. Тут правильно выше написали, что такие задания при приеме на работу очень хорошо характеризуют соискателя.
Раз уж тема про тестовые задания, то хотелось бы узнать, что уважаемое сообщество думает на счёт вот такого тестового задания? Своё мнение я тоже могу высказать, если оно будет кому-то интересно.

ИМХО:
Я, конечно, не совсем в теме распознаваний и технологий с этим связанными, но неделю на тестовое задание — это по-моему перебор. Кроме того, задание такого объёма, что мне кажется оно займёт неделю фултайм работы (если не в режиме наколеночного скрипта это делать). Авторы тестового задания должно быть предлагают очень хорошие условия после устройства к ним, иначе я бы не стал тратить время на такое тестовое задание.
Скажем так, описанный в статье по ссылке метод очень ненадёжен и не может использоваться в реальных условиях для роботизированных автомобилей. К тому же там ничего не написано про фильтр для классификации групп знаков, а показан только результат его работы.
параметры для этого фильтра подбирались опытным путем
На одной картинке сработало, а на остальных другие параметры. Пороговая обработка и Canny — это всё, что там применили. Никакой адаптивности, никакой классификации (остальное не написано), подобным подходом не удастся получить устойчивое надёжное решение этой задачи. Поэтому копипаста простейших примеров использования примитивов машинного зрения из OpenCV не прокатит.
Там в конце ещё написано про нейросеть для классификации контуров, чтобы определить форму знаков, как я понимаю (так называемый Structural Analysis и Shape Descriptors). Так вот, в OpenCV нет никаких нейронных сетей, а есть только примитивы (кирпичики) и классификатор придётся придумывать, тестировать и писать самостоятельно, используя только лишь примитивы из OpenCV, и никакая копипаста тут не поможет.
Для первого задания этот пример уже не подходит, т.к. знаки могут иметь различную форму, цвет, не иметь белой рамки по контуру и т.д. и т.п. Лучшего качества наверно можно было бы добиться на SVM+HoG, какойнибудь каскадный детктор или Deep Learning, но сомневаюсь, что к заданию приложили достаточное для обучения количество позитивов/негативов. Как простое решение можно было бы попробовать простой feature matching или контурный анализ попробовать, надеясь что знаки достаточно фичастые. Вообщем уже в первом задании можно потратить немало времени на проверку различных гипотез.
Во втором задании да, можно наверно было-бы применить наработки из предложенной статьи, но вопрос качества остается открытым.
Третье задание целиком копипастится из OpenCV.
А с учетом того, что ко всем заданиям необходимо еще написать сопроводительные документы с анализом качества реализации и т.п., то как правильно сказал frol, тут действительно для качественного выполнения задания стоит тратить неделю фулл-тайма.

iroln а откуда такое задание на собеседование и что за условия там предлагают, если хоть кто-то берется за его выполнение?:)
… каскадный детктор или Deep Learning, но сомневаюсь, что к заданию приложили достаточное для обучения количество позитивов/негативов
Тестовые данные, которые были приложены к заданию, не позволяют использовать никакие обучающиеся алгоритмы (никаких позитивов/негативов). На счёт сроков и объёма задания, если делать всё по уму, при этом начиная с нуля (не имея работающего прототипа/модели), и недели фулл-тайма не хватит. Как вы и сказали:
уже в первом задании можно потратить немало времени на проверку различных гипотез

На счёт «откуда» и условий ответил в личку, думаю, так будет правильно.
На счёт сроков и объёма задания, если делать всё по уму, при этом начиная с нуля (не имея работающего прототипа/модели), и недели фулл-тайма не хватит.

Скорей всего там расчет и сделан на тех, кто придет, например, с результатами своей Ph.D. работы связанной с ADAS.
Так а что в итоге-то? Взяли?
А зачем было EXIF записывать к превьюшке? Я так понял, на это ушло 90% времени, и про это ничего в ТЗ не было.
EXIF я пишу к отконвертированному в JPEG изображению из эстетических соображений: я посчитал удобным хранить все необходимые для сервиса данные прямо в картинке, потому что для восстановления сервиса будет необходимо хранить только эти картинки. И эта задача помогла мне обнаружить дополнительные форматы изображений, которые я решил поддержать в своем решении. В целом, я бы не сказал, что реализация именно этой задачи была долгой, просто при работе над ней вскрылись нюансы, которые я пожелал покрыть.
Начал я со сборки Upload модуля NGINX, и, конечно же, безуспешно. Провозившись некоторое время, я понял, что автор его забросил, и на последней версии этот модуль не заработает. Ну и ладно — пусть Tornado сервер сохраняет входящие файлы на диск.
Открою страшную тайну: NGINX умеет это делать без модуля из коробки.
Спасибо, очень полезное замечание.
НЛО прилетело и опубликовало эту надпись здесь
Вы из контекста вырвали, вчитайтесь:
Проверять, является ли загружаемый файл изображением, если нет — выдавать ошибку. (Не использовать проверку наличия EXIF данных в качестве валидации)

Просят не принимать наличие в файле EXIF данных в качестве доказательства, что файл является изображением
EXIF может служить метаданными не только для изображений, но и для звуковых файлов. Видимо, поэтому было поставлено такое условие.
НЛО прилетело и опубликовало эту надпись здесь
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.