воскресенье, 11 июля 2021 г.

Good tool for automatic images's parsing - Sikulix

I have a game - gotcha, with a lot of items for my heroes And i wanted to find a best combination of items for each of them. i play on the Ipad, and on an emulator on my PC. And i remember - two years ago my coworker thought to use Sikulix to automate testing of our software.
So, after 4 days of investigation (thank to my holiday), i do it! All my 500 items was parsed, most of all thanks to Tesseract After that, i have to parse https://epic7x.com to take a full list of heroes and it's stats I use Delphi CEF for this.

воскресенье, 26 апреля 2020 г.

Delphi 10.3.3 + Linux

Решил попробовать еще раз - что там как на Линуксе.
Сделал виртуалку с Mint 19.3 (всё по умолчанию)
поставил пакет open-vm-tools. добавил общую папку, скопировал Paserver из поставки
Paserver запустился

Запустил создание SDK в Delphi - поругалось на дубликаты заголовочников, на что я ничтоже сумняшеся сказал - переписывай нафиг.

Простейший консольный проект не скомпилировался - не смог найти модули
  C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\ld-linux.exe: error: cannot find -ldl
  C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\ld-linux.exe: error: cannot find -lpthread
  C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\ld-linux.exe: error: cannot find -lm

чё за фигня - непонятно.
Решил попробовать с рекомендуемой Убунтой.
Сделал виртуалку с Kubuntu 18.04 (так же всё по умолчанию)
запустил PAServer

сделал SDK - такая же фигня.

Стал копать в пакетах - ополучалось что нет заголовочников для gcc
посмотрел - в списка пакетов у меня есть gcc-7-base
поставил к нему пает libgcc-7-dev
Обновил SDK - проект скомпилировался

Но вот при запуске уже среда  ругалась на отсутствие коннекта с виртуалкой Mint (я её выключил)

Оказалось, что в настройках отделяются SDK и Connection Profile, и каждый из них надо отдельно задавать "По умолчанию" - в файле проекта это не настраивается - только в IDE.


при запуске из среды, файл проекта сохраняется в каталоге
/home/(user)/PAServer/scratch-dir/user1-Kubuntu 18.04/(project name)/

А вот инфа о простом консольном проекте
program LinuxTest;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  try
    writeln('Это линукс-тест من يحكم ألمانيا، وما الذي يشغل السياسة');
    writeln('Press Enter to continue');
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
из systemmonitor
Summary

The process LinuxTest (with pid 10949) is using approximately 5.3 MB of memory.
It is using 4.1 MB privately, and a further 5.6 MB that is, or could be, shared with other programs.
Dividing up the shared memory between all the processes sharing that memory we get a reduced shared memory usage of 1270.0 KB. Adding that to the private usage, we get the above mentioned total memory footprint of 5.3 MB.
Library Usage

The memory usage of a process is found by adding up the memory usage of each of its libraries, plus the process's own heap, stack and any other mappings.


среда, 22 апреля 2020 г.

Контрастный фон для цветного текста

Понадобилось как-то мне показать диалог настройки шрифта с примером этого текста.

Пока цвет текста был темный - он нормально смотрелся на стандартном светло-сером фоне.
Но вот уже светлый шрифт смотрелся уже не очень.

Решение нашлось довольно простое:
procedure TFontSelectDialog.FontChange(Sender: TObject);
var
  Cl: TColor;
  red, green, blue: Byte;
begin
  pnlBackGround.Font.Assign(FEditedFont);
  Cl := ColorToRGB(FEditedFont.Color);
  red := Cl and $FF;
  green := (CL shr 8) and $FF;
  blue := (CL shr 16) and $FF;

  Cl := clSilver;
  if (1 - (0.299 * red + 0.587 * green + 0.114 * blue) / 255 < 0.5) then
      // светлый шрифт
    ChangeBrightness(Cl, 0.2)
  else  // темный шрифт
    ChangeBrightness(Cl, 0.92);
  pnlBackGround.Color := Cl;
end;

воскресенье, 7 апреля 2019 г.

C#

Начал изучать C#, и чтобы было интереснее, взялся за одну небольшую утилиту из Фронтола.

Очень непривычно:
- у функций нет Result
- Все обращения к функциям - только со скобками
- все значения типов - с префиксом класса
- нельзя объявить массив с адресацией кроме как по целому идентификатору, как в Pascal:
const 
  StrArr: array [boolean] of string = ('неправильно', 'правильно');

- в case нельзя оперировать диапазонами как в Pascal:
    case AStr[i] of
    '0'..'9': Result := Result + (ord(AStr[i]) - ord('0')) shl sl;
    'A'..'F': Result := Result + (ord(AStr[i]) - ord('A') + 10) shl sl;
    'a'..'f': Result := Result + (ord(AStr[i]) - ord('a') + 10) shl sl;
    else
      Abort;
    end;
- непонятно почему если в решении есть библиотека и приложение, после запуска приложения из под отладки, активным проектом каждый раз становится библиотека.
- удивительно, что VS 2017 не удаляет пробелы в конце строки. Может, для этого есть какая-то настройка, но мне пока её обнаружить не удалось


