пятница, 3 октября 2014 г.

Thinstation и rdesktop, допиливаем

Исходные данные:
Есть учебный класс, состоящий из относительно старых машин (правда часть из них с 64-битными процессорами).
До этого на них стояла Windows XP и AutoCAD 2009. Но время идет, актуальная версия AutoCAD уже 2014, и это добро уже не установишь на такие дохлые железки. Всемогущий гугль навел на Thinstation.
В двух словах, это тонкий клиент, который поддерживает RDP и кучу других протоколов и умеет грузиться по сети.
Мы попробовали версию 5.2-Stable в связке с freerdp (клон более известного rdesktop). Возможно мы неправильно готовили freerdp, но у некоторых пользователей возникли проблемы в виде зависаний и ребутов тонких клиентов в определенные моменты при работе в AutoCAD, например, в момент отрисовки окружности.
Затем взяли версию 6.0-Unstable в связке с rdesktop, который показался более стабильным.
Однако прежде чем удалось его запустить, пришлось повозиться. Такое ощущение, что разработчики Thinstation пока забили на поддержку rdesktop.
Итак, берем к примеру Ubuntu 12.04 под VirtualBox, не помешает 10Гб свободного места, окружение для сборки Thinstation достаточно объемное. Еще придется выкачать около 2Гб по сети.


# apt-get install git
# mkdir -p /opt/TS-6
# cd /opt/TS-6
# git clone -b "6.0-Unstable" --depth 1 \ 
https://github.com/Thinstation/thinstation.git ./

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

# cd /opt/TS-6.0/ts/6.0/packages/rdesktop/etc/cmd
# touch rdesktop.getpass
# touch rdesktop.getuser
# echo 'SERVER_ARG=" "; USER_ARG="-u "; PASSWORD_ARG="-p "' > rdesktop.options
# echo 'DIALOG_TITLE=RDesktoP' >> rdesktop.options
# echo 'x_get_ip' >> rdesktop.options

Настройки сессии rdesktop:

ICONMODE=MANUAL

SESSION_0_TITLE="xfwm4"
SESSION_0_TYPE=xfwm4
SESSION_0_AUTOSTART=On

SESSION_1_TITLE="Rdesktop"
SESSION_1_TYPE=rdesktop
SESSION_1_ICON=SUBMENU
SESSION_1_RDESKTOP_OPTIONS="-a 16 -e -d your_domain -b"
SESSION_1_AUTOSTART=Off

ALWAYS_ENTER_SERVER=TRUE

вторник, 12 марта 2013 г.

Civil 3D. Разбираемся с классификацией custom-свойств точек

Как тут на днях выяснилось, в пылу кодинга неправильно понял смысл метода SetUserDefinedPropertyClassification у группы точек. Я думал, что текущем сеансе работы с чертежом нужно вызвать эту функцию для инициализации доступа к custom-свойствам точек

Оказалось, что это всего лишь обертка для этого свойства "Классификация" группы точек:

Поэтому достаточно настроить нужную группу точек один раз (очевидно при создании). Возможные значения свойства: None (нет custom-свойств), All (классификации custom-свойств) и custom (подключена только одна классификация)

