Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14

DuplicateFinder Preview 1.0

19.10.2020, 22:03. Показов 6131. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как известно, самая главная проблема "грязного" кода - необходимость обновлять множество дубликатов одного и того же фрагмента. И бОльшая часть улучшений в хороших языках посвящены борьбе с дублированием. Но чтобы этими улучшениями воспользоваться, нужно сначала это дублирование найти. А при запросе в Google "поиск дублирования в коде программа" я не нашел ничего внятного. Большинство таких "программ" либо являются плагинами для конкретной IDE, либо их нельзя нормально установить, либо они содержат кучу ненужного функционала и стоят десятки, а то и сотни долларов. Поэтому я решил создать свою программу для поиска дублирования в коде, изолированную от IDE, запускаемую двойным кликом по исполняемому файлу в WinRAR и производящую только поиск дублирования и ничего другого.
Важно: я не собираюсь зарабатывать на этой программе. Она бесплатна, и создана для облегчения жизни программистам.
Преимущества:
1. Работает
2. Основана на самом известном алгоритме поиска повторов - Лемпеле-Зиве.
3. Обнаруживает только повторы длиной не меньше 6 лексем.
4. Длина словаря составляет 5000 лексем.
5. Обнаруживает даже частично повторяющиеся фрагменты!
6. Игнорирует тривиальные фрагменты, такие как одно свойство из нескольких лексем или вызов метода плюс-минус число.
7. Показывает, на каких строках и в каких позициях находятся дубликаты.
8. Показывает начало повторяющегося фрагмента кода и конкретные отличия.
9. Показывает текущую позицию в окне кода.
10. Остутствие привязки к ключевым словам конкретного языка. Работает для всех Си-подобных языков, а возможно, и для каких-то других.
11. Можно изменять размер окна.
12. Вычисления выполняются в отдельном потоке.
13. Минимум пересоздания строк вследствие конкатенации, что приводит к приемлемому времени работы даже на длинных кодах.
14. На случай длинного кода припасены полосы загрузки. Но, как правило, дубликаты находятся моментально.
15. Программа не содержит ненужного функционала, весит немного и не требует сложной настройки.
Недостатки:
1. Иногда сообщает о дублировании, которое нельзя устранить.
2. Вследствие приемущества 10, может посчитать последовательность ключевых слов как дубликат.
3. Обнаруживает только первую тривиальную длину. Если она маленькая, а есть больше, может ошибочно посчитать дубликат нетривиальным и выдать сообщение, что это проблема.
4. В выводимых фрагментах кода не сохраняет его пробельную структуру.
5. Не обнаруживает повторяющиеся комментарии.
6. Может включить в дубликат точку с запятой и перевод строки.
7. Не разбирается в том, класс это, функция, или что-либо другое.
8. Не показывает длину выделения в окне кода, только его начало.
9. Вероятно, потребляет больше памяти, чем можно было бы.
Ну как, нормально?
Вложения
Тип файла: rar DuplicateFinder Preview 1.0.rar (72.6 Кб, 25 просмотров)
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2020, 22:03
Ответы с готовыми решениями:

preview - next
привет всем! Пытаюсь сделать ссылки предыдущ. и следущ. - никак не получается :wall: Беру из БД статьи и на странице отдельного...

Настройка preview
Гуру qt! Одно время очень хотел настроить комп для писания приложений на андроиде, даже скачал и установил нужные компоненты, но протом...

Taskbar Preview
Подскажите, пожалуйста, название компонента для работы с таскбаром?

60
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
19.10.2020, 23:12  [ТС]
Билд второй. Существенно улучшилось обнаружение тривиальных повторов, недостаток 3 больше не актуален.
Вложения
Тип файла: rar DuplicateFinder Preview 1.0.rar (72.7 Кб, 2 просмотров)
0
Эксперт .NET
 Аватар для Usaga
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
20.10.2020, 06:31
Etyuhibosecyu, ну не знаю) Как бы, пускай будет. Но я сомневаюсь, что это кому-то полезно будет. "Программисты", которые настолько люто копипастят, что им может понадобиться такая программа, просто не будут испытывать в ней потребности, ибо им просто наплевать, иначе бы они не копипастили. А нормальные разработчики просто не будут тупо копипастить и сразу постараются сделать нормально.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.10.2020, 08:50
При запуске:
---------------------------
DuplicateFinder.exe
---------------------------
To run this application, you must install .NET Core.

