Cobalt747
Вас приветствует экипаж Cobalt747, полет нормальный
воскресенье, 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)/
А вот инфа о простом консольном проекте
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.
Сделал виртуалку с 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;из systemmonitor
{$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.
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:
- в case нельзя оперировать диапазонами как в Pascal:
- удивительно, что VS 2017 не удаляет пробелы в конце строки. Может, для этого есть какая-то настройка, но мне пока её обнаружить не удалось
Что понравилось:
- невизуальные компоненты на форме - диалог, таймер - они отображаются на панели отдельно
- можно скопировать часть текста из результатов поиска по решению
Очень непривычно:
- у функций нет 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/
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Кб
Как говорится, во-первых, не было снарядов...
(например, 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%" на что-то другое")
простой пример
Кстати, а запускается программа под отладку из каталога
/home/user1/PAServer/scratch-dir/User-Ubuntu/LinuxTest
/home/user1/PAServer/ - здесь у меня распакован PAServer
А еще скоро будет семинар - 19 апреля
Решил взяться за это, сделал себе виртуалку, ставлю на неё последнюю 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;прекрасно создал файлы, который Kate - Advanced Text Editor прекрасно понял и распознал кодировку.
{$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.
Кстати, а запускается программа под отладку из каталога
/home/user1/PAServer/scratch-dir/User-Ubuntu/LinuxTest
/home/user1/PAServer/ - здесь у меня распакован PAServer
А еще скоро будет семинар - 19 апреля
понедельник, 8 августа 2016 г.
воскресенье, 29 мая 2016 г.
VmWare и расшаренные каталоги
Чтобы организовать расшаренные папки в OpenSuse, пришлось воспользоваться советом
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2016514
https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2016514
четверг, 29 октября 2015 г.
ZEOS DB
Посмотрел (глянул мельком) компоненты доступа ZEOS
Жаль, что нет специального управления транзакциями.
Жаль, что нет специального управления транзакциями.
четверг, 2 июля 2015 г.
четверг, 21 мая 2015 г.
Демонстрация мобильного приложения
Искал чем можно показать экран мобильного приложения, чтобы можно было вывести на большой экран проектора, и нашел сервис http://www.mobizen.com
Для моего Samsung Galaxy Core 2 Dual прекрасно подошёл.
Для моего 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;
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-сервер на клиенте и подключаться к нему...
На время ожидания обработки запроса сервером буду показывать popup-форму ожидания, закрывающуюся по обработчику OnTerminate потока.
Естественно, это уже не анонимный поток, а специфический.
Ещё появилась необходимость передавать вызов процедуры с большим количеством параметров с сервера на клиент.
Пока что сделал регистрацию клиентской функции и ручками разворачиваю JSON в набор параметров.
Не хватает автоматической генерации обвязки как у серверных методов.
Есть мысль попробовать сделать Datasnap-сервер на клиенте и подключаться к нему...
вторник, 18 ноября 2014 г.
понедельник, 3 ноября 2014 г.
XE7 - Дизайнер форм
Одна из непривычных вещей, которую я обнаружил в XE7 - это измененный дизайнер.
Более никаких точных по размерам форм - только резиновый слой.
6 форм-факторов под Андроид с примерными размерами.
правда, мой 5" Galaxy S4 определялся как 4"-ый телефон, но это не существенно - контролы отображались примерно так же как и на макете.
Непростая часть - расположить контролы на макете так, чтобы они перемещались самостоятельно на основе правил.
Тут помогают слои (TLayout) с новыми видами выравнивания, например Align = HorzCenter
Более никаких точных по размерам форм - только резиновый слой.
6 форм-факторов под Андроид с примерными размерами.
правда, мой 5" Galaxy S4 определялся как 4"-ый телефон, но это не существенно - контролы отображались примерно так же как и на макете.
Непростая часть - расположить контролы на макете так, чтобы они перемещались самостоятельно на основе правил.
Тут помогают слои (TLayout) с новыми видами выравнивания, например Align = HorzCenter
Подписаться на:
Сообщения (Atom)