30 сент. 2009 г.

Журнал внедрения и сопровождения

Перепробовали разные способы и вернулись к старой доброй ученической тетради в клеточку.

21 сент. 2009 г.

COBOL Celebrates 50 Years

Сегодня день рождения языка программирования COBOL — 50 лет! Между прочим, три четверти делового ПО в мире разработано и продолжает развиваться на этом языке.

PS: а еще кто-то будет утверждать, что Гедымин устарел, так как написан на пятом Delphi.

20 сент. 2009 г.

Вежа Гэдыміна

Гэдымін быў сынам вялікага князя Віценя і ўзышоў на вялікакняскі пасад у 1316 годзе пасля сьмерці бацькі. Пачатак яго княжання быў пазначаны перамогай над крыжакамі пад Жэймамі. Каб супрацьстаяць Ордэну, вялікі князь узводзіць шэраг замкаў на паўночным захадзе Беларусі й поўдні Літвы — у Троках, Вільні, Медніках, Навагарадку, Лідзе, Мядзелі. Ён жа пераносіць сталіцу Вялікага Княства з Навагарадка ў Вільню — старадаўні цэнтр крывіцкай калянізацыі, — і будуе там замак. Пра тое ў гэтак званым "Віцебскім летапісе” напісана вось што: ...

Чытаць цалкам у блоге Сяргея Харэўскага.

Пять минут славы

Неизвестный нам сайт mycode.ws (нарочно не ставлю здесь гиперссылку) почти слово в слово скопировал себе Краткий курс SQL. Почти — потому что из текста напрочь исчезло упоминание про платформу Гедымин. И все бы ничего, и даже отсутствие гиперссылки можно простить, но некоторые поисковики ставят их (то есть наш!) учебный курс выше оригинального. Проверим, искомая строка "краткий курс sql":
  • Google: мы на первом месте, но и копия идет на втором.
  • Bing: копия идет третьей позицией для региона United States и лидирует в списке для Russia. Оригинал вообще отсутствует (!) в первых 5-6 экранах поиска. Сколько сотен миллионов долларов затратила Microsoft на разработку и продвижение такого поисковика? Гугл может спать спокойно.
  • Yahoo: копия во втором десятке результатов, оригинал — в шестом. На первом месте идет ссылка на "Управление данными. Работа с данными в формате XML". Каким образом эта статья соотносится с учебным курсом по SQL для нас загадка. То ли еще будет после объединения технологий Yahoo с микрософтовскими.
  • Yandex: мы первые. Копия отсутствует вообще. А как же Найдётся всё?
  • Rambler: мы вторые в списке. Копии нет, что настораживает. Может быть Yandex и Rambler еще просто не успели ее проиндексировать?
  • Aport вообще решил не показывать никого, а на наш запрос предложил "Купить EMS SQL Manager for MySQL в интернет-супермаркете Softkey-Россия".
Мы не против свободного копирования информации. Используйте на здоровье. Но, не забывайте про два основных правила сетевого копи-пэйста:
  1. Делайте гипер-ссылку на оригинал.
  2. Не искажайте исходный текст.

16 сент. 2009 г.

Оптимизация TgdcCustomClassList

Огромное количество вызовов AnsiCompareText, показываемых профайлером, — следствие неуемного использования сортированных строковых списков тут и там. Начнем с оптимизации TgdcCustomClassList. Заменим внутренний TStringList на TStringHashMap из библиотеки JCL.

UPD: Пока вынуждены все вернуть назад. На индекс класса в TgdcCustomClassList сильно завязаны объекты редактора скрипт-объектов, что уже само по себе неправильно. Зачем хранить индекс в списке, когда можно просто хранить ссылку на класс? И потом, одно добавление в сортированный список и все привязки сделанные к индексам становятся недействительными.

14 сент. 2009 г.

Таблица для классов

Выше (или правильнее будет сказать ниже) мы уже обращались к теме Исследователя и проблеме совмещения информации о правах доступа с визуальным меню. Решение — отделить информацию о правах от набора команд, доступных пользователю. Для этого придется добавить в платформу таблицу с иерархией классов бизнес-объектов и, возможно, экранных форм. Что-нибудь вроде:

CREATE TABLE gd_class (
   id          dintkey,
   parent      dparent,
   name        dname,
   is_subtype  dboolean_notnull,
   aview       dsecurity,
   achag       dsecurity,
   afull       dsecurity
)

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

Создав такую таблицу, сразу возникает вопрос: в какой момент ее заполнять? Не хотелось бы вешать еще одну синхронизацию в момент загрузки программы, наподобие синхронизации информации о структуре БД. Однако, жестко прописывать информацию в базе и требовать от разработчика модифая после каждого изменения иерархии классов, тоже не лучший выход.

