суббота, 10 декабря 2011 г.

Увеличиваем скорость выборки строк из таблицы с CLOB-полями

Есть в нашей БД такая табличка, которая содержит строки файлов (назовём таблицу FILE_LINES). Табличка используется для импорта данных из вне и последующей обработки их на стороне БД. И есть в этой таблице поле, назовём его TEXT, которое по типу своему текстовое. И сначала оно было VARCHAR2(1024) (ну думалось мне, что 1Кб хватит для текстового поля). Потом оно стало VARCHAR2(4000) (4000 – максимальный размер полей типа VARCHAR2 для Oracle). И, конечно же, настал момент, когда заказчик попросил это поле расширить  ещё на чуть-чуть…

вторник, 29 ноября 2011 г.

О применимости 3D в бизнес-приложениях

Вчера размышлял на тему применимости 3D интерфейсов в бизнес-приложениях. А на размышления меня натолкнул конкурс DelphiFeeds, для участия в котором надо написать что-нибудь с использованием FireMonkey. А FireMonkey – это кросс-платформа + возможность реализации 3D, которую ну очень хочется пощупать (даже больше, чем кросс-платформу).

И вот в поисках идеи, я вдруг решил подумать, а насколько это будет юзабельно: 3D-интерфейс в бизнес-приложениях?

среда, 9 ноября 2011 г.

Библиотеки, компоненты. Разные версии в разных проектах

Этот пост является расширенным комментарием к посту Александра Алексеева.

Краткое описание проблемы

Если Вы практикующий программист Delphi, то наверняка сталкивались с проблемой, когда разные проекты работают с некоторой библиотекой (pas-модуль, unit), но каждое приложение работает со своей версией этой библиотеки. Такое часто бывает, когда приложение ссылается на заголовочные файлы GDI+, Direct X или другие модули, портированные в паскаль из C/C++ (бывает так, что одно приложение использует один “порт”, а другое – альтернативный, и эти версии не совместимы между собой). Редко, но бывает и так, что новая версия какого-нибудь, например, XML-парсера не совместима с предыдущей его версией.

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

пятница, 12 августа 2011 г.

Delphi Notes Splitter

Многие практикующие Delphi-программисты знают, что у стандартного TSplitter’а есть ряд недостатков (т.е. багов, если сказать откровенно). В попытках борьбы с ошибками стандартного TSplitter’а, а также желая “прикрутить” к сплиттеру кнопку (для скрытия/отображения связанной панели), я в своё время перепробовал много компонент (доступных для бесплатного скачивания), но так ни на чём конкретно и не остановился: все варианты были чем-то не тем, что нужно было мне. В итоге я решил написать свой компонент.

четверг, 14 июля 2011 г.

Идея автогенерации кода при работе с БД

Разработчики приложений для работы с базами данных (БД) наверняка не раз сталкивались с некоторыми неудобствами при кодировании. Одно из неудобств – это обращение к полю набора данных (НД) по его имени. Неудобство заключается в том, что если к полю обращаться по имени DataSet['FieldName'], то компилятор никаким образом не может проверить, правильно ли написано 'FieldName' и есть ли это поле в НД. А при спешке, кодер может запросто допустить опечатку в имени поля, и, как следствие, это может привести к ошибке во время исполнения приложения.

Я хочу описать технологию,  которая может научить компилятор знать, какие имена в таблице могут быть. Это нужно для того, чтобы возможные опечатки исключить на стадии компиляции. А в качестве бонуса, мы можем увидеть список полей в выпадающем списке CodeInsight после имени таблицы и точки. Ну т.е. в конечном итоге, я получаю возможность прямо в коде писать так: TableName.FieldName := 10; вместо привычного нам TableName['FieldName'].AsInteger := 10;

среда, 13 июля 2011 г.

Размышления на тему: недостатки датасетов

Данный пост представляет из себя размышления на тему: недостатки TDataSet. Я предполагаю, что читатель знаком с тем, что TDataSet – это базовый класс для работы с наборами данных (НД). Так же я предполагаю, что читатель знаком с основами программирования приложений для работы с базами данных (БД).

пятница, 10 июня 2011 г.

Форматирование числа в строку на PL/SQL (число прописью v2)

Здесь я предлагал вариант реализации функции, которая форматирует заданное число в строку прописью на английском языке. Однако для нас, жителей России, эта функция не особо-то и интересна...
Предлагаю вариант функции, которая форматирует число на русском языке.

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

Сравнение производительности процедур в PL/SQL

Каждому программисту, наверное, рано или поздно приходится встречаться с проблемой выбора: какой алгоритм из двух (или более) выбрать в качестве оптимального? Ну например, есть две процедуры, результат работы которых одинаков, но реализованы процедуры по разному. При решении проблемы выбора, весомым аргументом является скорость выполнения процедуры.

Тема измерения скорости выполнения процедуры довольно избитая. Однако при измерении скорости на PL/SQL я случайно столкнулся с одним нюансом…

пятница, 18 марта 2011 г.

Опыт внедрения EurekaLog

Недавно наша компания приобрела лицензию на библиотеку EurekaLog (далее – EL). Что это такое, наверное Вы уже знаете, а если не знаете – то самое время поинтересоваться этим

Этот пост я решил написать, чтобы обозначить проблемы, с которыми я столкнулся, при внедрении библиотеки. И в первую очередь адресую его GunSmoker’у.

четверг, 17 марта 2011 г.

Размышления о размере исполняемых файлах

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

Действительно, пустой проект с одной формой в Delphi7 – это 361 Кб исполняемого exe-файла (и чем выше версия Delphi, тем больше размер).

воскресенье, 13 марта 2011 г.

Работа с n-арными деревьями на PL/SQL

Представьте себе почти классическую ситуацию: есть какие-то данные в БД (одна, две и более таблиц), и надо эти данные обработать хитрым образом, а затем сохранить результат в отдельную таблицу для последующего представления данных пользователю.

Выбирать данные на клиентское приложение, обрабатывать локально, а затем сохранять результат обратно в БД – законом не запрещается, но крайне не рационально. Причём чем больше объём исходных данных, тем больше требуется время на просто выборку данных. Поэтому любые задачи, связанные с обработкой данных лучше решать на стороне сервера.

Допустим, что в процессе обработки данных, нам необходимо построить дерево.

суббота, 12 марта 2011 г.

Не ищите ошибки там, где их нет

Человеку свойственно ошибаться. Но почему-то признать свою ошибку труднее, чем поверить в корректную работу уже отлаженных механизмов.

вторник, 1 февраля 2011 г.

UTC and Local Time Conversion

Однажды мне понадобилась функция, которая пересчитывает дату/время из UTC в локальное время. Ничего вразумительного в сети найти мне не удалось, поэтому пришлось открыть справку (win32.hlp) и написать функцию самостоятельно…

.

.