<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5635913523875084787</id><updated>2011-10-02T16:20:21.881+03:00</updated><category term='управление'/><category term='d2009'/><category term='кодировки'/><category term='разработка'/><category term='dvcs'/><category term='perl'/><category term='interbase'/><category term='msbuild'/><category term='firebird'/><category term='oracle'/><category term='delphi'/><category term='firefox'/><category term='dunit'/><category term='ui'/><category term='agile'/><category term='git'/><category term='sql'/><category term='winapi'/><category term='bat'/><category term='ror'/><category term='windows'/><category term='интеллектульная собственность'/><category term='утилиты'/><category term='hardware'/><category term='svn'/><title type='text'>IT-шные мелочи</title><subtitle type='html'>Краткие заметки по ит-шным темам, с которыми я сталкиваюсь.
Чаще это вопросы работы с СУБД и прикладной разработки.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-1297588979620373122</id><published>2011-07-25T13:22:00.002+03:00</published><updated>2011-07-25T13:22:58.251+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>И побеждает... git</title><content type='html'>Что в общем закономерно и справедливо.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;При рассмотрении популярности систем управления исходными текстами,  разработчики, вне зависимости от типа используемой операционной системы,  поставили на первое место Git (30.7% Windows, 65.4% Linux и 78.3% Mac  OS X). При этом популярность Git за год заметно выросла. После Git  работающие в Windows разработчики выбирают Subversion (23.9%), Mercurial  (20.7%) и TFS (Microsoft Team Foundation Server, 20.6%). Работающие в  Linux, кроме Git, активно используют Mercurial (15.4%) и Subversion  (12.3%). При этом популярность Mercurial со временем падает (с 25% до  20.7%), а Subversion растет (рост с 8.8% до 12.3%). Доля пользователей  Bazaar (3.7%) и TFS (0.6%) среди опрошенных незначительная.&amp;nbsp;&amp;nbsp;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.opennet.ru/opennews/art.shtml?num=31215"&gt;http://www.opennet.ru/opennews/art.shtml?num=31215&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-1297588979620373122?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/1297588979620373122/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=1297588979620373122' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1297588979620373122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1297588979620373122'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/07/git.html' title='И побеждает... git'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-6280960610644532217</id><published>2011-05-20T08:30:00.004+03:00</published><updated>2011-07-26T15:26:40.105+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Список ключевых слов Firebird 2.5</title><content type='html'>Понадобился на днях, найти готового не смог. Вытащил из исходников - keywords.cpp&lt;br /&gt;&lt;br /&gt;UPD:&lt;br /&gt;Оно же, только официально - http://www.firebirdsql.org/refdocs/langrefupd25-reskeywords-full.html &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NOT_LSS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NEQ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NOT_GTR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LPAREN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RPAREN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COMMA&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LSS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LEQ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NEQ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;EQL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GTR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GEQ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIND_PARAM&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ABS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ACCENT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ACOS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ACTION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ACTIVE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ADD&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ADMIN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;AFTER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ALL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ALTER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ALWAYS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;AND&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ANY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;AS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ASC&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ASC&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ASCII_CHAR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ASCII_VAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ASIN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;AT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ATAN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ATAN2&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;AUTO&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;AUTONOMOUS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;AVG&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BACKUP&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BEFORE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BEGIN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BETWEEN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIGINT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIN_AND&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIN_NOT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIN_OR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIN_SHL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIN_SHR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIN_XOR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BIT_LENGTH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BLOB&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BLOCK&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BOTH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_BREAK&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;BY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CALLER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CASCADE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CASE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CAST&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CEIL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CEIL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_CHAR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CHAR_LENGTH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CHAR_TO_UUID&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CHARACTER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CHARACTER_LENGTH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CHECK&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CLOSE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COALESCE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COLLATE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COLLATION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COLUMN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COMMENT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COMMIT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COMMITTED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COMMON&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COMPUTED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CONDITIONAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CONNECT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CONSTRAINT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CONTAINING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COSH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;COUNT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CREATE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CROSS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CSTRING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURRENT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURRENT_CONNECTION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURRENT_DATE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURRENT_ROLE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURRENT_TIME&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURRENT_TRANSACTION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURRENT_USER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CURSOR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DATABASE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DATA&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DATE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DATEADD&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DATEDIFF&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DAY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_DEC&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DECIMAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DECLARE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DECODE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DEFAULT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_DELETE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DELETING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DESC&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DESC&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_DESCRIPTOR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_DIFFERENCE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DISCONNECT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DISTINCT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DO&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DOMAIN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_DOUBLE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DROP&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ELSE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;END&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ENTRY_POINT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ESCAPE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;EXCEPTION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;EXECUTE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;EXISTS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;EXIT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;EXP&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;EXTERNAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;EXTRACT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FETCH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_FILE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FILTER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FIRST&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FIRSTNAME&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_FLOAT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FLOOR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FOR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FOREIGN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FREE_IT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FROM&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FULL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;FUNCTION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GDSCODE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GENERATED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GENERATOR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GEN_ID&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GEN_UUID&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GLOBAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GRANT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GRANTED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;GROUP&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;HASH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;HAVING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;HOUR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;IF&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_IGNORE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;IIF&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_IN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INACTIVE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INDEX&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INNER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INPUT_TYPE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INSENSITIVE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INSERT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INSERTING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_INT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INTEGER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;INTO&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;IS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ISOLATION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;JOIN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KEY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LAST&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LASTNAME&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LEADING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LEAVE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LEFT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LENGTH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LEVEL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LIKE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LIMBO&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LIST&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LOCK&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LOG&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LOG10&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_LONG&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_LOWER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;LPAD&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MANUAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MAPPING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MATCHED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MATCHING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MAXIMUM&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MAXVALUE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MAX_SEGMENT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MERGE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MILLISECOND&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MIDDLENAME&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MINIMUM&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MINUTE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MINVALUE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MOD&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MODULE_NAME&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;MONTH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NAMES&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NATIONAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NATURAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NCHAR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NEXT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NO&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NOT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NULLIF&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_NULL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NULLS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_NUMERIC&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OCTET_LENGTH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OF&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ON&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ONLY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OPEN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OPTION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ORDER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OS_NAME&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OUTER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OUTPUT_TYPE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OVERFLOW&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;OVERLAY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PAD&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PAGE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PAGES&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_PAGE_SIZE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PARAMETER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PASSWORD&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PI&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PLACING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PLAN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;POSITION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;POST_EVENT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;POWER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PRECISION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PRESERVE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PRIMARY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PRIVILEGES&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PROCEDURE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;PROTECTED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RAND&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DB_KEY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;READ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;REAL&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;VERSION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RECREATE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RECURSIVE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;REFERENCES&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RELEASE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;REPLACE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;REQUESTS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RESERVING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RESERVING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RESTART&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RESTRICT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RETAIN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RETURNING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RETURNING_VALUES&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RETURNS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;REVERSE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;REVOKE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RIGHT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ROLE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ROLLBACK&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ROUND&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ROW_COUNT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;ROWS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;RPAD&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SAVEPOINT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SCALAR_ARRAY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;DATABASE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SECOND&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SEGMENT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SELECT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SENSITIVE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SEQUENCE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SET&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SHADOW&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_SHARED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SIGN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SIMILAR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SIN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SINGULAR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SINH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_SIZE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SKIP&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SMALLINT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SNAPSHOT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SOME&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SORT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SOURCE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SPACE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SQLCODE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SQRT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;STABILITY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;START&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;STARTING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;STARTING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;STATEMENT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;STATISTICS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SUBSTRING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SUB_TYPE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SUM&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;SUSPEND&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TABLE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TAN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TANH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TEMPORARY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;THEN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TIME&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TIMESTAMP&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TIMEOUT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TO&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TRAILING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TRANSACTION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TRIGGER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TRIM&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TRUNC&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;TWO_PHASE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_TYPE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;UNCOMMITTED&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;UNDO&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;UNION&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;UNIQUE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;UPDATE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;UPDATING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_UPPER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;USER&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;USING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;UUID_TO_CHAR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;KW_VALUE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;VALUES&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;VARCHAR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;VARIABLE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;VARYING&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;VIEW&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WAIT&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WEEK&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WEEKDAY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WHEN&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WHERE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WHILE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WITH&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WORK&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;WRITE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;YEAR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;YEARDAY&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NOT_LSS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NEQ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NOT_GTR&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;CONCATENATE&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NOT_LSS&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NEQ&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;NOT_GTR&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-6280960610644532217?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/6280960610644532217/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=6280960610644532217' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6280960610644532217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6280960610644532217'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/05/firebird-25.html' title='Список ключевых слов Firebird 2.5'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7394392117496531777</id><published>2011-05-19T08:30:00.002+03:00</published><updated>2011-05-19T08:30:01.155+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Практическое применение SSD</title><content type='html'>Все больше и больше хороших отзывов об их производительности, так и хочется вынести базы на такие винты. Но вот встретился отзыв о практическом опыте работы на SSD - &lt;a href="http://www.codinghorror.com/blog/2011/05/the-hot-crazy-solid-state-drive-scale.html"&gt;http://www.codinghorror.com/blog/2011/05/the-hot-crazy-solid-state-drive-scale.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Если кратко - &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Super Talent 32 GB SSD, failed after 137 days &lt;/li&gt;&lt;li&gt;OCZ Vertex 1 250 GB SSD, failed after 512 days &lt;/li&gt;&lt;li&gt;G.Skill 64 GB SSD, failed after 251 days &lt;/li&gt;&lt;li&gt;G.Skill 64 GB SSD, failed after 276 days &lt;/li&gt;&lt;li&gt;Crucial 64 GB SSD, failed after 350 days &lt;/li&gt;&lt;li&gt;OCZ Agility 60 GB SSD, failed after 72 days &lt;/li&gt;&lt;li&gt;Intel X25-M 80 GB SSD, failed after 15 days &lt;/li&gt;&lt;li&gt;Intel X25-M 80 GB SSD, failed after 206 days&lt;/li&gt;&lt;/ul&gt;Т.е. в среднем живет винт около 12&amp;nbsp; месяцев. Билдовый и тестовы сервак на таком поднять самое то (шутка ли - 500Мб/с), а вот базу уже как-то жалко :)&lt;br /&gt;&lt;br /&gt;Хотя автор статьи и говорит, что даже при такой статистике от ssd не откажется - слишком уж комфортной становится работа.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7394392117496531777?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7394392117496531777/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7394392117496531777' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7394392117496531777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7394392117496531777'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/05/ssd.html' title='Практическое применение SSD'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8980049880814082757</id><published>2011-05-18T10:16:00.000+03:00</published><updated>2011-05-18T10:16:40.964+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Когда начинать кодировать?</title><content type='html'>Уже как-то &lt;a href="http://pnv82.blogspot.com/2009/05/blog-post.html"&gt;писал,&lt;/a&gt; что ТЗ дает возможность дешево "проиграть" проект - без реализации. &lt;br /&gt;Встретилось еще одно &lt;a href="http://blog.shumoos.com/archives/232"&gt;подтверждение&lt;/a&gt; мысли:&lt;br /&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;Статистика говорит о том, что более 50% дефектов вносится в программу до кодирования.&lt;/li&gt;&lt;li&gt;Статистика говорит о том, что кодирование, как правило, является самым дорогим участком.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8980049880814082757?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8980049880814082757/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8980049880814082757' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8980049880814082757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8980049880814082757'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/05/blog-post.html' title='Когда начинать кодировать?'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-1661974627093557247</id><published>2011-04-18T16:50:00.000+03:00</published><updated>2011-04-18T16:50:42.634+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Побывал на AgileBaseCamp</title><content type='html'>Или я потоки себе неудачно подобрал, или знать стал больше, но в этом году основной смысл мероприятия, для меня, оказался в общении.Ну и еще в 50% скидке на AgileEE, полученной в лотерее анкет :-D &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Очень приятно было видеть людей, с которыми знаком только по подобным мероприятиям :)&lt;br /&gt;&lt;br /&gt;Презентации со всех потоков:&lt;br /&gt;http://www.slideshare.net/event/agile-base-camp-kiev/slideshows&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-1661974627093557247?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/1661974627093557247/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=1661974627093557247' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1661974627093557247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1661974627093557247'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/04/agilebasecamp.html' title='Побывал на AgileBaseCamp'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8153892519049194585</id><published>2011-03-16T12:07:00.002+02:00</published><updated>2011-03-16T12:10:43.363+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Предварительные данные по Firebird 3</title><content type='html'>Основные цели&lt;br /&gt;- честная поддержка многопоточной мультипроцессорности с&lt;b&gt; разделяемым кешем&lt;/b&gt;&lt;br /&gt;- рефакторинг архитектуры для последующих версий&lt;br /&gt;&lt;br /&gt;Гарантированно будет масштабируемый кеш страниц с межпоточными и межпроцессными блокировками&lt;br /&gt;&lt;br /&gt;Поддержка разных версий ODS - в плагинах. А процесс лиснера уже будет подгружать нужную для базы реализацию движка.&lt;br /&gt;&lt;br /&gt;Изменения в одс - флаг наличия мусора на странице, что ускорит его сборку.&lt;br /&gt;&lt;br /&gt;Более подробный формат вывода плана выполнения запроса.&lt;br /&gt;&lt;b&gt;Стоимостной оптимизатор &lt;/b&gt;- гистограмма распределения данных, возможность автоматического сбора статистики, подробная информация по таблицам и индексам (кол-во записей страниц и т.п.)&lt;br /&gt;&lt;br /&gt;SQL&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Внешние процедуры функции и триггеры&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;PSQL функции&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Пакеты аля Оракл&lt;/li&gt;&lt;li&gt;DDL триггеры&lt;/li&gt;&lt;li&gt;&lt;b&gt;Оконные(аналитические) функции&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Двунаправленные курсоры в PSQL&lt;/li&gt;&lt;li&gt;Парметризированные исключения&lt;/li&gt;&lt;/ul&gt;Безопасность&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Аутентификация во внешних плагинах&lt;/li&gt;&lt;li&gt;Шифрование траффика&lt;/li&gt;&lt;li&gt;Юзеры в базе&lt;/li&gt;&lt;li&gt;Шифрование на уровне страниц&lt;/li&gt;&lt;li&gt;Группы пользователей&lt;/li&gt;&lt;li&gt;Права на DDL&lt;/li&gt;&lt;/ul&gt;Публичная альфа FB3 - в третьем квартале 2011 года&lt;br /&gt;&lt;div id="__ss_7267785" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/mindthebird/initial-review-of-firebird-3" title="Initial review of Firebird 3"&gt;Initial review of Firebird 3&lt;/a&gt;&lt;/b&gt;&lt;object height="355" id="__sse7267785" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=firebird3-110315034626-phpapp01&amp;stripped_title=initial-review-of-firebird-3&amp;userName=mindthebird" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse7267785" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=firebird3-110315034626-phpapp01&amp;stripped_title=initial-review-of-firebird-3&amp;userName=mindthebird" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/mindthebird"&gt;Mind TheFirebird&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8153892519049194585?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8153892519049194585/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8153892519049194585' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8153892519049194585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8153892519049194585'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/03/firebird-3.html' title='Предварительные данные по Firebird 3'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-9047065009161512571</id><published>2011-02-24T12:29:00.001+02:00</published><updated>2011-02-24T12:29:51.968+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Ограничение на количество генераторов в Firebird</title><content type='html'>&lt;div&gt;24.02.2011 12:30, Vadim Mescheryakov пишет:&lt;/div&gt;&lt;div style="color: red;"&gt;&amp;gt; &lt;/div&gt;&lt;div style="color: red;"&gt;&amp;gt; Все работает норм. Конечно новые генераторы не  создаются с той же частотой&lt;/div&gt;&lt;div style="color: red;"&gt;&amp;gt; что и документы вводятся,&lt;/div&gt;&lt;div style="color: red;"&gt;&amp;gt; Но по каждому виду дока, по каждому субъекту  хозяйствования, раз в месяц&lt;/div&gt;&lt;div style="color: red;"&gt;&amp;gt; создаются (нумерация в пределах месяца).&lt;/div&gt;&lt;div style="color: red;"&gt;&amp;gt; Работает.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;После создания 32К генераторов система может встать, там внутренний ID -  &lt;/div&gt;&lt;div&gt;SMALLINT. И бекап-рестор не поможет, IIRC.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="GQ_Signature"&gt; &lt;div&gt;--&lt;/div&gt;&lt;div&gt;Дмитрий Еманов&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-9047065009161512571?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/9047065009161512571/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=9047065009161512571' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/9047065009161512571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/9047065009161512571'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/02/firebird.html' title='Ограничение на количество генераторов в Firebird'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3532307439195216366</id><published>2011-02-18T10:03:00.000+02:00</published><updated>2011-02-18T10:03:29.808+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Файловый кеш Win64 и Firebird</title><content type='html'>На одном из наших серверов, после перехода на Win 2008 R2 64, стала забиваться память, на 100%, файловым кешем. Молча и стремительно. &lt;a href="http://news.gmane.org/find-root.php?message_id=%3cigkoho%24dgh%241%40dough.gmane.org%3e"&gt;Топик обсуждения&lt;/a&gt; нашей ситуации. &lt;br /&gt;&lt;br /&gt;Решилась проблема&amp;nbsp; помещением в автозапуск арийской утилитки&lt;br /&gt;&lt;a href="http://www.uwe-sieber.de/ntcacheset_e.html"&gt;http://www.uwe-sieber.de/ntcacheset_e.html&lt;/a&gt;, которая просто дергает системную фукнцию, которая задает граничный размер кеша. &lt;br /&gt;&lt;br /&gt;Но проблема это была не только наша, проскочило вот вчера в &lt;a href="http://www.firebirdnews.org/?p=5463"&gt;новостях (Firebird slow? Well, maybe it is Windows fault.)&lt;/a&gt; решение от самой MS &lt;a href="http://support.microsoft.com/kb/976618/en-us"&gt;http://support.microsoft.com/kb/976618/en-us&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Понять логику того, почему это ограничение не устанавливается самой OS, пока не получилось.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3532307439195216366?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3532307439195216366/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3532307439195216366' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3532307439195216366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3532307439195216366'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/02/win64-firebird.html' title='Файловый кеш Win64 и Firebird'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-6632647766361108385</id><published>2011-02-14T19:44:00.000+02:00</published><updated>2011-02-14T19:44:21.136+02:00</updated><title type='text'>От чего зависит скорость сетевой карты?</title><content type='html'>Выходит что чаще всего - от драйверов. И ведь можно на голову стать, пытаясь выяснять в чем проблема, при настройке системы...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.not-a-kernel-guy.com/2011/02/13/990"&gt;http://blog.not-a-kernel-guy.com/2011/02/13/990&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;...&lt;br /&gt;Пропускная способность выросла до 17 MByte/sec при полной загрузке процессора.&lt;br /&gt;...&lt;br /&gt;Приходящие пакеты отдавались NDIS-у не в том порядке, в каком они были приняты. С точки зрения TCP/IP это выглядело как потери пакетов. Драйвер протокола постоянно запрашивал повторную передачу «потерянных» пакетов, генерируя больший, чем нужно, траффик и сужая ширину TCP окна до минимума. Стоило поменять порядок пакетов в списке (три строчки в коде), скорость одного соединения выросла свыше 30 MByte/sec.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-6632647766361108385?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/6632647766361108385/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=6632647766361108385' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6632647766361108385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6632647766361108385'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/02/blog-post.html' title='От чего зависит скорость сетевой карты?'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3081358623694328450</id><published>2011-02-13T11:27:00.000+02:00</published><updated>2011-02-13T11:27:06.366+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>У Delphi будет новый VCL?</title><content type='html'>Встретилась в блоге Ника Ходжеса интересная новость - разработчик http://www.ksdev.com/ вместе со своими наработками (VGScene, DXScene, or ImageFX) переходит в Embarcadero.&lt;br /&gt;&lt;br /&gt;Похоже, после стольких лет, у Delphi наконец появится какой-то вариант векторного UI фреймворка.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3081358623694328450?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3081358623694328450/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3081358623694328450' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3081358623694328450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3081358623694328450'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/02/delphi-vcl.html' title='У Delphi будет новый VCL?'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-5574362644152285677</id><published>2011-01-21T16:39:00.003+02:00</published><updated>2011-03-17T09:04:14.578+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winapi'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Как правильно заблокировать окно от перерисовки</title><content type='html'>Иногда это может понадобиться, если что-то активно добавляется, открывается и т.п.&lt;br /&gt;Типичный способ, рекомендуемый первым, это вызов LockWindowUpdate. Что есть в корне неверно - в Майкрософт не очень удобно выбрали название функции.&lt;br /&gt;&lt;a href="http://www.transl-gunsmoker.ru/2010/12/lockwindowupdate_29.html"&gt;http://www.transl-gunsmoker.ru/2010/12/lockwindowupdate_29.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd145034%28v=vs.85%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd145034%28v=vs.85%29.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Правильный пример:&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure SetWindowLock(AHandle: THandle);&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp; SendMessage(AHandle, WM_SETREDRAW, 0, 0);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure EndWindowLock(AHandle: THandle);&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp; SendMessage(AHandle, WM_SETREDRAW, 1, 0);&lt;br /&gt;&amp;nbsp; RedrawWindow(AHandle, nil, 0, RDW_ERASE or RDW_FRAME or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RDW_INVALIDATE or RDW_ALLCHILDREN);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Хитрость в том, что работает только RedrawWindow, а Invalidate нет.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD&lt;/b&gt; &lt;br /&gt;На практике оказало не все так весело - &lt;a href="http://www.transl-gunsmoker.ru/2011/02/unfortunate-effect-of-wmsetredraw.html"&gt;окно просто прячется&lt;/a&gt;, а не перестает отрисовываться. У нас решилось точечным применением, только к изменяемым элементам - панелям, таб сетам и т.п.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-5574362644152285677?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/5574362644152285677/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=5574362644152285677' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5574362644152285677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5574362644152285677'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/01/blog-post_21.html' title='Как правильно заблокировать окно от перерисовки'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-175502028748060824</id><published>2011-01-19T18:36:00.000+02:00</published><updated>2011-01-19T18:36:35.766+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Шифрация базы в Firebird и конкурентах</title><content type='html'>Вопросы о возможности каким-то образом защитить базу, когда ценность представляют данные в ней, звучат в конференциях Firebird достаточно часто.&lt;br /&gt;&lt;br /&gt;И обычно ответы сделаны как под копирку - что мол 100%, надежного способа это обеспечить, если база доступна физически нет. Но вот что встретилось в firebird-architect:&lt;br /&gt;&lt;br /&gt;Alex Peshkoff, Nov 10, 2010:&lt;br /&gt;&lt;blockquote&gt;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.&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Как я упоминал ранее в планах есть реализация линейного(?) шифрования в 3.0. Вероятно также шифрование на уровне страниц. Было решено, что реализовано это будет посредством плагинов с возможностью их самостоятельной реализации.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;И краткий обзор, что есть у конкурентов:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MySQL&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;нет шифрования файла &lt;/li&gt;&lt;li&gt;есть защищенное соединение &lt;/li&gt;&lt;/ul&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/secure-connections.html"&gt;http://dev.mysql.com/doc/refman/5.0/en/secure-connections.html&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;PostgreSQL&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;нет шифрования файла&amp;nbsp;&lt;/li&gt;&lt;li&gt;есть защищенное соединение &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/docs/8.1/static/ssl-tcp.html"&gt;http://www.postgresql.org/docs/8.1/static/ssl-tcp.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/docs/9.0/static/pgcrypto.html"&gt;http://www.postgresql.org/docs/9.0/static/pgcrypto.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MSSQL&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;есть шифрование файла &lt;/li&gt;&lt;li&gt;есть защищенное соединение&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb934049%28v=SQL.100%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb934049%28v=SQL.100%29.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms189067%28v=SQL.90%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms189067%28v=SQL.90%29.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DB2&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;есть шифрование файла &lt;/li&gt;&lt;li&gt;есть защищенное соединение&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.admin.sec.doc/doc/c0005815.html"&gt;http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.admin.sec.doc/doc/c0005815.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Oracle&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;есть шифрование файла&amp;nbsp;&lt;/li&gt;&lt;li&gt;есть шифрование полей &lt;/li&gt;&lt;li&gt;есть защищенное соединение&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.oracle.com/technetwork/database/options/advanced-security/index.html"&gt;http://www.oracle.com/technetwork/database/options/advanced-security/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-175502028748060824?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/175502028748060824/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=175502028748060824' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/175502028748060824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/175502028748060824'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/01/firebird.html' title='Шифрация базы в Firebird и конкурентах'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7064361712857716505</id><published>2011-01-17T08:30:00.002+02:00</published><updated>2011-01-17T08:30:00.042+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Влияет ли отпускная политика на качество разработки ПО?</title><content type='html'>&lt;a href="http://alexmoskalyuk.livejournal.com/1101379.html"&gt;Влияет ли отпускная политика на качество разработки ПО?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7064361712857716505?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7064361712857716505/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7064361712857716505' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7064361712857716505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7064361712857716505'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/01/blog-post_17.html' title='Влияет ли отпускная политика на качество разработки ПО?'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-6660017991877607749</id><published>2011-01-04T10:50:00.003+02:00</published><updated>2011-01-13T22:31:18.486+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>DDL триггеры будут в FB3</title><content type='html'>По сути теперь можно вешать события и всяческие проверки(в том числе и стиля!) на изменение метаданных.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: sql"&gt;create trigger trig_ddl_sp before create procedure&lt;br /&gt;as&lt;br /&gt;begin&lt;br /&gt;    if (rdb$get_context('DDL_TRIGGER', 'OBJECT_NAME') not starting 'SP_') then&lt;br /&gt;        exception e_invalid_sp_name;&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Подробнее: &lt;br /&gt;&lt;a href="http://firebird.svn.sourceforge.net/viewvc/firebird/firebird/trunk/doc/sql.extensions/README.ddl_triggers.txt?revision=51203"&gt;http://firebird.svn.sourceforge.net/viewvc/firebird/firebird/trunk/doc/sql.extensions/README.ddl_triggers.txt?revision=51203&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-6660017991877607749?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/6660017991877607749/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=6660017991877607749' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6660017991877607749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6660017991877607749'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/01/ddl-fb3.html' title='DDL триггеры будут в FB3'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7721254803546487713</id><published>2011-01-04T08:22:00.001+02:00</published><updated>2011-01-04T08:22:00.937+02:00</updated><title type='text'>Памятка по вопросам на собеседование</title><content type='html'>Когда-то делал нечто похожее, тем более под каждое собеседование свой набор вопросов. Но в общем случае может пригодится.&lt;br /&gt;&lt;a href="http://nmihouse.com/?p=31"&gt;http://nmihouse.com/?p=31&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Процесс найма&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Этапы найма сотрудника на работу: &amp;nbsp;количество собеседований, их последовательность и т.д.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Проект&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Описание проекта в деталях&lt;/li&gt;&lt;li&gt;Структура команды на проекте (роли и обязанности).&lt;/li&gt;&lt;li&gt;Взаимодействие команды на проекте (схема взаимодействия, средства взаимодействия)&lt;/li&gt;&lt;li&gt;Возраст/опыт людей в команде&lt;/li&gt;&lt;li&gt;Моя роль и обязанности&lt;/li&gt;&lt;li&gt;Стиль написания проекта: 1) дольше, но как надо или 2) быстро, но как попало.&lt;/li&gt;&lt;li&gt;Длительность проекта (уже прошло с начала проекта, планируемая дата окончания)&lt;/li&gt;&lt;li&gt;Используемые методологии разработки&lt;/li&gt;&lt;li&gt;Какие типы тестирования применяются на проекте – unittesting, ручное, др.?&lt;/li&gt;&lt;li&gt;Средства разработки&lt;/li&gt;&lt;li&gt;Система контроля версий&lt;/li&gt;&lt;li&gt;Система контроля требований&lt;/li&gt;&lt;li&gt;Система трекинга багов&lt;/li&gt;&lt;li&gt;Система трекинга заданий&lt;/li&gt;&lt;li&gt;Используются ли анализаторы и метрики кода?&lt;/li&gt;&lt;li&gt;Какое количество времени будет выделено на «прокачку знаний до необходимого уровня»?&lt;/li&gt;&lt;li&gt;Распределение видов деятельности по времени в процентном соотношении на данной позиции: &lt;ul&gt;&lt;li&gt;написание требований&lt;/li&gt;&lt;li&gt;ревью требований&lt;/li&gt;&lt;li&gt;написание тестов&lt;/li&gt;&lt;li&gt;ручное тестирование&lt;/li&gt;&lt;li&gt;дизайн / архитектура&lt;/li&gt;&lt;li&gt;написание документов&lt;/li&gt;&lt;li&gt;багфиксинг&lt;/li&gt;&lt;li&gt;имплементация нового кода&lt;/li&gt;&lt;li&gt;R&amp;amp;D&lt;/li&gt;&lt;li&gt;поддержка инструментов и сред разработки&lt;/li&gt;&lt;li&gt;внедрение новых инструментов&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Рабочее время&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Опишите типичный рабочий день сотрудника на данной вакансии.&lt;/li&gt;&lt;li&gt;Со скольки до скольки?&lt;/li&gt;&lt;li&gt;Сколько рабочих дней в неделю?&lt;/li&gt;&lt;li&gt;Есть ли возможность работать по гибкому графику (раньше приходить и раньше уходить и наоборот)?&lt;/li&gt;&lt;li&gt;Бывают ли случаи работы в выходные и сверхурочно?&amp;nbsp;Как часто?&lt;/li&gt;&lt;li&gt;Оплачивается ли сверхурочная работа и как?&lt;/li&gt;&lt;li&gt;Могу ли я отказаться от работы сверхурочно?&lt;/li&gt;&lt;li&gt;Есть ли выходные в официальные государственные праздники? Список государственных праздников?&lt;/li&gt;&lt;li&gt;Есть ли выходные в какие-то специальные дни, назначенные компанией? Список таких выходных?&lt;/li&gt;&lt;li&gt;Применяются ли системы трэкинга рабочего времени сотрудников (читай – элементы надзора)?&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Зарплата&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Структрура зарплаты (налог + netto + %банку + какой курс обмена)&lt;/li&gt;&lt;li&gt;Зарплата(netto) до испытательного срока&lt;/li&gt;&lt;li&gt;Зарплата(netto) после испытательного срока&lt;/li&gt;&lt;li&gt;Дата выдачи зарплаты.&lt;/li&gt;&lt;li&gt;Через сколько времени повышается зарплата и на сколько?&lt;/li&gt;&lt;li&gt;Есть ли бонусы и от чего зависит их получение?&lt;/li&gt;&lt;li&gt;Выплачивается ли вовремя зарплата или бывают задержки?&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Условия работы&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Тип помещения&lt;/li&gt;&lt;li&gt;Количество пространства на человека&lt;/li&gt;&lt;li&gt;Оборудование.&lt;/li&gt;&lt;li&gt;Есть ли столовая (внутри компании) или приходится ходить есть куда-то?&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Командировки&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Есть ли командировки?&lt;/li&gt;&lt;li&gt;Как часто? Сколько дней в месяц/в год?&lt;/li&gt;&lt;li&gt;Оплата командировочных?&lt;/li&gt;&lt;li&gt;Работают ли люди, находящиеся в командировках, в выходные дни? Если да, то оплачиваются ли они?&lt;/li&gt;&lt;/ol&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Больничные и медстраховка&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt; Больничные – оплачиваются или нет?&lt;/li&gt;&lt;li&gt;Сколько дней оплачиваемых больничных в году?&lt;/li&gt;&lt;li&gt;Есть ли мед.страховки?&lt;/li&gt;&lt;li&gt;На какую сумму медстраховки и что в них входит?&lt;/li&gt;&lt;li&gt;Медстраховки предоставляются только для сотрудника или для его семьи тоже?&lt;/li&gt;&lt;li&gt;Cтраховка жизни.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Испытательный срок&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Длительность испытательного срока&lt;/li&gt;&lt;li&gt;Условия успешного прохождения испытательного срока&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Структура компании и карьерный рост&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Опишите структуру компании : офисы, подразделения, струкрура внутри данного подразделения, etc.&lt;/li&gt;&lt;li&gt;Какие возможные пути карьерного роста с данной позиции ?&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Разное&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Оплата компанией аренды жилья (срок, место)&lt;/li&gt;&lt;li&gt;Релокейшн – оплачивается ли компанией переезд? Для всей семьи?&lt;/li&gt;&lt;li&gt;Виза – какая виза для кандидата, для членов семьи? Оплачивается ли получение виз компанией?&lt;/li&gt;&lt;li&gt;Как разруливается следующая ситуация – изначально я еду на работу  как в командировку, компания пытается оформить мне визу, но визу в итоге  не дают по каким-либо причинам?&lt;/li&gt;&lt;li&gt;Бывают ли корпоративные вечеринки?&lt;/li&gt;&lt;li&gt;Какие отношения в коллективе?&lt;/li&gt;&lt;li&gt;Оплачиваются ли обеды и если да, то на какую сумму?&lt;/li&gt;&lt;li&gt;Бесплатные напитки/еда в офисе&lt;/li&gt;&lt;li&gt;Оплачивается ли проезд?&lt;/li&gt;&lt;li&gt;Оплачивается ли перелет домой и обратно во время отпуска? Сколько раз в году? Только мне или всем членам семьи?&lt;/li&gt;&lt;li&gt;Предоставляется ли компанией в пользование автомобиль?&lt;/li&gt;&lt;li&gt;Предоставляет ли компания льготные кредиты? Через какой промежуток времени? На какие суммы?&lt;/li&gt;&lt;li&gt;Оплачивает ли компания занятия спортом, если да – какие виды спорта и на какие суммы?&lt;/li&gt;&lt;li&gt;Есть ли спортзал в офисе?&lt;/li&gt;&lt;li&gt;Есть ли комната с какими-либо играми ? (Playstation/Бильярд/Теннис/etc.)&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Повышение эффективности сотрудников&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Насколько компания заинтересована в повышении эффективности работника?&lt;/li&gt;&lt;li&gt;Проводятся ли семинары, конференции?&lt;/li&gt;&lt;li&gt;Направляет ли компания сотрудников на какие-либо курсы?&lt;/li&gt;&lt;li&gt;Преобретаются ли книги по запросам сотрудников?&lt;/li&gt;&lt;li&gt;Преобретается ли дополнительное ПО по запросам сотрудников?&lt;/li&gt;&lt;li&gt;Внедряются ли новые инструменты/технологии по запросам сотрудников? Как это происходит?&lt;/li&gt;&lt;li&gt;Дополнительные мотиваторы?&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Смена проекта внутри компании&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Как часто человека перебрасывают с одного проекта на другой?&lt;/li&gt;&lt;li&gt;Что происходит с людьми по окончанию проекта?&lt;/li&gt;&lt;li&gt;Если на других проектах нет открытых позиций?&lt;/li&gt;&lt;li&gt;Возможна ли смена проекта до его окончания?&lt;/li&gt;&lt;li&gt;Возможна ли смена проекта с реллокейшном в другой офис/страну?&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Отпуск&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Продолжительность в год? Календарных или рабочих дней?&lt;/li&gt;&lt;li&gt;Оплачиваемый, неоплачиваемый?&lt;/li&gt;&lt;li&gt;Через какой промежуток времени его можно взять?&lt;/li&gt;&lt;li&gt;Можно ли взять его сразу или только по частям?&lt;/li&gt;&lt;li&gt;Если не берёшь отпуск, то он прогорает? Можно ли взять деньгами и не ходить в него?&lt;/li&gt;&lt;li&gt;Могу ли я взять отпуск за свой счет? Какое максимальное количество дней в году?&lt;/li&gt;&lt;li&gt;Зависит ли размер отпуска от стажа?&lt;/li&gt;&lt;/ol&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Увольнение&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt; В случае увольнения по инициативе компании до окончания  испытательного срока выплачивается ли выходное пособие? Какое?&amp;nbsp;За какой  период времени компания предупреждает об этом?&lt;/li&gt;&lt;li&gt;В случае увольнения по инициативе компании после окончания  испытательного срока выплачивается ли выходное пособие? Какое?&amp;nbsp;За какой  период времени компания предупреждает об этом?&lt;/li&gt;&lt;li&gt;В случае увольнения по инициативе сотрудника до окончания  испытательного срока выплачивается ли выходное пособие или вычитается  какая-то сумма? Какая? За какой период времени сотрудник обязан  предупредить об этом?&lt;/li&gt;&lt;li&gt;В случае увольнения по инициативе сотрудника после окончания  испытательного срока выплачивается ли выходное пособие или вычитается  какая-то сумма? Какая? За какой период времени сотрудник обязан  предупредить об этом?&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Контракт&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Что из вышеперечисленного будет прописано в контракте?&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;На какой период подписывается контракт?&lt;/li&gt;&lt;li&gt;Когда я смогу увидеть полный текст контракта?&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7721254803546487713?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7721254803546487713/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7721254803546487713' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7721254803546487713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7721254803546487713'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/01/blog-post_04.html' title='Памятка по вопросам на собеседование'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-300208531318349032</id><published>2011-01-03T09:00:00.002+02:00</published><updated>2011-01-03T09:00:05.086+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>На что тратится наше время  :)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://i.imgur.com/xuCIW.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://i.imgur.com/xuCIW.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-300208531318349032?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/300208531318349032/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=300208531318349032' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/300208531318349032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/300208531318349032'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2011/01/blog-post.html' title='На что тратится наше время  :)'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-6986182379199744054</id><published>2010-12-20T15:47:00.001+02:00</published><updated>2011-01-03T08:45:14.443+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='управление'/><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Интересное IT-мероприятие от Виктории Придатко</title><content type='html'>&lt;a href="http://hr-maverick.blogspot.com/2010/12/15-it.html"&gt;http://hr-maverick.blogspot.com/2010/12/15-it.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В очень простом и демократичном формате, вечерком, в офисе Циклума рассказали о своей &lt;i&gt;практике&lt;/i&gt; два человека.&lt;br /&gt;&lt;br /&gt;Один из докладов - о том, как работают с распределенной командой:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Четкий, фулл-тайм график, синхронизированный со всеми. С 11 до 20.&lt;/li&gt;&lt;li&gt;Обязательные совещания КАЖДЫЙ _вечер_. [пока еще не встретилось описание успешной ораспределенной команды без них].&lt;/li&gt;&lt;li&gt;Не нанимают людей с детьми - считают что с работой это не совместимо&lt;/li&gt;&lt;li&gt;Отдают предпочтение работавшим в оперсорсе, и табу на работу с фрилансерами. Пытаются работать только с лучшими.&lt;/li&gt;&lt;li&gt;Слабые девелоперы тянут производительность _всей команды_ вниз (?)&lt;/li&gt;&lt;li&gt;Исповедуют "меритократию" - на тех. уровне должна быть иерархия авторитетов, демократия не работает. Кто-то должен иметь возможность принять окончательное решение.&lt;/li&gt;&lt;li&gt;Активно используют механизм burn-down диаграмм. Горизонт планирования до месяца, обычно меньше. Попробовали на три - фейл.&lt;/li&gt;&lt;/ul&gt;В общем для собравшихся это был довольно нестандартный подход(эдакие Джоэлевкие мотивы прослеживаются), в свете засилья киевских аутсорсеров(это стартап, получивший финансирование и уже вышедший на окупаемость).&lt;br /&gt;&lt;br /&gt;Второй доклад более прагматичный и механический, про Зарплаты в ИТ, но через призму аутсорса:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;По статистике при переходе подъем ЗП обычно 25%&lt;/li&gt;&lt;li&gt;У человека прыгающего по компаниям зп растет быстрее, чем у эволюционно растущего на одном месте&lt;/li&gt;&lt;li&gt;Если использовать бонусы, то не менее половины зп, иначе они не работаю/мотивируют (?)&lt;/li&gt;&lt;li&gt;&amp;nbsp;Составляющие пересмотра зп:&lt;br /&gt;&amp;nbsp;- инфляционная (для $ сейчас 5%)&lt;br /&gt;&amp;nbsp;- рыночная&lt;/li&gt;&lt;li&gt;Частота перемотра до мидла - раз в 2-6 месяцев, для мидлов-синьоров - раз в год&lt;/li&gt;&lt;li&gt;Один из способов обсуждения повышения - спросить у человека как он видит составляющие своей зп, и за что он хочет повышения в данном случае.&lt;/li&gt;&lt;li&gt;"шантаж уходом" - работает один раз, потом нужно увольнять(если конечно предыдущие пункты исполняются) (хотя на это звучали возражения)&lt;/li&gt;&lt;li&gt;Безпроцентный кредит - эффективный механизм мотивации. После его выплаты у сотрудника создается иллюзия повышения зп. &lt;/li&gt;&lt;/ul&gt;&lt;b&gt;UPD&lt;/b&gt;&lt;br /&gt;Вот еще одна подборочка - &lt;a href="http://sergtk-it.blogspot.com/2010/12/it.html"&gt;http://sergtk-it.blogspot.com/2010/12/it.html &lt;/a&gt;&lt;br /&gt;Интересно, но многие вещи мы восприняли совершенно по разному :-/&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD2&amp;nbsp;&lt;/b&gt;&lt;br /&gt;Презентации &lt;a href="http://hr-maverick.blogspot.com/2010/12/15.html"&gt;http://hr-maverick.blogspot.com/2010/12/15.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-6986182379199744054?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/6986182379199744054/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=6986182379199744054' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6986182379199744054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6986182379199744054'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/12/it.html' title='Интересное IT-мероприятие от Виктории Придатко'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8554406758915365305</id><published>2010-11-18T14:55:00.000+02:00</published><updated>2010-11-18T14:55:10.845+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>"...и ждем, что они друг с другом договорятся. Они не договорятся."</title><content type='html'>Интересное интервью и цитата из него:&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;a href="http://experience.openquality.ru/elena-sagalaeva-interview/"&gt;http://experience.openquality.ru/elena-sagalaeva-interview/&lt;/a&gt; &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Елена, сможете ли вы рассказать о наиболее значимой ошибке, которую вам доводилось видеть в проектах?&lt;/i&gt;&lt;br /&gt;Самые суровые проблемы возникают из-за неверно принятых решений, не  из-за того, что программист где-то плюс с минусом перепутал. И из-за  попыток решить технические проблемы политическими методами. Или вот,  например, ставим работать программистов, которые друг друга не знают. Не  назначаем среди них главного &lt;b&gt;&lt;i&gt;и ждем, что они друг с другом договорятся.  Они не договорятся.&lt;/i&gt;&lt;/b&gt; Это классическая запланированная катастрофа, я  несколько раз такое наблюдала. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8554406758915365305?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8554406758915365305/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8554406758915365305' title='Комментарии: 11'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8554406758915365305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8554406758915365305'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/11/blog-post_18.html' title='&quot;...и ждем, что они друг с другом договорятся. Они не договорятся.&quot;'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7041676841812594672</id><published>2010-11-01T10:08:00.001+02:00</published><updated>2010-11-01T10:10:04.994+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Высоконагруженные системы</title><content type='html'>Встретилась хорошая подборка статей про высоконагруженные системы -&amp;nbsp; http://www.insight-it.ru/highload/. Конечно очень обзорно, но есть очень интересные моменты. Рекомендую.&lt;br /&gt;&lt;br /&gt;PS&lt;br /&gt;Интересно, а что можно считать критерием сложности проекта? Ведь высокая нагрузка - это только одна сторона медали.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7041676841812594672?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7041676841812594672/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7041676841812594672' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7041676841812594672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7041676841812594672'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/11/blog-post.html' title='Высоконагруженные системы'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7887937631427848501</id><published>2010-06-18T13:04:00.000+03:00</published><updated>2010-06-18T13:04:00.208+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Про git на "Инструменты Agile"</title><content type='html'>Небольшая подборка выступлений по практическому использованию инструментов разработки в agile-командах (Yandex, Softline...) &lt;a href="http://lib.custis.ru/Agile-tools-2010"&gt;http://lib.custis.ru/Agile-tools-2010&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;И собственно цитата всего поста:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;«GIT - инструмент для  богов».  «…После того,  как мы убедились, что не все люди боги…» &lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7887937631427848501?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7887937631427848501/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7887937631427848501' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7887937631427848501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7887937631427848501'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/06/git-agile.html' title='Про git на &quot;Инструменты Agile&quot;'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-6378542979601665979</id><published>2010-05-05T11:55:00.000+03:00</published><updated>2010-05-05T11:55:21.926+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Тонкости внедрения</title><content type='html'>Интересная &lt;a href="http://erp-shnik.habrahabr.ru/blog/91585/"&gt;статья&lt;/a&gt; и замечательнейшая цитата из нее: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Я&amp;nbsp;потратил на&amp;nbsp;этот проект почти год своей жизни. Это много. И&amp;nbsp;обидно.&lt;br /&gt;А&amp;nbsp;тем, кто планирует участвовать в&amp;nbsp;подобных проектах, хочу сказать&amp;nbsp;—  ребята, в&amp;nbsp;таких крупных компаниях гораздо важнее не&amp;nbsp;суть дела,  а&amp;nbsp;правильная политика и&amp;nbsp;учет клановых сил. Главное знать, кто тут  на&amp;nbsp;кого имеет какое влияние и&amp;nbsp;с&amp;nbsp;кем и&amp;nbsp;в&amp;nbsp;какой последовательности надо  все согласовывать. А&amp;nbsp;насколько хорошо&amp;nbsp;то, &lt;strong&gt;что именно  вы&amp;nbsp;предлагаете&lt;/strong&gt;, значение имеет не&amp;nbsp;очень большое.&lt;/blockquote&gt;Не ново, но так за живое задевает...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-6378542979601665979?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/6378542979601665979/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=6378542979601665979' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6378542979601665979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6378542979601665979'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/05/blog-post.html' title='Тонкости внедрения'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7071143912905990732</id><published>2010-04-28T17:39:00.002+03:00</published><updated>2010-04-28T17:40:20.094+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Сложности общения</title><content type='html'>Встретился хороший &lt;a href="http://www.happy-pm.com/blog/?p=4726&amp;amp;utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+happy-pm+%28Happy+PM+Club%29"&gt;пост&lt;/a&gt; про некоторые аспекты общения. С которыми не раз сам такливался на практике. Цитаты из статьи Владимира Германа &lt;a href="http://instream.ru/publication/publication3.html"&gt;“Личная  неприязнь”&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Личная неприязнь - механизм психики. Действие ее коварно и не сразу  распознаваемо сознанием. Человек практически не способен мыслить  объективно, находясь под действием личной неприязни. Основное  вредоносное ее свойство заключается в следующем. Личная неприязнь делает  так, что любые высказывания, суждения или поступки оппонента трактуются  нашим сознанием как враждебные или с подвохом - действует крайнее  недоверие. Даже улыбка человека, у которого просто хорошее настроение,  может быть истрактована как враждебная ухмылка или насмешка. В  результате, личная неприязнь сама себя вскармливает. В современных  коллективах это свойство личной неприязни подкрепляется еще и  склонностью оппонентов общаться по электронной почте или ICQ - средства  не передают эмоции. &lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Например, если один из оппонентов поставил в приветствии восклицательный  знак, подразумевая восторженное приветствие адресата, то адресат,  испытывающий личную неприязнь, прочитает восклицательный знак как наезд.  Необходимо знать это и рекомендовать избегать общения по email и ICQ в  случае возникновения напряженности между людьми.&lt;/blockquote&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Если люди хотят избавиться от личной неприязни, то самое главное - кому-то сделать первый шаг на встречу другому и поговорить откровенно о своих чувствах и том вреде и дискомфорте, который они испытывают. Прямой разговор является основным средством устранения личной неприязни.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Иногда достаточно пары искренних комплиментов или подчеркнутой поддержки мнения “оппонента” на одном из совещаний. Ведь личная неприязнь включается у людей от личных претензий, когда человек видит, что его атакуют как личность. Если дать другому человеку понять, что вы его цените как личность и разногласия у вас только по рабочим вопросам, то личная неприязнь может испариться без следа и даже перерасти в дружбу.&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;Конечно, есть вероятность, что при сильной степени неприятия, ваш оппонент будет искать в вашем шаге навстречу подвох. Но если вы будете откровенны, то этого не произойдет.&lt;/blockquote&gt;&lt;br /&gt;&amp;nbsp;PS потому в распределенном проекте общаться только письмами - наихудшее преступление, как бы они там не структурировали мысли и идеи :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7071143912905990732?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7071143912905990732/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7071143912905990732' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7071143912905990732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7071143912905990732'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/04/blog-post.html' title='Сложности общения'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3713140720607681957</id><published>2010-03-29T12:18:00.000+03:00</published><updated>2010-03-29T12:18:10.811+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='dunit'/><title type='text'>Вывод лога DUnit в файл</title><content type='html'>Иногда нет возможности запускать тесты из консольного приложения, что делает невозможным логгирование вывода стандартными средствами. Что бы, к примеру, запущенная после коммита процедура сборки/тестирования, в случае ошибки, бросила в почту разработчикам лог с непрошедшими тестами.&lt;br /&gt;&lt;br /&gt;Для решения на скорую руку был набросан простенький класс (чуть более чем полностью слизанный с TextTestRunner), позволяющий логгировать все в файл - &lt;a href="https://www.assembla.com/code/iqs_tools/git/nodes/tests/dunit_file_listener/FileTestRunner.pas?rev=HEAD"&gt;FileTestRunner&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Проверен на D2009.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3713140720607681957?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3713140720607681957/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3713140720607681957' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3713140720607681957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3713140720607681957'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/03/dunit.html' title='Вывод лога DUnit в файл'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-2719131102329937982</id><published>2010-03-24T11:54:00.000+02:00</published><updated>2010-03-24T11:54:29.761+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='dunit'/><title type='text'>Упрощение CheckException в DUnit с помощью анонимных функций</title><content type='html'>К сожалению, для проверки функции на возврат исключения возможен только для процедуры типа:&lt;br /&gt;&lt;blockquote&gt;TTestMethod&amp;nbsp; = procedure of object; &lt;br /&gt;procedure CheckException(AMethod: TTestMethod; AExceptionClass: TClass; msg :string = '');&lt;/blockquote&gt;Легким движением руки(наследником или правкой оригинального класса) для свежих версий Delphi упрощаем написание таких тестов:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;TTestProc2&amp;nbsp; = reference to procedure;&lt;/blockquote&gt;&lt;blockquote&gt;TTestCase2 = class(TTestCase)&lt;br /&gt;public&lt;br /&gt;&amp;nbsp; procedure CheckException2(AMethod: TTestProc2; AExceptionClass: TClass; msg :string = '');&lt;br /&gt;end;&lt;/blockquote&gt;&lt;blockquote&gt;Пример использования: &lt;br /&gt;...&lt;br /&gt;CheckException2(procedure begin DirDelete(TestDir); end, EInOutError); &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-2719131102329937982?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/2719131102329937982/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=2719131102329937982' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2719131102329937982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2719131102329937982'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/03/checkexception-dunit.html' title='Упрощение CheckException в DUnit с помощью анонимных функций'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-9142651018128747027</id><published>2010-03-08T10:31:00.000+02:00</published><updated>2010-03-08T10:31:00.572+02:00</updated><title type='text'>Разработка - это борьба с антивирусами</title><content type='html'>На днях, Касперский начал ругаться на один из пакетов нашей системы обновлений. В пакете (7z архив), от 11 сентября 2009 года лежал инсталятор сделанный InnosSetup, внутри которого и лежал якобы зараженный файл.&lt;br /&gt;&lt;br /&gt;Беглый анализ этого яйца КБ на VirusTotal &lt;a href="http://www.virustotal.com/analisis/149214c6e7be38af03c398724477146f7ffa9e10f33a83feb7eae2c025973f3b-1268032863"&gt;показал&lt;/a&gt;, что ругается только Касперский, на какой-то никому известный троян, что явно указывало на ложное срабатывание. Проблемы была отложена на неделю, в надежде что рассосется :)&lt;br /&gt;&lt;br /&gt;Но практика показала, что даже ложные сигнатуры, как те вирусы, расползаются по мелким антивирусным компаниям безо всяких проверок. Через 2 недели уже 10-ток антивирусов определяли файл как зараженный! Но при этом среди них не было ни одной крупной компании.&lt;br /&gt;&lt;br /&gt;Приятно был поражен, что после отправки комплейна в лабораторию Касперского, &lt;b&gt;ложное&lt;/b&gt; срабатывание было подтверждено в течение часа (и это 8-го марта!).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-9142651018128747027?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/9142651018128747027/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=9142651018128747027' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/9142651018128747027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/9142651018128747027'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/03/blog-post.html' title='Разработка - это борьба с антивирусами'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7499696859943310681</id><published>2010-03-02T11:27:00.000+02:00</published><updated>2010-03-02T11:27:35.811+02:00</updated><title type='text'>97 заметок архитекторам и разработчикам</title><content type='html'>Уж не знаю, откуда возник такой формат, но есть две замечательные серии статей, по 97 штук, с краткими заметками в области разработки и проектирования ПО. В оригинале они на английском, но есть частичный перевод от &lt;a href="http://avl.livejournal.com/"&gt;avl&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;97 Things Every Programmer Should Know&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;оригинал - &lt;a href="http://programmer.97things.oreilly.com/wiki/index.php/Edited_Contributions"&gt;http://programmer.97things.oreilly.com/wiki/index.php/Edited_Contributions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;перевод - &lt;a href="http://avl.livejournal.com/tag/97_things_programmer_should_know"&gt;http://avl.livejournal.com/tag/97_things_programmer_should_know&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;97  Things Every Software Architect Should Know&lt;/b&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;оригинал(уже недоступен) - &lt;a href="http://97-things.near-time.net/wiki/97-things-every-software-architect-should-know-the-book"&gt;http://97-things.near-time.net/wiki/97-things-every-software-architect-should-know-the-book&lt;/a&gt;&lt;/li&gt;&lt;li&gt;перевод - &lt;a href="http://avl.livejournal.com/tag/97_things_architect_should_know"&gt;http://avl.livejournal.com/tag/97_things_architect_should_know&lt;/a&gt; &lt;/li&gt;&lt;li&gt;для печати - &lt;a href="http://docs.google.com/View?id=ddcq7655_199dq3bwfv4"&gt;http://docs.google.com/View?id=ddcq7655_199dq3bwfv4&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7499696859943310681?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7499696859943310681/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7499696859943310681' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7499696859943310681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7499696859943310681'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/03/97.html' title='97 заметок архитекторам и разработчикам'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8084800138558407769</id><published>2010-03-01T23:18:00.001+02:00</published><updated>2010-03-01T23:29:57.279+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>MindTheBird! - УпомяниПроПтица!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XZK0pEW40Eo/S4wxuC31kjI/AAAAAAAAAX0/BbfFs399FJw/s1600-h/mtb_vertical.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 4em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XZK0pEW40Eo/S4wxuC31kjI/AAAAAAAAAX0/BbfFs399FJw/s320/mtb_vertical.gif" /&gt;&lt;/a&gt;&lt;/div&gt;Как многие помнят, я, в силу исторических причин, большой любитель, и более того фанат, такого замечательного продукта, как СУБД &lt;a href="http://firebirdsql.org/"&gt;Firebird&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;В скором времени, выходит его новая версия 2.5, в которой разработчики в очередной раз радуют нас множеством вкусностей:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;новая промежуточная архитектура SuperClassic &lt;/li&gt;&lt;li&gt;управление пользователями из SQL&lt;/li&gt;&lt;li&gt;долгожданный многими ALTER VIEW&lt;/li&gt;&lt;li&gt;автономные транзакции&lt;/li&gt;&lt;li&gt;гетерогенные запросы к внешним базам FB через EXECUTE STATEMENT&lt;/li&gt;&lt;li&gt;роль RDB$ADMIN&lt;/li&gt;&lt;li&gt;трассировка работы&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;В поддержку сего события, запущен проект &lt;a href="http://www.mindthebird.com/"&gt;MindTheBird!&lt;/a&gt; - нацеленный на как можно более широкое освещение релиза и всего проекта в целом. Соответственно пассивным вкладом нас, разработчиков использующих эту СУБД может (а лучше &lt;i&gt;должно&lt;/i&gt; быть) размещение &lt;a href="http://www.mindthebird.com/downloadmtb.html"&gt;баннера&lt;/a&gt; на сайте/блоге.&lt;br /&gt;&lt;br /&gt;А желающие принять более активное участи, могут заработать &lt;b&gt;&lt;span style="color: red;"&gt;500$&lt;/span&gt;&lt;/b&gt; за работу с логотипом ФБ, или получить лицензию FastReport за привлечение новых участником.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Подробнее про изменения в архитектуре 2.5, от Дмитрия Еманова: &lt;br /&gt;&lt;br /&gt;&lt;div id="__ss_2280173" style="width: 425px;"&gt;&lt;b style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/ibsurgeon/firebird-25-architecture-by-dmitry-yemanov-in-english" title="Firebird 2.5 Architecture, by Dmitry Yemanov (in English)"&gt;Firebird 2.5 Architecture, by Dmitry Yemanov (in English)&lt;/a&gt;&lt;/b&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=firebirdarchitecture-091019114722-phpapp02&amp;amp;stripped_title=firebird-25-architecture-by-dmitry-yemanov-in-english" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=firebirdarchitecture-091019114722-phpapp02&amp;amp;stripped_title=firebird-25-architecture-by-dmitry-yemanov-in-english" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ibsurgeon"&gt;Nataly Polyanskaya&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8084800138558407769?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8084800138558407769/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8084800138558407769' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8084800138558407769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8084800138558407769'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/03/mindthebird.html' title='MindTheBird! - УпомяниПроПтица!'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XZK0pEW40Eo/S4wxuC31kjI/AAAAAAAAAX0/BbfFs399FJw/s72-c/mtb_vertical.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-2809795612333169999</id><published>2010-02-18T10:05:00.001+02:00</published><updated>2010-07-16T08:01:31.978+03:00</updated><title type='text'>Miranda + Skype</title><content type='html'>Будучи заядлым любителем такаого истинно правильного IM клиента как miranda, я ощущал жуткий дискомфорт, из-за того, что с некоторыми людьми приходилось общаться через родной клиент от Skype.&lt;br /&gt;&lt;br /&gt;Последний я здорово уважаю за звук и конференции, и с удовольствием звоню через него, но IM в нем...&lt;br /&gt;&lt;br /&gt;Да много удобнее иметь на флешке шифрованную базу Миранды с логами общения за последние 5 лет, чем по меньшей мере 3 разрозненные инсталяции Скайпа.&lt;br /&gt;&lt;br /&gt;Но вот недавно, обновляя Миранду, в списке наиболее популярных заметил плагин-обертку, который позволяет дергать существующую инсталяцию скайпа через Миранду - &lt;a href="http://addons.miranda-im.org/details.php?action=viewfile&amp;amp;id=3200"&gt;рекомендую&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-2809795612333169999?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/2809795612333169999/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=2809795612333169999' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2809795612333169999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2809795612333169999'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/02/maranda-skype.html' title='Miranda + Skype'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8819610912478576763</id><published>2010-02-13T13:02:00.001+02:00</published><updated>2010-02-13T13:03:10.094+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><title type='text'>Desktop-интерфес на html?</title><content type='html'>На днях, долго выбираемй мной домашний антивирус avast!, заполучил довольно симпатичный новый внешний вид(откровенно говоря старый был жутковат). Проходясь по UI в поисках возможности временного отключения резидентной защиты(кстати эта возможность появилась - правда не так удобно как в Касперском) я набрел на форму "О программе", где вычитал, что построен новый интерфейс с использованием библиотеки &lt;a href="http://www.terrainformatica.com/htmlayout/main.whtm"&gt;HTMLayout&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Вспоминая мучения во время разработки пользовательского интерфейса на Delphi - интересная это в общем штука, позволяет привнести в мир desktop разработки все прелести html/css: &lt;br /&gt;&lt;blockquote&gt;HTMLayout – это, грубо говоря, веб-браузер, который Windows-программист может встроить в свою программу и, таким образом, построить интерфейс программы на базе DHTML&lt;/blockquote&gt;&lt;br /&gt;Использует ее уже достаточно много крупных компаний, так что для приложений, требующих развитого UI, можно пробовать. Пока хорошей/популярной обертки для Delphi нет, но начало уже &lt;a href="http://www.rsdn.ru/forum/htmlayout/2233202.1.aspx"&gt;положено&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Подробнее, в интервью с разработчиком, можно почитать &lt;a href="http://guicci.ru/2007/10/28/htmlayout-web-20-prishel-na-desktop/"&gt;здесь&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8819610912478576763?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8819610912478576763/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8819610912478576763' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8819610912478576763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8819610912478576763'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/02/desktop-html.html' title='Desktop-интерфес на html?'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-2889052076439811921</id><published>2010-02-12T15:07:00.001+02:00</published><updated>2010-02-12T15:07:29.772+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Firebird. Как определить что конект через embedded server?</title><content type='html'>&gt; Как определить что конект через embedded server?&lt;br /&gt; &lt;br /&gt;Если FB 2.1 и выше:&lt;br /&gt; &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;SELECT &lt;br /&gt;  CASE &lt;br /&gt;    WHEN MON$REMOTE_PROTOCOL IS NULL THEN 1 ELSE 0 &lt;br /&gt;  END&lt;br /&gt;FROM &lt;br /&gt;  MON$ATTACHMENTS&lt;br /&gt;WHERE &lt;br /&gt;  MON$ATTACHMENT_ID = CURRENT_CONNECTION&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;-- &lt;br /&gt;Дмитрий Еманов&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-2889052076439811921?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/2889052076439811921/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=2889052076439811921' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2889052076439811921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2889052076439811921'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/02/firebird-embedded-server.html' title='Firebird. Как определить что конект через embedded server?'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3866084753160859734</id><published>2010-02-09T12:34:00.004+02:00</published><updated>2010-02-09T13:02:19.563+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Упрощенный обмен метками в git</title><content type='html'>Есть в git не очень, по меньшей мере пока, понятный и логичный момент - при пуше, созданные и измененные метки не отправляются на сервер. Из за чего, обмен изменениями с коллегами приходится проводить в 2 этапа:&lt;br /&gt;сначала делать git push, а потом еще и git push --tags. И аналогично для pull/fetch&lt;br /&gt;&lt;br /&gt;Но сие поведение &lt;a href="https://wincent.com/wiki/Pushing_branches_and_tags_with_a_single_%22git_push%22_invocation"&gt;можно задать&lt;/a&gt; в файле настроек, для каждого репозитария&lt;br /&gt;&lt;br /&gt;Или &lt;a href="http://stackoverflow.com/questions/1914579/set-up-git-to-pull-and-push-all-branches"&gt;выполнить для репозитория команды&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;git config --add remote.origin.push +refs/tags/*:refs/tags/*&lt;br /&gt;git config --add remote.origin.push +refs/heads/*&lt;br /&gt;git config --add remote.origin.fetch +refs/tags/*:refs/tags/*&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3866084753160859734?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3866084753160859734/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3866084753160859734' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3866084753160859734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3866084753160859734'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/02/tags-git.html' title='Упрощенный обмен метками в git'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-4762657523962341658</id><published>2010-02-04T16:23:00.001+02:00</published><updated>2010-02-04T16:30:49.568+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msbuild'/><title type='text'>Ant, MSBuild и расширения</title><content type='html'>Проглядывал на днях &lt;a href="http://www.luxoft-training.ru/upload/iblock/ed6/ant_workbook.pdf"&gt;презентацию&lt;/a&gt; одного доклада, про сборщик из мира java - &lt;a href="http://en.wikipedia.org/wiki/Apache_Ant"&gt;Ant&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;В общем все стандартно, после знакомства с msbuild, кроме одной фишки, которая жутко понравилась - возможность&amp;nbsp; прямо в скрипте подключить расширение написанное на Java.&lt;br /&gt;&lt;br /&gt;Для Delphi и msbuild приходится извращаться, компилить промежуточные exe-шники, писать утилитки и т.п.&lt;br /&gt;&lt;br /&gt;Хотя наверное можно попробовать набросать какую-то мелочь на .Net - там тоже можно &lt;a href="http://msdn.microsoft.com/en-us/library/t41tzex2.aspx"&gt;динамически подключить&lt;/a&gt; таск. &lt;br /&gt;&lt;br /&gt;...после некоторых копаний...&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Сделать можно, и довольно таки просто, см. пример ниже. По сути - мы на лету, внутри самого проекта, компилим расширение msbuild написанное на c#, подключаем его в этот же проект и в нем же используем. Благо оказалось что с .Net SDK идет компилятор С#.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.assembla.com/iqs_tools/git/nodes/tests/msbuild_test?rev=a566c2bd3f4cd252e9b8c7177ef98d87b27f1a9e"&gt;Все полностью&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: url(&amp;quot;http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif&amp;quot;) repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;Project DefaultTargets = "MyTarget"  &lt;br /&gt;   xmlns="http://schemas.microsoft.com/developer/msbuild/2003" &amp;gt;  &lt;br /&gt;  &amp;lt;UsingTask TaskName="SimpleTask.HelloTask" AssemblyFile="C:\iqs.tools\tests\msbuild_test\HelloTask.dll"/&amp;gt;   &lt;br /&gt;   &amp;lt;ItemGroup&amp;gt;  &lt;br /&gt;     &amp;lt;CSFile Include = "HelloTask.cs"/&amp;gt;  &lt;br /&gt;   &amp;lt;/ItemGroup&amp;gt;  &lt;br /&gt;   &amp;lt;Target Name = "Compile"&amp;gt;  &lt;br /&gt;     &amp;lt;CSC   &lt;br /&gt;      Sources = "@(CSFile)"  &lt;br /&gt;      References = "Microsoft.Build.Framework.dll; Microsoft.Build.Tasks.dll; Microsoft.Build.Utilities.dll"  &lt;br /&gt;      TargetType = "library"/&amp;gt;  &lt;br /&gt;   &amp;lt;/Target&amp;gt;  &lt;br /&gt;   &amp;lt;Target Name="MyTarget"&amp;gt;  &lt;br /&gt;    &amp;lt;CallTarget Targets="Compile" /&amp;gt;  &lt;br /&gt;    &amp;lt;HelloTask MyProperty="Hello!"/&amp;gt;  &lt;br /&gt;   &amp;lt;/Target&amp;gt;  &lt;br /&gt; &amp;lt;/Project&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-4762657523962341658?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/4762657523962341658/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=4762657523962341658' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/4762657523962341658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/4762657523962341658'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/02/ant-msbuild.html' title='Ant, MSBuild и расширения'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-6943543638660397654</id><published>2010-02-03T14:16:00.001+02:00</published><updated>2010-02-03T14:18:53.017+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='утилиты'/><title type='text'>Http sniffer/debugger</title><content type='html'>Для поглядеть http траффик, что зачастую нужно для отладки, к примеру, web-сервисов, встретилась фришная утилита:&lt;br /&gt;&lt;h1&gt;&lt;span style="font-size: small; font-weight: normal;"&gt;Fiddler&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: normal;"&gt; -&lt;a href="http://www.blogger.com/%20http://www.fiddler2.com/fiddler2/"&gt; http://www.fiddler2.com/fiddler2/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: normal;"&gt;Все что встречалось раньше - платное было.&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-6943543638660397654?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/6943543638660397654/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=6943543638660397654' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6943543638660397654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6943543638660397654'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/02/http-snifferdebugger.html' title='Http sniffer/debugger'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-1164889417656455797</id><published>2010-02-02T17:00:00.001+02:00</published><updated>2010-02-03T14:17:03.236+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bat'/><category scheme='http://www.blogger.com/atom/ns#' term='утилиты'/><title type='text'>Командный файл в экзешник</title><content type='html'>Иногда возникает необходимость сделать простенький экзешник, без особых усилий.&lt;br /&gt;&lt;br /&gt;К примеру - файл-алиас для авторана на компакт диске. Просто батник, с показом консоли и проблемой иконки не очень изящен, писать что-то отдельно - из пушки по воробьям.&lt;br /&gt;&lt;br /&gt;Удобная штука оказалась &lt;a href="http://www.f2ko.de/"&gt;Bat To Exe Converter&lt;/a&gt;, прямо в онлайн можно из батника сгенерить экзешник.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-1164889417656455797?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/1164889417656455797/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=1164889417656455797' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1164889417656455797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1164889417656455797'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2010/02/blog-post.html' title='Командный файл в экзешник'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8381124303501283871</id><published>2009-11-24T22:03:00.005+02:00</published><updated>2010-01-17T22:54:21.570+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Ошибки и правила оценки программных проектов</title><content type='html'>Давно хотел поделиться отзывом о замечательной книге С. Макконнелла "Сколько стоит программный проект". В общем может показаться несколько занудной, но с кучей практических советов и рекомендация по оценке, с примерами типовых проблем и ошибок, с которыми мы с вами сталкиваемся каждый день.&lt;br /&gt;&lt;br /&gt;На мой взгляд обязательная к прочтений для разработчиков, начинающих руководителей программных проектов.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ozon.ru/context/detail/id/3115179/"&gt;http://www.ozon.ru/context/detail/id/3115179/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Но кому лень искать, покупать или читать - на Хабре встретился кратенький пост, с пересказом - &lt;a href="http://habrahabr.ru/blogs/pm/75903/"&gt;http://habrahabr.ru/blogs/pm/75903/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD&lt;/b&gt;&lt;br /&gt;Встретилось еще близкое к теме - &lt;a href="http://www.happy-pm.com/blog/?p=2403"&gt;“Статистические ошибки планирования”.&lt;/a&gt; Очень интересное выступление, с примерами, "на пальцах".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8381124303501283871?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8381124303501283871/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8381124303501283871' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8381124303501283871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8381124303501283871'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/11/blog-post_24.html' title='Ошибки и правила оценки программных проектов'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-5407351189774579391</id><published>2009-11-18T22:27:00.006+02:00</published><updated>2009-11-18T22:45:58.637+02:00</updated><title type='text'>Как нужно делать выступления</title><content type='html'>Хочу порекомендовать один из лучших примеров выступлений/презентаций, какие я когда-либо видел. Без относительно того, что в самом выступлении куча интересных вещей. &lt;br /&gt;&lt;br /&gt;Стянуто у &lt;a href="http://soldatenko.livejournal.com/74040.html"&gt;http://soldatenko.livejournal.com/74040.html&lt;/a&gt;&lt;br /&gt;Перевод (удобно открыть в отдельном окне и туда подглядывать) - &lt;a href="http://www.subguru.ru/2008/01/blog-post_01.html"&gt;http://www.subguru.ru/2008/01/blog-post_01.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;embed id=VideoPlayback src=http://video.google.com/googleplayer.swf?docid=-3755718939216161559&amp;hl=en&amp;fs=true style=width:400px;height:326px allowFullScreen=true allowScriptAccess=always type=application/x-shockwave-flash&gt; &lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Кусочки:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Не бойся поляризовать людей (polarize people). Классные продукты поляризуют людей. Если вы попытаетесь создать продукт, который понравится  всем группам клиентов – от 18 до 25, от 25 до 35, от 35 до 50, от 50 до 75, от 75 до смерти – если вы попытаетесь создать такой продукт, получится посредственность.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Большинство предпринимателей верит в то, что им в первую очередь нужно работать на уровне топ-менеджмента.  «Мне нужно говорить с исполнительными директорами, директорами по развитию, президентами и председателями компаний (CIO, CTO, CMO или CEO)». За время своей карьеры я понял, что чем выше ты поднимаешься в большой организации, тем разреженнее воздух. А чем разреженнее воздух, тем меньше он дает возможности для поддержания разумной жизни. &lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Третий важный момент  - найти соратников.  Концепцию «предпринимателя-одиночки» сильно переоценивают, она неверна. У Стива Джобса был Стив Возняк. У Билла Гейтса – Стив Балмер. Вам нужны соратники – люди, которые будут вас дополнять. Если ты великий инженер, тебе потребуется великий специалист по маркетингу. Если ты совмещаешь в себе то и другое, тебе нужен будет операционный менеджер.  Если ты гениальный провидец – тебе понадобится присмотр кого-нибудь взрослого.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;...правило 10/20/30. В вашей презентации должно быть 10 слайдов.... И эти десять слайдов вы должны представить за 20 минут. ... И самый маленький размер шрифта, который вы можете использовать в презентации – 30.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-5407351189774579391?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/5407351189774579391/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=5407351189774579391' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5407351189774579391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5407351189774579391'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/11/blog-post.html' title='Как нужно делать выступления'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8284412442808745395</id><published>2009-10-15T10:00:00.002+03:00</published><updated>2009-10-15T10:10:38.461+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><title type='text'>Риски использования распределенных систем управления версиями</title><content type='html'>Недавно, на одном вебинаре, столкнулся с тем, что люди даже не слышали, о &lt;a href="http://en.wikipedia.org/wiki/Git_%28software%29"&gt;git&lt;/a&gt;. Для меня это показалось зело странным и в обсуждении я очень рьяно стал рассказывать о преимуществах последнего, чем вызвал закономерный вопрос - а в чем недостатки?&lt;br /&gt;&lt;br /&gt;Из недостатков, видевшихся мне перед нашим переходом на него основным была возможность организованного хаоса, когда все начнут пользоваться распределенностью и лезть другу другу в репозитарии. На практике все оказалось гораздо приятнее и безопаснее - работаем как и раньше, с центральным репозитарием, но "ветвимся" малой кровью и имеем всю историю локально, намного меньше завися от внешнего центрального репозитария, в периоды отсутствия связи.&lt;br /&gt;&lt;br /&gt;Встретилось вот еще пара интересных статей на эту тему:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lib.custis.ru/index.php/The_Risks_of_Distributed_Version_Control" title="The Risks of Distributed Version Control"&gt;Риски распределенного контроля версий&lt;/a&gt;&lt;br /&gt;&lt;a href="http://lib.custis.ru/index.php/Version_Control_and_%E2%80%9Cthe_80%25%E2%80%9D"&gt;Контроль версий и «правило 80 процентов»&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Вкратце: с централизованной системой, людей принуждают взаимодействовать и просматривать работу друг друга; с децентрализованной системой, поведение по умолчанию состоит в скрытом ветвлении проекта каждым разработчиком. &lt;/p&gt;&lt;p&gt;Необходимо будет прилагать специальные усилия для обмена кода  и самоорганизации в некоторую командную структуру. &lt;/p&gt;&lt;p&gt;Да, я знаю, что DVCS может имитировать работу централизованной системы; но поведение по-умолчанию имеет значение. &lt;/p&gt;&lt;p&gt;А поведение по-умолчанию — «ветвить», а не сотрудничать! &lt;/p&gt;&lt;p&gt;Это поощряет людей забираться в пещеры и кодить там объемные доработки, а затем «сбрасывать» эти «кодовые бомбы» на своих товарищей,  причем до момента «сброса» код не может быть кем-либо проверен. &lt;/p&gt;&lt;p&gt;Да, правильные практики возможны с DVCS, но они не поощряются, что  заставляет меня беспокоиться о будущем разработки с открытым исходным кодом...&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8284412442808745395?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8284412442808745395/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8284412442808745395' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8284412442808745395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8284412442808745395'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/10/blog-post.html' title='Риски использования распределенных систем управления версиями'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-5674647339705631095</id><published>2009-10-05T10:59:00.004+03:00</published><updated>2009-10-20T17:15:54.119+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Про новую архитектуру Firebird - SuperClassic</title><content type='html'>Несколько раз с коллегами начинали разговоры о ней, и каждый раз удивлялись зачем она нужна. В качестве памятки &lt;a href="http://sourceforge.net/mailarchive/message.php?msg_id=3d3c4b7e0805071239l3b19e441hd074ca1238ff8046%40mail.gmail.com"&gt;кусочек обсуждения в fb-devel&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SuperServer:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;один процесс ОС на все соединения/базы&lt;/li&gt;&lt;li&gt;общий кеш страниц для всех баз&lt;/li&gt;&lt;li&gt; централизованный(central) менеджер блокировок &lt;/li&gt;&lt;li&gt; блокировки работают на базы, а не соединения - т.е. все операции с базой выстраиваются в одну очередь.&lt;/li&gt;&lt;li&gt; для версии &lt;&gt;&lt;li&gt; не поддерживает многопроцессорность, т.к. ОС не может распаралелить один процесс по нескольким процессорам&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Classic:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; отдельный процесс на каждое соединение с БД&lt;/li&gt;&lt;li&gt; отдельный кеш страниц на каждое соединение&lt;/li&gt;&lt;li&gt; внешний менеджер блокировок(в 2.5. он уже внутренний)&lt;/li&gt;&lt;li&gt; хорошая поддержка многопроцессорности&lt;br /&gt;&lt;/li&gt;&lt;li&gt; накладывает некоторые ограничения в следствие ресурсоемкости процессов, в сравнении с потоками &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;SuperClassic:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; один процесс на все соединения (в перспективе - отдельный процесс на каждую базу)&lt;/li&gt;&lt;li&gt; используется пул потоков ОС для обработки запросов от соединений - т.о. каждое соединение работает в отдельном потоке управляемом ОС, а неактивные соединения не отъедают ресурсы потоков&lt;/li&gt;&lt;li&gt; централизованный менеджер блокировок, который может обрабатывать как внутренние, так и внешние обращения(одна и таже база может быть доступна как посредством СУБД из процесса А, так и через FB Embeded из процессов B, C и т.д.)&lt;/li&gt;&lt;li&gt; теоретически этот менеджер блокировок позволяет организовывать кластеризацию используя готовые распределенные движки блокировок&lt;/li&gt;&lt;li&gt; кеш страниц на соединение &lt;/li&gt;&lt;li&gt; хорошая поддержка многпроцессорности, т.к. потоки ОС легко распараллеливаются&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;В &lt;span style="font-weight: bold;"&gt;v3.0&lt;/span&gt; планируются такие доработки:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; общий кеш страниц на уровне базы&lt;/li&gt;&lt;li&gt; кеш подготовленных запросов&lt;/li&gt;&lt;li&gt; общий кеш метаданных&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Как итог - SuperClassic это промежуточный шаг(насколько я понял изначально родившийся в RedSoft) к следующей основной архитектуре FB, появившийся в следствии крупного рефакторинга внутренностей движка.&lt;br /&gt;&lt;br /&gt;Пока для пользователей практический выигрыш лишь в экономии на процессах и, как следствие, чуть более быстрой синхронизации. Хотя если верить документации, то совокупный выигрыш - до 15-20% на TPC-С тестах в сравнении с классиком.&lt;br /&gt;&lt;br /&gt;Подробнее можно посмотреть в &lt;a href="http://firebirdsql.org/rlsnotesh/rlsnotes25.html#rnfb25-engine"&gt;Firebird 2.5 Release Notes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;UPD: Презентация от Дмитрия Еманова - &lt;a href="http://www.slideshare.net/ibsurgeon/firebird-25-architecture-by-dmitry-yemanov-in-english"&gt;Firebird 2.5 Architecture&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-5674647339705631095?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/5674647339705631095/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=5674647339705631095' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5674647339705631095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5674647339705631095'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/10/firebird-superclassic.html' title='Про новую архитектуру Firebird - SuperClassic'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3159122970501362445</id><published>2009-09-25T16:29:00.005+03:00</published><updated>2009-10-07T20:52:53.863+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Динамически загружаемые bpl , их выгрузка и интерфейсы</title><content type='html'>Очевидная, но съевшая кучу времени ошибка.&lt;br /&gt;&lt;br /&gt;Если в проекте используются динамически загружаемые/выгружаемые bpl, следует помнить, что при выгрузке информации о классах, реализованных в этих bpl в памяти не остается.&lt;br /&gt;&lt;br /&gt;Предположим есть некий список, в котором регистрируются _интерфейсы_, имплиментирующие классы которых реализованы в динамически загружаемых bpl(к примеру в плагинах). Сам список живет в базовом приложении, которое и загружает эти пакеты.&lt;br /&gt;&lt;br /&gt;Если оставить разрушение этих объектов на совести основного кода, что при использовании интерфейсов довольно очевидно, но делать это _после_ выгрузки bpl с кодом класса реализующего интерфейс, например в секции  finalization, - будем получать маловразумительные AV.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3159122970501362445?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3159122970501362445/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3159122970501362445' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3159122970501362445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3159122970501362445'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/09/bpl.html' title='Динамически загружаемые bpl , их выгрузка и интерфейсы'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8019515751830420410</id><published>2009-09-25T13:18:00.002+03:00</published><updated>2009-09-25T13:33:32.138+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Интерфейсы должны быть интерфейсами!</title><content type='html'>Встретился интересный баг связанные с тем, что смешивается интерфейс и обычный объект. Вернее интерфейс кастрируется до некого альтернативного указателя на экземпляр объекта, без использования замечательного механизма подсчета ссылок.&lt;br /&gt;&lt;br /&gt;Есть объект, унаследованный от TComponent и поддерживающий какой-то интерфейс. Временем жизни этого объекта управляет некая фабрика, честно убивающая его при закрытии приложения вручную, как обычный объект - т.е. посредством вызова Free.&lt;br /&gt;&lt;br /&gt;А в совершенно другой части приложения есть ссылка на этот объект, но в виде глобальной переменной модуля. Некрасиво, но пока приложение живет проблем нет.&lt;br /&gt;&lt;br /&gt;А при завершении работы - фабрика все честно чистит и умирает сама, выполняется весь пользовательский код. И начинают финализироваться модули, обнуляя интерфейсы и соотв. дергая TComponent._Release у давно умершего объекта...&lt;br /&gt;&lt;br /&gt;Обнаружить сию неприятность удалось только благодаря FastMM, который заполняет память под разрушенными объектами по специфическому шаблону:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:100%;"&gt;Q: My program used to work fine, but if I enable "FullDebugMode" and run it I get an access violation at address $8080xxxx. Why?&lt;br /&gt;A: You are attempting to access properties of a freed object. When you free a block in "FullDebugMode", FastMM fills the freed memory area with a pattern of $80 bytes. If there were any pointers, long strings or object references inside the freed object they will now point to $80808080 which is in a reserved address space.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8019515751830420410?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8019515751830420410/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8019515751830420410' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8019515751830420410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8019515751830420410'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/09/blog-post.html' title='Интерфейсы должны быть интерфейсами!'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3056223789419468759</id><published>2009-09-15T22:22:00.003+03:00</published><updated>2009-09-15T22:39:26.328+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Все плохое в FB от Windows :)</title><content type='html'>Проглядывая &lt;a href="http://www.slideshare.net/ibsurgeon/firebird-security-in-english-the-past-and-the-future"&gt;презентацию&lt;/a&gt; Алексея Пешкова о прошлом, настоящем и будущем безопасности в Firebird наткнулся на интересную информацию:&lt;br /&gt;&lt;br /&gt;Тот громкий "зашитый" пароль politically/correct был введен для коннекта сервером к своей базе паролей, которая в свою очередь была введена для порта сервера на .... Win3.X в 92-93г., у которой в то время не было свой подсистемы пользователей.&lt;br /&gt;&lt;br /&gt;Как любит говорить один мой друг, коммерческий дух win-платформы пересилил здравый смысл :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3056223789419468759?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3056223789419468759/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3056223789419468759' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3056223789419468759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3056223789419468759'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/09/fb-windows.html' title='Все плохое в FB от Windows :)'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-4277113421010073779</id><published>2009-09-14T15:24:00.002+03:00</published><updated>2009-09-14T15:35:18.835+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Firebird и база на SSD диске</title><content type='html'>&lt;div&gt;Встретилось в &lt;a href="http://sourceforge.net/mailarchive/forum.php?forum_name=firebird-devel"&gt;fb-devel&lt;/a&gt; интересное сообщение, о переходе на SSD диск. Если кратко - то значительно увеличилась производительность при большой загрузке дисковой подсистемы, когда основное время тратится на позиционирование головок диска при большом потоке конкурентных обращений.&lt;br /&gt;&lt;br /&gt;"Если на обычном 5-то рейде в таких ситуация(более 1000 коннектов) ответ ждали до минуты, то в ssd это время оставалось константным, порядка 4сек."&lt;br /&gt;&lt;br /&gt;Естественно не для всяких систем это будет верно, но все же...&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Hi Pays,&lt;br /&gt;&lt;br /&gt;I can't give you exact figures, but we switched&lt;br /&gt;&lt;br /&gt;from&lt;br /&gt;HP 585 4 processor AMD Opteron 850/16GB with raid5 HP SCSI Ultra320 15krpm 8&lt;br /&gt;disk array for the DB&lt;br /&gt;&lt;br /&gt;to&lt;br /&gt;HP 385 2 x quad core AMD Opteron 2384 and an FusionIO IODrive, an 80GB SSD&lt;br /&gt;formatted as 40GB so it can continously prepare the remaining 40GB for write&lt;br /&gt;operations which gives it a performance advantage.&lt;br /&gt;&lt;br /&gt;The performance gain was noticable. We are btw running FB2.1 classic, AMD 2&lt;br /&gt;x quad core/20GB ram. A "big" query taking around 8 seconds on the SCSI took&lt;br /&gt;only 4 seconds on the FusionIO. Thus the pure performance gain was just&lt;br /&gt;around 2 times faster. It was a query primarily putting load on the disks,&lt;br /&gt;not the CPU, so I guess the new and better server hardware didn't influence&lt;br /&gt;the result too much.&lt;br /&gt;&lt;br /&gt;But the really interesting part comes under higher load! As there is no&lt;br /&gt;latency in positioning the heads on a SSD, it really doesn't seem to care&lt;br /&gt;about number of connections (at least not in our case). So where the SCSI&lt;br /&gt;raid dramatically dropped performance and went to around one minute for the&lt;br /&gt;above query during heavy load (&gt;1000 connections), the SSD still answered in&lt;br /&gt;4 seconds. That makes all the difference to us - and not least our users :)&lt;br /&gt;&lt;br /&gt;I hope you can use the above informations in your research. Only&lt;br /&gt;disadvantage for the IODrive, at least for now, is that it isn't mounted&lt;br /&gt;until the server loads the drivers for it. So you can't really boot from it.&lt;br /&gt;&lt;br /&gt;Kind regards&lt;br /&gt;&lt;br /&gt;Poul Dige&lt;br /&gt;Tabulex&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-4277113421010073779?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/4277113421010073779/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=4277113421010073779' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/4277113421010073779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/4277113421010073779'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/09/firebird-ssd.html' title='Firebird и база на SSD диске'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-2379311468072302966</id><published>2009-09-08T11:53:00.004+03:00</published><updated>2009-09-08T13:00:40.628+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Vista и перенаправление(виртуализация) файловой системы</title><content type='html'>Когда-то, читая замечательный блог &lt;a href="http://blog.not-a-kernel-guy.com/"&gt;Not a kernel guy&lt;/a&gt;, встретил у него описание, как 64-х битные версии новых Windows умеют перенаправлять обращения к реестру и файловой системе.&lt;br /&gt;&lt;br /&gt;Почитал, удивился и забыл - в тех системах, которые приходилось писать самому или делалось все так, как хочет Майкрософт(пишем только в профиль пользователя), или намеренно указывалась необходимость иметь права на запись в каталог инсталяции для упрощения системы обновлений.&lt;br /&gt;&lt;br /&gt;Но впоследнем проекте получилось сполна опробовать красоту решения от MS - пока у пользователя включен UAC, все обращения на запись в ProgramFiles перенаправляются в профиль пользователя(в нашем случае копировалась 400Мб база, лежащая "под" приложением). Казалось бы, сами себе злобные буратины, что не выполняем рекомендации MS. Но раз уж не выполняем, то МС само заботится о нас и на первый взгляд все ок.&lt;br /&gt;&lt;br /&gt;До тех пор, пока пользователь, как это принято, не отключает этот  UAC к чертовой матери, и оказывается перед девственно чистой БД :)&lt;br /&gt;&lt;br /&gt;Одним из способов решения - создание манифеста, в котором указать необходимый приложению объем прав. Хотя и там, с кешированием этих манифестов и прав весело - единожды запустив приложение информация о необходимых ему правах где-то сохраняется, и как ее сбросить я пока не нашел.&lt;br /&gt;&lt;br /&gt;Про UAC - &lt;a href="http://msdn.microsoft.com/en-us/library/bb756960.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb756960.aspx&lt;/a&gt;&lt;br /&gt;Про манифест - &lt;a href="http://msdn.microsoft.com/en-us/library/bb756929.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb756929.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-2379311468072302966?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/2379311468072302966/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=2379311468072302966' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2379311468072302966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2379311468072302966'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/09/vista.html' title='Vista и перенаправление(виртуализация) файловой системы'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3896009234610538842</id><published>2009-07-14T17:11:00.002+03:00</published><updated>2009-07-14T17:15:29.337+03:00</updated><title type='text'>Эмуляция сети с высокой латентностью</title><content type='html'>Когда-то нужно было для тестов:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;It simulate network latency in Linux using &lt;a title="Netem" href="http://www.linuxfoundation.org/en/Net:Netem" id="bc1w"&gt;Netem&lt;/a&gt;. With the &lt;i&gt;tc&lt;/i&gt; utility, we can add a delay for outbound traffic. Since I did it for &lt;i&gt;lo&lt;/i&gt; interface, it happens that it works for in/out traffic. I set delay to 100ms (that is more or less a value I found doing it in the internet with my horrible Telefonica &lt;strike&gt;speed&lt;/strike&gt;y connection), using this command:&lt;br /&gt;&lt;b&gt;$ sudo tc qdisc add dev lo root handle 1:0 netem delay 100ms&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;To later remove the delay, the command is:&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: Courier New;"&gt;$ sudo tc qdisc del dev lo root&lt;br /&gt;&lt;br /&gt;&lt;a href="http://asfernandes.blogspot.com/2009/07/network-latency-influence-on-firebird.html"&gt;Источник&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;b&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3896009234610538842?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3896009234610538842/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3896009234610538842' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3896009234610538842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3896009234610538842'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/07/blog-post.html' title='Эмуляция сети с высокой латентностью'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-42709685247055788</id><published>2009-05-19T17:45:00.004+03:00</published><updated>2009-10-07T20:46:55.883+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Мысли о роли ТЗ в программном проекте</title><content type='html'>Так, когда-то написал, отходя от проекта, в котором вовлеченности непосредственного заказчика по сути не было&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Основная задача ТЗ в программном проекте - не фиксация объема работ, не защита от переработки, не инструмент "заморозки" требований. Нет, это просто возможность заказчику(пусть зачастую и при помощи разработчиков) подумать над тем, что он вообще хочет.&lt;br /&gt;&lt;br /&gt;Можно конечно сделать проект "самостоятельно" и сдавать его итеративно, но, как показывает практика, в этом случае думать над ним заказчик начнет как раз в момент сдачи. И запросто окажется, что "когда я говорил мне нужен дом - я имел ввиду вышку аэропорта".&lt;br /&gt;&lt;br /&gt;Другими словами ТЗ - это "рыба" проекта, которую можно делать сразу, просто и очень дешево менять. А письменный он должен быть потому, что иначе мозг может и не включиться. П%;:ть, как грится, не мешки ворочать.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;PS термин "техническое задание" спорный, но выбран как самый простой, для обобщения&lt;br /&gt;&lt;br /&gt;PPS да, agile конечно штука, но не каждый заказчик готов по нему работать&lt;br /&gt;&lt;br /&gt;UPD: мысль оказалась &lt;a href="http://www.joelonsoftware.com/articles/fog0000000036.html"&gt;далеко не новой&lt;/a&gt; - Джоэль о том же пишет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-42709685247055788?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/42709685247055788/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=42709685247055788' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/42709685247055788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/42709685247055788'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/05/blog-post.html' title='Мысли о роли ТЗ в программном проекте'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8314350389427016287</id><published>2009-03-19T21:43:00.002+02:00</published><updated>2009-03-19T22:02:14.493+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Указатель на метод интерфейса</title><content type='html'>Понадобилось на днях коллегам передать в качестве callback-функции метод объекта, доступ к которому есть только через интерфейс. Показалось, что проблемы особой нет - интерфейс "знает" о своем объекте, осталось вычислить адрес объекта да самого метода.&lt;br /&gt;&lt;br /&gt;Но реальность оказалась не столь оптимистичной - на текущий момент Delphi такого функционала не поддерживает:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://groups.google.com.ua/group/borland.public.delphi.objectpascal/browse_thread/thread/4c5dcb094b82522f?pli=1&lt;/li&gt;&lt;li&gt;http://qc.embarcadero.com/wc/qcmain.aspx?d=941 (а судя по датам и не будет поддерживать)&lt;/li&gt;&lt;/ul&gt;Самому раньше в таком функционале необходимости не было - проще передавать весь интерфейс, но если необходимо взаимодействие  с чужим кодом, где могут требовать именно указатель на функцию, то прийдется изобретать не очень стройные решения:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;метод в интерфейсе напрямую возвращающий адрес метода объекта&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;IAnIntf = interface&lt;br /&gt; function GetPointerToProc: TAnObjectProc:&lt;br /&gt;end&lt;br /&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;объект-обертку над интерфейсом&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;TWrapObj = class&lt;br /&gt;private&lt;br /&gt; AnIntf: ITheIntf;&lt;br /&gt;protected&lt;br /&gt; procedure AnProc(const Value: string);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TWrapObj.AnProc(const Value: string);&lt;br /&gt;begin&lt;br /&gt; AnIntf.AnProc(Value);&lt;br /&gt;end;&lt;br /&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;strike&gt;возможно как-то можно будет выкрутиться через анонимные функции?&lt;/strike&gt; нельзя, ибо&lt;br /&gt; &lt;blockquote&gt;TAnProc = procedure (S: string) of object;&lt;br /&gt; TAnProc2 = reference to procedure (S: string);&lt;/blockquote&gt;это разные типы&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Хотя и в реализации проблем более чем - вычислять статический адрес, на этапе компиляции, для такого указателя не получится, т.к. один и тот же интерфейс может реализовываться разными объектами.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&gt; Still I think making (procedure of object) and (procedure of Interface) equivalent&lt;br /&gt;&gt; typeswould be the better solution.&lt;br /&gt;&lt;br /&gt;Like I said, the semantics for the compiler would be quite different, so&lt;br /&gt;it would make sense to make them different types (even if both&lt;br /&gt;represented internally by a TMethod). Actually, if the interface&lt;br /&gt;instance variable is nil, it is impossible to get the method address.&lt;br /&gt;This is not a problem for objects, since there the static address is&lt;br /&gt;taken. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8314350389427016287?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8314350389427016287/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8314350389427016287' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8314350389427016287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8314350389427016287'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/03/blog-post.html' title='Указатель на метод интерфейса'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-5211764996941035626</id><published>2009-02-06T12:23:00.002+02:00</published><updated>2009-02-06T12:31:33.484+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Создание индексов "на ходу" в Firebird</title><content type='html'>&gt;&gt; А вот с индексами как? Как насчет CREATE INDEX "на ходу"? Да еще и на &lt;br /&gt;&gt;&gt; таблицу, с которой постоянная работа на UPDATE идет?&lt;br /&gt;&gt; &lt;br /&gt;&gt; Если 2.0 и старее, то получишь рассинхронизированный с таблицей индекс. &lt;br /&gt;&gt; Если 2.1 и новее, то все апдейты будут курить, пока индекс не будет создан.&lt;br /&gt; &lt;br /&gt; - DDL тр-ция должна быть wait. Иначе - создание индекса обломится с большой вероятностью.&lt;br /&gt; - Отпрепарированные запросы не увидят новый индекс. Это и процедур, и триггеров касается. &lt;br /&gt;&lt;br /&gt;&gt; и создание индексов, и ALITER INDEX INACTIVE делал на ходу...&lt;br /&gt;&gt; и что требуется теперь сделать, что бы за БД не переживать?&lt;br /&gt; &lt;br /&gt;    gfix -v -f&lt;br /&gt; &lt;br /&gt;(с) Dmitry Yemanov, Хорсун Влад&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-5211764996941035626?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/5211764996941035626/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=5211764996941035626' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5211764996941035626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5211764996941035626'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/02/firebird.html' title='Создание индексов &quot;на ходу&quot; в Firebird'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-4679938253485116912</id><published>2009-01-09T21:20:00.002+02:00</published><updated>2009-01-09T21:37:11.340+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='d2009'/><title type='text'>Borland, умолчания и поддержка старого</title><content type='html'>Компания меняет не только названия, но и простым разработчикам не дает скучать.&lt;br /&gt;Вводная - при неизменных внешних условиях перестала выполняться сборка релиза из командной строки при переходе с 2007 на 2009 - упорно попадал туда код дебага. В то время как из среды - все ок.&lt;br /&gt;&lt;br /&gt;Проведенное в два этапа(первый был еще на 2007 и текущей проблемы не касался см.) расследование показало, что:&lt;br /&gt;&lt;br /&gt; - в импортируемом проектами файле CodeGear.Delphi.Targets дефолтный таргет изменен с Build на Make. А последний при смене конфигурации Debug|Release не пересобирает dcu&lt;br /&gt;&lt;br /&gt; - группы проектов, в отличии от проектов, не обновляются до соотв. версии и импортируют $(MSBuildBinPath)\Borland.Group.Targets, который существует только при инсталяции 2007(или когда там msbuild прикрутили?)&lt;br /&gt;&lt;br /&gt; - таргет Build для группы проектов не задает таргет для конечных проектов(т.е. используется умолчательный, который теперь Make, да)&lt;br /&gt;&lt;br /&gt;Выходом может быть использование таргета BuildAll для группы проектов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-4679938253485116912?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/4679938253485116912/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=4679938253485116912' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/4679938253485116912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/4679938253485116912'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/01/borland.html' title='Borland, умолчания и поддержка старого'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3045068898149670314</id><published>2009-01-09T13:45:00.005+02:00</published><updated>2009-09-29T11:59:39.728+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='d2009'/><title type='text'>Delphi 2009 и приведение к PAnsiString</title><content type='html'>Часть winapi функций требуют передачи себе в кач-ве параметров структур с PAnsiChar строками (например mapi). В предыдущих версиях приведение строк посредством PChar(SomeString) работало, используя область памяти выделенную под SomeString, а в 2009 результат PAnsiString(AnsiString(SomeString)), уже как вычисление обычной строки из юникодной, размещается в локальной области памяти, что чревато тем, что старый код может перестать работать на, казалось бы, ровном месте (хотя конечно прямое приведение к pchar тоже имеет кучу особенностей).&lt;br /&gt;&lt;br /&gt;Например код приведенный ниже возвращает разные результаты на 2007 и 2009 Делфи&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="delphi"&gt;program array_error_test;&lt;br /&gt;&lt;br /&gt;{$APPTYPE CONSOLE}&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt; SysUtils,&lt;br /&gt; StrUtils,&lt;br /&gt; Classes;&lt;br /&gt;&lt;br /&gt;procedure DoMain;&lt;br /&gt;const&lt;br /&gt; Count = 5;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt; RecType = record&lt;br /&gt;   AnString: PAnsiChar;&lt;br /&gt; end;&lt;br /&gt;var&lt;br /&gt; RecArr: array of RecType;&lt;br /&gt; I: Integer;&lt;br /&gt; SomeStrings: TStringList;&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt; SetLength(RecArr, Count);&lt;br /&gt;&lt;br /&gt; SomeStrings := TStringList.Create;&lt;br /&gt; try&lt;br /&gt;   for I := 0 to Length(RecArr) - 1 do&lt;br /&gt;   begin&lt;br /&gt;     SomeStrings.Add(DupeString(IntToStr(I), 10));&lt;br /&gt;     RecArr[I].AnString := PAnsiChar(AnsiString(SomeStrings[I]));&lt;br /&gt;   end;&lt;br /&gt;&lt;br /&gt;   for I := 0 to Length(RecArr) - 1 do&lt;br /&gt;     WriteLn(RecArr[I].AnString);&lt;br /&gt; finally&lt;br /&gt;   SomeStrings.Free;&lt;br /&gt; end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt; DoMain;&lt;br /&gt; ReadLn;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3045068898149670314?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3045068898149670314/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3045068898149670314' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3045068898149670314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3045068898149670314'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/01/delphi-2009-pansistring.html' title='Delphi 2009 и приведение к PAnsiString'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8605451165370419647</id><published>2009-01-08T16:01:00.005+02:00</published><updated>2009-01-08T16:09:19.278+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='d2009'/><title type='text'>Delphi 2009 и InternetQueryOption</title><content type='html'>Переносится в одном из проектов код на 2009 Делфи и соотвественно кушаются все прелести первопроходчества.&lt;br /&gt;&lt;br /&gt;Для получения адреса прокси сервера пользовалась функция InternetQueryOption. После сборки в 2009 стала она возвращать мусор. Ничего криминального замечено не было, замена на InternetQueryOptionW не помогала.&lt;br /&gt;&lt;br /&gt;Решение нашлось в&lt;br /&gt;http://akirabbq.spaces.live.com/blog/cns!CEB8A04DC43BCEE9!264.entry&lt;br /&gt;кто виноват не совсем понятно, но неприятно :(&lt;br /&gt;&lt;br /&gt;По сути - в структуре INTERNET_PROXY_INFO lpszProxy должно быть не LPCTSTR(которое в 2009 уже PWideChar), а просто LPCSTR, хотя в исходных сишных заголовках она объявлена как LPCTSTR.&lt;br /&gt;&lt;br /&gt;Решить проблему можно создав необходимую структуру у себя.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8605451165370419647?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8605451165370419647/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8605451165370419647' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8605451165370419647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8605451165370419647'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2009/01/delphi-2009-internetqueryoption.html' title='Delphi 2009 и InternetQueryOption'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8432929990522676357</id><published>2008-09-12T09:53:00.002+03:00</published><updated>2008-09-12T10:00:14.352+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Оптимизатор в Firebird 2.1</title><content type='html'>Прошло одно изменение без особого внимания, но оно может очень влиять на производительность при переходе со старых версий. В композитных индексах теперь считается селективность для каждого сегмента отдельно, что по логике правильнее, но в редких случая может менять порядок таблиц в соединении кардинально:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Selectivity Maintenance per Segment&lt;br /&gt;D. Yemanov, A. Brinkman&lt;br /&gt;Index selectivities are now stored on a per-segment basis. This means that, for a compound index on columns&lt;br /&gt;(A, B, C), three selectivity values will be calculated, reflecting a full index match as well as all partial matches.&lt;br /&gt;That is to say, the selectivity of the multi-segment index involves those of segment A alone (as it would be if it&lt;br /&gt;were a single-segment index), segments A and B combined (as it would be if it were a double-segment index)&lt;br /&gt;and the full three-segment match (A, B, C), i.e., all the ways a compound index can be used.&lt;br /&gt;This opens more opportunities to the optimizer for clever access path decisions in cases involving partial index&lt;br /&gt;matches.&lt;br /&gt;The per-segment selectivity values are stored in the column RDB$STATISTICS of table RDB&lt;br /&gt;$INDEX_SEGMENTS. The column of the same name in RDB$INDICES is kept for compatibility and still&lt;br /&gt;represents the total index selectivity, that is used for a full index match.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;и если была таблица documents(...doc_state int, doc_date ... ) c индексом по (doc_state, doc_date), то теперь, при условиях по doc_state, будет браться селективность не всего композита(а она могла из-за даты быть достаточно неплохой), а только поля doc_state.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8432929990522676357?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8432929990522676357/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8432929990522676357' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8432929990522676357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8432929990522676357'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2008/09/firebird-21.html' title='Оптимизатор в Firebird 2.1'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3609013113639816997</id><published>2008-09-04T10:18:00.009+03:00</published><updated>2009-09-14T11:04:38.350+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Microsoft runtime и Firebird Embeded 2.1.1</title><content type='html'>Для возможности x64 билдов разработчики Firebird перешли на vc8, что потянуло за собой, в принципе уже привычную, проблему распространения vc runtime.&lt;br /&gt;&lt;br /&gt;Но учитывая теперешний зоопарк ОС, технологий совместимости 32/64, попыток решения dll хелл, и вообще постижения Дао от МС, деплоймент этого runtime становится очень непростым.&lt;br /&gt;&lt;br /&gt;Он, рантайм 8-ой версии, не идет, пока, в поставки никакх ОС - и Висте его тоже нет(по меньшей мере до SP).&lt;br /&gt;&lt;br /&gt;Первое - для правильной установки, как это рекомендует МС, нужны права Администратора. А для установки на win2k до SP1 - обновление инсталятора МС до 3.1&lt;br /&gt;&lt;br /&gt;Для интеграции этого redist себе в инсталятор - нужно делать msi инсталяторы, создание которых в корректном виде не самое простое занятие, для котрого хороших&lt;br /&gt;свободных инструментов вроде как и нет, и опять таки необходимы права администратора.&lt;br /&gt;&lt;br /&gt;В принципе на первый вгляд проблем быть не должно - что стоит поставить этот рантайм,&lt;br /&gt;когда разворачивается сервер СУБД. Но тем, кто пытается распространять shareware системы, особенно с FB embeded, приходится хуже - необходимо тянуть этот рантайм со своим приложением.&lt;br /&gt;&lt;br /&gt;Есть три пути его поставки:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Официальный.&lt;br /&gt;Устанавливаем инсталятором от MS и все работает. Не подходит, если нет гарантии наличия админских прав у пользователей, наличия  Windows Installer 3.0  or later, portable решения.&lt;/li&gt;&lt;li&gt;Экстенсивный.&lt;br /&gt;Поставляем со своим приложением просто необходимые бинарники рантайма. Так делает, впрочем, большинство софта - стоит только поискать msvcr80.dll по жесткому диску :)). Но, поставлять нужно ТРИ копии рантайма, одну для работы самого fbembed, вторую в каталоге intl для fbintl и третью в для подключаемых функций в каталоге udf.&lt;/li&gt;&lt;li&gt;Хитро-экстенсивный.&lt;br /&gt;Пользуясь текстовой природой манифестов, в каталогах intl и udf оставить только манифест, с измененными путями к файлам вида:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;file name="..\msvcr80.dll"&amp;gt;&lt;br /&gt;&amp;lt;file name="..\msvcp80.dll"&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;ВАЖНО, в таком случае указать в манифесте своего приложения зависимость от Microsoft.VC80.CRT.&lt;br /&gt;&lt;br /&gt;такой манифест представляет собой текстовый файл &amp;lt;FullAppName&amp;gt;.manifest с содержимым:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt; &amp;lt;dependentAssembly&amp;gt;&lt;br /&gt;   &amp;lt;assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"&amp;gt;&amp;lt;/assemblyIdentity&amp;gt;&lt;br /&gt; &amp;lt;/dependentAssembly&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;/assembly&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;Этот манифест можно включить в ресурсы самого приложения,  &lt;a href="http://delphi.about.com/library/bluc/text/uc111601a.htm"&gt;см. например&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ссылки:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft Visual C++ 2005 Redistributable Package (x86)&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ibase.ru/fb21instfaq.htm"&gt;http://www.ibase.ru/fb21instfaq.htm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://delphi.about.com/library/bluc/text/uc111601a.htm"&gt;http://delphi.about.com/library/bluc/text/uc111601a.htm&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3609013113639816997?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3609013113639816997/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3609013113639816997' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3609013113639816997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3609013113639816997'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2008/09/microsoft-runtime-firebird-embeded.html' title='Microsoft runtime и Firebird Embeded 2.1.1'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-1304910991355522573</id><published>2008-09-02T11:05:00.003+03:00</published><updated>2008-09-02T11:11:14.482+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Не используйте сlass helper's?</title><content type='html'>Не сказать, что я их когда-то использовал, но вот встретился материал:&lt;br /&gt;&lt;br /&gt;http://www.deltics.co.nz/blog/?p=282&lt;br /&gt;&lt;br /&gt;Суть в том, что если в проекте объявлено два хелпера к одному классу, то использоваться будет ТОЛЬКО один, но какой именно - не известно(зависит от порядка юнитов и т.п.).&lt;br /&gt;&lt;br /&gt;Так что можно поиметь плавающих ошибок на ровном месте...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-1304910991355522573?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/1304910991355522573/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=1304910991355522573' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1304910991355522573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1304910991355522573'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2008/09/lass-helpers.html' title='Не используйте сlass helper&apos;s?'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3032925274582734002</id><published>2008-08-13T11:54:00.001+03:00</published><updated>2008-08-13T11:56:40.428+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>Случайная запись с учетом "веса"</title><content type='html'>Встретилось вот в конференции:&lt;br /&gt;&lt;br /&gt;WildSery wrote:&lt;br /&gt;&gt; вот одно элементарное решение.&lt;br /&gt;&gt; заводим таблицу WEIGHT(weight int) и заполняем её числами от 1 до &lt;максимальный вес&gt;&lt;br /&gt;&gt; затем нужное нам "случайное с учётом веса" получаем как&lt;br /&gt;&gt; &lt;br /&gt;&gt; select first 1 t.id&lt;br /&gt;&gt;    from table1 t&lt;br /&gt;&gt;         join weight w on t.weight &gt;= w.weight&lt;br /&gt;&gt;    order by rand()&lt;br /&gt; &lt;br /&gt;Ну типа идея такова - для таблицы TABLE1, откуда нужно получить случайный ID, размножаем строки согласно "веса".&lt;br /&gt;Если "вес" равен 1 - будет 1 строка, если "вес" 10 - будет 10 строк, соответственно, вероятность, что попадётся именно этот ID, в 10 раз выше, чем для "веса" 1.&lt;br /&gt; &lt;br /&gt;-- &lt;br /&gt;Сергей Смирнов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3032925274582734002?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3032925274582734002/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3032925274582734002' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3032925274582734002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3032925274582734002'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2008/08/blog-post.html' title='Случайная запись с учетом &quot;веса&quot;'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-5266213884527711096</id><published>2008-03-19T21:11:00.003+02:00</published><updated>2008-03-19T21:16:35.004+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ror'/><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Установка activerecord-firebird-adapter через gem</title><content type='html'>Так, для общего развития решил поглядеть на RoR. И на первом же повороте споткнулся - упорно не ставился адаптер для Firebird, который в один прекрасный момент был исключен из базовой поставки :-/&lt;br /&gt;&lt;br /&gt;Часто встречающиеся рекомендации установить его успеха не принесли:&lt;br /&gt;&lt;blockquote&gt;C:\servers\rail\rails_apps\norg&gt;gem install activerecord-firebird-adapter&lt;br /&gt;ERROR:  could not find activerecord-firebird-adapter locally or in a repository&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Заработало только с каким-то хитрым ключом -s, хотя по блогам все хором утверждают что это лишнее:&lt;br /&gt;&lt;blockquote&gt;C:\servers\rail\rails_apps\norg&gt;gem install activerecord-firebird-adapter -s http://gems.rubyonrails.org&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-5266213884527711096?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/5266213884527711096/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=5266213884527711096' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5266213884527711096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5266213884527711096'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2008/03/activerecord-firebird-adapter-gem.html' title='Установка activerecord-firebird-adapter через gem'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-9050422089652746346</id><published>2008-03-18T10:53:00.004+02:00</published><updated>2008-03-18T11:05:41.132+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='интеллектульная собственность'/><title type='text'>Обход права на имя для служебных произведений</title><content type='html'>Нашел ответ на вопрос как обходится право автора на указание имени - мы ведь редко когда видим, кто разработчик проприетарного софта, верно? (хотя статья неплохая, и там еще полезное есть)&lt;br /&gt;&lt;br /&gt;"Особенности найма сотрудников, создающих объекты интеллектуальной собственности"&lt;br /&gt;http://www.osp.ru/cio/2008/01/4744776/prinver.htm&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Право на имя&lt;/span&gt;&lt;br /&gt;Существует важный вопрос, касающийся одного из неимущественных авторских прав на служебные произведения, — права на имя. С правом на имя связана ситуация, когда компания-работодатель не желает указывать имен авторов продукта (компьютерной программы, дизайна, аналитического обзора и т.п.). В этом случае в договоре принято писать, что сотрудник отказывается от своего права на имя. Но такая запись является юридически ничтожной, так как находится в явном противоречии с текущим законодательством. Дело в том, что неимущественные авторские права неотторжимы, и от них, вообще говоря, невозможно отказаться. Соответственно, описанный подход не позволяет решить проблему обязательного указывания имен авторов продукта. Тем не менее, задача вполне разрешима — требуется лишь указать в договоре, что сотрудник пользуется своим правом на анонимность, просит не указывать его имени и передает компании-работодателю полномочия по защите остальных его неимущественных прав. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-9050422089652746346?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/9050422089652746346/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=9050422089652746346' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/9050422089652746346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/9050422089652746346'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2008/03/blog-post.html' title='Обход права на имя для служебных произведений'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3489398242909448649</id><published>2008-02-09T17:01:00.000+02:00</published><updated>2008-02-09T17:04:44.571+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><title type='text'>Firefox, орфография и погибающая ё</title><content type='html'>Свежепоставленный лис все слова, в которых вместо законной, но редкоиспользуемой ё используется е помечал как ошибочные, требуя канонического написания. Сколько-то это терпелось, но когда пришлось активно работать с Доксами гугловскими терпению пришел конец. Решение нашлось в виде альтернативного словаря.&lt;br /&gt;http://forum.mozilla-russia.org/viewtopic.php?id=15316&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3489398242909448649?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3489398242909448649/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3489398242909448649' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3489398242909448649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3489398242909448649'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2008/02/firefox.html' title='Firefox, орфография и погибающая ё'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-6872377566059244271</id><published>2008-01-17T15:48:00.000+02:00</published><updated>2008-01-17T15:55:38.264+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Cannot attach to services manager при ресторе через IBExpert</title><content type='html'>В то же время как бекап проходит нормально.&lt;br /&gt;FB 2.0 SS&lt;br /&gt;&lt;br /&gt;Скорее всего, что путь к БД указывается локальный, без имени сервера, а в таком виде(тобишь по локальному протоколу), сервисы в 2.0 почему-то не работают.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-6872377566059244271?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/6872377566059244271/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=6872377566059244271' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6872377566059244271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6872377566059244271'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2008/01/cannot-attach-to-services-manager.html' title='Cannot attach to services manager при ресторе через IBExpert'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-429043219462580883</id><published>2007-12-07T16:19:00.000+02:00</published><updated>2007-12-07T16:27:53.094+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><category scheme='http://www.blogger.com/atom/ns#' term='кодировки'/><title type='text'>Кодировка подключения и DDL в FB 2.1</title><content type='html'>&gt; Кстати ты в курсе что в последних файрах если ты подключился в&lt;br /&gt;&gt; NONE то DDL операторы выполнять противопоказано? По крайней мере некоторые&lt;br /&gt;&lt;br /&gt;Почему:&lt;br /&gt;выполняем в NONE:&lt;br /&gt; &lt;br /&gt;create procedure AAA&lt;br /&gt;as&lt;br /&gt;begin&lt;br /&gt;  -- тут был вася&lt;br /&gt;end&lt;br /&gt; &lt;br /&gt;В каком чарсете запишется вася в RDB$PROCEDURE_SOURCE? Правильно, в &lt;br /&gt;WIN1251. А должен быть в юникоде. И если теперь подключиться в cp1251, &lt;br /&gt;то получишь ошибку транслитерации.&lt;br /&gt; &lt;br /&gt;-- &lt;br /&gt;Дмитрий Еманов&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-429043219462580883?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/429043219462580883/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=429043219462580883' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/429043219462580883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/429043219462580883'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/12/ddl-fb-21.html' title='Кодировка подключения и DDL в FB 2.1'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-2795815515136851564</id><published>2007-11-26T09:19:00.000+02:00</published><updated>2007-11-26T09:21:14.214+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Проблема кодировок в post-commit svn</title><content type='html'>Возникла в нашей команде задача оповещения о чужих коммитах. Для командного общения активно используем гугловскую группу, поэтому идущий в поставке svn механизм рассылки пост-коммитов подходил на 100%.&lt;br /&gt;&lt;br /&gt;Но сходу механизм не заработал - письма, при запуске скрипта самим svn не приходили, а при отладочных запусках из консоли - приходили, но со слетевшей, в utf, кодировкой(svnlook выдавал русские комvентарии в консоль юникодом).&lt;br /&gt;&lt;br /&gt;Вторая проблема решилась небольшим переписыванием скрипта commit-email.pl:&lt;br /&gt;установкой нужной локали&lt;br /&gt;  $ENV{'LC_ALL'} = 'russian';&lt;br /&gt;и заданием нужной кодировки в хидерах писем(было UTF-8)&lt;br /&gt;push(@head, "Content-Type: text/plain; charset=koi8-r\n");&lt;br /&gt;&lt;br /&gt;Первая - добавил в post-commit скрипт переход в каталог, в котором он сам и расположен&lt;br /&gt;&lt;br /&gt;REPOS="$1"&lt;br /&gt;REV="$2"&lt;br /&gt;cd /home/.../hooks/&lt;br /&gt;/home/.../hooks/commit-email.pl "$REPOS" "$REV" "plaincad-dev@googlegroups.com" --diff n &gt;1 2&gt;2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-2795815515136851564?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/2795815515136851564/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=2795815515136851564' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2795815515136851564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2795815515136851564'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/11/post-commit-svn.html' title='Проблема кодировок в post-commit svn'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7666202047063117359</id><published>2007-11-10T20:44:00.000+02:00</published><updated>2007-11-10T20:49:15.425+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Рестор БД под 2.1 с гранатами для non-ascii пользователей</title><content type='html'>Натолкнулся на неприятную особенность - из-за некорретной работы с unicode версий ФБ менее 2.1, при ресторе БД, в которой даны какие-то права пользователям, имя которого содержит, к примеру, русские символы, рестор останавливается:&lt;br /&gt;&lt;br /&gt;gbak:    restoring privilege for user ДЕНИС&lt;br /&gt;gbak: ERROR:arithmetic exception, numeric overflow, or string truncation&lt;br /&gt;gbak: ERROR:    Cannot transliterate character between character sets&lt;br /&gt;gbak: ERROR:    At trigger 'RDB$TRIGGER_9'&lt;br /&gt;gbak:Exiting before completion due to errors&lt;br /&gt;&lt;br /&gt;Ситуация конечно редкая, для заведения таких прав до версии 2.1 нужна недюжинная фантазия.&lt;br /&gt;&lt;br /&gt;Если такой грант давать в 2.1 - то все работает штатно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7666202047063117359?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7666202047063117359/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7666202047063117359' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7666202047063117359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7666202047063117359'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/11/21-non-ascii.html' title='Рестор БД под 2.1 с гранатами для non-ascii пользователей'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-5518687898771455044</id><published>2007-09-29T09:23:00.000+03:00</published><updated>2007-09-29T14:48:47.032+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Неоднозначность в запросах с сортировкой и distinct</title><content type='html'>Такой вот запрос, в FB2 отрабатывает, но данные возвращает в случайном порядке. &lt;br /&gt;&lt;blockquote&gt;select distinct(t.f1) from table1 t order by t.id&lt;/blockquote&gt;&lt;br /&gt;Как подсказал Дима Кузьменко:&lt;br /&gt;&lt;blockquote&gt;сначала идет distinct, потом order.&lt;br /&gt;то есть. набор выливается в sort, удаляются повторы.&lt;br /&gt;Затем набор сортируется по атрибуту order.&lt;br /&gt;как оно этот атрибут возьмет - зависит от того, как на диске&lt;br /&gt;или в индексе легло.&lt;br /&gt;план в 2.0 - PLAN SORT (SORT ((table1 NATURAL)))&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;А вот Oracle(как выяснилось и PostgreSQL) с такими запросами посылает(после чего и поднялся вопрос). &lt;br /&gt;http://ora-01791.ora-code.com/&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ORA-01791:&lt;/span&gt; not a SELECTed expression&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Cause: &lt;/span&gt;&lt;br /&gt;There is an incorrect ORDER BY item. The query is a SELECT DISTINCT query with an ORDER BY clause. In this context, all ORDER BY items must be constants, SELECT list expressions, or expressions whose operands are constants or SELECT list expressions.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Action: &lt;/span&gt;&lt;br /&gt;Remove the inappropriate ORDER BY item from the SELECT list and retry the statement.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Для экспериментов:&lt;br /&gt;&lt;blockquote&gt;CREATE TABLE TABLE1 (&lt;br /&gt;    ID  INTEGER NOT NULL,&lt;br /&gt;    F1  VARCHAR(10)&lt;br /&gt;);&lt;br /&gt; &lt;br /&gt;INSERT INTO TABLE1 (ID, F1) VALUES (1, 'q');&lt;br /&gt;INSERT INTO TABLE1 (ID, F1) VALUES (2, 'w');&lt;br /&gt;INSERT INTO TABLE1 (ID, F1) VALUES (3, 'e');&lt;br /&gt;INSERT INTO TABLE1 (ID, F1) VALUES (4, 'r');&lt;br /&gt;INSERT INTO TABLE1 (ID, F1) VALUES (5, 't');&lt;br /&gt;INSERT INTO TABLE1 (ID, F1) VALUES (6, 'q');&lt;br /&gt;INSERT INTO TABLE1 (ID, F1) VALUES (7, 'w');&lt;br /&gt;COMMIT WORK;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-5518687898771455044?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/5518687898771455044/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=5518687898771455044' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5518687898771455044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5518687898771455044'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/09/distinct.html' title='Неоднозначность в запросах с сортировкой и distinct'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-3881485751411551194</id><published>2007-09-29T08:59:00.000+03:00</published><updated>2007-09-29T09:01:15.945+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Блокировка файла базы при XNET подключении с использованием событий</title><content type='html'>&gt;&gt; 2) Сервер после отключения ничего не держит.&lt;br /&gt;&gt; Неправдачка ваша.&lt;br /&gt;&gt; При XNET подключении с использованием событий именно держит.&lt;br /&gt; &lt;br /&gt;События - ключевой момент. Там поток их доставки ждёт 5 сек&lt;br /&gt;до полного отруба.&lt;br /&gt; &lt;br /&gt;--&lt;br /&gt;Хорсун Влад&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-3881485751411551194?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/3881485751411551194/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=3881485751411551194' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3881485751411551194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/3881485751411551194'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/09/xnet.html' title='Блокировка файла базы при XNET подключении с использованием событий'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-1232155041546817323</id><published>2007-09-09T10:31:00.000+03:00</published><updated>2007-11-10T20:43:59.173+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Хитрый способ починки БД с помощью nbackup</title><content type='html'>&gt;04.09.2007 12:17:06 INFO: Analyzing database low-level structures...&lt;br /&gt;&gt; 04.09.2007 12:17:06 INFO: Process database file #1 of 1 files.&lt;br /&gt;&gt; 04.09.2007 12:20:01 INFO: Actual PageCount: 238816 found in database&lt;br /&gt;&gt; 04.09.2007 12:20:01 ERROR: Found 6168 undefined pages.&lt;br /&gt;&gt; &lt;br /&gt;&gt; Насколько это страшно ?&lt;br /&gt; &lt;br /&gt;VK&gt;&gt;     Если это ОДС 11.1 и все 6168 undefined pages в конце БД, то это&lt;br /&gt;VK&gt;&gt; совершенно не страшно.&lt;br /&gt;VK&gt;&gt;     Сделай бекап 0-го уровня nbackup'ом, пофикси его им же для&lt;br /&gt;VK&gt;&gt; превращения в БД, и сравни с р-ром оригинала. Потом прогони&lt;br /&gt;VK&gt;&gt; FirstAID на полученной копии&lt;br /&gt;&gt; &lt;br /&gt;&gt; Влад, а можешь пару слов про низкий уровень процесса?&lt;br /&gt;&gt; Nbackup их восстановит правильно или отбросит?&lt;br /&gt; &lt;br /&gt;    FB 2.1, работая с родным форматом ОДС 11.1, по-умолчанию расширяет файл БД&lt;br /&gt;относительно большими кусками, а не по-странично как раньше. Соответственно в&lt;br /&gt;конце файла, как правило, есть страницы, которые никогда не были использованы.&lt;br /&gt;В PIP есть отметка о том, сколько страниц было реально использовано. nbackup&lt;br /&gt;читает эти отметки и не включает в бекап эти страницы.&lt;br /&gt;  &lt;br /&gt;--&lt;br /&gt;Хорсун Влад&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-1232155041546817323?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/1232155041546817323/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=1232155041546817323' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1232155041546817323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1232155041546817323'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/09/nbackup.html' title='Хитрый способ починки БД с помощью nbackup'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8578411213347482839</id><published>2007-09-09T10:26:00.000+03:00</published><updated>2007-09-09T10:28:36.453+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interbase'/><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Различия в работе с savepoint в  Firebird и Interbase</title><content type='html'>Kovalenko Dmitry wrote:&lt;br /&gt;&gt; &lt;br /&gt;&gt; Родился вопрос. А в стандарте SQL (99) вроде как прописано понятие&lt;br /&gt;&gt; точек сохранения (SAVEPOINT).&lt;br /&gt; &lt;br /&gt;Так точно.&lt;br /&gt; &lt;br /&gt;&gt; А прописано ли в нем что делать с точкой B в таком случае?&lt;br /&gt;&gt; &lt;br /&gt;&gt; 1. savepoint A;&lt;br /&gt;&gt; 2. savepoint B;&lt;br /&gt;&gt; 3. savepoint A;&lt;br /&gt;&gt; 4. в этой точке у нас savepoint B (по-стандарту) существует или нет?&lt;br /&gt; &lt;br /&gt;Стандарт лишь говорит, что должен удалиться старый сейвпойнт А и &lt;br /&gt;создаться новый с тем же именем.&lt;br /&gt; &lt;br /&gt;&gt; в IB savepoint "B" будет изничтожен&lt;br /&gt; &lt;br /&gt;Судя по всему, IB неявно выполняет RELEASE SAVEPOINT A (который по &lt;br /&gt;стандарту уничтожает все сейвпойнты от А до настоящего времени), в то &lt;br /&gt;время как FB выполняет наше расширение: RELEASE SAVEPOINT A ONLY, &lt;br /&gt;которое удаляет только данный сейвпойнт. Отсюда и разница.&lt;br /&gt; &lt;br /&gt;Я считаю наше поведение правильным.&lt;br /&gt; &lt;br /&gt;-- &lt;br /&gt;Дмитрий Еманов&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8578411213347482839?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8578411213347482839/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8578411213347482839' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8578411213347482839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8578411213347482839'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/09/savepoint-firebird-interbase.html' title='Различия в работе с savepoint в  Firebird и Interbase'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8713500535709720926</id><published>2007-09-02T18:31:00.000+03:00</published><updated>2007-09-02T18:35:16.591+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Мега связка Perl+Oracle</title><content type='html'>DBD-Oracle-1.19\README.win32.txt&lt;br /&gt;1)...&lt;br /&gt;8) Enough Downloading and installing go have a coffee.&lt;br /&gt;&lt;br /&gt;А перед этим мы скачали все что только можно от МС(Microsoft Visual Studio 2005,Windows SDK, Microsoft .Net framework 1.1) - опенсорс, мля.&lt;br /&gt;&lt;br /&gt;PS не нужно воспринимать сей пост серьезно&lt;br /&gt;PSS хотя...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8713500535709720926?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8713500535709720926/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8713500535709720926' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8713500535709720926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8713500535709720926'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/09/perloracle.html' title='Мега связка Perl+Oracle'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7926414983445540969</id><published>2007-07-16T18:23:00.000+03:00</published><updated>2007-07-16T18:53:55.130+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Странности перла</title><content type='html'>Что вы подумаете должен вернуть ниже приведенный код?&lt;br /&gt;&lt;br /&gt;bbb?&lt;br /&gt;неа&lt;br /&gt;b0b&lt;br /&gt;&lt;br /&gt;Спасибо другу-перловику - он удержал мой мозг на месте:&lt;br /&gt;&lt;blockquote&gt;There is a single iterator for each hash, shared by all each(), keys(), and values() function calls in the program; it can be reset by reading all the elements from the hash, or by evaluating keys HASH or values HASH&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Интересно, чего стоит этот пустой keys(%$f___ed_hash);&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;my $f___ed_hash = {&lt;br /&gt;  1=&gt;'a',&lt;br /&gt;  2=&gt;'b',&lt;br /&gt;  3=&gt;'c'&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;sub eb___ya_sub {&lt;br /&gt;  keys(%$f___ed_hash);&lt;br /&gt;  while (my ($n,$w)=each(%$f___ed_hash)){&lt;br /&gt;    if($n==2) {&lt;br /&gt;      return $w;&lt;br /&gt;    }  &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print &amp;eb___ya_sub;&lt;br /&gt;print &amp;eb___ya_sub;&lt;br /&gt;print &amp;eb___ya_sub;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7926414983445540969?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7926414983445540969/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7926414983445540969' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7926414983445540969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7926414983445540969'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/07/blog-post.html' title='Странности перла'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-139722413566237813</id><published>2007-06-26T16:16:00.000+03:00</published><updated>2007-06-26T16:28:03.308+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Долговременная очередь в таблице Oracle</title><content type='html'>Возникла задача организации долговременной очереди, используемой несколькими параллельными конкурирующими обработчиками, которые, в общем случае, могут находиться на разных машинах.&lt;br /&gt;Доп требование к очереди - ее архивное хранение и ограничение по используемой СУБД - Oracle.&lt;br /&gt;&lt;br /&gt;Путей решения виделось несколько:&lt;br /&gt;1. Использование готового решения от Оракл - AQ&lt;br /&gt;2. Создание сервера приложений - эдакого контроллера очереди, посредством которого доступ к данным будет сериализован&lt;br /&gt;3. Использование механизма конкурентного доступа и блокировок самой СУБД.&lt;br /&gt;&lt;br /&gt;По ряду обстоятельств(технические сложности работы а AQ и полнейшее с ним незнакомство, трудоемкость создания доп слоя...) был выбран третий путь(учитывая FB-шное прошлое он показался более близким, чтоль:)&lt;br /&gt;&lt;br /&gt;Суть метода в том, что обработчик помечает пакет записей заблокированными на обработку - в это время никто не должен иметь к ним доступа, а после обработки блокировка снимается и сообщения помечается обработанным.&lt;br /&gt;&lt;br /&gt;В FB такое можно сделать посредством подобной селективной процедуры, привычно ставя блокировку холостым апдейтом.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CREATE PROCEDURE QUERY_SEL(row_count integer) RETURNS (ID_row INTEGER)&lt;br /&gt;AS&lt;br /&gt;begin&lt;br /&gt;  for select first(:row_count) sq.id_row,&lt;br /&gt;      from query sq&lt;br /&gt;      where sq.id_send_state=1&lt;br /&gt;      into :id_row  do&lt;br /&gt;  begin&lt;br /&gt;    update sgt_query sq set sq.id_mess_state=2 &lt;br /&gt;    where sq.id_row=:id_row;&lt;br /&gt;    suspend;&lt;br /&gt;    when any do&lt;br /&gt;    begin&lt;br /&gt;      row_count = row_count +1;&lt;br /&gt;    end&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Оракл оказался богаче - недокументированный for update skip locked; подходил идеально(похоже это и есть механизм реализации AQ), но слушая Кайта с негодованием отметаем подобный "ugly hack" и пытаемся сделать это вручную, посредством pipeline функции.&lt;br /&gt;&lt;br /&gt;Столкнувшись с невозможностью запуска апдейтов внутри селекта, познакомился с автономными транзакциями.&lt;br /&gt;Выделив апдейт(блокировку) в отдельную процедуру задача в общих чертах решилась.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;create or replace procedure sgt_queue_lock(&lt;br /&gt;   row_count in integer default 10,&lt;br /&gt;  locker_id_ in integer ) &lt;br /&gt;as&lt;br /&gt;  lockedCount integer := 0;&lt;br /&gt;  ERROR_LOCK EXCEPTION;&lt;br /&gt;  PRAGMA EXCEPTION_INIT(ERROR_LOCK, -54);&lt;br /&gt;  PRAGMA AUTONOMOUS_TRANSACTION;&lt;br /&gt;begin&lt;br /&gt;  -- receive all unlocked and unsended messages and lock them &lt;br /&gt;  -- from competitive lockers&lt;br /&gt;  for r1 in (select id_mess from SGT_QUEUE t where t.ID_mess_STATE=1 &lt;br /&gt;             for update nowait) &lt;br /&gt;  loop&lt;br /&gt;    begin&lt;br /&gt;      -- long time lock for processing time&lt;br /&gt;      update SGT_QUEUE t set t.ID_mess_STATE=2,t.LOCKER_ID=locker_id_ &lt;br /&gt;        where t.ID_mess=r1.id_mess;&lt;br /&gt;      lockedCount := lockedCount+1;&lt;br /&gt;&lt;br /&gt;      if(row_count=lockedCount) then&lt;br /&gt;        exit;&lt;br /&gt;      end if;  &lt;br /&gt;&lt;br /&gt;      -- if row is locked - skip it &lt;br /&gt;      exception when  error_lock then&lt;br /&gt;        null;&lt;br /&gt;    end;&lt;br /&gt;  end loop;&lt;br /&gt;  commit;&lt;br /&gt;end sgt_queue_lock;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Конечно оборачивание всего в функцию необязательно, но чем меньше вариантов использования для прикладников - тем лучше, не так ли?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;create or replace function queue_get&lt;br /&gt;(row_count integer, locker_id integer) &lt;br /&gt;return queue_table_type PIPELINED&lt;br /&gt;as&lt;br /&gt;  suspendedCount integer := 0;&lt;br /&gt;  out_rec queue_type := queue_type(null,null,null,null);&lt;br /&gt;begin&lt;br /&gt;  -- долговременно и монопольно блокируем пакет записей для &lt;br /&gt;  -- обработки определенным процессом&lt;br /&gt;  BEGIN&lt;br /&gt;    -- проверяем, есть ли еще необработанные/не отосланные сообщения в очереди&lt;br /&gt;    -- если есть - то новых блокировать не будем&lt;br /&gt;    -- из-за отсутсвия exists проверям наличие записей очень извратно&lt;br /&gt;    select 0 into suspendedCount from SGT_QUEUE t &lt;br /&gt;        where t.LOCKER_ID=locker_id and &lt;br /&gt;              t.ID_MESS_STATE=2 and rownum=1;&lt;br /&gt;    EXCEPTION  WHEN NO_DATA_FOUND THEN&lt;br /&gt;    begin&lt;br /&gt;      SGT_QUEUE_LOCK(row_count,locker_id);&lt;br /&gt;    end;  &lt;br /&gt;  END;  &lt;br /&gt;  &lt;br /&gt;  -- выше использовали как временную заглушку&lt;br /&gt;  suspendedCount := 0;&lt;br /&gt;  -- выбираем записи помеченные на обработку для этого процесса&lt;br /&gt;  -- (не провайдера, а именно процесса)&lt;br /&gt;  for r1 in (select id_MESS, MESS_DATA from SGT_QUEUE t &lt;br /&gt;             where t.LOCKER_ID=locker_id  and t.ID_MESS_STATE=2 &lt;br /&gt;             order by t.MESS_PRIORITY DESC,t.RECEIVE_TIME ASC) &lt;br /&gt;  loop&lt;br /&gt;    out_rec.id_mess          := r1.id_mess; &lt;br /&gt;    out_rec.mess_data        := r1.mess_data; &lt;br /&gt;    &lt;br /&gt;    PIPE ROW(out_rec);&lt;br /&gt;    &lt;br /&gt;    suspendedCount := suspendedCount+1;&lt;br /&gt;    if(row_count=suspendedCount) then&lt;br /&gt;      exit;&lt;br /&gt;    end if;  &lt;br /&gt;    &lt;br /&gt;  end loop;&lt;br /&gt;  return;&lt;br /&gt;end queue_get;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Из недостатков видится не максимальная скорость работы, но учитывая то, что записи на обработку будут забираться пакетно - особой проблемы это не составит.&lt;br /&gt;Может кто еще какие сложности/ошбики видит?&lt;br /&gt;&lt;br /&gt;Да, как оказалось, подобные вопросы встречаются регулярно :)&lt;br /&gt;&lt;br /&gt;Выбрать первую незаблокированную запись из таблицы, как?&lt;br /&gt;http://www.sql.ru/forum/actualthread.aspx?tid=389300&amp;hl=aq&lt;br /&gt;&lt;br /&gt;Таблица oracle как очередь&lt;br /&gt;http://www.sql.ru/forum/actualthread.aspx?tid=309047&amp;hl=aq&lt;br /&gt;&lt;br /&gt;Параллельная работа с записями.&lt;br /&gt;http://www.sql.ru/forum/actualthread.aspx?tid=307911&amp;pg=-1&amp;hl=aq&lt;br /&gt;&lt;br /&gt;Select for update - как получить незаблокированные данные&lt;br /&gt;http://www.sql.ru/forum/actualthread.aspx?tid=264566&amp;pg=-1&amp;hl=aq&lt;br /&gt;&lt;br /&gt;Таблица-буфер. Уникальная выборка строк для каждого процесса.&lt;br /&gt;http://www.sql.ru/forum/actualthread.aspx?tid=239337&amp;hl=aq&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-139722413566237813?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/139722413566237813/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=139722413566237813' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/139722413566237813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/139722413566237813'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/06/oracle.html' title='Долговременная очередь в таблице Oracle'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-5948762455342463116</id><published>2007-06-14T20:13:00.000+03:00</published><updated>2007-06-14T20:19:39.788+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Нет в Oracle exists</title><content type='html'>Нет в оракле конструкции exists в pl/sql, подобной той, что есть в Firebird/Interbase&lt;br /&gt;&lt;blockquote&gt;if exists(select..) then&lt;/blockquote&gt;приходится извращаться через:&lt;br /&gt;&lt;blockquote&gt;select count(1) into from table where rownum=1&lt;br /&gt;EXCEPTION  WHEN NO_DATA_FOUND THEN&lt;br /&gt; code;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Надеюсь rownum=1 дает хоть какой-то выигрыш в скорости(exists достаточно быстрая операция, в отличии от count).&lt;br /&gt;&lt;br /&gt;PS&lt;br /&gt;Прикольно - казалось бы логичное ограничение в rownum=1, может сработать не всегда - когда таблица партиционирована, используется каунт и включен параллелизм - может идти фуллскан по всей таблице. Горе от ума, что говорится.&lt;br /&gt;Правда до версии 10g r1 (Relevant for Oracle until 10g r1)&lt;br /&gt;"Selecting ROWNUM = 1 with 100.000 PIO"&lt;br /&gt;http://www.db-nemec.com/Selecting_ROWNUM_1.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-5948762455342463116?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/5948762455342463116/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=5948762455342463116' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5948762455342463116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/5948762455342463116'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/06/oracle-exists.html' title='Нет в Oracle exists'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-1553093494447364418</id><published>2007-03-29T05:36:00.000+03:00</published><updated>2007-03-29T05:39:08.532+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Очень кратко и по русски, что нового в Firebird 2.1</title><content type='html'>&lt;ul&gt;&lt;li&gt; триггеры на сист операции - коммит/роллбек, коннект/дисконнект&lt;/li&gt;&lt;li&gt;глобальные временные таблицы&lt;/li&gt;&lt;li&gt;рекурсивыне запросы и соответственно common table expressions("общие табличные выражения" из SQL-99) &lt;a href="http://en.wikipedia.org/wiki/Common_table_expressions"&gt;http://en.wikipedia.org/wiki/Common_tab&lt;wbr&gt;le_expressions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;давно ожидаемый мною агрегат для строк, который черти-когда сделал OlegLOA - LIST&lt;/li&gt;&lt;li&gt;update or insert  и merge(более навороченный u or i ) - &lt;a href="http://en.wikipedia.org/wiki/Merge_%28SQL%29"&gt;http://en.wikipedia.org/wiki/Merge_%28S&lt;wbr&gt;QL%29&lt;/a&gt;&lt;/li&gt;&lt;li&gt;домены в пскл, для чего добавлен признак валидности процедур и триггеров&lt;/li&gt;&lt;li&gt;таблицы мониторинга - активные запросы, пользователи и т.п. соответственно отмена(прибитие) долгоиграющих запросов(из другого соединения)&lt;/li&gt;&lt;li&gt;оптимизация сетевого трафика&lt;/li&gt;&lt;li&gt;номер строки и позиция в стеке ошибки пскл&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;и не мало чего еще&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-1553093494447364418?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/1553093494447364418/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=1553093494447364418' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1553093494447364418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1553093494447364418'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2007/03/firebird-21.html' title='Очень кратко и по русски, что нового в Firebird 2.1'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-1755981391866590658</id><published>2006-10-26T06:46:00.000+03:00</published><updated>2007-03-29T06:02:30.223+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Как считается кол-во контекстов</title><content type='html'>&gt;       Контексты точно есть, юнионов вроде 1-2 и всё,&lt;br /&gt;&gt;       а что под агрегатами подразумевается ?&lt;br /&gt; &lt;br /&gt;    MAX, SUM etc&lt;br /&gt; &lt;br /&gt;SELECT COUNT(*), MAX() FROM TABLE&lt;br /&gt; &lt;br /&gt;потребляет 2 контекста - для таблицы и для 1-го уровня&lt;br /&gt;аггрегирования&lt;br /&gt; &lt;br /&gt;Update, кстати, потребляет 2 контекста&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-1755981391866590658?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/1755981391866590658/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=1755981391866590658' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1755981391866590658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/1755981391866590658'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2006/10/blog-post.html' title='Как считается кол-во контекстов'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-6158082677973547544</id><published>2006-08-21T15:39:00.000+03:00</published><updated>2007-03-29T06:02:30.224+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Оптимизация IBX для медленных линий</title><content type='html'>&gt; Ты вроде как в свое время на медленных линиях собаку съел... :) Может&lt;br /&gt;&gt; вспомишь чего...&lt;br /&gt; &lt;br /&gt;    Я не кореец, аднака, собак не ем :)&lt;br /&gt; &lt;br /&gt;    Terminal Server попроще будет, потому его и посоветовал сходу :)&lt;br /&gt;Ну, раз не хочешь попроще - лови посложнее :)&lt;br /&gt; &lt;br /&gt;    Самое простое, что можно сделать с IBX, по-памяти&lt;br /&gt; &lt;br /&gt;а) убрать никому не нужный isc_dsql_set_cursor_name&lt;br /&gt; &lt;br /&gt;б) сделать хендлы запросов повторно используемыми, т.е.&lt;br /&gt;   не вызывать isc_dsql_free_statement(..., DSQL_drop), а засовывать хендл&lt;br /&gt;   за щёку. Вынимать из-за щеки когда оно зовёт isc_dsql_allocate_statement.&lt;br /&gt; &lt;br /&gt;в) в TIBSQL.GetRowsAffected сделать буфер правильного р-ра (32 байта),&lt;br /&gt;   а не 1048 (откуда он взял это число ???). Или ваще похерить этот&lt;br /&gt;   вызов, если конечно можешь без него обойтись.&lt;br /&gt; &lt;br /&gt;г) в TIBSQL.Prepare заменить&lt;br /&gt; &lt;br /&gt;        if FSQLType in [SQLSelect, SQLSelectForUpdate,&lt;br /&gt;                        SQLExecProcedure] then&lt;br /&gt;        begin&lt;br /&gt;          { Allocate an initial output descriptor (with one column) }&lt;br /&gt;-         FSQLRecord.Count := 1;&lt;br /&gt;+         if FSQLRecord.FSize = 0&lt;br /&gt;+         then FSQLRecord.Count := 1; // тут можно любое число &gt; 0&lt;br /&gt;          { Using isc_dsql_describe, get the right size for the columns... }&lt;br /&gt;          Call(FGDSLibrary.isc_dsql_describe(StatusVector, @FHandle,&lt;br /&gt;Database.SQLDialect, FSQLRecord.FXSQLDA), True);&lt;br /&gt;          if FSQLRecord.FXSQLDA^.sqld &gt; FSQLRecord.FXSQLDA^.sqln then&lt;br /&gt;          begin&lt;br /&gt;-           FSQLRecord.Count := FSQLRecord.FXSQLDA^.sqld;&lt;br /&gt;            Call(FGDSLibrary.isc_dsql_describe(StatusVector, @FHandle,&lt;br /&gt;Database.SQLDialect, FSQLRecord.FXSQLDA), True);&lt;br /&gt;          end&lt;br /&gt;-         else&lt;br /&gt;-           if FSQLRecord.FXSQLDA^.sqld = 0 then&lt;br /&gt;-             FSQLRecord.Count := 0;&lt;br /&gt;+         FSQLRecord.Count := FSQLRecord.FXSQLDA^.sqld;&lt;br /&gt; &lt;br /&gt;    Это я сам не пробовал, но должно работать.&lt;br /&gt;    Суть - не вызывать isc_dsql_describe второй раз, если у нас&lt;br /&gt;    и так хватает дескрипторов (XSQLDA) для резалтсета&lt;br /&gt; &lt;br /&gt;д) Выключить trace флаги у TIBDatabase и\или выключить запрос плана в&lt;br /&gt;TIBSQLMonitorHook.SQLPrepare&lt;br /&gt; &lt;br /&gt;-- &lt;br /&gt;Хорсун Влад&lt;br /&gt; &lt;br /&gt;PS Можно так же пользовать FB 2.1 в котором часть вышенаписанного уже есть&lt;br /&gt;   плюс кое-что ещё :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-6158082677973547544?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/6158082677973547544/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=6158082677973547544' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6158082677973547544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/6158082677973547544'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2006/08/ibx.html' title='Оптимизация IBX для медленных линий'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-2665894268929401515</id><published>2006-07-25T15:59:00.000+03:00</published><updated>2007-03-29T06:02:30.224+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Как оказалось при подготовке(prepare) запроса в IB/FB...</title><content type='html'>&amp;gt; Вот это для меня новость - т.е. при каждой препарации запроса&lt;br /&gt;&amp;gt; пересчитывается кол-во страниц!?&lt;br /&gt; &lt;br /&gt;Для каждой участвующей таблицы сканируются ее pointer pages. По числу&lt;br /&gt;занятых слотов на них определяется кол-во страниц данных. По этой цифре&lt;br /&gt;оценивается число записей.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-2665894268929401515?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/2665894268929401515/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=2665894268929401515' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2665894268929401515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/2665894268929401515'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2006/07/prepare-ibfb.html' title='Как оказалось при подготовке(prepare) запроса в IB/FB...'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7370978627569159531</id><published>2006-07-22T19:33:00.000+03:00</published><updated>2007-03-29T06:02:30.225+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Модификация метаданных "по живому"</title><content type='html'>&gt; Я отвечал по факту, а не по намерению. Т.е. если альтеруемый объект не&lt;br /&gt;&gt; заюзан на момент альтера, то это безопасно.&lt;br /&gt; &lt;br /&gt;Создание и удаление таблиц во время интенсивных вставок в другие таблицы&lt;br /&gt;часто приводит к повреждениям - в основном конфликтам между системными&lt;br /&gt;страницами и страницами данных. Конечно, в основном на классике, но и на&lt;br /&gt;супере тоже наблюдал не раз.&lt;br /&gt; &lt;br /&gt;С уважением,&lt;br /&gt;Алексей Ковязин&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7370978627569159531?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7370978627569159531/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7370978627569159531' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7370978627569159531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7370978627569159531'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2006/07/blog-post_419.html' title='Модификация метаданных &amp;quot;по живому&amp;quot;'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8861242055074195155</id><published>2006-07-22T19:31:00.001+03:00</published><updated>2007-03-29T06:02:30.225+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Из вопросов теста: "точность типа double precision"</title><content type='html'>&gt; укажите точность типа double precision (максимальное число знаков)&lt;br /&gt;&gt; ответил 17, а в качестве правильного ответа указано 15&lt;br /&gt;&gt; зашел в IBE, проверил:&lt;br /&gt;&gt; select cast(CAST(1123 as DOUBLE PRECISION)/1233451 as varchar(100)) from&lt;br /&gt;RDB$DATABASE&lt;br /&gt;&gt; 0.0009104536783382559&lt;br /&gt;&gt; 16 знаков-то, как ни крути :)&lt;br /&gt; &lt;br /&gt;16-ый знак не гарантируется.&lt;br /&gt;Т.е. он может быть показан не для всех чисел&lt;br /&gt; &lt;br /&gt;-- &lt;br /&gt;Хорсун Влад&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8861242055074195155?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8861242055074195155/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8861242055074195155' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8861242055074195155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8861242055074195155'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2006/07/double-precision_22.html' title='Из вопросов теста: &amp;quot;точность типа double precision&amp;quot;'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-7701930105893128013</id><published>2006-07-22T19:28:00.001+03:00</published><updated>2007-03-29T06:02:30.225+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>FB2 больше не допускает альтер/дроп процедур "in use"</title><content type='html'>&gt; (Для FB1 все работает как часы.)&lt;br /&gt; &lt;br /&gt;FB2 больше не допускает альтер/дроп процедур "in use". Но счетчик&lt;br /&gt;использования держит каждый препарированный запрос, в котором используется&lt;br /&gt;процедура, плюс каждая аналогичная транзакция.&lt;br /&gt; &lt;br /&gt;--&lt;br /&gt;Дмитрий Еманов&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-7701930105893128013?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/7701930105893128013/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=7701930105893128013' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7701930105893128013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/7701930105893128013'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2006/07/fb2-use_22.html' title='FB2 больше не допускает альтер/дроп процедур &amp;quot;in use&amp;quot;'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5635913523875084787.post-8988140465107379059</id><published>2006-07-22T19:09:00.001+03:00</published><updated>2007-03-29T06:02:30.226+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Кажется из epi</title><content type='html'>- двойная бухгалтерская запись - это замечательная (!) бухгалтерская &lt;br /&gt;выдумкка такой регистрации (как камера Вильсона) событий и фактов, &lt;br /&gt;которая, в частности, позволяет (постоянно) убеждаться в &lt;br /&gt;справедливости обобщенного закона Ломоносова-Лавуазье:&lt;br /&gt;"Сумма везде всего всегда равняется всему"*&lt;br /&gt;___&lt;br /&gt;*Просьба не путать с основным законом социализьма:&lt;br /&gt;"Всего на всех не хватит, патамучта всех много, а всего мало."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5635913523875084787-8988140465107379059?l=pnv82.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pnv82.blogspot.com/feeds/8988140465107379059/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5635913523875084787&amp;postID=8988140465107379059' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8988140465107379059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5635913523875084787/posts/default/8988140465107379059'/><link rel='alternate' type='text/html' href='http://pnv82.blogspot.com/2006/07/epi_22.html' title='Кажется из epi'/><author><name>pnv82</name><uri>http://www.blogger.com/profile/10764924765412926932</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_XZK0pEW40Eo/SeFsGHJbrbI/AAAAAAAAAPI/Mja_zw3uY1E/S220/DSC_0244.jpg'/></author><thr:total>0</thr:total></entry></feed>
