PDA

Показать полную графическую версию : [техзадание] Распространение обновления для CHM файла


Страниц : [1] 2 3 4

Vadikan
26-09-2006, 08:31
Доброго времени суток!

Возможно, тема не совсем соответствует данному форуму, но я его выбрал намеренно. Во-первых, речь все таки об обновлении, а во-вторых - здесь наиболее квалифицированная аудитория для решения подобной задачи :) Так что прошу модераторов отнестись с пониманием, а участиков - помочь в решении поставленной задачи. К делу!

Общая информация

Речь идет о CHM (http://soft.oszone.net/program/2037/) файле, в котором собраны статьи клуба переводчиков OSZone.net (ссылка в подписи). Размер файла пока невелик, но расти он будет достаточно быстро - рано или поздно возникнет ситуация, при которой посетители могут не захотеть загружать файл весом в 15-20 мб ради 5 новых статей. В сязи с этим возникла идея выпуска ежемесячных обновлений для CHM файла. Другими словами, посетитель загружает базовый файл, а впоследствии загружает только обновления небольшого размера. Безусловно, полный файл также будет предлагаться для загрузки.

Задача

Нужно претворить в жизнь следующую идею. Посетитель загружает обновление, запускает его, указывает папку, где находится базовый файл и по окончании процесса обновления получает новый CHM файл. Очень желательно использовать для решения задачи свободное или бесплатное ПО.

Примерный алгоритм действий

Очевидно, для достижения поставленной задачи необходимо следующее

Декомпилировать имеющийся CHM
Скопировать файлы обновления в папку, где находятся извлеченные из CHM файлы
Скомпилировать CHM заново


Дополнительная информация

Безусловно, необходимо будет выполнить декомпиляцию CHM из командной строки. Это можно осуществить следующим образом:
HH.EXE -decompile D:/xTemp/decompile-folder C:/xTemp/XMLconvert.chmКомпилируется файл так:
hhc foobar.hhpHTMLHelp command-line (http://www.help-info.de/en/Help_Info_HTMLHelp/hh_command.htm)

Кроме того, нужно предусмотреть возможность возникновения ситуации, в которой пользователь укажет неверный путь к CHM файлу (а также прочие отклонения от алгоритма).

Просьба
Во-первых, нужно оценить жизнеспособность идеи. Не исключено, что она неудачна или просто неосуществима.

Во-вторых, в силу катастрофического недостатка свободного времени, я не могу уделить решению данной задачи достаточно внимания. Я буду очень признателен тем участникам конференции, которые возьмут на себя труд по реализации проекта и подготовят необходимый код (пакетные файлы, конфигурационные файлы 7-zip и т.д. и т.п.).

Я постараюсь ответить на любые вопросы, связанные с проектом. Составлением CHM файла занимается Blast (http://forum.oszone.net/member.php?u=3666), который также будет участвовать в обсуждении.

Спасибо за внимание!

serotka
26-09-2006, 14:11
Моё мнение, что если юзеру нужно, то он скачает любого рамера файл. А вообще я думаю, что то задумка хороша, но не получится, что при обнове полезут разные баги.

Vadikan
26-09-2006, 19:03
serotka
вообще я думаю, что то задумка хороша, но не получится, что при обнове полезут разные баги.Какие баги, например?

Boa Soft
26-09-2006, 20:48
Vadikan

В принципе, пакет для компиляции CHM распрастраняется MS свободно.

Алгоритм может быть простым. Декомпиляция в папку, добавление изменений и нового сценария пректа, компиляция.

Если могут возникнуть проблемы с распрастранением утилиты от MS, то можно просто дать ссылку на закачку. Около 1 mb.

А на счет багов - есть md5 для проверки верности исходных файлов перед компиляцией.

Blast
26-09-2006, 20:57
Boa Soft
ну в принципе компиляция/декомпиляция будет ведь производиться через hh.exe который присутствует в системе по умолчанию (Windows XP), то есть по идее сложностей с этим не должно возникнуть.
Вопрос скорее в том как и чем проконтролировать наличие исходного файла chm в указанной пользователем директории, ну и потом проверка нормально ли файл был декомпилирован (проверка по кол-ву файлов/каталогов) и компиляция в ту же папку на которую указывал пользователь с перезаписью лежащего там исходного chm
если это осуществимо конечно...

Boa Soft
26-09-2006, 21:18
Blast
Вопрос скорее в том как и чем проконтролировать наличие исходного файла chm в указанной пользователем директории, ну и потом проверка нормально ли файл был декомпилирован (проверка по кол-ву файлов/каталогов) и компиляция в ту же папку на которую указывал пользователь с перезаписью лежащего там исходного chm
если это осуществимо конечно...

IF [NOT] EXIST имя_файла команда

Dir, Findstr

Можно и утилитку написать. Для общего блага нежалко и времени потратить.

Vadikan
26-09-2006, 23:55
Boa Soft
Да в общем-то команды все известны, нужно просто все вместе сложить :)

Кстати, есть еще такой момент. Допустим, к базовому файлу уже выпущено N обновлений, каждое из которых можно скачать по отдельности и обновить им CHM. Пользователь их все загружает, и что - N раз будет проходить процесс декомпиляции/компиляции? Получается не очень изящно...

Boa Soft
27-09-2006, 02:25
Кстати, есть еще такой момент. Допустим, к базовому файлу уже выпущено N обновлений, каждое из которых можно скачать по отдельности и обновить им CHM. Пользователь их все загружает, и что - N раз будет проходить процесс декомпиляции/компиляции? Получается не очень изящно...

Нет, не нужно. Скачать. Распаковать в порядке возрастания в папку. Применить патч. За один проход.

Vadikan
27-09-2006, 02:48
Boa Soft
Тогда получается такая картина: обновления будут распространяться в архивах, а утилита/скрипт для обновления не будет входить в их состав, но будут предлагаться для загрузки отдельно. Я правильно понимаю?

Тогда учитывая то, что в каждом обновлении должен находиться файл проекта (*.HHP), на пользователя возлагается задача распаковки архивов в правильном порядке (иначе новый файл проекта может оказаться перезаписан более старым). Тогда уж надо каждое обновление в свою папку распаковывать, но это может усложнить скрипт обновления.

serotka
27-09-2006, 07:12
Vadikan
Какие баги, например?
При обновлении CHM. Скрипт может испортить CHM, я конечно понимаю, что скрипт будет протестирован, но при многократном обновлении как и в UpdatePack-XPSP2-Rus иногда может появится баг.

Vadikan
27-09-2006, 08:02
serotka
Ну на такие баги все можно списать. У некоторых, например, CHM вообще не запускаются :)

Unter
27-09-2006, 10:34
Тогда учитывая то, что в каждом обновлении должен находиться файл проекта (*.HHP), на пользователя возлагается задача распаковки архивов в правильном порядке (иначе новый файл проекта может оказаться перезаписан более старым). Тогда уж надо каждое обновление в свою папку распаковывать, но это может усложнить скрипт обновления.
Можно в имени файла проекта указывать идентификационный номер, а скрипт будет его обрабатывать в порядке нумерации.

BeLyI
27-09-2006, 15:43
Я думаю надо все статьи разбить на группы по сходной тематике и создать базовый chm с этими группами в содержании. И выпускать обновления по 3-10 статей в зависимости от обстоятельств (размера, схожести и т.д.), файл содержиния не заменять а дополнять. Обновления не должны зависить друг от друга. И в конечном итоге у каждого пользователя на компьютере будет свой файл chm с интересующими только его статьями, без лишних для него статей.
И не плохо было бы такой подход применить к оффлайн версии "Автоматическая установка Windows", потому что статьи из раздела Новичку и некоторых других в принципе не интересуют, а файл chm хотелось бы иметь на компьютере под рукой.

Vovchick1
27-09-2006, 17:04
Vadikan
Очевидно, для достижения поставленной задачи необходимо следующее

1. Декомпилировать имеющийся CHM
2. Скопировать файлы обновления в папку, где находятся извлеченные из CHM файлы
3. Скомпилировать CHM заново
Ещё может случиться что при выполнении декоппиляции имеющегося CHM (или копирования файлов обновления в папку), нехватит места на диске!!!! :shuffle:

Vadikan
27-09-2006, 17:45
UnterМожно в имени файла проекта указывать идентификационный номер, а скрипт будет его обрабатывать в порядке нумерации.Хорошая идея, но я как-то не могу сходу представить ее техническую реализацию.

BeLyI Я думаю надо все статьи разбить на группы по сходной тематике и создать базовый chm с этими группами в содержании. И выпускать обновления по 3-10 статей в зависимости от обстоятельств (размера, схожести и т.д.), файл содержиния не заменять а дополнять. Слишком много работы по обслуживанию и созданию CHM файла. Обновления планируется выпускать раз в месяц, а дробить их по тематике и для каждой тематики делать отдельное обновление - это уже черезчур. Однако, если есть желающие этим заниматься - милости прошу :) И не плохо было бы такой подход применить к оффлайн версии "Автоматическая установка Windows", потому что статьи из раздела Новичку и некоторых других в принципе не интересуют, а файл chm хотелось бы иметь на компьютере под рукой.Возможно, аналогичная модель будет применена в будущем и к учебнику АУ. Но во-первых, нужно сначала решить задачу с данным CHM, а во-вторых размер учебника АУ относительно невелик и попоплняется он не так уж часто.
Vovchick1
Ещё может случиться что при выполнении декоппиляции имеющегося CHM (или копирования файлов обновления в папку), нехватит места на диске!!!Да, такое тоже возможно. Можно указать это в системных требованиях ;)

