Переменные окружения

Автор Тема: Переменные окружения  (Прочитано 12181 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Переменные окружения
« Ответ #1 : 12-12-2013, 10:40:44 »
Реализовать функционал не зависимым от регистра, разработчикам ничего не стоило. Это банальная кривизна реализации, т.е. попросту говоря - баг...

В компаниях, администраторы нередко при помощи политик блокируют пользователям возможность запуска regedit.exe, в виду чего у них не представляется возможность посмотреть нужную ветку реестра на предмет того, как же там записано имя переменной: САМАЯКРУТАЯПЕРЕМЕННАЯ, самаякрутаяпеременная, СамаяКрутаяПеременная или же вовсе: Самая Крутая Переменная (наименования параметров в реестре вполне могут содержать пробелы).

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Переменные окружения
« Ответ #2 : 12-12-2013, 11:06:56 »
Андрей. Ты же не считаешь, что в C-подобных языках (C/C++/C# и т.д.) тот факт, что имена переменных являются регистрозависимыми - это баг? Скорее уж баг то, что переменные окружения в Windows не регистрозависимые. Но это уже от Autodesk никак не зависит.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Переменные окружения
« Ответ #3 : 12-12-2013, 11:12:16 »
Не следует путать белое с пушистым: доступ к реестру ОС осуществляется посредством API, предоставляемым этой ОС. Если в этом API нет зависимости от регистра, то и реализация от Autodesk должна работать аналогично. В данном случае музыку заказывает Microsoft, а Autodesk должна следовать существующим правилам, не впадая в рассуждения о "сферических конях в вакууме", поскольку программисты, ранее работавшие с реестром, логично ожидают, что зависимости от регистра не будет.

Кроме того, в подобных ситуациях независимость от регистра достаточно удобна (имхо). Выше я привёл пример, когда зависимость от регистра может вызвать определённые затруднения в использовании таких переменных рядовыми пользователями AutoCAD (обратите внимание). В нашей компании как раз действует обозначенный мною запрет.
« Последнее редактирование: 12-12-2013, 11:43:10 от Андрей Бушман »

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Переменные окружения
« Ответ #4 : 12-12-2013, 13:18:26 »
Не следует путать белое с пушистым:
Ну если по большому счету, то функция (getenv) в AutoLisp появилась в том незапамятном году, когда никто о том, что когда-нибудь появится Windows и в нем будет понятие реестра даже и предполагать не мог. Зато AutoCAD работал под Unix, в котором принята регистрозависимость. И хранилась эта информация в файле настроек, а не в реестре.
Короче говоря так исторически сложилось.
Кроме того, в подобных ситуациях независимость от регистра достаточно удобна
С этим я могу согласится. Точнее могу согласится с желательностью единообразия. Т.е. если имя переменной окружения регистронезивисимое, то и имя ключа в реестре должно быть регистронезависимым.
зависимость от регистра может вызвать определённые затруднения в использовании таких переменных рядовыми пользователями AutoCAD (обратите внимание).
А зачем рядовым пользователям AutoCAD использовать "такие" переменные?

P.S.: Что касается этой статьи, то в ней есть на мой взгляд неосвещенный вопрос - в ряде случаев информация берется из ключа реестра HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\FixedProfile\General
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Переменные окружения
« Ответ #5 : 12-12-2013, 14:27:16 »
Короче говоря так исторически сложилось.
Ясно. Хотя с тех пор, как AutoCAD перешёл на Windows прошло много лет и внести соответствующие изменения (убрать зависимость от регистра) можно было бы уже давно, ибо не под Unix пишут...
А зачем рядовым пользователям AutoCAD использовать "такие" переменные?
Юзер может и не использовать сам по себе - использовать могут всякие программки, загружаемые им в AutoCAD. В readme.txt программок автор может указать имена переменных, влияющих на поведение программки, но при этом ошибиться с регистром. Этот факт вскроется при просмотре ветки реестра с помощью regedit.exe.
P.S.: Что касается этой статьи, то в ней есть на мой взгляд неосвещенный вопрос - в ряде случаев информация берется из ключа реестра HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\FixedProfile\General
Есть такое дело... Возможно Алексей, сказав "А", скажет и "Б" на тему обозначенной вами ветки реестра... :) В частности в ветке FixedProfile будет создана произвольная пользовательская переменная "Самая Крутая Переменная", о которой я писал выше. Насколько я понимаю, в обозначенной ветке хранится общая для всех профилей AutoCAD информация.
« Последнее редактирование: 12-12-2013, 14:58:30 от Андрей Бушман »

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Переменные окружения
« Ответ #6 : 12-12-2013, 14:37:03 »
В readme.txt программок автор может указать имена переменных, влияющих на поведение программки, но при этом ошибиться с регистром.
Мне кажется, что этот вопрос можно решить трояко:
1) Сообщить об этом автору, если (getenv "имя переменной") возвратит nil
2) Кроме regedit.exe есть еще масса программ, позволяющих посмотреть реестр (или хотя-бы получить текстовый файл со списком ключей/переменных). Например:
Код - INI [Выбрать]
  1. reg query HKCU\Software\Autodesk\AutoCAD\R19.0\ACAD-B001:409\FixedProfile\General