Would you like to download it now?
---------------------------
Да Нет
---------------------------
Это норма, или есть специальные ключи компиляции, которые обеспечивают создание exe файла, который не требует ни каких дополнительных установок и инсталляций на комп, а сразу запускается?
0
Эксперт .NET
 Аватар для Usaga
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
20.10.2020, 09:07
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Это норма, или есть специальные ключи компиляции, которые обеспечивают создание exe файла, который не требует ни каких дополнительных установок и инсталляций на комп, а сразу запускается?
Конечно такие ключи есть. Называется self-contained. Кладёт сборки рантайма рядом с самой прогой. И даже в единый EXE можно всё упаковать. Просто кто-то не любитель читать документацию
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
20.10.2020, 09:17  [ТС]
Pro_grammer, норма. Программа создавалась на .NET Core, соответственно, во время работы без его среды выполнения никак. Мне кажется, в наше время на современные системы .NET Core устанавливается с первой нормальной программой, как и .NET Framework. Даже если у вас не так, скачать 52 МБ в наше время - ну не знаю, что может мешать.
0
Эксперт .NET
 Аватар для Usaga
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
20.10.2020, 09:22
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
норма.
Нет, не норма. Среду исполнения можно распространять вместе с приложением. Ссылку я привёл. И .NET Core никуда не ставится ни с какой программой. Это не .NET Framework.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
20.10.2020, 09:23  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
А нормальные разработчики просто не будут тупо копипастить и сразу постараются сделать нормально.
Я не знаю таких разработчиков, которые могут сразу писать без копипасты. Для кого-то же рефакторинг существует... Для нормальных разработчиков, я так понимаю? А эта программа автоматизирует самый главный вид рефакторинга.
0
Эксперт .NET
 Аватар для Usaga
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
20.10.2020, 09:39
Etyuhibosecyu, а я не знаю ни одного разработчика, который тупо копипастит код в проекте. Не найти какой-то мелкий хелпер и написать его заново? Ну может быть такое. Но такой код всё равно будет отличаться от исходного и подобная тулза может его и не найти. Да и не так это критично.

А так, накопировать столько, чтобы нужно было потом за собой чистить... Зачем?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
20.10.2020, 10:06  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
а я не знаю ни одного разработчика, который тупо копипастит код в проекте.
Тогда напишите - для кого придумали рефакторинг, если все такие умные, что не копипастят код? Желание скопировать и вставить является интуитивным и очевидным. Если разработчику второй раз понадобился код, он вряд ли немедленно вспомнит, что нужно создавать метод, а скорее всего, просто нажмет волшебную комбинацию. Ну, возможно, все судят по себе, но мне кажется, что это у большинства так. Иначе бы рефакторинга просто не было.
0
Эксперт .NET
 Аватар для Usaga
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
20.10.2020, 10:31
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
для кого придумали рефакторинг, если все такие умные, что не копипастят код?
Для индусов. Кто ещё может осознанно копипастить у себя в проекте? Но опять же, если человек осознанно это делает, то и тулза ему такая не нужна, ибо ему плевать. Если бы было не плевать, то он бы не копипастил.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Иначе бы рефакторинга просто не было.
Так его, можно сказать, и нет) Мне даже в голову не приходило такое искать. Знаю, что в Enterprise версии студии есть такое, но оно и понятно почему)
0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
20.10.2020, 10:36
В процессе долгой практики программирования использовал разные принципы программирования. Так вот как показала практика универсальные классы обедняющие общий код иногда (а может и нет) становятся сплошным гемороем.

Например две сущности, как любят в учебниках писать, стол стул. У них вроде есть одинаковые вещи по смыслу - ножки, столешница. Так и тянет сделать общий класс.

Вот только в последствии выясняется что стул это мягкий пуф или вообще мешок с пенопластом. А стол мраморный.

