Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции R50.SYSOP
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции R50.SYSOP с датами от 13 Jul 13 00:00:02 до 13 Jul 13 00:00:02, всего сообщений: 14529
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 1437 из 14529 ======================================= R50.SYSOP =
От   : Sergey Sokoloff                  2:5063/88          03 Apr 14 09:58:08
Кому : Oleg Redut                                          03 Apr 14 09:58:08
Тема : Файлообмен по Фидонету
FGHI : area://R50.SYSOP?msgid=2:5063/88+533cfee2
На   : area://R50.SYSOP?msgid=2:5000/111+5338da59
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://R50.SYSOP?msgid=2:5020/545+533da1a1
Ответ: area://R50.SYSOP?msgid=2:5022/2+533ef2ff
==============================================================================
     ════╤╤═════        Модсостав от псевдонима отличить не смог бы nick?
   //│/│ ││ │/│/        Что ж!.. не Mithgol the Webmaster я, когда это постиг.

Так было 09:59 31 Mar 14 написано от Oleg Redut к John Zaicev:

OR>>>     Для каждой фэхи по аккаунту. Кто может открыть с ноды
OR>>> синхронизацию с облаком - может это сделать. Будет даже несколько
OR>>> источников, опять же с тем же фалом-списком этих ресурсов.

JZ>>  Всё гораздо проще. Для каждого файла, прошедшего по фэхе вместе
JZ>> с анонсами постится ссылка ed2k. В чём проблемы?

OR>     Всё в том же. В автоматизации постинга этих самых ссылок.

Автоматизация постинга этих самых ссылок потребует, кажется, трёх только шагов:

1) при приходе файла должен запускаться генератор ed2k-гиперссылок;

2) генератор ed2k-гиперссылок должен брать файл и ed2k-гиперссылку выводить;

3) выведенная им гиперссылка должна поступать в файл анонса или в эху.

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

О последнем из трёх шагов можно сказать, что публикация гиперссылки в эхе
(и вообще публикации какого угодно текста в эхе) решается командою `hpt post`
или её аналогом от другого эхопроцессора. Помещение ссылки в существующий текст
анонса ── задача несколько более сложная, но при желании может и это удаться
через сочинение своего генератора анонсов, скармливающего их в `hpt post`, если
только он отыщет где взять все необходимые для анонса данные. (Чтобы понять,
насколько это реально, следует сопоставить ответы на два вопроса: во-первых,
что принято упоминать в таком анонсе? ── во-вторых, может ли файлэхопроцессор
отдать *все* эти упоминаемые данные во внешнюю программу после прихода файла?)

Второй и средний из этих трёх шагов является несколько более сложною задачею.
В виде GUI (графического интерфейса пользователя) задача эта была вполне решена
в 2004 ── 2006 годах с появлением программы LinkCreator:

http://sourceforge.net/projects/emule/files/LinkCreator/0.7/LinkCreator0.7.zip

Однако очевидно, что для автоматической работы такая программа должна будет
использовать CLI (интерфейс командной строки), а не GUI; например, должна будет
принять имя файла из командной строки, а URL его вывести на стандартный выход.

Решение задачи в этой форме, как мне кажется, никогда так и не состоялось
полностью (по крайней мере, в виде свободного кросс-платформенного приложения
с открытым исходным кодом), и его придётся делать с нуля, сочинив генератор
всех важных частей ed2k-гиперссылки, по адресу http://habrahabr.ru/post/118171/
перечисленных три года назад мною.

Первой частью является URL-кодированное имя файла; эта часть тривиальна, и её
решение есть в любой библиотеке, предназначенной для работы с URLами; например,
в языке JavaScript для этой цели можно использовать функцию encodeURIComponent,
по адресу http://mzl.la/1jDiP65 описанную.

Второй частью является размер файла в байтах; эта часть ещё более тривиальна:
функции для выяснения размера файлов есть в любой операционной системе. Скажем,
на языке JavaScript можно использовать движок Node.js и вызвать метод stat
модуля fs: http://nodejs.org/docs/latest/api/fs.html#fs_fs_stat_path_callback