3) Обратится к сисадминам, чтобы они помогли проверить имя/значение переменной в реестре.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Переменные окружения
« Ответ #7 : 12-12-2013, 14:50:13 »
Я вам привёл примеры не для того, чтобы вы изо всех сил пытались защищать программистов Autodesk. Регистровая зависимость имени параметра в реестре, противоречащая самому API операционной системы - это неудобно и неправильно (не зависимо от того, какие варианты обхождения бага вы бы не предлагали). В Unix это была бы правильная реализация, но в Windows такая реализация является багом. Мы работаем в Windows, поэтому Unix не может служить оправданием.
1) Сообщить об этом автору, если (getenv "имя переменной") возвратит nil
Это не всегда удобно (по времени, необходимом на такого рода переписку) или не всегда возможно (нет обратной связи).
Мне кажется, что этот вопрос можно решить двояко:
2) Кроме regedit.exe есть еще масса программ, позволяющих посмотреть реестр (или хотя-бы получить текстовый файл со списком ключей/переменных). Например:
Это у вас дома может быть масса таких программ, прошу не путать с рабочей обстановкой... В нормальной компании юзер не имеет админских прав, необходимых для установки софта. Кроме того, много ли вам  таких пользователей известно, которые умеют пользоваться командой reg и знают, какой именно параметр ей нужно указать? Вопрос риторический...
Цитата: Александр Ривилис
3) Обратится к сисадминам, чтобы они помогли проверить имя/значение переменной в реестре.
По такому вопросу сисадмин с вероятностью 99,9% пошлёт юзера гулять лесом, поскольку искомая запись находится в юзерской ветке реестра, а войдя под админской записью админ в HKCU получит др. ветку (свою, а не юзера). Ковыряться в ветке в USERS в поисках нужной записи админу будет лень\некогда. У нас именно так и происходит (полагаю, что не только у нас). И вообще, если бы не было зависимости от регистра, данной проблемы вообще не возникало бы (приехали туда, откуда отправлялись)...

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Переменные окружения
« Ответ #8 : 12-12-2013, 15:00:00 »
Регистровая зависимость имени параметра в реестре, противоречащая самому API операционной системы
Причем здесь API операционной системы? Функция (getenv) в действительности в ряде случаев использует API для работы с реестром в Windows. Ну и что?
P.S.: Кстати это документированное поведение функции. Цитата из первоисточника (ObjectARX SDK Docs):
Цитировать
Input environment variable name to get, which is case sensitive in all environments (Visual LISP, ObjectARX, and VB/ActiveX)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Переменные окружения
« Ответ #9 : 12-12-2013, 15:08:41 »
Причем здесь API операционной системы?
При том, что используя этот API я получаю нужный раздел или параметр вне зависимости от регистра символов, которыми набрано искомое имя.
Кстати это документированное поведение функции
И что? Задокументированный баг. На это я вам процитирую Джона Роббинса:
Цитата: Джон Роббинс
Баг - это всё что угодно, что заставляет пользователя страдать:
  • аварии и зависания
  • низкая производительность и масштабируемость
  • неверные результаты
  • нарушение безопасности
  • противоречивые пользовательские интерфейсы
  • неудовлетворённые ожидания
В данном случае, зависимость от регистра может временами "заставить пользователя страдать" ибо появляются "неудовлетворённые ожидания".

P.S. В общем это всё ИМХО и более ничего доказывать не хочу\не буду.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Переменные окружения
« Ответ #10 : 12-12-2013, 15:15:42 »
По такому вопросу сисадмин с вероятностью 99,9% пошлёт юзера гулять лесом, поскольку искомая запись находится в юзерской ветке реестра, а войдя под админской записью админ в HKCU получит др. ветку (свою, а не юзера). Ковыряться в ветке в USERS в поисках нужной записи админу будет лень\некогда.
Это говорит лишь о том, что организация труда у вас неправильная. Сисадмины должны помогать, а не препятствовать проектировщикам, ибо именно проектировщики приносят в организацию деньги. А дойную корову нужно любить и уважать.
Но этот вопрос - оффтопик в данной теме.
Факт остаётся фактом - функция работает два десятка лет по одному и тому же описанному в документации алгоритму. Менять поведение этой функции не будут, так как это вызовет побочные и очень трудно диагностируемые эффекты в уже существующих программах (в том числе и в самом AutoCAD). Аминь!  :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение