вторник, 19 апреля 2016 г.

Как объяснить инопланетянину по радио, что такое левое и правое?

Эта страничка посвящена проблеме, вынесенной в заголовок. Есть такая идея, что понятие левого и правого органически присуще трехмерным вращениям и, вообще говоря, не имеют смысла в двумерном пространстве. Так же есть идея, что существование левых и правых троек векторов есть проявление одного из видов сопряжения. Пока хочу собрать разведданные о том, что может стать известно без разработки специальных разделов математики. Все приведенные на странице материалы являются общедоступными и могут быть получены из иных источников либо принадлежат мне.

понедельник, 18 апреля 2016 г.

Христиан Феликс Клейн. Лекции о развитии математики в XIX столетии. Гамильтон.


Отрывок перепечатан по изданию

Клейн Ф. Лекции о развитии математики в XIX столетии: в 2-х томах. Т. I: Пер с нем. / Под ред. Постникова. - М.; Наука. Гл. ред. физ.-мат. лит., 1989.
ISBN 5-02-013920-3.

воскресенье, 17 апреля 2016 г.

Cache': Вызываем метод базового класса

Эта заметка описывает способы вызова метода базового класса на языке Cache ObjectScript.

Положим, что существует два класса, один из которых наследован от другого и наследник переопределяет одну из функций базового класса. В переопределенной функции требуется вызвать такую же функцию базового класса. Положим, имя базового класса BaseClass, имя наследника DerivedClass. Положим, что переопределяемый метод называется Func.

суббота, 16 апреля 2016 г.

Cache': Обращаемся к своему свойству

В методе объекта обратиться к своему свойству можно 4-мя способами. Когда какой предпочтительней и какая между ними разница?

Комментарии в Cache

Комментарии в Cache есть. Это специальным образом отмеченная программистом последовательность символов, которая не используется компилятором. В них можно писать разные полезные слова, которые останутся и которые потом можно будет прочитать, например ругательства. В комментариях можно писать на любом языке. Это общеизвестные факты. Теперь посмотрим какие именно комментарии поддерживает Cache и какие у них есть особенности.

MUMPS: Техника группировки

В этой статье рассмотрим техническую часть группировки данных. В качестве базы данных выберем СУБД Cache' или MiniM, поскольку в них существует возможность самостоятельно использовать собственные структуры данных. Из общих слов на тему "зачем" можно сказать, что типа такие задачи возникают при составлении отчетов, что это очень важно, не всегда понятно, и прочее. Все вопросы на тему "зачем" в дальнейшем будем опускать и займемся вопросом "как". А именно, как сделать так, чтобы работало, работало хорошо и чтобы было понятно, какие возможности предоставляет техника группирования.

пятница, 15 апреля 2016 г.

Cache': Отладка callout-модуля

Callout-модуль для Cache' для Win32 представляет собой dll, которая динамически подгружается процессом Cache'. Для проведения отладки dll нужно предпринять необходимые действия:
  • Использовать средства разработки, содержащие отладчик dll. В примере используется Borland C++ Builder 5.
  • Собрать dll с отладочной информацией.
  • Оговорить правила размещения dll.
  • Вызвать хост-процесс из-под отладчика.
Из приведенных пунктов вызвать какие-либо затруднения могут только последние два, остальные достаточно очевидны. Продемонстрирую на примере проекта для Borland C++ Builder как именно решить возникшие вопросы.

MUMPS: проверка корректности синтаксиса

Как проверить корректность синтаксиса в MUMPS системе?

MUMPS: Очередность выполнения и вычисления выражений

Одна из основных проблем языка mumps состоит в недостаточно точном понимании программистами очередности вычисления выражений и выполнения операций в языке. Так, что это не совсем проблема языка, а некоторого его отличия от других. В других языках точно так же присутствует модель вычисления выражений и определенные соглашений, которые могут поставить программиста в тупик при смене языка. Например выражение
int i = 5;
i = ++i + ++i;
в разных языках может дать различные результаты:
C++      14
cl       14
bcc      14
lcc      13
gcc      13
php      13
C#       13

Cache': Где наша переменная цикла?

Исследуя поведение Cache при выполнении циклов я обнаружил, что система имеет существенное отклонение от стандарта MUMPS при работе команды for с переменной цикла.

Cache': Удаляем русскую локализацию

При первоначальной установке Cache (все описания относятся к версии Cache 5.2.0.329 и на других версиях не проверялись), в каталоге CacheSys\Bin (каталог по умолчанию) устанавливаются специальные dll локализации, содержащие локализованные сообщения и диалоги для разных языков. Для использования английского языка в Cache на Windows с русским языком, dll с ресурсами русского языка необходимо переименовать или удалить (если кто-то помнит, то в версии Cache 5.0.х существовала настройка в Configuration Manager "English Mode Only").

Caché: Борьба с deadlock

Deadlock, или мертвая блокировка - это явление, событие или состояние двух или более процессов, один из которых, заблокировав ресурс 1, ожидает освобождения ресурса 2, но ресурс 2 в свою очередь заблокирован другим процессом, и он ожидает освобождения ресурса 1. Эта ситуация разрешима только указанием времени истечения ожидания и переводом этой ситуации в состояние ошибочной, с откатом в связи с невозможностью выполнить какое-то действие.

Мне было интересно, что может предпринять программист в свою очередь, чтобы не допустить deadlock. Не имея столь же красочного и таинственного русскоязычного термина, буду так и писать - deadlock.

четверг, 14 апреля 2016 г.

Как измерить эквивалентность гравитационной и инертной массы?

В теории гравитационная и инертная массы равны. Или считаются равными без доказательства. Или постулируются равными. Так ли это на самом деле и можно ли это измерить?

Cache': О безопасности csp приложений

Что я рекомендую сделать для повышения безопасности Cache' при выставлении csp приложений в интернет.

Cache': Передача аргументов

Эта заметка посвящена передаче аргументов в функции на Cache Object Script. Изложение материала предполагает понимание различия между формальными и фактическими параметрами.

Cache': Дефект в косвенности аргумента команд

При исследовании особенностей выполнения argument indirection в различных реализациях MUMPS, я натолкнулся на дефект его реализации в cache и msm.

Cache' Backdoors Guide

Installing a 100% Secured Cache' System

Как измерить размерность пространства?

В книге "Преобразования гиперкомплексных чисел" было описано различие между размерностью пространства и степенями свободы. Это различие было основано на свойствах группы преобразований, и размерность пространства есть следствие свойств группы преобразований.

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

вторник, 12 апреля 2016 г.

Cache': Как спрятать данные от команды kill?

В работе с Cache на совсем низком уровне, как-то возникла задача что-то записывать и запоминать в локальных данных процесса, но таким образом, чтобы это не было видно обычным командам и в первую очередь команде kill. Интерес представляет что-то более масштабируемое чем чтение - запись переменной $DEVICE или установка блокировок и чтение ^$LOCK.

Cache': zobj команды и $zobj функции

Далее по тексту используется сленг, слово oref означает Object REFerence, ссылка на объект. В приведенном списке те функции и команды которые не указаны в документации на Вашу версию Каше, являются недокументированными. В различных версиях Каше поведение недокументированных функций и команд может отличаться, или некоторые команды и функции могут отсутствовать. Кроме того крайне рекомендуется трижды проверить необходимость использовать нижеприведенные функции и команды и тщательно изучить документацию на используемую Вами версию Каше, при возможности обратиться к консультантам Intersystems и детально проверить поведение команд и функций в ошибочных ситуациях. При нормальном течении разработки приложений нижеприведенные материалы скорее всего не должны понадобиться.

понедельник, 11 апреля 2016 г.

Cache': Как написать свою функцию агрегации для group by?

В некоторых случаях, при использовании выборки с группировкой (group by), хотелось бы использовать свой алгоритм агрегации значений. Как это сделать в Cache?

Cache': Как сделать двунаправленный запрос

Мне давно было интересно, можно ли сделать в Cache' такой запрос, чтобы его можно было бы прокручивать назад, например что-то вроде команды, парной к Fetch, например Prior. Собственные средства Cache' почему-то не предоставляют такой возможности. Для этого я изучил характер взаимодействия sql-движка с Cache Object Script. В результате исследований выяснилось, что это возможно, хотя и не столь гладко, как бы того хотелось. Надеюсь, читатель с пониманием отнесется к возникшей некрасивости.

Cache': Как сделать select from limit

В некоторых случаях, при использовании sql, нужно ограничить выборку числа строк, указав с какой строки выдать и сколько строк выдать. Как сделать то же самое в Cache?

Cache': Как параметризовать select from in?

Как в cache sql передать через параметр несколько значений в выражение in?

Cache': Как развернуть значение параметра в несколько строк

В некоторых случаях при использовании хранимых процедур ну очень хочется иметь механизм получения нескольких строк в select где значения строк определяются содержанием параметра запроса. Как это сделать в Cache?