Короче хочу довести мысль что в результате получается столько if - что потом смотришь на эту кашу и думаешь, а оно мне надо. И делаешь 2 разных класса. В них есть одинаковый код. Зато остальное разное.

И читается такой код лучше и изменять что то - нету никакого геморроя. Никакие наследования за собой не тянут. Так что повторяющийся код это нормально.

И вообще красивость кода это не отсутствие повторений - а лёгкость понимания кода и лёгкость дальнейшей разработки.

А то возьмёшь такой красивый код без повторений, как добавишь новую фичу -и у тебя всё по каскада как начнёт рушится. Попробуйте интерфейс изменить - который реализуют 100500 классов.

Что по поводу поиска слов-выражений использую добрый старый totalcomander->поиск файлов->с текстом. Всё удобно и не надо ничего изобретать.

Иногда надо поменять название переменной/класса или что то другое (например мне для процедур SQL-ных нужно было) и что бы вручную не искать всё и менять, написал за 10 минут утилитку замены текста. Может кому пригодится. Т.к. писал 10 минут то не особо там смотрел за растягивание и прочее, мне не нужно было.
Вложения
Тип файла: 7z Debug.7z (11.6 Кб, 0 просмотров)
0
Эксперт .NET
 Аватар для Usaga
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
20.10.2020, 10:41
Цитата Сообщение от developer123 Посмотреть сообщение
Короче хочу довести мысль что в результате получается столько if - что потом смотришь на эту кашу и думаешь, а оно мне надо. И делаешь 2 разных класса. В них есть одинаковый код. Зато остальное разное.
Э, не) Это не есть копипаста. У разных сущностей могут совпадать некоторые атрибуты. Это не значит, что они имеют общую базу. У города есть название и у планеты есть название. Это не делает эти сущности родственным. Соответственно, и код по работе с такими атрибутами может повторяться для другой сущности. Конечно, если этого кода не особо много. Если много, то его всё равно можно вынести куда-то в общее место, например в хелпер.
0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
20.10.2020, 10:54
Цитата Сообщение от Usaga Посмотреть сообщение
Э, не) Это не есть копипаста
Тогда надо уточнить что есть копипаста. Например есть одинаковый метод - и например нету никакого смысла для метода делать отдельный класс. Который по своей сути является тупо контейнером. И эти 2 метода лежат в 2 отдельных классах. Всё равно на уровне скомпилированой программы - будет только один метод. Компилятор удалит повторения.

Да и честно - копипаста или нет это дела конкретного программиста, конкретной команды, конкретного кодевьювера. Хотят делают, хотят не делают. Сейчас совершенно другие ценности. Чем быстрее и дешевле тем лучше прибыльнее.

Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
то не делает эти сущности родственным.
Вся проблема в том что в начале, когда они пустые, они очень даже родственные. Но вот со временем они становятся настолько не родственные, что гемороя больше чем пользы.
0
Эксперт .NET
 Аватар для Usaga
14077 / 9294 / 1347
Регистрация: 21.01.2016
Сообщений: 34,891
20.10.2020, 10:56
Цитата Сообщение от developer123 Посмотреть сообщение
Тогда надо уточнить что есть копипаста.
Скажем так, код, который сложнее совсем уж тривиального.

Цитата Сообщение от developer123 Посмотреть сообщение
Компилятор удалит повторения.
С чего бы это?

Цитата Сообщение от developer123 Посмотреть сообщение
Вся проблема в том что в начале, когда они пустые, они очень даже родственные. Но вот со временем они становятся настолько не родственные, что гемороя больше чем пользы.
Ну нет. Сущности или относятся к одной иерархии или нет. Это вы можете решить уже на стадии проектирования. Для этого тонны кода писать не надо.
0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
20.10.2020, 11:04
Цитата Сообщение от Usaga Посмотреть сообщение
С чего бы это?
Ну как с чего. Вроде компиляторы так работаю. Складывают одинаковые куски выполняемой программы по адресам. Потом просто вызывают этот адрес. И он выполняется. Все переменные лежат на стеке. Я конечно не спец в компиляторах, но вот то что они оптимизируют одинаковые куски кода вроде как знаю. Если вы не имеете ввиду отключить полностью оптимизацию. Даже в этом случае не думаю что дублирование кода или не дублирование что то поменяет.