На вскидку, еще несколько областей, где таблица со списком классов была бы востребована:
  1. При определении какие поля атрибуты следует включать в запрос бизнес-объекта по-умолчанию. Сейчас соответствующая информация хранится в текстовом виде в поле OBJECTS таблицы AT_RELATION_FIELDS.
  2. Дерево классов в Проводнике Редактора скрипт-объектов можно было бы строить непосредственно по этой таблице.

11 сент. 2009 г.

A little Firebird SQL trick

How to ensure that a table contains no more than one record? Triggers should not be envolved. Here is a code:

CREATE TABLE test (
   id     INTEGER NOT NULL PRIMARY KEY,
   lock   INTEGER DEFAULT 1 UNIQUE,

   CHECK (lock = 1)
)

Delphi Help goes online

A long awaited move from Embarcadero. They finally have adopted wiki technology and put all Delphi documentation online.

6 сент. 2009 г.

Из двух зол

При реализации механизма репликации баз данных приходится выбирать из двух зол: либо максимальная свобода пользователя и неизбежные конфликты при слиянии данных, либо ограничение — что, где и когда можно изменять.

Какое из двух зол будет меньшим зависит от требований клиента и внутренней архитектуры приложения. В случае с Гедымином, механизм фиксации складского движения чрезвычайно чуствителен к очередности обработки документов и некоторые типы конфликтов принципиально не могут быть разрешены "малой кровью". Остается путь с блокировками, когда в один момент времени данные одного типа могут редактироваться только на одной базе.

5 сент. 2009 г.

Будни линуксоидов

На всякий случай запомним, идет вторая половина 2009 года:
В честь того, что все равно с 5 утра занимаюсь пингвинофилией, решил наконец-то разобраться, почему при переходе с 2.6.18 на 2.6.24 помер звук в етче. Оказывается, удалили какую-то фирмварь из ядра, по лицензионным/вуду/идеологическим соображениям, и нужно ее собрать и подсунуть обратно. Выполнил вуду-ритуал, заработало. Одно хорошо, хоть ритуал и вуду, но понятно хотя бы бы в общих чертах, что делаешь.
Десять лет прошло, а воз и ныне там. Не удивительно, что Borland Kylix потерпел полное фиаско. Линукс — это вещь в себе. Ни его пользователям, ни сисадминам, ни тем более программистам не надо простых решений, мощных и понятных инструментов разработки и т.п. Потому что тогда испарится аура великой и могучей, а самое главное жутко таинственной операционной системы, cоприкасаться с которой могут только избранные.

Что правда, никто не отнимет у Линукса его основного преимущества — бесплатной операционной системы.

PS: Есть предприятия в Беларуси, где база Гедымина крутится под Линуксом. Вроде бы под Red Hat Linux.

4 сент. 2009 г.

Профилируем Гедымин

Случайно нашел ссылку на Eric Grange's Sampling Profiler — бесплатный профайлер с поддержкой Delphi 5. Перекомпилировал Гедымин с TD32, запустил под профайлером и поставил загрузку на эталон пакета "Банк и Касса". По завершении процесса собранная статистика отображается в таком виде:
Достаточно информативно и сразу видны узкие места в коде. Правда, 77.5% времени занимает вызов функций WinAPI, так что даже двукратное ускорение всего оставшегося кода даст нам немногим более 10-ти процентов выйгрыша в общей производительности. Пока не было времени определить куда относится время выполнения запросов на сервере. Такое впечатление, что они включены в эти самые 77.5%

Теперь собрать бы статистику у клиентов, в полевых условиях.

3 сент. 2009 г.

Мрачновато?

Пришлось делать заставку по-быстрому для инстоляции на сертификацию компьютерно-кассовой системы.

1 сент. 2009 г.

Рарытэтная застаўка

Гэтай выяве прыкладна 13 гадоў. Пошта на usa.net (папулярны на той час бясплатны паштавік), сайт на open.by...


Калі з прынтарам і жанчынай усё зразумела, яны мусілі асацыяцавацца з нашымі першымі праграмамі для друку плацёжных дакументаў і бухгалтэрыі. Дык, што мусіў азначаць гэты дапатопны трактар, для мяне загадка. Мабыць, намёк на гаротны лёс беларускай сельскай гаспадаркі, пакуль ёй на дапамогу не прыйшло сямейства праграмаў Анжэліка?

PS: Ня трэба тэлефанаваць па гэтых нумарах. Яны даўно ўжо ня нашы :)