воскресенье, 10 апреля 2016 г.

Cache': Как сделать select from dual

В некоторых случаях, при использовании хранимых процедур, ну очень хочется иметь механизм аналогичный псевдотаблице dual из Oracle. Как сделать то же самое в Cache?

Cache': Где наши данные?

Как получить доступ к данным с нестандартным размещением через объектный и sql интерфейсы?

Caché: Прямой доступ через ODBC


Caché: Прямой доступ через CacheObject

В качестве одного из основных способов доступа к базе данных Caché InterSystems предлагает COM - библиотеку CacheObject. Это библиотека, реализующая объектный интерфейс на стороне клиента к объекту на стороне сервера. Благодаря тому, что COM - объекты поддерживают динамическое изменение типа, становится технически возможным использование одной библиотеки типов, которая может поддерживать различные классы. Что и было реализовано в CacheObject.

Создав объект класса CacheObject.Factory, мы можем в соединенном с базой данных состоянии создать экземпляр любого объекта Caché. При этом клиентская сторона не нуждается в переписывании и пересборке при изменении серверной части.

Вызываем Cache!

Данный материал является справочным. Статья ни в коем случае не призвана заменить официальную документацию Intersystems и предназначена только для использования в качестве CookBook.

Основным общедоступным механизмом доступа к объектам Cache по стратегии Intersystems является набор COM объектов, организованный в библиотеку CacheObject.dll. Библиотека располагается в каталоге установки Cache c:\cachesys\bin. При корректной инсталляции все необходимые интерфейсы регистрируются в системе и библиотека доступна к использованию. Описание интерфейсов библиотеки находится в c:\cachesys\docs\activexref\index.html. Каталоги указаны в том виде, в котором они предлагаются инсталлятором по умолчанию.

Три трюка с макросами

Приведу три довольно полезных трюка с макросами в Cache'.


суббота, 9 апреля 2016 г.

Проверка строки на "списочность"

В конференции CACHE_RU проходило обсуждение вопроса о возможности определить является ли строка корректным списком CACHE'. Было выяснено при обобщении информации поступившей из различных источников, что
  • Можно сформировать строку произвольного содержания, не пользуясь списковыми функциями
  • Строка, сформированная списковыми функциями, ими же обрабатывается корректно
  • В ситуации, когда строка сформирована несписковыми функциями, в некоторых случаях она может некоторыми функциями как список, а другими как не список
  • Существуют строки, при определении которых на списочность процесс завершается аварийно
  • Существуют программы, которые не могут определить происхождение строки и была ли она сформирована списковыми функциями или нет
  • Спустя некоторое время представители фирмы Интерсистемс сообщили, что исправления проблемы войдут в билд 5.0.5 и более поздние. Выдержка из внутренней технической документации:
    Prodlog Item 34439  Edited by Sorenson,Chuck
    ------------------------------------------------------------
    MOST RECENT CHANGES:
    4) 2003-10-31 16:58:09 Modified by Sorenson,Chuck
    DEVCHANGE changed to: CDS346
    FIXER changed from: Unknown  to: Sorenson,Chuck
    STATUS changed from: Dev  to: Test
    
    COMMENT:
    I ported CDS346 and CDS405 to 5.0.6 build 1006
    and 5.0.5 build 912.
    
  • После довольно бурного обсуждения проблемы вопрос был объявлен модератором группы оффтопиком, поэтому все последующие его обсуждения следует производить вне группы CACHE_RU.
Собственно, это и было причиной появления этой заметки.

Cache': Как в списке удалить или вставить элементы?

Вопрос. Если есть список полученный с помощью $listbuild(), то как в нем вставить другие элементы в заданной позиции или удалить элементы из заданной позиции? Как взять подсписок из списка?
Ответ. Эти операции выполняет трехаргументная форма функции $list().

пятница, 8 апреля 2016 г.

Cache': перенос классов без исходников

При распространении коммерческих приложений иногда возникает вопрос о сокрытии исходного кода приложения. При написании приложения для Cache' перенос приложения выполняется путем переноса объектного кода. На машине разработчика производится экспорт рутин в объектном формате, на целевой машине они импортируются. Поскольку для работы интерпретатора требуются только объектники, то приложение работает нормально.

В современных условиях программисты все чаще прибегают к применению объектных технологий, в том числе при разработке приложений для Cache'. Но перенос классов с сокрытием исходного кода уже не такая простая задача. Формально предоставляемые средства предполагают экспорт класса в файл в формате cdl либо в формате xml в более современных версиях. При переносе же в этом формате предполагается перенос и исходного кода классов, его импорт на целевой машине и компиляция. Какие могут быть варианты сокрытия исходного кода при работе с классами?

