Перепробовали разные способы и вернулись к старой доброй ученической тетради в клеточку.
30 сент. 2009 г.
21 сент. 2009 г.
COBOL Celebrates 50 Years
Сегодня день рождения языка программирования COBOL — 50 лет! Между прочим, три четверти делового ПО в мире разработано и продолжает развиваться на этом языке.
PS: а еще кто-то будет утверждать, что Гедымин устарел, так как написан на пятом Delphi.
PS: а еще кто-то будет утверждать, что Гедымин устарел, так как написан на пятом Delphi.
Labels:
цікава
20 сент. 2009 г.
Вежа Гэдыміна
Гэдымін быў сынам вялікага князя Віценя і ўзышоў на вялікакняскі пасад у 1316 годзе пасля сьмерці бацькі. Пачатак яго княжання быў пазначаны перамогай над крыжакамі пад Жэймамі. Каб супрацьстаяць Ордэну, вялікі князь узводзіць шэраг замкаў на паўночным захадзе Беларусі й поўдні Літвы — у Троках, Вільні, Медніках, Навагарадку, Лідзе, Мядзелі. Ён жа пераносіць сталіцу Вялікага Княства з Навагарадка ў Вільню — старадаўні цэнтр крывіцкай калянізацыі, — і будуе там замак. Пра тое ў гэтак званым "Віцебскім летапісе” напісана вось што: ...
Чытаць цалкам у блоге Сяргея Харэўскага.
Чытаць цалкам у блоге Сяргея Харэўскага.
Labels:
гісторыя
Пять минут славы
Неизвестный нам сайт 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-Россия".
- Делайте гипер-ссылку на оригинал.
- Не искажайте исходный текст.
16 сент. 2009 г.
Оптимизация TgdcCustomClassList
Огромное количество вызовов AnsiCompareText, показываемых профайлером, — следствие неуемного использования сортированных строковых списков тут и там. Начнем с оптимизации TgdcCustomClassList. Заменим внутренний TStringList на TStringHashMap из библиотеки JCL.
UPD: Пока вынуждены все вернуть назад. На индекс класса в TgdcCustomClassList сильно завязаны объекты редактора скрипт-объектов, что уже само по себе неправильно. Зачем хранить индекс в списке, когда можно просто хранить ссылку на класс? И потом, одно добавление в сортированный список и все привязки сделанные к индексам становятся недействительными.
UPD: Пока вынуждены все вернуть назад. На индекс класса в TgdcCustomClassList сильно завязаны объекты редактора скрипт-объектов, что уже само по себе неправильно. Зачем хранить индекс в списке, когда можно просто хранить ссылку на класс? И потом, одно добавление в сортированный список и все привязки сделанные к индексам становятся недействительными.
Labels:
оптимизация,
рефакторинг
14 сент. 2009 г.
Таблица для классов
Выше (или правильнее будет сказать ниже) мы уже обращались к теме Исследователя и проблеме совмещения информации о правах доступа с визуальным меню. Решение — отделить информацию о правах от набора команд, доступных пользователю. Для этого придется добавить в платформу таблицу с иерархией классов бизнес-объектов и, возможно, экранных форм. Что-нибудь вроде:
Странно, что это не было сделано до сих пор. Содержимое таблицы GD_COMMAND с самого начала рассматривалось больше, как дерево команд на экране, а не иерархия классов внутри платформы. Наверное, в нашем сознании, классы были настолько неотъемлемой частью именно программы, что возможность поместить их в реляционную таблицу не рассматривалась даже тогда, когда бизнес-объекты своими подтипами уже фактически зависли где-то между выполняемым модулем и базой данных.
Создав такую таблицу, сразу возникает вопрос: в какой момент ее заполнять? Не хотелось бы вешать еще одну синхронизацию в момент загрузки программы, наподобие синхронизации информации о структуре БД. Однако, жестко прописывать информацию в базе и требовать от разработчика модифая после каждого изменения иерархии классов, тоже не лучший выход.
На вскидку, еще несколько областей, где таблица со списком классов была бы востребована:
CREATE TABLE gd_class (
id dintkey,
parent dparent,
name dname,
is_subtype dboolean_notnull,
aview dsecurity,
achag dsecurity,
afull dsecurity
)
Странно, что это не было сделано до сих пор. Содержимое таблицы GD_COMMAND с самого начала рассматривалось больше, как дерево команд на экране, а не иерархия классов внутри платформы. Наверное, в нашем сознании, классы были настолько неотъемлемой частью именно программы, что возможность поместить их в реляционную таблицу не рассматривалась даже тогда, когда бизнес-объекты своими подтипами уже фактически зависли где-то между выполняемым модулем и базой данных.
Создав такую таблицу, сразу возникает вопрос: в какой момент ее заполнять? Не хотелось бы вешать еще одну синхронизацию в момент загрузки программы, наподобие синхронизации информации о структуре БД. Однако, жестко прописывать информацию в базе и требовать от разработчика модифая после каждого изменения иерархии классов, тоже не лучший выход.
На вскидку, еще несколько областей, где таблица со списком классов была бы востребована:
- При определении какие поля атрибуты следует включать в запрос бизнес-объекта по-умолчанию. Сейчас соответствующая информация хранится в текстовом виде в поле OBJECTS таблицы AT_RELATION_FIELDS.
- Дерево классов в Проводнике Редактора скрипт-объектов можно было бы строить непосредственно по этой таблице.
Labels:
безопасность
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)
)
Labels:
SQL
Delphi Help goes online
A long awaited move from Embarcadero. They finally have adopted wiki technology and put all Delphi documentation online.
Labels:
Delphi,
documentation
6 сент. 2009 г.
Из двух зол
При реализации механизма репликации баз данных приходится выбирать из двух зол: либо максимальная свобода пользователя и неизбежные конфликты при слиянии данных, либо ограничение — что, где и когда можно изменять.
Какое из двух зол будет меньшим зависит от требований клиента и внутренней архитектуры приложения. В случае с Гедымином, механизм фиксации складского движения чрезвычайно чуствителен к очередности обработки документов и некоторые типы конфликтов принципиально не могут быть разрешены "малой кровью". Остается путь с блокировками, когда в один момент времени данные одного типа могут редактироваться только на одной базе.
Какое из двух зол будет меньшим зависит от требований клиента и внутренней архитектуры приложения. В случае с Гедымином, механизм фиксации складского движения чрезвычайно чуствителен к очередности обработки документов и некоторые типы конфликтов принципиально не могут быть разрешены "малой кровью". Остается путь с блокировками, когда в один момент времени данные одного типа могут редактироваться только на одной базе.
Labels:
Репликация
5 сент. 2009 г.
Будни линуксоидов
На всякий случай запомним, идет вторая половина 2009 года:
Что правда, никто не отнимет у Линукса его основного преимущества — бесплатной операционной системы.
PS: Есть предприятия в Беларуси, где база Гедымина крутится под Линуксом. Вроде бы под Red Hat Linux.
В честь того, что все равно с 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%
Теперь собрать бы статистику у клиентов, в полевых условиях.
Достаточно информативно и сразу видны узкие места в коде. Правда, 77.5% времени занимает вызов функций WinAPI, так что даже двукратное ускорение всего оставшегося кода даст нам немногим более 10-ти процентов выйгрыша в общей производительности. Пока не было времени определить куда относится время выполнения запросов на сервере. Такое впечатление, что они включены в эти самые 77.5%
Теперь собрать бы статистику у клиентов, в полевых условиях.
Labels:
производительность,
профайлер
3 сент. 2009 г.
1 сент. 2009 г.
Рарытэтная застаўка
Гэтай выяве прыкладна 13 гадоў. Пошта на usa.net (папулярны на той час бясплатны паштавік), сайт на open.by...
Калі з прынтарам і жанчынай усё зразумела, яны мусілі асацыяцавацца з нашымі першымі праграмамі для друку плацёжных дакументаў і бухгалтэрыі. Дык, што мусіў азначаць гэты дапатопны трактар, для мяне загадка. Мабыць, намёк на гаротны лёс беларускай сельскай гаспадаркі, пакуль ёй на дапамогу не прыйшло сямейства праграмаў Анжэліка?
PS: Ня трэба тэлефанаваць па гэтых нумарах. Яны даўно ўжо ня нашы :)
Калі з прынтарам і жанчынай усё зразумела, яны мусілі асацыяцавацца з нашымі першымі праграмамі для друку плацёжных дакументаў і бухгалтэрыі. Дык, што мусіў азначаць гэты дапатопны трактар, для мяне загадка. Мабыць, намёк на гаротны лёс беларускай сельскай гаспадаркі, пакуль ёй на дапамогу не прыйшло сямейства праграмаў Анжэліка?
PS: Ня трэба тэлефанаваць па гэтых нумарах. Яны даўно ўжо ня нашы :)
Labels:
гісторыя
Подписаться на:
Сообщения (Atom)