;; создание группы точек
(defun pzm-AddPointGroup (Name RawDescFilter PointStyle PointLabelStyle / grp)
  (cond 
    ((setq grp (pzm-getPointGroup Name)))
    (T (setq grp (m> (pzm-PointGroups) 'Add Name))
      (putprop> (prop> grp 'QueryBuilder) 'IncludeRawDescriptions RawDescFilter) 
      (putprop> grp 'PointStyle (item> 'PointStyles PointStyle))
      (putprop> grp 'PointLabelStyle (item> 'PointLabelStyles PointLabelStyle))
      (putprop> grp 'OverridePointStyle -1)
      (putprop> grp 'OverridePointLabelStyle -1)
      ) ) 
  grp )

;; Для доступа к custom-свойствам точек группа точек (AeccPointGroup) 
;; должна иметь включенную классификацию
(defun pzm-InitPointCustomProps (grp ClassifName / udp)
  ;; ClassifName - наша группа классификации (в шаблоне)
  (setq udp (item> 'PointUserDefinedPropertyClassifications ClassifName))
  (if (not udp) (pzm-ExitWithMsg
    (strcat "\nОшибка! Классификация пользовательских свойств \"" 
      ClassifName "\" не найдена") ) )
    ;; aeccUDPClassificationApplyNone = 0, aeccUDPClassificationApplyAll = 1, 
    ;; aeccUDPClassificationApplyCustom = 2
    (m> grp 'SetUserDefinedPropertyClassification 2 udp) )
    
;; вернуть текущую классификацию (T|nil|Name)    
(defun pzm-GetPointGroupClassification (grp / Classif ClassifType)
  (setq Classif (m> grp 'GetUserDefinedPropertyClassification 'ClassifType))
  (cond 
    ((= ClassifType 0) nil) ;; None
    ((= ClassifType 1) T) ;; All
    ((= ClassifType 2) (prop> Classif 'Name)) ;; Custom, return classification name
    ) )

;; ну и наконец пример создания группы точек с включенной классификацией "ГП":
(pzm-InitPointCustomProps 
  (pzm-AddPointGroup "Проектные_кр1" "кр1" "Точка планировки" "Точка планировки")
        "ГП" ) ) )

четверг, 7 марта 2013 г.

Пишем на VisualLisp под Civil 3D

Обсуждение на форуме DWG.RU
Пример блока с картограммой

Предыстория

С 2000-го по 2005-ый я работал в небольшой проектной фирме, где сначала был чертежником в отделе генплана. Иногда приходилось заниматься расчетом плана земляных масс. Из софта был Autodesk Land Desktop (LDD) и набор DOS-овских программ (sever.exe и plazma.exe, если не ошибаюсь, разработка Гипротюменнефтегаза), в которых был заложен некий алгоритм расчета осадок на болотах.

Процесс ввода данных был муторный - вручную вбивать координаты границ площадки. Потом sever рассчитывал координаты всех узловых и граничных точек. После этого нужно вручную ввести все отметки в узловых и граничных точках. На выходе получался DXF-файл c готовой картограммой.

вторник, 22 мая 2012 г.

PicoLisp и авторизация через Kerberos-2

Как и обещал - продолжение истории с керберос-аутентификацией в PicoLisp.
В процессе ковыряний с исходниками Lighttpd в попытках их скомпилировать с поддержкой керберос я уже более-менее разобрался в самом процессе аутентификации. Видимо поэтому неожиданно родилась мысль - а не попробовать ли обойтись без костылей и прикрутить поддержку керберос непосредственно в сам PicoLisp.

четверг, 26 апреля 2012 г.

PicoLisp и авторизация через Kerberos

Как известно, в PicoLisp (далее pil), есть свой фронтенд - httpgate, который обеспечивает доступ к множеству приложений через единый порт (обычно 80 для http) и еще берет на себя SSL (htps).
Возникло желание сделать SSO (Single Sign On)-аутентификацию в веб-приложении pil в домене AD, но встроенные средства этого не позволяют. Остаются варианты прикрутить фронтэндом Apache/Nginx/Lighttpd, которые умеют SSO. Я остановился на Lighttpd, так как хотел использовать самый легковесный вариант.

среда, 18 апреля 2012 г.

Домашний хлеб без пекарских дрожжей

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

пятница, 2 марта 2012 г.

Поднимаем локальный вики-сайт на picoLisp

На днях возникла задача поднять в конторе какой-нибудь вики-движок.
В первую очередь конечно захотелось попробовать picoLisp. Благо за прошедшие пару лет он довольно живо развивается, и есть готовый вики-движок, на котором сделан сайт picolisp.com.
Замечу, что для работы этого движка не нужны дополнительно ни веб-сервер, ни СУБД.
Поскольку под рукой в основном сервера на CentOS x64, делать всё будем на CentOS.