Changes between Initial Version and Version 1 of Programmers_test


Ignore:
Timestamp:
Oct 28, 2007 5:54:26 PM (17 years ago)
Author:
Sagrer
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Programmers_test

    v1 v1  
     1 = Тестовое задание для программистов, желающих вступить в Gipat Group. =
     2 = v 0.1 =
     3
     4 == Среды разработки - можно брать любую: ==
     5 * Delphi (очень рекомендуется 6 версия)
     6 * Borland C++ Builder (аналогично рекомендуется 6 версия)
     7 * Microsoft !VisualStudio (Версия 7 и выше, в принципе можно и 6-ю использовать для тестзадания, но бОльшая часть софта у нас компиллируется в 7 версии, даже то что изначально было в 6 и под 7 не хотело компилиться - для работы вам в любом случае потребуется 7 и выше).
     8 * CodeBlocks + либо gcc+wxWidgets\gcc+!WinApi, либо + бесплатный мелкомягкий компилер + MFC\!WinApi. В этом случае вы должны быть в состоянии перевести под CodeBlocks и заставить компилиться проект, изначально разрабатывавшийся под студию. Я сам не пробовал, но грят что с мелкомягким компилером вполне можно компилить проекты под студию.
     9 * [wiki:Lazarus].
     10
     11 == Собственно задание - пишется программа, в которой есть: ==
     12 * Окно - там прогрессбар, кнопка "копировать", кнопка "отмена", пустое квадратное поле (дабы туда потом можно было выводить OpenGL или Direct3D графику)
     13 * При нажатии на кнопку "копировать" выводит диалог открытия файла.
     14 * Если юзверь выбрал файл - выводит диалог сохранения файла.
     15 * Если юзверь сохранил файл - проверить - не тот же это самый файл который был открыть. Если тот же самый - сказать что нифигга и так неззя - и опять вывести диалог сохранения.
     16 * Если не тот же и на месте сохраняемого файла уже что-то есть - спросить - хочет ли юзверь перезаписать файл (да\нет\отмена).
     17 * Если ответит что нет - спросить куда сейвить. Если отменит - остановить все, оставить на экране окно с кнопкой чтоб опять нажать можно было. Если ответит да - продолжаем.
     18 * Прога копирует файл по пути 1 (открытый файл) в путь 2 (сохраненный файл) заменяя его если он там есть. Информация о процессе копирования выводится в прогрессбар. Процесс копирования происходит в другом thread - т.е. не в том которое занимается перерисовкой окна. Скорость копирования должна быть вразумительной - примерно такой же как и скорость копирования через explorer, по крайней мере отставать от него незначительно. Окно с индикатором не должно подвисать.
     19 * Кнопка отмены - вне процесса копирования она всегда заблокирована. В процессе копирования - разблокируется и если юзверь нажмет - копирование отменяется, причем немедленно - скорость реакии должна быть примерно такой же как и скорость обновления инфы в прогрессбаре.
     20 * OpenGL или Direct3D графика. Рекомендуется использовать OpenGL. Для работы с расширениями OpenGL настоятельно рекомендуется использовать библиотеку glew. Если Direct3D - то пользоваться версией DirectX не выше 9.0c. В прямоугольнике в окне (о котором сказано в 1-м пункте) - выводить какую-нибудь фигуру на ваше усмотрение - только не шарик плз - должно быть возможно увидеть что оно двигается. Вне процесса копирования - оно крутится справа на лево. Во время копирования - слева направо.
     21 * Информацию о настройках программы - расположение окна на экране, путь по которому запускалось в последний раз, путь к последнему скопированному файлу (точнее 2 пути - откуда и куда копировалось) - сохранять и подгружать (при запуске проги) из файла лежащего в папке с программой. Файл обязательно должен быть бинарным - тоесть не текст который можно открыть в блокноте (да, я в курсе что это нелогично, но надо же проверить ваши навыки работы с бинарными файлами) - например циферки инфы о расположении окна писать в файл не текстом а значениями байтов... формат этого файла должен быть масштабируемым - туда должно быть возможно добавить новые поля с информацией (достаточно полей типа string, float, integer, byte) - на случай если программе придется работать с новыми настройками. В формате файла также должна быть предусмотрена информация о версии формата, а в программе - механизм для чтения форматов устаревшей версии. Реализация механизма работы с этим файлом - в виде класса, свойства которого содержат информацию из файла (при желании можно поизвращаться и заинкапсулировать все свойства, оставив public только методы их чтения\записи - но я не сторонник подобной потери времени там где это в принципе не нужно), а методы - умеют читать и записывать инфу в файл.
     22 * Выполненное тестзадание должно представлять из себя 2 архива. В первом - папка с бинарниками (имя папки должно содержать имя проги и версию - например !TestWork_0_1) - там все файлы, необходимые для их работы. Во втором - папка с исходником (имя папки = [имя папки с бинарником]_src) без всякого мусора вроде *.obj или бекапов файлов - тоесть только необходимое для открытия в IDE и сборки бинарников. Очень жалетельно чтобы средствами IDE было организовано нормальное раскидывание генерируемых при сборке файлов - например после build все что должно попасть в архив с бинарниками - складывается в отдельную папку, остается только заархивировать. Исходник должен сопровождаться readme с подробной инструкцией по сборке. При желании можно написать и readme для бинарников.
     23
     24 == Что буду смотреть при проверке задания: ==
     25 * Неукоснительное соблюдение задания.
     26 * Качество написания и оформления кода. Код должен быть понятен, сопровождаться осмысленными комментариями (на русском, при желании можно дублировать на английском), должны быть и должны соблюдаться правила оформления - отступы и прочее. Любители венгерской нотации - ваше право конечно, но помойму написание в начале каждой переменной её типа только превращает идентификаторы в плохо понятное бормотание и матюги, не более того - в норально написанном коде и так без проблем можно понять что за тип у переменной.
     27 * Вообще - все должно быть максимально просто и понятно. Следуйте бритве Оккама. Возможно при проверке задания я не обращу внимания на мелкие недоработки, баги и отклонения от задания - людям свойственно ошибаться, а лень программистов это вообще двигатель прогресса... Но вот если в присланых архивах будет помойка из файлов непонятного назначения в которых без поллитры не разбересси - оно полетит фтопку без каких либо попыток понять что там за код, как он написан и как это компилить - даже если программа будет работать безукоризненно.