Что понравилось:
- невизуальные компоненты на форме - диалог, таймер - они отображаются на панели отдельно
- можно скопировать часть текста из результатов поиска по решению

понедельник, 23 апреля 2018 г.

Из подслушанного

"В классе, который не компонент, события нахер не надо" (имеется в виду объявления полей типа TNotifyEvent)

вторник, 13 февраля 2018 г.

Очень жизненно

Далее. За счет появления новой прослойки толмачей, time-to-market обычно только растет, а не сокращается. Сюрприз.
Плюс для реальной автоматизации детализация процессов нужна очень высокая, а на таком уровне все постоянно изменяется, и ресурсы описаторов процессов уходят на то, чтобы актуализировать старое, а на описание нового уже нет времени. Дело даже не в том, что штат этих бизнес-аналитиков, которые value особо не создают, в короткие сроки становится сопоставим со штатом разработчиков. Проблема в том, что они то это знание должны у бизнеса сначала получить. И чем больше они задают вопросов бизнесу, тем меньше у бизнеса времени на выполнение основных обязанностей. Спустя короткое время это приводит или к тому, что начинает страдать дело, или к тому, что этих описаторов посылают лесом и возникают гэпы в описании. Впрочем, даже если все описано идеально...case-инструменты классы и прочий код генерить то генерят, но делают это ужасно. И.т.д.

Ну и по "мелочи". Есть веские причины, почему идеи "а давайте ка с нуля сделаем все, как надо, чтобы все стройно было" ничем хорошим обычно не заканчиваются. Весь этот спагетти-код, который вызывает лютый баттхерд у диванных теоретиков, на самом деле содержит адское количество костылей, которые возникли не из-за тупости разработчиков, а из-за наличия каких-то нюансов в законах, узких мест или исключений в процессах или специфики ИТ-ландшафта, которым имя ЛЕГИОН. Они мелкие, несущественные, но их МНОГО. И отсутствие одного такого костыля, это лютый батхерд десятка или сотни клиентов, у которых что-то будет работать не так. У миллиона будет работать ок, все по теории, а у 100 нет. И таких костылей обычно МНОГО. И переписывать все это с нуля, особенно без понимания, какие костыли на самом деле не костыли, а часть несущей стены, потом тестировать (или последовательно перечислять все эти исключения при описании процессов - не суть важно) - убиЦЦо просто.

(c)  http://www.sql.ru/forum/894851-205/chto-seychas-proishodit-v-it-sbera?mid=20678369#20678369

пятница, 21 апреля 2017 г.

Kubuntu 16.04 + VirtualBox 5.1.18

Kubuntu 16.04 + VirtualBox 5.1.18
после установки дополнения гостевой ОС, рабочий стол накрылся.
Да и прочие экраны логина накрылись.
Бэкап рулит.

среда, 19 апреля 2017 г.

Firebird + Ubuntu

Запуск firebird 2.5 под Убунтой (16.04):

service firebird2.5-super start

ну или какую другую версию вы выбрали

Каталог для UDF:
/usr/lib/firebird/2.5/UDF
Каталог для конфига:
/etc/firebird/2.5/


Импорт библиотек под Linux

Чтобы можно было слинковать наше приложение или библиотеку с другой - она должна быть в каталоге с соответствующей SDK.
(например, C:\Users\User\Documents\Embarcadero\Studio\SDKs\ubuntu16.04.sdk\)
Так что, боюсь, написание многобиблиотечных приложений под Linux пока будет непростым.


Посмотрим же почему у нас приложения под Linux такие большие:
1) Большой самый основной модуль - System (релизный) - 1280 Кб
причём импортируются всего две бибилотеки:
libicuuc.so
libicui18n.so
Ну и в сам System включается куча всяческих POSIX.XXX модулей

SysInit - 300Кб

Как говорится, во-первых, не было снарядов...

воскресенье, 16 апреля 2017 г.

Delphi + Linux

Один из клиентов пожаловался, что для нашей базы под Firebird нужна UDF, а её нет под линукс.
Решил взяться за это, сделал себе виртуалку, ставлю на неё последнюю KUbuntu 17.04 (наверно, все баги исправлены, все дела))))

Из коробки - подхватился роутер, получил IP
Сайты не открываются.
Ок, прописал гугловский красивый ДНС.
Яндекс открывается, Лазарус открывается, ubuntu.com - нет.

стал рыть,  - ifconfig из коробки нет.
Нашел таки что это какой-то новый механизм разрешения имён:
http://news.softpedia.com/news/ubuntu-16-10-yakkety-yak-switches-to-a-universal-local-dns-resolver-service-504770.shtml
рецепт из  https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1624320  не помог.

Решил попробовать PAServer от новой дельфи - на OpenSuse x64 42.3 - падает с Segmentation fault из под обычного юзера
из под рута - молча ничего не делает и сразу закрывается.
Так как Embarcadero задекларировали что поддерживают с Ubuntu 16.04 LTS, поставил её.
Однако тут не всё так хорошо - в отличие от Suse, она не берет адрес от роутера (настройки VirtualBox такие же как и у Suse)
Хотя прекрасно пингует и роутер и хост Win8

