Но ко мне обратился человек и спросил, что ему делать в его конкретной ситуации:
"Дело вот в чем. Представьте: я написал пост, выложил его на сервер, технологи его копируют на ноут и идут к станку. В итоге у всех разные версии поста и некоторые, у кого самые длиные руки вносят туда изменения. Все хорошо до тех пор, пока не произошло столкновения. ...Как мне подстраховаться?"
Прошлое. |
После прочтения её - мне вспомнилось давным-давно произошедшая история.
Вообще то их было много, просто повторялись они с постоянной периодичностью. Суть
была проста: на Кнаапо обработкой ведал ОПУ (находившейся на терр 'А' вместе с
практически всем парком станков с ПУ). На терр. 'Б', отделенный от терр 'А'
взлетной полосой, находился ИЦ (инженерный центр, перестроенный из недостроенной
столовой), а в нём - ОЭЦМ (отдел электронно-цифрового моделирования). Чего они
там 'моделировали' не очень интересно, но вот что забавно - на этот отдел была
возложена часть механообработки на терр. 'Б' (2-х станков с деревообработки, 6-8
станков DMU и 2-3-х Фп-17 - в цеху № 8 -подготовки производства). Так себе .. мелочь.:) Но
сколько амбиций было у этого отдела. Ведь они тоже занимались Обработкой!!! Они
умные. И несколько раз звучали голоса о том, что они сами будут без посторонней
помощи и кого-либо, сами будут делать пп-ры. Вы знаете, я к этому был
равнодушен, но нервозная обстановка в эти моменты, когда мелкие начальники как пауки в
банке грызлись, заставляла меня в эти моменты либо переезжать к технологам, либо
включать в наушниках музыку погромче. Вся эта 'буча', каждый раз приводила к
вопросам о том, что необходимо как-то прятать свои пп-ры или кодировать, чтобы
не достались "недругам"..... пи....пи....пи.... |
Что я могу ответить человеку?
|
Ну, если все организационные способы уже испробовали, то можно заняться кодированием пп-ра. Приведу несколько возможных вариантов.
Воспользуемся программой TclPro. Найти её бесплатную версию, Вы сможете, тут: ftp://ftp.tcl.tk/
Как Вы сможете закодировать пп-ор?
Шаги:
#_______________________________________________________________________________ # NX UGPost, uses tbcload TBC #_______________________________________________________________________________ set pplib "pplib.tbc" set cam_post_dir [MOM_ask_env_var "UGII_CAM_POST_DIR" package ifneeded tbcload 1.3 [list load [file join $cam_post_dir/tbcload13.dll]] catch {source "${cam_post_dir}$pplib"}
После каждого изменения не кодированного пп-ра ( текст, Вы будете хранить у себя) , которое затрагивает закодированную часть, Вы должны повторять Шаги 2-4.
Воспользуемся той же самой технологией, что и Юниграфика в своих продуктах.
PostBuilder |
=> Декодирование кода PB |
А именно, возьмем
упрощенный алгоритм кодирования - без сдвига на псевдослучайную
последовательность Ni:
de_crypt_simple1.tcl
Составим последовательность шагов на примере
постпроцессора включенного в стандартную поставку Юниграфики v18 -
mill3ax
. Алгоритм будет основан на применении MOM-функции UF_MOM_execute_command
(
которая появилась в NX2 ).
Последовательность:
Шаг 0. Вы снова полностью закончили разработку пп-ра.
Шаг 1. Выделим часть
функций ( те, которые Вы хотите спрятать от чужих глаз) постпроцессора
mill3ax
в файл mill3ax_crypt.tcl. Проще говоря -
разделим его.
Начальный | После разделения | ||
mill3ax.tcl (28,2 КБ) | mill3ax.tcl
(27,0 КБ) mill3ax_crypt.tcl (2,79 КБ) |
Шаг 2. Закодируем файл mill3ax_crypt.tcl утилитой de_crypt_simple1.tcl :
de_crypt_simple1.tcl | ||
<=> |
mill3ax_crypt.txt | |
![]() |
Шаг 3. Теперь необходимо как-то раскодировать полученный txt-файл и загрузить его в MOM. Для этой цели создадим MOM-расширение.
/* Get the TCL interpreter id from the ufusr param */ // UF_MOM_ask_interp_from_param ( parm, &interp ) ; /* Get the MOM id from the ufusr param */ UF_MOM_ask_mom (parm, &mom) ; /*Создаем функции в интепретаторе*/ UF_MOM_extend_xlator ( mom , "MOM_simple_crypt", mom_simple_crypt ) ;
Проект : mom_simple_crypt.zip
По поводу комментарий к программе, - смотрите текст программы. Единственно на что необходимо обратить особое внимание: при создании и обработке строк, уделите внимание спецсимволам - '\n', '\r', '\t'.
Шаг 5. Создадим загрузку MOM-расширения в постпроцессоре mill3ax.tcl . Для этого я воспользуюсь частью кода из кодированного пп-ра PB7.5 с поправкой на название - mom_simple_crypt. Все изменения я выделил красным цветом.
############ TCL FILE ###################################### # USER AND DATE STAMP ############################################################ set cam_post_dir [MOM_ask_env_var UGII_CAM_POST_DIR] set cam_debug_dir [MOM_ask_env_var UGII_CAM_DEBUG_DIR] source ${cam_post_dir}/ugpost_base.tcl # source ${cam_debug_dir}mom_review.tcl MOM_set_debug_mode OFF ############################################################ set encrypted_post_file "[file rootname [info script]]_crypt.txt" if { ![file exists $encrypted_post_file] } { set __msg "ERROR in [info script] :\n\ \n\"$encrypted_post_file\" is not found." MOM_abort $__msg } #============================================================= proc VNC_ask_shared_library_suffix { } { #============================================================= global tcl_platform set suffix "" set suffix [string trimleft [info sharedlibextension] .] if { [string match "" $suffix] } { if { [string match "*windows*" $tcl_platform(platform)] } { set suffix dll } else { if { [string match "*HP-UX*" $tcl_platform(os)] } { set suffix sl } elseif { [string match "*AIX*" $tcl_platform(os)] } { set suffix a } else { set suffix so } } } return $suffix } set suff [VNC_ask_shared_library_suffix] if { ![file exists ${cam_post_dir}mom_simple_crypt.$suff] } { set suff so } if { ![file exists ${cam_post_dir}mom_simple_crypt.$suff] } { set __msg "ERROR in [info script] :\n\ \nShared library \"mom_simple_crypt\" is not found in ${cam_post_dir}." MOM_abort $__msg } catch { MOM_run_user_function ${cam_post_dir}mom_simple_crypt.$suff ufusr MOM_simple_crypt [file nativename $encrypted_post_file] } ############################################################ ########## SYSTEM VARIABLE DECLARATIONS ##############
Шаг 6. Окончательно получаем, то, что Вы отдадите нерадивым технологам:
mill3ax.def
-
(без изм.) mill3ax.pui - (без изм.) mill3ax.tcl mill3ax_crypt.txt mom_simple_crypt.dll - (собрана в NX4) |
Шаг 7. После каждого изменения не кодированного пп-ра ( текст, Вы будете также хранить у себя) , которое затрагивает закодированную часть, Вы должны повторять Шаги 1-6.
Недостатки выше показанной реализации
-
Если Вы ненароком ошибетесь при делении постпроцессора на
Шаге 1, или допустите ошибку в Tcl-скрипте.
- Если технолог сам исправит уже закодированный текст
- внесет любые случайные символы (в нашем случае: mill3ax_crypt.txt
)
Тогда после раскодирования и добавления в MOM командой UF_MOM_execute_command - Tcl - интерпретатор может выдать ошибку, с выдачей части раскодированного текста в ЛОГ-файл Юниграфики. Вам необходимо выловить данную возможность Юга. Либо отработав ошибку выдаваемую UF_MOM_execute_command , либо принудительно обнулить сообщение об ошибке. Как вариант, Вы можете перед началом декодирования проверить уже закодированный скрипт на контрольную сумму файла, и если она иная, то выдавать ошибку (см. ниже).
Помимо кодирования есть варианты контроля целостности файла. Это не просто
контроль создания файла (время, размер) - а так называемая: контрольная сумма
файла.
С этим понятием, Вы, не раз сталкивались, качая с Интернета очередной дистрибутив
или программу. Образно говоря, это специально высчитываемая сумма (число)
создаваемая на основе содержимого файла, если
оно не совпадает с контрольной суммой, значит файл подвергся изменениям или
повредился.
Во времена DOS и Win95 - была распространена проверка на так называемом коде
CRC32. В основе которого лежит
Циклический избыточный код (англ. Cyclic redundancy code, CRC).
Самая простая его реализация состоит в примере:
Подсчет CRC суммы файла (VC
и Tcl/Tk).
Исходники:
checksumfile_С_TCL.zip
Но это код ушел в историю, хотя иногда его ещё используют. Сейчас все пользуются так называемыми криптографическими хеш-функциями: http://ru.wikipedia.org/wiki/Криптографическая_хеш-функция. Особую популярность среди них для контроля целостности файла приобрел алгоритм MD5: http://ru.wikipedia.org/wiki/MD5.
*******
Его автор предлагает довольно интересную фишку подключения
tcl-скрипта в exe\dll файл для создания
кросс-платформенных приложений :
http://techtinkering.com/2013/02/20/compiling-a-tcl-script-into-an-executable/ Пример: из 1.tcl => модифицированный скрипт: bin2c.tcl
=> получаем
1.h , который затем используем в своем проекте.Не
так давно, на просторах Интернета я натолкнулся на сайт
http://techtinkering.com
#include "1.h" ........ /* Get the MOM id from the ufusr param */ UF_MOM_ask_mom (parm, &mom) ; /*Загружаем скрипт в интепретаторе*/ ........ Tcl_EvalEx(interp, filetcl, filetcl_len, 0); ........
Copyright © 2001—2009 че