Статьи
10 прочтений · 3 недели назад
RISBANK и Oracle APEX
Технология быстрой компонентной сборки информационных систем RISBANK была создана в России в конце 1990х годов, средство быстрой разработки Web приложений Oracle APEX появилось в 2004 году. Между этими двумя подходами есть много общего, но есть и существенные различия. Мы попробуем вспомнить, как все это было. Говоря про RISBANK, я должен упомянуть имя Нины Рубиной, вклад которой в развитие и идеи, и технологии составляет 50%. Это соответствует действительности, закреплено соответствующим соглашением и является для меня приятным воспоминанием. Также я должен упомянуть, что большинство событий...
3 прочтения · 3 недели назад
Падающий FTP сервер
Внешний сервер Oracle собирает некоторую информацию и должен по расписанию отправить данные на FTP сервер в главном офисе - а он, этот FTP сервер, периодически падает. Что делать? Изначально был некий процесс по cron'у, который в час X запускал FTP процесс. Если передача была успешной, отправлялось письмо с отчетом; если соединение с FTP сервером не устанавливалось, то отправлялось письмо с уведомлением об ошибке FTP. Потом стало понятно, что за доступностью FTP сервера стоит следить постоянно, записывать в базу интервалы простоя и, вероятно, отправлять письма о начале и завершении инцидента. Что и было сделано...
9 прочтений · 2 месяца назад
Детская олимпиада по информатике
Организаторы школьной олимпиады по информатике борются со списыванием и исключают работы с совпадающими ответами. Мы попробуем показать, что это ведет к исключению лучших работ. Вообще говоря, тот факт, что лучшие работы олимпиады с выбором правильного ответа из нескольких предложенных будут неизбежно совпадать, очевиден, но попробуем это доказать. Создадим таблицу вопросов: create table oly_quests (id number primary key, quest varchar2(400)) ; select * from oly_quests ; 1 Вопрос 1 2 Вопрос 2 Создадим таблицу ответов - олимпиада в стиле "выберите правильный ответ": create table oly_answs (id number...
15 прочтений · 2 месяца назад
Как дальше жить?
Моя теща по первому браку, царствие небесное, говаривала: "Будет совсем плохо - уйдем на землю, земля прокормит". Я с семьей закончил 4-ю зиму в садовом домике и могу ответственно заявить: стандартный городской житель на земле не выживет. Как и в лесу. Партизанить в Карелии хлопотно. Дело в том, что жизнь на природе требует не просто специальных навыков, а принципиально иного отношения к жизни. Ну, например: Если вам надо завтра поехать в офис, то сегодня вам надо вымыться. На дворе реальный минус и центрального водоснабжения нет. Правильно: вам надо загодя (вы не один такой) заказать доставку воды, а для этого надо прочистить дорогу от снега, иначе "газелька" с водой тупо не проедет...
8 прочтений · 2 месяца назад
Рекурсивный lag() в SQL запросе
Классический SQL не допускает межстрочного взаимодействия; аналитические функции это ограничение снимают; конструкция model дает еще большую свободу действий. Возникла задача вида $z = 1; for ($i = 0; $i < 10; $i++) { $z = $z * $z + 1; } Т.е. необходимо обращаться к предыдущему значению переменной z; возникло желание записать на SQL. "На языке"-то просто, но это 3-й уровень абстракции, а как на SQL, который является 4-м уровнем абстракции и специфицирует не действия, как 3-й, а желаемые результаты? Вообще говоря, это вопрос философский. Сначала человек думает: "Я хочу примерно этого" - и махом формирует алгоритм, (c) Лев Толстой: Die erste Kolonne marschiert, die zweite Kolonne marschiert...
12 прочтений · 2 месяца назад
Производительность визуализации в Oracle APEX
Создание такой графической страницы заняло примерно 30 минут: Такое быстрое решение основывается на нескольких предположениях и технологических ухищрениях: Я против такого подхода при коммерческом производстве...
7 прочтений · 2 месяца назад
Управление сортировкой с помощью параметра
Возник вопрос: можно ли управлять порядком сортировки (asc/desc) при помощи параметра из прикладного приложения? Типа order by x :direction. Ответ - да!, но не совсем так. Признаюсь сразу: решение не мое, а команды Тома Кайта; то ли Крис, то ли Коннор - но я разобрался и немного переформулировал. В первом приближении, конструкция вида order by x :direction корректной не является, но, как говорится, мы поняли, что нужно заказчику. Вначале, как всегда, запишем генератор данных: select level as x from dual connect by level <= 5 ; 1 2 3 4 5 Запишем прямую сортировку: with t as ( select level as x from...
23 прочтения · 2 года назад
Форматирование чисел для калькулятора с текстом
Задан текст, в который включены арифметические выражения. Выражения следует вычислить, а результаты округлить для читабельности. Эта задача - часть более сложной задачи формирования микроотчетов, задаваемых пользователем в виде текста с вкраплениями некоторых условных конструкций. Здесь мы рассмотрим задачу в предположении, что заданная пользователем строка уже переведена на привычный Ораклу язык. Рассмотрим пример. '''Число пи примерно равно 3.1415926. Одна треть - это один разделить на три, т.е. '' || 1 / 3 || '', а минус четыре трети - это уже целых '' || -4 / 3 || ''.'''' Число пи примерно равно 3...
33 прочтения · 2 года назад
Затейливые сортировки
Конструкция order by запроса Oracle позволяет упорядочить выбор данных. Ее можно использовать и для более сложных задач. Предположим, у нас есть таблица состояний некоторого процесса, состоящая из двух столбцов: идентификатор и формулировка состояния. Как обычно, для примера мы не будем создавать реальную таблицу, а воспользуемся генератором тестовых данных с конструкцией with: with statuses as ( select 1 as id, 'Открытие заказа' as text from dual union all select 2, 'Проверка заказа' from dual union all select 3, 'Выполнение заказа' from dual union all select 4, 'Оплата заказа' from dual union...
21 прочтение · 2 года назад
Новостное агентство подменяет ссылки на скандальные статьи
Обнаружено, что некое уважаемое новостное агентство подменяет ссылки на скандальные статьи в инструментах "поделиться". Мы решили проверить, сложно ли это. Суть в следующем. Некое уважаемое новостное агентство публикует новости. Всё понятно. Некоторые новости скандальные. Можно предположить, что данное агентство получило рекомендацию тормозить обмен пользователей скандальными новостями; во всяком случае, с завидным постоянством при попытке использовать инструмент для передачи новости (sharing) замечено, что нейтральная новость проходит правильно, а вместо скандальной новости передается ссылка на какую-то из ближних нейтральных...
30 прочтений · 2 года назад
Дополнительная БД Oracle как средство публикации
Oracle Data Base является не просто хранилищем информации, а мощнейшим сервером хранения, обработки и доставки данных. В некоторых случаях можно предложить несколько необычные, но весьма эффективные варианты пользования. Предположим, у нас есть мощный сервер Oracle, на котором мы храним и обрабатываем ценные данные. Наш клиент хотел бы получать наши данные, но при этом желает строить свою информационную систему, включая средства публикации информации для своих конечных пользователей, скажем, на PHP. Кроме того, он хотел бы получать данные от нашего сервера, например, в формате JSON или XML. Остановимся для определенности на втором варианте...
20 прочтений · 2 года назад
Уход самонаводящегося спайдера от ложных целей
Продолжение заметок "Самонаводящийся спайдер к проблеме автоматического скачивания файла с переменным Web адресом" и "Проблема автоматического скачивания файла с переменным Web адресом". Для нужд слежения за файлом на удаленном сайте в условиях переменчивости адреса этого файла мы создали робот. Робот состоит из двух частей - спайдера (паук) и скаута (разведчик). При размещении задания на слежение спайдер однократно пробегает по сайту и находит заданный файл и его родительскую страницу. Затем скаут...