powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / как защитить свой код?
22 сообщений из 22, страница 1 из 1
как защитить свой код?
    #36444061
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cache 5.1

Если например я собираюсь отдать (продать) код, но не хочу его открывать.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444113
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отдавать объектники
еще %SYSTEM.OBJ::MakeClassDeployed
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444150
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Отдавать объектники
Можно поподробнее?

Блок А.Н.%SYSTEM.OBJ::MakeClassDeployed
Вы этим пользовались?
Получается я должен экспортировать исходники, выполнить MakeClassDeployed отмонтировать cache.dat скопировать, затем подмонтировать и импортировать исходники (что бы иметь возможность дальше работать). И отдавать уже готовый cache.dat
Я правильно понимаю?
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444265
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, я сам так не делал, зато приходилось работать с базой, где некоторые куски были так обработаны :-)

Про MakeClassDeployed видимо так, примерно как вы говрите, так и надо делать, только что желательно, чтобы база классов быть отделена от базы с данными (иначе придется чистить еще и данные)
Ну и я бы сначала базу скопировал, а потом уже на копии делал MakeClassDeployed и удаление .MAC-ов
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444565
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,
а "объектники"? я вообще не понял что это такое, можно про них чуток?
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444620
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеются ввиду объектный код, каше компилирует исходный код в объектный, и хранит его в файлах *.OBJ
при наличии файлов только OBJ программы будут продолжать работать, но также и будет защищен код, так как исходники не увидят

_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444697
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

класс. спасибо. самое оно.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444743
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, Артем, дескрипторы компилированных классов тоже хранятся в глобали ^rOBJ. Так что можно перенести и дескрипторы классов без сорсов.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444789
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яКстати, Артем, дескрипторы компилированных классов тоже хранятся в глобали ^rOBJ. Так что можно перенести и дескрипторы классов без сорсов.

тоже вариант.
интересно а я смогу отдать cache.dat без кода, только с глобалькой ^rOBJ
а потом обновления присылать в виде *.obj файлов?

По моему это классно, получается очень красиво.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444835
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чет я не уверен, что все что нужно хранится в в ^rOBJю Программы - да, а вот структура таблиц, список хранимых процедур и т.д.?
По крайней мере структура таблиц (минимум чатсично) хранится в mdd, и мне что-то кажется, что oddCOM тоже будет использоваться для DynamicQuery.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444851
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще (по своему опыту) - достаточно обработать несколько ключевых классов и программ, и вашему пользователю проекта будет оочень сложно что-то сделать с ним.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444859
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначально поставляли своё ПО объектным кодом... Потом бросили это дело. Надобности в этом никакой...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
как защитить свой код?
    #36444874
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в большинстве случаев сама защита не нужна (имхо)
Если у них есть специалисты, способные разобраться в чужом коде и доработать его - это же даже хорошо, и мне кажется, что не нарушает авторских прав.

А перепродать или скопировать данные они смогут в любом случае, с доступом к коду и без доступа.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36445061
ye z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.Чет я не уверен, что все что нужно хранится в в ^rOBJю Программы - да, а вот структура таблиц, список хранимых процедур и т.д.?
По крайней мере структура таблиц (минимум чатсично) хранится в mdd, и мне что-то кажется, что oddCOM тоже будет использоваться для DynamicQuery.
Я и не писал, что все там хранится, я писал что там хранятся дескрипторы. SQL это параллельная вселенная, тут ручного переноса и быть не может, только компиляцией. Потому как иды внутренних структур sql движка определяются при компиляции по месту, в рамках текущих определений sql. Для переноса sql лучше не баловаться, а переносить тупо пустые классы из одних пропертей. То есть те же самые метаданные.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36494078
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaИзначально поставляли своё ПО объектным кодом... Потом бросили это дело.

А как вы отсылали обновления? А если менялась структура таблиц, то как вы отсылали эти изменения?
...
Рейтинг: 0 / 0
как защитить свой код?
    #36494112
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Аське поговорили... Но продублирую и тут...

u78А если менялась структура таблиц, то как вы отсылали эти изменения?
Если дело касается классов - не пошлёшь ОБЖ-кодом.

u78А как вы отсылали обновления?
Примерно так...

Код: plaintext
d $system.OBJ.Export("myrtn.obj","c:\tmp.xml")
...
Рейтинг: 0 / 0
как защитить свой код?
    #36494145
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а по-моему если дело касается классов то OBJ кодом тоже можно обойтись
код класса компилируется в MAC и INT а потом и в OBJ, только вот классам полагаю нужно еще описание из глобалов ^oddCOM, ^oddDEF, правда в последнем хранятся исходники методов
IS ведь как то закрывает исходники некоторых своих классов
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
как защитить свой код?
    #36495114
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему, если хочешь отдать кашу со своим кодом, то самое лучшее - отдавать систему вместе с каким то исходным cache.dat (где ты уже предварительно скрыл свои исходники с помощью MakeClassDeployed) и механизмом импорта который я приведу ниже.

