CheckSum, FAR CRC32/MD5 Plugin |
Добро пожаловать, гость ( Вход | Регистрация )
CheckSum, FAR CRC32/MD5 Plugin |
-=CHE@TER=- |
Jul 14 2008, 07:25
Сообщение
#1
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
If you wanna job done right - you gonna do it yourself ©
Как я уже говорил, заколебало каждый раз лезть в Total Commander чтобы проверить контрольную сумму. Для FAR плагины были, но они не устраивали, т.к. тоже криво были сделаны. В конце концов сделали свой плагин, называется CheckSum. Его достоинства по сравнениию с существующими (ради чего создавался): 1) Возможность создавать как .SFV (CRC32), так и .MD5 (MD5) файлы с контрольными суммами 2) Возможность проверять CRC32 по имени!!! - больше не нужно считать сумму в файл и, затем, смореть его, а потом удалять! Работает только на файлах такого вида: Some.File.Name[12FACCB4].avi т.е. маска: *?########?.* Просто офигенно удобно! 3) Возможность начать проверку просто нажав ENTER на .SFV / .MD5 файле (в некоторых плагинах есть). 4) Возможность сравнить контрольную сумму файла с той, что находится в буфере обмена (появилась с версии 0.21) Короче, там ещё много всякого - см. checksum.pas. Файлы на TeamFTP Для работы поместить .DLL файл в каталог: C:\Program Files\Far\Plugins\CheckSum\checksum.dll после чего перезапустить FAR. ToDo List Спасибо сказали:
|
Siberian GRemlin |
Jul 14 2008, 10:10
Сообщение
#2
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
I you wanna job done right - you gonna do it yourself © "If..."? Спасибо сказали:
|
-=CHE@TER=- |
Jul 14 2008, 10:32
Сообщение
#3
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
"If..."? That's right!Кстати, поговорил сейчас с товарищем, который тот нестандартный CRC32 файл дал - оказывается он сам его сделал перечислив имена и CRC от какой-то встроенной в иксы тулзы, так что добавление в to do: - Check TAB with SPACE chars in non standard CheckSum files. Т.к. товарищ логично заметил, что там могут быть не только пробелы, но и символы табуляции. |
Grom PE |
Jul 14 2008, 16:34
Сообщение
#4
|
Advanced Member Группа: CTPAX-X Сообщений: 84 Регистрация: 7-February 08 Из: i@grompe.org.ru Пользователь №: 3,120 Спасибо сказали: 95 раз(а) |
Спасибо за плагин, пригодится.
Заодно поиздевался над исходниками: — перенес/заменил Initialization у всех модулей; — добавил asm..end в checksum.pas; — заменил md5.pas своим, быстрым (очень заметно) и маленьким; Теперь компилится с dcc7hack, и даже работает. Для совместимости с обычным компилятором оставил старый код в {$IFDEF}. Залито на TeamFTP. Спасибо сказали:
|
-=CHE@TER=- |
Jul 14 2008, 20:35
Сообщение
#5
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Grom PE!
Во, спасибо большое! Практически в два раза похудело. P.S. Пора, пора бы уже заняться написанием раздела CTPAX-X Soft для сайта... |
-=CHE@TER=- |
Aug 29 2008, 09:32
Сообщение
#6
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Товарищи!
В связи с тем, что комментарии к программе на сайте уже ни в какие ворота не лезут есть предложение разместить тему на форуме, дабы там обсуждать непосредственно вместе с теми, кто программу использует. |
Siberian GRemlin |
Aug 30 2008, 07:12
Сообщение
#7
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Если ты хочешь чтобы обсуждали программы с сайта на форуме, то я думаю, что это будет удобно.
Спасибо сказали:
|
Капитан Фокин |
Sep 3 2008, 05:34
Сообщение
#8
|
Member Группа: Authorized Сообщений: 18 Регистрация: 2-September 08 Пользователь №: 11,780 Спасибо сказали: 9 раз(а) |
Товарищи! В связи с тем, что комментарии к программе на сайте уже ни в какие ворота не лезут есть предложение разместить тему на форуме, дабы там обсуждать непосредственно вместе с теми, кто программу использует. Хочу повторить основные тезисы из каментов: 1. При создании чек-суммы для текущего файла, по-моему, лучше делать так: Example.exe Example.exe.md5 это просто визуально выделяет файл суммы при браузинге. 2. Нашел глючок - встаем на директорию, жмем "Вычислить сумму", получаем сообщение "Выделенные элементы ...", жмем "Ок" - и получаем _выделение_ директории. Есть разница между "оставить выделение" (в случае невозможности обработать, ошибки и проч.) и "установить выделение". Я считаю, что если элемент не был выделен, то его не надо выделять принудительно. 3. Проверить, является ли файл файлом суммы очень просто (во всяком случае, сразу отсеять заведомые "подставки" типа .exe, .avi и т.п.). Набор символов в представлении суммы MD5 и именах файлов ограничен. И если мы встречаем "запрещенный" символ - значит это явно не файл чек-суммы. Спасибо сказали:
|
-=CHE@TER=- |
Sep 3 2008, 13:55
Сообщение
#9
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Во, вот тут можно нормально отвечать уже с предпросмотром ответа и т.д.
По поводу вопросов: 1. Делается с полпинка. 2. Делается с пинка. 3. Тут надо подумать, прежде чем пинать, но, в общем, тоже сделать можно. В версии 0.11 много было кривого - это была начальная версия. В версии 0.21 был полностью переписан алгоритм создания контрольной суммы - теперь он аккуратный и проблем с ним не должно возникать никаких. Вот сейчас надо заняться переписыванием алгоритма проверки, чтобы с ним тоже проблем не было и тогда будет полностью нормальная версия. А затруднение с пунктом 3 возникает в силу того, что в CRC32, например, могут быть комментарии (строчки начинающиеся на ";") да и в CRC32/MD5 могут быть просто пустые строки. В общем уже одна идея появилась - фильтр запрещённых символов (например, если в файле есть символ с кодом меньше 32 (пробел) и это не 13 (возврат каретки) и не 10 (перевод строки) и не 9 (табуляция)) - то это бинарный файл, а не файл суммы и, соответственно, проверять его не надо. |
Капитан Фокин |
Sep 4 2008, 05:38
Сообщение
#10
|
Member Группа: Authorized Сообщений: 18 Регистрация: 2-September 08 Пользователь №: 11,780 Спасибо сказали: 9 раз(а) |
С нетерпением жду обновленных версий!
Кстати, долго думал над Вашей фразой про "многопоточность при копировании файлов FAR-ом"... Есть вопрос. Расчет чек-суммы идет в разы дольше, чем простое копирование (а HDD является одним из медленных устройств в системе). Следовательно, либо: 1. Процесс является "процессороёмким" и, значит, есть смысл подумать над многопоточностью; 2. Насколько оптимально идет чтение файла, для которого считаем сумму ? Не хочу показаться грубым, но не идет ли чтение побайтно ? |
-=CHE@TER=- |
Sep 4 2008, 15:22
Сообщение
#11
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
С нетерпением жду обновленных версий! П.п. 1, 2, из предыдущего поста, сделаны, сейчас над 3 думаем.Кстати, долго думал над Вашей фразой про "многопоточность при копировании файлов FAR-ом"... Есть вопрос. Расчет чек-суммы идет в разы дольше, чем простое копирование (а HDD является одним из медленных устройств в системе). Следовательно, либо: Ну, по порядку:1. Процесс является "процессороёмким" и, значит, есть смысл подумать над многопоточностью; 2. Насколько оптимально идет чтение файла, для которого считаем сумму ? Не хочу показаться грубым, но не идет ли чтение побайтно ? 1. Контрольная сумма, таки да, является вычислением со всякими арифметическими операциями, так что быстрее она будет или медленнее копирования зависит от скорости работы жёсткого диска и скорости работы процессора. Если тормозной винт, но крутой процессор - копирование будет дольше, чем высчитывание контрольной суммы, т.к. копирование есть чтение (тормозно) и запись (тормозно) = тормозно*2, в то время как подсчёт контрольно суммы есть только чтение (тормозно) и некоторые арифметические операции (быстро). И наоборот - в случае тормозного проца и быстрого бердана, копирование будет быстрее и т.д. Так что дать какой-то конкретный ответ сложно. Оговорюсь, что алгоритм MD5 Grom PE переделал и он при подсчёте развивает просто адскую скорость по сравнению с тем, что было в версии 0.1 (не релизилась в открытом доступе). CRC32 уже в 0.1 был переделан с классов на WinAPI, но тем не менее код там не идеальный и его можно улучшить, правда дикого прироста производительности это вряд ли даст, но выжать кое что всё же можно. 2. Чтение файла идёт через FileMapping (пока только в MD5 - CRC32, как уже сказал, надо переделывать) - если это о чём-то говорит, т.е. винда сама мапит (буфферизует частями) файл в оперативную память по мере чтения - считается, что она делает это наиболее оптимальным способом. Ставить тесты и выяснять так ли это желания нет, тем более, что, наверняка, можно выжать производительности самим занявшись буфферизацией, но её придётся подгонять под каждый компьютер при помощи таких параметров как размер буфера и т.д. - и, по моему мнению, овчинка выделенки стоить не будет. |
Капитан Фокин |
Sep 16 2008, 05:27
Сообщение
#12
|
Member Группа: Authorized Сообщений: 18 Регистрация: 2-September 08 Пользователь №: 11,780 Спасибо сказали: 9 раз(а) |
Наблюдал интересную ситуацию или "битва титанов".
CPU: C2D 8400 MEM: 2Gb HDD: SATA 250Gb (16Mb) Запускаем запись в Nero 8.х нескольких файлов ~4Gb на скорости 4х (DVD-RW). После того, как процесс достиг отметки 50% запускаем в Far проверку MD5 нескольких файлов (5шт). На проверке 3-го файла началось - ультра-буфер в Nero опустошился, лазер выключился, Nero начал лихорадочно заполнять ультра-буфер (который в памяти) со скоростью 1 "кубик" прогресс-бара в секунду. При этом процесс в Far проверки MD5 "замер"... После прим. 30 сек. увлеченного наблюдения за "битвой титанов" процесс Far был принудительно завершен. Nero ожил мгновенно и продолжил запись... |
-=CHE@TER=- |
Sep 16 2008, 12:00
Сообщение
#13
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Наблюдал интересную ситуацию или "битва титанов". Ну, дык, а чтож ты хочешь? (*улыбается*) Весь проц на считывание файла и подсчёт контрольно суммы сожрался, так что на запись диска ресурсов уже не было.Конечно, можно как-нибудь извернуться, чтобы процесс проверки/создания суммы работал, когда ресурсы есть, но смысла думаю особого нет - лучше не нагружать систему одновременно такими действиями. Никто же не прошивает BIOS из Windows, а сам в это время в Quake III: Arena режется? Это хорошо иллюстрирует анекдот: - Пап, а пап! Покажи многозадачность в Windows? - Погоди, сынок, сейчас дискетка доформатируется... Добвалено: Вышла версия 0.22. Все изменения описаны в соответствующем текстовом файле. |
Капитан Фокин |
Sep 16 2008, 13:39
Сообщение
#14
|
Member Группа: Authorized Сообщений: 18 Регистрация: 2-September 08 Пользователь №: 11,780 Спасибо сказали: 9 раз(а) |
Добвалено: Вышла версия 0.22. Все изменения описаны в соответствующем текстовом файле. Спасибо! Замеченные ранее "шероховатости" сглажены. Ищем новые глюки :-) Каким образом реализовали проверку "валидности" файла суммы, если не секрет ? P.S. Глюк уже нашел. Причем премерзкий. Захожу в директорию, где уже есть файл CheckSum.md5, выделяю несколько файлов, выбираю "Вычислить сумму" - получаю красное окно ошибки с сообщением "Плагин будет выгружен". Теперь при попытке вычислить сумму в любом месте на любом наборе файлов получаю все то же красное окно с адресом 0х25512551 и выгрузкой плагина. Пришлось откатиться к предыдущей версии... Спасибо сказали:
|
-=CHE@TER=- |
Sep 16 2008, 16:41
Сообщение
#15
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
P.S. Глюк уже нашел. Причем премерзкий. Захожу в директорию, где уже есть файл CheckSum.md5, выделяю несколько файлов, выбираю "Вычислить сумму" - получаю красное окно ошибки с сообщением "Плагин будет выгружен". Теперь при попытке вычислить сумму в любом месте на любом наборе файлов получаю все то же красное окно с адресом 0х25512551 и выгрузкой плагина. Пришлось откатиться к предыдущей версии... Опа... Спасибо большое. Этот баг возник в связке с DCC32Hack.Почему-то в FAR глючит AdvControl()... заголовочный файл для Delphi/Pascal кривой (plugin.pas). Осталось только понять где. А пока что код отвечающий за получение цвета убран, ибо адрес AdvControl либо NULL, либо (в связке с DCC32Hack) там мусор. Версия 0.23 на сайте. Приносим извинения за причинённые неудобства. |
Капитан Фокин |
Sep 17 2008, 05:50
Сообщение
#16
|
Member Группа: Authorized Сообщений: 18 Регистрация: 2-September 08 Пользователь №: 11,780 Спасибо сказали: 9 раз(а) |
Версия 0.23 на сайте. Спасибо за оперативность! Проверил версию 0.23 - пока все четко, ошибка выгрузки плагина пофиксена. В целом, если не "всплывут" дополнительные глюки, плагин можно считать вполне законченным (ну, или таки добавить SH1 :-) P.S. Задним числом прочел ToDo - подсчет суммы для 4Гб файлов смысл имеет. Образы ДВД-дисков, например Спасибо сказали:
|
-=CHE@TER=- |
Sep 17 2008, 09:20
Сообщение
#17
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Спасибо за оперативность! Оперативность - наше всё. (*улыбается*)ну, или таки добавить SH1 :-) Всё можно, но сначало хотелось бы довести до ума то что есть.P.S. Задним числом прочел ToDo - подсчет суммы для 4Гб файлов смысл имеет. Образы ДВД-дисков, например Там вопрос стоял немного по другому - проверить правильно ли считает. Т.е. оно считает, нужно только проверить правильно или нет. Просто файлов под рукой таких больших не было, поэтому, кстати, и предупреждение на сайте висит, что плагин полностью не оттестирован.Кстати, а что насчёт остальных пунктов из ToDo? На всякий случай переведу на русский: QUOTE - Диалог для возможности ввода имени файла для контрольно суммы (сейчас оно создаётся в CheckSum.[sfv/md5]) По умолчанию там будет имя файла с .sfv/.md5 расширением, если один файл выделен или имя каталога где находятся выделенные файлы, если их больше одного, наконец имя "CheckSum", если выделенные файлы находятся в корне диска. Если устраивает текущее имя - просто нажимаем ENTER, если нет - меняем. - Реализовать возможность пользователю вручную выбрать те файлы, которые он хочет проверить из файла контрольной суммы через диалог (по умолчанию будут выделены все - и можно будет просто ENTER нажать для продолжения, если ничего менять не нужно). //ИМХО, думаю удобно, особенно если нужно проверить один-два файла, чтобы не обрабатывать все. - Сделать прогресс-бар при проверке (текущий файл % / файл 3 из 10 / завершено на %) // Пример: Текущий файл: 10% обработано / файл 3 из 10 / завершено на 32%) - Сделать Callback-функцию для CRC32/MD5 алгоритмов, чтобы их можно было прервать по ESC во время проверки файла, не дожидаясь пока файл проверится до конца (если очень большой). - В конце проверки диалог со статистикой по файлам (X файлов OK, Y файлов не совпала сумма, Z файлов не найдено) Чтобы не жать ENTER для каждого повреждённого файла, а запустить проверку, пойти чай попить, вернуться и прочитать отчёт сразу по всем. Хотелось бы туда ещё всунуть две кнопки: ОК и СОХРАНИТЬ - в случае нажатия на первую отчёт закрывается (она будет по умолчанию подсвечена, так что ничего по сравнения с текущей версией не изменится - нажал ENTER и всё), а в случае нажатия на вторую - его можно будет сохранить в файл (если было очень много ошибок и все их не запомнишь), чтобы потом отдельно уже разобраться что к чему. - Написать-таки, справку к плагину (он же help). Каким образом реализовали проверку "валидности" файла суммы, если не секрет ? Ну, если в прочитанной строке есть левые символы или она не удовлетворяет формату (у контрольных сумм всегда только цифры и буквы от A до F) - то строка считается битой и проверка дальше не идёт. Ещё отсев строк-комментариев для CRC32, и т.д. |
Капитан Фокин |
Sep 17 2008, 10:26
Сообщение
#18
|
Member Группа: Authorized Сообщений: 18 Регистрация: 2-September 08 Пользователь №: 11,780 Спасибо сказали: 9 раз(а) |
Кстати, а что насчёт остальных пунктов из ToDo? На всякий случай переведу на русский: Попробую высказать свои соображения: QUOTE - Диалог для возможности ввода имени файла для контрольно суммы Это потребует создания .ini (.cfg) файла или записи реестра для сохранения введенного имени (это логично). А оно надо ? Лично я не уверен. В конце концов не трудно и руками переименовать для особо экзотических случаев. QUOTE - Реализовать возможность пользователю вручную выбрать те файлы, которые он хочет проверить из файла контрольной суммы через диалог (по умолчанию будут выделены все - и можно будет просто ENTER нажать для продолжения, если ничего менять не нужно). Вы себе отчетливо представляете ситуацию, когда нужно проверить именно 5 файлов из 20-ти ? А для проверки выборочного файла уже реализована проверка из буфера обмена. QUOTE - Сделать прогресс-бар при проверке (текущий файл % / файл 3 из 10 / завершено на %) - Сделать Callback-функцию для CRC32/MD5 алгоритмов, чтобы их можно было прервать по ESC во время проверки файла, не дожидаясь пока файл проверится до конца (если очень большой). Это желательно, если не сильно "утяжелит" плагин. QUOTE - В конце проверки диалог со статистикой по файлам (X файлов OK, Y файлов не совпала сумма, Z файлов не найдено) Чтобы не жать ENTER для каждого повреждённого файла, а запустить проверку, пойти чай попить, вернуться и прочитать отчёт сразу по всем. Хотелось бы туда ещё всунуть две кнопки: ОК и СОХРАНИТЬ - в случае нажатия на первую отчёт закрывается (она будет по умолчанию подсвечена, так что ничего по сравнения с текущей версией не изменится - нажал ENTER и всё), а в случае нажатия на вторую - его можно будет сохранить в файл (если было очень много ошибок и все их не запомнишь), чтобы потом отдельно уже разобраться что к чему. Потоковая проверка без "спотыкания" на каждом несовпадении - хорошая идея. В целом поддерживаю, но не "Сохранить", а "Выделить непрошедшие проверку" (в смысле - цветом в Far-е, как по "Insert") . Спасибо сказали:
|
-=CHE@TER=- |
Sep 17 2008, 11:50
Сообщение
#19
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Это потребует создания .ini (.cfg) файла или записи реестра для сохранения введенного имени (это логично). А оно надо ? Лично я не уверен. В конце концов не трудно и руками переименовать для особо экзотических случаев. Ну, создание каких-либо записей это не потребует - ещё раз перечитайте как будет формироваться имя файла в этом диалоге. В любом случае - это ToDo, так что никто на той или иной возможности не настаивает - просто подумалось, что было бы удобно.Вы себе отчетливо представляете ситуацию, когда нужно проверить именно 5 файлов из 20-ти ? А для проверки выборочного файла уже реализована проверка из буфера обмена. Мало ли - может кому понадобится, хотя с другой стороны - да, один раз проверят всё, затем битые файлы можно и отдельно проверить.Убедительно. (*улыбается*) Это желательно, если не сильно "утяжелит" плагин. Если и утяжелит, то совсем не сильно - писанины правда много будет.Потоковая проверка без "спотыкания" на каждом несовпадении - хорошая идея. В целом поддерживаю, но не "Сохранить", а "Выделить непрошедшие проверку" (в смысле - цветом в Far-е, как по "Insert") . А как быть с теми файлами, которые отсутствовали?Диалог, который предлагается сделать, должен выглядеть как-нибудь так: CODE |------------------------------------| | Отчёт | |------------------------|-----------| | Имя файла | Статус | |------------------------|-----------| | filename1.ext | ОК | | filename2.ext | Ошибка | | filename2.ext |Нет доступа| | filename3.ext | Не найден | |------------------------|-----------| | OK: 1, Ошибок: 2, Не найдено: 1| |------------------------------------| | [ОК] [Сохранить] | |------------------------------------| При большом количестве файлов список можно будет листать стрелками вверх/вниз, PgUp/PgDn, Home/End. А влево/вправо - выбор кнопки. Не знаю, на сколько реально такое сделать, но хотелось бы. |
Капитан Фокин |
Sep 17 2008, 12:29
Сообщение
#20
|
Member Группа: Authorized Сообщений: 18 Регистрация: 2-September 08 Пользователь №: 11,780 Спасибо сказали: 9 раз(а) |
К вопросу об обработке больших файлов - не работает! Взял файл размером ~25Гб, запустил вычисление чек-суммы. Прим. через 18 сек был готов результат. Это абсолютно невозможно, потому что файл только читается гораздо дольше.
С чем сравнивал: Плагин: http://plugring.farmanager.com/downld/files/md5plug140.zip (исходники в комплекте) Машина: AMD x2 4200+ Расчет чек-суммы занял ~12,5 минут (причем, WinSrv2k3 худо-бедно пытается параллелить процесс между ядрами) Относительно улучшений - не стоит тратить силы на условно-нужные "фичи". Прогресс-бар не стоит недели работы :-) А статистика - потенциальная "черная дыра" для всевозможных мелких глючков, доработок и придирок. Но это, разумеется, ИМХО. QUOTE А как быть с теми файлами, которые отсутствовали? Они уже отсутствуют - нечего проверять :-)))))) Спасибо сказали:
|
Упрощённая версия | Сейчас: 21st December 2024 - 17:49 |