Архив за ‘Кодинг’ категория

Об опасности исключений

Ноябрь 12th, 2009

Об опасностях, таящихся в мороженом корме коде, генерирующем исключения.
Исключения в C++ достаточно опасны, именно поэтому я стараюсь их не использовать.
Давайте разберёмся вот с этим кодом:
» Читать дальше: Об опасности исключений

Вопрос знатокам СУБД Firebird.

Октябрь 29th, 2009

Есть СУБД FireBird версии 2.0.x.
Есть таблица, в которой одним из полей хранится битовая карта дней недели.
Задача: проверить, входит ли день недели (номер 1-7) в битовую карту.
Я понимаю, что в СУБД FireBird 2.1.x были введены операции BIT_xx, но использовать пока приходится только FireBird 2.0.x.
Вот моё решение (отмечу, что MATCH=NULL тождественно всем дням недели, установленным в 1):

SET TERM ^ ;
 
-- Validate week day match
--   param:   _MASK - week day mask
--   param:   _VALUE - day of month (1-7)
--   return:  _RESULT - match result: match type or NULL if no match
CREATE OR ALTER PROCEDURE FN_SCHEDULED_WEEKDAY_MATCH (
    "_MASK" INTEGER,
    "_VALUE" INTEGER
)
RETURNS (
    "_RESULT" INTEGER )
AS
    DECLARE VARIABLE "_TEST" INTEGER;
BEGIN
    IF ("_MASK" IS NOT NULL) THEN
        BEGIN
            -- Binary functions are available only in FB 2.1, need to make workaround
            "_MASK" = "_MASK" + 128; -- For comparisons
 
            IF (("_VALUE" = 1) AND ((("_MASK"-1)/2) = ("_MASK"/2))) THEN -- Monday
                "_RESULT" = 1;
            ELSE IF (("_VALUE" = 2) AND ((("_MASK"-2)/4) = ("_MASK"/4))) THEN -- Tuesday
                "_RESULT" = 1;
            ELSE IF (("_VALUE" = 3) AND ((("_MASK"-4)/8) = ("_MASK"/8))) THEN -- Wednesday
                "_RESULT" = 1;
            ELSE IF (("_VALUE" = 4) AND ((("_MASK"-8)/16) = ("_MASK"/16))) THEN -- Thursday
                "_RESULT" = 1;
            ELSE IF (("_VALUE" = 5) AND ((("_MASK"-16)/32) = ("_MASK"/32))) THEN -- Friday
                "_RESULT" = 1;
            ELSE IF (("_VALUE" = 6) AND ((("_MASK"-32)/64) = ("_MASK"/64))) THEN -- Saturday
                "_RESULT" = 1;
            ELSE IF (("_VALUE" = 7) AND ((("_MASK"-64)/128) = ("_MASK"/128))) THEN -- Sunday
                "_RESULT" = 1;
        END
    ELSE
        "_RESULT" = 0;
 
    -- Suspend for select
    SUSPEND;
END^
 
SET TERM ; ^

Есть предложения лучше?

Буэээээ…

Октябрь 1st, 2009

Что вы можете сказать об этом сайте?
Сайт «Замени Гудок» от Мегафона

Дополнительный вопрос: вам когда-нибудь приходилось пользоваться этим чудо-сайтом?

Я не поленился и специально стянул вот такую плашку:
» Читать дальше: Буэээээ…

Нотки тревоги в российском образовании.

Октябрь 1st, 2009

На форуме ЦеСТ недавно появился топик. Спасибо sfstudio, что обратил моё внимание.

Вот такой мертворожденный проект появился по подготовке к сдаче ЕГЭ:

http://forum.centercest.ru/viewtopic.php?f=11&t=1009

Цитирую:
» Читать дальше: Нотки тревоги в российском образовании.

Функциональное программирование там, где оно не нужно.

Сентябрь 28th, 2009

В современном программистском мире появилась тенденция к изучению функциональных языков программирования. И на них сейчас пытаются выразить всё, что только под руку попадётся. Я называю это никак иначе как мозговым онанизмом.

Сразу оговорюсь: я не знаю парадигмы функционального программирования. И вряд ли её буду изучать до тех пор, пока мне это не понадобится. Но то, что, извините, вытворяют функциональщики, порой меня шокирует: решать элементарные задачи через, простите меня, жопу — это выше моих сил и нервов. Зато это повышает ЧСВ аффтаров до уровня over 9000, что очень настораживает и порой порождает сомнения в их адекватности.
Вот характерный разговор с товарищем ivansorokin (осторожно, русский мат).
» Читать дальше: Функциональное программирование там, где оно не нужно.

Патчим DokuWiki.

Сентябрь 4th, 2009

Совсем недавно всплыла проблема с навигацией в dokuwiki.

ПХПисты совсем обалдели и расхлябались! Суют свой быдлокод куда ни попадя, правильно на неправильно исправляют (ибо в предыдущей версии такого не было). Приходится всё за них переделывать.

Итак, у кого кривая навигация в dokuwiki наверху, смело применяем этот патч на файле inc/template.php:
» Читать дальше: Патчим DokuWiki.

Sequoia изнутри: заключение

Август 28th, 2009

Разбор полётов

В общем, сегодня решил, что ну её нафиг, эту Sequoia. Ибо я так и не нашёл в сети реализации класса, выполняющего бэкап данных СУБД ORACLE для Sequoia.
Разработчики много чего обещают, пророчат чуть ли не светлое будущее, а на самом деле ничего сверхнового и революционного в ней нет.
Изначально я думал, что разработчики написали свой парсер SQL-выражений под каждый движок, на деле же всё оказалось проще и прозаичнее: SQL-запросы тупо транслировались в базы.
Про атомарность транзакций я вообще молчу: в подобной архитектуре она в принципе не может быть реализована.
» Читать дальше: Sequoia изнутри: заключение

Sequoia изнутри #3

Август 27th, 2009

Пролог

В предыдущем посте я описал, на какие грабли пришлось наступить, чтобы заставить Sequoia создавать таблицы в RecoveryLog и запускать backends. Тем не менее, сама работа контроллера по-прежнему оставалась некорректной, и, как выяснилось, без правки исходников решить проблему никак не получалось.
» Читать дальше: Sequoia изнутри #3

Sequoia изнутри #2

Август 27th, 2009

Введение

Собственно, после первой неудачи с RAIDb1, изложенной в этом посте, я решил воспользоваться такой фичей, как RecoveryLog. Для этого ещё раз перечитывал туториал по созданию виртуальной БД.
» Читать дальше: Sequoia изнутри #2

Sequoia изнутри #1

Август 27th, 2009

Как бэ вступление

По работе возникла необходимость синхронной рабты с кластером БД (4 базы, в которых должны храниться одни и те же данные). Для этого я несколько месяцев подряд писать тулзу data_proc (коммерческая разработка), которая обрабатывает данные в поточном режиме и устойчива к connection-loss/database-failure ошибкам. Единственный недостаток — это хранение данных на локальном диске в виде журналов, объём которых достаточно велик, если база несколько часов находится offline.
Помимо data_proc у нас есть ещё куча других приложений, для которых пришлось писать балансировщик нагрузки для SELECT-запросов, с чем мы успешно справились. Тем не менее, вопрос балансировки нагрузки и кластеризации (с целью упрощения data_proc) остался, и мне предложили разобраться с C-JDBC, о чём я и буду сейчас писать.
» Читать дальше: Sequoia изнутри #1