Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Перевод проекта с 8-bit на unicode

Коллеги, подскажите простейший способ переноса данных из 8-битного представления в юникодовое
Ответ: Пусть модератор вынесет в отдельную ветку наши с Вами разговоры, по поводу перехода с 8-битных Каше на Unicode.
Модератор: Пожалуйста
Вопрос: Как себя будет вести IRIS в части SOAP (REST и проч. неавторизованного веба)?

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

Как в IRIS будет?
Ответ:
kolesov
...сравнивал это свойство 2017 каше и ансамбля - каше отваливался по лимиту лицензий...
Возможно, тут дело не в технических различиях, а в опциях лицензии. Надо декодировать оба cache.key и сравнивать опции, чтобы разобраться; или в ISC [WRC] спросить.
Cache', кстати, тоже не отваливается, если в лицензии есть web-addon.
Вопрос: Бесплатная IRIS Community Edition теперь для всех

Ну что же, теперь выпустили IRIS Community Editon и IRIS for Health Community Edition доступные не только для докера, а с возможностью установить на любую поддерживаемую систему.

Вот

  • Включает лицензию на 13 месяцев. Обновляясь регулярно, проблем с лицензией не должно возникнуть.
  • Объем базы ограничен 10GB
  • Не больше 8 ядер
  • Только 5 пользователей, прямые подключения. Для веб не должно быть проблем, если использовать REST например.
  • Доступно для платформ: RedHat, Ubuntu, SUSE, Windows and macOS.

    Все дистрибутивы доступны через , регистрация и авторизация требуется, но наличие доступа к WRC не требуется.

    Докер образы конечно , через хаб докера
  • Ответ:
    AlexKB
    ...Ансамбль может быть только unicode...
    Ensemble = Cache + (Дополнительные классы)
    Ультимативная Unicode-ность Ансамбля была лишь решением поставщика, IMHO.
    Вопрос: IRIS-VisM

    Добрый день!

    Есть ли на IRIS VisM, как на Cache.

    Спасибо.

    Александр
    Ответ: DAiMor,

    Спасибо за цитату. А то нас IS активно на IRIS перетягивает (типа бесплатно обновиться до конца года можно).


    Valeriu
    Я сейчас жалею, что не вовремя перешел на WEB ...

    Не расстраивайтесь, там каждый месяц новый фреймворк в моде :)
    Valeriu
    Настольные приложения уже потеряли свое былое величие.

    Тут да, в разработке десктопных приложений что-то идет не так, раз веб пошел в десктоп (это я про )
    Вопрос: Benchmark Cache' и поиск стука в подвале

    Есть у меня нода на ESXi 6, на машине с процом Intel(R) Xeon(R) CPU X3450 @ 2.67GHz
    И есть на скорую руку набросанный "бенчмарк" - в прикрепленном файле.
    + на скорую руку набросанный "бенчмарк" из прикрепленного файла
    Class User.SpeedTest Abstract ]
    {

    /// do ##class(User.SpeedTest).SpeedTest()
    ClassMethod 
    SpeedTest() As %Status
    {
      
    do $zf(-1,"cat /proc/cpuinfo | grep ""model name"" | uniq")
      
    do $zf(-1,"cat /proc/cpuinfo | grep ""cache size"" | uniq")  
      
    do $zf(-1,"uname -srv")
      
    w $ZV,!
      
      
    set icount = 1E6
      
    "Pass 1 - simple local operation benchmark    "
      
    set starttime $ZH
      for 
    i=1:1:icount {
        
    set random $random(1000)
        
    set curdate $ZD(+$H,3)
        
    set month $ZDH($p(curdate,"-",1,2)_"-01",3)
        
    set month month random
        
    set tmp random
        
    set inc $increment(tmp,month)    
      
    }
      
    set stoptime $ZH
      w 
    (stoptime-starttime)_"s ~ "_(i/(stoptime-starttime))_"cps",!

      
    kill ^||month
      
    "Pass 2 - private global operation benchmark  "  
      
    set starttime $ZH
      for 
    i=1:1:icount {
        
    set random $random(1000)
        
    set curdate $ZD(+$H,3)
        
    set ^||month = $ZDH($p(curdate,"-",1,2)_"-01",3)
        
    set ^||month = ^||month + random
        
    set tmp random
        
    set inc $increment(^||month,tmp)
      
    }
      
    set stoptime $ZH
      w 
    (stoptime-starttime)_"s ~ "_(i/(stoptime-starttime))_"cps",!
      
    kill ^||month
      
      
    w $ZDT($H,3),!
      
      
    quit 1
    }

    }

    Создаю виртуалку с CentOS 6.7 - Linux 2.6.32-573.8.1.el6.x86_64 #1 SMP Tue Nov 10 18:01:38 UTC 2015
    и делаю два теста на двух версиях Cach'e
    Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2014.1.4 (Build 803_1U) Thu Jul 23 2015 18:08:17 EDT
    Pass 1 - simple local operation benchmark    2.794729s ~ 357816.446603588398cps
    Pass 2 - private global operation benchmark  4.825136s ~ 207248.0444074529713cps
    
    Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2015.2.1 (Build 705U) Mon Aug 31 2015 16:53:38 EDT
    Pass 1 - simple local operation benchmark    2.5373s ~ 394119.7335750601033cps
    Pass 2 - private global operation benchmark  4.435325s ~ 225462.6211157017806cps
    

    Вижу что 2015 немного быстрее 2014

    Теперь в эту же виртуалку ставлю CentOS 7.1 - Linux 3.10.0-229.20.1.el7.x86_64 #1 SMP Tue Nov 3 19:10:07 UTC 2015
    и делаю те же два теста на двух версиях Cach'e
    Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2014.1.4 (Build 803_1U) Thu Jul 23 2015 18:08:17 EDT
    Pass 1 - simple local operation benchmark    3.645441s ~ 274315.2337398959413cps
    Pass 2 - private global operation benchmark  5.662981s ~ 176585.4414839110355cps
    
    Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2015.2.1 (Build 705U) Mon Aug 31 2015 16:53:38 EDT
    Pass 1 - simple local operation benchmark    3.496129s ~ 286030.6355972562797cps
    Pass 2 - private global operation benchmark  5.280198s ~ 189386.8373875373613cps
    

    и ... вижу нехилое такое падение производительности 18-25% :(

    Запуск "openssl speed md5 sha512 aes-256-cbc" на обоих OS выдает практически одинаковые цифры,
    то есть можно допустить что производительность "виртуалки" не меняется

    Может кто либо провести схожие тесты или хотя бы тесты на 7-й ветке rhel ?
    И конечно же высказать мысли по поводу стука в подвале ?

    К сообщению приложен файл (SpeedTest.xml - 1Kb)
    Ответ: Ptn,

    (Ну и старье у вас там работает, могу заметить...)

    Кое-что я напишу здесь в форум, но остальное более эффективно обсуждать лично (через письмо/скайп/телефон) а не через форум. Найдите мои контакты в сети, или обратитесь через support@intersystems.com

    Итак имеем 3 процессора:

    E5520 @ 2.27GHz - Nehalem EP (серверный 2х сокетный Nehalem)
    X3430 @ 2.40GHz - Lynnfield (десктопный 1 сокетный Nehalem)
    X3450 @ 2.67GHz - Lynnfield (десктопный 1 сокетный Nehalem)

    Все они имеют одну архитектуру ядра - Nehalem, и выпущены на одном техпроцессе - 45нм. Разница между десктопными версиями - в верхней разрешенной частоте (хотя, немного повозившись, можно разогнать и выше, чего уж там). И почему-то в выключенном SMT (HyperThreading) у X3430. Разница серверной и десктопной версии в наличии QPI канала между кристаллами, и всего остального волшебства, связанного с QPI (например в двое большей пропускной способности канала к памяти).

    В вашем простеньком, прямо скажем, анти-научном тесте разница между серверной и десктопной версией процессоров (большая пропускная способность каналов в память) выстрелить не могла. Потому, вполне логично что E5520 и X3450 на похожей частоте дают похожие результаты (в пределах статистической погрешности).

    Вопрос в том, почему почти идентичные X3430 и X3450 так по-разному себя ведут? И не показывают ожидаемого выигрыша от увеличения частоты с 2.4 до 2.67 (или в режиме турбо-буста с 2.8 до 3.2)? Думаю ответ в использовании исполнительных устройств в режиме SMT (HT).

    Простой эксперимент с выключением HT в BIOS X3450 должен подтвердить или опровергнуть данную теорию.

    Но еще раз, я призываю Вас не использовать коротко-живущие, ни разу не показательные, непоследовательные тесты для сравнения производительности процессора. Используйте хотя бы %BENCHLANG (он очень простой). И вторая просьба, если Вы хотите продолжить эти исследования - обратитесь к нам по другим каналам. Этот форум - это не канал для поддержки и тем более не канал для исследования проблем с производительностью (коли такие будут когда).
    Вопрос: Где скачать mysql 8.

    Где скачать mysql 8 installer для win 10 64 битной.
    На сайте mysql.com нашел инсталлер только дляя 32 битной винды.

    C ув. Tors
    Ответ: Инсталлер 32 битный.
    Я выбрал вариант установки dev.
    И он прекрасно скачал и установил 64 битный сервак. :)

    А в выборочной установке мона установить как 32 так и 64 битную версию. :)

    И не надо ничего компилить и собирать. :)
    Вопрос: Cache for Linux. ODBC connection to MS SQL

    Всем привет.
    Есть сервер Cache 2010.2 под управлением SuSE. И есть задачка, попробовать сделать odbc подключение к ms sql серверу (есть у нас там несколько хранимок, вот и хотим поэкспериментировать с вызовом их из каше :) )
    В сети нашел документацию майкрософта (и не только, есть сторонние заметки) по настройке драйвера под unixODBC. По этой документации поставил драйвер, настроил DSN, попробовал запустить sqlcmd - всё гуд, соединение выполняется.
    А вот с для Cache, как то всё не очень очевидно. Не получается добавить работающее соединение в портале управления. Мож конечно чего не так делаю в odbc.ini? Из инструкции, я сделал вывод, что Cache использует формат файла odbc.ini для iODBC (уж не знаю, есть ли разница в формате файла с unixODBC) и полей в примере приведено всяко больше, чем майкрософт описывает в своем примере odbc.ini для своего драйвера.
    Может кто пробовал настраивать? Если получалось, опишите вкратце чего делать надо, что бы добавить рабочее соединение к mssql в портале управления.
    Ответ: П.С.М.,

    На самом деле все просто, ставится freetds, в /etc/unixodbc делается файл odbc.ini и там пишем, в качестве примера:

    [TESTSERV]
    Driver = /usr/local/lib/libtdsodbc.so
    Setup = /usr/lib/libtdsS.so
    FileUsage = 1
    SERVERNAME = SRVZ

    в файле /usr/local/etc/freetds.conf

    [SRVZ]
    host = 192.168.99.99
    port = 1433
    client charset = cp1251
    tds version = 7.0

    Обращаю внимание на кодировку, она указана для cache 8-bit, с русскими буквами такая конфигурация работает.

    Есть сомнения, надо ли перезапускать кащея после правки odbc.ini, но это легко проверить.

    Далее в настройка cache , "Конфигурация SQL шлюза" создаем новое соединение ODBC, выбираем, к примеру, в качестве DSN = TESTSERV и указываем пользователя и пароль.
    Вопрос: формат выражений для оператора MATCH (?) в Cache

    формат который мы используем
     if phone?1"8"3N1"-"7N
    Это чисто Cache синтаксис или какой то более общий?
    Ответ:
    u78
    Это чисто Cache синтаксис или какой то более общий?
    Вопрос: Организация обмена данными между серверами Cache' через Socket коннект (PuTTY.exe)

    Доброго времени суток.
    Решил поделиться с сообществом альтернативной технологией обмена данными между серверами Cache’ и сторонними языками программирования, поддерживающие Socket коннекты.


    Для начала, немного о причине появления этой технологи:
    Появилась необходимость получать большие объемы данных между двумя серверами Cache’. Задача казалось бы простая, и решается стандартными методами, с применением вэб технологий, но при реализации, лично я столкнулся с подводными камнями. Главной проблемой стала ошибка “Таймаута”. Данные перед отправкой очень долго подготавливались. Можно включить мозг и начать оптимизировать предварительную подготовку данных, но было лень это делать, и я пошел другим путем.
    Был разработан контроллер, позволяющий прямое Socket соединение между серверами, а за одно и между любыми средствами разработки поддерживающие сокеты.

    Сервер поддерживает авторизацию и следующие команды:
       "ip"         -  Получить IP адрес клиента со стороны сервера
       "run: w $h"  -  Выполнить однострочную команду
       "cls"        -  Очистить буфер команд на стороне сервера
       "read"       -  Прочитать буфер команд записанные на стороне сервера
       "run"        -  Выполнить команды записанные в буфере на стороне сервера
       "runline"    -  Выполнить построчно команды записанные в буфере на стороне сервера
       "key"        -  Получить ключ сесии
       "exit"       -  Разорвать соединение
       "ping"       -  тестовый запрос (после него произойдёт разрыв соединения)
       "gl"         -  показать имя  глобал в котором хранится буфер
       "gl:^GBuff"  -  Установить имя  глобала в котором хранится буфер
       "setapp:AppName"- Указываем название приложение из которого подключились 
       Все остальные строки записываются в буфер  на стороне сервера.
    


    Проверить работу можно применив PuTTY.exe

    Если кого заинтересует этот контроллер, и появятся идеи, как улучшить код, буду рад внести изменения.


    Пример подключения между серверами, и выполнения MUMPS команды (взят из документации к классу)
          s obj=##class(%ZMSrv.Controller).%New()
          s obj.Host="127.0.0.1"
          s obj.Port=6006
          s obj.UserName="_SYSTEM"
          s obj.UserPass="SYS"
          s obj.NameSpace="USER"
          if obj.Connect()=1 {
             w !,obj.Send("ip")     
             w !,obj.Send("run: w $ZU(110)")       
             ; Наполняем буфер командами Cache'
             d obj.Send(" for a=1:1:100  d ")       
             d obj.Send(" .   w $JOB_"":""_a         ")      
             d obj.Send(" .   w $c(13,10) ")     
             w !,obj.Send("run") ; запустить выполнение команд в буфере
             d obj.Send("cls")   ; Очистить буфер на стороне сервера 
             w !,"SessionKey: "_obj.SessionKey
          }else{
             w !,"Error: "_obj.Error,!
          }
          d obj.DisConnect()
          q
    


    Получить объект по ID
              s obj=##class(%ZMSrv.Controller).%New()
              s obj.Host="127.0.0.1"
              s obj.Port=6006
              s obj.UserName="_SYSTEM"
              s obj.UserPass="SYS"
              s obj.NameSpace="SAMPLES"
              if obj.Connect()=1 {
                s ExternalObject=obj.GetObject("Cinema.Film","1" )  
                zw ExternalObject
              }else{
                w !,"Error: "_obj.Error,!
              }
              d obj.DisConnect()
    


    Получить объекты из Query запроса
                      s obj=##class(%ZMSrv.Controller).%New()
                      ;   s obj.Host="127.0.0.1"
                      ;   s obj.Port=6006
                      ;   s obj.UserName="_SYSTEM"
                      ;   s obj.UserPass="SYS"
                        s obj.NameSpace="SAMPLES"
                        if obj.Connect()=1 {
                          if obj.SqlQuery("","%Dictionary.ClassDefinition:Summary" )'=1  q
                          for  {
                              s resNext=obj.SqlQueryNext("")
                              q:resNext=0
                              if resNext="" {
                                 w "Error: "_obj.Error,!
                                 q
                              }
                              s re=obj.SqlQueryGet("")
                              zw re
                          }
                             
                        }else{
                          w !,"Error: "_obj.Error,!
                        }
                        d obj.DisConnect()
                        q
    
    Ответ: Будет работать начиная с 2016.2 как есть. Адаптировать для REST без динамических объектов (2014.2) или вообще без REST на CSP не представляется сложным. С выходом InterSystems IRIS Data Platform скорее всего будет работать как есть.
    Вопрос: Перенос пользователей из Cache на DB2

    Cache 2012.2.3

    Стоит задача:
    Перенести пользователей с Cache на DB2 с сохранением паролей.
    Начал копать. В области %SYS есть класс Security.Users, в нем хранятся пользователи с хешем пароля и солью к паролю.

    Из кода:
    /// PBKDF2 hashed password for Cache Authentication.<br>
    /// This is used with a salt function obtained from 
    /// $System.Encryption.GenCryptRand. This property is set by the class when the
    /// PasswordExternal property is modified. Do not set this property directly.<br>
    /// To modify the password for a user using objects, get an instance of the object and
    /// modify the PasswordExternal property:<br>
    /// i '..Exists(Username,.User,.Status) q Status<br>
    /// s User.PasswordExternal=Password<br>
    /// s Status=User.%Save()<br>
    Property 
    Password As Security.Datatype.Password(MAXLEN 20);

    /// Clear text password.<br>
    /// This property is not stored in permanent storage. It is initially set to
    /// the value of $c(0). When it is modified, the Password property is updated
    /// to the PBKDF2 salted hashed value.
    Property 
    PasswordExternal As %String(MAXLEN 128XMLPROJECTION "NONE") [ InitialExpression = {$c(0)}, Transient ];

    /// Salt value for Hashed password from $System.Encryption.GenCryptRand.<br>
    Property 
    Salt As %Binary(MAXLEN 8);


    Пытаюсь воссоздать функцию для получения хеша пароля пользователя так, как это делает Cache:
    ClassMethod check(userName As %Stringpassword As %StringAs %String
    {
      
    zn "%SYS"
      
    set user ##class(Security.Users).%OpenId(userName)
      
    !, "hash = "_$System.Encryption.PBKDF2(password, 1, user.Salt, 20) 
      
    !, "db_hash = "_user.Password
      zn 
    "USER"
      
    quit $$$OK
    }

    В итоге через портал создаю пользователя test с паролем 12345678,
    После в терминале: ##class(User.CheckPass).check("test","12345678")

    В итоге получаю разные хэши! По какому алгоритму cache генерирует хэш для пароля пользователя?
    Ответ: 2acid,
    Спасибо
    $$$CachePWIterations = 1024, а я использовал 1