28 мар. 2012 г.

846

Восемсот сорок шесть бизнес-классов с подтипами на эталонной базе с загруженным комплектом типовых настроек. Вместе с отраслевыми решениями и частными наработками под конкретных клиентов общее количество превышает тысячу!

Только сейчас, на втором десятке лет существования проекта, мы приступили к автоматизированному тестированию бизнес-объектов. Задача первого теста:

  1. итерация через список всех классов с подтипами
  2. создание экземпляра класса с подтипом
  3. проверка последовательности действий Insert-Cancel и Edit-Post
  4. проверка создания и отображения диалогового окна
  5. проверка создания и отображения формы просмотра
  6. проверка текста запроса генерируемого методом CheckTheSameStatement
  7. добавление условия через ExtraConditions
  8. уничтожение экземпляра
Попутно выявилось, что GetSubTypeList возвращает не список подтипов, как это следует из названия, а список строк вида Читабельное название подтипа=Подтип. Очевидно, делалось когда-то для отображения списка подтипов в стандартном выпадающем списке, но с тех пор было забыто.

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

Обновленная заглавная страница Gedemin project

Гугл убрал страничку Project Updates из Гугл Кода. Следить за изменениями теперь предлагается или с помощью читалки Atom, или через гаджеты, которые можно разместить на веб странице. Новая заглавная страница нашего проекта теперь выглядит так. По мне, старый вариант был предпочтительней. В новом как-то все кривовато выходит.

17 мар. 2012 г.

Firebird лучше всех

Мы никогда и не сомневались, что Firebird лучше. Дмитрий Логинов вот написал по этому поводу большую статью.
Смею заверить, что за последние 5 лет не было ни одного сбоя по вине Firebird. (это при том, что по всей России работают тысячи операторов на АЗС). Неполадки в железе и операционной системе случаются несоизмеримо чаще, чем сбои в СУБД Firebird. Разумеется, бывали случаи, когда из-за аппаратного сбоя база данных оказывалась поврежденной, однако базы всегда легко восстанавливались (исключение - поломка HDD, в этом случае приходилось восстанавливать БД из резервной копии).

23 февр. 2012 г.

Канал на YouTube

Александр Назаренко создал канал на YouTube с видео про Ниву и Гедымин.

Кстати, ГИВЦу недавно исполнилось 40 лет.

9 февр. 2012 г.

Путь к элементу дерева

Следующий запрос выводит содержимое справочника товарных групп, причем в колонке path для каждой группы формируется путь к корневому элементу дерева через конкатенцию идентификаторов всех родительских узлов:
WITH RECURSIVE
  group_tree AS (
    SELECT
      CAST('' AS VARCHAR(120)) as path,
      -1 as id,
      -1 as parent,
      CAST('' AS dname) as name
    FROM
      rdb$database

    UNION ALL
    
    SELECT
      IIF(gt.path > '', gt.path || '.', '') || g2.id,
      g2.id,
      g2.parent,
      g2.name
    FROM
      gd_goodgroup g2 JOIN group_tree gt
        ON COALESCE(g2.parent, -1) = gt.id
  )
SELECT
  *
FROM
  group_tree
WHERE
  path > ''
Запрос может быть легко изменен для любого древовидного справочника из базы данных Гедымина.

Если из получаемого пути следует исключить наименование корневой группы, то строку:

  IIF(gt.path > '', gt.path || '.', '') || g2.id,
Следует заменить на:
  IIF(gt.path > '', gt.path || '.', '') || 
    IIF(g2.parent IS NULL, '', g2.id),
Для того, чтобы запрос возвращал только пути элементов для поддерева заданного его корневым узлом, следует заменить первый SELECT в объединении на:
SELECT
  CAST(name AS VARCHAR(120)) as path,
  id,
  parent,
  name
FROM
  gd_goodgroup
WHERE
  id = идентификатор_корня_поддерева

2 янв. 2012 г.

Intel Medfield platform

