Vladislav
#holywar
Ioann_
гитхаб показать?
Если у них есть гитхаб с открытым кодм телеги, тогда не надо.
Anonymous
А пруфы то есть ?
Держи: https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/Patches/qtbase_5_6_2.diff Этот патч просто образец говнокода.
cyberzx 🇷🇺
Глянул сорсы. С++ код хороший. Ты посмотри на какой-нибудь CRYEngine. Вот там плакать захочется
Ioann_
я если что не в теме - никогда не следил за телегой :) P.s - а десктопчег версия, Виталик на которую ты скинул пруф, она official ? Если нет, так и претензий к телег никаких нету, как таковых - остальное, это уже те кому нужно пилят
Vladislav
Berkus
код хороший, много времени это не займет
Anonymous
я если что не в теме - никогда не следил за телегой :) P.s - а десктопчег версия, Виталик на которую ты скинул пруф, она official ? Если нет, так и претензий к телег никаких нету, как таковых - остальное, это уже те кому нужно пилят
Это официальный GitHub официальной версии. Я мейнтейню его для Fedora и весь их говнокод приходится вырезать патчами, чтобы оно нормально собиралось и работало.
Berkus
У меня генту
окей, пойдешь мейнтенить ЭТО для генту, не заглядывая в патчи федоры?
cyberzx 🇷🇺
А что его мейнтейнить? УМВР
Berkus
ну ну
cyberzx 🇷🇺
Вы загляните в код openssl какого-нибудь
cyberzx 🇷🇺
И ничего, мейнтейнят
Anonymous
А что его мейнтейнить? УМВР
Используешь полу-проприетарный блоб с официального сайта, собранный с протухшими версиями в т.ч. openssl?
Ioann_
На первый взгляд в самих сорцах говнокода не вижу. Но мне с ними точно не по пути, использовать в core QString ... Но они и не математикой занимаются, тут я думаю, производительность не важна - так что норм.
cyberzx 🇷🇺
Ты так говоришь, как будто это плохо. Мы вот выпускаем игру под линукс и тоже распространяем его блобом со статически слинкованным openssl. Это удобно и везде работает
Ioann_
У них такие же имена файлов как у меня :D
Ioann_
типа basic_types и т.д
Stanislav
> Вот там плакать захочется они так в названии и написали
они тут письмо прислали, типа смотрите на новые фишки cryengine но в тайтле опечатались ceryngine вышло
Ioann_
Ioann_
Очень даже неплохо, я бы сказал
Nikita
Пока что
Vladislav
Не надо так делать. Это ставит пользователей под угрозу. Дыры в OpenSSL находят постоянно.
А вот зачем они для критичной либы bsd лицензию выбрали? Была бы LGPL, проблем бы не было
Ioann_
вот их код
Ioann_
Berkus
в банжи мыль, а то они там страдают чот (в ноти дог и гориллу вряд ли сразу вот так возьмут)
Ioann_
вот мой :D
Ioann_
Vladislav
https://t.me/pogromisty
Ioann_
Не, не - я там потом дефайн добавил таки
Berkus
вот мой :D
ты пишешь невообразимую хуйню
Anonymous
https://t.me/pogromisty
#закладка
Ioann_
Пишу, конечно может и хуйню. Но какое мне дело, главное это ... $
cyberzx 🇷🇺
Не надо так делать. Это ставит пользователей под угрозу. Дыры в OpenSSL находят постоянно.
С играми по другому никак. Все либы надо тащить с собой, либо линковать статически. Слишком разнородны среды в различных дистрибутивах
Aidar
*Нужно
Berkus
впрочем, после заявления "какое мне дело какую хуйню я пишу" можно дальше не обсуждать
Aidar
да там реально хуйня же
Ioann_
На самом деле, у меня один из самых быстрых SHA_1 хешей, с интринсиками и т.п :)
Berkus
да да, конечно
Aidar
на O0?
Ioann_
не, в дебаге, ты чего :D
Aidar
это не ты код в O0 тестируешь?
Ioann_
Ну это его заливать надо на GH - мне реально в лом, но то что работает быстро, тестировал, проверял на том что отыскал в опенсорсе, например и еще с парой коммерческих версий тех мест где работал
Ioann_
Нет ну а что ты хочешь, беркус - если нужно будет, я конечно выложу. Это не проблема - это тебе не Пуассона минимизировать на CUDA. Но все равно, я скидывал скрин не для того чтобы рассказать о скорости, а чтобы сравнить свой код с ТГ
cyberzx 🇷🇺
о, нашёл консольный телеграм клиент. https://github.com/vysheng/tg QTшный не нужен
Ioann_
Нет ну а что ты хочешь, беркус - таким образом, мне хоть весь код заливай. Конечно SHA_1 - не Пуассона минимизировать на CUDA, но все равно, я скидывал скрин не для того чтобы рассказать о скорости, а чтобы сравнить свой код с ТГ. Но вот еще один, опять же - древний. Но рабочий :) Super Fast And Robust
Danylo
Все таки продублирую и сюда:
Danylo
Добрый вечер, есть у меня вопрос архитектурный: Предыстория: пишу небольшой игровой движок, стараюсь построить красивую и безопасную компонентную систему, компоненты хранят только данные, обобщенная логика находится в системах движка, каждая из которых отвечает за свой круг задач (рендеринг/ввод/скриптовая система и тд). И так получается, что некотоые семейства компонентов тесно связаны с сопровождающими их системами, из которых компонентам в СТРОГО ОПРЕДЕЛЕННЫХ случаях нужно дергать часть интерфейса. Например, при создании компонента GLObject, описывающего объект, который может быть отрисован системой рендеринга, компоненту требуется "регистрация" в этой системе, при удалении компонента - наоборот. Для того, чтобы выборочно открывать интерфейсы некоторым компонентам, использую паттерн Attorney/Client: систему сопровождают friend-классы, которые через static-функции и friend могут выборочно открывать часть интерфейса компонентам. Вопрос: есть ли еще какие-нибудь стратегии для предоставления выборочного доступа к закрытому интерфейсу, кроме вышеописанной? Не хотелось бы плодить негибкике зависимости или открывать интерфейс полностью.
Danylo
да, поправил спасибо
Danylo
да, видимо более легковесного компайл-тайм решения нет
Danylo
ну и ладно
cyberzx 🇷🇺
Добрый вечер, есть у меня вопрос архитектурный: Предыстория: пишу небольшой игровой движок, стараюсь построить красивую и безопасную компонентную систему, компоненты хранят только данные, обобщенная логика находится в системах движка, каждая из которых отвечает за свой круг задач (рендеринг/ввод/скриптовая система и тд). И так получается, что некотоые семейства компонентов тесно связаны с сопровождающими их системами, из которых компонентам в СТРОГО ОПРЕДЕЛЕННЫХ случаях нужно дергать часть интерфейса. Например, при создании компонента GLObject, описывающего объект, который может быть отрисован системой рендеринга, компоненту требуется "регистрация" в этой системе, при удалении компонента - наоборот. Для того, чтобы выборочно открывать интерфейсы некоторым компонентам, использую паттерн Attorney/Client: систему сопровождают friend-классы, которые через static-функции и friend могут выборочно открывать часть интерфейса компонентам. Вопрос: есть ли еще какие-нибудь стратегии для предоставления выборочного доступа к закрытому интерфейсу, кроме вышеописанной? Не хотелось бы плодить негибкике зависимости или открывать интерфейс полностью.
Мы тоже пилим свою ECS. Но у нас система получает события о создании или удалении энтити и уже может запросить у энтити компоненты, которые ей нужны. Если он есть, то они регистрируются.
cyberzx 🇷🇺
Сами компоненты почти всегда являются простыми данными и у них нет никаких интерфейсов, которые надо открывать
Ivan
У вас геймдев?
cyberzx 🇷🇺
да
Danylo
Мы тоже пилим свою ECS. Но у нас система получает события о создании или удалении энтити и уже может запросить у энтити компоненты, которые ей нужны. Если он есть, то они регистрируются.
А если компонент вешается на энтити не в момент создания, как вы поступаете? каждая система подписана на каждый энтити и должна при каждой итерации его вытягивать из энтити?
Vladislav
ведроид-разработчиком можно заработать больше чем схемотехником
Крылатый
Что востоебованней, там и больше денег.
Alexander
Все таки продублирую и сюда:
если вы пришли к тому, что у вас иногда клиентский код испытывает необходимость дернуть тольку часть публичного контракта - вы нарушили S.O.L.I.D, а именно смотрите в сторону interface segregation. Используйте фабрику (Fabric) для получения инстанса, но не порождайте объект отдельно от его эко системы. Другими словами если у вас GLObject котороый в себе несет данные для рисования и GLRenderer для отрисовки этих данных то сделайте ответственностью GLRender инстанциирование GLObject и его удаление. Так же, чтобы контракт GLRender не стал очень больший - как было скзаано выше соблюдайте solid, сделайте: GLPlayerObject и GLPlayerRender, GLItemObject и GlItemRender и так далелл, т.е четко разнестите ответственности.
Alexander
я вот нарпимер лично против анимичности объектов (когда объект - не объект вовсе а dto)
Alexander
смысл объекта: данные и логика вместе
Danylo
я с вами совершенно согласен Сделать систему отрисовки по совместительству фабрикой - неплохая идея, но проблема в том, что GLOjbect как компонент связан не только с самой системой, но и с Entity, на котором висит компонент. В любом случае требуется регистрация с двух сторон. Хотя, забудьте все, написанное выше. Пока печатал, придумал workaround : ) По поводу dto: предназначение компонента в контексте системы отрисовки - не передавать данные, а просто хранить их в четко определенном месте с четкой структурой. Это продиктовано устройстом графических API, обращение к данным для выставления состояния внутренней стэйт-машины должно происходить как можно меньшее количество раз. Обращения к драйверам для выставления состояния очень дорогие (в тесном цикле). Исхожу из того, что системе всегда лучше знать, когда ей стоит обращаться к стейт машине и стоит ли вообще. Компонент этого знать не может. Он, в общем-то, может узнать, но это снова потребует лишней переброски данных, а это недопустимо.
cyberzx 🇷🇺
А если компонент вешается на энтити не в момент создания, как вы поступаете? каждая система подписана на каждый энтити и должна при каждой итерации его вытягивать из энтити?
Мы решили отказаться от возможности изменения компонентов в энтити после создания. Слишком много это порождает проблем, а профита никакого. Посмотри презентацию близов про из ECS в овервотче с последнего GDC. Они хорошо объясняют почему надо делать именно так
Danylo
Спасибо, гляну
Alexander
я с вами совершенно согласен Сделать систему отрисовки по совместительству фабрикой - неплохая идея, но проблема в том, что GLOjbect как компонент связан не только с самой системой, но и с Entity, на котором висит компонент. В любом случае требуется регистрация с двух сторон. Хотя, забудьте все, написанное выше. Пока печатал, придумал workaround : ) По поводу dto: предназначение компонента в контексте системы отрисовки - не передавать данные, а просто хранить их в четко определенном месте с четкой структурой. Это продиктовано устройстом графических API, обращение к данным для выставления состояния внутренней стэйт-машины должно происходить как можно меньшее количество раз. Обращения к драйверам для выставления состояния очень дорогие (в тесном цикле). Исхожу из того, что системе всегда лучше знать, когда ей стоит обращаться к стейт машине и стоит ли вообще. Компонент этого знать не может. Он, в общем-то, может узнать, но это снова потребует лишней переброски данных, а это недопустимо.
по поводу dto: вобщем GLObject тогда просто структура, DTO, аттрибут, whatever... но не объект, с моей точки зрения. если у вас MVC, а похоже на то (потому что у вас model это то что вы entity называете, view это GLObject в котором аттрибуты отрисовки хранятся и controller это GLRedner в котором логика вся) то и делайте придерживаясь MVC, будет меньше проблем. Например как-нить так: EntityService - ответсвтенность управлять жизненным циклом вашей Entity, т.е делать crud для entity EntityRenderer - ответственность логика отрисовки / упралвение жизненным циклом EntityRenderData, например EntityRenderData* create(Entity&) - создает и возвращает новый EntityRenderData, и хранит его внутри по Entity.id в какой-нить map После чего вы можете инжектить EntityRender в EntityService или же при помощи композиции в нектором управляющем коде снаала создавать Entity через соотв сервис и затем создать EntityRenderData
Alexander
"Мы решили отказаться от возможности изменения компонентов в энтити после создания" << вот тут истина, immutability наше все
Anonymous
Е.А. Зуев А.А. Чупринов Стандарт C++: перевод, комментарии, примеры. — Москва: ООО «ВАШ ФОРМАТ». — 2016 г. — 888 с