Привет всем.
Сегодня стукнуло 18 лет с начала разработки IBProvider. Можно порадоваться, а можно и ужаснуться.
Грубый анализ состояния проекта с помощью SourceMonitor-а, показывает следующий цифры:
Project Name IBProvider
Checkpoint Name Checkpoint1
Created On 17 Jan 2018, 22:34:18
Files 4881
Lines 631 930*
Statements 225 503
Percent Branch Statements 12,0
Percent Lines with Comments 32,6
Classes Defined 2 336
Methods Implemented per Class 7,29
Average Statements per Method 7,9
Line Number of Most Complex Method {undefined}
Name of Most Complex Method RemoteFB__P13__XSQLDA_Utilities::Helper__Parse_XSQLDA_MSG_DATA
Maximum Complexity 71
Line Number of Deepest Block {undefined}
Maximum Block Depth 9+
Average Block Depth 1,26
Average Complexity 2,53
Functions 2 920
Самой первой подсистемой этого проекта был конвертер OLE DB типов. Как сейчас помню — гигантский файл под две тысячи строчек.
В 2008 году этот конвертер был переписан — это первое что было обновлено, когда IBProvider стал основным проектом. Кстати, новая архитектура конвертера оказалось очень удачной.
На днях исходный код этого конвертера был еще раз реорганизован.
Исходя из этого, можно сделать осторожный вывод, что одна итерация разработки IBProvider составляет ~9 лет 🙂
Привет всем.
1. Сегодня обновил сборки IBProvider (3.47.0.27224), которые крутились под тестами с 7 ноября прошлого (2017) года. Больше двух месяцев. Даже стало интересно сколько этот релиз IBProvider наработал процессорного времени под тестами. Получилось 154 дня. Пять месяцев, Карл.
2. В течении прошедших двух месяцев возился с провайдером для linq2db. Очень увлекательное занятие. Соорудил прототип, который объективно отрабатывает тесты лучше встроенного провайдера для FB. Но для завершения работы нужно подождать пока родители linq2db доведут до ума интерфейс инициализации внешних дата-провайдеров.
Привет всем!
Хотел вчера эту заметку написать, но все закончилось тем, что полдня приводил в порядок код этого блога 🙂
На днях получил письмо от одного пользователя с такой фразой:
«Here in our company we use a small management and sales system that used the Firebird database. For years I’ve been trying to use it with Microsoft’s SSRS (Reporting Services) using ODBC, but I’m getting tired of the limitations of this feature, especially for using IN operator and multi-parameter selection.
I tried the trial product of you, I created a liked server of Sql Server 2014 for Firebird and after that I was able to use the IN operator and the multi selection of parameters. I really was delighted by the product and I was very interested in buying.»
Так что я желаю всем поменьше мучаться. Живем один раз и нет никакого смысла тратить свое время и нервы на испуганные поделки. Если, конечно, это не специфический способ получения удовольствия. Тогда «ой» 🙂
—
Ну а сам я, пожалуй, пожелаю чтобы у Firebird появилась хотя бы пара СВЕЖИХ разработчиков, которые бы немного расшевелили этот проект. Одного мало — он там погибнет 🙂
Привет всем.
Сегодня решил выпустить в свет небольшое обновление .NET провайдера — v1.4.
Основным и главным изменением является разделение NUGET-пакета на две части. В одном пакете находится сам ADO.NET провайдер (lcpi.data.oledb). Во втором пакете находится вспомогательная (инструментальная) библиотека (lcpi.lib).
Вот так сидишь, ласково матерясь, возводишь инфраструктуру нового модуля, а тебе приходит письмо от клиента:
Your devs seem to be the only ones in the world to be able to get 3rd party Interbase connectivity to work as advertised. Great work!
MonteNegro мне на сердце.
Как гласит народное предание, первыми словами обезьяны, когда она слезла с дерева, были — «раньше было лучше».
Созерцая глюки «Google Analytics», не могу с ней не согласиться.
Подготовка нового релиза
Dmitry Kovalenko on 9 ноября, 2017 | 1 Comment
Узнал (из последней книжки одного модного писателя современного классика), что у моего метода тестирования, до которого я допер сам и применяю уже почти 10 лет, есть название — BET (bounded exhaustive testing).
Переводится как ограниченное задалбывающее исчерпывающее тестирование.
Вчера осуществил задуманное и накатал простенький тест памяти, который запускается прямо из под Windows.
В качестве подопытного кролика была планка на 16GB, с которой возникла заминка (см. мой комментарий за 2017-10-20).
Как положено, сначала была простейшая однопоточная реализация, которая гоняла в цикле код вида:
void MemTest_001(void* const pvBeg,void* const pvEnd)
{
//последовательное заполнение одним и тем же значением
typedef unsigned char value_type;
const size_t nValues=(((const char*)pvEnd)-((const char*)pvBeg))/sizeof(value_type);
value_type* const beg=reinterpret_cast<value_type*>(pvBeg);
value_type* const end=beg+nValues;
value_type v=0;
for(;;++v)
{
std::fill(beg,end,v);
for(const value_type* p=beg;p!=end;++p)
{
const value_type m=*p;
if(m==v)
continue;
structure::str_formatter
fmsg("bad value [%1]. expected value [%2]. position [%3].");
fmsg<<m<<v<<size_t(p-beg);
throw std::runtime_error(fmsg.str());
}//for
if(v==std::numeric_limits<value_type>::max())
break;
}//for v
}//MemTest_001
Запустил на 16GB и не дождался пока этот тест отработает до конца.
Распределил работу этого теста между десятью потоками (процессор 6950X). Отработало приблизительно минут за двенадцать — обвязка тестов убогая, поэтому время измерялось на глаз.
Если честно, я не ожидал, что все будет так медленно.
Потом я накатал несколько других тестов, которые последовательно заполняют память. Отрабатывают, но, чувствую — что-то все не то.
(далее…)
На сайт загружена новая сборка IBProvider (3.47.0.27110), в которую внесены два изменения.
1. Изничтожено использование std::locale. Один из пользователей заслал стек падения внутри этой конструкции. Судя по всему, проблема связана с параллельным вызовом setlocale.
Этот std::locale уже один раз был причиной проблем в прошлом. Вот опять напомнил о себе.
2. Переписано последнее «наследство» от второй версии IBProvider — «сравнитель» значений OLEDB типов. 10 лет собирался это сделать. Я рад, что это наконец-то произошло.