XXXler
27-09-2006, 23:16
Vadikan, варианты с полностью автоматическим обновлением (вплоть до скачивания скриптом файлов из инета) рассматриваются?

Vadikan
28-09-2006, 19:48
XXXler
Интересная идея, но думаю, что это уже чрезчур :) Это все-таки не программа :) Обновления скорее всего будут размещаться на soft.oszone.net, а не на некой статичной странице. Так что проверить их наличие может быть затруднительно.

Unter
30-09-2006, 02:54
Можно в имени файла проекта указывать идентификационный номер, а скрипт будет его обрабатывать в порядке нумерации.

Хорошая идея, но я как-то не могу сходу представить ее техническую реализацию.
Сложность может возникнуть только с определением установленных апдейтов: где хранить информацию в реестре или еще где нибудь, а в обновления можно вкладывать сопроводиловку с которой и будет сравниваться. Это в том случае если все апдейты необходимо обрабатывать в порядке выпуска, а если порядок не важен, то еще проще.
А вообще командный процессор в NT-шках позволяет многое сделать. Я как-то извращался даже на тему сравнения даты файлов с определенной датой. В крайнем случае можно использовать скрипты. Правда я сейчас до конца октября в отпуске, поэтому заходить на форум буду редко.

Petya V4sechkin
30-09-2006, 09:21
Vadikan
Собственно, а где hhp-файл? Проект для компиляции?

Vadikan
02-10-2006, 04:19
Petya V4sechkin
Сорри, я не предоставил никаких файлов сразу. Вообще, в результате декомпиляции файл проекта не образуется. http://tools.oszone.net/Vadikan/files/chm_stuff.rar (в архиве файл проекта и hhc.exe) HHP-файл имеет формат, аналогичный INI-файлам.

P.S. Помимо файлов проекта каждый раз будут изменяться также club.html (главная страница), Table of Contents.hhc (содержание), club.hpp (файл проекта) и возможно index.hhk (указатель, он пока не сделан).




© OSzone.net 2001-2012