Для обновления классов на клиентской машине надо их написать на своей машине и экспортировать.
Экспортировать, запаковать в zip и закрыть паролем, а пароль дать "vedro".
Вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
/// Экспорт указанных классов (и/или рутин) в xml а потом в запароленный архив
/// classnames - одно или несколько имён классов разделённые запятой
/// например: "User.Myclass.cls,User.MyClass2.cls"
classmethod Export(classnames as %String = "") as %String
{
	s Archiver = "c:\sklad\pkzip25.exe"
	s password = "vedro"
	s XmlExportFilename = "c:\zz.xml"
	s ZipExportFilename = "c:\ExportCache.zip"
	
	if '##class(%File).Exists(Archiver) q "Не найден файл архиватор "_Archiver
	
	//экспортируем указанные элементы
	s ok = $system.OBJ.Export(classnames,XmlExportFilename)
	if '+ok q $$GetOneErrorText^%apiOBJ(ok, 1 )
	
	//составим командную строку архивации и выполним её
	s CommandString=Archiver_" -add -NoFix -move -pass="_password_" "_ZipExportFilename_" "_XmlExportFilename_" >c:\ZipExportLog.txt"
	d $ZF(- 1 ,CommandString)
	
	q  1 
}

На клиентской машине надо будет принять zip архив закрытый мощным паролем "vedro" и запустить скрипт который распакует архив, импортирует классы и скроет их используя кашёвый MakeClassDeployed.
Вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
/// Импорт классов из zip архива и сокрытие импортированных классов 
/// filename - запароленный zip файл в котором zz.xml с классами
classmethod Import(filename as %String = "") as %String
{
	s Archiver = "c:\sklad\pkzip25.exe"
	s password = "vedro"
	s TempDir = "c:\sklad"	//тут бы конечно использовать виндовую переменную %TMP% но я не знаю как это сделать
	s XmlFile = "zz.xml"

	if filename="" q "Не указан файл для импорта"
	if '##class(%File).Exists(filename) q "Не найден файл импорта "_filename
	if '##class(%File).Exists(Archiver) q "Не найден файл архиватора "_Archiver
	
	//составим командную строку распаковки и выполним её
	s CommandString=Archiver_" -extract -over=all -NoFix -path=root -pass="_password_" "_filename_" "_TempDir_" >c:\ZipImportLog.txt"
	d $ZF(- 1 ,CommandString)

	if '##class(%File).Exists(TempDir_"\"_XmlFile) q "Не найден импортируемый файл "_TempDir_"\"_XmlFile
	
	//импортируем распакованный xml
	s ok = $system.OBJ.Load(TempDir_"\"_XmlFile,"ck",.p1,.p2)
	if '+ok q $$GetOneErrorText^%apiOBJ(ok, 1 )

	//удалим xml файл
	s ok=##class(%File).Delete(TempDir_"\"_XmlFile)
	//даже если не смогли удалить, всё равно скрываем классы и молчим в тряпочку

	//теперь скроем импортированные классы
	//цикл по названиям импортированных элементов
	f i= 1 : 1 :$L(p2,",") d
	. s element=$P(p2,",",i)
	. //пропускаем всё кроме классов
	. q:$P(element,".",$L(element,".")'="cls")
	. s ok = $system.OBJ.MakeClassDeployed($P(element,".",1,$L(element,".")-1))
	. if '+ok w $$GetOneErrorText^%apiOBJ(ok, 1 ),!
	
	q  1 
}

pkzip25 бесплатен если вы не используете его в коммерческих целях. По своей зарплате и оплате подработки я считаю, что моё программирование это хобби, а не коммерция.

В итоге получается следующее (у себя я эти методы вставил в класс User.Test).
На своей машине я делаю класс и экспортирую его

Код: plaintext
1.
2.
3.
4.
5.
PTK7>w ##class(User.Test).Export("User.Test2.cls")
 
Экспорт  в XML начался в  03 / 01 / 2010   15 : 26 : 43 
Экспортируемый класс: User.Test2
Эскпорт завершился успешно.

Затем как бы сажусь за клиентскую машину а реально просто переключаю область и импортирую.
Код: plaintext
1.
w ##class(User.Test).Import("c:\ExportCache.zip")


По моему классно.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36495178
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78, действительно классно. Хотел бы добавить, что лучше перейти с pkzip25 на 7z. Причины:
с pkzip25 у коллег были реальные ошибки "в поле". Подробностей не помню, но с тех пор пользоваться не хочется.

7z работает "быстрее всех", может использовать все имеющиеся ядра

7z имеет работоспобный порт для Linux, в то время как Linux'овый zip имеет врожденные пороки.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36495187
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,

а я наоброт перешёл с 7z на pkzip и тоже подробностей не помню )))

каждому своё.
...
Рейтинг: 0 / 0
как защитить свой код?
    #36495208
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но есть вероятность, что пользователь успеет выхватить распакованный файл, пока его не удалила программа, так что рискованно, и риск этот тем больше чем больше классов в этом xml,
либо при импорте, сначала грузить файл без компиляции, удалить XML, а потом скомпилить загруженное, так будет быстрее но не намного
либо распаковав, прочитать в стрим и удалить, но опять же стрим должен быть в памяти

_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
как защитить свой код?
    #36495238
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

согласен, но я больше не буду дорабатывать, секунды эти ловить...не стоит оно того
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / как защитить свой код?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]