В сеть просочились спецификации процессора Intel для планшетов и смартфонов. Что для нас важно, Medfield platform является итерацией Intel Atom и поддерживает набор команд x86. Это позволит запускать Гедымин на планшетах под управлением Windows 8. Заявленных характеристик -- "According to the leak, the Medfield Tablet Platform (i.e. the base specs of the SoC) consists of a 1.6GHz CPU, 1GB of DDR2 RAM, WiFi, Bluetooth, and FM radios, and some kind of GPU." -- вполне хватит для комфортной работы.

21 дек. 2011 г.

Конкуренты, однако

Slashdot сообщает:

"IBM is deploying technology in China that allows meat suppliers to track a single pig all the way from farm animal to pork chop. Pigs are initially identified with a barcoded ear tag. This identification is then put on bins used to track the various pig parts as they pass through the slaughterhouse, processing plant, distribution center and finally to the clear plastic-wrapped package in a grocer's case. If a consumer buys three pork chops in a package, 'you know that these three pieces of pork chop came from pig number 123,' said Paul Chang, who leads global strategy for emerging technologies at IBM. The goal is to control disease outbreaks, but theoretically this technology could allow a grocer to put a picture on the store package of the pig you are eating."

Год назад мы обсуждали реализацию подобной системы для одного из крупных мясокомбинатов Беларуси. Пока дело застыло на стадии переговоров.

А вот в Канаде подобная система действует в отношении рыбы и крабов. Заходишь на сайт, вводишь код с упаковки и видишь откуда рыбка приплыла.

16 дек. 2011 г.

Why is Firebird better DBMS than Oracle?

Не могу не перепостить из блога Милана Бабускова (Milan Babuskov):

Beside being free (both as beer and also open source), you don’t need 24x7 DBA and there are generally less headaches. Here’s a nice example explained by Norman Dumbar in a mailing-list post. Norman administers over 600 Oracle databases and about 40 Firebird ones:

Oracle uses log files for REDO and has ROLLBACK_SEGMENTS or UNDO Segments (depending on Oracle version) for UNDO. It never uses log files for UNDO - and UNDO is what provides Read Consistency/MVCC in an Oracle database.

Changes are written to the LOG_BUFFER (n memory) and periodically - on commit, every 3 seconds max, or when the buffer is 33% full - flushed to the REDO logs. These REDO logs might be archived to disc when they fill up. That Depends on the database archive log mode though.

These logs are used when a database is restored and rolled forward (using the RECOVER DATABASE command, for example).

In order to roll back changes and to ensure read consistency, UNDO is used. These do live on disc - as tablespace files - but remain in memory in the buffer cache alongside data blocks etc.

When a SELECT is started, the data returned are the data from the data blocks. Each row in a block has an indicator that tells when it was last updated. If a pending update is taking place (currently uncommitted) or if a commit has taken place since this SELECT started then the data read from that data block has changed - and is not consistent with the start time of this SELECT transaction.

When this is detected, Oracle “rolls back” the changes to the start time of the SELECT taking place by looking for the UNDO block(s) associated with the transaction that made the changes. If that results in the correct (consistent) data, that’s what you get.

If it turns out that there were other transactions that also changed the data, they too will be detected and undone.

In this way you only ever see data that was consistent at the start of your own transaction.

As long as the DBA correctly sizes the UNDO tablespace and correctly sets the UNDO_RETENTION parameter to a decent enough value, data changes are able to be rolled back happily all the time.

If the DBA failed miserably in his/her duties, the ORA-01555 Snapshot too old” errors are the result. And are most irritating. Long running SELECTS - batch reports for example - tend to show up this error mostly.

Of course, you would never see such problems with Firebird, because the old record versions are stored in database and not the log files. You don’t have to care if system crashes - after reboot it simply works.

You might think that engineers who build Firebird are smarter than Oracle’s but sometimes I think Oracle is deliberately made so complicated to require DBA and also offer them job security. And also makes sure nobody can complain it’s too easy to use.

#429

Первыми от Беларуси влились в Firebird Foundation под общим номером #429. Рассчитываем взять приз.