М-системы: нестандартный $tr

Интересный способ использования функции $translate состоит в использовании её в неочевидных на первый взгляд перестановках.

Книжки про MUMPS

Литература, которую можно скачать и почитать про язык программирования MUMPS, кроме штатной документации от производителей MUMPS систем.

Доступ к MSSQL из Cache' на платформе Linux

Поделитесь пожалуйста опытом, у кого работает связь с MSSQL 2000 из под Cache' 5.0.20 (ну или других версий) на платформе Linux. Cache' должна выступать в качестве клиента, MSSQL соответственно сервера. Какие драйвера ODBC используются?

Cache: Ищем в потоке или в сегментированных данных

Как найти подстроку в потоке или в данных, которые представлены последовательностью строк?

MUMPS и объекты

Когда появился MUMPS мне точно не известно, я считаю что где то в 70 годы прошлого столетия. Он был стандартизован в США достаточно быстро одним из первых языков программирования. Что говорит о его неординарных свойствах. Меня он поражает компактностью, логической целостностью, полнотой, выразительностью и завершенностью. С помощью минимального набора средств он решает огромный круг задач. Современные языки имеют не богатый набор команд и как правило большие стандартные библиотеки. Совокупность этих 2 элементов собственно и есть языковое средство. И если сами языки более менее компактен , то библиотеки достаточно сумбурны. На их фоне MUMPS и его стандартная библиотека резко выделяются компактностью. Возможности MUMPSа несмотря на это в части обработки данных значительно шире за счет того что в язык включены иерархические структуры данных хранимые на дисках (глобали).

четверг, 7 апреля 2016 г.

MSM: Компиляция исходных текстов

Обзор

MSM-Server, начиная с версии 4.3 и MSM-Workstation позволяет писать программный код в исходниках. При этом появляется замечательная возможность использовать в исходниках макроопределения. Такие исходники компилируются в обычные М-программы при сохранении их на диск. При этом сами исходные тексты сохраняются в глобали:
  • ZMSMMAC - библиотеки макроопределений
  • ZMSMSRC - исходники.
Похожая возможность есть и в Cache'. Там при создании программы редактор спрашивает какой тип кода надо создать. Есть три возможных варианта.

Cache': Просмотр базы read-only

Если в каше смонтировать базу данных в режиме "только чтение", то проводник не показывает список имеющихся глобалов с сообщением об ошибке.
---------------------------
Сообщение об ошибке
---------------------------
<PROTECT>onedir+2^%GXLINFO
---------------------------
ОК
---------------------------

CacheObject: SetOutput в Delphi

Основной механизм соединения с Cache' при построении клиент-серверных систем и традиционных средств разработки класса Delphi, Borland C++ Builder и других - это ActiveX-комплект CacheObject.

При его использовании без VB может быть потеряна функциональность callback, а именно так называемый механизм получения терминального вывода процесса. В VB используется конструкция
set CacheFactory = CreateObject("CacheObject.Factory")
CacheFactory.SetOutput( TextBox)
Здесь TextBox - это компонент многострочного вывода.

При вызове на сервере метода какого-либо класса, который возвращает информацию не в виде возврата функции, а отправляя в текущее устройство вывода, например, $System.OBJ.ExportCDL(), объект CacheFactory перенаправляет вывод в компонент VB, указанный в SetOutput. Поскольку в Delphi и BCB нет бейсикового textbox, возникает проблема.

Cache': О непечатном

Как посмотреть что именно содержится в строке если команда write выводит какие-то непонятные непечатные символы?

Cache emergency mode

На случай непредвиденных обстоятельств, таких как отказ системы безопасности, либо утеря паролей пользователей и т.д., Cache предоставляет доступ в специальном аварийном режиме (emergency mode).

Cache': Торможение при индексировании

Пытаюсь проиндексировать float-значение у всего-то двух миллионов записей:
f i=1:1:2000000 d
. s ^A4Test("I",$r(1000000)/100,i)=""
. w:'(i#10000) i,!
До 790000 процесс идет достаточно шустро, после чего производительность катастрофически падает (4.1.10 и 5.0). Это лечится? Есть какие-нибудь рекомендации по этому поводу?

Cache': Политика обработки ошибок в приложениях

