30 сентября 2019

Delphi & Elasticsearch. Загрузка и индексирование файлов

    В статье "Полнотекстовый поиск по содержимому файлов" я рассказывал, что нужно сделать для загрузки файла на индексацию в Elasticsearch. Теперь подробно рассмотрим реализацию этого процесса на Delphi с использованием стандартных классов HttpClient и NetEncoding.
    Думаю, что будет более понятно если я включу описание реализации в качестве комментариев в текст процедуры индексации файла.
uses
  System.Classes,
  System.SysUtils,
  System.StrUtils,
  System.Hash,
  System.NetEncoding,
  System.Net.HttpClient,
  System.Net.HttpClientComponent;

const
  csBaseUrl = 'http://localhost:9200/';
...

26 сентября 2019

RAD Studio 10.3.2 C++ Debugging Patch

  Обновление устраняет баг, который не позволяет просмотреть значения переменных при отладке программ, собранных с помощью компилятора bcc32 (RSP-25943). Это ошибка аналогична ошибке, возникавшей при отладке программ, собранных с помощью компилятора Clang под Win32 (RSP-25527) и устраненной 14 августа 2019 г. в обновлении "RAD Studio 10.3.2 C ++ и Delphi Toolchain Patch". Текущее обновление устраняет проблему с просмотром значений переменных для обоих компиляторов (и для bcc32 и для Clang под Win32). Если вы устанавливаете оба эти исправления, то устанавливайте их в порядке выпуска.
    RAD Studio 10.3.2 C++ Debugging Patch - доступен только для зарегистрированных пользователей RAD Studio, Delphi, C ++ Builder 10.3 и All-Access.

Глобальная переменная - тормоз!

    В начале статьи Александра Алексеева "Что плохого в глобальных переменных?" меня зацепила фраза "быстрее в работе". Я хочу поспорить с ней и поддержать Александра в аргументах против глобальных переменных.
    Я давно заметил, одну маленькую неприятность с глобальными переменными. Проведем небольшой тест на создание, заполнение и чтение TStringList.

23 сентября 2019

Delphi & Linux. "Project raised exception class Segmentation fault (11)"

    Проверил новую версию программы под Windows - все работает нормально. Сразу делаю релизный билд под Linux, запускаю и получаю ошибку "Project XYZ raised exception class Segmentation fault (11)". Как это? Что это?
    Запускаю программу под отладкой под Linux и нахожу виновника ошибки. Им оказывается метод определения кодировки:

19 сентября 2019

Полнотекстовый поиск по содержимому файлов

    Многие программисты сталкиваются с тем, что их информационная система должна иметь полнотекстовый поиск. На помощь им приходят разработчики СУБД, которые предлагают свои решения. Встроенный механизм полнотекстового поиска есть у всех ведущих СУБД: Oracle, SQL Server, MySQL, PostgreSQL... Но не все они, как Oracle Text, умеют индексировать содержимое документов в форматах MS Office, PDF, XML, HTML... плюс к этому у многих есть проблемы с морфологией русского языка и производительностью.
    Единственным выходом является использование специальных поисковых систем. Наиболее распространенными являются системы построенные на базе библиотеки Lucene: Elasticsearch, Solr и Sphinx. Мой выбор пал на Elasticsearch.

16 сентября 2019

Запись в MS Excel. Кто быстрее?


    В марте этого года я протестировал скорость чтение информации из файла MS Excel библиотеками работающие с файлом MS Excel "напрямую" (Чтение из MS Excel. Кто быстрее?). Сегодня давайте взглянем, как эти библиотеки справляются с записью файла.
    Мой тест создает новый XLSX-файл с одним листом, на который записывает 10000 строк по 100 столбцов.
const
  ciRowCount = 10000;
  ciColCount = 100;
Каждая библиотека формирует файл 10 раз и результатом теста является среднее время. В качестве компилятора использована RadStudio v10.3.2. А результаты подтверждены на другом компьютере с компиляцией в RadStudio v10.3.1.

11 сентября 2019

Delphi & Linux. Выпусти своего демона

    В далеком 2003-м году один из наших заказчиков начал переход на Linux. Для него мы сделали свой первый проект на Kylix. Первый... и последний... Заигравшись с Microsoft компания Borland успешно похоронила Delphi под Linux... Спустя 15 лет после этого разработчики Delphi снова вернулись к теме Linux, выпустив в 2017 году Embarcadero Delphi 10.2 Tokyo с поддержкой Linux x86_64.
    Недавно мне понадобилось написать "службу", которая работает и под Windows и Linux. Оказалось, что все не просто, а очень просто.

09 сентября 2019

Новый генератор XLSX-файлов в EhLib 9.4

    В EhLib всегда была возможность экспорта содержимого DBGridEh в MS Excel. Но EhLib версии 9.4 была дополнена новым классом TXlsMemFileEh, который не привязан к DBGridEh и является настоящим генератором файлов в формате MS Excel. Т.е. при желании используя TXlsMemFileEh можно создавать XLSX-файлы на основании любых данных.

04 сентября 2019

FlexCel и "'msbuild.exe' is not recognized as an internal or external command"

    Решил я на сон грядущий установить последнюю версию TMS FlexCel под Delphi Rio. Инсталлятор успешно удалил старую версию библиотеки, но установку новой версии завершил ошибкой:
'msbuild.exe' is not recognized as an internal or external command
    В FlexCel Installation Guide по поводу этой ошибки написано "This version of the product does not support command line compiling" с намеком, что у меня Delphi Starter или Delphi Trial. И так как это не так, то единственный выход - это компиляция и установка пакетов библиотеки вручную. Устанавливать больше десяти пакетов вручную мне было лень, поэтому я начала искать другой выход.