Третьей частью является итог MD4-хэширования всего файла (если размер файла
не превосходит 9500 килобайтов, то есть ровно 9 728 000 байтов) или же итог
MD4-хэширования строки, составленной из MD4-хэшей 9500-килобайтовых кусков
файла (последний из которых может быть и меньшего размера). Задача вычисления
хэша MD4 давно имеет готовое решение в любой библиотеке таких функций, которые связаны с шифрами; по адресу http://nodejs.org/docs/latest/api/crypto.html
можно убедиться, что на языке JavaScript можно использовать движок Node.js,
в API которого есть необходимые функции; такая обёртка вокруг этого API, какою
можно было бы легко воспользоваться для MD4-хэширования файла (или части файла
в виде буфера), также существует в виде стороннего модуля с открытым на GitHub
исходным кодом: https://github.com/timoxley/hash_file

Четвёртой частью (необязательною) является AICH-хэш, употребляемый некоторыми
современными ed2k-клиентами (например, eMule) для дополнительного контроля
целостности файла. Наличие этого параметра делает коллизии хэшей много менее
вероятными, а также упрощает коррекцию ошибок в случае нарушения целостности
файла при передаче, позволяя быстро выяснить, какой кусок ломтя повреждён
(и заново запросить один этот кусок вместо того, чтобы скачивать весь ломоть).

И сразу скажу ещё: если всерьёз полагать эту четвёртую часть необязательною, то
тогда можно считать неверными мои слова о том, что решение задачи не случилось
в форме свободного кросс-платформенного приложения с CLI-интерфейсом. Есть
по адресу http://ed2k-tools.sourceforge.net/ed2k_hash.shtml готовая программа,
через командную строку принимающая имя файла и выдающая ed2k-гиперссылку, и её
единственным недостатком является отсутствие хэша AICH в ed2k-гиперсссылке.
Программа эта (ed2k_hash) существует для Windows и Мака (в виде инсталляторов),
для Debian (в виде deb-пакета) и для остальных Линуксов (в виде RPM-пакета).

Если же всё же стремиться к вычислению и AICH-хэша, то тогда поневоле придётся
каждый из 9500-килобайтовых кусков делить на куски по 180 килобайтов, каждому
из таких мелких кусков найти его хэш SHA-1, затем выстроить описанное по адресу
http://en.wikipedia.org/wiki/Merkle_tree дерево Мёркла и найти корневой хэш
этого дерева, затем либо использовать его, либо (если длина файла превосходит
9500 килобайтов) из корневых хэшей 9500-килобайтовых кусков построить ещё одно дерево Мёркла и его корневой хэш считать AICH-хэшем файла.

Официальное описание AICH eMule находится вот где:

http://www.emule-project.net/home/perl/help.cgi?l=1&topic_id=589&rm=show_topic

Википедическое описание AICH находится вот где:

http://en.wikipedia.org/wiki/AICH#Basic_concepts

Ранее упомянутый модуль https://github.com/timoxley/hash_file даёт (опираясь
на возможности API, по адресу http://nodejs.org/docs/latest/api/crypto.html
документированного) вычислять хэш SHA-1 джаваскриптом. Для построения деревьев
Мёркла существует по адресу https://github.com/c-geek/merkle свободный модуль
с открытым исходным кодом, также поддерживающий хэширование SHA-1.

Всё вышеизложенное постепенно подводит к мысли о том, что задача чтения файла
с созданием ed2k-гиперссылки на его основе ── это задача, поддающаяся решению
на языке JavaScript, и решение её будет состоять из комбинирования нескольких
готовых модулей с открытым исходным кодом. Единственная часть решения, которую
всё же придётся сочинять самостоятельно ── это чтение 9500-килобайтовых (для
хэша ed2k) и 180-килобайтовых (для хэша AICH) частей обрабатываемого файла.

Эта мысль может оказаться чрезмерно оптимистическою и неверною, например, если
деревья Мёркла, модулем https://github.com/c-geek/merkle выстраиваемые, чем-то
существенным отличаются от деревьев Мёркла, выстраиваемых в программе eMule.
По адресу http://mldonkey.sourceforge.net/EDKAich можно обнаружить, например,
упоминание того, что распределение нечётного числа элементов по ветвям дерева
(налево идёт большая часть их или направо) зависит от того, в левой или правой
части дерева находился родительский узел дерева. У меня нет ещё понимания того,
влияет ли это на итоги вычисления корневого хэша или же только на направление
обхода дерева при его употреблении в файлообмене (скажем, при коррекции ошибок
в скачанном файле или части файла).

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


Mithgol the Webmaster. ═[Mithgol.Ru]═[FGHI]═[Ru.Mozilla]═[Team А я меняю subj]

--- Эшелону:  наступательная информация о боевых действиях  NAIA SAPM ASU ASTS
* Origin: ── А остальное?... ── А остальное карбиды вольфрама!!.. (2:5063/88)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.147191 секунды