Цитата Сообщение от Usaga Посмотреть сообщение
Это вы можете решить уже на стадии проектирования.
Как показывает практика всё красиво идёт до определённого момента когда прилетает задача сделать совершенно офигительную фичу для клиента конкретно для этого класса. И пофиг что она полностью ломает логику. Менеджерам насрать на код. Им важна прибыль. И потом ещё и ещё.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
20.10.2020, 11:05  [ТС]
Цитата Сообщение от developer123 Посмотреть сообщение
Что по поводу поиска слов-выражений использую добрый старый totalcomander->поиск файлов->с текстом. Всё удобно и не надо ничего изобретать.
Так надо знать, что искать. А моя программа ищет именно дубликаты, вне зависимости от содержания. Написано же, она основана на Лемпеле-Зиве, для которого это основное назначение.
Билд третий. Если код повторяется несколько раз подряд, тривиальность игнорируется и считаются фрагменты начиная от двух лексем. Также теперь есть автономная сборка, но файл весит 137 МБ.
Вложения
Тип файла: rar DuplicateFinder Preview 1.0.rar (72.7 Кб, 3 просмотров)
Тип файла: rar DuplicateFinder Preview 1.0 Autonomous.part1.rar (24.00 Мб, 2 просмотров)
Тип файла: rar DuplicateFinder Preview 1.0 Autonomous.part2.rar (19.11 Мб, 2 просмотров)
0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
20.10.2020, 11:42
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А моя программа ищет именно дубликаты, вне зависимости от содержания.
Я конечно не репрезентативная выборка, но вот честно мне за мою практику не приходил в голову этот кейс. Может он и не нужен? Хотя взять те же криптовалюты тоже никому не нужны были, но как бабло можно зарабатывать стало, сразу всем нужны )))

Добавлено через 3 минуты
Upd. Мне даже стало интересно что ваша программа найдёт в одном мегапроекте. И я её скачал.

И..... Где выбор папки? Вы предлагаете вставить тупо текст

Вы хоть немного представляете как будут пользоваться вашей программой другие люди?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
20.10.2020, 12:39  [ТС]
Билд четвертый. Снова как на основе .NET Core, так и автономный. Теперь можно перетащить файл или даже несколько файлов. После этого даже не нужно нажимать на кнопку, поиск дубликатов запускается сразу после отпускания левой кнопки мыши.
Вложения
Тип файла: rar DuplicateFinder Preview 1.0.rar (73.2 Кб, 0 просмотров)
Тип файла: rar DuplicateFinder Preview 1.0 Autonomous.rar (23.23 Мб, 10 просмотров)
0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
20.10.2020, 12:47
Нужна папка. Вы же позиционируете программу как поиск повторяющихся кусков кода. И много вы видели проектов состоящих из 1 файла?

Добавлено через 3 минуты
И да, .net core forms - это пока непонятно зачем созданая вещь. Работает только под фортачками - где пока что основное это framework - и. Думаю для отладки выкатили, конечная цель же кроссплатформенность

Так что такую утилиту следовало делать под framework
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2020, 12:47
Помогаю со студенческими работами здесь

Preview Panel
Всем привет. Сталкивался ли кто нибудь с задачей отображения странички как почта в толстом клиенте, с возможностью превью панели? Рылся...

Preview Pane
Коллеги! Подскажите имеется ли возможность узнать что документ просматривается в Preview Pane, нужно скрыть кнопки или выдать коварное...

Вывод preview
Здравствуйте. Имеется 2 странички. index.php и classes.php есть задание: Для всех типов статей добавить новый атрибут: $preview. В...

Ошибка FastReport Preview
Всем привет! Вобщем хочу я вывести отчет в FastReport но выдает ошибку. В чем дело не знаю работал с ним последний раз года 3 назад. А...

Получить preview картинок
Как получить preview картинки как в приложении? нашел только как получить иконку pictureBox1.Image =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru