пятница, 21 января 2011 г.

Как правильно заблокировать окно от перерисовки

Иногда это может понадобиться, если что-то активно добавляется, открывается и т.п.
Типичный способ, рекомендуемый первым, это вызов LockWindowUpdate. Что есть в корне неверно - в Майкрософт не очень удобно выбрали название функции.
http://www.transl-gunsmoker.ru/2010/12/lockwindowupdate_29.html
http://msdn.microsoft.com/en-us/library/dd145034%28v=vs.85%29.aspx

Правильный пример:
procedure SetWindowLock(AHandle: THandle);
begin
  SendMessage(AHandle, WM_SETREDRAW, 0, 0);
end;

procedure EndWindowLock(AHandle: THandle);
begin
  SendMessage(AHandle, WM_SETREDRAW, 1, 0);
  RedrawWindow(AHandle, nil, 0, RDW_ERASE or RDW_FRAME or
    RDW_INVALIDATE or RDW_ALLCHILDREN);
end;

Хитрость в том, что работает только RedrawWindow, а Invalidate нет.

UPD
На практике оказало не все так весело - окно просто прячется, а не перестает отрисовываться. У нас решилось точечным применением, только к изменяемым элементам - панелям, таб сетам и т.п.

среда, 19 января 2011 г.

Шифрация базы в Firebird и конкурентах

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

И обычно ответы сделаны как под копирку - что мол 100%, надежного способа это обеспечить, если база доступна физически нет. Но вот что встретилось в firebird-architect:

Alex Peshkoff, Nov 10, 2010:
I've already mentioned - we have plans to implement line encryption in FB3.0 and may be page level encryption too. We have already decided that we provide interface for users' plugins to perform actual crypt operations.

Как я упоминал ранее в планах есть реализация линейного(?) шифрования в 3.0. Вероятно также шифрование на уровне страниц. Было решено, что реализовано это будет посредством плагинов с возможностью их самостоятельной реализации.


И краткий обзор, что есть у конкурентов:


MySQL
  • нет шифрования файла
  • есть защищенное соединение
http://dev.mysql.com/doc/refman/5.0/en/secure-connections.html

PostgreSQL
  • нет шифрования файла 
  • есть защищенное соединение

http://www.postgresql.org/docs/8.1/static/ssl-tcp.html
http://www.postgresql.org/docs/9.0/static/pgcrypto.html

MSSQL
  • есть шифрование файла
  • есть защищенное соединение
http://msdn.microsoft.com/en-us/library/bb934049%28v=SQL.100%29.aspx
http://msdn.microsoft.com/en-us/library/ms189067%28v=SQL.90%29.aspx

DB2
  • есть шифрование файла
  • есть защищенное соединение

http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.admin.sec.doc/doc/c0005815.html

Oracle
  • есть шифрование файла 
  • есть шифрование полей
  • есть защищенное соединение
http://www.oracle.com/technetwork/database/options/advanced-security/index.html

вторник, 4 января 2011 г.

DDL триггеры будут в FB3

По сути теперь можно вешать события и всяческие проверки(в том числе и стиля!) на изменение метаданных.

create trigger trig_ddl_sp before create procedure
as
begin
    if (rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME') not starting 'SP_') then
        exception e_invalid_sp_name;
end

Подробнее:
http://firebird.svn.sourceforge.net/viewvc/firebird/firebird/trunk/doc/sql.extensions/README.ddl_triggers.txt?revision=51203

Памятка по вопросам на собеседование

Когда-то делал нечто похожее, тем более под каждое собеседование свой набор вопросов. Но в общем случае может пригодится.
http://nmihouse.com/?p=31

понедельник, 3 января 2011 г.