Chat:Ru/2021-02-12

From CG community
Jump to navigation Jump to search

magaiti: свич в сях как бы казалось бы да, но зависит от архитектуры

magaiti: но мы про высокоуровневые языки

magaiti: насколько я помню, свич в перле был сделан через рефлексию, это еще страшнее чем в питоне

Default avatar.png 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 ты там чё задумал