Генеративный ИИ не подходит для точных наук. "Формулы" на КДПВ - бессмысленная белиберда, а кто даст гарантии, что и на уроках бот не будет галлюционировать? Да и ученик легко может "заболтать" бота и убедить его, что cos(pi)=4.
Возможно, не дали бюджет на подписки. Это ж надо издателям каждой игры крупно отсыпать, миллионов 100-300, чтобы они разрешили свою драгоценную игру запускать безлимитно. А сделали так, как безопасно для издателя - мы вашу игру продаём через свой магазин, вам от этого лишь халявный канал продаж.
Это подход примерно как "давайте не использовать мьютексы для доступа к общим данных, пока сами лично не столкнёмся с гонкой данных". Обычно же и без них всё работает. Вот когда на нашем проекте возникнут реальные проблемы, тогда и будем учитывать этот аспект.
Слишком дорого тестировать каждый билд. Например, UB сработает, если определённая инструкция располагается на адресе, кратном 16.
И вот, мы всё протестировали, потом появляется задачка доделать одну мелочь, которая никак не связана с UB-функцией. Новый код тестируется - там всё хорошо. А старый код сломался, потому что попал на другой адрес.
Не надо цепляться за символ йены. Проблема в коде 0x1B, и этот код чисто управляющий, как табуляция или перевод строки, даже не имеет знака в unicode. Все управляющие символы (коды 00-1F) надо обязательно экранировать.
Да, но код интерпретатора - это всё, что нужно положить в icache. В процессорах кеши растут, чем-то надо заполнять. Есть шанс, что даже в варианте расхода x12 поместится кусок с "горячим" набором опкодов.
и усложниться работа предсказателя ветвлений
А это наоборот хорошо. Когда в коде единая точка прыжка на следующую инструкцию, в начале цикла интерпретатора, предсказатель вообще сбит с толку, куда будет следующей прыжок.
Ситуация становится лучше, если дублировать переход на следующую инструкцию после каждой команды. У предсказателя появляются паттерны, например, в этой программе после ADD чаще всего CMP.
А если на каждую глубину стека своя ветка кода, предсказателю ещё больше информации - если на стеке 2 элемента - в этой программе после ADD будет PUSH, а если 3 элемента - будет CMP.
Интересно. Я знаю, что зелёный банк официально сотрудничает с Каспером и интегрирует его в своё приложение. А RuStore... Скачал apk с официального сайта, декомпилировал его утилитой apktool и слово kaspersky нашлось в 462 файлах (из 54057).
Молодцы, провели большую работу по интеграции. Главное, чтобы у них хватило запала поддерживать. А то новые версии Android пекутся каждый год, как горячие пирожки. И выйдет, как в Delphi в Windows - Microsoft выпустило DX SDK версии 9, на в комплекте с Delphi портированные хидеры только на DX5.
Скорее, придут ваши же клиенты вам бить морду за мошенничество. Потому что на одном провайдере работает bye-dpi, на другом не работает. На одном и том же провайдере сегодня работает, завтра не работает. А послезавтра все сети гугла вообще внесут null-route, как инстаграмм. На этом строить бизнес - это уровень АО МММ.
Добавить-то понятно можно. Оно без изменений перейдёт в apk-файл после компиляции. Интересно, как это вызывается. Как создать класс из jar в delphi-синтаксисе, можно ли от него отнаследоваться, чтобы получить delphi-класс.
Тут только кода интерпретатора кратно больше (кеш инструкций быстрее закончится), всё остальное быстрее будет работать.
Для простоты предположим, что в архитектуре всего 2 инструкции: PUSH <const> ADD
Делаем для этих инструкций N разных обработчиков, считая что i-тый обработчик работает со случаем, когда первые i ячеек стека лежат в регистрах x1, x2, ... xi
Помещаем эти обработчики в таблицы JmpTbl0, JmpTbl1, ... JmpTblN
И тогда обработчик PUSH для ветки 0 MOV x1, <const> jmp JmpTbl1[nextopcode] ; переходим к ветке N=1
Обработчик PUSH для ветки 1 MOV x2, <const> jmp JmpTbl2[nextopcode] ; переходим к ветке N=2
Обработчик ADD ветки 2 - оба аргумента в регистрах, результат оставляем тоже в регистре ADD x1, x2, x1 jmp JmpTbl1[nextopcode] ; переходим к ветке N=1
Обработчик ADD ветки 1 - один аргумент в регистре, второй вытеснен в память ADD x1, [sp], x1 INC sp jmp JmpTbl1[nextopcode] ; остаёмся на ветке N=1
Муравьеворот (спираль смерти, карусель смерти) — природное явление, состоящее в том, что один или небольшая группа муравьёв, на первый взгляд совершенно беспричинно, начинает бегать по замкнутому кругу, постепенно вовлекая в свой бесконечный цикл всё больше и больше других муравьёв
Со стороны телевизора - да. А со стороны смартфона, некоторые производители специально убирают функцию трансляции с моделей нижнего ценового диапазона, позиционируя её как фичу "флагманов". Я помню, меня один знакомый пытал, как подружить бюджетник Galaxy J4 с ТВ, в итоге он поменял смарт.
Т.е. их можно использовать в клиенте. Именно так это и подразумевалось делать. Мы описываем классы таблиц в отдельных модулях, или даже целую схему
Ну имеется ввиду, что uses SQLG.Field, SQLG.Table хочется вообще убрать с клиента. Хотя, учитывая скорость компиляции Delphi и то, что компилятор вырежет всё лишее, не должно быть проблемой.
Но мне больше нравится подход, когда мы получаем только нужные данные, т.е. именно датасетами
В EF тоже с этим нет проблем, под это даже придумали концепцию "анонимных классов". То есть, язык сильно расколбасили конкретно под ORM-ы и работу с данными
var clientShortInfo = dbContext.Orders
.Where(order => order.Date < DateTime.Today.AddDays(-2))
.Select(order => new { order.Id, order.Client.Fio, order.Client.City.Name });
и будет конкретный SQL select с указанными полями и join-ами. Но при этом более эффективный по памяти, т.к. используется анонимный класс с конкрентыми типизированными полями, а не абстрактный dataset, у которого все поля типа Variant, и плюс сверху - метаинформация.
На удивление мало
Генеративный ИИ не подходит для точных наук. "Формулы" на КДПВ - бессмысленная белиберда, а кто даст гарантии, что и на уроках бот не будет галлюционировать? Да и ученик легко может "заболтать" бота и убедить его, что
cos(pi)=4
.Возможно, не дали бюджет на подписки. Это ж надо издателям каждой игры крупно отсыпать, миллионов 100-300, чтобы они разрешили свою драгоценную игру запускать безлимитно. А сделали так, как безопасно для издателя - мы вашу игру продаём через свой магазин, вам от этого лишь халявный канал продаж.
Это подход примерно как "давайте не использовать мьютексы для доступа к общим данных, пока сами лично не столкнёмся с гонкой данных". Обычно же и без них всё работает. Вот когда на нашем проекте возникнут реальные проблемы, тогда и будем учитывать этот аспект.
Слишком дорого тестировать каждый билд. Например, UB сработает, если определённая инструкция располагается на адресе, кратном 16.
И вот, мы всё протестировали, потом появляется задачка доделать одну мелочь, которая никак не связана с UB-функцией. Новый код тестируется - там всё хорошо. А старый код сломался, потому что попал на другой адрес.
Не надо цепляться за символ йены. Проблема в коде 0x1B, и этот код чисто управляющий, как табуляция или перевод строки, даже не имеет знака в unicode. Все управляющие символы (коды 00-1F) надо обязательно экранировать.
Да, но код интерпретатора - это всё, что нужно положить в icache. В процессорах кеши растут, чем-то надо заполнять. Есть шанс, что даже в варианте расхода x12 поместится кусок с "горячим" набором опкодов.
А это наоборот хорошо. Когда в коде единая точка прыжка на следующую инструкцию, в начале цикла интерпретатора, предсказатель вообще сбит с толку, куда будет следующей прыжок.
Ситуация становится лучше, если дублировать переход на следующую инструкцию после каждой команды. У предсказателя появляются паттерны, например, в этой программе после ADD чаще всего CMP.
А если на каждую глубину стека своя ветка кода, предсказателю ещё больше информации - если на стеке 2 элемента - в этой программе после ADD будет PUSH, а если 3 элемента - будет CMP.
Интересно. Я знаю, что зелёный банк официально сотрудничает с Каспером и интегрирует его в своё приложение.
А RuStore... Скачал apk с официального сайта, декомпилировал его утилитой apktool и слово kaspersky нашлось в 462 файлах (из 54057).
У меня сети meta давно полностью заблокированы. В отличие от гугла.
Молодцы, провели большую работу по интеграции.
Главное, чтобы у них хватило запала поддерживать. А то новые версии Android пекутся каждый год, как горячие пирожки. И выйдет, как в Delphi в Windows - Microsoft выпустило DX SDK версии 9, на в комплекте с Delphi портированные хидеры только на DX5.
Скорее, придут ваши же клиенты вам бить морду за мошенничество.
Потому что на одном провайдере работает bye-dpi, на другом не работает.
На одном и том же провайдере сегодня работает, завтра не работает. А послезавтра все сети гугла вообще внесут null-route, как инстаграмм.
На этом строить бизнес - это уровень АО МММ.
Добавить-то понятно можно. Оно без изменений перейдёт в apk-файл после компиляции.
Интересно, как это вызывается. Как создать класс из jar в delphi-синтаксисе, можно ли от него отнаследоваться, чтобы получить delphi-класс.
Видимо, масштабы несопоставимы. Условного Дудя из России посмотрит 7 миллионов, есть ли англоязычный ролик, который наберёт столько просмотров из РФ?
Тут только кода интерпретатора кратно больше (кеш инструкций быстрее закончится), всё остальное быстрее будет работать.
Для простоты предположим, что в архитектуре всего 2 инструкции:
PUSH <const>
ADD
Делаем для этих инструкций N разных обработчиков, считая что i-тый обработчик работает со случаем, когда первые i ячеек стека лежат в регистрах x1, x2, ... xi
Помещаем эти обработчики в таблицы JmpTbl0, JmpTbl1, ... JmpTblN
И тогда обработчик PUSH для ветки 0
MOV x1, <const>
jmp JmpTbl1[nextopcode] ; переходим к ветке N=1
Обработчик PUSH для ветки 1
MOV x2, <const>
jmp JmpTbl2[nextopcode] ; переходим к ветке N=2
Обработчик ADD ветки 2 - оба аргумента в регистрах, результат оставляем тоже в регистре
ADD x1, x2, x1
jmp JmpTbl1[nextopcode] ; переходим к ветке N=1
Обработчик ADD ветки 1 - один аргумент в регистре, второй вытеснен в память
ADD x1, [sp], x1
INC sp
jmp JmpTbl1[nextopcode] ; остаёмся на ветке N=1
Это же адреса гипертекстового векторного Фидонета 2:5020/54.46 и иже с ними.
Сядет на пенёк, закурит, и помашет рукой вслед улетающему к Земле кораблю.
Со стороны телевизора - да. А со стороны смартфона, некоторые производители специально убирают функцию трансляции с моделей нижнего ценового диапазона, позиционируя её как фичу "флагманов". Я помню, меня один знакомый пытал, как подружить бюджетник Galaxy J4 с ТВ, в итоге он поменял смарт.
Ну имеется ввиду, что
uses SQLG.Field, SQLG.Table
хочется вообще убрать с клиента. Хотя, учитывая скорость компиляции Delphi и то, что компилятор вырежет всё лишее, не должно быть проблемой.В EF тоже с этим нет проблем, под это даже придумали концепцию "анонимных классов". То есть, язык сильно расколбасили конкретно под ORM-ы и работу с данными
и будет конкретный SQL select с указанными полями и join-ами. Но при этом более эффективный по памяти, т.к. используется анонимный класс с конкрентыми типизированными полями, а не абстрактный dataset, у которого все поля типа Variant, и плюс сверху - метаинформация.
Смотреть спецификации ТВ и смарта. Поддержка MirrorLink, Miracast и т.п., не знаю, что сейчас актуально, давно не интересовался.
Может получиться, что ТВ поддерживает одно, а смартфон - другое. Ещё, у Samsung есть свои протоколы для смартфонов и телевизоров.