Данный документ представляет собой пример "политики по обработке ошибок". Сформулированные здесь правила представляют собой свод проверенных на практике приемов и решений по обработке ошибок в Cache приложениях. Вы можете использовать ее в качестве примера для разработки правил обработки ошибок в своем коллективе.

Cache': перехват текущего устройства

Эта заметка описывает программный перехват ввода-вывода текущего устройства в Cache'. Неудобство стандартных устройств mumps, а точнее определенного их поведения состоит в том, что если выполняется программный код, осуществляющий ввод-вывод через него, то этот процесс сторонним кодом не управляем иначе как установкой возможных опций устройству. В то время как в некоторых случаях очень нужно иметь возможность выполнить так называемый унаследованный (legacy) код, который оперирует текущим устройством, но при этом в самих операциях ввода-вывода произвести дополнительные действия.

Синхронные луны

Мы привыкли к нашей Луне. И к звездам. Они для нас движутся так, как будто скользят по небу. Собственно говоря, многие века люди полагали что так оно и есть. Расхождение было лишь в том, плоская Луна или это конус, скользящий круглым торцом по стеклянному небосводу. Потом конечно разобрались, что Луна так движется потому, что повернута к нам строго одной стороной.


понедельник, 4 апреля 2016 г.

Caché: профилируем программу

Для профилирования программы в Cache' версии 5.0.4 появилась утилита ^%MONLBL. Эта утилита предоставляет интерфейс к механизму сбора статистики выполнения программ. Для ее использования следует
  • запустить утилиту профилирования
  • выполнить профилируемый код
  • остановить профилирование и вывести результаты

воскресенье, 3 апреля 2016 г.

М-программисты настолько суровы...

Однажды я решил повторить "Челябинские мужики настолько суровы..." из сериала "Наша раша", но в переложении к М-программистам. Знакомые посоветовали начать выкладывать на форуме. Народ поддержал, и вот что получилось.

Пользовательские z-переменные и z-функции в Cache'

Cache' позволяет определить пользовательские z-функции и z-переменные таким образом, что они будут доступны из любой области. К переменным относятся объекты, синтаксически употребимые в контексте переменных, например:

s <varname>=<varvalue>
w <varname>

При этом в <varname> входят только символы латинских букв, цифры и специальные символы таким образом, что лексема <varname> может быть подставлена вместо локальной переменной. Для того, чтобы создать пользовательскую системную переменную, в Cache' зарезервированы рутины в области %SYS c %ZLANGV00.INT до %ZLANGV08.INT.

Вырабатываем командный голос или zz-команды в Cache

Cache позволяет создавать пользовательские команды, получившие название zz-команды. Пользовательская команда - это команда, написанная пользователем и использующаяся интерпретатором Cache наравне с другими командами.

Определяемые пользователем команды должны иметь, согласно стандарту, первые два символа zz. После чего любые латинские буквы и цифры. Например, zzab34. Регистр символов роли не играет. Определять команду нужно в верхнем регистре, а использовать ее можно в любом регистре, соответствие ставится приведением по латинице.

Почему я не люблю Что-Где-Когда

Я не люблю не только передачу "Что где когда", но и еще несколько, дело не именно в ней, но эта передача характерна. В чем она состоит? Собираются люди, умные, эрудированные, и им даются вопросы, на которые надо дать ответ за короткое время. В передаче дается 1 минута, но это не суть важно сколько. Во многих других передачах также предлагается ответить на вопросы за короткое время.

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

Онлайн калькуляторы

Калькуляторы специализированных вычислений, например решение квадратного уравнения или системы линейных уравнений.

Когда учился в институте, у меня был калькулятор Б3-32, имевший встроенное вычисление корней квадратного уравнения и решение системы линейных уравнений второго порядка. Примерно такой как на фото:
Этот калькулятор, помнится, очень сильно помогал в написании массы курсовых, и именно за счет таких специализированных вычислений. Теперь, когда есть компьютеры и браузеры с языком программирования JavaScript, такие специализированные калькуляторы могут быть всегда под рукой.

Решение квадратного уравнения

Введите параметры уравнения, нажмите "Решить". В браузере должна быть включена поддержка JavaScript. Ввод дробных чисел - через точку, например, 3.1415.

Решение уравнения третьего порядка

Введите параметры уравнения, нажмите "Решить". В браузере должна быть включена поддержка JavaScript. Ввод дробных чисел - через точку, например, 3.1415.

Нахождение факториала

Введите число, нажмите "Вычислить". Число n должно быть целым.

Нахождение биномиального коэффициента n / m

Введите параметры, нажмите "Вычислить". Числа m и n должны быть целыми.