24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
8. Что нужно знать, чтобы взяли работать? — Общие навыки — TPL, Linq, DI, интеграционные тесты. Преимущество перед такими же вкатунами даст парочка интересных пет-проектов где вы делаете всё максимально правильно и точно следуя архитектуре. — Архитектура — DDD, микросервисная архитектура. Так же необходимо ознакомиться с паттернами проектирования. Обязательны к изучению: MVVM, MVC. — Базы данных — PostgreSQL/MSSQL + Mongo/Redis. Из ORM: EFCore обычно достаточно, но есть более быстрый, но менее удобный Dapper. Тратить время на ADO.NET не стоит. — Алгоритмы — сортировка, поиск, оценка сложности алгоритмов, рекурсия, алгоритмы на строках. — Структуры данных — связанные списки, деревья (бинарные, красно-чёрные), хеш-таблицы, графы. — Системы контроля версий — обычно гита достаточно.
>>2484152 → > ui на авалонии(c#) какие есть тулкиты под неe Она сама тулкит. Тебе нужен тулкит под тулкит? Нигер штоле? >>2484363 → > qt платный Da. > Gtk всратый Ты всратый.
>>2484512 Самый красивый UI - дефолтный с дефолтными стилями. Он всем привычен, пользователи никогда не скажут, что им не нравится цвет кнопки, им тупо похуй. Вообще, странная тенденция со стилями этими. Лет 10 назад все плевались от кроссплатформенных тулкитов с собственными стилями, не выглядящими нативно, а теперь все ругают нативные стили и пытаются высрать очередной уникальный дизайн, где невозможно отличить кнопку от надписи.
>>2484537 Именно поэтому Eto.Forms лучше авалонии. Eto.Forms генерирует нативные окна под каждую платформу WPF, Winforms, GTK, MAC. В отличие от авалонии, которая создаёт графический контекст и рисует в нём свой вид согласно установленной внутри себя теме. Кому нужны мокрописечные интерфейсы - тем в авалонию. Кому нужен натив - добро пожаловать в Eto.Forms.
>>2484569 Точно так же через некоторое время она пропадет и все станет нормально. Это кстати не только особенность майковского сайта, но и многих других подобных крупных порталов. И нынешняя политическая ситуация тут не при чем. Скорее всего это косяки защиты от дудоса, которые на время блокируют целые регионы.
В общем. Смотрите. Есть приложение, разработанное для работы в контейнерах и облаках(раньше разворачивали на AWS, потом пришлось перекатиться на Яндекс). Бекенд - это набор веб-приложений на .NET6. Фронт был на ангуляр+nginx. Так вот. Внезапно возникла охуитительная идея - запихнуть все это дело в десктопное приложение. Не спрашивайте. Просто требования бизнеса такие возникли. Хочется все это дело малой кровью провернуть. Насколько норм решение - просто запихнуть фронтенд в какой-нибудь компонент QT для рендеринга веб-страничек и запускать локально тихонько приложухи. Ну или не Qt - копмонент, а электрон, допустим. Кто-нибудь такой фигней маялся? Или хуйня все это и придется по хардкору - разбирать микросервисы и делать отдельное полноценное приложение для десктопа?
>>2484768 Если у тебя Qt в роли браузера, Qt тебе нахуй не всрался. Бери электрон, тупо копируй файлы веб-приложения и пиши скрипт для запуска. Но надо ещё придумать, как будешь обновлять.
Думаю написать движок для ГИСов на шарпе с использованием Вулкана (через vke обёртку). Доступные решения юзают старый GDI/GDI+, а я сделаю высокопроизводительный рендеринг для 1кк+ элементов. Аналоговнеть даже на С++ вроде.
>>2485061 Если сделаю - то вы все и так узнаете, вот увидите. Конечно, скорее всего через три дня я заброшу эту идею.
>>2485152 Я об этом думал, но суть в том, что я резко потеряю в скилле и уровнях абстракции для разработки фич, которые мне нужны будут. Даже если там будут просадки со стороны .NET, Вулкан умножит на ноль любые потери в самом рендеринге, а я не буду читать мануалы аля как в этом ебаном С++ создать легкую хуйню X, которую в шарпе я могу закрытым глазами запилить.
В целом, нужны простые вещи: нарисовать линии, добавить точку, в основном всё будет 2d + возможности 3d интерфейса (сами данные 2d, но юзер может покрутить карту, угол обзора).
На данный момент на Шарпе нету карты, способной в сложный рендеринг, которая не стоила бы больших денег. Я знаю только про движок от ESRI. Кто напишет про GMap, SharpMap, MapWinGIS, dotSpatial, EasyGIS - сразу нахуй, коль не соображаете ничяго.
>>2485049 Сколько ты это пилить будешь? 10 лет? Сможешь запилить хотя бы что-то отдаленно напоминающее josm? Он кстати вроде на обычной джаве со свингом написан, без погружения в опенгл, вулкан или директикс. Но и 1кк+ элементов он не вытягивает, да и зачем?
>>2485197 >Даже если там будут просадки со стороны .NET, Вулкан умножит на ноль любые потери в самом рендеринге Вулкан не панацея от всех проблем.
>>2485832 > Дак там примеры только для вижлы, а значит надо ставить винду В любом случае надо. Один хуй на работе будет Visual Studio, разработка будет на винде, сервера на винде, и это при мнимой кроссплатформенности дотнета.
>>2485843 Если речь про веб на ASP .Net Core то не факт.
> на работе будет Visual Studio Не факт, у нас, к примеру, дозволен онли Rider. За VS розгами секут.
> сервера на винде На всех трёх работах, где веслал деплоили в кубер/openshift под линухом.
> разработка будет на винде У нас в команде ограничений по ОС нет. Большая часть команды, да, юзает Винду, но есть и пара линуксоидов и даже один яблочник. Проблем с разработкой не испытывают.
В общем, в компаниях, у которых все на .net Core нет такой лютой привязки к винде. Во всех местах, где работал и про которые слышал, вообще предпочитают деплоить кормовые приложение в кубер под линухом. Вот если в компании есть что-то легасевое на .net framework, то да, может быть требование винды. Но я бы сейчас такие компании старался стороной обходить.
Смотрите какая ситуевина. Вводные данные: Npgsql+EFCore Собственно. Программулина - шлюз. TCP-соединение открывается, клиент регистрируется по моему протоколу, я выделяю ему порт в системе, через который другие клиенты могут как-бы напрямую с ним общаться, сохраняю данные в базу. Механизм вроде как простой и все работает. Но есть ньюанс. После примерно 30к таких висящих клиентов - начинается треш. Во-первых, PgSql - почему-то не закрывает соединения с базой. Хотя я их честно диспозю, и вообще они мне из DI'я приходят. Из-за этого, после определенного порога - новый клиент зарегистрироваться не может, получаю WSAENOBUFS (10055) Есть и другие моменты, но вот этот пока что самый бесячий и я буквально не представляю, что мне тут делать, потому что блин, я все как в документации и рекомендациях написано делал. На SO находил мнение, что для PGSql - нужно один коннект на все приложение делать, но из коробки так нельзя, потому нужно на PGSql+ типа переходить, там какая-то хуевина якобы есть, которая все твои контексты оборачивает во что-то и фактически у тебя один коннект, но в приложении - куча контекстов. Плотить - пока что, не хочется. Может быть я что-то не так делаю? Кто-нибудь вообще, кроме меня сталкивался с вот такой вот фигней, что просто не удается открыть сокет, хотя чисто номинально - их свободных еще должно быть куча, всего-то половина от 65535 использована.
>>2485980 >Кто-нибудь вообще, кроме меня сталкивался с вот такой вот фигней, что просто не удается открыть сокет, Вряд ли. Сейчас подавляющее большинство через REST работает. А там где есть перспектива пощупать сокеты, все сразу "нахуй-нахуй" и либо съебывают, либо REST продавливают.
>>2486004 это вообще из разных миров как бы А по теме...это ж pg. притащу цитату с перехода убера
"Помимо вышеперечисленных проблем, похоже, в Postgres не лучшим образом реализовано управление большим количеством соединений. Даже в тех случаях, когда памяти было более чем достаточно, мы испытывали серьезные проблемы с масштабированием Postgres после достижения порога в несколько сотен соединений. В документации (хотя мы не смогли найти этому точного объяснения) настоятельно рекомендуется использовать внешний пул (connection pooler) для обслуживания большого количества соединений. Для этих целей мы достаточно успешно применяли pgbouncer. Однако периодически проявлялась ошибка, которая приводила к открытию большего количества активных соединений (обычно в статусе “idle in transaction”), чем было нужно. В итоге это приводило к увеличению времени простоя."
>>2486169 Единственная трабла может быть если ты самозанятый фрилансер, тогда существует некоторая вероятность, что к тебе доебутся за лицензию. Но после day Z эта вероятность стала ещё более призрачной. Воруй! Качай! Еби гусей! Мы русские! Какой восторг!
>>2486169 Дак райдер ломануть нормально не могут. Там какой-то замороченный гайд на старую версию с запретом обновлений и блокировкой интернет-соединения.
Хочу чтобы у меня в wpf через секунду после бездействия скрывался интерфейс. Сделал через behavior, пик. Но проблема в том, что интерфейс скрывается через 2 секунды. Почему? Фото монитора, так как с пк двач не грузит.
>>2486203 Я вроде не спрашивал мнения о коде, я спрашивал, почему он работает неверно. Сам код я уже переписал (пик), но вопрос меня всё еще интересует.
>>2485651 >Сколько ты это пилить будешь? 10 лет? Сможешь запилить хотя бы что-то отдаленно напоминающее josm? Не совсем. josm - это не движок, а полноценная ГИС. Я же собираюсь сделать только прослойку между graphics API и ГИС приложениями. Ну это всё фантазии пока конечно.
Но на Вулкане через .NET обёртку я уже смог прорендерить 1кк+ объектов через несколько пайпов с ФПС 60. Правда там shaders без обвеса, а они перфоманс просадить могут. Но если удасться изменить модели на более качественные и удержать ФПС - то я точно продолжу разработку, ибо самый топовый движок до сих пор юзаею OpenGL, а тут у меня готовый .NET компонент будет для десктопа.
Помогите с wpf, хочу расширить класс TextBlock, добавляю свойство зависимости, но программа на него никак не реагирует! При его изменении просто ничего не происходит, сеттер никогда не вызывается.
>>2486635 >Я же собираюсь сделать только прослойку между graphics API и ГИС приложениями А в чем тогда смысл твоих начинаний? Любая макака может из джавы/шарпы/питона дергать opengl и вулкан, обертки уже есть. Или ты хочешь какую-то особую gis-либу запилить со всеми необходимыми компонентами для разработчиков гис софтин?
А почему бы не посмотреть в сторону js и вебассембли? Например те же народные карты яндекса вполне шустро работают. Ну или викимапия, там наверное совсем что-то древнее под капотом у них крутится, но работает быстро.
>>2486947 >народные карты яндекса вполне шустро работают Ты пробовал в них сотни тысяч элементов с графикой прогружать?
>обертки уже есть Нету FOSS GIS компонента для .NET, способного в высокую производительность. Бесплатно только старые GDI/GDI+ движки.
>>2486947 >викимапия Дебил, просто съеби. Почитай про deck.gl, QGIS, ArcGIS Pro, Carmenta Engine, а потом неси своё говно мамонта, которое на первом же слое обосрётся.
Скучаю по системе типов из тайпскрипта. Например, иногда хотелось бы не bool SomeProp, а true SomeProp. И чтобы можно было в ограничениях для генериков указывать не только интерфейсы, а любые типы. Заметил, что указание типа после имени переменной на самом деле удобнее: int Count; Count int; – это удобнее, потому что большую часть времени ебёшь мозг над названием переменной, и, если название придумал, то структуру данных подобрать – дело наживное
Радует, что шарпы двигаются в сторону минимализма, хоть и через сахар, но писать можно меньше.
Вам не кажется, что в последнее время маятник качнулся обратно, и паттерны ради паттернов и интерфейсы на ровном месте стали использовать реже? Например, ебучие IRepository или UnitOfWork, которые тупо обёртка над EF. Ладно бы хоть с бизнес-логикой, так ведь не всегда Если посмотреть EShopOnContainers, который разбирают на msdn, то выглядит очень даже ничего
>>2487154 >Например, ебучие IRepository или UnitOfWork, которые тупо обёртка над EF. Как быть суть как раз в создание отдельного слоя данных, не привязанного к ORM. То есть ты пишешь IRepository<Entity>.Save в контроллере, и при смене ORM или вообще на переходе на SQL raw тебе не надо лезть ВО все контроллеры и вручную переписывать методы.
А Unity of Work - это просто удобный способ контроля изменений, когда ты сохраняешь всё по факту.
Вот говорят, что сишарп кроссплатформенный, а на деле надо собирать проект на каждой платформе. На винде - это ехешник, а на линупсе - исполняемый стартер и dll-сборка с основным кодом. Просто скопировать файл и попытаться запустить не получится.
>>2487847 Получится. Внимательнее перечитай документацию. dll-сборка и есть кроссплатформенная программа. Ты можешь запустить её командой наподобие dotnet <сборка>, которая на всех платформах есть. Если ты не собирал, разумеется под конкретную платформу, то сборка будет собрана в общем для всех платформ виде.
>>2487866 Потому что петушарп. А ты что думал? Пока ты нравишься майкрософту, петушарп для тебя опенсорс. А как только не понравишься - сразу делается проприетарным и ты не сможешь им пользоваться. Так и произошло в твоем случае - майкрософту не понравилась вся Россия. Кстати, петушарп ещё и кроссплатформенный - пока ты пользуешься шиндовсом. Как только ты переходишь на линукс или боже упаси пук оес, сразу он становишься намертво залоченным на платформу. Вот так гении майнрософты, что такую крутую систему придумали! Слава шарпу!
>>2488130 >Потому что петушарп. Явадебил, спок. Язык, компилятор и дотнет никак не связаны с вижаком, можно хоть в блокноте писать. Если действительно блокнут вижак полностью для русни - это печально, но не критично, есть VS Code
>>2488130 Орнул. Джаву оракл еще в марте блокнул для рабсиян, жри стороннее говно непригодное к проду от openjdk или других хозяев (amazon, red hat, microsoft jdk внезапно)
Когда переведут новую книгу Фримена на русский? Текущая по старой версии ASP.NET 2.0 и это даже не LTS, в итоге ни один пример уже не компилируется. https://youtu.be/BG4nnMR7uTs
>>2488314 Просто в яндексе открой и в контекстном меню вруби перевод. Это не реклама, это суровая реальность на личном опыте. Яндекс теперь не вредоносный рекламный браузер, ставящийся вместе с левыми прогами, теперь это полноценная замена гуглу с хромом.
>>2488374 Проблема в непонимании основ. Новичок читает и не знает почему это пишется именно так, а не иначе. Соответственно, у него нет знаний, как доработать, если оно не работает.
>>2488388 >Соответственно, у него нет знаний, как доработать, если оно не работает. А, ну точно. Я и забыл, что сейчас 2K22-й год на дворе. Интернета нормального нет, дополнительную информацию посмотреть негде. Да и компиляторы до сих пор дубовые, в сообщениях об ошибках никакой информации нет. А до изобретения онлайн переводчиков еще лет 10 наверное.
А если без сарказма. Самые основы учатся по другим книжкам. Основы ASP-а? Ну запустил ты пример из книги - не запускается. Прочитал сообщение об ошибке. Не понял - загуглил, почитал сопутствующие материалы. Не получилось. Открыл английский вариант книги и посмотрел тот же пример - сравнили на разницу. Что непонятно - перевел (со словарем хотя бы). За пару часов такой возни опыта и знаний наберешь больше, чем за несколько дней копирования работающих примеров из книжки.
>>2488392 Сделай экстеншен который будет заменять все Ё на Е, в строках и сравнивай сколько хочешь (по аналогии с ToUpper или ToLower). К сожалению в CultureInfo "ru-RU" нет эквивалента для этих букв.
>>2488427 Ну тут проблема в том что я могу преобразовывать только искомую фразу иначе не спарсится, а в бд эти данные могут быть в какому угодно виде там могут быть как е так и ё и всё в кучу, и вот что делать в такой ситуации непонятно, я решил пикрил попробовать
>>2488398 Хоть сарказм, хоть не сарказм, а многими уже подтверждаются печальные наблюдения о том, что чем больше доступ к знаниям, тем больше людям на знания похуй. Кого ты собрался заставлять читать книжки? Клиповых зумеров?
>>2488458 >за 30, уже не так легко. Забавно такие рассуждения слушать когда тебе уже за 40 и никаких проблем с освоением этой мути не ощущаешь. Дело не в возрасте, а образе жизни. И да ковидом я тоже болел, чуть легкие не выплюнул.
>>2488245 Допустим, но какое отношение это имеет к студии, которая без костылей должна устанавливаться через официальный сайт, через официальный инсталлятор? Я знаю, что нужен впн, но какое это отношение имеет к моей криворукости?
>>2488854 >но какое это отношение имеет к моей криворукости? Такое, что это давно известная проблема решаемая за пару минут. И она никак не связана с блокировками ни с той ни с этой стороны. Просто каждый такой долбоеб вместо того, чтобы просто погуглить и решить ее самостоятельно, тут же бежит во все профильные темы и начинает срать в духе "У-у-у, майкрософт заблокировала Россию, всему пизда".
>>2489022 Насколько руки должны быть из жопы, чтобы с примитивным гитом всё угробить? В начале, правда, не стоит баловаться с ребейзами, но всё необходимое учится за вечер.
>>2489066 Такая рекомендация даётся только в мемасах уровня пикабу. Даже если настал совсем пиздец, на stackoverflow легко найти, как в пару команд всё починить.
Привет, аноны, я школьник 11 класс увлекался фронтэндом, думал поступлю в универ, найду работу, но случился какой то пиздец и на вакансию стало откликаться по пол тыщи человек. Хочу теперь попробовать c#, подскажите много ли сейчас работы и как сложно на нее попасть, заранее спасибо.
В этом стиле есть Grid, внутри которого три векторных контура Path. А еще есть стиль-наследник, смысл которого — менять данные этих патчей. Но как это сделать?
Я пытался по TargetName перезаписать, но мне дает отказ. Ошибка: свойство TargetName не может быть задано для типа Style Setter.
>>2489140 Сделай кустомный контрол на основе шаблона, который наследуется от контент контрола, добавь в этот контрол 3 свойства BoundingPath, FillShapePath и StrokeShapePath, потом в шаблоне <Path x:Name="bounding" Data="{TemplateBinding BoundingPath}". Потом сможешь менять <Setter Property="BoundingPath" Value="M0 20,0 20,20 0,20" />
>>2489150 потом в шаблоне Path x:Name="bounding" Data="{TemplateBinding BoundingPath}" Через стиль можно будет менять Property="BoundingPath" Value="M0 20,0 20,20 0,20"
>>2489153 Возможностей нуль. Это я как десигнер говорю. Сначала тоже плевался, а потом как понял.
А перешел буквально из-за одного недостатка — контроль прозрачности. На винформсах можно установить главному окну общий процент прозрачности, но нельзя сделать прозрачность по маске <— типа как этот стикер.
У меня щас весь интерфейс векторный, и минимум растра. Можно применять матрицу трансформаций и делать масштабируемую и адаптивную годноту. Единственная беда — это попиксельная работа с растром, т.к. либа есть только на винформсах.
>>2489150 >>2489151 Неееет, зачем я заговорил про простыню кода? Короче, сделал я кастомный класс со свойствами, начал в стиле менять свойства. Приехали:
Error XDG0041 : The "Date" property is not a DependencyProperty. To be usable in tags, unattached properties must be visible on the target type with an accessible instance property "BorderBrushB". For joined properties, the declared type must provide the static methods "GetDate" and "SetDate".
ОшибкаXDG0041Свойство "BorderBrushB" не является свойством DependencyProperty. Для использования в разметке неприсоединенные свойства необходимо предоставить целевому типу с доступным свойством экземпляра "BorderBrushB". Для присоединенных свойств в объявляющем типе должны быть представлены статические методы "GetBorderBrushB" и "SetBorderBrushB".
>>2489222 >ну а куда хоть устроиться можно будет Да хоть кассиром, твое дело щас максимально набираться знаний. Если ты в душе не красноглазик, то становись в очередь мечтающих об успешном успехе.
>>2489231 Нахер ты кормишь политического шизоида? Они и так срут во всех тредах.
На мой взгляд причины три: - появились интернеты - появились переводчики - появилась мнение, что погромист обязан знать инглиш Если раньше узкоспециализированная литература была мало популярна, то сейчас наверно вообще не рентабельна.
>>2489222 На джуна +- везде не просто попасть, либо оверхайп js, python, либо меньше хайпа (c#, java, go) но порог вхождения повыше. Если уже фронт знаешь, норм варианты: 1. Дожать фронт: норм выучить react, angular, vue. К ним TS, redux`ы эти, router`ы под фреймворк, найди roadmap`у просто. Как по мне, лучше взять angular, там TS, не смешаный в кашу HTML и JS, state легче сделан и меньше магии. А там уже можно и перекатиться на react/vue
2. Взять бек, можно шарпы. Нужные знания фронта у тебя есть. Сначала сами шарпы: ulearn.me Потом ASP.NET Core, делаешь проекты WebApi, на RazorPages. Норм каналы Platinum DEV (плейлист WebApi .NET5), Sergei Calabonga (там и сам шарп, aspnet проекты, и околошарповые темы), Потом уже: Роман Сакутин (не курсы, а критика кода), Nick Chapsas, RadioDotNet.
А так, тупа пиши код. На любом языке, в любом направлении, желательно часто. Главное чтобы нравилось. Посмотри на Desktop, Web, игры, написание ботов, тестирование. Тут проекты какие-то https://eax.me/programming-language-learning/
Главное не отвлекайся на бред типо: каждый прогер должен знать Linux, C\C++, на память все алгоритмы, паттерны, железо, память. Тут либо сам потом дойдешь, либо и вовсе не нужно будет.
>>2489236 >Роман Сакутин Фу, это вообще противный чел. Весь в наколках как тюремщик и ещё выделывается на пустом месте, что он дофига великий программист и создатель курсов, а все остальные тупые.
>>2489126 > Ты сам когда-то был тупым нюфагом. Уже позабыл? Когда я был ньюфагом меня обзывали тупым тогдашние олдфаги, которые когда-то были ньюфагами и их обзывали тупыми праолдфаги, которые...
>>2489236 Спасибо анон, я и сам смотреть начал в c#, но как то посмотрел что на нем пишут и вообще запутался там и игры и бек и еще лабудень какая то. Спасибо что каналы хорошие подсказал, а то обычно все что ютуб или гугл выдает это инфоцыган, которые учат хело ворлд печатать. Надесю справлюсь с обучением и смогу куда нибдуь на работу залететь.
>>2489281 Да, спасибо. Сегодня до шести утра сидел и практически методом тыка добрался. Щас ебался с переопределением дефолтных свойств.
Меня бесит какая-то неоднозначность. Вот я регистрирую свойство зависимости для SolidColorBrush, и там PropertyMetadata можно не указывать (пикрил 1) https://pastebin.com/2wfX6rh1
И у меня нормально отрабатывает свойство "MyBrush". Но в случае с Path (Geometry, не суть), оно не хочет срабатывать. Мне приходится юзать PropertyMetadata с ссылкой на метод, который перезаписывает свойство (пикрил 2) https://pastebin.com/NU1MnKE1
Есть файловый проводник Files, весьма известный, написан на C# + WinUI 3, так вот, он в сравнении со стандартным довольно тормозной. Анимации, загрузка миниатюр и тд, всё слегка подлагивает. Это вина говнокода, или в принципе шарп не может обеспечить должную скорость?
>>2489298 >Это вина говнокода Да >или в принципе шарп не может обеспечить должную скорость Может, C# является тир-2 языком по скорости после C++ не знаю на счет Rust. C# в последние версии нереально бустят по скорости. Вот пример на скрине новый linq, как видишь скорость в сотни раз быстрее, а аллокаций памяти вообще нет, всё дело в программисте, а не в языке. Даже пайтон можно разогнать, где-то видос видел, добавляли jit
>>2489292 Кажется понял в чем причина, но не понял как это работает.
В свойствах срабатывает SetValue DependecyProperty, кисть действительно назначается. Я панели свойств элемента я вижу, что кисть изменилась. Но весь остальной код, что находится внутри кавычек Set — игнорируется. Для выполнения дополнительной логики, нужно юзать PropertyMetadata.
>>2489303 >где-то видос видел Я бы не стал доверять современным замерщикам скорости. Был же недавно скандал, когда ради гонки показателей получилось так, что сервер выдавал ответов больше, чем приходило запросов.
>>2489307 >Был же недавно скандал, когда ради гонки показателей получилось так, что сервер выдавал ответов больше, чем приходило запросов. что за скандал
>>2489281 А ты случайно не знаешь как снять регистрацию с депендеси проперти? Ну вот допустим у класса есть по-умолчанию свойство Background, а в моем элементе это сбивает с толку, мне нужно свойство Fill.
Все таки в шарпе хороший рантайм, но выразительность так себе. Когда портируешь с питона или котлина прямо таки чувствуешь что тебя ограничивают.
Или вообще WTF вот сейчас столкнулся что yield return не может быть в try/catch ШТА? 22 год на дворе и не нашли время это пофиксить? Невозможно это сделать? А почему питон может?
Не пишите на выразительных языках, а то потом на шарпе будете страдать.
>>2489760 так они у тебя и есть - мои проблемы. ты страдаешь от недостатка выразительности языка и вынужден городить многословные костыли зная о том, что бывает проще.
Вот как то развитие идет хз каким путем. Поправьте если не так.
Вот накидали в язык async/await А async примитивы где? Где нормальный асинксемафор? где AsyncReaderWriterLock? и так далее. 1 сделали цикл статей на мсдн как можно сделать самому. 2 ну ладно есть либа AsyncEx, но а) она сторонняя б) автор себе на уме - например, в том же AsyncReaderWriterLock он убрал возможность апгрейда лока, мол НИНУЖНА в) медленная так то 3 ага. есть Microsoft.VisualStudio.Threading - но опять же, это просто пакет в нугет и даже из названия следует, что они писали для личных нужд.
Далее....есть такая штука как контракт кода. вот в котлине есть всякие reqiure/check на уровне основного синтаксиса. А в шарпе что? А в шарпе жопа
1 всякие Guard для проверки входных параметров - но по факту это велосипеды. Где стандартное решение?
2 Debug.Assert...но он кстати не кидает исключение сам по себе. Не знали? Вот и я офигел когда привык что в винформсах он мессаджбок выбросит, а в консольке (и даже в WPF, хотя типа должен) код просто пойдет дальше
3 Родили как то CodeContract. Идея правильная, даже во фреймворке много где юзали. Но в итоге решили - это вам не нужно и херакс
"Контракты кода не поддерживаются в .NET 5 + (включая версии .NET Core). Вместо этого рекомендуется использовать Ссылочные типы, допускающие значения NULL ."
Бл... Это же частный случай контракта. Это как говорить "вместо борща иди погрызи шкурку от картошки".
Ну они все равно внесли, но "мы не поддерживаем и не рекомендуем"
При этом сами такие без трусов и с крестиком - для себя запилили Microsoft.VisualStudio.Validation, который тот же контракт, только в профиль и "ну это мы для себя такие, а вам нирикаминдуем, вот".
>>2489873 да я свои школьные гощды на js быдлокодил, теперь хочется что то серьезное посмотреть, может потом и буду каким нибудь фулстеком работать, не знаю пока
>>2489868 Додич, иди нахуй. Вся хуйня, что ты описал (пожалуй кроме ненужного AsyncReaderWriterLock) тебе жопу печет только потому, что ты додич. Не думал, что я буду это говорить в контексте C# и .Net ибо их и так ругают за перегруженность, но есть хорошие либы, которые это все решают без лишних напрягов. И есть уже даже "стандартным решением". То, чт оты боишься добакить пакет, который начниается не с "Microsoft" - твои анальные проблемы.
>>2489885 а ну обоснуй мне ненужность асинк примитивов Ну или сам иди нахуй Как можно обойтись без них? Разработчики визуал студии вот не обошлись например. Видать не понимают как ты. Так просвети
>но есть хорошие либы они всегда есть. Однако почему то мелкософт решил выдать свой DI контейнер, а не использовать один из 100500 готовых. Причем любой другой лучше мелкософтовского, но есть нюанс)
> который начниается не с "Microsoft" Вообще то пакеты начинаются как раз с мелкософт. просто они написаны ДЛЯ СЕБЯ. - в частности там есть штуки которые нужны для разработки расширений к студии, а в валидации писало "тут проблема контракта обратитесь в мелкософт".
Я не говорю про специфические вещи типа DataFlow Я говорю про БАЗОВЫЕ примитивы. Которые нужны буквально всем, кто не формошлеп и использует async. Хотя те же Channel были отдельно, а теперь стали частью. А примитивы где? - ищи среди велосипедов
Ебучие макаки, и как только раньше жили без этих двух невероятно нужных апи > XAML islands was a technology preview and didn't support high-DPI, DPI changes, or accessibility in 1809. We rely on them heavily. > 1903 added support for side-by-side WinRT component activation, something deep in the COM stack that lets us find our DLLs when they're right next to our EXE
>>2489890 >а ну обоснуй мне ненужность асинк примитивов А примитивы где? - ищи среди велосипедов >СемафорСлим юзай и не выебуйся.
>Однако почему то мелкософт решил выдать свой DI контейнер, а не использовать один из 100500 готовых. Ну так сиди и не бухти. Добавят - хорошо, нет - тоже хорошо. Пусть лучше корными вещами занимаются, а не очередной либой для гардов-хуярдов. Тут, на счвет гардов, конечно можно подискутировать на счет билд тайм валидации. Но это хуйня на самом деле.
>Вообще то пакеты начинаются как раз с мелкософт. Ты хуйню какаую-то выбрал. Никто по-хорошему сейчас ни майкрософт асерты не юзает ни ту твою вторую дичь.
>>2489972 А я до сего момента считал WPF тормозным кошмаром (заслуженно). Лишнее подтверждение истины, что у дна не бывает дна, всегда есть куда падать.
>>2489980 >СемафорСлим юзай и не выебуйся. интересно зачем существует ReaderWriterLock, если "все можно через семафор"? или все же не все.... Можешь не отвечать, я понял что примера замены я не увижу.Ну или ты создашь через семафор свой ReaderWriterLock - ну это и я умею, просто это ЛИСАПЕД
>Ну так сиди и не бухти схера ли. имею полное право иметь свое мнение и критиковать что угодно. Как ты вот щас критикуешь мое право критиковать.
>Пусть лучше корными вещами занимаются лол. примитивы синхронизации - куда уж корнее.
>Ты хуйню какаую-то выбрал что было то и выбрал. выбор или лисапед или "от мелких" как раз именно ИХ они и юзают. Именно их они и создали для того, чтобы юзать. Или визуал студию уже не мелкие разрабатывают?
>>2490317 Фиг знает, написано под спойлером. Я исходил из того, что если предположить что это тест программ, тогда получается гораздо больший бред. На графике все примерно одинаковые, наибольшая разница всего в 3 раза, хотя реальная в сотни раз.
>>2489868 >2 Debug.Assert...но он кстати не кидает исключение сам по себе. Не знали? Вот и я офигел когда привык что в винформсах он мессаджбок выбросит, а в консольке (и даже в WPF, хотя типа должен) код просто пойдет дальше
Надо подписаться на событие необрабатываемых исключений. Я к этому привык, когда делал плагин, иначе из-за исключения крашит программу-родителя.
>>2490356 Ты понял неправильно. Нет никаких исключений. Если ты ожидаешь, что в этом месте выполнение остановится ибо полетит исключение, то тебя ждет сюрприз. Debug.Assert просто срет в слушателей (а это по дефолту output) и всё - то есть эквивалентен Debug.WriteLine('Alarm')
И нужно добавлять Listener, который бросит исключение, тем самым реально прервав выполнение.
Лучше бы он делал это по дефолту (с возможностью отключения), а не приходилось делать доп шаги
>>2490361 А, я нафаня — этим не пользовался. Я try cath юзаю и Debug.WriteLine
И вообще написал функцию записи всех логов в текстовый файл. Хз как сделать так, чтобы был доступен аутпут для проверки библиотек, а точнее чтобы сторонняя программа загружала мою библиотеку, которая бы срала в окно интерпретации студии.
>>2490361 >>2490366 Хотя чисто логически, ассерт не должен останавливать программу, он же просто выдает сообщение при неком условии. Это не трай кетч. Не знаю чего ты ожидал от него.
>>2490366 Задача ассерта -проверить инвариант что все верно в данный момент и fail-fast с диким ором делать (по идее). В релизе будет вырезано чтобы не тормозить. А твой try..catch это ну "логгер ошибок" разве что.
>>2490369 >Хотя чисто логически, ассерт не должен останавливать программу чисто логически должен. assert проверяет корректность выполнения и если проверка провалилась, то дальше выполнять нельзя
в других языках ведет себя ожидаемо - генерит исключения. И в реализации код контракта тоже исключения. И в валидации от мелких - тоже
для чисто вывода в аутпут и так есть Debug.WriteLine,
просто реализован он через механизм листенеров (нет это не есть плохо) и для винформс этот листенер устанавливается ,а для впф почему то нет (а должен) для консоли разумеется не устанавливается
>>2490380 >assert проверяет корректность выполнения и если проверка провалилась, то дальше выполнять нельзя Кто сказал? А если это не критическая ошибка, а обычный ворнинг? Вариаций масса и если какая-то залупа вдруг взяла на себя право чет там завершать, то надо такую залупу давить сапогом. В документации написано: >Проверяет условие. Если условие имеет значение false, выдается сообщение и отображается окно сообщения со стеком вызовов. Если ты судишь по другим языкам, то штош, логика сишарпа меня устраивает больше.
>для чисто вывода в аутпут и так есть Debug.WriteLine Но он без условия. У меня был случай, когда окно должно было закрываться при отсутствии связи с сервером. Но связь может разрываться как штатно, так и в случае ошибки на стороне сервера. И чтобы окно мне не срало лог при каждом штатном закрытии, я использовал if, хотя надо было assert. При этом выполнение остального кода должно было проходить в обычном режиме, потому что на стороне окна проблем нет.
А для прерывания обрабатывай исключения или сам указывай дальнейшие действия. Все логично.
>>2490383 Да это я понял. Просто коллекция с запретом редактирвоания. Только я не представляю случаев, в 98% мне именно что нужно редактировать коллекцию — в этом суть.
>>2490353 У меня когда устанавливалась то половина файлов не установилась. ХЗ как работает щас, мелкософт в своём репертуаре что пиратка что с сайта всё один хуй у них
Есть лист родительского типа, в который я запихиваю элементы побочных типов. И мне нужно сделать orderby этого листа по общему для всех параметру. Но если я его делаю, то элементы сортируются только внутри типа. То есть, сначала идут все элементы одного типа, отсортированные по полю, затем другого типа и так далее. А мне надо, чтобы они все перемешались и отсортировались по этому полю. Што делоть?
>>2490377 То были эксперементы... А то, как я сейчас написал в100 раз легче, понятнее и тд. Я даже без особых проблем смог linq запрос сделать. Тупо по кайфу, тут я потратил часа 2, а там я дня два ебалася и в итоге все криво, хуево было
>>2490387 >рассказывать "алгоритмы нинужны", "матиматика нинужна", "можна в экселе загребать бабулесики больше чем любой программист А ты сможешь пояснить-то зачем они нужны. Ну, давай. Какие задачи ты решал за пределами собеса, где тебе хоть раз пригодились алгоритмы.
Даже не так. Давай я тебе реальную задачу дам. У тебя есть ARM32 битный одноядерный, 64MB оперативки, BusyBox, sqlite. Задача - опросить 256*x устройств по modbus и отдать данные в облако по какому-нибудь mqtt за максимально быстрое время. Так вот. Это реальный кейс. Это кейс требующий производительности близкой к максимальной. Где ты тут будешь математику использовать? Какие алгоритмы применишь? Почему все что ты придумаешь, кроме очереди с приоритетом - говно?
>>2490393 Заебал ты уже своим код контрактом. Единственный плюс у него был, что он там что-то пытался в былд тайме проверить. Но это не нужно ибо все равно внешних данных больше. Все остальное пишеться или самому в один файл в 100 строк, или есть хорошие готовые либы. Либо можно угореть и запилить себе и код генерацию, и билд тайм чеки. Встроеный в язык нул гард отменили кста https://devblogs.microsoft.com/dotnet/early-peek-at-csharp-11-features/#c-11-preview-parameter-null-checking
>>2490844 Так это задача требовательна к производительности, эта задача - требовательна к ресурсам. И при этом оно явно показывает, что ничего кроме умения обойти массив и в крайнем случае - использовать очередь с приоритетом - тебе нихуя в реальном мире и не надо. Какие задачи средний шарпер-то решать будет? DTO'шку в базу загнать, да иногда что-то с xml поделать. Все это у тебя на стандартных решениях майков сделано, где уже индусы тебе оптимизировали все что только можно. Не выебывайся - учись этим пользоваться и сиди спокойно.
>>2490396 Нахуй так заморачиваться пасаны? Тыщи телодвижений вместо того, чтоб ебануть везде IEnumerable/ICollection да хоть List бля >IEnumerable я принимаю на вход и если мне нужно свойство Count, то я проверяю реализует ли коллекция ICollection Зачем и главное нахуя?
>>2490849 Затем, что если мне придёт коллекция на 100 миллионов объектов я не хочу их итерировать в случае Count() да, такого не должно быть в принципе, но всё же. Даже условные тысячи 2-3 объектов супер впадлу итерировать и это нереально медленно.
>Тыщи телодвижений вместо того, чтоб ебануть везде IEnumerable/ICollection Затем, что ICollection ты должен использовать для имплементации пользовательских возможно потокобезопасных коллекций которых нет из коробки, например деревья или графики >да хоть List бля Это может быть избыточным
Понятное дело, что у условном ендпоинте можно сделать хоть массив, хоть коллекцию, хоть блять че угодно, но когда ты делаешь что-то производительное - приходится думать правильно
>>2490846 этот единственный плюс есть киллер фича так то. Помимо расширенного Assert проверка в билдтайме весьма приятная штука.
И при желании все это вырезается из рантайма ради перфоманса.
Можно ли сделать свою реализацию с блекжеком? ну можно конечно. можно и свой редактор запилить - а че нет, вон жетрбаинсы запилили и ты запили. делов то )
Каждый день с утра занимаюсь разработкой тулзов вместо разработки собственно продукта ))) (сарказм)
>>2490860 Ставишь пакет от того же жидбрайнса, обмазываешь арибутами аргументы и у тебя есть ворнинги. Раз тебе так стандартные нулаблы не нравятся. Подкручиваешь код генерацию, тот же фоди умеет геренировать чеки по жидбрайновским нул атрибутам - есть рантайм валидация. Я давно нек иследовал, но думаю, что сейчас даже лучше варик, чем фоди есть. >И при желании все это вырезается из рантайма ради перфоманса. Хуйню не неси. Смысла в таких валидация без рантайма ноль. А если надо, то в тех же гардах касатомных в одну трочку делается.
Глупый вопрос, но всё же: можно ли как-то разграничить действия пользователя при использовании static List'a? Каждый отдельный пользователь изменяет данные, а так-как это static List, то все изменения видны другому пользователю. Короче мне надо заместо static сделать не static или можно как-то разграничить?
>>2490894 Для дизайнера. Дизайнер - это когда ты в хамл код разметки пишешь, а рядом готовое окошко рисуется. Это в данном контексе - дизайнер. Это - для него.
>>2490946 Ну е-мое, ну это понятно. Вопрос в том, а зачем оно понадобилось, если есть параметр ширины и актуальной ширины? Зачем нужен третий параметр?
>>2490959 >если есть параметр ширины и актуальной ширины? Актуальная вообще для рантайма. Да и просто ширина тоже. Ты же не всегда можешь ее вписать (допустим ты пишешь контрол, который должен вписываться в контейнер и ты ему ничего не задашь), а может ты вообще в Blend дизайнишь и у тебя все застаблено, данных нет, кода нет, размер не вычисляется как надо и все выглядит не так.
поэтому в дизайне есть d: аттрибуты которые могут выставить/переопределить значение
>>2491026 Так есть же асинхронная функция в FileStream, она запишет тогда, когда файл освободится. Правда если ты что-то с высокой частотой пишешь, типа лога, то может записываться не в том порядке, в каком ожидалось из-за занятости файла другими процессами.
>>2490871 >Раз тебе так стандартные нулаблы не нравятся. да не говорил я что мне не нравятся стандартные нулабле Я говорил что нулаблы - маааленькая часть же
псевдокод int Delta(int min, int max){ Contract.Requires(min<max) ... }
по хорошему при попытке вызвать Delta(10, 5) получу ошибку в рантайме и варнинг в разработко-тайм. Где тут нулабле и как мне помогает "вместо контракта используйте нулабле" я хз о чем они вообще.
> Смысла в таких валидация без рантайма ноль Нет это не так. Ты же не проверяешь валидность в каждом методе. Если у меня граница контекста и я проверил на границе валидность входных данных, то должен ли я в каждом методе и далее проверять валидность данных и состояний? Я могу просто вырезать это все, как сейчас вырезается Debug.Assert
Тут каждому свое - кто то юзает везде List и "я и так все знаю и не ошибусь", а кто-то любит строгость когда компилятор проверяет максимум, а "потом в рантайме оно бахнет". Понятно что все не проверить, но все же.
Пиздос ебка на работе. Такой хуйни ни разу за всю мою карьеру 8милетнюю в айти не было. Даже в первый год, когда я выездным сисадмином работал. Тогда начальсто только за крупные косяки ебало. А сейчас техлид ебет понечножку, но каждый день.
Можно ли как-то в WPF темплейте ограничить область видимости кистей или констант? К примеру (пикрил) у меня есть набор кистей для слайдера, хранящихся в отдельном файлике стиля, и видеть их должен только слайдер.
В MDSN примерах, в параметре "Key" приписывают тип слайдера для ориентира, но если у тебя дохрена элементов, то при биндинге локального ресурса выпадает такой адский список кистей, что будешь год искать нужное. При этом по факту они не нужны.
>>2491045 И что мне эта проверка даст? Я всё на в MSDN написано делаю, но если пытаюсь записать в файл почти одновременно то происходит пикрил. На UWP пилю.
>>2491088 Закольцуй в цикл и записывай через try catch. Если выводится исключение, то меняй флаг выхода из цикла на false. Без проверки исключения.
Только вся эта асинхронность очень дурно влияет на порядок записи из разных потоков. Функция соберется записать в одно время, а по факту запишет спустя 10 строк, когда появится "свободное окно".
Тут надо городить что-то типа очереди, причем не обычной а ConcurrentQueue. Все потоки скидывают в эту очередь, а записывающая в файл функция — одна на всех и вытаскивает таски из очереди.
>>2491106 Вот поэтому я и предложил ConcurrentQueue. Все кидают в один "буфер" и продолжают делать свои дела, а одна функция этот буфер разгребает и пишет в файл.
>Channel/BlockingCollection А разве не от этого ConcurrentQueue призвана избавить?
>ConcurrentQueue тут неудобен А что там неудобного? Всего два метода: добавить в очередь и вытащить из очереди. Метод Enqueue для добавления данных в очередь. Только читальщик должен "пытаться" взять из очереди таску через TryDequeue — тут надо цикл организовать. Причем там не надо ничего удалять из очереди — оно автоматом.
Единственное, над чем нужно подумать, как записывальщику в файл мониторить очередь, потому что совершенно непонятно в какой момент туда поступят данные (не будет же он в цикле постоянно чекать очередь?). Тут нужно какое-то событие или токен.
>>2491121 >Channel/BlockingCollection они заточены на автопродолжение выгребания из них при появлении новых элементов.
>А что там неудобного? ConcurrentQueue для этого не приспособлен, потому что никак не сообщает, что в нем появились элементы. Нужно городить СЛОЖНЫЙ огород при добавлении элементов, который запустит цикл выгребания и учтет что пока он выгребает снова были добавлены и никаких проблем с синхронизацией не было Ну или городить свою структуру которая прячет эту сложность внутри себя - собственно так ты и сделаешь подобие Channel/BlockingCollection
>как записывальщику в файл мониторить очеред а в случае Channel/BlockingCollection думать не нужно. Они предназначены для решения паттерна Producer/Consumer а обычная очередь это просто очередь.
>>2491125 >А почему нет? Дед, мы живем в век мобильных устройств. Побереги батарею. Сколько видов таймеров высрано по этому поводу. А уж цикл While это вообще аут. События как-то шпокойнее.
Подскажите, пожалуйста, как сделать так: пользователь вводит время, это время заносится в BD PostrgeSQL, потом когда это время наступает происходят какие-то действия. Как мне сделать взаимодействие между временем в бд и скриптом, который должен выполнится?
>>2491159 Я не уверен, но такая конструкция разве не будет работать? var x = cont.Set<Companies>().Include(p => p.AgentList.Where(w = > externalCodes.Contains(w.CodeNumber))
>>2491181 Ошибка в линке - The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties. Имя параметра: path
>>2491159 >>2491175 >>2491181 Отбой, мне приходил массив стрингов с пробелами в начале каждого элемента, что я в дебаге никак не заметил. В итоге .Where(s => (s.AgentList.Any(p => externalCodes .Contains(p.CodeNumber)))) работает и всё ок
Как сделать так, чтобы шаг изменения значения в начале слайдера был меньше, чем в конце? Какой множитель применить?
К примеру есть диапазон значений от 0,1 до 100. Длина слайдера примерно 200мм. На первом видеорил — слайдер одной программы. На втором — мой.
Заметьте, что у оригинального слайдера при такой же длине (и даже меньше), на участке от 0,1 до 1 шаг более подробный. Тут очевидно какой-то множитель. Какие есть идеи? Или лучше с этим вопросом в матан?
>>2491304 >>2491326 >Если что - это даже не матан, а школьный курс. Я дурак дизайнер
>логарифмы используй Чет даже по графикам логарифм дает не ту кривую. Квадратичная функция мне кажется ближе. Пикрил: x ^ 2 / MaxValue. Только степень "прогиба" не сложно контролировать, но и этого достаточно.
Кто-нибудь пользуется VS Code? Действительно ли нужно создавать иерархию в виде: Решение (солюшин) -> Проект, как в студии? И если так, то что выбирать в качестве рабочей папки: папку с решением или с проектом?
>>2491555 Сделал иерархию, в итоге мне вс код выдаёт миллион ошибок, что не видит всякие пространства имён... А потом ещё говорят: ой, у нас дотнет давно кроссплатформенный, винда с вижлой не нужна, всё можно в вс коде делать.
Обьясните мне кто нибудь что такое blazor и maui. Я могу использовать C# для верстки веб-приложений/сайтов на blazor для фронта + asp.net для бека? MAUI я так понимаю замена для xamarin.forms и будет конкурировать с flutter.
>>2484368 (OP) Ребзя, где я могу найти книги/статьи advanced и выше уровня о том как CLR компилирует и ранает C#? Например, как статические классы и переменные, лямбда выражения, параметры, вызовы, типа и структуры и т.п. выглядят под капотом?
>>2492389 >Sharplab.io Я блять IL могу и в дотпике посмотреть, мне нужна книга где описывается вся теория дотнета, CLR, JIT, GC, причем глубокая, а не "переменная это коробочка, которая ссылается на значение в кучке"
Помогите решить дилемму. Насколько правомерно в дизайнере окна выставлять состояния чекбоксов, радиобаттонов и прочего.
С одной стороны у тебя при первом старте уже будет все расставлено, а с другой стороны события с этими чекбоксами происходят на стадии инициализации, и начинается работа с экземплярами, которых еще нет. Из-за этого приходится городить города.
А дилемма в том, что я бы хотел все активации элементов делать в коде после инициализации, но при этом нет никакой защиты, если случайно в дизайнере будет выставлена галочка. А через месяц я об этом забуду и буду соображать, почему приложение не запускается.
>>2492533 Даже если я буду в каждом событии проверять IsInitialized, то это за задолбаешься везде прописывать. Мне не нравится ситуация, когда нужно в голове держать некое правило, без которого код работать не будет.
В итоге два выхода: - Либо в каждом методе делать проверку на статус инициализации окна (или какой-то свой флаг). - Либо забыть о создании автоматических подписок. И создать свой метод инициализации с ручной подпиской, и как следствие диспоза.
Второй вариант мне кажется более безопасным в долгосрочной перспективе, но опять какой-то лишний код.
Мимокрокодил интересуется - а относятся ли к шарпистам приколы про джавистов по типу «Попросили у джависта прикурить, а он фабрику для зажигалок строит»? Или шарпобоги перебороли желание на каждый чих городить абстрактно-фабричный фасадный метод?
шарпач, можно ли как-то хитро подкинуть свой код в сеттер чужого объекта, который я не могу редактировать? сейчас у меня пикрелейтед: имеется коллекция чужих объектов, у них public bool IsDirty. они работают как "грязный бит" - когда есть какое-то изменение в объекте они становятся true, затем его надо самостоятельно менять обратно. при этом, я не контролирую другие компоненты которые могут изменить эти булевые или кто вообще это делает, единственное что торчит наружу это булевая на объекте.
>>2492783 Но это же говнокод! На любом языке говнокод, невзирая на синтаксис. В ифе идёт сравнение со строковым литералом. За это на первых курсах линейкой по рукам пиздят.
>>2492775 я много жетбрэиню, но для шарпа студия Мне в ней приятнее. Да и расширений побольше и та штука показывающая потребление памяти и события тоже неплохо. А еще supercharger есть расширение
Я вот уже неделю как работаю интерном в одном крупном банке и просто охуеваю с количества получаемой информации. Я просто смотрю в код и не понимаю как он работает, причем навыки программирования у меня есть. Просто смотрю как на код когда я был 8-ми кассником и нихуя не понимаю что это. Функции? Процедуры? Сейчас примерно также только масшатабируемость иная. А про навыки энтерпрайз разработки я вообще молчу. Совершенно иной подход и где его брать не знаю.
>>2493382 >одебилевшие от курсов гигбрейновские швайнокараси все в петухоне и жиесе. Кстати, забавный факт. Где-то два года назад перед приходом .net6 во всяких скилбоксах и т.д. и прочих начали открывать курсы по шарпу. Даже джаваеб Немчинский постоянно предрекавший смерть шарпу открыл у себя его курс. Но продержалось все это чуть больше года и либо шарпокурсы перестали пиарить, либо совсем позакрывали (как например в жидбрейнсе - инсайд инфа).
>>2493062 >навыки программирования > Совершенно иной подход и где его брать не знаю. Навыки программирования сейчас даже у детсадовцев есть. Для того чтобы понимать как раз и нужно учиться и читать дохуя скучных (для нормисов) книжек.
>>2493389 >насколько реально каким нибудь фуллстеком залететь? Фуллстеком как раз реально залететь, т.к. какой-нибудь условный реакт с js учится за месяц...два. Плюс очень много работодателей хочет себе двух спецов по цене одного. Только нужно сразу понимать. Что по факту ты будешь на двух работах за одну з/п работать. Плюс это путь в никуда и нужно при первом возможном случае перекатываться в чистый бэк.
>>2493507 Насчет сокращения сферы - все так же как и в остальных сферах/языках. Разве что шарп себе в относительном выражении у джавы немного рынок отгрыз. А вот насчет сложности, да есть такое. Насколько я заметил в шарпе традиционно намного сильнее ебут за чистоту кода. Плюс сам-то язык выучить просто, а вот начать разрабатывать на том уровне который нужен энтерпрайзу - новичку поебаться знатно придется. Плюс не так уж много толковых преподов, а с учетом того, что в шарпе (для норм спецов) неплохо так в 21-м году зарплаты выросли, то им нахуй не уперлось идти в жидбрейнс за копейки лекции читать. Я не знаю как на курсах по другим языкам например. Но на шарповых курсах конверсия была процентов 10 максимум. Т.е. из 10 человек только 1 мог претендовать на то, что его резюме хотя бы рассматривать станут и то если у него уже был хотя бы какой-нибудь бэкграунд при этом.
>>2493470 Я после ПНД и ПТУ сразу же устроился в нищем милионнике. Потом спустя 9 месяцев так же без задней мысли нашел новую работу. Так что динаху джавадебил
>>2493504 Да бля у немчинского шиза ебаная, каждую секунду пиздит что ВОТ-ВОТ ЕЩЕ НЕМНОГО И ШАРП ТОЧНО ВСЁ ПУЗЫРЬ НАДУЛСЯ НЕВЕРОЯТНО, НУЖНА ТОКА ДЖАВА! А по факту в джаву вкатываются всё меньше и меньше, нежели в шарп, потому что джава морально устарела и уже не сможет догнать по возможностям .NET
>>2493507 >слишком сложные Еще, кстати, в шарпе до сих пор языковый барьер играет роль. Практически вся актуалочка по фреймворкам до сих пор на английском, а то что переведено устарело и никому не нужно. А большинство посетителей таких курсов не то, что онлайн переводчиками пользоваться не умеют, даже простой процесс гугления по ошибке для них это уровень рокет саенс.
>>2493518 >ВОТ-ВОТ ЕЩЕ НЕМНОГО И ШАРП ТОЧНО ВСЁ ПУЗЫРЬ НАДУЛСЯ НЕВЕРОЯТНО, НУЖНА ТОКА ДЖАВА! Ну я про что и написал. При всей его ненависти к шарпу он все равно попытался под рыночек прогнуться и открыл у себя курсы по нему. Я правда сейчас глянул на его сайт, как и ожидалось он так же учит неактуальной хуйне вроде винформс, WPF и MVC.
>>2493530 Твои проблемы, раз тебя волнует конкуренция то может тебе и не нравится программировать? Кому нравится тот ебашит код каждый день и вкатывается, оставляя нубасов позади
>>2493527 В большинстве своем это закрытые системы. Т.е. они пилятся/ковыряются годами и там сидит прикормленая команда, которой тепло-сытно и дергаться никуда не хочется. Что-то новое пилится только в областях САПР-а и экспертных систем, но чтобы туда вкатиться нужен хороший багаж по предметной области. Ну и зарплаты там в большинстве намного ниже рынка.
>>2493525 Потому что, где-то с выхода Core 3.1 народ осознал, что MVC с его привязкой к винде теперь нахуй не нужон и можно спокойно садить бэкэндера пилить чистый WebApi бэк, которому будет похуй на какой системе работать и похуй на чем будет написан фронт. Т.е. намного выгоднее иметь грамотного бэкэндера и грамотного фронтендера, чем двух фулстеков хуево разбирающихся в обеих областях. Ну и все постепенно к этому и переходят. Так что искать сейчас работу на MVC - путь в никуда, т.к. в основной массе это будет старый стек и потом ты нахуй не нужен будешь с таким опытом.
>>2493547 Я хер знает. Теоретически да. Но практически... В серьезных конторах вряд ли. Там за лишнюю библиотеку прикрепленную к проекту заебешься согласовывать все. Ну чтобы писать на чем-то не имеющего статус LTS вообще можно забыть. Может только где-нибудь в стартапчиках, где кабанчик модно-молодежный и топит за инновации и все новое.
>>2493547 В тырпрайз говне, где все шарперы и вы делаете веб приложение для "локального" пользования клиентом - может даже и нужно. В остальном конечно юзлесс
>>2484368 (OP) Котаны, а как вы парсите в объекты json-ы у которых ключи на русском языке? Через dynamic или делаете объекты у которых поля кириллицей обозваны?
>>2493956 Примерно так: - таак почитаем что это такое - да блин еще статьи по EF, а мне нужен кор - попробую - да епрст - да ну блин - да как так то - привет dapper
>>2493604 >Котаны, а как вы парсите в объекты json-ы у которых ключи на русском языке? Никак. Это как себя не уважать надо, чтоб с таким кодом работать?
Я хз куда еще написать, поэтому напишу здесь. Я планирую фрилансить и иногда попиливать игрухи. Фрилансить собираюсь пиля мобильные приложухи или веб-приложения. Так вот, я никак не могу выбрать между флаттером и C# стеком. Флаттер кажется больше подходит под разработку мобильных приложух. И игры простенькие 2д на нем можно делать, вроде все подходит. К тому же флаттер работает сразу почти на все стороны, и веб, и десктоп, и мобилки, фрилансить на нем должно быть довольно легко, сразу пиля приложуху и под айос и под андроид. НО. Тут я наткнулся на .net и понял что на шарпе можно делать то же самое, благодаря в основном Uno Platform. Плюс на шарпах есть юнити и моногейм. Плюс MAUI потихоньку допиливают. Ну и вот я не могу решить флаттер или C#. Реально ли будет фрилансить разрабатывая мобильные приложухи на шарпе, или мне лучше смотреть в сторону флаттера. Плюс у шарпа охват шире, можно аж целую операционную систему почти полностью на нем запилить. Кароче по сути мне нужно чтобы кто нибудь шарящий за меня решил, флатер или .net. Какие еще можно привести доводы C# против флатер? Есть тут такие кто пилит приложухи на фрилансе? Реально ли будет фрилансить на MAUI через годик другой?
Аноны подскажите хантят ли сейчас студентов универа? Просто раньше на курсе 3 приходил дяденька и забирал маслят на стажировки. Но сейчас пиздец происходит и стало интересно продолжаются ли такие практиики.
>>2494233 осиляторского во мне дохуя. Сиквельщик передо мной стоит там, екзекюшн планы дрочит свои, я говорю бля старина съеби нахуй, выгребаю все таблицу в память, забирай и съёбывай
>>2494199 >Это как себя не уважать надо, чтоб с таким кодом работать? Импортозамещение во все поля, чувачок. Закажет тебе бизнес интеграцию с каким-нибудь гос-сервисом, еще и не с таким говном поработаешь.
>>2494509 Скорее приходят за теми кто представляет из себя что-то экрстраординарное. Либо дохуя умные, либо те за кого заранее проплачено. Причем умные не в плане каких-нибудь олимпиадников (они то как раз нахуй никому не нужны), а те кто действительно быстренько во все въезжает, шарит на уровне намного выше среднего, плюс показывают хорошие результаты на практике помогая делать преподам их собственный гешефт. Таких преподы сами устраивают сигналя нужным дядям.
>>2494666 Не-а. Нормальная практика, точно так же как за рубежом. И не только в айтишечке, но и во всех остальных сферах. Берут либо тех кто уже свой, либо тот кто уже показал, что чего-то стоит.
>>2494681 Мы про универ говорим. Это в школе все задроченные. В универе есть два типа преподов. Либо долбоебы до сих пор преподающие студиозам лабы на паскале. Либо продвинутые ребята шарящие за рынок и имеющие связи, и знающие что и как сделать на имеющихся у них мощностях (люди это кстати тоже ресурсы, а толковые студенты хороши тем, что это максимум дешевые ресурсы). Причем ай-тишные факультеты даже проигрывают немного тем где реальным вещам учат. Например какой-нибудь шустрый завкафедрой машиностроения имея в наличии лабораторию с парой ЧПУ-шных станочков будет в деньгах купаться.
>>2494771 Вот хейтят джаву, что там нету такого сахара, дак это даже хорошо, потому что язык легко учится и код легко читается. В сишарпе же навводили всяких закорючек и хрен пойми что они означают. Если до 5 версии все изменения были логичными и делались с определенной целью, то сейчас разработчики языка как сороки собирают все фишки из других языков, без понимания зачем это нужно там. Ни какой цели в этих изменениях нет, просто напихать побольше всего, чтобы выкатить новую версию к назначенной дате. Язык замусоривается и превращается в синтаксическую помойку.
Можно ли на сишарпе написать консольное кроссплатформенное приложение типа вима или нортон коммандера? То есть можно ли рисовать в консоли как на экране по знакоместам: символ и аттрибут? Или кроссплатформенность позволяет работать с консолью в режиме потока: читать символы из него и выводить символы без перескакивания по координатам?
>>2494896 >Можно ли на сишарпе написать консольное кроссплатформенное приложение типа вима или нортон коммандера Можно, но UI будет на каком-нибудь электроне
>То есть можно ли рисовать в консоли как на экране по знакоместам: символ и аттрибут Чего?
>Или кроссплатформенность позволяет работать с консолью в режиме потока: читать символы из него и выводить символы без перескакивания по координатам Тоже нихуя непонятно, но можно
>>2494981 Мне кажется ты не понимаешь как работают консольные приложения типа вима или нортон коммандера. Они не создают своё окно, а работают в рамках обычной консоли. Допустим у нас есть консольное окно 80 на 25 знакомест и я мог бы вывести символ в любое знакоместо по любой координате. Учитывая, что можно задать цвет символа и цвет фона, то получается простая псевдографика. Вопрос, поддерживает ли .Net Core такой режим работы?
Что за уебанство ныть на любой сахар типо «ЭТО НЕЧИТАБЕЛЬНО!1!11!»??? Сука, взял один раз прочитал что это за фича и запомнил, вы наверно ещё на хаскель выёбываетесь изнеженные джавадебилы, а какой-нибудь банальный list comprehension в пиздоне вводит вас в панику
>>2495083 Если тебе дали инструмент это еще не значит, что надо с него такие хатки строить Даже на одних ифах можно такое наворотить, что хуй ты его распарсишь
Все нитики на сахар в шарпе - закостенелые тупые уебаны, которым лень швелиться.
>>2484368 (OP) Есть способ в VS автоматом добавлять в ссылочную базу проекта цепочи зависимых разделяемых библиотек? Не надо кукарекать что это не для этого. Оно для того самого.
>>2495098 >.NET Core уже легаси и у нас теперь просто .NET Вы че там, охуели совсем? Я ж только посрать отошел! Заказанные свежие книжки по кору только через неделю приедут. Вкатился, блять.
>>2495124 Понятно. Ну раз вы тут такие умные, может ответите наконец на простой вопрос? >>2495094 Он уж поважнее этих охуительных потерь на прозрачной запаковке в интерпретируемом языке.
>>2495136 Лес рук! Вам бы лишь бы на собеседованиях с умным ебалом ответы на вопросы угадать, а дальше хоть трава не расти, ебашите такой же говнокод как и все, только с претензией.
Короче (пикрил) есть два фрейма: ModsPanelInserted и ModsPanelExpanding.
Задача состоит в том, чтобы страница типа ModifiersPanel сама себя перемещала из одного фрейма в другой. Но страница не знает куда ей перемещаться, для этого в нее добавлены два свойства: InsertedFrame и ExpandingFrame (оба реализованы через DependecyProperty), в которых должны передаваться ссылки на оба фрейма.
Собсно в XAML я пытался передать экземпляр на фреймы, но без толку. Причем во второй вариант с RelativeSource не выдает ошибки, но все равно свойство остается пустым.
>>2495369 Не, не, сейчас фрейм. Актуально то, что в этом посте >>2495332 .В ошибке пишется, что не найден источник. Иначе бы ругался на неудачную попытку каста.
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=ModsPanelInserted'. BindingExpression:Path=.; DataItem=null; target element is 'ModifiersPanel' (Name='ModifiersPanel'); target property is 'InsertedFrame' (type 'Frame')
>>2495400 Во первых не RegisterAttached, а просто Register, во вторых класс должен быть унаследован от UIElement, в третьих геттер и сеттер должны выглядеть так: public Frame InsertedFrame{ get => (Frame)GetValue(InsertedFrameProperty); set => SetValue(InsertedFrameProperty, value); }
Вопрос, скорее не по шарпу, а по РУЧКАМ. Вот пишу я двач, сделал удаление постов /api/posts/delete, а сделал баны /api/bans/create. А теперь мне нужна функция удалить+забанить, как поступить? Новый контроллер с эндпоинтом вида /api/mod/deleteAndBan или добавить в параметры удаления поста флаг AlsoBan?
>>2495503 Модифицируй удаление поста с необязательным аргументом bool ban. Почему так? Нет смысла банить без удаления поста. Нет смысла держать отдельный ендпоинт для банов, какой в этом практический смысл? Если ты банишь кого-то, значит его пост который нарушает правила сайта (не просто же так бан выдали, да мочух?) должен быть удален.
>>2495503 Урлы - это ресурсы, а не действия, в них не должно быть глаголов. Нет сущности "delete". Должна быть ручка DELETE /api/posts/post_id, куда может передаваться флаг ban, про него правильно всё сказали.
>>2495513 Двачаю, еще парашу в виде bool ban небходимо завернуть в dto какую-нибудь и вьюмодельку, а для респонса сделать условный АпиРеспонсБилдер который будет возвращать всегда одинаковую хуйню: 1. Дата и время ответа 2. Свойство Data (будет отражать сам ответ контроллера) 3. Свойство Error В таком случае ответ ендпоинта всегда будет структурирован и условному мобильному дауну который юзать будет ендпоинты всегда будет приходить структура { dateTime: "...", data: { ... жсон}, error: null }
Так же, если сильно надо, можно добавить другие поля значимые, типа code. Офк возвращать надо Ok(ApiResponseBuilder.CreateApiResponse<T>(T data)) в случае если всё норм и BadRequest(ApiResponseBuilder.CreateErrorApiResponse<T>(message)) если например условный юзер не найден. Добавлять [ProduceResponseType] на контроллеры для OK и BadRequest, а сами методы контроллера должны возвращать (всегда) Task<IActionResult>1
>>2495510 >ендпоинт для банов, какой в этом практический смысл? Ну бан можно отменить, можно просматривать баны по каким-то критериям. >Нет смысла банить без удаления поста Я тоже так думаю. Но есть но, а вдруг админ захочет забанить айпи/подсеть просто так (ну там торы хуйоры, страна не та и т.д.) >>2495513 > в них не должно быть глаголов. А это всегда так или для рест-сектантов? А то вот, апи вк полон глаголов, например. Но я там в урлах delete написал для наглядности, у меня то в коде все лк ага, как же
>>2495534 > А это всегда так или для рест-сектантов? Для рест-сектантов, конечно же. У нормальных людей эндпоинты типа POST /api/posts/deletePostById, всё через POST, везде глаголы, никакого GET, в ответе всегда 200 OK и код ошибки в теле ответа.
шарпач, надеюсь не слишком сумбурно, посоветуй как минимизировать теребоньканье желтых методов, но всегда использовать последние обновленные данные и если поменялись то вызывать execute. красный метод дергается раз в фиксированное время, но голубенькие могут прилететь в любой момент. может их стоит на эвент повесить? но что будет если красный метод притащит новые models уже после того как эвент отработал?
>>2495548 пик >>2495521 >[ProduceResponseType] Можешь пояснить, а то мне лень гуглить? Это в рантайме проверяет что вернут метод? И что будет, если я верну например 301, который не указан в аттрибуте? Или это только для сваггера?
>>2495513 >Нет сущности "delete". Должна быть ручка DELETE /api/posts/post_id Вот посмотрел на свой говнокод еще раз и у меня есть /api/threads/pin /api/threads/lock etc получается я должен это переделать на [PATCH] /api/threads/{id} и получается в body гнать на сервер все значения полей для треда, включая текстовые? А если это сущность, где много текстовых полей, гнать это все на сервер ради обновления одного флага (хуита). Проверять на нулл в модели? А если налл валидное значение? Так много вопросов и нихуя не понятно. А все статьи в тырнете описывают только простейшие случаи, где никаких проблем офк нет.
>>2495811 Да, PATCH. Надо только решить эту проблему: > Проверять на нулл в модели? А если налл валидное значение? Для валидных значений можно передавать не null, а 0, пустую строку, пустой список и т.д. Так и отличать не заданное значение от не переданного. Это опять же простые случаи, в более сложных придётся выдумывать флаги для идентификации, что указанное поле передано. Да, сплошные костыли в этом ресте. Особенно если действие не вписывается в концепцию круда.
> во вторых класс должен быть унаследован от UIElement Это Page, а она наследует UIElement (пикрил)
>третьих геттер и сеттер должны выглядеть так А какая разница через что присваивать? Мне геттер не нужен. Просто через свойство не так универсально. В любом случае я попробовал и не помогло.
Если присваивать через код, то норм работает. Похоже биндить можно только свойства, но не экземпляр класса целиком.
>>2495837 >Для валидных значений можно передавать не null В этом нет смысла, значения должны быть nullable обязательно. Параметры которые являются обязательными помечаются в моделях как [Required]
>>2495923 Фуух, спасибо! Завелось. А почему работает только с UIElement? если я хочу передать фрейм и ставлю тип свойства Frame, то пишет Cannot create default converter to perform 'one-way' conversions between types 'ModifiersPanel' and 'System.Windows.Controls.Frame'. Consider using Converter property of Binding. BindingExpression:Path=; DataItem='ModifiersPanel' (Name='uModifiersPanel'); target element is 'ModifiersPanel' (Name='uModifiersPanel'); target property is 'ExpandingFrame' (type 'Frame')
Приходится каждый раз делать каст. Ну тут я попробую разобраться сам. Еще раз спасибо.
>>2495861 я нашел как мне кажется охуенное решение: 1. сделал энум флаги 2. каждый тик флаги проверяются: if ((state & flagname) == flagname) 3. если да то выполняется какой-либо из этапов обновления кешей и целевой метод флаги моделей выставляются тоже каждый тик если обновились а флаги из гуя нанизываются |= flagname по эвенту после выполнения целевого метода флаг сбрасывается таким образом каждый тик в теории у меня самые последние данные, а если им не надо обновляться то и не надо...
>>2495945 Сука как же меня бесит этот впф. Самое нелогичное говно во вселенной. Я кодом мог написать две строки сутки назад.
Ну какого хуя снова не работает? Как забиндить родителя? По имени не могу — цикличная зависимость. Начинаю искать предка — предок не найден. Даже Self не работает.
Я уже тупо перебрал все ключевые слова и комбинации.
>>2496074 с Frame не работает. Ну и плюнь на него. Используй DataContext (тру) или проксиобъект сделай (неплохо, но не тру в данном случае).
Ну и вот тебе еще в копилку решений https://pastebin.com/VPtVBst0 в данном случае не работает ибо видит выше родителя, но работает если нужно биндить всякие меню и прочую хрень что не найти в дереве.
Блин. Чет не могу придумать формат сообщения. Пока что придумал "[clientId] message" Но эт какая-то херня. Надо нормальный формат в духе: [len][headers][body]. Но чет не знаю я. Ды.
>>2496124 Не. Я могу на дефолтную поменять. Я ж сразу сказал. Мне - скучно. Хочу чатик нахуячить. И думал скучающие аноны - посмотрят,за полетом моей фантазии и будут чет там советовать. Типа да. Укажут, где я говнокодю.
>>2496129 >У меня во фреймы загружается страница хз. никогда не использовал Frame. Суть Frame - изоляция. Ну чтобы типа оно работало в своей песочнице, не наследовало стили (кроме основных стилей приложения) и поэтому не наследует DataContext, ну и такие проблемы биндинга
ContentControl + немного кода на коленке = отлично работают.
>А каким образом? Насколько я понял, можно создать класс Для тебя наверное никаким. Раз ты решил использовать Frame значит "так надо" и в нем....ну можно в code-behind прокинуть DataContext странице, но...собственно в этом месте можно прокинуть и сам Frame, то есть именно то, что ты хочешь сделать через xaml
То есть ты изи можешь решить проблему через code-behind/attached/behaviors/... и лично я бы решил создав аттачед с кодом
Но проще атачед сделать прокидывающий фрейм странице.. ...но лично я вообще хз зачем странице знать про родителя вообще, а уж тем более про то, что это фрейм. Это неправильный подход в принципе.
>>2496135 >>2496161 Страница позволяет вынести группу элементов, как будто это отдельное окно — со своим XAML-дизайнером. Это позволяет стакать окна, как сделано в вижуал студии, к примеру. Да и вообще удобно.
Вы должны понимать, что я не знаю какие там впереди подводные камни. Я взял страницу как нечто очевидное для моей задачи. Затем оказалось, что страница может помещаться только во фреймы. Затем оказалось, что и фреймы имеют свои ограничения при биндинге. Маленькие ограничения нарастают как снежный ком и приводят тебя в тупик.
>>2496135 >Используй юзер контрол А на чем о будет основан? Мне надо плодить сущности. Сперва нужна все та же страница, которая обязательно оборачивается во фрейм, а дальше я это оборачиваю в грид — вот он мой контрол, основанный на этом гриде. У меня иногда кровь из глаз от количества вложений.
>>2496209 > как будто это отдельное окно — со своим XAML-дизайнером >Это позволяет стакать окна, как сделано в вижуал студии не понимаю. покажи пример.
>>2496161 >но лично я вообще хз зачем странице знать про родителя вообще Сомнительное решение, которое вероятно мне аукнется. Хотел сделать страницу целиком автономной — она может быть в нескольких местах в окне. Я хотел этой странице перекинуть список всех фреймов, в которых она может существовать. А далее страница сама перемещается от фрейма к фрейму, вместо того, чтобы основное окно перемещало страницу.
Короче, реализация как в вижуал студии, когда пользователь может объединить два окна в одно. Только там посложнее структура, а не просто стак.
>>2496218 Ну смотри. Ты мог бы сделать как пикрил 1 — окно, которое визуально разбито на два блока.
Вот если каждый блок вынести на отдельную страницу. То у пользователя есть возможность просто сделать два отдельных окна (пикрил 2) , или поменять блоки местами, или расположить горизонтально.
>>2496222 >>2496237 >А далее страница сама перемещается от фрейма к фрейму, вместо того, чтобы основное окно перемещало страницу.
У каждого свой подход к фломастерам. Можно чтобы окно перемещало между фреймами Можно чтобы страница страдала ерундой и перемещала А можно сделать какой то манаджер который может вызвать окно или страница и он все устроит
но лично я просто бы сделал эти страницы юзерконтролами (а ведь страницы и есть юзеркотролы с оговорками и знанием (нужным ли в твоем случае??????) о навигации) И у меня везде такие вьюмодели и DataTemplate и никто ни про какие фреймы и окна не знает - перемещение происходит одной вьюмодели коллекции в другую коллекцию, а там уже Items/ContentControl-ы сами найдут и отрисуют что нужно. То есть принцип тот же, но все знание не на уровне визуальных контролов - их дело только рисовать содержимое и ничего не знать.
Если можно все решить на уровне вьюмоделей и не лезть в code-behind то я так и делаю.
Пилю движок для вн, надо добавить возможность портировать под мобилки и декстоп. Можно ли это сделать с помощью юнити? Типа машинно правишь шарп скрипты а потом через консоль билдишь например под ведро? Или лучше мауи? Реакт натив сойдет?
>>2497015 Годот попробуй. Там можно настроить билд на разные платформы через консоль парой команд. Я пару лет назад как-то делал. Собрал батник, который командовал годоту сборку релизов под нужные мне платформы (андроид, веб и винда), а потом через батлер сразу деплой всего этого на itch.io. И грубо говоря у меня с нажатия одной кнопки сразу релиз обновлялся на сайте. Сейчас правда я все это забросил. В годоте еще и нормальный шарп встроен, в отличие от того огрызка в юнити. Плюс если есть навыки можно пересобрать сам движок, выкинув оттуда все лишнее (например 3Д если оно не нужно) и получить относиетльно легковесные поделк (но тут уже знание плюсов нужно или нужных людей)
>>2495957 какую-то хуйню я нагородил в общем. ночью это казалось охуенным решением есть ли способ похитрее сделать? я не могу отойти от необходимости теребонькать WeightChangePolling() и соответственно весь метод каждые N секунд
>>2497348 Анон, ты флаговый enum написал довольно тупо. 1)Он используют байтовую маску, поэтому любое значение с 0 будет считаться активным всегда (то есть 6 он будет воспринимать как 0 + 2 + 4)
>>2497372 я тупенький и не очень разбираюсь, про флаги и байтовые операции узнал только вчера. как правильнее сделать? алсо вот что сделал. насколько это ГРЯЗЬ? протестировал, вроде бы значение с 0 воспринимает правильно и выполняет нужный метод при нужном значении
>>2497399 1) Флаговый енам можно начать со значения 1 << 0 - он будет равен единице 2) Название класса должно быть с большой буквы. 3) Метод InitMethods - не нужен, все это в конструктор. Плюс он у тебя даже не сработает, т.к. actions - readonly 4) Переменная actions должна называться _actions 5) Использовать флаговый енам в качестве ключа словаря в таком виде - ебанизм. Во первых ты не все варианты учел (например Method1+Method2 и т.д.) и при выпадении словишь исключение. Во вторых если у тебя вариантов станет побольше ты заебешься прописывать все варианты.
а теперь посмотрел. хз че он делает, но зачем кастовать к инту енумы хз. Их можно использовать прямо как ключи у словаря А еще можно унаследовать енум от байта и экономить.
>>2497427 спасибо за развернутый ответ 1. не знал про это но читал что флаговые энамы вроде бы требуют None = 0 2, 4. класс тестовый я чисто проверить возможность но да я насвинячил 3. всмысле не сработает? я же запустил этот код, все сработало и заполнило даже с ридонли. 5. это да, я затуп но у меня будет только три варианта твердо и четко, больше не будет и тут подумал а зачем мне вообще флаги и вот это вот все добавление? я хочу сделать такую вещь. у меня только три метода которые я хочу вызывать в определенном порядке: метод 1 => метод 2 => метод 3 если данные для метода 1 изменились метод 2 => метод 3 если данные для метода 2 изменились, но данные для метода 1 в порядке и метод 3 если данные для метода 3 изменились, но все остальное нет. >>2497458 я где-то прочитал что энумы оптимизированы под инт, а если использовать как ключ энум то там вроде бы получается объект вместо инта который внутри в инт, но я не уверен, я хотел чисто инт сравнивать
>>2497467 ну словарю на тим плевать - он все равно вызовет GetHashCode и потом сравнивать будет. А енумы внутри себя имеют кучу переборов "is int32/byte/double"
Блять, я нихуя не понимаю. Просто ни Ху я, ну ладно чуть-чуть понимаю. Почему код стал таким "другим". Нет я встречал и использовал интерфейсы(нямка), делегаты и прочая, но когда попал на работу и увидел кодище, то просто ахуеваю. Как будто три года изучения канули в лету и пиздец. Я тут за ночь могу написать дипломный проект, что рук охуеет, но тут это какой-то ужас
>>2497567 Если это так, то почему иногда когда я из таски обращаюсь к основному потоку, то он сыпет экспешный о том, что низя из другого потока к мейн потоку обращаться. Когда писал бэкэнды, с этим проблем не было. А когда писал клиентские приложения, то орал.
>>2497925 я это 3 треда назад пояснял. потому что у тебя в голове перемешались понятия
У тебя в голове таска - "вот это мне нужно выполнить отдельно в другом потоке/тредпуле"
А на деле есть такие понятия 1 таска, которая имеет семантику "задача", то есть что то логически отделить и выполнить. 2 Объект-дескриптор, который ассоциирован с этой задачей чтобы видеть статус, дожидаться и получить результат (его синонимы - Defer/Promise/Future/..)
Пункт 1 говорит про то что у задачи есть границы и вообще она будет выполнена и есть начало конец. Но тут нет ничего про то "как она будет выполнена".
Поэтому таски сами по себе не работают. Это просто определение корутины, которые ты называешь тасками.
Их выполняют другие - тредпул, отдельные потоки, процессы, вообще никто (CancellationTokenSource)...
И все траблы от того, кто выполняет и как. В бэкенде нет контекста синхронизации по дефолту, а в десктопах есть - и тебе и мешает. Но контекст синхронизации - это не из TPL, а из классического многопоточного программирования.
Туда же и async/await - он просто пихает все в контекст синхронизации или тредпул. Это механизм тоже не из TPL, а тупо сахар, который появился позже понятия тасков
Task.Factory.StartNew/Task.Run - несмотря на класс Task - тупо хелперы для запихивания задач в тредпул/свой поток (ну чтобы все было красиво и ты не работал напрямую с тредпулом, что неудобно)
Смотритет какая фигня. Сервер. TCP. Подключаются 50к клиентов. Соответственно - тредпул расширяется. Пытается обработать клиентов. Все ок. Лезем в базу - хуяк, количество коннектов резко к максимуму подходит. Часть коннектов клиентов успешно обрабатывается. Дальше - все соединения, что создал EFCore - висят в Idle. Умирают через 5 минут. Это повторяется. Собственно. Я нашел костыльный метод - убиваем коннект который больше 10 секунд в Idle. Но это пиздец же не правильно и кажется оно не должно так работать.
Проблема, как я понимаю, в том, что коннект привязывается к потоку в котором создан. А т.к. всюду асинхронщина и ConfigureAwait(false) - выходит так, что выполнение работы с сессией клиента - по потокам прыгает. Почему так думаю? Потому что чтобы воспроизвести проблему - достаточно создать 110 тредов и в них контекст создать - сразу счетчик подключений в pgAdmin - скакнул, а потом оно Idle. И из других мест не подключиться. Собственно. Че делать-то? Вроде как PgSQL - хороший-годный. Я - дебил, что не следил за потоками и вот так вот скакал, чтобы ничего не простаивало. Но блин. Да.
Господа програмистеры, есть вопрос. Только что закончил изучать ООП. Я теперь могу претендовать на должность стажера/джуна?Если нет, то что мне в какую тему мне следует углубляться дальше? Алсо, планирую работать в бэкэнде.
>>2498279 >Я теперь могу претендовать на должность стажера/джуна Нет. Джуниор - это младший специалист. Читай >>2484369 Со всем, что там написано в 8 пункте необходимо быть знакомым просто, этого достаточно
Аноны, проясните плс следующий момент. Зачем в 26 строке создается объект базового класса с конструктором дочернего? Он же все равно не будет иметь весь функционал. Не легче создать объект дочернего?
Господа, а где можно порешать задачки на закрепление материала? Глянул два самых популярных варианта - один сайт от телеграмма забыл как называется - 90% какая-то хуета на циклы, найти что-то на конкретную тему на грани фантастики. Второй же это кодварс, но в нем нихуя не смог разобраться, у меня английский совсем нулевый. Есть еще какие-то варианты?
>>2499266 Создается объект дочернего класса и приводится к базовому нахера? Ну может показывают что так можно. Для примера по полиморфизму кода не хватает.
Аноны. Возникла проблема, не то чтобы нерешаемая, скорее решение через всякие жопы.
Есть UserControl (пикрил), а в нем TabControl. В каждом табитеме контент разный высоты. Соответственно, при переключении на таб, меняется высота UserControl (у него размеры автоматические).
Так вот этот юзерконтрол должен отображаться по нажатию кнопки в главном окне (пикрил 2), но не просто, а с анимацией высоты — по типу "шторки" меню в смартфоне. По сути это должен быть попап. В нем уже есть встроенная анимация, но только на отображение, но если я буду переключать табы, то анимации смены высоты не будет.
Так вот была идея завернуть юзер контрол в какой нибудь контейнер и опираясь на UserControl.ActualHeight менять высоту контейнера. И вот тут возникает проблемка. 1. Если контейнером будет Grid, то статическая высота грида делает ActualHeight контента равным, собсно, высоте грида. И я тупо не знаю до какой высоты анимировать. 2. Есть контейнером будет Canvas, то габариты холста никак не повлияют на актуальный размер контента. Но тут возникает другая проблема: по задаче, ширина UserControl должна быть равна ширине контейнера.
Короче, я не знаю как естественным образом взять максимальную высоту UserControl, если этот контрол может быть "сжат" гридом. И таких UserControl-ов будет 10500 и я не хотел бы в каждой прописывать новое свойство, добавлять подписки на события (даже если это будет абстрактный класс).
>>2499852 Сила ООП не в 3х китах, а в гибкости, которое оно дает. Ты формируешь рабочий граф и все начинает работать, инкапсулируется, SOLID-ируется, сообщения бегают. В общем это нужно мозг форматировать чтобы ООП начать использовать по делу, а не просто так.
я очень давно не читал книг, поэтому посоветую старое - дуй читать про паттерны, только не GoF, а что то типа Thinking about patterns (и похер что там жава), а потом вроде бы "Джошуа Кериевски: Рефакторинг с использованием шаблонов"(название вроде то, но год смущает) не сильно прорабатывая (сам то я ее не дочитал, когда понял суть)
Подскажите пожалуйста по поводу паттернов. Я хочу, что бы разные части моей программы (которых может быть сколько угодно) работали с разными реализациями интерфейса IPrinter (которых тоже может быть сколько угодно). В общем, в конструктор классов частей программы я буду передавать словарь с реализациями. Моя задача в том, что бы если в будущем появятся еще реализации интерфейса IPrinter, я мог добавить реализацию нового класса и дописать лишь одну строку - dictionary.Add("N", () => new PrinterN());
var dictionary = new Dictionary<string, Func<IPrinter>>(); dictionary.Add("1", () => new Printer1()); dictionary.Add("2", () => new Printer2());
var class_of_getter = dictionary["1"].Invoke(); class_of_getter.Print();
public interface IPrinter { public void Print(); }
class Printer1 : IPrinter { public void Print() => Console.WriteLine("hello 1"); }
class Printer2 : IPrinter { public void Print() => Console.WriteLine("hello 2"); }
Не является ли то, что я тут написал, антипаттерном? Возможно, кто-то уже такое придумал?
>>2499915 >Не является ли то, что я тут написал, антипаттерном? Под антипаттерн можно подписать практически, что угодно. То что, ты описал по факту разновидность паттерна стратегия, одного из самых часто применяемых. >Возможно, кто-то уже такое придумал? В DI контейнерах даже под это дело специальные механизмы есть, когда ты запихиваешь в контейнер кучу реализаций одного интерфейса, а потом при внедрении получаешь словарь на них и выбираешь нужный. Поздравляю с изобретением велосипеда. Без сарказма.
посоны проясните моменты некоторые по неймспейсам и ассембли вопрос 1: есть dll #1. в нем статический класс со статическими методами и т.д., к нему обращаются изнутри, все туда-сюда есть dll #2. с тем же статическим классом. что будет когда два dll встретятся в одном ассембли? два разных но одинаковых во всем кроме неймспейса статиков будет? как поступать в таком случае если я не знаю заранее будут ли две дллки в одной ассембли? вопрос 2(практически то же самое): вот я хочу подключить сторонний код к своей хреноте №1. я ее хочу смерджить в один длл со своей хренотой №1. что будет если смердженный код встретится в одном ассембли с собой же но не смердженным(отдельный длл)? и что будет если хренота №1 с этой либой встретится с хренотой №2 с тем же кодом и тем же неймспейсом? как такие вещи вообще решаются? и надо ли
>>2500028 А ты проведи эксперимент. Сделай простые dll-ки по типу тех, что в твоем вопросе описаны и попробуй их объединить. Потом пацанам расскажешь, что получилось.
>>2500122 Хз. Может демогстрация неявного каста и возможность присвоения экземпляра дочернего класса переменной базового. Больше код ничего не демонстрирует
>>2500278 >There is no argument given that corresponds to the required formal parameter 'classname' of 'Program.Warrior.Warrior(string, string, string, string, string)'
Блять, как сериализовать класс в xml, а потом в строку минуя ебучий Stream? Хочу лист с классом Valute сериализовать в xml строку, но нужно обязательно создавать ебучий файл, а мне он не нужен. Как быть? Подскажите, пожалуйста.
Есть грид с четырьмя строками. <Grid > <Grid.RowDefinitions> <RowDefinition Height="20"/> <RowDefinition Height="20/> <RowDefinition Height="*" MinHeight="150"/> <RowDefinition Height="20"/> </Grid.RowDefinitions> </Grid>
Одна из строк имеет адаптивную высоту с ограничением минимума = 150. Как ограничить основное окно, чтобы оно не сжималось меньше, чем так сказать, результирующий минимум грида с учетом всех строк?
Сап, аноны. Пилю свой пет-проджект, хочу один модуль из него разместить на гитхабе, чтобы пользователи могли докинуть фич, если им надо будет. Как подобное принято интегрировать в основной код? Публиковать в Nuget наверное не стоит, раз этот модуль только в моём проекте может использоваться?
>>2500454 >Как подобное принято интегрировать в основной код? с высказыванием нехороших слов о авторе. Это ведь не пхп/питоны всякие где можно вот так в продакшене забирать с гитхаба. Тут компилить нужно и с этим часто проблемы.
>>2500564 Я не могу знать. Некоторые ячейки могут поменять свойства в процессе, поэтому я не могу где-то единожды вычислить значение. При этом расчеты в риалтайме при SizeChanged слишком затратны, если ячеек будет 100500.
А еще в некоторых ячейках стоит сплиттер, к примеру. У таких ячеек MinHeight предназначен для сплиттера, а сами ячейки не реагируют на изменение габаритов окна. Я не могу просто циклом пройтись по всем ячейкам и взять оттуда MinHeight.
А вручную указывать, мол, "здесь возьми MinHeight, а здесь ActualHeight" — это какой-то бред.
>>2500583 вообще не понимаю причем тут ячейки. Есть размер таблицы, можно следить за его SizeChanged, можно за SizeChanged окна - одинаково будет. Лучше за SizeChanged таблицы и выставлять MinHeight окна
Как в темплейтах WPF одному цвету присвоить значение другого цвета?
Цвет в одном файле <Color x:Key="MyBaseColor">#FF00FF00</Color>
Цвет в другом файле должен получить данные из MyBaseColor <Color x:Key="MyLocalColor" />
Можно, конечно, во втором файле создать кисть, которая бы ссылалась на цвет в первом файле, но беда этих темплейтов в том, что кистям и прочим параметрам нельзя ограничить область видимости. И при выборе кисти, в каком нибудь окне свойств студии, вываливается список из миллиарда кистей, собранных по всем темплейтам и контролам.
Разве нет никакой инкапсуляции в XAML? Это уже второй вопрос.
In the software industry PHP is used first and foremost for small projects, because it can easily lead developers into writing code that is bad, disorganized and hard to maintain, making it inconvenient for more substantial projects. This subject is also debatable, but it is commonly accepted that, because of its antiquated concepts and origins it is built on and because of various evolutionary reasons, PHP is a language that tends towards low-quality programming, writing bad code and creating hard to maintain software. PHP is a procedural language in concept and although it supports the paradigms of modern object-oriented programming, most PHP programmers write procedurally. PHP is known as the language of "code monkeys" in the software engineering profession, because most PHP programmers write terrifyingly low-quality code. Because of the tendency to write low-quality, badly structured and badly organized programming code, the entire concept of the PHP language and platform is considered wrong and serious companies (like Microsoft, Google, SAP, Oracle and their partners) avoid it. Due to this reason, if you want to become a serious software engineer, start with C# or Java and avoid PHP (as much as possible).
A programmer’s productivity under pure C is many times lower compared to their productivity under modern general-purpose programming languages like C# and Java. A variant of C is used among Apple / iPhone developers, but not because it is a good language, but because there is no decent alternative. Most Apple-oriented programmers do not like Objective-C, but they have no choice in writing in something else. In 2014 Apple promoted their new language Swift, which is of higher level and aims to replace Objective-C for the iOS platform.
C++ is good when you have to program applications that require very close work with the hardware or that have special performance requirements (like 3D games). For all other purposes (like Web applications development or business software) C++ is inadequate. We do not advise you to pursue it, if you are starting with programming just now. One reason it is still being studied in some schools and universities is hereditary, because these institutions are very conservative. For example, the International Olympiad in Informatics (IOI) continues to promote C++ as the only language permitted to use at programming contests, although C++ is rarely used in the industry. If you don’t believe this, look through some job search site and count the percentage of job advertisements with C++.
The C++ language lost its popularity mainly because of the inability to quickly write quality software with it. In order to write high-quality software in C++, you have to be an incredibly smart and experienced programmer, whereas the same is not strictly required for C# and Java. Learning C++ takes much more time and very few programmers know it really well. The productivity of C++ programmers is many times lower than C#’s and that is why C++ is losing ground. Because of all these reasons, the C++ language is slowly fading away and therefore we do not advise you to learn it.
>>2500822 Какая же ебанина... Либо я чего-то не знаю. Вот есть практика, что перед стилями выводится список цветов\кистей, чтобы каждый раз не лазить по стилям. Любой стиль в MDSN так представлен.
Допустим в одном словаре ресурсов у меня стоит цвет <Color x:Key="Background">#FF00FF00</Color>
Тут я подгружаю другой словарь ресурсов, у которого есть цвет с таким же ключом <Color x:Key="Background">#00000000</Color>
Одно переопределяет другое. И как быть? Переименовывать один из цветов? А затем шатать ВЕСЬ стиль, чтобы исправить все ссылки по этому ключу? А завтра появится еще один стиль и давай поновой. Неужели нет способа как-то ограничить область видимости кистей? Может есть какой-то контейнер, в который можно сапизнуть все кисти?.
>>2500454 Как git сабмодуль. Тогда у тебя в основном проекте и контроль будет из какой ветки тянуть версию библиотеки, так и пользователи сами у себя смогут впилить ветку с нужными фичами и переключаться на нее.
>>2500857 дык в этом и есть смысл - можно переопределить лишь часть, остальное унаследуется.
И ты подгружаешь, а значит переопределяешь одни значения перегруженными из подгруженного стиля. Если ты не хочешь их переопределять - тогда хули они делают в стиле что переопределяет дефолтный
Ты можешь переопределить обратно - создать стиль на основе подгруженного, который вернет плохие места назад, но вообще "ну а как ты хотел" - идет поиск ближайшего стиля по дереву и первым встречается твой перегруженный.
давай имена стилям, наследуй, в общем СТРАДАЙ.
В остальном ...ну да в WPF с этим неудобно сделали. Но не потому что можно переопределить, а потому что херово как раз с наследованием. Его нужно задавать явно.
Допустим, Вася Пупкин сделал стиль для кнопки (пикрил 1). Он вывел две кисти для удобного редактирования стиля. После присоединения этого словаря стилей, кисти с ключами "Button.Background" и "Button.Outline" становятся общедоступными.
Второй сотрудник — Костя Синичкин, увидев эти кисти, решает забиндить их к каким-то другим элементам (они же в едином стиле). А через неделю заходит босс и говорит, что в нашем меню добавляется новая кнопка - СУПЕР КНОПКА!, не простая, а с совершенно новым стилем, и наш уважаемый третий сотрудник Петя Клюшкин, уже подготовил под это дело словарь ресурсов (пикрил 2).
Петя Клюшкин, как и Вася Пупкин тоже вывел две кисти с ключами "Button.Background" и "Button.Outline". И что же произошло? Все, что делал Костя Синичкин к херам переопределилось. Костя Синичкин ругает Васю Пупкина, что то поменял стиль, а тот утверждает, что этого не делал.
Что Пете Клюшкину теперь делать? Переименовывать все совпадающие ключи, о совпадениях которых студия тебе не расскажет? Ты вообще в другом отделе. Ты не можешь просто переименовать ключи, ты должен перелопатить весь стиль. ЭТО ПИЗДЕЦ. Я не знаю как донести важность инкапсуляции. Даже в одиночном проекте я могу через месяц забыть, что под каким-то ключом уже есть стиль и не понимать шо вообще произошло.
А как теперь взять кисть? Пробовал: Background="{DynamicResource ResourceKey=MyBrushes[COLOR_NAME2].Item}" Ошибку не выводит, но выглядит как Null. При StaticResource мгновенно ругается, что не может найти ресурс с таким ключом.
как быть, если у меня есть объект с переменными-настройками, и их очень много? я сейчас скрыл их в абстракт классе и наследую от него но все равно получается слишком дохуя может быть имеет смысл выделить все настройки в отдельный класс-настройку?
>>2500924 ну такие стили позволяют в ресурсах переопределить кисть допустим. И в ресуре задается тема всего приложения.
Почему вдруг твоя особая кнопка должна менять общую тему приложения. Пусть для нее будет свой стиль где все и будет вшито. Зачем для этого делать свой словарь кистей? чтобы поменять если что их? ну так поменяешь сам стиль какая разница то.
Хз как иначе. при интеграции словарей они же мержатся и в итоге работаешь с одним большим словарем и никак не сделать разделение если ключи совпадают.
>>2500931 Ну группируй настройки. Далее проблемы только хранения чтобы можно было хранить эту структуру....ну где ты там ее хранишь.
Посмотри на appsetings.json в том же асп.нет - там же иерархия которую можно читать и прямо по строкам или же забиндить на граф объектов (будет аналог десериализации из жсон, только без конвертеров)
>>2500933 группировать в смысле в объект, так? у меня они все (сейчас 10, я потом еще хочу дополнительные добавлять для большего контроля) вот как на пике под копирку
>>2500932 >Почему вдруг твоя особая кнопка должна менять общую тему приложения. Потому что у них совпадают ключи? Может ты стиль вытащил из пыльного чулана и непонятно как ты в будущем в приложении хочешь назвать базовые стили.
Я просто не понимаю как столько лет существует впф и ни у кого нет на эту тему вопросов. Может есть какой-то способ. Допустим я хочу хранить все свои кисти в Dictionary >>2500900 , меня и такой подход более чем устроит, но чет не получается оттуда вытащить.
>>2500939 ты неправильно ставишь вопрос сначала ты решаешь как будешь хранить, раз уж ты хочешь не только читать как вот в асп.нетах всяких. Ты хочешь редактировать и сохранять. А значит должен выбрать как ты это будешь делать А потом уже смотреть что может предложить тебе выбранная система конфигурации.
>>2500940 ну если не вдумываться что ты можешь 1 ты можешь создать общий стиль на который ссылаться через BaseOn и там наплодить в ресурсах кучу кистей 2 ты можешь просто сделать свой класс MyDynamicResource который есть MarkupExtension и он тебе достанет откуда нужно. А стандартный DynamicResource ищет просто по ключу и про твой словарь знать не знает 3 по идее можно юзать тупо биндинг. Есть объект, у него данные - ну так просто биндинг - уж он то в отличие от Static/DynamicResource ищет как тебе нужно. Правда тут нужно будет искать по имени, а оно ж может быть хер знает где определено. (хотя можно и по типу поискать)
>>2500955 У тебя ридонди конфиг Нафиг тебе хмл Да и даже если он - он тоже десереализуется в граф классов
И всё же вопрос был про систему работы с конфигом
Из стандартных в старом дотнете какая то на хмл основанная Можно читать и писать А в вебе там новомодный конфиг. Он только на чтение и собирает в себя разные форматы
Но если только читать то абсолютно изи сделать хоть свое Да даже если хранить - оно легко
Велик не значит плохо работает Это просто значит что левый человек сразу не будет знать где что в коде
>>2500966 >Нафиг тебе хмл система сериализации в конкретно моем случае принимает только хмл. это не моя система если что и лезть внутрь и чето там менять я не собираюсь. сказано хмл значит хмл. я вообще не про конфиги с вебами вопрос задавал, а как правильно организовать работу с раздувшимся от переменных классом.
>>2501029 твой вопрос вообще изначально не очень понятен. Хз что значит асбтракт класс. Есть класс работы с конфигом. Это может быть класс "дай значение такого то ключа" или тупо граф DTO объектов.
И твое "очень много" я трактовал как "у меня 100000 полей в 1 классе"
>>2501034 да, я хреново вопрос поставил полностью выложить слишком много кода выходит в экран не влезет, но я что-то такое вот делаю примерно я хочу завернуть все проперти с полями которые используют потомки ClassBase в отдельный класс и хотел узнать как это лучше всего сделать и может быть есть какой-нибудь паттерн на эту тему
>>2501324 Сказали залогиниуться и пропадёт. Пришлось аккаунт делать в мелкософте. Но это всё равно не бесплатный софт получается, а подписка бесплатная на неопределенный период и непонятно что если я хочу на оффлайн компе аутировать .
Здарова, подскажите как быть. В Wpf проекте имеется обсерваблколлектион привязанный к листвиев. Так вот при добавлении сразу несколькоих элементов в коллекцию интерфейс иногда подвисает, есть ли способы этого избежать?
Охуительные истории вместе с WPF. Решил я, значит, хоть как-то изолировать стили. Создал юзерконтрол, содержащий TreeView, и чтобы стилем для дерева не засирать все приложение, добавил стиль не в <Application.Resources/>, а в <UserControl.Resources/>.
И затем я беру и сей юзерконтрол добавляю в окно. И что бы вы думали? ... Не найден стиль. При этом юзер контрол этот стиль видит, а родитель — нет.
Как только я добавляю стиль в глобальные ресурсы — все норм.
>>2501496 Ну а чего ты ожидал? Естественно родитель не видит стиль контента. Добавляй в глобалку. @ Ну а чего ты ожидал? Естественно стили будут перегружены, ведь у тебя все в глобалке.
>>2501327 Хз, я несколько лет юзал комьюнити и лицензия не слетала. Сам мелкософтовский акк существует уже лет 5, на протяжении которого ставились студии.
Проверь тип лицензии, ну мб у тебя какой-то конфликт с "поломанной" версией.
А чего это шарпы быстрые такие? Ну типо по скорости шарпы догоняют Го, но Го компилируемый и там ничего в принципе нет. В джаве тоже ничего нет (побольше чем в го конечно) и она помедленнее будет несмотря на все попытки оптимизаций. В CLR дело? Типо наверно лучший язык по соотношению фичеватость/скорость не учитывая хаскелли
>>2501734 >>2501496 Нахуя вы это говно жрете. Я когда только увидел эту XAML парашу в первый раз, понял что мне с ней вообще не попути. А потом постиг дзен, ASP.Net WebApi и вообще забыл о десктопе и фронте как о страшном сне.
>>2501753 А шо если мне плагины делать нужно? Или как говорится, не стоит прогибаться под задачи, однажды они прогнутся под нас? Алсо, основное отличие студенческой работы от реальной состоит в том, что в студенческой сначала выбирают технологию, а под нее придумывают задачу.
>>2501759 >регистрация должна быть в разных классах Так она в разных. 1. Я создал UserControl, в нем сделал депенденси проперти ButtonHeight 2. Я создал класс MyClass, наследующий TreeviewItem (ну мне нужна, типа, коллекция итемов внутри итема), в этом классе тоже создал депенденси проперти ButtonHeight. 3. Затем определяю стиль моего класса MyClass, где в Template пихаю UserControl.
И вот на этой стадии ругается на мой класс MyClass, мол, братан а уже зарегистрировано свойство с именем ButtonHeight.
Или может есть какой-то способ как "вытянуть" свойство UserControl наружу? Ну к примеру пикрил. Я в темплейт добавил юзерконтрол "MyUserControl", у которого есть свойство "ButtonHeight". Такого свойства в TreeViewItem нет. Как мне его сделать доступным снаружи? Я очевидно начинаю колхозить свой класс с дублирующими именами свойств. На Grid.Row не смотри.
>>2501761 >Да всё нормально с xaml Не-не. Хуйня это полная. Попытка перетащить уебищную фронтовую парадигму в нормальный язык. Даже долбаные js фреймворки вроде react'а в разы удобнее (хотя тоже дерьмом пахнут местами - и имя этому дерьму js) >И не всем же удается кодить именно вебапи Учись, так чтобы быть более востребованным как узконаправленный специалист. С пришествием .net Core вообще лафа наступила и профессия .net фулстека потихоньку отмирает, в пользу чистого бэк-энда. >Вали с работы и дай посидеть на твоем месте тем кому повезло меньше Вот только два месяца как поменял работу. Можешь занимать.
>>2501766 >Или как говорится, не стоит прогибаться под задачи, однажды они прогнутся под нас? А то. Дело бизнеса "Бабки платить и завалити ебало". А что с этими бабками делать мы сами решим.
>>2501784 Нужен TreeView. Но TreeViewItem должен быть со своим стилем, что-то на подобие слоя в фотошопе.
Меня простыня стиля как-то подзаебала, да и вообще работать в полуслепую. Я решил участок с Template вынести в UserControl, чтобы был свой xaml дизайнер и удобно было редактировать (пикрил).
А вот как этот юзерконтрол превратить теперь в TreeViewItem — хз.
>>2501799 >Шарп изначально десктопный язык Десктоп и веб-хуйня несколько разные вещи. Инзачально там winforms был если чо. Ну и так-то это не часть языка если что, а отдельный фреймворк.
>>2501881 ты опять даешь недостаточно информации. По скрину где тут вообще TreeView?
то что юзаешь дизайнер - похвально. Я помню проекты, где ВСЕ делалось через стили перегрузкой темплате. вот где реально дичь.
А так - ну опять же хз твоя проблема. У разных ItemControl при биндинге идет поиск DataTemplate и он сам обернет их в TreeViewItem/ListViewItem и как оно там еще.
>>2501950 Так я и писал изначально, что WPF и его xaml - это подтягивание веб-хуйни с ее разметкой, стилями и т.д. в десктоп. Может не так в изначальном посте выразился, но как-то так.
>>2501968 >WPF и его xaml - это подтягивание веб-хуйни с ее разметкой, стилями вот только это бред
html+css в дотнетах использовалась еще 20 лет назад в первых студиях даже были такие окна и можно было делать гуи.
xaml != html. xaml это хмл...ну да и все. хтмл описывает разметку, а хамл описывает граф объектов. То есть вот как в винформс там генерится код описывающий объекты гуи, так вот хамл это такое же описание, только в виде хамл.
хтмл не является описанием кода никоим образа. он просто описывает структуру и стили же вообще сделаны иначе.
да и как бы гуи с разметкой и стилями - СЛИШКОМ ОБЩЕЕ понятие чтобы приписывать "из веб пришло".
>>2501952 >По скрину где тут вообще TreeView? Это TreeViewItem, а TreeView - пикрил 1.
>то что юзаешь дизайнер - похвально. Только вот мне придется щас скопировать оттуда разметку и вставлять прямо в темплейт стиля.
>У разных ItemControl при биндинге идет поиск DataTemplate и он сам обернет их в TreeViewItem/ListViewItem и как оно там еще. Ну смотри. Вот на пикрил 2 я беру и между открывающим и закрывающим тэгом "TreeViewItem" пихаю еще три итема и они воспринимаются как ItemCollection (в темплейте за это отвечает ItemsPresenter).
Должен отметить, что в моем классе никак не указан ItemsPresenter и я не знаю как его обозначить. Соответственно разметка не знает куда пихать контент. Если я попробую завернуть итемы в свой класс SubtoolItem, то идет попытка заменить контент самого SubtoolItem т.e. ContentPresenter. Собственно и вылезает ошибка: XDG0040Свойство "Content" может быть задано только один раз.
>>2501996 брр. давай начнем с "почему ты не используешь HierarchicalDataTemplate, а городишь свой огород?" тогда может смогу понять что ты пытаешься сделать
>>2502006 Если я чет не использую, значит я об этом не знаю. Пошел гуглить. Я знаю про TreeView, который юзает TreeViewItems, вот и пытаюсь своё как-то приклеить туда.
Сап, нужна оценка специалиста. Был на стажировке по Go, уволился из-за сво. Сейчас нахожусь в польше, и хочу вкатиться в .net
Года 3-4 назад я проходил йоба курсы, обучающие работать с бэкендом (на .net asp core, тогда только только core вышел, кстати). Меня в конце них даже на работу пригласили, но я был не совершеннолетним, так что мне сказали приходите позже. У меня есть пару пет проэктов на гите.
Но я совсем забыл сишарп, и не следил за обновлениями языка.
Я думаю по 5 часов 5 дней в неделю в течении следующих 2 месяцев изучать язык по роадмапу. Это будет где-то 200 часов минимум изучения. Хватит мне столько времени, чтобы вкатиться на джуна, с условием что я имею представление как устоен интернет, и что я знаю алгоритмы, ооп, систему контроля версий, бд, тесты ну и по мелочи ещё? Опять же, мне по-сути надо только повторить всё Какие книжки почитать? Джеффри Рихтера читал.
Ещё вопрос, какой стек выбрать? Я думаю либо backend, либо full-stack, но не знаю что используют для фронта. Я когда-то только ангуляр и чистый жс пробовал и всё. Посоветуйте что-нибудь.
>>2502011 прямое использование Item из хамл нужно только тогда, когда не используется биндинг списка. То есть при MVVM подходе крайне редко, почти никогда.
Вся структура данных определяется графом вьюмоделей, а гуи через биндинг все это рисует используя систему связывания вьюмодели с DataTempate (в котором твой UserControl)
>>2502015 >прямое использование Item из хамл нужно только тогда, когда не используется биндинг списка. Да я и не собирался — чисто для теста, и заметил, что у TreeViewItem содержимое работает иначе.
Начал я разбираться в этой.. чистой архитектуре. Возник вопрос. Вот у меня есть операции crud, но только для внутреннего пользования. То есть извне их никто вызвать не может. Я правильно понимаю, что мне под всё это нужно создавать контроллеры, репозитории и т.д, а потом уже откуда надо в программе обращаться к контроллеру.
>>2502433 Аналога чего? Мы ж не телепаты, чтобы понимать, что твоя приложуха делать должна. Во вторых тебе нужно хорошо осознать сначала, в принципе, понятие абстракции. Атомарно, так сказать. На уровне хотя бы классов, объектов их свойств и т.д. А потом уже лезть в более высокие уровни типа слоев или архитектуры.
>>2502436 приложуха - телеграм бот. Принимает запросы от пользователя и выдаёт ифну из бд. Приложуха уже написана и более-менее работает. Но там каша из классов и тд. Хотел всё по полочкам разложить попутно изучая чистую архитектуру.
вот допустим у тебя простая задача - взять нисколько файлов, читать построчно из каждого файла по строке, потом фильтровать, соединять как то и писать в выходной файл.
ну берешь ты метод Main и в нем открываешь File.OpenRead кладешь стримы в список, открываешь выходной файл File.OpenWrite - и в цикле начинаешь обходить этот список (кстати лучше очередь но не суть) фильтровать и писать в вывод задача выполнена? выполнена. Но выглядит как то "грязно"
И ты дербанишь на статические методы чтения, фильтрации и сохранения. Стало чище, но "классы, где мои классы?"
Хз что такое классы, потому делаешь класс типа class App где в конструктор передаешь пути к файлам и метод Run() делаешь
Но разве "чистый код" такой???? Оопшно, но как то не SOLID-но.
Начинаем "чистокодить" - выделяем класс LineReader, которыйй будет выдавать линии - класс LineWriter, что инкапсулирует куда пишется вывод - класс FilterStrategy чтобы определить как фильруется - CombineStrategy чтобы определить стратегию комбинироания строк
Потом еще в голову "чистый код" стукнет и такой "а вдруг не из файлов читать" и давай еще класс SourceReader вместо простого fileStream и вот уже LineReader работает с набором SourceReader
Ну и конечно LineReaderFactory и LineWriterFactory
Но понимаешь, что этого мало. Все как то жестко связано и ты рождаешь кучу интерфейсов ILineReader/ILineWriter/IFilterStrategy/ICombineStrategy/SourceReader
подключаешь DI контейнер и регистрируешь все в нем.
И смотришь ты на эту гору кода (по сравнению с оригиналом) и задаешься вопросом "а оно все нужно было то?"
>>2502452 Пизжу. с DataContext завелось. Но непонятно почему работает только если я итем сорс привязываю дважды: к TreeView, и к HierarchicalDataTemplate.
Если привязать только к TreeView, то не появляются сабитемы. Если привязать только к HierarchicalDataTemplate, то вообще ничего не видно.
>>2502474 TreeView биндятся корневые ноды к HierarchicalDataTemplate биндятся вложенные ноды. ведь дерево это список списков списков... ну а как иначе. ведь нода может не иметь вложенных нод
>>2502478 ты должен понимать что у TreeView и у HierarchicalDataTemplate РАЗНЫЙ DataContext у TreeView DataContext это твой список во вьюмоделе или где там у тебя, а у HierarchicalDataTemplate контекстом является сама нода и ItemsSource у HierarchicalDataTemplate это для биндинга ВЛОЖЕННЫХ узлов
то есть на твоем пике первый итемс будет искать во вьюмодели, а второй будет искать внутри забинденной ноды
>>2502478 Надо еще погуглить. Ща очень поверхностно все делаю.
И еще назревает вопрос: Вот у меня есть мой юзерконтрол со свойствами, который будет выполнять роль итема. А для списка данных я сделал отдельный класс с похожими свойствами. И список заполняю именно экземплярами этого класса.
Иначе получается, что мне придется дважды инициализировать грузный юзерконтрол — один для списка данных, другой для дерева. Или как-то можно экземпляр биндить, а не создавать новый?
>>2502491 Экземпляр создается всегда. Только тебя это волновать не должно - ты создавай вьюмодели себе, а оно само все. Также ты можешь предоставить разные шаблоны для разных типов данных.
>>2502490 >то есть на твоем пике первый итемс будет искать во вьюмодели, а второй будет искать внутри забинденной ноды Да, щас кликнул по "перейти к источнику" ItemsSource у HierarchicalDataTemplate и он перекинул меня к ItemsSource у TreeView.
Смущает только предупреждение в TreeView, что не найден контекст данных.
>>2502498 как и везде в списковых контролах ItemSource по типу итема ищет DataTemplate DataType="{x:Type" если найдет то рисует иначе ToString() так работают списковые контролы и ContentControl там никаких проблем ты просто создаешь 2 класса Folder и Item у фолдера есть вложенный список. На стороне хамл в ресурсы кладешь <HierarchicalDataTemplate DataType = "{x:Type Folder}" ItemsSource = "{Binding Path=Items}"> <TextBlock Text="{Binding Path=Name}"/> </HierarchicalDataTemplate>
Совершенно идиотский вопрос. Допустим, у меня есть юзер контрол с какой-то там xaml-разметкой. И мне нужен еще один, где меняется только 5% от первого. Не существует никакого наследования в плане xaml?
>>2502472 Спасибо, суть понял. В моем случае лучше оставить как есть, потому что кода не очень много но много , функционал не большой. Но мне энивей хочется натянуть это на нормальную архетиктуру. К тому же самому хочется пощупать, посмотреть как оно все там работает. Плюс если будут смотреть этот проект, явно будет плюсом, что есть какая-нибудь архетиктура.
А можно тогда реальных примеров, когда надо использовать структуру вместо класса?
Вот пишет микрософт когда выбрать структуру вместо класса: It logically represents a single value, similar to primitive types (integer, double, and so on). It has an instance size smaller than 16 bytes. It is immutable. It will not have to be boxed frequently.
А можно примеры такого? Особенно про иммутабельность и >represent single value интересно
>>2502708 про single value перегнули палку. Это типа "если вы пилите ValueObject, то подумайте может структуру сделать, а не класс" Пример хотя бы DateTime
с иммутабельностью все просто - мутабельные структуры зло ибо компилятор активно создает защитные копии при попытке изменения полей структуры и мозг можно сломать отлавливая эти моменты.
Ну а выбирать структуру нужно когда хочешь поменьше грузить GC и от структуры есть польза и не так уж много вреда
>>2502708 >А можно тогда реальных примеров, когда надо использовать структуру вместо класса?
Я с различиями столкнулся до степени, когда "иного пути нет" — это когда работал с отрисовкой графики, где у тебя в риалтайме идут расчеты координат по всяким формулам. Даже стандартные функции из библиотек для расчета каких нибудь периметров, дистанций или точек внутри фигуры, принимают ТОЛЬКО структуры. Причем примитивные т.е. вместо структуры Point(x,y), функция принимает отдельно x, и отдельно y.
А дело в том, что создание экземпляра класса это очень дорогостоящая операция. Может занимать в 10-100 раз больше времени, чем создание структуры. Она практически незаметна в так сказать, спокойном режиме (потому и возникают у тебя вопросы). Но если ты захочешь, к примеру, переместить фигуру прямоугольника по холсту и в каждом кадре попытаешься создать новый экземпляр класса прямоугольника с новыми координатами, то у тебя будет такой жидкий ФПС, что охуеешь. А если прямоугольников в кадре сотни? Можешь сам потестить, посмотри тутор про бенчмарки и замеры скорости. Есть такой BenchmarkDotNet, и тутор от SimpleCode. Затем создай функцию, принимающую классы и принимающую структуры, после чего замерь память и время.
Короче, структуры нужны для краткосрочных событий, повторяющихся с высокой частотой. Тогда ты используешь структуры по принципу "быстро создал, быстро забыл". Необязательно это графика, это может быть цикл с перебором больших объемов данных. Вот внутри цикла ты можешь без зазрения совести создавать структуры. Есть нюанс со стрингами, которые притворяются структурами, будучи классами, но это другая история.
Классы нужны в долгосрочной или среднесрочной перспективе — ты его один раз создал и дальше пользуешься. Экземпляры классов создают до цикла, и уже в теле цикла их обрабатывают (это не правило, но я так делаю). А то может случиться так, что сборщик мусора будет подчищать неиспользуемые экземпляры классов медленнее, чем создаются новые экземпляры — тогда твоя программа мало того, что захлебнется при расчетах, так еще и количество занимаемой памяти взлетит в небеса.
>>2502502 HierarchicalDataTemplate работает только с TreeView, а у него в стиле прописана стрелка, сигнализирующая вложенный контент (типа как пикрил). Короче, без переопределения стиля не обойтись.
>>2502893 да. с одной стороны WPF позволяет переопределить эти компоненты через стиль с другой - рукожопные дефолтные шаблоны требуют полного переопределения шаблона что не сильно сложно ибо 90% копипаст с ориг шаблона или с SO, но пипец портянка получается.
>HierarchicalDataTemplate работает только с TreeView, не совсем верно. это TreeView работает с HierarchicalDataTemplate ты можешь спокойно запилить свой контрол работающий с чем угодно существующим.
>>2502952 В классе данных, к которому привязывается TreeView, установил событие, срабатывающее при изменении свойств в этом классе: PropertyChangedEventHandler, наследуемый от INotifyPropertyChanged
Теперь при изменении свойств данных, автоматом меняются и свойства итемов TreeView.
А как сделать наоборот? На пикрил, у меня при раскрытии TreeViewItem срабатывает триггер, который меняет текст в свойстве Header. Визуально я вижу изменения, но событие PropertyChanged не срабатывает — данные остаются неизменными.
>>2503264 Ну на скрине ты никак не сообщаешь классу данных (который datacontext) о событии isexpanded, а всего лишь напрямую меняешь хидер Для решения можешь погуглить вариант биндинга к isexpanded Либо внутри теститем отслеживать ischecked и прокидывать датаконтексту
>>2503313 >а всего лишь напрямую меняешь хидер Ну так у меня в итеме (пикрил) текст тоже двухсторонне привязан к свойству Header. При смене текста должен произойти пинок проперти Header, который связан с проперти datacontext.
Вот если я через событие поменяю Header, то datacontext это улавливает.
У меня на ноут вижуал студия не ставится. Пробовал и про и коммунити, и пиратскую версию и оффициальную, когда установка доходит до 100%, пишет очистка а потом через несколько сек выкидывает ошибку без номера, типа неудалось установить и всё. На комп нормально поставилось а на ноут не хочет. Может это быть изза васянской версии винды? Я уже не знаю что ему блядь надо в чем причина. Поставил покачто ВС код с .Нет СДК и пердолингом.
>>2503365 как вытащить как вытащить? как и везде - биндинги к свойствам, или просто событие и там обратиться к вьюмодели.
Лично я вот такую портянку "кто на кого биндится без 0.5 не понять" не делаю. У меня есть вьюмодель и она является точкой схождения биндингов и в общем то хранилищем визуальной модели. И вот так бы IsExpanded я прокинул минуя вьюмодеь только если бы ну реально нечего было делать ей во вьюмодели (я все таки различаю состояние (что рисовать) и сам вид (как рисовать)) Но в твоем случае тебе определенно это знание нужно - так не усложняй схему биндингов.
>ему не доступен экземпляр TreeView. и нах не нужен вьюмодели твой тривью. Вьюмодель ничего не знает про вид. вообще НИЧЕГО. Она не знает кто на нее смотрит, кто ее использует и для чего (отображение). Ну логически она (вернее программист который ее пишет) конечно знает, ведь это вид просит ее "дай мне правильный стейт", но никакой другой связи нет.
>она помедленнее будет несмотря на все попытки оптимизаций Последние годы основные оптимизации делались в GC. Ну и тут еще у жабы оверхед по памяти будет побольше из-за исторических ошибок
>>2503489 Это хорошо показывает, чем на работе занимаются шарписты на самом деле. Древний проприетарный дотнет фреймворк, формочки на винформах и WTF, программирование мышкой, засилье винды, а неткор+ - это мем вкатышей, поиграться и никогда не использовать в проде. Убийца жабы, говорите?))) Ну-ну.
>>2503601 Хули мне твоим неткором делать, блять, долбоеб? У меня плагин программы, существующей онли под шиндовс и мак (где без лицензи разраба ты хуй простой). Иди посмейся над создателем программы, клоун — он же точно тупее тебя.
Сидит тут деревенский дурачок, надувающий джаву через соломинку, и чет мне советует, нихуя не зная о ситуации. Вышлите претензии в письменном виде, милорд-обрыган, я обязательно их прочитаю своей жопой после того, как хорошенько просрусь.
Антон, если в теме, то подскажи, что пизже на .net6 использовать GostCryptography или BouncyCastle? Задачи: подписание, расшифровка, проверка, ГОСТ 34.11-2012.
>>2503630 Насчёт BouncyCastle хз, но GostCryptography - тупо драйвер-обёртка для криптопровайдера и сама работать не будет без установленного КриптоПро CSP или аналога (а он платный и стоит немало). Более того, такие СКЗИ требует сертификации ФСБ, и, если это важно, как в случае с ЭЦП для госорганов, любая проверка контролирующими органами будет иметь серьёзные юридические последствия. Если BouncyCastle умеет сама в ГОСТ-2012, лучше эту либу юзать только для тестовых утилит и не более.
>>2503642 >Насчёт BouncyCastle хз, но GostCryptography - тупо драйвер-обёртка для криптопровайдера Ну мне по факту это и нужно. Просто самому ручки у advapi32.dll и crypt32.dll дергать это тот еще геморрой. Я написал несколько методов, оно вроде работает, но в рот имел я все это барахло с указателями и unmanaged хренью поддерживать в будущем, хочется что-то готовое. >без установленного КриптоПро CSP или аналога (а он платный и стоит немало). Более того, такие СКЗИ требует сертификации ФСБ, и, если это важно, как в случае с ЭЦП для госорганов, любая проверка контролирующими органами будет иметь серьёзные юридические последствия. Ну это понятно, но это не моя проблема, а заказчика. В том смысле что стульев у него по факту всего два КриптоПро и ВипНет. По факту будет КриптоПро. >Если BouncyCastle умеет сама в ГОСТ-2012, лучше эту либу юзать только для тестовых утилит и не более. Они обе судя по всему умеют. Вернее GostCryptography изначально, а у BouncyCastle есть форк с их поддержкой. Судя по тому, что я вычитал BouncyCastle более популярен и инфы по нему больше. Но честно говоря я в сорцы заглянул и там пиздец какой-то внутри, какая-то каша в которой хер разберешься. В GostCryptography все на первый взгляд более аккуратно и понятно выглядит и поддерживаемо будет проще если что. Но по нему и инфы меньше.
>>2503961 У меня идея — добавить свойство Index в каждую ноду, потому что индекс нужен мне в 100% операций. Но если будет операция удаления\перемещения, то вызывается событие для всех остальных нод, и те прибавляют или убавляют свой собственный индекс на нужное значение.
>>2503415 Я сейчас смотрю MVVM и чет там какие-то маня-ситуации.
>Вьюмодель ничего не знает про вид. Охуительные истории. А теперь задача: При выборе ноды в тривью, моя программа должна послать другой программе состояние этой ноды и ее индекс (ну потому что другая программа только это и понимает). И как же эта нода расскажет про свой индекс не зная где она находится? На деревне у дедушки?
Наверно предполагается, что вся остальная часть приложения работает в тех же условиях, иначе пук-среньк.
>>2503987 >Я сейчас смотрю MVVM и чет там какие-то маня-ситуации. нет там никаких маня ситуаций. вьюмодель держит состояние вида, а вид синхронно рисует это все как ему хочется
>И как же эта нода расскажет про свой индекс не зная где она находится? На деревне у дедушки? она знает где она находится. на уровне вьюмоделей у тебя тоже дерево. Представь что ты пишешь в консоли - ты построил дерево и вот это оно и есть - и ты можешь получить в нем индекс, что то менять и так далее.. Просто это дерево НИЧЕГО НЕ ЗНАЕТ (ему не нужно) про тривью ибо это просто дерево из вложенных объектов. НО вот тривью про это дерево знает и может его отрисовать.
В любой момент ты можешь выбросить WPF и заменить гуи на консоль. Так конечно нет смысла делать, но вот тестирование другое дело. Точно так же работает и мультиплафторма - вьюмодель одна, а под каждую платформу вид рисует по своему. И это можно ибо вьюмодель ни про кого не знает.
Нужно запилить преоектик: api на дотнете + фронт. Что лучше взять для фронта человеку, который только jQuery тыкал. React или Vue? Каких то супер фич у фронта не будет, поэтому в приоритете простота изучения до уровня mvp+. Посоветуйте. И да, хочется пощупать именно популярное и современное, поэтому варианты которыми пользуются 1.5 анонимуса не предлагайте.
>>2504026 Скажу только за реакт, т.к. только его знаю. Он в принципе простой, если знаешь js, то на его освоение уйдет от 1 до 3 недель. Но у него есть две разновидности (ну или парадигмы). Одна - это когда компоненты пишутся на классах, другая на хуках. Первая чем-то ближе к ООП и для бэкэндера будет попроще в освоении, но считается уже года 3...4 устаревшей и так уже не пишут. Вторая чем-то ближе к функциональщине и считается более актуальной. Но менее удобная и понятная на мой взгляд. Я бы для себя наверное сейчас вью бы взял, т.к. думаю что с учетом знаний освоил бы его быстро. Но если бы это было с перспективой на профессию, то реакт в связке с .net чаще встречается. С другой стороны я в фулстеки возвращаться не собираюсь, так что точно попробовал бы вью.
>>2504007 Кажется я начинаю въезжать в логику MVVM паттерна. Ну по сути вьюмодель это как прилинкованный файл к xaml во всяких окнах, юзерконтролах и страницах, только живет своей жизнью.
>>2504350 верно до наоборот. Есть разные способы работы с гуи. все они частично имеют общие подходы, так что опишу отличительные части. 1 типа как хтмл или хмл в андроид классик - описывается разметка и далее кодом все это дело собирается во что то. Классика - ловим событие и в хендлере допустим меняем цвет чего то напрямую. ну поверх этого делают еще биндинги в некоторых местах.
2 как в винформс контролы и их расположени описывается кодом (пусть даже этот код генерит дизайнер) сам гуи и далее код работает с этими контролами напрямую. Поверх этого тоже есть биндинг частично. А так - событие, хендлер, что то меняем в контролах.
3 WPF+MVVM - тут уже биндинг прикручен не сбоку, а является центральной частью и есть средства чтобы вюмодели просто содержали "что рисовать", а мощная система биндингов позволит декларативно связать с гуи, который знает "как рисовать". гуи и вьюмодели могут быть зеркальным отражением, а могут полностью отличаться. Главное от вьюмоделей - удобно представить данные для отображения и держать в себе состояние. Тут уже обычные события редкие гости - их заменяют биндинги и реакцию на событие тоже заменяют биндинги.
4 MVU - жетпак композе, комбине у эпл, возможно мауи. Тут гуи описывается кодом и есть стейты (особые переменные). Если они меняются то происходит перевыполнение кода описывающего гуи. Конечно из-за оптимизаций меняется тот же контрол, который подписан на изменение стейта и это логически похоже на MVVM + контрол (который типа изменяет себя при изменении того, на что забинден), но а) там нет биндингов - гуи следит только за стейтами и обновляется при их изменении. То есть можно образно считать что заново выполняется весь код описыващий гуи. б) из за того, что это код, то типа код напрямую работает в гуи. вместо Visibility.Collapsed для кнопки юзается if(условие) { наша кнопка }. Если условие стал false то кнопка исчезнет при следующем проходе. Ну тут в комбайне и в мауи не сильно это заметно ибо там классы используются с требованием конструктора, метода типа рендер (ну а чем это не контрол то обычный а? в чем раличие???), а вот в жетпак композ это функции и получается буквально код (от чего я ссу кипятком от такой гибкости, но считаю что WPF не хуже - просто в нем другой подход)
Так что вьюмодели это как типа толстые контроллеры в ASP.NET которые и команды принимают и говорят что рисовать, а видом является фронтенд, который все это рисует.
за счет центральной системы биндингов MVVM просто лютый вин. Ну правда там начинаются свои проблемы в виде "god viewmodel" но все же все равно удобнее обычного подхода как в винформс. И при некотором умении даже сверху можно прикрутить Lifetime (хоть WPF к этому подходит как винт вертолета подводной лодке)
>>2503630 Ангуляр >>2504437 Да, юзаем на проекте для внутреннего кала. Фигня все еще лучше ваших десктопов реальный юзкейс у него один - какая-товнутреняя админка. На удивление блейзо сервер выглядит лучше, чем ВАСМ
>>2503601 Это показывает какие ИТТ калоеды только Я за последних года 4 не видел ни один даже легаси проект, который бы не портировали на кор+. Новые на последнем ЛТС всегда офкоз >>2503612 А кто тебе нахуй что советует? Доволен своим калом - ну и сиди на нем. Жава не лучше, да.
Братики помогите. Завтра собес а никак не могу найти ответ на один вопрос которым меня на собесах ебут постоянно. В чем разнице в скорости между хранимкой, запросом ADO и Entity? Насколько я понимаю дело в плане исполнения, для хранимки план исполнения строится после первого исползьования. АДО и Энтити всякий раз присылают новый запрос, приходится сторить новый план исполнения, так? Еще какая-то пежня есть с конвертацией данных. Короче тема мутная, под рукой никого нет кто объяснит, а найти никого не могу.
Хочу сделать горящую траву в консольке через ивенты. Прохожу по 2д массиву тайлов (пик1) и подписываю на каждый тайл все его окружающие. Теперь когда "поджигаю" произвольный тайл должны инвокнуться все на него подписанные. Я хочу чтоб инвокались (и загорались) как на пик2, а по факту происходит как на пик3. сорри за хуевую картинку
Как правильно подписаться и вызывать, чтоб было как на втором примере? Выглядит как обход дерева/графа в ширину, но тогда мне надо будет строить граф от "поджигаемого" элемента и подписываться на окружающие тайлы проходя по нему?
А как вообще происходят модификации содержимого биндинга?
К примеру, в моем итеме я хочу текст отображать в сокращенном варианте, если для него нет места по ширине, т.е. середина или конец заменяется на многоточие (видеорил).
Как это вписывается в концепцию MVVM? Во-первых мне нужно событие изменения ширины итема. Во-вторых я не могу железно привязать текст итема напрямую, нужно какое-то промежуточное свойство, которое биндится с вьюмоделью. А вот событие берет эти данные из свойства, обрабатывает стринг и вставляет в лейбл или текстблок. Но везде пишут, что в связанном с xaml файле ничего кроме инициализации быть не должно, если хотите придерживаться трушности паттерна.
И ведь это малая часть вещей, которые меняют свой внешний вид в зависимости от состояния других элементов (при этом никак не влияют на содержимое данных).
>>2504479 Вроде все воксельные сетки делятся на строки и чанки. Проще залезть в соседнюю строку с тем же индексом, что и "источник горения" и быть уверенным, что это его сосед.
А так у тебя получается отдельный список для каждого вокселя. И так любая симуляция требует огромной оперативы. Если ты думал, что изобрел быструю симуляцию, то наверно нобелевку не получишь (в этом году).
>>2504720 повторюсь еще раз в MVVM VM (вьюмодели) отвечают за то ЧТО отображать а V(вид) за КАК отображать.
то есть вьюмодель содержит этот "очень длинный текст итема" (что отображать), а сжатием при ресайзе заведует вид (как отображать) и вьюмодель про многоточие ничего не знает. и про размер окна не знает. и про размер контрола не знает.
>>2504735 Да я понимаю. Просто потрясает радикализм делающих туторы по MVVM. Нет бы сказать "не пишите внутри вью логику того, что может изменить данные модели".
>>2504739 >не пишите внутри вью логику того, что может изменить данные модели". это вообще про другое вид может менять состояние вьюмодели но типа не гуд ему лезть в саму модель напрямую, а типа гуд чтобы вьюмодель была между ними прослойкой.
>>2504734 > Проще залезть в соседнюю строку с тем же индексом, что и "источник горения" и быть уверенным, что это его сосед. Но тогда условной "передачей горения" будет заниматься класс, в котором тайлы травы добавлены, например класс Поле это у меня, а я хотел, чтоб тайлы горели без участия поля, оно только заполняет/отрисовывает, поэтому хотел на ивентах
> А так у тебя получается отдельный список для каждого вокселя. И так любая симуляция требует огромной оперативы. Если ты думал, что изобрел быструю симуляцию, то наверно нобелевку не получишь (в этом году).
Я понимаю, при этом ещё циклические связи возникают при привязке получается (другое дело что горящие тайлы уже не инвокают повторно и как бы цикл рвется), но здесь как раз и вопрос в том, чтобы красиво горение шло (то есть сначала в ширину инвокалось, а уже потом в глубину), а не вглубь по одной цепочке. Получается мне типа надо смотреть в сторону асинхронных событий или Parallel.Invoke?
А еще я у одного японца на стриме по гудини заметил такой ресурс https://citeseerx.ist.psu.edu Там можно найти научные пдф-ки на разную тематику. Т.е. он забил что-то вроде "dune simulation" и нашел пару статей, которые описывали алгоритм симуляции песка дюны.
Я там мигом просмотрел твою тему и там рассматривается расчеты на основе ветра или плотности растительности. Ну и собсно посмотреть гудини, там тоже не раз встречал реализацию алгоритма распространения огня или ржавчины, правда не по пикселям, а по вертексам мэша, но какая разница?
А по поводу твоей организации, я не совсем понял как у тебя. Как я себе представляю: Есть один или два слоя. Первый — земля (если она тоже бывает разных видов), второй — объект (трава, дерево, камень). Это два двумерных массива. Что мешает обратиться к верхнему слою объектов и проверить если по указанному индексу объект со свойством горючести, а если есть, то "поджечь"?
Нужно просто установить порядок проверки "соседей" для твоего красивого горения. Ходишь по кругу своей точки и поджигаешь (мб с каким нибудь шансом горения — для неоднородности), потом повторяешь цикл проверки соседей по кругу для всех уже загоревшихся объектов. Я уверен есть алгоритм прохода по кругу сетки двумерного массива (может даже в этих статьях)
Я помню как делал моды для 7 days to die, там у каждого блока был набор свойств: материал, ориентация в пространстве, прочность, состояние и т.д. Причем когда чанк вокселей записывался в файл, то все эти свойства соединялись в одно число т.е. от 0 до 100 записывались ID материала, затем каждая сотня отвечала за ориентацию. Каждая тысяча — прочность. Все складывалось вместе и получалось что-то вроде такого: 10345. Битовым сдвигом разбивается и собирается.
>>2504839 > чтоб тайлы горели без участия поля, оно только заполняет/отрисовывает, поэтому хотел на ивентах А что мешает создать второй класс и не нагружать этим поле?
У тебя поле вообще ничего не должно делать. Поле это просто массив объектов. GUI читает этот массив и визуализирует, на этом его фунциклирование заканчивается.
А вот другие процессы должны это массив "поле" как-то редактировать: один генерирует среду, другой симулирует горение, третий укладывает снег. Отдельный вопрос как они это будут делать одновременно, но то что задачи должны быть делегированы — это факт.
>>2504875 Спасибо, не так гуглил запросы про горение > Нужно просто установить порядок проверки "соседей" для твоего красивого горения. Ходишь по кругу своей точки и поджигаешь (мб с каким нибудь шансом горения — для неоднородности), потом повторяешь цикл проверки соседей по кругу для всех уже загоревшихся объектов. Это я делал, это работает, но хочется-то на ивентах, или на а ля агентах, чтоб тайлы травы общались друг с другом, а не с внешним слоем (или хотя бы чтоб через спец прослойку общались, но чтоб она их напрямую не контролировала)! >>2504889 > А вот другие процессы должны это массив "поле" как-то редактировать: один генерирует среду, другой симулирует горение, третий укладывает снег. Отдельный вопрос как они это будут делать одновременно, но то что задачи должны быть делегированы — это факт. Ну так примерно и есть сейчас, просто из "поля" пока недовынес части, а так трава и поле это разные классы, да
Аноны, нужна ваша помощь. Никак не могу решить эту задачу: "В консоль вводятся два числа. В обоих числах есть одна общая цифра. Выведите в консоль цифру, которая есть в обоих числах через пробел столько раз, сколько раз она встречается в первом числе." Использовать только циклы.
>>2504926 Извини, чувак. Но "математика в программировании не нужна". А для решения этой задачи нужны базовые математические знания. Так что решения у задачи нет.
>>2504906 >чтоб тайлы травы общались друг с другом, а не с внешним слоем Технически ты можешь запихнуть траву в отдельную коллекцию ObservableCollection, у которой есть событие на изменение.
Но давай проверим, что эффективнее. Допустим у тебя 100 спрайтов травы. Если кто-то пукнет в "чатик" травы, то вся сотня всполошится и начнет проверять себя. Установить лимит на дальность проверки связей я не знаю как.
А если ты будешь ближайших чекать, то проверяться будут собственно только ближайшие. Конечно же чем больше огонь будет расти, тем больше циклов проверки и под конец будет проверяться всё и не только трава, но и Аллах, но это можно оптимизировать жизнью горения и удалять из списка те спрайты, которые горят давно — таким образом у тебя всегда будет n-количество горящих объектов.
У тебя должен быть отдельный буфер горящей травы, и отдельный процесс поджигающий и проверяющий время жизни травы. Может быть буфер в виде стака(очереди) Stack<T>, чтобы можно было легко добавлять новые объекты и удалять последние.
>>2504466 Внутри EF лежит АДО кста (ну по крайней мере раньше лежал, хз что там с кором) План выполнения тебе еще и поднасрать может кста(2), но да, аргумент
Есть графический интерфейс на WPF Как по нажатию кнопки запустить долгий, очень долгий процесс в другом потоке, да так, чтобы тот поток мог гуй обновлять?
>>2505119 При асинке, если просто тупо чет пихать в проперти гуи, то ничего не произойдет. Нужно сихронизирваться с помощью инвока.
При любом обращении из асинхронной функции к ГУИ используешь инвок. Но лучше сразу собрать все "пожелания" в кучу и обратиться за один раз.
App.Current.Dispatcher.Invoke(async () => { // здесь любой код, который относится в сторону ГУИ //к примеру MainWindow.Width = 300; MainWindow.Title= "Pososi u traktorista"; });
>>2505114 Если асинхронная функция работает успешно, то фризиться интерфейс не должен. Он может не получать или передавать данные из-за отсутствия инвока, но точно не фризиться.
>>2505219 Ок, ещё 40 строчек. Деревья нужны относительно редко, поэтому универсальных деревьев и нет из коробки (только XDocument, TreeView и подобные, между ними мало общего), к тому же, большинство применений деревьев настолько специфичное, что обычно пишут свои реализации на каждый случай или берут сторонние либы. В любом случае, есть SortedSet, SortedDictionary и SortedList, они реализованы через деревья, но хуёво то, что там нельзя непосредственно работать с узлами, как следствие, обход в глубину или удаление поддеревьев там не применить.
>>2505100 если запускать из GUI то там для синхронизации нужны доп шаги - это Dispatcher/контекст синхронизации (можно даже хелперы слепить) Если это MVVM то там биндинги, то там уже используется контекст синхронизации и доп усилия не нужны, но обновлять вьюмодели в многопотоке не гуд (не стоит правда путать многопоток и асинхронность)
А объясните различия между ControlTemplate и DataTemplate. Первый описывает визуальную часть элемента, в а второй привязывает данные содержимого.
Логично для кнопки, когда в ControlTemplate пихают прямоугольник, а в DataTemplate какой нибудть текстовый блок, подключенный ко вьюмоедли. В финале мы имеем текстовый блок в прямоугольнике.
Все это выглядит логично, если элемент раздроблен по частям. А что если я не могу вот так вот дробить? Что если у меня единый элемент? Допустим это тексбокс — текст в прямоугольнике. Я поясню в чем затык. Дело в том, что триггеры, типа выбора элемента или наведения курсора работают только в области ControlTemplate.
И куда пихать мой единственный текстовый бокс, если я хочу триггерами поменять его рамку, но и рыбку съесть и данные текста привязать ко вьюмодели?
>>2505236 >но обновлять вьюмодели в многопотоке не гуд А как быть тогда? Вот я (другой анон) сделал возможность подавлять вызов события изменения содержимого ObservableCollection.
Если происходят какие-то комплексные изменения коллекции данных, то я стопорю уведомитель и начинаю шатать коллекцию — удалять и добавлять, а затем снова включаю.
Если нужно что-то типа прогрессбара, то достаточно просто перезаписывать нужное свойство вьюмодели и ГУИ автоматом обновляется не стопорится.
>>2505283 >ибо с MVVM я не разобрался Давай вместе разбираться. Я уже начинаю въезжать, кроме нюансов — там шаг в сторону и расстрел. Я себе отдельный проект для тестов вывел, только он на VB. Хотел плавно перейти на шарп, но совмещать несколько проектов на разных языках не очень удобно — линк проектов работает только в одну сторону..
>>2505278 ControlTemplate описывает шаблон самого контрола. У него даже есть спец биндинг TemplateBinding
DataTemplate описывает шаблон контента (тот самый ItemPresenter, который мы используем в ControlTemplate) - и подходящий DataTemplate ищется по типу контента или же устанавливается дефолтный.
Есть задача: получать данные с сайта каждые полчаса и каждые полчаса отправлять их в тг бот. Через httpclient отправляю запрос, данные получаю, всё ок. А как правильно сделать "автоматическую" отправку запросов, то есть каждые полчаса ?
>>2505296 >А как быть тогда? С чем быть? Сами биндинги которые идут на GUI они сохраняют в себе контекст синхронизации и защищены от "нельзя контрол вызывать в другом потоке". Но ты можешь быть внутри твоих вюмоделей или контролов подписан на изменение допустим ObservableCollection - и эта подписка будет вызвана в другом потоке.
Если ты говнокодишь и запускаешь что то долгое асинхронное внутри вьюмодели и оно внутри и работает (сами все шаги во вьюмодели) то тебе нужна синхронизация а) если там асинки то await по дефолту (если не юзаешь Fody.ConfigureAwait) вернет в UI поток б) а если контекст потерян, то для синхронизации тебе нужен Dispatcher. но тут уже велосипедят кто во что горазд - Кто то юзает Dispatcher прокидывая его в вьюмодель - можно сказать "фуу", но он то лежит в System.Windows.Threading, а не в Presntation - другие используют класс хелпер типа UIDispacther который имеет статические методы и инициализируется нужным Dispatcher на старте приложения. Ну чтобы не запутаться в эти диспатчерах. Есть в некоторых фреймворках, ну и вот https://learn.microsoft.com/ru-ru/archive/msdn-magazine/2014/april/mvvm-multithreading-and-dispatching-in-mvvm-applications - странный вариант вида uiFactory = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext()); в конструкторе вьюмодели. и далее синхронизация вида uiFactory.StartNew( () => эта задача работает в UI потоке );
Если же ты говнокодишь иначе, то есть "а хули вьюмодель сама делает всю работу? ее дело только держать состояние визуальной части, а...пусть сервисы работают" и значит вьюмодель тоньше и вызывает сервис "сделай че то там", и ты обычно передаешь 1 IMyOperationContext какой нибудь - где ты можешь влепить класс обертку над твоей вьюмоделью, что будет менять твою вьюмодель и заботиться о потоках (или если лень говнокодить больше меры, то сама вьюмодель может реализовывать этот кастомный интерфейс (говнокодим как хотим) только не забывай про потоки. Вот через нее долгая операция может менять гуи (через изменения вьюмоделей конечно) 2 IProgress - он может быть как частью IMyOperationContext, так и отдельно - и его дефолтная реализация захватывает контекст синхронизации при создании, то есть дополнительных шагов не требует 3 CancellationToken для отмены операции же. Чтобы на гуи жмакнул и можно отменить.
>>2505283 с MVVM все просто. Ты просто складываешь визуальное состояние из вьюмоделей, а гуи за счет биндингов сам отслеживает их изменение и подходящим способом отображает в чем проблема?
>>2505667 свойство OnBind требует Action<ComputeNode, ComputeNode> тут же это свойство выставляется не напрямую на Action, а через лямбду, которая допускает, что Action может не быть в момент вызова с помощью ?.
Ну может оно там часто меняется на нулл или выставляется сильно поздно, а OnBind не переваривает нулл, поэтому и такое проксирование.
Мда. С так называемыми стилями никакого солида не жди. Вот так просто перекинуть участок кода с контролами, ссылающимися на 100500 брашей, это я вам скажу то еще удовольствие.
шарпаны, насколько тяжелая вещь эвенты? я хочу каждую проперти завернуть в класс со своим собственным эвентом, у него будет один подписчик, который будет иногда дергаться. вот у меня пикрелейтед есть и таких по 6-7 штук на каждом объекте, объектов пока не знаю, например 20-30, а подписывать на эвенты я планирую UI, т.е. одновременно вызываться будет только один можно ли сделать как-то иначе? я юнитихолоп, не бейте сильно
>>2506067 я скорее имел в иду память, там же есть какие-то аллокации? или на таких объемах без разницы если я правильно понимаю вот есть INotifyPropertyChanged, там только один эвент, но как он определяет что передать?
>>2506069 там самые обычные делегаты. вернее там multicast delegate, что эквивалентно иммутабельному списку обычных делегатов.
делегат это по совместительству описание сигнатуры вызываемого метода, потому он безусловно знает что передавать еще на этапе компиляции.
аллокации получишь если будешь постоянно подписываться/отписываться, ведь тогда будет рождаться новый multicast delegate на каждый такой чих
но это у тебя какой то дикий многопоток будет, а события и многопоток это как "жрать жидкое говно вилкой", то есть неудобно, но с и с ложкой лучше не станет.
>>2506066 Датабиндинг элементов UI работает с ObservableCollection, и при любом изменении коллекции автмоатически обновляются забинденные свойства. А знаешь как элемент узнает, что в коллекции было изменение? Внутри нее есть событие.
А теперь представь, что у тебя список или дерево с сотнями элементов, где каждый элемент подписан на сие событие. И это итпа нормально. Единственное что, если ты сам подписываешься, то не забудь отписаться, т.к. подписка — это хороший источник утечек памяти т.е. очиств переменную с классом, он не удалится и будет работать.
>>2506072 >>2506097 спасибо, теперь более понятно я решил отказаться от этого класса и все же посмотреть на eventargs вот как на пике объект чисто с данными-проперти, его обновляю и на каждом изменении внешних проперти посылаю его вместе с eventargs и enum, а подписчик(и) будут брать этот enum и уже там раскидывать как надо есть ли подводные камни? помимо того как на другой стороне этот enum обрабатывать и не городить колоссальный свитч, я пока даже не представляю как за это браться. может забить и тупо обновлять вообще ВСЕ UI элементы через посланный объект в обработчике события? гулять так гулять
Здарова, бандиты! Книга Рихтера для кора актуальна ещё? Стоит читать? Её по прежнему продолжают советовать из всех утюгов. Хули он новое актуальное издание не выпустит, блять?
>>2506105 Во-первых уже есть специальный интерфейс INotifyPropertyChanged. Там все уже сделано и не надо городить города, как у тебя. А интерфейс вынудит тебя создать одно единственное событие, и один метод OnPropertyChanged вызывающий это событие.
В дальнейшем это событие работает для всех твоих свойств. Т.е. ты в своем свойстве CurveSamples, после всех своих делишек подставляешь ровно одну строчку OnPropertyChanged с именем своего свойства. Например: OnPropertyChanged("CurveSamples")Можно даже имя не вставлять, если добавить атрибут CallerMemberName, который позволяет автоматом получить имя свойства или метода, вызывающего OnPropertyChanged.
И самое главное, что биндинги к UI автоматом работают с этим интерфейсом и сами подписываются на событие. Тебе достаточно только забиндиться к свойству, которое вызывает OnPropertyChanged. Ну и еще кое че подшаманить.
В целом, ты повторил основную идею INotifyPropertyChanged, только без списков пропертей (как ты собрался их обновлять в будущем? Это же жопа в плане обслуживания — тебе придется вручную вносить изменения каждый раз, когда какие0то свойства прибавились или убавились)
>>2506247 >>2506104 > и не городить колоссальный свитч вот меня, кстати, тоже интересует, а как WPF обрабатывает события INotifyPropertyChanged? Автоматом создает внутри свич на все биндинги?
Конечно, событие можно сформировать как угодно и передавать даже делегаты на исполняемый метод (или команды). Но по дефолту в EventArgs события OnPropertyChanged возвращается только стринговое имя свойства. Как биндинг знает что и чего?
Как работает объединение ресурсов MergedDictionaries?
Вот допустим у меня отдельным проектом идет словарь ресурсов со стилем. Рядом еще 5 проектов, которые мерджат этот словарь в свой стиль. Это что получается? Тупо xaml-конкатенация? В каждом проекте будет своя копия простыни присоединяемого ресурса?
Выглядит расточительно. Я уже пытаюсь не юзерконтрол делать, а отдельный проект под достаточно комплексные модули UI, но идут по пизде стили — их приходится подгружать отдельно.
>>2506162 Почему хуйня-то? Под свои задачи блейзор самое оно, тем более для шарписта. А такие задачи в разных бизнесах могут возникать. Вон смотрел доклад какого-то чела с альфы, что ему пришлось внедрять какие-то штуки, и он выбрал блейзор. Все у него заработало. Расхваливал что майки не стали изощряться и просто повторили, типичный вебфреймворк, по структуре. То есть въехав в блейзор, будешь понимать как работают все прочие фрейморки на жиэсах.
А потом те же компоненты разора можно в формочках или впфе использовать, потому что блейзор гибрид и в этих десктопных окнах умеет жить. А значит тот же код можно использовать в абсолютно разных вещах. Это же охуенно по сути, надо только разобраться и научится понимать, где фулстак без js фреймворков невозможно реализовать, а где уже можно обойтись чистым дотнетом.
>>2506247 я же говорил что я юнитихолоп, в версии с которой я работаю нет биндингов и т.д. наш UI не знает про это если его не допиливать. я бы с удовольствием воспользовался уже готовым решением, но информации по этой теме у нас практически нет, а то что есть какая-то шляпа надо будет подробнее почитать про INotifyPropertyChanged и попытаться адаптировать >>2506251 да, мне нужна была деформация 3д модели по сплайну, это я уже насвинячил и уже было начал пилить версию которая будет вместо процессора использовать видеокарту, но окинул взглядом что за хуйню я нагородил и теперь хочу как нормальный человек сделать
>>2506436 >надо будет подробнее почитать про INotifyPropertyChanged и попытаться адаптировать Да там все тоже самое, что и тебя. Просто шаблон интерфейса заставляет добавить событие и функцию для вызова события — всё. Ровно все то, что у тебя, только передается не индекс свойства, а его имя (да и то автоматически).
>>2484368 (OP) А при установке Visual Studio галочка на Unity скачивает Unity? То есть, если Unity уже установлено то можно её не ставить в Visual Studio?
Объясните тупому, вот есть сервис, нахуя его через конструктор получать, если можно тупо статические методы запилить и использовать где захочется без всяких там интерфейсов?
Как же я чет подзаебался. Че меня триггерит. Я не могу решить как правильно в плане архитектуры сделать. Вот смотрите. 2 стула: 1. Делаем абстрактный TCP-сервер с интерфейсом как на прикриплейд. Дальше - от этого класса наследуемся и реализуем че нам там надо. 2. Делаем один TCP-сервер, в него передаем обработчик соединения, на которого положили то же самое что было бы в этом интерфейсе, но этот обработчик - передается снаружи. Соответственно - интерфейс у нас уже будет не INetworkServer, а IConnectionHandler.
Вот я блядь не знаю как лучше-то. Типа все во мне говорит - второе - лучше. Но потом шепот в ушко: Няша, наследование же не просто так придумали, чего ты его использовать не хочешь? Не знаю короче. Че делать-то? Как быть?
Типа что я хочу получить-то? Хочу что-то в духе: var server = ServerBuilder() .UseTcpTransport() .AddTcpListener("0.0.0.0:8000") .AddTcpListener("0.0.0.0:8001") .AddExceptionHandler(e => Console.Error.WriteLine($"[ERROR] {ex}")) .AddFilterFirst(x=>Console.WriteLine($"[{x.LocalEndPoint}] data rec {x.Input.Buffer.Length}"), y=>Console.WriteLine($"[{y.LocalEndPoint}] data snd {y.Out.Buffer.Length}")) .Use<Mqtt>() .Build();
>>2507142 Не только. Но это самый простой пример того зачем оно нужно. Статический класс - это считай, глобальная переменная. Это сразу пиздос в плане многопточки, это сразу пиздос в плане: надо изменить поведение в одном месте, но не менять в других, это сразу пиздос в плане реальной разработки, потому что если ты меняешь статический класс - тебе нужно перетестировать буквально все места, где он используется. Короче. Когда ты начнешь работать в реальной фирме, где делается реальный продукт, ты поймешь, насколько говняно самому писать статику. Еще сильнее ты это поймешь, когда у вас больше одного человека над одним проектом работает.
Продолжаю постигать азы asp.net. Почему у меня numb с атрибутом привязывается к введенному числу, а параметр метода OnPost (когда атрибута нет естественно) нет?
поясните что это на языке C# означает? public DirectoryNode(DirectoryInfo directoryInfo, DirectoryNode parent) : this(directoryInfo) { this.Parent = parent; }
Меня интересует двоеточие после заголовка функции.
>>2507341 А, это типа перегрузка, но с выполнением кода основного конструктора. Равносильно public DirectoryNode(DirectoryInfo directoryInfo, DirectoryNode parent) { this.New(directoryInfo); this.Parent = parent; }
А тут что? Сингл-лайн if ? return this.Directory == null ? string.Empty : this.Directory.Name;
Что вообще означают двоеточия в шарпе? Символ на все случаи жизни? Писец, собрали все знаки. Ля как в бисике Return If(Me.Directory Is Nothing, String.Empty, Me.Directory.Name) Просто через запятую.
Сап двачера c# может есть желающие скинутся на курс по ASP NET https://stepik.org/course/114281/promo если кто-то захочет, отпишитесь к посту оставлю телегу
>>2507464 во время инета подавай себе инфу как хочешь. то есть можно остановиться на месте и ковырять пока не разберешься детально под 100 углами, чем идти дальше и бесплатно а тут ожидать волшебную таблетку...мде
>>2507476 >то есть можно остановиться на месте и ковырять пока не разберешься детально под 100 углами Люто двачую. Даже если прямо ответят на твои вопросы, тебе эта инфа будет пустым местом, пока ты 50 раз не исследуешь тему.
>>2507466 А с чего ты взял, что там тебе объяснят? Опять навалят маня-ситуаций, где их код работает идеально, но чуть в сторону и тупик. Единственная причина — это заебать вопросами ментора и выбить из колеи курса. Дико горят, но так есть толк хотя бы. Всегда так делал, еще с института.
Алсо, Павел Шмачилин трехчасовые стримы ведет, по 20 стримов на тему. Можно весь отпуск нонстопом смотреть.
>>2507480 >>2507483 Я 3 курса на степике прошел у этого автора, например по Linq ты такой информации собранной не найдешь нормально, на ютубе очень плохо эта тема освещена, много практических заданий. Тут вопрос в том, что ты получаешь собранную информацию и не надо понимать что в какой последовательности тебе изучать и тратить на это кучу времени. А по 50 раз исследовать и расширять полученную информацию лучше, чем какой-то набор статей разрозненный, ну 40 к я согласен за такую инфу платить бредово, но 4 - 7 к я за такую инфу бы отдал
>>2507496 Он на складчинах весит, но что-то движения особого там нет, ну скорее всего придется этот месяце по видеоуркам индуса идти, если вдруг кому нужен курс могу поделится по AspNet.6
Проблема не в том, что плохо пояснят. Пояснять могут хорошо и очень подробно, но.... но дело в том, что мозг устроен так, что он не понимает какую то часть и поэтому картина не складывается, все как то пипец сложно и связи не прослеживаются. Как только этот кусочек понимается, то картина становится легкой и целостной. И тут не проблема учителя - он видит картину по другому, для него она "да все там понятно", а ученик тупит и "не может уловить самую суть".
Что нужно уметь реализовать и знать из стека: asp, entity Framework, pgsql что бы соответствовать джуну? А то вроде могу всякое делать но не ясен уровень. Будет ли плюсом что могу в angular и соответственно работать с данным с фронта, запросить что нибудь, отправить на бек и тд? Всякую фронтендную мишуру по типу html,css тоже умею.
Кстати если про менторов говорить, может кто находил себе ментора платного, на youdo или freelance сайте, чтобы какую-то сложную или непонятную тему разобрать, поделитесь инфой
>>2507740 Ну если брать курсы, то в большинстве пишется интернет магазин, я вот слив нашел по WPF где пишется канбан доска с задачками, супер пупер приложение никто не пилит на учебных проектах, хотя было бы круто
>>2484537 >пользователи никогда не скажут, что им не нравится цвет кнопки Потому что у них не будет выбора? Ты смотришь со своей позиции, но я лично встречал людей, которые уходили в говнософт с блядской политикой, потому что "у них интерфейс не такой отсталый".
Мало кому хочется ездить в надежном тракторе — всем хочется комфорта и эстетического удовольствия, даже если этот комфорт временный под руководством пидорасов.
>>2507565 Необходимо запустить микросервисы на докере, уметь в красночерное дерево, уметь в поиск LCP и прочую хуйню для строк. Этого достаточно чтобы называться джуном.
>>2507794 Поясни за микросервисы. Это отдельные программы, которые выполняются в фоне и вызывают друг друга? Разве от этого не страдает скорость? В винде вот точно немаленькие накладные расходы при использовании com.
>>2507768 >то в большинстве пишется интернет магазин Вот именно, что в большинстве. Т.е. каждый второй будет у себя в резюме ссылку на свой пет с недоделанным магазином какой-нибудь бесполезной хуйни. Ну и если ты даже дойдешь до собеса, то первый вопрос будет - нахуя ты на шарпе делал то, что в любой cms делаетс в пару кликов.
Вот тебе нормальная идея: Запили микросервис для сбора метрик с сервера. 1) Т.е. модуль который устанавливается непосредственно на сервере и по запросу может отдавать нужные метрики (память, диск, нагрузка и т.д.). Тут как минимум отработаешь REST, оптимизацию и научишься получать метрики разными хитровыебанными способами (причем еще и по разному в зависимости от системы) 2) Затем сервис-агрегатор, в котором регистрируются сервисы первого типа и он опрашивает их с заданной периодичностью и складирует данные у себя в БД. Плюс по запросу может отдать их в нужном количестве и разнообразии. Тут отработаешь работу с БД, Quarz, межсервисное взаимодействие, фильтры и сортировки в запросах и т.д (например через OData или вообще свой миниязык запросов придумать), можешь еще и аутентификацию прикрутить. 3) Ну и третье - это морда (например на WPF или React-е) которая будет обращаться к агрегатору и выводить данные в виде графиков-цифирок. Тут отработаешь взаимодействие с пользователем, те же запросы к сервису и т.д.
Короче что-то вроде самописного аналога Прометеуса+Графана.
Далее заводишь себе пару тройку vps-ок, раскидываешь на них свои сервисы и можешь в любой момент показать их работу кому угодно. Если сделаешь толково, то даже сам сможешь этим пользоваться. Плюс немного подучишь работу со стороны девопса, т.к. в реальной работе часто нужно разворачивать всякую хрень, как минимум для тестов своего говнокода.
>>2508100 >Разве от этого не страдает скорость? >В винде вот точно немаленькие накладные расходы при использовании com. И при этом ты делаешь приложение, которое работает с базой данных по сокету и тебя не парит этот факт "ааааа производительность". Все зависит от деления монолита.
Повторяю сишку, вот такая задача: Калипта Анны, которая считается самой быстрой птицей в мире относительно своего размера, может развивать скорость до 80 км в час.
Задача Напишите программу, чтобы вывести, сколько километров она будет преодолевать каждый час за 5 часов полета.
Выходные данные 80 160 240 320 400
Подсказка Просто умножьте 80 на счетчик для каждой итерации. Используйте цикл for для итеративного выполнения умножения.
Я вот сейчас час думал над тем, что требуется, даже заснул от того, что сложно понять. Что она. По условию задачки. Летит на максимальной скорости и надо просто количество км с нуля каждый час выводить. ПРИ УСЛОВИИ, ЧТО НЕПРЕРЫВНО ЛЕТИТ ПО ПРЯМОЙ!!! Пиздос, ну кто так условия ставит. А как проходит ваш день?
>>2508272 >которая считается самой быстрой птицей в мире относительно своего размера, Пиздос у составителя задачи хлебушек в голове. За каким хером тут ремарка о размере. Вот поэтому сидишь и думаешь, что где-то проебался, думая куда тут размер приткнуть.
>>2508317 Вкатунов надо сразу приучать находить суть в многостраничных доках кабана, где много лишнего описания, не имеющего отношения к самой реализации.
>>2508317 Это хорошая идея, чтобы человек фильтровал информацию. Школьники и первокурсники очень туго воспринимают условия задачи и тот факт, что половина ответа всегда содержится в вопросе.
Когда научишься воспринимать инфу в целом, то даже будешь ловить кайф от затерявшихся между строк нюансов. Появится своего рода наблюдательность.
шарпаны, есть вопрос по дженерикам и интерфейсам вот я хочу определить интерфейс такого вида у меня есть два источника данных, один выдает float, другой выдает int, я бы хотел чтобы класс с этим интерфейсом мог одновременно и источник с int и источник с float обрабатывать, чтобы не городить дичь типа MyClassInt : MyInterface<int> и MyClassFloat : MyInterface<float> специально под каждый источник данных как это лучше сделать?
>>2508418 так источник данных уже на определенном классе будет может сделать проверку в конструкторе? типа if(typeof(T) == typeof(int)) использовать этот метод обработки и т.д.
>>2508425 >if(typeof(T) == typeof(int)) Не нужны никакие проверки, если ты используешь дженерики.
У тебя на стадии объявления задается обрабатываемый классом тип. До этого момента, класс не должен ничего конкретизировать, кроме всяких свойств, у которых тип конкретный.
Я не помню как в шарпе, но в бейсике когда ты создаешь экземпляр класса, пишется вот такое: New MyClass(Of Integer) Т.е. ты говоришь, создай мне класс, который будет обрабатывать интеджер. А если тебе надо обработать флоат, то создаешь новый экземпляр New MyClass(Of Float) И у тебя будет два экземпляра класса, где каждый обрабатывает свой конкретный тип.
Суть дженериков в том, чтобы ты не писал по нескольку раз повторяющийся код, но под капотом он напишется за тебя. По факту у тебя будет две функции, одна под int, другая под float. Если ты думаешь, что будешь юзать один экземпляр класса на оба типа, то так это не работает.
Если мы говорим про функции класса, где ты хош интеджер запихнул в аргумент, а хош флоат, то это уже называется перегрузкой. Но как ты наверно понял, удобство использования компенсируется неудобством создания. Для перегрузок тебе придется писать код несколько раз.
>>2508447 так в итоге мне придется делать: 2 экземпляра класса-потребителя данных c дублированным кодом и 2 экземпляра класса-форвардера данных с дублированным кодом это кмк уродство выйдет вот бы было возможно сразу на старте узнавать что за данные и, ну не знаю, подменять внутренний делегат на doInt/doFloat/doEtc
Сап дотнетач, фронтедодебил с дно.жс нод.жс на связи.
Занимаюсь этой хуетой уже последние лет десять до этого были жалкие попытки вкатиться в гейдев через юнити. Последние пару лет всё больше думаю перебраться во что-то более стабильное и менее всратое нода катится непойми куда, фрагментация с дено/бан/пизда-твоего-трапа, низкое качество проектов, без пакетов хуй что сделаешь, write-only код, на фронте не лучше, реакт написан дропаутами без вышки с переизобретением всех хуёвых концепций прошлого до которых хватило ума соевых разрабов, ангуляр сдох, свелт сырой и популярен только у твитерских сойбоев, тулы переписывают на раст, потому что жс говно. Изначально выбор пал на Гошечку, так как она показалась простой для кододебила вроде меня. Вроде начал вкатываться, вроде всё понятно... но потом я начал упираться в примитивность языка (и это ещё на этапе изучения), которая начала просто раздражать. Позже понял что также сложно найти работу на удалёнке, когда ты по сути жуниор в Го, а на месте вакансий по Го и нет. В общем пока забросил Го, но думаю попробовать ещё раз вкатиться в бекенд через .Net/C#. Собственно вопроса на данном этапе два:
1. Насколько глубокл в легаси надо лезть при изучении платформы и языка? Пробежавшись по верхам вакансий, вижу много современных вещей уровня .Net 6. Но в тоже самое время вижу какие-то более древние вещи типа ASP.Net. Как часто нужны знания древних, когда работаешь над новыми проектами? Буду ли я огребать не поевши легаси лет десять назад? Вопрос скорее всего покажется идиотским, попробую пояснить по аналогии. Часто встречаю фронтов, которые начали свой путь с Реакта и до этого им не приходилось работать с DOM напрямую, писать чистый жс и тому подобное. Я вижу как они страдают когда надо закодить что-то снаружи современного джаваскрипта или разобраться с чем-то уровня Backbone.js или какого-то кода написаного в стиле ES5.
2. Второй вопрос по поводу Винды/Микрософта. Так или иначе когда сталкивался с .Net проектами или разрабами, они все юзали Windows/Azure/Visual Studio. Как обстоят дела с .Net разработкой из под macOS инбифо туда ли ты зашёл, сахарок?? Сижу на маке уже много лет, а до этого сидел под Линуксом уже не чисто на уровне мышычной памяти не могу использовать Windows. И соответсвенно мне было бы комфортно продолжать юзать всякие macOS'ы. Есть ли вообще смысл вкатываться в .Net с этим моим Маком? Или опять же буду огребать от несовместимостей, более слабых тулзов, нежелания работодателей выдавать оборудование от Apple?
у меня уже жалкие остатки мозга плавятся почему ТУДА(метод Set, который принимает float) каст из инта не нужен, а ОТТУДА(int который передается обратно через ValueChanged) без каста в инт нельзя? в чем разница?
>>2508514 ну так int может implicit cast в float без потерь точности (не дробное же число) а обратно cast теряет точность и поэтому требует явного указания.
>>2508515 теперь понятно, но все равно странно мне просто казалось что C# это строгие типы и вот это все а тут можно если на пол-шишечки, а вот тут нельзя, а тут вообще объект заворачиваем...
>>2508498 1. Если учить только .Net Core стэк (.Net 6, ASP .Net Core, EF Core и т.д.), и собеседоваться только на вакансии на нём, то в легаси особо лезть не придётся. Нормальные компании уже давно на него переметнулись и пилят сервисы только на нём. Вакансии с .Net framework лучше просто стороной обходить. С ними можно совсем на лютую дичь нарваться, типа первого ASP (что они вообще в начале 2000-х курили?) или ASP Web Forms. Уже достаточно вакансий на .Net Core(.Net 5, .Net 6).
2) .Net Core кроссплатформенный, нормально собирается и работает под Mac OS (по крайней мере консольные приложения и веб-сервисы, шо там с гуём не знаю). С очень большой долей вероятности, сервисы вообще будут билдится в докер-образы и деплоиться в какой-нибудь кубер. Под Mac OS есть Visual Studio, но она вроде урезана относительно виндовой, поэтому рекомендую разжиться лицензией на Rider от жид брейнс (в нормальных компаниях дают). У меня коллега как раз сидит на маке и проблем не испытывает. Другой кстати, вообще на арчике. Тоже без проблем.
У меня так нихрена и не завёлся многопоток, так что перефразирую вопрос Есть обработчик нажатия кнопки, и надо сделать так, чтобы chat.Send() не вешал мне UI, при этом исправно обновляя его (там биндинг). Попытка сделать через таск попросту не работает
>>2508551 код на скрине плох. Он запускает таску и не дожидаясь ее окончания очищает текст в надежде, что таска успеет запуститься раньше очистки.
Так то можно юзать async/await в обработчике или запустить Task.Run где юзать Dispatcher для обращения к контролу
Но вообще вся затея неправильная. Нужно сначала очищать поле ввода, а сообщение ставить в очередь на отправку с обдумыванием "а что делать если оно не отправится"
>>2508554 Мне нужен любой костыль, который просто это запустит, потому что это лаба, читай MVP, а не бизнес-приложение. async/await тоже ничего не делали. Про диспатчер не первый раз слышу, но он как-то крайне странно выглядит, и как его прикрутить я не понял. А ещё, что он собственно даёт
Итак, уважаемые знатоки, внимание на экран! Вопрос от Василия Пупкина из города Костромы. Василий обнаружил, что код можно написать тремя разными способами. Детали вопроса на экране. Время пошло. ... Отвечает Александр Друзь:
Парни, вопрос больше к джунам и мидлам. Как сейчас в условиях санкций с работой? Выучил шарп и стою перед выбором: учить asp.net или сменить язык. Чекнул hh.ru там вакансий для джуна очень мало
Парни, вопрос больше к джунам и мидлам. Как сейчас в условиях санкций с работой? Выучил шарп и стою перед выбором: учить asp.net или сменить язык. Чекнул hh.ru там вакансий для джуна очень мало
>>2508556 Деспетчер инвок выглядит странно, но без него никуда.
Представь, что ты в игре портал. Твой интерфейс находится в одной комнате, а твоя асинхронная функция находится в другой комнате. Ты из второй комнаты делаешь дыру в стене и пока портал существует, делаешь в первой комнате все что нужно и возвращаешься обратно.
Допустим у тебя есть сия конструкция. Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => Mouse.OverrideCursor = Cursors.Arrow));
Вот это твой портал. А вот в круглых скобках это та самая щель портала. Application.Current.Dispatcher.BeginInvoke( );
А тут все то, что ты хочешь сделать со своим окном, пока скобки открыты. new Action(() => this.Height = 100500) //Называется делегатом.
А это настройки портала: DispatcherPriority.Background
>>2508646 Тут выше кто-то говорил, что биндинги могут UI даже из другого потока обновлять. Проблема в том, что таск, который я запускаю, в итоге ничего не делает. На второй стороне попросту не принимаются символы
Диспатчер это единственный вариант что-то асинхронно с UI запустить, чтобы при этом я мог этот UI обновлять?
>>2508658 >Тут выше кто-то говорил, что биндинги могут UI даже из другого потока обновлять. С другим потоком всегда будут проблемы. Речь шла про асихронщину. Биндинги на мой взгляд в первую очередь рассчитаны на связку с данными. У тебя могут быть трудности с перезаписью этих данных.
>Проблема в том, что таск, который я запускаю, в итоге ничего не делает. Если нет инвока, то ничего не будет делать. Все верно. Возникает исключение только если ты пытаешься из другого потока шатать свойства — тогда реально пишется "чел, я не могу это изменить т.к. оно в другом потоке". А если поток тот же, то исключения не возникает, но и результата тоже не будет.
>Диспатчер это единственный вариант что-то асинхронно с UI запустить, чтобы при этом я мог этот UI обновлять? Биндинги. Но там нужна предварительная настройка. Тебе не избежать инвоков. Вот возьми и создай отдельное решение с тестом инвоков. Можешь выложить сюда.
Меня они тоже бесят и я скорее их использую как заклинание. А так там всякие сложности типа объект А ожидает синхронизации с объектом Б, и наоборот объект Б ожидает синхронизации с объектом А. Есть Application.Current.Dispatcher.BeginInvoke А есть textbox.Invoke
>>2508683 Так я и работаю с биндингами. Как мне их донастроить, чтобы они работали с асинхронностью/в отдельном потоке, при этом изменяя некоторый текст в гуе?
>>2508757 Хз, биндинги у тебя без асинхронности работают? Т.е. ты меняешь свойство из данных и у тебя автоматом меняется свойство твоего тексбокса? Стоит Mode=TwoWay и все такое?
>>2508784 Возможно ты используешь invoke. Попробуй BeginInvoke.
Если у тебя хуйнянейм начинает инвокать с высокой частотой, то она тянет все внимание на себя и не дает работать другим операциям в окне. Это равносильно тому, что ты запустил функцию тупо в этом окне.
Используй BeginInvoke. Ее отличие в том, что она не с ноги ебашит и грит "вот она я, прими мои метод". BeginInvoke стучит в дверь и спрашивает "можно войти?", у нее есть await — ожидание.
И на видерил (извини шо бейсик) я запустил одновременно два цикла. раньше вроде был еще EndEnvoke и он должен был идти после BeginInvoke, но сейчас его не нашел.
>>2508871 Нене, у меня на данный момент только то, что было на скрине закомменчено. Такс не сработал, так что я ищу обходные пути Есть только обработчик кнопки и в нём тяжёлая функция, которую желательно бы стартануть где-нибудь в другом месте, чтобы она при этом обновляла гуй
>>2508872 Ну да, выносишь функцию отдельно, это первым делом.
Если она долго считает, но используется с малой частотой, и тебе хочется, то делаешь эту функцию асинхронной, а в конце return task (или как там у вас). А то что эта функция возвратит, ты пихаешь в свойство текста.
Если как у меня в примере, где функция очень часто обращается к гуи, то используешь InvokeAsync.
>>2508889 Она и так вроде как отдельно вывешена. Там рядом разве что очистка поля ввода Частота зависит от пользователя. Возвращает она примерно нихрена, поэтому я не знаю, куда внутри await засовывать
>>2508658 >что биндинги могут UI даже из другого потока обновлять если мы говорим ПРО WPF, то да - свойства вьюмодели можно обновлять из другого потока, а биндинг который привязан к этому свойству обновит гуи через контект синхронизаци (конечно затрачивая на это время и тормозя алгоритм в другом потоке) (но при этом не Add/Remove у биндинга коллекций)
на твоем скрине вообще не пойми что это впф или винфрмс и где там биндинги или хотя бы обновление чего либо в гуи.
>>2508898 Я понял в чем у тебя проблема. Стринг хоть и притворяется структурой, но он все же ссылочный тип. Когда ты таску передаешь ссылку, то таск начинает шатать ее и не давать другим заюзать. И у тебя случается подвисон.
Передай текст во временную переменную (любые операции со строкой порождают новую строку), которую потом отправляй в Task.
>>2508933 >если мы говорим ПРО WPF, то да - свойства вьюмодели можно обновлять из другого потока, а биндинг который привязан к этому свойству обновит гуи через контект синхронизаци
Нихуя, щас сам пробовал. WPF. - Создал текстовый бокс. - Привязал его к депенденси проперти типа string. - Передал в таск это проперти как аргумент, где в цикле начал нещадно и безостановочно юзать.
>>2508935 Падажжи, в таск отправляется делегат, в моём случае лямда, которая уже принимает стрингу. Плюс та самая стринга больше нигде не юзается. Попробую, конечно, но звучит странно
>>2508962 потому что жава это говно мамонта, где сидят заскорузлые жависты, которые не умеют в новое. А шарписты нормальные ребята и с радостью отбрасывают устаревшее говно и не считают нужным его продолжать жрать.
>>2508957 Ну я тоже думал что хрень, но с новым экземпляром стринга у меня завелось. Но если я передаю ссылку напрямую, то виснет. Передается ссылка на оригинальное совйство и таск начинает эту ссылку блокировать для остальных.
Алсо >>2508961 как анон писал >>2508935 , если ты биндил к свойству через INotifyPropertyChanged, то там вообще не важна занятость свойства. Свойство отправляет событие и элемент гуи работает именно с событиями.
>>2508970 >Свойство отправляет событие и элемент гуи работает именно с событиями. не думаю. думаю что биндинг получает событие, достает значение свойства из объекта в абы каком потоке, а потом уже маршалит его в контекст синхронизации для рисования в гуи.
как эффективнее всего проходить такую структуру? вот код приложил, допустим если на каждом объекте есть условие(изменился). они могут изменяться, например child1 будет изменен, child2 нет, если родитель не изменен, то обновить только child1, в противном случае всех. я как-то так хочу сделать. как вообще подобные иерархические "деревья" строят? я нигде не учился и не программист вообще не бейте палками
>>2509148 Когда нужно обходить графовые структуры , то лучше всего использовать BFS( https://e-maxx.ru/algo/bfs ) или DFS ( https://e-maxx.ru/algo/dfs ), в зависимости от того, какой порядок тебе нужен. Лучше всего взять стандартную реализацию одного из них (они простые, всего-то стэк/очередь + цикл) и дополнить своими кусками кода.
>>2508962 Во первых .Net Framework 4.8 поддерживается до сих пор и будет поддерживаться до тех пор пока жива 10-я винда, а это минимум до 2025-года. А с учетом того, что и в 11-й он будет, то и того дольше. А у .Net Core и .Net смысла нет дольше LTS-ки держать, т.к. новые версии - это по сути и есть мажорные обновы платформы и переход с одной, на другую вообще минимальные усилия по меркам бизнеса занимает. Если проекты построены нормально (а чаще всего это так, т.к. в шарпе исторически и традиционно более жесткие требования к чистоте кода), то переход с версии на версии вообще между делом может происходить в течение пары спринтов.
Такой тупой вопрос. Есть ли какой-то простой способ узнать оригинальный IPадрес-порт по которому моя хуйня доступна снаружи? Ну. Т.е. смотрите. Моя хуйня - за натом. Сидит на 80 порту на виртуалке. Одмены настроили проброс. И вот я - забываю на каком порту внешнего IP-адреса висит моя хуйня. Хочу чтобы на веб-морде можно было посмотреть этот адрес-порт, чтобы если кому-то надо - не лезть в почту и не искать проброс.
>>2509448 Сделать запрос к какому-нибудь checkip.dyndns.org, но так можно узнать только IP. Так что лучше вынести эти данные в конфиг, всё равно они будут редко меняться.
Привет , есть два вопроса 1) Решил поизучать с# и столкнулся с проблемой запуска кода в стандартном проекте, не могу запустить и кнопка запуска серого цвета, с хот кеем тоже самое 2) Я немного изучаю Java и хотелось бы узнать чем же c# по вашему мнению лучше и в каких областях имеет преимущество.
>>2514378 >столкнулся с проблемой запуска кода Какая IDE хоть? >чем же по вашему мнению лучше По "нашему мнению" всем чем можно. Для меня прежде всего удобство и широта возможностей. Можно ебашить жесткий ООП, лайтовую функциональщину и ламповую байтоеблю Можно в винду, можно в линукс, а можно и в сраку мак Можно в десктоп, можно в кровавый энтерпрайз, можно в иссушающий геймдев. Сахарок, ммм. Главное, что в любой области которую выберешь, при использовании шарпа все это делается легко и приятно, особенно после прихода Core.
>>2514378 Джава лучше. Больше вакансий, легче изучать. Стек не зависит от хотелок одной фирмы. Ничего не переделывается в каждой версии, а имеется обратная совместимость, т.е. код для джавы 1.0 можно выполнить на джава 18.
>>2514409 код!!! шарпа тоже можно выполнить речь идет про бинарную совместимость, но из за этого у жавы хуже рантайм - типов нет, структур нет - все в угоду старья (legacy)
>>2514413 Что значит не факт. Еще какой факт. Даже в жаве примитивные типы оптимизированы как структуры ибо это имеет значимый эффект. А в шарпах есть ref структуры, что еще быстрее.
А насчет многопотока - сдуру можно и.... (цензура)
Зато у жавы есть котлин который неплохо смотрится на фоне жадного до выразительности шарпа (аж трисёт)
>>2514474 Да хуета какая-то. В 3д-разделе тоже удаляли целые треды, посвященные конкретному пакету, и тоже были теории на подобии твоей, мол админ не любит тот софт. Но слишком много совпадений.
>>2514478 хз. так то асп.нет неплохая штука в плане реализации жаль что MVC если для стандартных сайтов со страничками но обычно ж пишем вебапи, а там нормусик
>>2514480 Я вообще не понимаю что и к чему там. Куча кода, куча каких-то файлов-папок. А вместо объяснения, говорят пиши контроллер в такой-то папке, иначе ничего работать не будет. Почему надо писать там? Зачем нужны другие папки? Что там наворочено под капотом? Вообще, нельзя было сделать просто набор методов для работы с HTTP? А уже где и что размещать, программист решал бы сам.
>>2514484 Потому что конвенция. Конвенция дает структурность и понимание, чтобы был порядок и все работало как положено, и чтобы левый программист не тыкался как слепой котенок не понимаю как у тебя все организовано
>нельзя было сделать просто набор методов для работы с HTTP ну почему нельзя? льзя. вот сделали для любителей такого "как в тех микрофреймворках вот мы тоже так могем" и для любителей вебформс тоже сделали подобие. Но конкретно asp.net MVC он исповедует MVC как там дедушка Ruby On Rails завещал всем делать - потому эти все фреймворки похожи в разных языках (кроме питона в силу его особой модульности) и вот я после пхп в асп.нет сразу знаю где чего лежит. (хотя конечно МVP, с которым я имел дело в пхп, удобнее)
>>2514484 Читай "Asp.net в действии", есть на русском, там все исчерпывающе объясняют. > Почему надо писать там? Общепринятое соглашение. Впрочем никто не мешает задать собственные пути для контроллеров и прочего.
>>2514484 >А вместо объяснения, говорят пиши контроллер в такой-то папке, иначе ничего работать не будет. Почему надо писать там? Зачем нужны другие папки? Что там наворочено под капотом?
Ну так прекращай смотреть говновидосики с говнокурсами и начни читать умные книжки и статьи. Там все это написано.
посоны, посоветуйте как лучше, вот у меня два варианта, сейчас использую первый, второй дикая дичь и я не уверен даже что это работать будет но мне бы хотелось чтобы и ShapeMaker и ShapeTemplate не знали про конкретные Shape
>>2514525 Ну первая этакое подобие абстрактной фабрики (паттерны это модно) второе это просто фабрика (паттерны это модно) а учитывая что мы не знаем что там происходит если бы мы знали что это такое, мы не знаем что это такое
>>2515094 Это микрософты вытекают. Сколько можно обновлять дотнет? Почему нельзя сбавить темпы и выкатывать новую версию раз в 3 года хотя бы. Вы сами-то успеваете отслеживать все эти изменения?
>>2515072 RabbitMQ - обязательно Кафка - встречается крайне редко. Если знаешь рэббит, то сможешь в любое время и ее изучить. Кубер - не нужен, докер - нужен.
>>2515098 Если бы так и было, у нас до сих пор был бы .net framework, никакой кроссплатформенности, никакой контейнеризации, никакого linq и т.д. Маши крыльями или сдохнешь.
Мне прислали приглашение на собес, в компанию, где используется asp.net mvc с net framework 4.6. Между ним и asp.net core большая разница? мимо джун без опыта
>>2515287 - Выбран не тот проект для старта. Нам не видно же - не тот фреймворк. Может там тот что нет в системе - русификация студии самая вероятная причина
Можно как-то документировать кортежи? Когда у меня функция возвращает кортеж, то у меня во всплывающей подсказке над именем функции идет подпись "Types:", но там пусто.
>>2515314 >У меня русифицированная студия, полет нормальный. а у дофига новичков нет ибо >Видна субъективная неприязнь к русификации. нерусифицированная студия выдает ошибки на англ языке, которые можно загуглить в инете. Та же херня с русифицированными исключениями.
>>2515632 >нерусифицированная студия выдает ошибки на англ языке У каждой ошибки есть код. Этот код еще и URL ссылка, которую можно тыкнуть и перейти сразу в MDSN.
>>2508594 >там вакансий для джуна очень мало Джуны никому не нужны вне зависимости от стека технологий. Ну только разве если 1С выучишь. Ищи крупные компании, которые берут джунов и стажеров, и смотри, какие технологии там используются.
>>2516158 Ок, какие шаги мне нужно сделать и какой код написать, чтобы была точка входа ?( смотрел туториал , там тип создал такой же проект и сразу запустил … ) спасибо
А теперь вопрос: Во всяких TreeView и ListView событие SelectedItemChanged срабатывает по MouseDown (а не по MousUp), что делает невозможным такие вещи, как Drag n Drop.
Я уже устал назвать WPF дебилизмом. Но как это дерьмо обходить? Есть возможность самому узнать на как какой итем указывает курсор?
>>2515215 А я с ним работал У нас еще девопса не было, поэтому любое обновление говносайта шло через ручную остановку IIS и копирования всех измененных файлов Ну и создания папочки бекап_дата
1. Ресурсы:
— https://dotnet.microsoft.com/learn
— https://ru.stackoverflow.com/a/416585/422180
— https://metanit.com
— https://professorweb.ru
2. С# для веб
— https://docs.microsoft.com/ru-ru/aspnet/core
3. C# для десктопа
— WPF ( https://docs.microsoft.com/ru-ru/dotnet/desktop/wpf )
— WinForms ( https://docs.microsoft.com/ru-ru/dotnet/desktop )
4. С# для игр
— Unity-тред в /gd/, а так же учебники: https://ru.stackoverflow.com/a/609901/422180
5. С# для мобильной разработки
— https://docs.microsoft.com/ru-ru/dotnet/maui
6. Годные ютуб-каналы
— https://www.youtube.com/c/CODEBLOG
— https://www.youtube.com/c/AndreyShyrokoriadov
— https://www.youtube.com/c/DevJungles
— https://www.youtube.com/user/Shmachilin
Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: