Примеры студенческих проектов /

File System Deduplicator

Участники проекта

Кирилл Кононов

Кирилл Кононов

Выпуск 2014
Мария Коржеманова

Мария Коржеманова

Выпуск 2015

Руководитель

Владислав Белогрудов

Владислав Белогрудов

В осеннем семестре 2012-2013 уч. года мы проходили практику в компании EMC. Команда состояла из трёх участников: двоих студентов из CS центра и одного — из Академического университета.

Проект, над которым мы работали, называется «File System Deduplicator».

Ни для кого не секрет, что данные на компьютерах пользователей зачастую хранятся довольно избыточно. Именно это и стало предпосылкой к началу разработки нашего проекта. Его суть заключается в том, чтобы создать приложение с графическим интерфейсом, которое даст возможность пользователю легко провести «дедупликацию» файлов на компьютере. При этом важным требованием к приложению являлась его независимость от конкретной платформы.

Для решения этой задачи был выбран подход, подразумевающий реализацию архитектуры раздельных Back-end и Front-end, т.е. логики и интерфейса. Более того, было решено использовать различные языки программирования для разработки этих частей: Back-end договорились писать на C++, чтобы обеспечить достаточное быстродействие, а Front-end — на Java.

Алгоритмически процесс поиска дубликатов состоит из нескольких основных этапов. Первый этап — это фильтрация всего множества пар файлов на жестком диске по критериям схожести размеров и совпадения типов. Второй этап — это сопоставление хешей для выявления совпадающих файлов. Третий этап — это использование алгоритмов аппроксимации для выявления похожих файлов.

Схема приложения

Упрощенная схема приложения показана на рисунке выше. Связь между его частями осуществляется через стандартные потоки ввода/вывода, по которым необходимая информация передаётся в текстовом виде.

Скриншот графического интерфейса

С точки зрения функциональности у пользователя имеются такие возможности как выбор исходного каталога для дедупликации, запуск/остановка процесса, пауза.

Среди интересных принципов и технологий, которые мы использовали, можно выделить следующие:

  • Front-end/Back-end архитектура
  • Boost C++ Libraries
  • Filesystem
  • Program options
  • Tokenizer
  • Java multithreading
  • Java Swing graphic library
  • Polling (блокирующий I/O вместо асинхронного)

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

Так или иначе, большинство вопросов нам удавалось решать по электронной почте, а пару раз мы даже поводили конференцию в Skype. По ходу решения общей задачи у нас имелось разумное разделение труда, т.е. каждый студент готовил те части, о которых мы заранее договаривались в ходе обсуждений. Моя задача состояла в написании прототипа Back-end’а, а также написании графического интерфейса целиком, включая взаимодействие с логикой. Совместная работа над кодом велась под системой контроля версий Subversion (SVN), использовался репозиторий на code.google.com.

В целом, я остался доволен участием в проекте и проделанной работой :)

Текст написал

Кирилл Кононов

Кирилл Кононов