Chat:Ru/2021-02-12
magaiti: свич в сях как бы казалось бы да, но зависит от архитектуры
magaiti: но мы про высокоуровневые языки
magaiti: насколько я помню, свич в перле был сделан через рефлексию, это еще страшнее чем в питоне
suuuumcaa: я ищу наставника для работы, мой телеграм @suuuumcaa
MadKnight: magaiti а шарпы - это низкоур или высокоур ?
magaiti: шарпы это джава
magaiti: мелкомягкая
MadKnight: так низк или высок ?
MadKnight: magaiti
Uljahn: точно не низкоуровневый, т.к. ВМ-прослойка
MadKnight: ну вот
MadKnight: значит я тоже "про высокоуровневые языки"
Uljahn: высокоуровневые ближе к человеческим, т.е. питон выше :)
MadKnight: Automaton2000 вопрос решён, день пройдён не зря
Automaton2000: two negative temperatures that are equal: {-10 -10}
MadKnight: функциональные могли бы быть ближе
MadKnight: но там в итоге просто сделали всё константами
MadKnight: общался тут с челом который кодит на f#
MadKnight: это ФП версия шарпов
MadKnight: рассказал ему что задумывались не константы, и что константы - это вообще не то
depthzer0: и как он? пережил?
MadKnight: он подумал подумал
MadKnight: и понял, что так-то правда
MadKnight: там суть в том, что нужно было делать не просто константы, а автоматический dependency resolver чтобы значения обновлялись сами
MadKnight: depthzer0 тыж знаешь что такое ФП ?)
magaiti: берите лучше котлин, фп версия джавы
MadKnight: да зачем джава когда есть шарпы
MadKnight: заметно улучшенная версия джавы
magaiti: шарпы чтоб окошечки делать, а джава чтоб бэкенд
magaiti: чем она улучшенная
depthzer0: MadKnight ФП? конечно - фейспальм
magaiti: тем что проприетарно майкрософтовскач?
MadKnight: на шарпах уже давно бэкенды пилят
MadKnight: уже куча бэкендов
MadKnight: уже не проприетарно
MadKnight: они уже давно зарелизили открытый dotnet который и под линь и под веб
MadKnight: и исходники открытые
MadKnight: проприетарным остался только виндовый WPF, который как раз чтобы окошечки делать
MadKnight: но это библиотека
MadKnight: можешь не подключать
magaiti: ну хз, мне насрать. я на плюсах
MadKnight: затести dotnet
MadKnight: он даже без студии идёт
MadKnight: просто как консольный компилятор шарпов
MadKnight: как gcc + менеджер проектов
MadKnight: ты же под линем?
magaiti: я на винде
magaiti: мне не уперлось дотнет тестить, у нас фреймворк на плюсах весь
magaiti: плюс питон для скриптов
MadKnight: плюсы с шарпами можно совмещать
magaiti: но зачем
MadKnight: плюсы слишком низкоуровневые
MadKnight: иногда лень вручную пилить большие циклы когда на шарпах можно в 1 запрос написать
magaiti: не знаю, у меня нет таких проблем
magaiti: забей
MadKnight: лол
MadKnight: а над чем ты работаешь?
magaiti: система автоматического тестирования офисных приложений
magaiti: дата дривен
MadKnight: о
MadKnight: всмысле дата дривен
magaiti: детали тестов в экселе пишутся, экспортируются в текст и оттуда всасываются экзешником на плюсах
MadKnight: ооо
MadKnight: парсер экселя пилил?)
MadKnight: всм конвертер из экселя в данные
magaiti: парсер текста запилен давно
magaiti: эксель умеет экспортировать в текст
MadKnight: а чё вообще за детали тестов?
MadKnight: сначала пилится скелет теста потом в деталях задаются параметры чтобы прогнать их через один и тот же скелет?
magaiti: что вводить в какие окошки, какие кнопки нажимать в диалогах
magaiti: да
depthzer0: как на питоне можно короче написать условие для двух переменных, которые в одном диапазоне должны быть?
0 < a < 10 and 0 < b < 10
magaiti: а питон понимает 0 < a < 10 ?
magaiti: обычно ндо расписывать 0 < a && a < 10
MadKnight: ну так вот, в каком виде задаётся скелет теста?
magaiti: в виде кода
MadKnight: magaiti ага, питон это понимает
magaiti: на плюсах
depthzer0: понимает
MadKnight: magaiti фу, мы юзали приложуху где юзер может выполнить действия и прога сгенерит код, тестирующий те же самые действия
magaiti: это все игрушки
magaiti: нужно правильно реагировать на разные действия программы
magaiti: автокликер не помогает
MadKnight: дальше уже там в сгенеренном коде прописываются проверки
MadKnight: как и у тебя
MadKnight: просто действия генерятся
lopidav: автокликер это это инструмент, просто юзать правильно нужно и не полагаться на него полностью
MadKnight: это автокликер-тестировщик
MadKnight: он тестирует UI
magaiti: мы тоже юзали, проблема в том что он генерит код не на плюсах, а на проприетарном языке
lopidav: а нейронки еще не юзаются в тестировании?
MadKnight: а где их там юзать?
magaiti: может где-то и юзаются, но не у нас
magaiti: распознавать че-нить, хз
lopidav: ну чтобы симулировать действия юзера, то как он будет лазить по страницах. Еще что-то наверное можно
MadKnight: типа автоматический генератор тестов?)
lopidav: типа того
MadKnight: так для этого проге нужно знать всю логику и бизнес-схему проги
magaiti: не все тесты одинаково полезны
MadKnight: а для этого проще сделать на ФП языке
lopidav: но это другое. Нейронки это скорее тест юзабилити и ux
MadKnight: и чтобы сразу идеально и без багов либо критикал еррор при компиляции
MadKnight: либо ты сам прописал неправильную логику
Uljahn: так наоборот же надо тестировать нестандартное поведение юзера, когда он тыкает не туда, вроде fuzzing для этого используют
magaiti: тогда надо симулятор заказчика, чтоб он выдавал итог в виде доволне/ не доволен
magaiti: а это фантастика
magaiti: пьяный юзер
MadKnight: не, это ты пролетел
MadKnight: я говорил про то когда есть идеальное ТЗ и ты абстрактно это задаёшь
magaiti: идеальное тз это фантастика
MadKnight: просто тз
MadKnight: а всякая однозначная низкоуровневая фигня генерится
MadKnight: как генерится асм из с++
magaiti: заказчик всегда приходит с просьбами сделат ьто не знаю что, но лучше чем у конкурентов
MadKnight: любое тз
MadKnight: просто тз
MadKnight: и ты его реализуешь идеально
magaiti: так не бывает
magaiti: просто тз как правило содержит противоречивые ттребования
magaiti: надо ними надо сидеть и думать
magaiti: беседовать с заказчиком
MadKnight: > либо критикал еррор при компиляции
MadKnight: это оно и будет
magaiti: да не будет
magaiti: там надо выбрать алгоритм, например
MadKnight: ну да, потому что ты это заметишь раньше
MadKnight: алгоритм для реализации какой-то фичи?
magaiti: да
MadKnight: ну выбери
MadKnight: do x with (y, z) using algo A
magaiti: ну так в выборе и проблема
MadKnight: так потому что когда ты программируешь - ты затачиваешь решение под определённую ситуацию
MadKnight: для того придумали ФП
MadKnight: но они зафейлились и сделали всё просто константами
MadKnight: и это ничего не решило
MadKnight: именно "программируешь"
MadKnight: именно когда ты пишешь реализацию определённой логики
magaiti: при чем тут фп вообще
MadKnight: вместо использования библиотеки, где эта логика уже реализована
MadKnight: фп как раз решал проблему абстракции стандартных штук чтобы ты мог выбирать
magaiti: фп это что?
MadKnight: стандартные вещи для совсем необычных проектов
Uljahn: так IO не может быть константой, приходится нечистые функции придумывать, сайдэффекты учитывать, не?
MadKnight: функц прог
MadKnight: Uljahn речь не об IO
magaiti: ты не о тех алгоритмах думаешь
MadKnight: да я вообще об алгоритмах
MadKnight: а ты о чём?
magaiti: в STL нет стандартного алгоритма решения задачи коммивояджера или Рунге-Кутта N-го порядка
MadKnight: как запилить алгоритм так, чтобы он был достаточно абстрактным чтобы подходить под любые самые неожиданные условия, при этом чтобы он был оптимизирован и удобен?
magaiti: или решения геодезических задач
MadKnight: ты знаешь как на с++ запилить максимально универсальный алгоритм решения задачи коммивояджера или Рунге-Кутта N-го порядка ?
MadKnight: или просто BFS
magaiti: а должен?
MadKnight: а как ты ещё на уровень выше (я про уровни асм / c++ / python) поднимешься?
MadKnight: выше на уровень абстракции
magaiti: а ты знаешь как запилить на питоне?
MadKnight: чтобы прописывать логику
MadKnight: и использовать готовые реализации алгоритмов
MadKnight: даже если необычные условия
MadKnight: я знаю как и на с++ запилить, но с большой потерей производительности
MadKnight: и немного читабельности
magaiti: нет готовых реализаций, есть формальное описание алгоритма и примеры кода
magaiti: и их надо подгонять под свои нужны
MadKnight: вопрос в том, знаешь ли ты как запилить универсально, оптимизированно и удобно?
MadKnight: чтобы можно было использовать для своих нужд и не переписывать с -
MadKnight: с 0
magaiti: зачем мне универсально, я решаю конкретную задачу
MadKnight: чтобы использовать в своей задаче
MadKnight: уже готовое
MadKnight: готовый алгоритм
Uljahn: у алгоритмов есть свойства асимптотической сложности, причём по скорости и по памяти отдельно, оптимальность будет разная при разных требованиях, не?
magaiti: да не в этом дело
MadKnight: это свойство конкретной реазилации Uljahn
magaiti: я не понимаю что мэд от меня хочет
Uljahn: универсальный алгоритм будет всегда проигрывать узкозаточенному решению, мне кажется
magaiti: по моему он просто ылудит
MadKnight: magaiti скажи просто о чём ты
MadKnight: может мы о разном
MadKnight: может окажется всё просто
MadKnight: Uljahn в том-то и проблема
MadKnight: но это проблема конкретной реализации
MadKnight: на с++ ты можешь только сделать конкретную реализацию
magaiti: для каждого конкретного случая написать оптимальный алгоритм - это инженерная задача
MadKnight: а как прописать логику с возможностью "повлиять" на реализацию?
MadKnight: например статик/динамик массив
magaiti: и часто оптимальный не нужен, просто дотаточный для решения
MadKnight: magaiti зачем же полностью переписывать когда можно взять стандартный и указать параметры?
magaiti: например чтоб не тащить чужой код в проект
MadKnight: Uljahn как указать что ты хочешь статик массив вместо динамика в этом алгоритме, потому что ты знаешь точный размер для своей задачи?
Uljahn: написать несколько реализаций и выбирать на основе передаваемого параметра?
MadKnight: анрилам это скажи
MadKnight: у них вообще всё сво
MadKnight: ё
MadKnight: и при этом билды полупустых проектов выходят на 150МБ
MadKnight: Uljahn а если ещё 3 отдельных параметра такого типа?
magaiti: у них движок для ааа игр, 150мб не парит никого
MadKnight: будешь делать 16 реализаций со всеми комбинациями?)
MadKnight: 150мб парит разрабов игр
MadKnight: под андроид
magaiti: пусть пишут свой мобильный анрил
MadKnight: вместо этого они вручную из исходников анрила убирали тонну всего что им было не нужно
Uljahn: в питоне можно импортировать библиотеки целиком, а можно только нужные функции указать из них, в анриле так нельзя?
MadKnight: анрил же на с++
MadKnight: вопрос к с++
magaiti: вопрос к тем кто писал сходники
MadKnight: но в особенности вопрос к с++ почему анрилы не смогли сократить размер GameObject.h меньше чем 3к строк
magaiti: размер кода слабо коррелирует с размером исходника
MadKnight: magaiti в анриле просто лучший с++ код который ты вообще увидишь
MadKnight: там просто идеал
MadKnight: нет ничего, что даже просто - meh
MadKnight: их исходники - это просто пример как надо кодить на с++
MadKnight: и всё равно
MadKnight: 3к строк в GameObject.h
Uljahn: раз можно выкинуть ненужное - то не идеал
Uljahn: идеал разный для разных задач
MadKnight: а как ты в с++ выкинешь 3д физику из GameObject ?
magaiti: кто о чем, а вшивый модер о бане
MadKnight: ?)
MadKnight: Uljahn в анриле физика вшита в ядро
MadKnight: там в GameObject всякие штуки из физики
Uljahn: монолит типа?
MadKnight: и если тебе в игре физика не нужна, то единственный вариант - вышивать из исходников вручную
MadKnight: "монолит" ?
Uljahn: т.е. нельзя выбрать свою реализацию физики, есть только одна, прибитая гвоздями
MadKnight: вшитая
MadKnight: ну так-то да
MadKnight: ну так вот, вопрос
MadKnight: как сделать чтобы физика добавлялась в игровой мир динамически?
MadKnight: из редактора мира
input.txt: А разве типичный класс в ue это не исторически сложившаяся куча стремных дефайнов с копипастой?
input.txt: я просто когда-то смотрел и приуныл от этого идеального кода
MadKnight: они запилили свою рефлексию в с++
MadKnight: у них генерится с++ код
MadKnight: и чтобы студия нормально этот код подтягивала и не подчёркивала всё красным, там всякие дефайны
MadKnight: это всё есть для редактора чтобы он нормально подгружал с++ классы и отображал какие в них есть ф-ии
MadKnight: плюс это есть чтобы можно было создать объект класса по строке с именем класса
MadKnight: как ты это ещё сделаешь?
input.txt: "создать объект класса по строке с именем класса" звучит как жуткий костыль
MadKnight: рефлексия как в жаве или в шарпах
MadKnight: typeof(YourClass) возвращает объект описания класса
MadKnight: это в жаве и шарпах - обычная вещь
input.txt: а в фп обычная вещь копировать список при добавлении элемента
MadKnight: жуткий костыль или функция для их editor игр в котором можно искать класс по имени и потом создавать инстансы?
input.txt: и че теперь пусть push_back возвращает новый вектор?
MadKnight: > а в фп обычная вещь копировать список при добавлении элемента нененеененене это обычный костыль из-за того что сделали просто консты
MadKnight: push_back - это элемент реального программирования
MadKnight: а фп - это об абстрактном описании логики
MadKnight: push_back вообще не должен существовать в ФП
MadKnight: в шарпы кстати добавили nameof(YourClassOrVariable) которое возвращает имя того что ты ей передал в виде строки
MadKnight: удобно
MadKnight: чисто ради проверки имён во время компиляции
MadKnight: Automaton2000 походу все устали
Automaton2000: вон на botg посмотри сколько там было тупняка с правилами
MadKnight: ну бывает
MadKnight: Automaton2000 давай отдохнём
Automaton2000: ну я не знаю почему
Uljahn: Automaton2000: я не понимаю что мэд от меня хочет
Automaton2000: например сделать перебор всех доступных ходов
MadKnight: Uljahn давай проще
MadKnight: вот есть класс игрового мира и класс объекта в мире
MadKnight: они находятся в движке
MadKnight: теперь мы пилим игру
MadKnight: мы хотим создать объект игрового мира, но чтобы в нём была физика
MadKnight: а для этого нам нужно чтобы во всех объектах этого мира были всякие физ параметры - например Vector velocity
MadKnight: как ты себе это представляешь?
Uljahn: :head_bandage:
MadKnight: как сделать new GameWorld(с физикой) ?
MadKnight: Uljahn что именно непонятно?
Uljahn: от GameWorld нельзя наследоваться, переопределить методы, насовать атрибутов?
MadKnight: да это понятно
MadKnight: но
MadKnight: нам же надо добавить в GameObject
MadKnight: как ты через наследование мира добавишь в GameObject ?
Uljahn: через фабрику
Uljahn: фабрик
MadKnight: а как насчёт кучи отнаследовавшихся от GameObject классов ?
MadKnight: как в них добавить?
MadKnight: ты же не можешь через фабрику переопределить наследование
Uljahn: так есть же MRO
Uljahn: надо только в родители прописать нужный сфабрикованный GameObject, не?
MadKnight: ээээ
MadKnight: этож фишка питона вроде
MadKnight: которая основана на том что всё динамическое
MadKnight: и медленное
MadKnight: я прост ещё гуглю
Uljahn: ну, сорян, я не эксперт в этой области
MadKnight: а что ты знаешь об MRO ?
MadKnight: что это по твоему?
Uljahn: где искать методы, которые в экземпляре не определены
MadKnight: и вообще MRO вроде только про методы
MadKnight: а я про переменные
MadKnight: оно переменные может добавить?
Uljahn: в питоне вроде да
MadKnight: в питоне это динамически
MadKnight: это вообще dictionary<variableNames, values>
MadKnight: с этим всё понятно
Uljahn: а тебе на плюсах надо?
MadKnight: кнш
Uljahn: тогда зачем меня спрашиваешь?
Uljahn: я в плюсах не шарю)
MadKnight: так в питоне тоже есть наследование
Uljahn: :upside_down:
MadKnight: ну ок, а как в питоне это можно сделать?
MadKnight: если MRO это только для функций
MadKnight: Method Resolution Order (MRO) is the order in which Python looks for a method in a hierarchy of classes. Especially it plays vital role in the context of multiple inheritance as single method may be found in multiple super classes.
MadKnight: class World:
objects = []
class GameObject:
nothing
MadKnight: new World(с физикой)
MadKnight: и тадам - в нашем World у всех GameObject'ов есть velocity
MadKnight: Uljahn ?
Uljahn: да, именно так
Uljahn: я прошёл собеседование?
MadKnight: всмысле
MadKnight: я спросил - как? - ты сказал да
MadKnight: конечно же прошёл
MadKnight: всё давай завтра приход
MadKnight: в субботу, да
MadKnight: Automaton2000 зачем ждать?
Automaton2000: но я не уверен что у меня нет
MadKnight: Automaton2000 зачем ты ждал столько времени чтобы пофиксили смайлы в чате?
Automaton2000: можно считать, что граф двусвязен
MadKnight: когда можно было не ждать
MadKnight: поиграл кстати в Among us
MadKnight: как разраб могу сказать
MadKnight: игру пилили новички
MadKnight: никакой защиты от хакеров, никакой синхронизации действий игроков
MadKnight: постоянные баги из-за асинхронизации действий и постоянные слишком уж прямые хаки от хакеров
735487: либо корейцы делали. в их ммо всегда разные хаки работают. просто у них на законодательном уровне запрещено хаки юзать и регаются они по аналогу нашего ИНН в играх. поэтому и не парятся
735487: как только их ммо попадают на европейский рынок так и начинается
Uljahn: это игра не для серьёзной игры, а для угорания с друзьяшками же
Uljahn: как весёлая ферма или типа того
Uljahn: социальный элемент роляет сильнее, чем геймплей
MadKnight: amurushkin тут даже дело не в этом
MadKnight: тут простейшие вещи
MadKnight: клиент отправляет событие нажатия кнопки
MadKnight: сервер принимает событие нажатие кнопки
MadKnight: сервер выполняет команду кнопки
MadKnight: и знаешь в чём суть хака?
MadKnight: сервер НЕ ПРОВЕРЯЕТ
MadKnight: может ли данный клиент выполнить это действие
MadKnight: т.е. ты просто убираешь у кнопки галочку Disabled - и всё, ты хакнул игру
MadKnight: Uljahn и сам геймплей могли бы повыравнивать
MadKnight: как будто идею придумали, а проработать - не проработали
MadKnight: с matchmaking'ом вообще всё печально
MadKnight: просто открываешь Play online
MadKnight: и становится печально
MadKnight: даже говорить нечего
MadKnight: бот Sire Sirop уже больше месяца 24/7 спамит во всех открытых играх ссылку на свою хакнутую версию
Uljahn: а там лидерборд глобальный есть или денежные призы? есть ли смысл античиты внедрять как у клиентов покер-румов?
Uljahn: нафига читы, если смысл тупо почилить с друзьяшками
MadKnight: смысл в том, что в общих румах просто дофига читеров
Uljahn: ну не играй в общих румах
MadKnight: и плюс есть всякие - "my friend said it's purple so vote purple!"
Uljahn: или у тебя друзей нету, поэтому приходится играть с читарами, и это напрягает?
Uljahn: а виноваты разрабы
MadKnight: ты сейчас назвал всех, кто играет со случайными людьми из matchmaking - людьми без друзей?)
Uljahn: людьми, у которых нет проблем с читорами, либо они сами читоры
MadKnight: всмысле
MadKnight: типа читеры никогда не играют с не-читерами?)
MadKnight: или не-читеры никогда не против поиграть с читерами?)
MadKnight: ну ок
MadKnight: логичный кот Uljahn
MadKnight: или именно у всех этих людей всегда есть 9 друзей чтобы набрать комнату из 10 игроков ?
Uljahn: можно просто не играть
MadKnight: вау
MadKnight: ну ты щас решил все проблемы мира
MadKnight: - можно просто не делать того, что вызывает проблемы!
Uljahn: в онлайне всегда будут читаки
Uljahn: проблема брони и снаряда же
MadKnight: я же с этого и начал
MadKnight: 1 - слишком очевидные дыры которые закрыть на раз два
MadKnight: 2 - слишком много читеров, если бы хоть как-то банили - было бы заметно меньше
Uljahn: ну так закрой, сделай пул-реквест или как там это делается)
MadKnight: сначал открой их исходники
Uljahn: ну тогда жалуйся в спортлото
MadKnight: Automaton2000 го выигрывать исходники игр в лото
Automaton2000: ну и как ты это делаешь
depthzer0: Automaton2000, ты же тоже умеешь
Automaton2000: ато был бы рабочий бот в топ100 и фиг его бросишь уже
MadKnight: depthzer0 ты там чё задумал