Кодирование постпроцессоров.


I. Вводная часть.

В статье выше { Об авторстве. } - я написал Вам, что был, есть и остаюсь ярким противником кодирования текста пп-ра (любого). Причем любые намеки\вопросы на 'это' - вызывают у меня чувство легкого раздражения.

Но ко мне обратился человек и спросил, что ему делать в его конкретной ситуации:

"Дело вот в чем. Представьте: я написал пост, выложил его на сервер, технологи его копируют на ноут и идут к станку. В итоге у всех разные версии поста и некоторые, у кого самые длиные руки вносят туда изменения. Все хорошо до тех пор, пока не произошло столкновения. ...Как мне подстраховаться?"

Прошлое.

  После прочтения её - мне вспомнилось давным-давно произошедшая история. Вообще то их было много, просто повторялись они с постоянной периодичностью. Суть была проста: на Кнаапо обработкой ведал ОПУ (находившейся на терр 'А' вместе с практически всем парком станков с ПУ). На терр. 'Б', отделенный от терр 'А' взлетной полосой, находился ИЦ (инженерный центр, перестроенный из недостроенной столовой), а в нём - ОЭЦМ (отдел электронно-цифрового моделирования). Чего они там 'моделировали' не очень интересно, но вот что забавно - на этот отдел была возложена часть механообработки на терр. 'Б' (2-х станков с деревообработки, 6-8 станков DMU и 2-3-х Фп-17 - в цеху № 8 -подготовки производства). Так себе .. мелочь.:) Но сколько амбиций было у этого отдела. Ведь они тоже занимались Обработкой!!! Они умные. И несколько раз звучали голоса о том, что они сами будут без посторонней помощи и кого-либо, сами будут делать пп-ры. Вы знаете, я к этому был равнодушен, но нервозная обстановка в эти моменты, когда мелкие начальники как пауки в банке грызлись, заставляла меня в эти моменты либо переезжать к технологам, либо включать в наушниках музыку погромче. Вся эта 'буча', каждый раз приводила к вопросам о том, что необходимо как-то прятать свои пп-ры или кодировать, чтобы не достались "недругам".....
И это на предприятии, где люди делали Одно Общее Дело.

 пи....пи....пи....
Выводы и остальное домыслите сами..

Что я могу ответить человеку?

 

   Для меня ответ:
 - это область технологической и трудовой дисциплины, где, каждый делает то, что знает, что умеет, за что платят деньги.
 - Вы знаете, с одной стороны я приветствую подобную инициативу технологов, ибо считаю, что порой технологи должны вставлять в пп-сор, свои нужные команды (часто это нечто статичное, M3\M4...) - то, что неудобно, долго и нудно вставлять через UDE. Но с другой,  если ты изменил пп-ор, будь так любезен, неси ответственность, будь честен.

   К сожалению, но эта проблема - проблема всей нашей Родины, такая же как  дураки и дороги. У нас считают, что военные могут руководить театрами, физики - быть музыкантами, а программистами могут быть все кому не лень..

   После того, как я "остыл". У меня возникло много вопросов, а почему бы не провести к станкам сеть? Хотя бы установить точки-доступа для подымания Wi-Fi.? Тогда будет возможно перевести все постпроцессоры на единый общий ресурс.
А какова реакция руководства на это?
 

 

 

II. Способы кодирования постпроцессоров, или как стать джедаем.

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

Способ 1. Использование формата tbc.

Воспользуемся программой TclPro. Найти её бесплатную версию, Вы сможете, тут: ftp://ftp.tcl.tk/

При выборе версии\ключей => Помните! Версия Tcl-интерпретатора Юниграфики v16 - NX9 : 8.1.2

Как Вы сможете закодировать пп-ор?
Шаги:

  1. Вы завершили разработку пп-ра.
  2. Выделяем часть текста пп-ра в текстовой файл (допустим, pplib.tcl )
  3. Воспользуемся утилитой c:\TclPro1.4\win32-ix86\bin\procomp.exe для получения tbc - файла.
  4. Подключаем файл tbc и библиотеку tbcload.dll в тексте пп-ра. Ниже показан, как пример.
#_______________________________________________________________________________
# 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"}
  1. После каждого изменения не кодированного пп-ра ( текст, Вы будете хранить у себя) , которое затрагивает закодированную часть, Вы должны повторять Шаги 2-4.

 Способ 2. А-ля Юниграфика.

Воспользуемся той же самой технологией, что и Юниграфика в своих продуктах.

PostBuilder
mom_source.dll

 => Декодирование кода 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.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 , либо принудительно обнулить сообщение об ошибке. Как вариант, Вы можете перед началом декодирования проверить уже закодированный скрипт на контрольную сумму файла, и если она иная, то выдавать ошибку (см. ниже).


Способ X. Другие возможности.

  Вы можете сами придумать свой алгоритм кодировки-декодировки и загрузки в MOM.
  Некоторое количество реализаций можно найти тут: http://base.vingrad.ru/Szhatie-i-kodirovanie-1094
  В библиотеке Tcl есть сборник расширений tcllib. В него включен пакет TclDES, содержащий в себе методы и реализации стандартного DES алгоритма или triple-DES (3DES) алгоритма.

Помимо кодирования есть варианты контроля целостности файла. Это не просто контроль создания файла (время, размер) - а так называемая: контрольная сумма файла.
С этим понятием, Вы, не раз сталкивались, качая с Интернета очередной дистрибутив или программу. Образно говоря, это специально высчитываемая сумма (число) создаваемая на основе содержимого файла, если оно не совпадает с контрольной суммой, значит файл подвергся изменениям или повредился.

Во времена 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.

*******

Не так давно, на просторах Интернета я натолкнулся на сайт http://techtinkering.com

Его автор предлагает довольно интересную фишку подключения tcl-скрипта в exe\dll файл для создания кросс-платформенных приложений : http://techtinkering.com/2013/02/20/compiling-a-tcl-script-into-an-executable/

Пример:  из 1.tcl  =>  модифицированный скрипт: bin2c.tcl  =>  получаем 1.h , который затем используем в своем проекте.

#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 че