Оказалось, что Ubuntu не приемлет NAT (который подходит для Suse)  - только сетевой мост.

В итоге, после заведения SDK для Линукса
В процессе которого вы, наверняка, увидите не одно сообщение о дублировании имен файлов, получим такой вот
После того как я скомпилировал и запустил приложение из среды, я...
Ничего не увидел! :)
Видимо, не предусмотрели опций для ввода/вывода из под отладчика.
потому что надо было:
1) Enabling Use launcher application in the Run|Parameters
2) Установить XTerm 

(наверняка можно использовать и другой терминал, если помнять по умолчанию опцию в проекте (раздел Debugger, "Use launcher application") с "/usr/bin/xterm -e "%debuggee%" на что-то другое")

простой пример
program LinuxTest;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, Classes;

var
  s: TStringList;
begin
  try

    { TODO -oUser -cConsole Main : Insert code here }
    s := TStringList.Create;
    try
      s.Add('Проверка!');
      s.SaveToFile('/home/user1/UTF8.txt', TEncoding.UTF8);
      s.SaveToFile('/home/user1/win1251.txt', TEncoding.GetEncoding(1251));
    finally
      s.Free;
    end;
  except

    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
прекрасно создал файлы, который Kate - Advanced Text Editor прекрасно понял и распознал кодировку.

Кстати, а запускается программа под отладку из каталога
/home/user1/PAServer/scratch-dir/User-Ubuntu/LinuxTest
/home/user1/PAServer/ - здесь у меня распакован PAServer

А еще скоро будет семинар - 19 апреля


понедельник, 8 августа 2016 г.

Книга по БД

http://www.arbinada.com/node/1372
Надо будет купить, почитать.

воскресенье, 29 мая 2016 г.

VmWare и расшаренные каталоги

Чтобы организовать расшаренные папки в OpenSuse, пришлось воспользоваться советом
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2016514

четверг, 29 октября 2015 г.

ZEOS DB

Посмотрел (глянул мельком) компоненты доступа ZEOS
Жаль, что нет специального управления транзакциями.

четверг, 2 июля 2015 г.

За что я люблю  Delphi -  можно довольно легко поменять среду кое в чём.
Надо было увеличить ширину, чтобы не лазить по двум строкам вкладок, и видеть все строки VersionInfo.
Restorator 2007 помог мне в том:

четверг, 21 мая 2015 г.

Демонстрация мобильного приложения

Искал чем можно показать экран мобильного приложения, чтобы можно было вывести на большой экран проектора, и нашел сервис http://www.mobizen.com

Для моего Samsung Galaxy Core 2 Dual прекрасно подошёл.

среда, 20 мая 2015 г.

Таймауты

 Черт побери, почему именно 5 секунд на вызов обратной функции, Карл?!

procedure TDSClientCallbackChannelManager.Invoke(const Id: string;
  Data: TJSONValue; out Response: TJSONValue);
var
  Item: TDSCallbackItem;
  Callback: TDBXCallback;
  ExecThread: TDSExecuteThread;
begin
  TMonitor.Enter(FLocalCallbackRepo);
  try
    if FLocalCallbackRepo.TryGetValue(Id, Item) then
    begin
      Callback := Item.Callback;
      try
        TMonitor.Enter(Callback);
        ExecThread := TDSExecuteThread.Create(Callback, Data);

        if not TMonitor.Wait(Callback, 5000) then
          ExecThread.Terminate;

        Response := ExecThread.Response;

среда, 13 мая 2015 г.

Потихоньку ваяю клиент-серверное приложение, применяя Datasnap Callback.
На время ожидания обработки запроса сервером буду показывать popup-форму ожидания, закрывающуюся по обработчику OnTerminate потока.
Естественно, это уже не анонимный поток, а специфический.

Ещё появилась необходимость передавать вызов процедуры с большим количеством параметров с сервера на клиент.
Пока что сделал регистрацию клиентской функции и ручками разворачиваю JSON в набор параметров.
Не хватает автоматической генерации обвязки как у серверных методов.

Есть мысль попробовать сделать Datasnap-сервер на клиенте и подключаться к нему...

вторник, 18 ноября 2014 г.

Программист должен быть "отцом". Иначе - вайп.

понедельник, 3 ноября 2014 г.

XE7 - Дизайнер форм

Одна из непривычных вещей, которую я обнаружил в XE7 - это измененный дизайнер.
Более никаких точных по размерам форм - только резиновый слой.
6 форм-факторов под Андроид с примерными размерами.

правда, мой 5" Galaxy S4 определялся как 4"-ый телефон, но это не существенно - контролы отображались примерно так же как и на макете.


Непростая часть - расположить контролы на макете так, чтобы они перемещались самостоятельно на основе правил.
Тут помогают слои (TLayout) с новыми видами выравнивания, например Align = HorzCenter

вторник, 2 сентября 2014 г.

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