Archive for the ‘Кодинг’ category

VSFTPD – такой ли секьюрный?

Январь 26th, 2010

Сегодня разочаровался в моём любимом Very Secure FTP Daemon.
Произошло это, когда мне нужно было реализовать что-то вроде RandomAccessFile, работающего по FTP. И когда я дошёл до seek-операций, обнаружил, что vsftpd некорректно отрабатывает пару команд REST + STOR. А именно, открывает файл всегда в режиме O_APPEND, о чём с горестью сообщает manpage:
» Read more: VSFTPD – такой ли секьюрный?

For fun.

Ноябрь 20th, 2009

Совсем недавно приходилось решать интересную задачу по Unix:
Фактически нужно было разработать демон simple-telnetd на языке Perl, позволяющий удалённо запускать некоторое ограниченное подмножество команд и выводить пользователю результат их выполнения.

  • simple-telnetd может запускать только разрешенные программы, которые перечислены в файле /etc/simple-telnetd.conf. Демон должен перечитывать этот файл и обновлять список разрешенных программ после поступления сигнала SIGHUP;
  • Запускаемые программы могут иметь параметры командной строки, но simple-telnetd не должен поддерживать интерактивного взаимодействия пользователя с запускаемыми программами;
  • Демон не обязан обрабатывать спец символы: ^C, ^D, и т.д.
  • В качестве параметра командной строки simple-telnetd может передаваться параметр timeout – максимальное время выполнения одной команды;
  • Желательно чтобы демон мог прослушивать не только tcp сокеты, но и локальные (например /tmp/simple-telnetd);

В конце-концов, скрипт всё же не пригодился, поэтому, чтобы компенсировать потраченное на него время, выкладываю его тут – вдруг, кому пригодится. Забрать его можно по этой ссылке.
simple-telnetd.tar.gz
Если кому-то помогло, пишите, не стесняйтесь, буду рад :) .

Поскольку я писал этот демон с особым энтузиазмом, не обошлось без фич, которых нет в исходном задании: написал init.d-скрипт для службы, который успешно был протестирован в openSUSE Linux, оформил perldoc и manpages, сделал возможность интерактивной авторизации, ну и другая мелочёвка (уже даже и не помню какая) вдовесок.

Вопрос по OpenOffice.org

Ноябрь 15th, 2009

Кто-нибудь знает, есть ли в OpenOffice.org Base что-нибудь вроде «Мастера подстановок» из MS Access?
Ибо фича удобная, и воспользоваться ей очень хотелось бы.
Я смог решить пока проблему через формы, но хотелось бы обойтись без них.
Есть идеи?

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

Ноябрь 12th, 2009

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

Вопрос знатокам СУБД 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

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

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

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

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

Октябрь 1st, 2009

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

Вот такой мертворожденный проект появился по подготовке к сдаче ЕГЭ:
http://forum.centercest.ru/viewtopic.php?f=11&t=1009

Цитирую:
» Read more: Нотки тревоги в российском образовании.

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

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

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

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

Патчим DokuWiki.

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

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

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

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

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

Август 28th, 2009

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

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