Почему в петушарпе решили делать антипаттерн-загрязнитель кодовой базы асинк/эвейт, а не виртуальные треды, как в джаве? Почему белые мужчины-разработчики джавы оказались умнее индусов из майкрософта?
Не понимаю, как на винде языковой сервер в виме использовать? Как темки настроить(стандартная таки всратая)? Как перенастроить использование команд не из cmd а из павершела?
Напердолил себе такую штуку чтобы транзакции между микросервисами гонять, обоссыте расскажите что где и почему хуйня и как улучшить: https://dotnetfiddle.net/R2aHaC
>>2811841 >CLI. Серьёзно. Серьёзный жир, да? Я в компьютерах с 80-х, и даже тогда графика была широко в ходу. Кукарекающий за командную строку это по дефолту жирный дегенерат, не говоря уже про 2023, вообще абсурд.
>>2812598 >Я в компьютерах с 80-х, У нас недавно одного такого опытного недавно уволили. Тоже еще во времена DOS начинал. Не смог освоить работу с линуксовым стендом в консоли по SSH.
>>2813205 >инфоцыгане Кстати, даже инфоцигане сейчас домохозяек обучают в консоли работать. По гиту так вообще все курсы только работе с консолью обучают.
>>2813348 >А в чём разница В том, что тебе не придется эксепшен в ебало ловить и обрабатывать его без крайней необходимости. >>2813348 >что вариант с TryParse более громоздкий? Смотри пик.
>>2813375 Эксепшены нужно ловить там, где ты не можешь на процес повлиять в I/O например. Зачем это делать там, где можно без них обойтись? Плюс, очень часто бизнес логика допускает, что значение не может быть распарсено и имеет свою ветку выполнения на это. При использовании TryParse, ты получаешь четкий флаг, того как обработалось значение и можешь спокойно делать то, что нужно. А вот в случае try/catch, ты можешь знатно поебстись, т.к. тебе либо придется прописывать дополнительную логику в catch (что уже большой долбоебизм), либо прописывать этот флаг там, что тоже нифига не улучшит твой код.
>>2813380 > Эксепшены нужно ловить там, где ты не можешь на процес повлиять в I/O например. Когда кабан орет из-за высокого процента крашей хуячишь их в каждый метод...
>>2809049 очевидно со значимыми типами и там где очень нужно передать по ссылке (не путать передать по ссылке и передать ссылку) >>2809108 жавистам ничего не нужно. они говноеды.
возьмем пример. я не знаю как у жавистов, но допустим имеем мы изображение и нам нужно работать с пикселями напрямую и можно читать примерно так (пример ImageSharp)
ref Rgba32 pixel = ref pixelRow[x];
далее как бояре работает с объектом пиксель. А что в жаве по этому поводу? 4 отдельных переменных r g b a и таскаться с ними? В объект их нельзя - будет аллокация.
>>2809500 видимо тред перекатил жавист. (хотя может этот тред и не перекат никакой). ведь о нем не было сказано в последнем треде.
>>2812725 жвм говно из за отсутствия значимых типов и похеренных дженериков. котлин няшка, в которой конечно нет того что рантайм не позволяет. Но в плане выразительности котлин няшнее шарпа.
>>2814296 эксепшены нужно ловить там где ты знаешь что с ними делать и тебе нужно что то с ними делать.
>>2814298 >А как на тебя должен их уход повлиять? Ну си шарп это же от микрософта и вся экосистема ( one drive, почта и т.п ) отлетит или я не так размышляю?
>>2814300 > эксепшены нужно ловить там где ты знаешь что с ними делать и тебе нужно что то с ними делать. Никто обратного и не доказывает. Просто пришел тут в одном место работать а там без шуток огромная гора try catch у которых в обработке одинокий throw ex;
>>2814304 Я понимаю если бы ты ажур клауду с потрохами продался, но тебе максимум что сулит из проблем это студия только с впном качаться будет. Оракл давно уже сделали ноги с рынка и ничего джава вроде внезапно не трансформировалась в тыкву
>>2814309 >а там без шуток огромная гора try catch у которых в обработке одинокий throw ex; Т.е. мало того что, код засрали, так и стектрейс еще на похуях проебывают.
>>2814295 >Но проблема в том что майки 30 сентября поддержку прекращают в РФ Типа до этого тут дохуя поддержка от них была. Просто линукс выучи и все. Ну а вдруг лицензии понадобятся, вон китайцы под боком.
>>2814295 >а я заводить трактор не собираюсь тк не знаю английского и вряд ли его в 21 выучу. Можно подумать, будто если бы ты знал английский, то проблем завести трактор у тебя бы не было. Даже не учитывая твой возраст.
>>2814455 >он мог бы флилансить на буржуинов Вкатун фрилансить в 2023-м. Ну-ну. >Или работаешь на аутосорсе Та же хрень. На аутсорс сейчас нанимают либо совсем прожженых милордов, либо по знакомству.
>>2814476 Чувак, ты жопой читаешь? Речь шла о том, что анон не знает инглиша и на основе этого не собирается за бугор. Но даже если бы знал, то на ситуацию это бы мало повлияло.
К чему тут твои манятеории о том, как он там мог бы работать и как там могло бы быть? Это и без твоих соплей понятно, что можно работать на аутсорсе и чисто гипотетически потом переехать, хотя кому ты нахуй нужен, релокейтить тебя. Особенно пассажир из Рашки в 2023.
>>2815343 >А что с ним в 23 году. Да нихуя. Всё нормально. Ничего не происходит. Дыши ровней.
>Как бы много народу что уехало работать - они как бы тоже из той же страны. Мне нужно тебе объяснять, что из числа айтишников уезжали как минимум мидлы с минимум 5 летним стажем и целой кучей припасённого бабла или ты сам додумаешься?
>>2815389 >Всё нормально. Ничего не происходит. именно так.
Вкатуну же скажу что при его раскладе лучше выбрать язык на котором есть вакансии там где он расчитывает работать. Майки вообще не причем - сам по себе в ру зоне шарп не очень популярен.
>>2815498 >именно так. Это был сарказм, ты хлебушек ёбаный. Война идёт, долбаёб. А все граждане рф теперь в западном мире нерукопожатные. Возится с релокейтом Ваньки никто не хочет и в 90% случаев не станет. Хотя бы потому, что есть еще тыщи Тарасов и уже приехавших Ванек- мидлов и сеньёров, да и своих спецов хватает. Усёкла, чудила?
>>2815711 >Продолжай в это верить. Тут не во что верить, Вася. Это можно проверить на практике. Я понимаю почему ты так не согласен. Потому, что сам хочешь съебать отсюда именно через заключение трудового договора с кабанчиком из ЕС или США. Ставлю косарь, именно для этого ты и вкатывался в ОЙти.
Нашел как в Nuget настроить автоматическое копирование контента в импортирующий проект (пикрил 1). Выглядит это как линк (пикрил 2).
Но вот в чем проблема, копируется ТОЛЬКО контент т.е. всякие текстовые файлики, джейсончики и конфигурации.
А у меня словарь ресурсов с прикрепленным .cs (пикрил 3). У словаря BuildAction:Page, а у cs-файла BuildAction:Compile. Поэтому блок из пикрил 1 переделывает этот словарь ресурсов в контент, и cs-файл не видит его, сразу же становится недоступен метод Initialize(). (пикрил 4)
>>2815838 вообще раньше и Fody создавал хмл файл, а потом перестал, и Nlog тоже. А еще был пакет, не помню как называется, но там их много и каждый для одной функции расширения к LINQ. И вот оно ставилось и создавало именно cs файл с одной функцией расширением вот как Morelinq, но он сразу много чего тащит, а там конкретно одна функция что то типа netfx, но чет ничего не нахожу. Видимо такое больше не работает и все это удалили.
>>2815850 >>2815853 Думаю, хрен с ним, пусть будет два файла, один как Page, а другой как Content, но я не хочу это каждый раз вручную копировать. Пытался через команды, типа XCOPY воспользоваться, чтобы перед сборкой копировало само, но опять же почему-то работает только с Content-файлами. Мб словарь ресурсов и cs-файлы заняты.
Вроде лежат в одной папке, но даже если я копирую папку целиком, то копируются только файлы, помеченные как контент.
>>2815876 >>2815877 Так, разобрался. Короче, все через жопу, но результата я своего добился.
Теперь я свободно работаю со словарем ресурсов, а далее перед сборкой, этот файл копируется в этот же проект при помощи команды 'copy'. И уже при помощи >>2815838 копия определяется как контент и копируется нюгет-пакетом в импортирующий проект.
Из неудобств — дублирование файлов, которое может сбить с толку и случайное редактирование не той копии (не смотря на то, что я это разделил разными папками). Установил для этих файлов read only чтоб наверняка.
Хм. Вопрос. Как без множественного наследия сделать примерно следующее:
public class EventEmitter<T>{ private IList<Action<T>> _eventHandlers; public void Emit(T e){ Какая-то логика по публикации события } public IDisposable Subscribe(Actinon<T> eventHandler){ // логика подписки } }
public class User : EventEmitter<LoginEvent>, EventEmitter<LogOffEvent>{ // Собственно логика класса юзера }
Конечно, можно сделать типа интерфейс, дефолтную имплементацию создать в пользователе, потом пробрасывать вызовы к этим дефолтным интерфейсам, но блин. Как жижа выглядит.
>>2816283 Ну есть два способа: 1. Множественное наследование (считается зашкваром) 2. (не помню как называется) Когда ты в "class User" создаешь два приватных поля с экземплярами "EventEmitter<LoginEvent>" и "EventEmitter<LogOffEvent>"
А дальше к ним обращаешься через свойства или методы. Ты так можешь хоть тысячу классов объединить и это будет куда практичнее. У тебя даже суть твоих двух классов не подразумевает наследование, даже не скажешь кто и кого должен наследовать первым.
Но несмотря на надменность некоторых пидоров к наследованию, не стоит от него отказываться вообще. Если это в пределах 1-2 классов, то гемора с наследованием будет меньше.
>>2816377 >Если это в пределах 1-2 классов я имел ввиду, если наследование ограничивается 1-2 классами, либо что-то одно является ну прям базой всего остального.
Но Thickness это структура и у нее нет Dependency Properties. И хз как это обойти. Даже если посредником будет условный класс Border, у которого есть свойство BorderThickness, то я не знаю как к нему обратиться при помощи DynamicResource.
>>2816283 нормально делать получателя так class User: IHandler<Event> тот же медиатор так делает. Но нет никакого смысла делать отправку сообщений так, когда объект может просто владеть объектом eventEmiter и слать сообщения.
>>2816458 в языке и так есть 2 синтаксиса каста. засирать ВСЕОБЩИЙ БАЗОВЫЙ класс еще и методами = палки в колеса тем, кто захочет использовать методы с такими именами для своих нужд.
>>2816616 вот чем впф ущербна, так это работой со стилями. Ты слишком много от нее хочешь
>>2816833 >вот чем впф ущербна, так это работой со стилями. Да пипец, я всю голову себе сломал.
>Ты слишком много от нее хочешь Я хочу от нее базы — динамической смены темы и скинов. Но все туторы, что я видел по динамическим темам, немного облегчают боль, но не решают всех проблем. Все как один приколачивают гвоздями многие свойства, либо создают вещи, которые непонятно как в дальнейшем модифицировать.
Один чел решил сделать enum из стринговых ключей ресурсов цвета. А что если те, кто будет пользоваться его библиотекой, захотят расширить список ключей? Enum не умеет в наследование. Что с этим делать? Мастерить какой-то конвертер?
Или берет условный ресурс SolidColorBrush с ключом "BorderThickness" и привязывает все стили к нему. А если надо будет изменить толщину только для тексбоксов не трогая все остальные контролы? Мне придется перелопачивать стили.
Короче я решил свою проблему весьма долбанутым способом, но решил. Через StaticResourceExtension мой Thickness-посредник получает данные от Thickness-оригинала, но единожды, как статический ресурс. Но тогда образуются проблемы с обновлением в рантайме, поэтому я всех посредников выделяю в отдельный словарь, и при каждой смене темы я генерю новый экземпляр словаря и комбинирую со всем остальным.
Так что я добился пока самого идеального менеджера тем с регулируемой гибкостью настройки. Не решен (частично) только один вопрос — добавление внешних стилей.
Столкнулся с ошибкой CS1003 expected ',' (строка с if) Код: public class Size { int width; int height;
public int customWidth = 0; public int customHeight = 0;
void If(int customMapHeight > 0) { int height = customMapHeight; } } Красным подчёркнут знак '>' (строка с if) Я где только запятую не пытался ставить, не помогает. Что это за ошибка?
У тебя вообще не валидный код, няша. ХЗ чего ты добиться пытался.
Суть.
У класса - могут быть Конструктор - это процедура, которая будет выполнена перед созданием экземпляра класса(ака объекта). Поля - это такие-то переменные, в рамках объекта, ака - состояние этого объекта, ака - контекст Методы - это функции и процедуры, которые имеют доступ к полям, свойствам, событиям и другим методам класса
Сверху Свойства - сахарок позволяет тебе избавиться от постоянной пары методов Ассесора и Мутатора(ака геетера-сеттера) События - сахарок, чтобы ты паб-саб не реализовывал постоянно, пусть и с некоторыми проблемами.
>>2817253 >Я хочу от нее базы — динамической смены темы и скинов. зачем. ох уж эти красочные интерфейсы дизайн должен быть хардкорным - 100 кнопок и 10000 таблиц на одной форме.
>>2817355 У меня нет проблем. Я пишу софт для внутреннего использования. И вот там темы, анимации и прочие перделки - никому нах не нужны и даже наказуемы. А вот старые добрые таблицы, многооконность и "много инфы на экране" - очень даже приветствуется, ибо ехать, а не шашечки. Вернее проблемы есть - ибо работать со стилями в впф таки нужно и много (это ж в WPF - там миллион косяков нужно лечить через стили).
>>2817374 Дизайн не противоречит функциональности. Студия выглядит вполне таки стильно и молодёжно при этом упихивая тонны иконок и панелей в тонны окон. В внутренних же продуктах у юзеров просто нет выбора, вот потому и выглядят корп порталы/софт как правило как говно (да и работают примерно так же)
>>2817408 А у меня есть другой пример - idea-based редакторы. И вот там начала задвигать идею "а давайте сделаем минимализм по типу visual studio code", как будто это хорошо. Хорошо что эту дрянь можно отключить.
>у юзеров просто нет выбора но не потому что "жричодали", а потому что иначе просто неудобно работать. Даже вон в десктопном телеграме сделали возможность выделить разговор в отдельное окно, что как бы нарушает дизайн "делаем аля у нас тут планшет, а не какой нибудь qip"
>>2817408 и забыл - даже в студии вон хотят задвинуть новый дизайн с большими отступами. Исключительно ради "а че другие пидорасничают, а чем мы хуже" и тонны всего просто перестанут упихиваться.
>>2817424 1. Хоть и сижу на старой теме в джетовских продуктах (новая совсем говно) но и старая не нравиться особо из-за ограниченности в композе панелей в окне.
>>2817429 2. Новость видел давно, надеюсь их бог покарал и инициативу свернули
3. Ты привёл пример и я привел. Сделать красиво и удобно можно, но бизнес за это платить не будет. Проклятый мир который мы сами создали
>>2817437 >Новость видел давно, надеюсь их бог покарал и инициативу свернули В мае было. Тема вроде заглохла, но не до конца, они вроде как фидбек переваривают. Там народ им в принципе аргументированных хуйцов прилично натолкал в обсуждении, но и долбоебов вопящих "Круто, новый интерфе-е-ейс" тоже немало было.
>>2817605 проблевался? я не слежу, но после того как в файрфоксе сделали дебильные отступы просто "а пусть будут" и в итоге вкладки стали выглядеть как кнопки, а закладки просто не влезать в экран - от такого дебилизма просто тошнит и хочется уе...ь (и это не уехать)
>>2817647 Там не понятно нихуя. Скрины были по фитче, не от команды UI. Кусок контекстного меню и только. Суть в том, что фемки зашарили свой интерфейс на остальных. Тестят всем майкрософтом.
1. Допустим, в nuget-пакете есть перечисление с расширениями аудиофайлов enum { . . . mp3 = 0, . . . wav = 1 }
И я хочу добавить расширение ogg. Как это сделать правильно или хотя бы легко? Понятно, что когда всего два элемента, то можно вручную создать свое перечисление, но если взять полный список всех расширений файлов, то он будет содержать до сотни элементов. И самое главное как сделать совместимым с оригинальным enum?
Решения, кроме создания метода расширения для конвертации я не нашел. Ну и собсно гемор с ручным переписыванием всех итемов.
>>2817553 Это что ли? Тут явно ориентир на большие мониторы. Так-то если сейчас открыть студию 2022 на мониторе 800х600, то едва ли там влезет хотя бы одна панель.
Сделали закругленный десигн, как у шиндовс 11. Ну и отступы я так тоже делаю, лол, тут спорное решение. Я считаю, что для приложений с более широкой аудиторией можно жертвовать информативностью в угоду красоте, а для технических нужно приоритет ставить на функционал.
Но отступы увеличивают читабельность, а в профессиональной среде иметь минимум 2 монитора на специалиста это уже норма. Попытка запихнуть ВСЁ в один экран с разрешением 1280х900 — это слабоумие и отвага.
Ну да, раньше все влезало, ну так и мультимониторов или 4к мониторов раньше не было. А теперь есть, так почему бы не сделать лучше? Понятно что соснет одноминитораня челядь, но кто они такие? Они теперь в меньшинстве — их черед страдать. А для 4к мониторов увеличение UI только в плюс, ибо там все СЛИШКОМ мелко.
>>2818041 Лично я для своих приложух указываю настройки масштабирования и спейсинга. В любом проф софте у тебя есть целая кипа настроек.
Все таки вся эта ебля со скинчиками UI и создана для того, чтобы каждый настроил рабочее пространство под себя. Хош — берешь скин как на XP, хош как на модной 11, хош светлую тему, хош темную, хош модные шрифты да покрупнее, хош крупные иконки, хош иконки + текст.
Непонятно хули вы тут осуждаете то, что буквально создано для решения вашей проблемы. А то, что многие производители оскотинились и забили на вариации, ну так это классика почти для любой области.
>Считаю дизайн текущей студии идеальным. Ну это ты считаешь, а другой — нет. Анон выше сожалел о синей теме, а другой бы изошел на говно, увидев ее.
>>2818001 >иметь минимум 2 монитора на специалиста это уже норма - которые расположены...ммм.....рядом с друг другом? ведь да? ну рядом же? - ясно. владельцы ноутов не профи. зопесал.
>>2818074 >Непонятно хули вы тут осуждаете то, что буквально создано для решения вашей проблемы. Это было бы так, если бы они действительно предлагали это как какой-то вариант кастомизации. Но будет скорее всего замена старого на новое, как когда-то везде начали применять ублюдочный риббон, вместо нормального интерфейса. Я, кстати удивлен, что до студии эта тема не докатилась, хотя некоторый серьезный инженерный софт в свое время тоже наступил в это говно.
>>2818001 >Сделали закругленный десигн, как у шиндовс И поскольку он способствует сливанию элементов в единую кашу решили сделать отступы побольше. Еще и выделение активного элемента ухудшили.
>>2817991 1 енумы в шарпе убоги 2 для такого используется адаптер. паттерн такой. конечно если ты не хочешь сделать свой нюгет пакет расширяющий первый. тогда или все таки делать адаптер или пункт 1
>>2818819 Для задач когда у тебя куча похожих объектов и тебе их нужно различать в коде, была придумана куча способов. Массивы, списки, словари, базы данных и т.д. Ты же хочешь использовать самый ебанутый, с кучей переменных/объектов отличающихся друг от друга именами.
>>2818248 >оторые расположены...ммм.....рядом с друг другом? Да хоть вокруг. Суть моего посыла в том, что у пользователя увеличилась площадь экрана. Для этого либо ставят несколько обычных мониторов, либо один большой. Лично я сторонник перового варианта.
>ясно. владельцы ноутов не профи. Если на постоянке работают, то как минимум долбоебы. Если используют как мобильный девайс для командировок или выездов на объекты — то отличный вариант.
>>2818326 >хотя некоторый серьезный инженерный софт в свое время тоже наступил в это говно Автокад и 3д-макс? Я думал это собственная разработка Автодеска.
Как лучше организовать загрузку данных в десктопном приложении? То есть различных файлов, с которыми работал пользователь в прошлых сессиях, собственных ассетов приложения и тд.
>>2818934 > а что если значений 2 или больше? Лучше бы тебе конкретно описать задачу, иначе нижеописанное может в твоем случае пойти во вред.
Тебе нужен для этого новый класс. Совершенно очевидно по твоему описанию, что это некая группа с неким именем или идентификатором, которая содержит в себе кучу других объектов. Налицо иерархия.
Обычно есть простой список, а все свойства хранит в себе итем. Внутри каждого итема могут быть списки других итемов, а те содержать в себе списки еще одних.
По поводу генерируемого имени. К примеру у меня были итемы, у которых есть свойство ID, которое генерировалось случайным образом в конструкторе итема. Вот создал ты новый экземпляр и у тебя автоматом заполнился ID.
Если нужно неслучайное ID, а последовательное, как у тебя (b1, b2, b3), то можно хранить последний индекс созданного итема как статическое поле и при каждой инициализации инкременировать
public List<Prisoner> Prisoners {get; set; }
public class Prisoner { . . . static int lastID; //хранилище последнего созданного ID-индекса . . . string ID {get; set; } . . . . public Test() . . . { . . . . . . lastID ++; //инкременируем индекс . . . . . . ID = 'b' + lastIndex.ToString(); //билдим новое ID . . . } }
Если же индексация каким-то образом зависит от коллекции, в которой находится, то индексацию берет на себя эта коллекция.
Как например это было с другим свойством - Parent, моего итема, которое редактировал мой кастомный класс, реализующий IList, либо наследующий List (небезопасно). В этом классе я реализовал метод Add(item), который помимо добавления в список еще и помещал ссылку на себя в Parent добавляемого итема.
public class PrisonBlock : IList<Prisoner> { . . . private List<Prisoner> prisoners = new(); . . . . public void Add(T item) . . . { . . . . . . prisoners.Add(item); . . . . . . item.Parent = this; //добавляем себя в качестве родителя . . . } }
Таким образом мы можем обратиться к итему Prisoner и по Parent узнать его актуальынй индекс в блоке. Кстати, в этом блоке тоже может быть свой Parent, который сообщает номер этажа, а в этаже ссылка на корпус и так далее. Это пример на случай, когда идентификатор итема зависит от его положения в списке родителя.
И не забывай, что любой класс ты можешь модифицировать. Если в словаре не хватает свойств, ты наследуешь словарь и добавляешь нужные тебе свойства. Проблемс?
>>2819004 Ну как? У тебя команды Open, Import, Merge срут в историю действий и заодно могут срать в список последних использованных файлов. Дальше ты этот список сохраняешь куда хочешь, возможно с бэкапом предыдущего списка. Для этих команд ты даже можешь создать интерфейс, чтобы он в обязательном порядке заставлял команду срать в этот список, чтобы ни одна муха ...
В фотошопе вот только недавно столкнулся с говной — они сохраняют информацию только при закрытии приложения. В итоге, когда фотошоп крашнулся, я лишился истории последних открытых файлов.
Возможно, что команда Open насрала в список своевременно, вот только энтот список сохраняется при успешном закрытии приложения. В итоге имеем что имеем. В общем это тебе пример, что успешные компании не утруждают себя этими вашими сложностями.
>>2819038 Хотя ... с другой стороны, может лучше заполнять список истории при сохранении и экспорте. Иначе список может заполняться мусором, если пользователь просто открывает что либо и закрывает не внося изменений — например что-то ищет.
Но я такое редко где видел. Даже студия поднимает в списке ссылку на решение даже если оно было просто открыто.
>>2819069 Я не понимаю зачем ты сюда вообще пришёл. Сам же говоришь что вскод прекрасно работает и не требует тонны зависимостей вот и поставь себе асп отдельно и продолжай жить на вскоде. Или идею поставь. Всё сводится к тому что выбор у тебя есть и никто не привязывает к студии
>>2819069 >10 гигов Дедусь, ты таблетки-то вовремя принимай, 10 гигов - это 1 серия Следствие ведут знатоки (или что вы там смотрите) в нормальном качестве.
>>2819066 >visual studio ставит миллиад говна на 10гб А нехуй Pro с торрентов качать, долбоеб. Комьюнити чистая около 700Мб весит, а с минимальными либами около 3Гб. И лежит она на оф сайте майкрософта бесплатно.
>>2819326 Че за паблик стринг? В шарпе можно делать публичные поля?
Сериализатор берет во внимание только публичные свойства. На поля ему похую, про публичные не в курсе, но судя по твоему вопросу — тоже.
А еще из текста не видно, что у тебя что-то должно меняться. Судя по этому коду, у тебя в джейсоне будет всегда манда, даже при отсутствии файла во время загрузки. Хз как ты там проверяешь в таких-то условиях.
>>2818958 >что у пользователя увеличилась площадь экрана. в ширину, еще раз напишу В Ш-И-Р-И-Н-У. ширина это по горизонтали понимаешь? то есть хоть миллион мониторов но высоты они тебе не прибавят.
а у тех у кого огромные мониторы -у них проблем с видимостью нет. просто у всех забирают рабочую высоту просто "ачтобыло"
>Если на постоянке работают, то как минимум долбоебы они не долбоебы. они просто работают. некоторые вот с телефона даже софт пишут
Это если тебе приходится сидеть в душном офисе с кучей мониторов, то это кто еще долбоеб лол )
>>2819431 Иметь возможность стрелять себе в ногу и реально стрелять в ногу - разные вещи
>>2819179 >>2819092 ой блять, шизики повылазили... я про community. Вот скрин. IntelliJ IDEA вот ПРОСТО просит указать путь к JDK и не ебет мозг установками всякого кала на диск C
>>2819555 ты же понимаешь что JDK/SDK не то же самое что ты показываешь на скрине?
И что собственно IntelliJ IDEA и является тем что ты показываешь на скрине в той или иной мере и уж сама она с радостью ставится на диск ц )))) вон у меня стоит комьюнити idea и занимает на диске сама 3 гига. При это я конечно без понятия чего она предоставляет, а чего не предоставляет. Ну еще и в профиле юзера накакает.
что конечно не отрицает факт, что студия любит понаставить говна. Например я не пользуюсь sql server, нахер не нужен этот энтити фреймворк и нода, но все это добро мне навалят.
>>2818965 > У объекта - да, но в словаре всего два поля - название и значение. Пчел, ты изначально вообще хотел переменную. У неё тоже "два поля" - имя и содержимое.
>>2817991 >>2818959 > Странно, что для энумов не реализовали наследование А если внутри нугет пакета будет свитч, который выполняет какую-то логику в зависимости от значения энум переменной? Как ему реагировать на твое ogg?
>>2820755 Хороший тон это ветка с notsupportedexception но в целом согласен что затея с наследованием энамов говно. В некоторых местах к примеру есть проверки а-ля is in enum и дальше предполагается что то что прошло дальше точно валидно.
Делал кто-нибудь биндинг в ASP.Net полей с разным именем, типа в теле запроса шлём { hui_morja: 999} а в классе надо замапить на поле HuiMorja? Подскажите как делали) Все решения из гугла не работают чёт))))
>>2821135 Зависит от того какой у тебя сериализатор. Если дефолтный то в свежих корках стоит syste.text.json, если корка постарше или ты руками json.net подкинул то он. И у того и у того есть атрибут который можно повесить на проп jsonpropery и там название пропа в жсоне. Одним словом гугли
Тогда другой вопрос. Почему шарп заставляет меня вон ту первую строчку добавить? Без этого не компилировалось, говорило, дескать - использование неинициализированной переменной. Опять же - в JS все нормально и ничего не ругается.
>>2822608 Я не прикидываюсь ни кем. Просто я не могу понять, почему.
>>2822612 Я не про то. Шарп же умеет захватывать всякое. Может проанализировать тело, понять что пытаются захыватывать, вычислить тип и сгенерировать нужный делегат. Опять же - если переменную проинициализировать - оно работает нормально. А вот если нет - не собирается.
>>2822622 Потому что рослин за тебя локальные переменные не инициализирует. Может быть когда-нибудь это изменится. Как когда-то делегаты не выводились.
Не собирается, потому что анализатор понимает, что у тебя гарантированный эксепшен в рантайме.
Ну а сама инициализация необходима, потому что шарп домохозяичный яп. Локальная переменная находится в стеке. И условные 4 байта int i; могут наложится на произвольные байты оставшиеся от структуры, которая находилась в стеке до этого. В результате локальная i, без инициализации, будет иметь произвольное значение.
Как бороться с жирностью вью моделей? Пока приходит на ум только костыль в виде partial классов, и интерфейсов, т.е. можно разбить все методы и свойства на группы, вынести в интерфейсы, затем эти интерфейсы реализовать в отдельных файлах как часть одного класса.
>>2823804 Лучше чем у тебя будет partial фигня. partial - вообще придуман исключительно для случая чтобы сепарировать то что ты пишешь от того что нагенерировал какой-то генератор кода.
Вот кто-то использует в своей работе что-то? Вот у майков в коде - часто вижу что они используют. Но там понятно как-бы. А на уровне пониже. Чего-нибудь генерируете? И если да, то как?
Я вот последний раз - стрингбилдером клиенты для устройств когда на заводе работал - генерировал по вычитываемой с устройства информационной карты.
>>2823868 Та это уже как костыль жуткий выглядит. Типа вот я в студии работаю. Создаю новый файл. Переключаюс на wsl, иду по ебейшему пути в духе: /mnt/c/users/abc/sources/repos/Project1/src, открываю vim'ом нужный файл, выполняю скрипт. Закрываю wsl и дальше работаю. Даже если не закрывать, а просто делать это переодически - все еще как добро выглядит.
>>2823978 Ты так написал, потому что так лично тебе нравится? Или, может, пояснишь? Даже бездушная программа лучше тебя отвечает, для тебя это повод задуматься.
>>2823983 Первый вариант написания с использование фигурных скобок является более общепризнанным в программировании. Этот вариант обеспечивает более читаемый код и является стандартным при написании больших блоков кода. Он также позволяет легче вносить изменения внутри блока кода, если это потребуется в будущем.
>>2823767 > что кажется прям максимально эстетично Нет это смотрится максимально хуево. Во первых через какое-то время заебывает постоянно читать эту портянку в файле, т.к. коду она отношения не имеет, а место съедает. Во вторых - вся эта информация итак в гите есть. Кто, что, когда из файлов создал и какую строчку в нем изменил.
>>2823816 >Вот кто-то использует в своей работе что-то? Миграции для БД через EF - эвридей. Модели для парсинга xml - часто Клиенты для сваггера - крайне редко
>>2823983 >Даже бездушная программа лучше тебя отвечает, для тебя это повод задуматься. А ты с порядком картинок в собственном посте разобраться не можешь. На твоем месте я бы об этом задумался.
>>2823975 срать на общепризнанность. предпочитаю 2 1 - жрем слишком много вертикального пространства просто так 3 - длинные строки тяжелее читать, особенно если в строке 2 действия - а тут сравнение и действие. 2 - самый идеал. семантика отделена и сразу видно скоуп.
>>2824921 Забавно читать это в треде языка, на котором до сих пор нет нормального нативного гуи фреймворка, при том что на маке с этим никаких проблем, и писать красивые нативные приложения способна даже макака
>>2824931 а ну ну, давай расскажи мне подробнее как макака будет писать на хкоде (кстати невероятно говняная IDE сама по себе) кроссплатформенные гуи приложения.
>>2824985 > ну так для винды (родная платформа) тоже есть нативный гуи и не один В том то и беда, что все нативные гуи на винде либо устарели (wpf, winforms, uwp), либо максимально кривые (winui, maui). Современного и хорошо работающего просто нет. Это я тебе как разработчик десктопных приложений говорю.
>>2824988 И ладно бы только устарели, wpf тормоз жуткий, uwp анально огороженная платформа (самое уебанское решение майков, если бы не эти ограничения писал бы на uwp и в хуй не дул. Да, и там есть кривости, теней нет нормальных например, но в сравнении с wpf это просто технология богов)
>>2824988 >wpf тормоз жуткий и при этом быстрее того же winui лол
не знаю, пишу на WPF и мне норм. А всякие там эффектики и красивости мне не нужны. И как раз UWP и выше считаю огороженным и УРЕЗАНЫМ говном - то нельзя, этого нет.
На а винформс есть винформс. что на маке родное то? я хз но гугл первым выдал AppKit, похоже жуть страшнее чем винформс. SwiftUI? так он не для макоси. Сам концепт мне нра, но из за выразительной убогости свифта и шарпа ну такое себе, а самая мощь подобного подхода раскрывается только на котлин, но это все для мобил как бы. Если тебе нужен DataGrid то ууупс.
>>2825017 > и при этом быстрее того же winui лол Но гораздо медленнее UWP. На wpf даже нельзя добиться плавной анимации без микролагов, это ли не пиздец? > И как раз UWP и выше считаю огороженным и УРЕЗАНЫМ говном - то нельзя, этого нет. Winui то как раз не огорожен, а так да, это большой минус UWP, но этот минус компенсируется скоростью работы и наличием Composition Layer >>2825017 > так он не для макоси И для нее в том числе.
А так вся надежда на Авалонию, для неё конечно нужно самому все контролы пилить, чтобы нативно выглядели, но это в целом не сложно. Главное что работает лучше wpf, возможностей больше, в последней версии ещё и Composition Layer из UWP добавили. Документация правда куцая, с msdn и рядом не стояла, зато чат есть, где можно напрямую с разрабами пообщаться.
>>2824988 >Это я тебе как разработчик десктопных приложений говорю. Ты вымирающий вид, который скоро будет выкинут на свалку истории. Пора откатиться в сторону и лечь помирать.
Вот к примеру пикрил, мне надо подписать класс и конструктор класса (подчеркнуто). Текст в большинстве случаев один и тот же, но вставлять копипаст как-то тупо и не практично.
Что есть на джаве, чего нет на петушарпе: — Стабильность и вера в будущее (обратная совместимость) — @Delegate (петушарп не поддерживает композицию, приходится ручками переписывать по 500 однотипных методов) — @RequiredArgsConstructor, @AllArgsConstructor, @NoArgsConstructor — @ToString (приходится генерировать средой разработки и сидеть в классе с кучей говна, красивые элегантные классы нинужны, лучше попилим его с помощью partial class и не так всё плохо будет выглядеть, при добавлении новых полей перегенерировать) — JavaFX — Minecraft
Открываем инет про @Delegate хотя бы и читаем "Current status: negative - Currently we feel this feature will not move out of experimental status anytime soon, and support for this feature may be dropped if future versions of javac or ecj make it difficult to continue to maintain the feature. "
С-стабильность.
>переписывать по 500 однотипных методов не сраным жавистам с их гетсет об этом говорить лол.
и остальное такое же смешное.
а так, пусть жависты едят говно в своем треде. Нет, спасибо что нам тред перекатили, но теперь идите жрать свое говно.
>>2825849 не знаю о чем ты вообще {get; set} это указание компилятору "я ж не жавист засирать код пустыми методами геттеров и сеттеров, сгенерь эти методы за меня". Абсолютно нормальный синтаксис. Разве что бэкингфилд не сделали, как в том же котлине. Ну шарп не идеал, но же жавистом на него бочку катить.
>>2825892 ты определись плиз - жава ушла или просто кого то убогость и многословность жавы основательно зае... и был создан проект ломбок (которая суть СТОРОННЯЯ либа) для внедрения сахара?
ну а в шарпе 12 будут эти конструкторы (хотя конечно не факт что так же хорошо, как в котлине) с другой стороны мне конструкторы такого вида никогда и не нравились если это не record. Семантика контракта и внутреннего устройства класса размазывается.
>>2825913 >ты определись плиз - жава ушла или просто кого то убогость и многословность жавы основательно зае... и был создан проект ломбок (которая суть СТОРОННЯЯ либа) для внедрения сахара? А какая разница? Я-то пишу с удобным сахаром, которого нигде больше нет, ни в одном языке программирования.
>>2826020 разница есть - может быть в любой момент потенциальная несовместимость - ты можешь устроиться куда то работать, а там "никаких ломбоков ничего такого мы не знаем". - кто вообще автор либы. за чей счет оно живо. мир жавы это такое. ждк тому пример - то платный, то бесплатный, суды всякие
>ни в одном языке программирования. кулик, да ты хотя бы оглянись вокруг в своем болоте. даже в зоне твоей жвм есть хотя бы котлин и на его возможности посмотри (а это не только сахар). а потом на свою жаву, которая на той же жвм и куда асинк нормальный никогда не завозили, сахар через сторонние костыли делается, ну может там чего то обещали подобие корутин сделать - не слежу.
>>2826031 >- может быть в любой момент потенциальная несовместимость Так-то и джава может быть сама с собой несовместима в процессе разработки. Но есть такая возможность, как "пофиксить баг", если ты не знал.
>- ты можешь устроиться куда то работать, а там "никаких ломбоков ничего такого мы не знаем". Добавляю в dependencies ломбок и довольно урчу. Это же джава.
>- кто вообще автор либы. за чей счет оно живо. мир жавы это такое. ждк тому пример - то платный, то бесплатный, суды всякие На гитхабе ломбок есть. Лицензия какая-то кастомная, но, судя по всему, дженерик MIT/BSD.
>даже в зоне твоей жвм есть хотя бы котлин и на его возможности посмотри (а это не только сахар). В петухлине всего, что есть в лобмоке нет.
>>2826038 >Но есть такая возможность, как "пофиксить баг", если ты не знал. а эта возможность она мгновенная по щелчку пальцев? или нужно issue писать, потом ждать фикса, потом ждать пока выкатят этот фикс? Может для жавистов время искажается, а то я не знаю. В моем мире течение времени одинаково во все времена
>довольно урчу. Это же джава. только недолго урчишь. ибо тебя просто попрут с работы за то что ты используешь левую хрень в общей кодовой базе.
>На гитхабе ломбок есть. Лицензия какая-то кастомная лицензия дело такое - взяла и сменилась. обычное дело.
>В петухлине всего, что есть в лобмоке нет. ясно. упоротый жавист. пошли аргументы "ви все вретттте" нечего после этого с тобой обсуждать.
>>2826043 >только недолго урчишь. ибо тебя просто попрут с работы за то что ты используешь левую хрень в общей кодовой базе. >лицензия дело такое - взяла и сменилась. обычное дело. >и вообще завтра на тебя упадёт метеорит, тупой джавист. что скажешь на это? оправдывайся
>>2826043 >а эта возможность она мгновенная по щелчку пальцев? или нужно issue писать, потом ждать фикса, потом ждать пока выкатят этот фикс? Всё ровно так же работает и с самой джавой, и с вашим петушарпом. Это вообще не аргумент, маня. Почти все проблемы фиксятся ещё до выпуска кода в паблик.
>>2826094 ты реально думаешь что сторонняя либа, пусть даже она удобная и поддерживается основными IDE то же самое что стандартная? То, что она генерит, не является валидным кодом жавы и поэтому нужны плагины в IDE Так что она может как быть так и не быть
Насчет лицензии. Oracle JDK отличный пример что даже невероятная известность и стандартность может просто измениться в один момент.
Насчет метеорита - тоже может быть, но мы говорим о реальных вещах. Можешь доказать что ломбок используется на 100% кодовой базы в мире? нет? тогда и говорить не о чем.
>>2826100 >петухлине есть упомянутые мной аннотации они там не нужны. язык все это умеет искаропки и даже больше.
>>2826102 >Всё ровно так же работает и с самой джавой, и с вашим петушарпом нет не так же. когда фича - часть компилятора, то она не зависит ни от IDE, ни от сторонних плагинов и их междусобойной совместимостью. Возможности компилятора находятся в жесткой согласованности с самим собой, а не разрабатываются и не обновляются отдельно.
Я не работаю с жавой и ломбок, но мороки с совместимостью плагинов на андроид студии мне хватило выше крыши. В жава мире многое завязано на кодоген и я наелся дерьма в связке плагин + hilt + dagger до отвала.
>>2826109 >ты реально думаешь что сторонняя либа, пусть даже она удобная и поддерживается основными IDE то же самое что стандартная? Пока ты кукарекаешь про потенциальные проблемы, я просто пользуюсь и ещё ни разу не испытывал никаких проблем с ломбоком, как и пресловутого скрытого поведения/подводных камней, которыми вы так любите кичиться. Может, не то же самое, но этого достаточно.
>Насчет лицензии. Oracle JDK отличный пример что даже невероятная известность и стандартность может просто измениться в один момент. Тогда OpenJDK и получила развитие. Невалидный пример, да и не аргумент вообще, если всё так работает, что мешает петушарпу лицензию сменить? Не высасывай из пальца, серешь в штаны.
>Можешь доказать что ломбок используется на 100% кодовой базы в мире? нет? тогда и говорить не о чем. А этого и не нужно. Пусть им пользуются 90%, 40% или один я, что с того? У меня есть эти фичи, а петушарподебилы отмакакивают {get; set} и ещё смеют этим выёбываться.
>они там не нужны. язык все это умеет искаропки и даже больше. Покажи мне то, что заменяет @Delegate, @With и @RequiredArgsConstructor в петухлине. Да и не о нём идёт речь, я так-то в петушарпотред зашёл. Петухлин, как паразит на джаве, автоматом имеет все её фичи (кроме, конечно, всей той красоты из новый версий, так как петухлин сидит на 8 jvm).
>>2826131 >я просто пользуюсь ну пользуйся кто тебе запрещает. но не говори что весь мир пользуется и устроившись куда то на работу там будет ломбок (не говоря уже про то что ломбок это костыли)
>Тогда OpenJDK и получила развитие.Невалидный пример, да и не аргумент вообще просто пример того как что то может измениться легко. и если даже что то очень известное, что говорить о левой библиотеке )
>что мешает петушарпу лицензию сменить? ничего не мешает. все могут менять. и все меняли. правда вот в разные стороны )
>или один я, что с того? а то что с того, что гет сет шарписты могут писать везде и всегда. А ты со своим ломбоком можешь писать у себя дома, ну молодец че.
>петушарподебилы отмакакивают {get; set} абсолютно нормальный синтаксис. жавапетух просто не знает к чему придраться.
>Покажи мне то, что заменяет не хочу читать про ломбок мне влом. и нах не нужно. поэтому по диагонали как я понимаю что это за фичи >@Delegate, это то что еще не является стабле в ломбок? ну такое себе. Типа автогенерация декораторов? ну в котлине она есть class Derived(b: Base) : Base by b >@With это как шарповское with для records то есть позволяет заменить часть свойств и компилятор сгенерит билдер? в котлине у дата классов есть метод copy - "Use the .copy() function to copy an object, allowing you to alter some of its properties while keeping the rest unchanged."
>@RequiredArgsConstructor не понял что это точно делает, но в котлине искаропки дефолтные кострукторы они работают как конструкторы у record в шарпе только шире ибо объявляют не только сигнатуру конструктора, а и кем станет это - свойством или полем. То есть там автосоздание и присвоение свойств и полей через конструктор (то что только частично будет в шарпе 12 как доп функционал) является прямо таки основным. И поскольку конструктор только присваивает, то есть еще блок init{} для логики
>Петухлин, как паразит на джаве какие фичи лол. жава НЕ ИМЕЕТ этих фич. Эти фичи имеет сторонняя либа через кодоген и на выходе не валидная жава (потому и нужен плагин чтобы с этим работать) и кто ГОВНО жаве виноват что она развивается как черепаха. Будь жава хороша, то ломбоки бы и не появились ибо не нужно было бы
а так да. тред про шарп то. хватит обсирать жаву. жависты и так знают что она говно и нужны костыли позорные типа ломбоков ибо без них жопа.
>>2826160 >абсолютно нормальный синтаксис. жавапетух просто не знает к чему придраться. >ну и говно тоже в принципе вкусное. да, петухам мух не понять!
>>2826160 >просто пример того как что то может измениться легко. и если даже что то очень известное, что говорить о левой библиотеке ) >ничего не мешает. все могут менять. и все меняли. правда вот в разные стороны ) Тебе обязательно на каждый тезис что-то высрать своё, даже если высрана будет хуйня, да?
>рррррря старонняя либа! Ну так у вас и такого нет. Сидите гетсетыиниты дрочите свои на каждую переменную, коупя тем, что это вам дали с лопатыиз коробки, когда мы просто одну аннотацию ставим на весь класс.
>>2826199 просто правда есть правда. Сколько орали о злом мелкософте и об хорошем оракле. а потом весна показала кто где срал.
>Сидите гетсетыиниты дрочите свои на каждую переменную data классы в котлине и record в шарпе есть искаропки это то же самое что твое тупое @Data
а вообще кодогеном можно везде упарываться, но блин восхвалять стороннюю либу которая СУТЬ КОСТЫЛИ, да еще и генерит она не жава код О_О....может только жавасранька.
Какой смысл в xml-документации указывать комментарий к исключению, если он нигде не виден? /// <exception cref="ArgumentNullException"> Эта залупа нигде не видна </exception>
Все что я получу при наведении курсора на метод — это тип исключения, без каких либо комментариев и уточнений.
>>2826719 Потому что xml-документация используется не только для того, чтобы тебе подсказки в IDE выдавать но и для других вещей, вроде кодогенерации или спецификаций api.
>>2826358 Шарподебил продолжает плакаться на костыли, пока я пользуюсь ломбоком и радуюсь сахарку. А ведь он заревел только от одного @Data, который по сути антипаттерн... Вкину пожалуй @ToString. Как там с этим дела в петушарпе обстоят?
>>2827130 ты какой то больной. ты пришел сюда не с жавой, а левым инструментарием у шарпа тоже такой есть - например, fody. Он за меня генерит INPC и многое другое. Но я же не называю его "это заслуга шарпа". Наоборот, это недостаток шарпа восполняемый костылями.
А ты костыль, который родился из за невероятной убогости жавы, записываешь в достоинства жавы. Катись в свой жава тред с этим.
>>2827359 >ррррря ты ниможишь просто так взять и пользоваться сахаром патамушто не искаропки!!!!! всмысли ты пользуешься??!?!?!?!?!?! низзззяя яскозал!!!!!!!!!!!! Как же он коупит, пиздец просто.
>>2827418 слушай дебич. Я тебе последний раз говорю (и больше отвечать не буду) - ты пришел не с возможностями языка, а "смотрите у нас можно юзать вот такие левые костыли", которые пришел ты устраиваться на работу, а тебе "какой нах ломбок иди нах отсюда" И твое "а как же тустринг, а гетсет" ты засовываешь в свою вертлявую жопу и идешь нах
за сим все. дебил, который НЕ ОТЛИЧАЕТ язык от ИНСТРУМЕНТАРИЯ пусть идет нах
на шарпе тоже есть 100500 способов кодогенерации в компиль-тайм. Помимо рантаймовых (это то с чему жабы жопа) есть и сорс генераторы, и fody и просто шаблоны. И конечно ты можешь захерачить плагин к студии что будет генерить все что тебе лично угодно. Другое дело что это все равно останется просто тулзой и ты можешь использовать его где то, но это не значит что ты сможешь использовать это везде
но конечно если ты кодишь один дома калькуляторы - ну поздравляю тебя
>>2827422 Ебать дебилоиду правда печёт. На полном серьёзе сравнивает фоди с 73 звёздами на гитхабе с ломбоком, который де-факто стандарт, с 12к звёздами. И ещё ебло умудряется перефорсить "какой нах фоди иди нах отсюда" на "какой нах ломбок иди нах отсюда". Кстати, как там с поддержкой фоди в среде разработки?
>за сим все. дебил, который НЕ ОТЛИЧАЕТ язык от ИНСТРУМЕНТАРИЯ пусть идет нах А нахуя мне различать это? Я ж не шарпоблядь с нищим по функционалу языком и экосистемой, чтобы мне приходилось как-то коупить убогость способов разработки. Я просто пишу и всё, а шарпобляди выдумывают оправдания аля "ниискаропки!!!", "антипаттерн!!!!" и прочее, прочее.
>>2827429 ну так это не жава же у нормальных людей 90% генерации ToString() покрывают record (data class если котлин) где все генерится. Для остальных случаев (не дто классы) лучше доверить сгенерить самой IDE и подправить ручками. Поэтому тустринг генератор нужен мало кому ибо незачем нахер.
не думал почему нет ломбока для котлин? а в жава он типа "де факто стандарт" ибо без него просто никуда (жава хуле). Правда реальность немного другая - не везде он используется, но кого это волнует если в треде упоротый жавист.
>>2827434 >учше доверить сгенерить самой IDE и подправить ручками. Ясн, шарпомух опять в своём репертуаре. А просто размазать говно по экрану не вариант? Зачем всё усложнять и размазывать говно по классам?
>>2827434 >ибо без него просто никуда (жава хуле) Ну не проецируй, маня... Единственное, что в петушарпе есть из аналогов адекватных функций ломбока это убогий {get; set} на каждую переменную. Всё остальное, чем вы гордитесь, уже давно есть в самой джаве.
Обратного не скажешь про петушарп, который ни в самом языке не имеет нихуя, ни в библиотеках.
Нииееет, ты ни панимаеш, эта ни фоди нииспользуимая хуита каторую сделали из-за убогасти петушарпа, эта ни миня визде шлют нахуй с маим фоди с 73 звёздами, это фсё наобарот, понял да!
>>2827503 Ты абсолютно прав. Жава дебич скатился к откровенному говну. Тустринги, гетсеты лол. Радость у жавадебича от того что часть говна в жаве правит сторонняя либа (которую кстати ценят не все ибо не все фанаты неявной генерации хер пойми чего, а предпочитают чтобы IDE генерила явно) Отсутствие типов, структур, LINQ expressions, асинк/авайт и т.д. - все это не парит жавадебича который высирает тонны говнокода там, где в любой другом языке (не только шарп) "давно продолжается праздник, а жавадебич в вилабаджо все еще моет посуду" (с)
Есть Uri на страницу в приложении, формата "pack://application:,,,/MyApplication;component/Styles/ListViewStyle.xaml"
Можно это каким либо образом сохранить в файл? Попытка сохранить ResourceDictionary через XamlWriter не увенчалась успехом — куча информации попросту теряется.
>>2828482 нет. Да и даже если бы да, то причем тут вообще это. Linq Expressions для другого
>>2828485 в жава 5 ради совместимости с жава 4 приняли решение внедрить фичу type erasure, то есть из байт кода стирается информация о типах дженериках. Если у тебя тип List<? extends InputStream>, то хрен ты в рантайме узнаешь что там вместо ? и вынужден с этим жить.
>>2829263 >то хрен ты в рантайме узнаешь что там вместо ? и вынужден с этим жить. А зачем это знать? Ты знаешь, какой интерфейс реализует тип, зачем тебе знать больше?
>>2827900 >Отсутствие структур Джависты говорят, что там где шарпоскот вынужден руками ковырять свои структуры в погоне за оптимизациями, джавагоспода просто пишут бизнес-логику, а JVM сама всё оптимизирует, где нужно. И в принципе и правда если смотреть различные сравнения, нету у шарпа какого-то значимого преимущества по перформансу.
>>2829356 >Ты знаешь, какой интерфейс реализует тип, зачем тебе знать больше? Разработчики многочисленных DI, ORM, event аггрегаторов и вообще всего что связано с кодогенерацией, сидят такие и думают "а че так можно было?"
>>2829365 >JVM сама всё оптимизирует, где нужно ага. видели мы как она оптимизирует. путем пожирания памяти. А тюнить jvm вообще отдельное искусство
>>2829382 хотел ответить, но увидев... >Память стоит копейки. понял что это упоротый жава дебич и потому пусть валит в свой тред, а не мешает нормальным людям писать на нормальном языке.
А как указать Uri путь на компонент зип-архива? Пытался так var listView = new Uri("file:///C:/Test.zip;component/Resources/Styles/ListViewStyle.xaml"); Но Uri не хочет видеть ";component".
Если я возьму listView.Segments, то получу разбитие по косым чертам "/", в итоге один из сегментов будет выглядеть так "Test.zip;component/"
Я конечно могу вручную разбить строку, но думал может есть какие-то решения из коробки. Или может надо как-то иначе указать Uri до файла внутри архива. Если я укажу так "file:///C:/Test.zip/Resources/Styles/ListViewStyle.xaml" то боюсь я хрен достану файл.
>>2829365 Жабоебы много чего нелестного про фичи шарпа говорят, а сами втихоря свой пиструник на Project Valhalla наяривают, в рамках которого эти "ненужные" фичи (value-типы, полноценные дженерики и т.д.) в жабу добавить пытаются.
>>2829382 Как по мне, уж лучше кодогенерация, чем инструменты, которые на лету байткод генерируют, как это в жаба-мире принято. Сильно меньше магии выходит. Открыл сгенерированные сорцы и тебе все становится понятно. Да и шансов, что у тебя после обновления либ что-то в рантайме отъебнет сильно меньше, так как криво сгенерированный код тупо не скомплируется.
>>2829382 > В Java всё это появилось раньше, чем в шарпе, и отлично работает всё. Не в жабе а сама жаба. Достоинство это или недостаток сам решай. Да и в современном мире я бы вообще считал что фреймворка не существовало, а жизнь зародилась с второй корки
>>2829440 ну не совсем так. Это в шарпе вовсю рантайм генерация ибо типы доступны. И только вот вот приехала кодогенераци сорцов.
Я не знаю как в жаве, но в андроид там кодогенерация вовсю используется и давно.
ломбок же этот генерит не код. ну так и в шарпе fody переписывает байт код. поэтому переписывание может переписать исходник, а сорс генерация она только дописывает в отдельные файлы.
>>2829437 Впервые слышу, чтобы действительно кто-то что-то в жаба мире говорил про шарп негативно. Разработчики библиотек говорят, что Шарп был спроектирован с учётом исправлений некоторых ошибок жабы. И функционал той же вальгаллы есть в шарпе. Но в жабе это сложно реализовать из-за дроча на обратную совместимость. И этот аргумент работает. Многие компании и сидят на жабе из-за пиара обратной совместимости. И сломали ее только один раз в девятке этими вашими модулями.
>>2829428 >а должен видеть зип? Он должен видеть точку с запятой в качестве подразделителя (пикрил 1), а дальше компонент с локальным путем. У меня же все воспринимается как один длинный путь.
>файлы в зипе не то же самое что ресурсы А разве вот это "pack://application:,,,/Apperance.Test;component/Resources/Styles/ListViewStyle.xaml" не ссылается на условный контейнер? По карайней мере так пишут в статьях (пикрил 2). Глядя на подобную структуру, у меня сложилось впечатление, что Uri умеет видеть путь к объекту и отдельно путь к компоненту этого объекта.
Я хочу себе сделать внешний подключаемый ресурс. Выбрал зип-архив. Это можно считать контейнером? Или есть другие способы?
>>2829534 Поставил символ "#" вместо ";" согласно пикрилейтед и удалось извлечь фрагмент.
Теперь AbsolutePath выдает: "C:/Test/Test.zip" а Fragment: "#component/Resources/Styles/ListViewStyle.xaml"
Короче, чтобы получить желаемое, мой Uri должен выглядеть так "file:///C:/Test.zip#Resources/Styles/ListViewStyle.xaml"
Но структура не выглядит как тот же "pack://" Мне проще самому разбивать строку по ";component/", чем извращать путь таким образом, чтобы от Uri получить тоже самое.
Непонятно, почему ";" не фурычит. Вроде тоже разделитель. Хотя даже если бы и работала, то я бы получил это "component/Resources/Styles/ListViewStyle.xaml" И мне все равно пришлось бы чистить путь от "component/".
>>2829573 >Хотя даже если бы и работала, то я бы получил это >"component/Resources/Styles/ListViewStyle.xaml" >И мне все равно пришлось бы чистить путь от "component/".
Тут я затупил. "component" это папка внутри пакета, я ее тоже себе сделаю. Остается проблема, чому не видится точка с запятой.
Моё ебало, когда помойный с# работает на помойной CLR от говнософта с 0 других вендоров, представили? Этот раб микрософта небось сейчас от старфилда балдеет, охуенная игруля от его любимой компании - говна не делают так сказать.
>>2830123 >Напомните, как в божественном C# автоматически сделать метод toString() без засирания класса сгенерированным кодом? Ничего не понял. Ты хочешь избавиться от чего-то автоматически сгенерированнго чем-то автоматически сгенерированным? Зачем?
Если тебя надо собственный ту стринг, то пишешь оверрайд ту стринг и внутри любую логику.
>>2830123 Дак рекорд это есть класс, а рекорд стракт это структура (хотя можешь не думать, у вас их всё равно нет) Так и не понял что ты сказать хотел?
>>2830224 Ну по опыту знаю, что нет абсолютной годноты, а гнаться за мелочными фишками — тупо.
Вот я щас горю с того, что не могу в шарпе скрыть метод в базовом классе. В бейсике я могу поставить модификатор затенения. А теперь из-за одного класса, где не не должен существовать метод, я должен копипастить этот метод для пяти других классов.
Всякие обсолеты и вызовы эксепшенов — говно какое-то. Не по красоте. Этот вариант не фунциклирует [System.ComponentModel.EditorBrowsable(EditorBrowsableState.Never)] public override void DoSomething() { }
>>2830192 просто у них в жаве в силу БЕЗМЕРНОЙ УБОГОСТИ жавы когда то начали проект ломбок. Что то типа fody в шарпе. И поскольку жава такая НЕРЕАЛЬНО УБОГАЯ не один десяток лет, то за это время НЕОБХОДИМОСТЬ ДОПОЛНИТЕЛЬНЫХ костылей таки признали даже САМЫЕ УПОРОТЫЕ ГОВНОЕДЫ жависты и убедили разрабов IDE что нужно не просто генерить байткод (или не пойми что, но не код жава), а чтобы IDE могла это учитывать и поэтому появилась поддержка в IDE.
шарп таким путем не шел, ведь авторы шарпа не стеснялись на фичи (где сразу был хотя бы гет/сет лоооооооол). Вот как щас source generator-ы, но они генерят именно код и только новый код. А аналогия это если бы fody генерил не "потом там в черном ящике", а IDE сразу давал подсказки будто оно уже нагенерило.
Так что если брать кодогенерацию, то тут да - у говноедов преимущество в плане поддержки этого в IDE. Ну это для тех, кому это реально важно. Например мне хз зачем генерить за меня ToString в мутабельном классе, если это не data/record класс, то есть класс сложный и засирать ToString абы чем мне как бы не нужно.
Больше нужда в переопределения кастомного Equal и GetHashCode, но IDE может их генерить. Да и в жаве не все поклонники неявной генерации и предпочитают генерить с помощью IDE
И да, мы всего лишь говорим про реализации сахара - сам язык дает или костыли. Как бы проблема говножавы не только в отсутствии сахара (хотя это показательно, что до сих пор не сделали гет/сет, а "вот и пусть пердолятся в ломбок лол, говноеды ха ха ха, так и надо" - небось думают авторы жавы. Ибо хз почему такую ВОСТРЕБОВАННУЮ фичу не впилить наконец в сам язык на уровне компилятора. Там годами впихивают базовые фичи. И сахарный лобмок просто позволяет меньше нажимать кнопки на клаве реализуя некоторый сахар. Но фундаментальные проблемы языка это не решает - там где на другом языке ты "написал и отмечаешь", в жаве же думаешь "как блин это тут вообще реализовать то по нормальному"
>>2831483 а какая должна быть поддержка в IDE для метода ToString который сам генерится? тело метода? так тебе и IDE его легко сгенерит. а если оно генерит само где то там, то чего ты еще ожидаешь? ты таблетки пил сегодня?
>>2831509 На самом деле я вообще не понимаю зачем переопределять тустринг чем то дефолтным, во всех моих кейсах если переопределяю то там какой то кастомный набор и даже из этих случаев чаще не тустринг а вешаю дебаггердисплей атрибут
>>2831504 Мб тут есть человек которому может быть интересно написать абстракцию над вулканом, директом и наверное металлом на шарпе или он уже занимался чем-то подобным и может поделиться опытом
>>2829356 Ну, например, в C# можно указать, что generic параметр T имеет пустой конструктор, а значит внутри generic метода можно сделать new T(). В Java без ебли с TypeRef или Class такого не сделаешь.
>>2808821 - Значимые типы данных - Материализованные дженерики - ref и out - Нет говна в виде checked exceptions - LINQ и Expressions - Нет засилья магических аннотаций с кодогенерацией напрямую в IL-код/байткод - Кортежи из коробки - Нормальные лямбды и делагаты вместо убогих Function - Pattern matching, getters-setters и другой вкусный синтаксический сахар "изкаробки"
И многое другое. Продолжать можно до бесконечности.
>>2831629 С чего ты решил, что это рефлексия? Я не достаю мета-информацию о типе из сборки или ещё чего, я просто заранее знаю, что это тип T и у него есть new. Компилятор это развернёт напрямую в new MyType(), благодаря материализованным дженерикам.
Нужно найти итем в коллекции, аля TryGet, чтобы через return возвращалась успешность поиска <bool>, в out результат найденного итема <T>. Но проблема в том, что в случае отсутсвия итема мне нужно что-то вернуть, а вернуть я могу только null. В итоге, на выходе, несмотря на булевый результат, мне приходится снова проверять возвращаемый объект на null.
В общем, получается какая-то бесполезная конструкция. Проще сразу возвращать через return итем.
Есть какие-то способы решения проблемы? Типа как string.Empty
>>2831643 Как бы try методы возвращают default а что у тебя там ссылочный или вещественный тип не важно. Ещё ты условным getordefault не сможешь определить есть ли у тебя значение null в том где ты ищешь месте или к примеру 0 в наборе интов
Вероятно вы не поняли мою проблему. Короче, вызов моей функции должен выглядеть так:
if(TryGetByName(myCollection, "myItem", out MyClass resultItem)) { . . . resultItem.Name = "new name"; //вот тут дикий ор студии, что объект nullable }
>>2831738 может не использую тустринг ибо нахер не нужно но активно использую генерацию INPC и ConfigureAwait(false) по дефолту (ибо мелкие ну никак не хотят дать возможность задать это как нибудь для сборки)
>>2831743 сказал говноед из мира жавы, где принципиально нет async/await и нужно мудрить какие то конструкции для простых задач.
>придумывают себе проблемы и героически с ними борются. ты о чем говноедушка. тут же то что ты так хвалишь - не я пишу код, а тулза за меня пишет. Ты или трусы надень или иди нах в свой тред.
>>2831744 дебил что ле? хотя кого я спрашиваю. да может. И для этого достаточно просто поставить пакет из нюгета и указать место где ему можно вклиниваться с переписыванием.
>>2831742 Разве configureawait нужен не только для случаев когда нужно игнорить поведение кастомного контекста синхронизации? То есть кроме гуёвых аппок я не знаю таких случаев
>>2831746 >ты о чем говноедушка. тут же то что ты так хвалишь - не я пишу код, а тулза за меня пишет. Ты или трусы надень или иди нах в свой тред. Дегроду не хватило мозгов даже понять смысл поста.
>>2831748 либописатель не должен предполагать будет или не будет контекст. Он может быть везде, а не только в гуи. То, что его нет в асп.нет - ну это просто частный случай.
Было дело я даже в консольном приложении делал кастомный контекст.
Хотя как видно по INPC я больше пишу десктопные приложения и постоянные configureawait бесят, а решения от мелких нет.
>>2831750 >>2831751 ты дебил? да, дебил. ты спросил, тебе ответили. Не согласен - опровергни. Не можешь - иди пожри говна.
Вообще у меня горит от того что не сделали типа await / await! или await / await? раз уж дефолтный true
А сделали хрень, которая приводит к дедлокам блин. И сколько лет тема на гитхабе по этому вопросу. Fody конечно хорошо, но он не учитывает контекст, хотя отловить "доступ к контролу не из того потока" и пофиксить проще, чем дедлок.
Ребзя, доводилось ли кому ебаться с группировкой в DataGrid WPF? Забиндил DataGrid на CollectionView, отфильтровал, всё прекрасно: но вот группироваться эта залупа отказывается напрочь - я уже все гайды от индусов перерыл, и в XAML забивал, и в коде группу добавлял: или нихуя не показывает, или не группирует. Бочку сделал, хуйцов сосну на следующем митинге.
Хочу запихнуть свойство своего класса в определенную категорию, чтобы оно нормально отображалось в окне свойств студии (Properties).
Но тут возникает вопрос с локализацией. Допустим а англоязычной версии у большинства контролов есть категория свойств "Text", в русскоязычной оно отображается как "Текст".
Так вот, если я установлю для своего свойства категорию "Text", то в русскоязычной версии студии свойство не поместится в категорию "Текст", а будет создана новая категория.
Я должен указывать категорию на языке, на котором установлена текущая локализация студии, что выглядит как какой-то ебанутый бред. Может есть какой-то способ учитывать локализацию?
>>2833180 Есть ObservableCollection, из которой берется CollectionView и байндится ItemSource'ом к DataGrid'y. В гриде есть возможность задать группировку по какому-то параметру (по типу, например): DataGrid.GroupDescription или grid.AddGroupDescription (пишу по памяти, поэтому могу точное имя метода всрать, но суть понятна), соответственно, в гриде строки будут сгруппированы и добавлен хедер группы. Только нет, не будет, иди поебись.
Забавно, что в соседнем DataGridController'e (кастомный грид от васяна) все прекрасно группируется при одинаковых байндах. Я всё пытаюсь узнать, кто криворукий: я или Паджит, писавший стандартные библиотеки.
>>2833207 >Я всё пытаюсь узнать, кто криворукий: я или Паджит Там наверно работоспособность отделяет проставка одной галочки, как это бывает обычно в WPF, и особенно у майков.
>>2832940 Ты дебил просто. Надо создавать в xaml collectionviewsource, в ресурсах, биндить его к IGrouped и в datagrid указать источник данных этот collectionviewsource
>>2833738 Это всё тоже делалось, ты мне своим IGrouped тригернул, что в CollectionView есть параметр IsGrouped, который по дефолту false. Чел >>2833287 очень даже может быть прав.
>>2833738 вообще то это магическая штука. Можно забиндить датагрид прямо на коллекцию источника, а потом сбоку подвязать _collectionView = CollectionViewSource.GetDefaultView(Items); и никуда биндить на этот _collectionView не нужно и это волшебным образом заработает.
Хз как работает правда, может правит исходный список, но работает. А вот если нужно 2 вьюхам подвязываться на один список - вот тогда и нужно создавать раздельные CollectionViewSource и биндиться уже на них
Почему в шарпе нет синтаксиса для подписки на событие только если ты ещё не подписан? Почему приходится городить всратые конструкции уровня Event -= Handler; Event += Handler; ?
>>2834029 Потому что петушарп. И это даже не шутка. Фундаментальная проблема петушарпа, когда дегенераты пытаются запихнуть в язык то, что должно быть сделано сторонними бибиотеками. Разработчики петушарпа допускают ошибки/недоработки (что само по себе норма), но исправить их уже нельзя, потому что эта недоработка прибита гвоздями к языку.
Лул. Как же шарпобляди копротивляются за свои каловые гетсетиниты, рассказывая сказки про то, как они сокращают код, а когда открывают среду разработки, они видят вот это: >>2833130
>>2834029 Технически события в шарпе - не самое удачное решение. Оно очевидное!!!!, если нужно подписать метод и сахар к нему. Просто если у тебя состояние гонки, то такой подход не работает. Да и передать событие никуда нельзя ибо это сахар.
Но конкретно в твоем случае если ты не знаешь подписался или нет, то ты как то не так кодишь.
Лично я не использую события шарпа (то, что они искаропки не значит что нужно их использовать), а юзаю свои завязанные на лайфтаймы.
>>2834033 нет. потому что ты долбоеб. мы это уже выяснили не раз.
>>2834034 когда долбоеб жавист не знает, о чем он вообще говорит.
>>2834078 ок. поясню твою дурь 1 сторонними библиотеками базовые вещи = кто в лес, кто по дрова, 100500 подходов. 2 даже в убогой говножаве не сделали "на эту тему вообще ничего .мудрите что хотите, нас не колышет", а есть вполне себе стандартизированный подход работы с этим путем всяких там Listener-ов (что те же события в c# (ибо паттерн наблюдатель прост как сатиновые трусы) ...и в любом другом языке), то есть твой аргумент про "пытаются запихнуть в язык, поэтому идиоты" заведомо идиотский. И даже если ты вдруг не жавист, то в любом языке есть что то на эту тему, ну кроме синклер бейсика может.
>>2834083 1. Ну да. Просто говна на вентилятор кинуть захотелось, или расскажешь, чем плохо не жрать блины с лопаты? 2. И щас ты мне взял и показал ключевое слово event в божественной Java. Я уже достаю список твоих обсёров и ручку.
>>2834034 >про то, как они сокращают код, а когда открывают среду разработки, они видят вот это Ну во-первых это нужно не всегда, это я решил навести красоту. Во-вторых вся эта косметика (в буквальном смысле), накинута от души, хотя достаточно написать и так [Category("Appearance"), Description("Жаба сосет хуи.")]
Это нужно чтобы в студии красиво отображались свойства твоего класса в окошечке настроек.
Почему не придумали какой нибудь идентификатор, сообщающий, что свойство вызывает сторонний метод? Чтобы пользователь знал, что если захочет многократно использовать свойство, то лучше присвоить результат во временную переменную.
Я покопался во сорцах и там чуть ли не каждое второе свойство вызывает метод расчета. Я привык думать,что свойство безопасно и в большинстве случаев обращается к полю с готовыми результатами.
>>2834299 Потому что это нормально - вычислять значение при вызове. Да и сегодня свойство быстрое, а завтра переделали и ты не знаешь А проблему тебе покажет профайлер
>>2834356 >Странные вопросы. Конечно да. Ну вроде как плодить новые сущности тоже не хорошо — появляются сильные ссылки.
>Только в случаях, если вызов свойства реально сильно влияет на производительность. А иначе заниматься преждевременной оптимизацией не стоит. А как это потом разгребать? Будет столько зависимостей, что уже не ясно кто и что творит.
Ну к примеру, возьмем графический интерфейс, там нормальная практика, что множество контролов (это могут быть итемы списка) биндится к одному и тому же свойству. Получается, что все они попусту вызывают метод, который выдает одно и то же значение.
Я не знаю, есть ли способы оптимизировать каскадные обновления, чтобы первый элемент обновил свойство, а все остальные получали готовое значение.
>>2834299 В структуры завезли ридонли методы и свойства. Для классов такое сделать нормально скорее всего не возможно, потому что есть всякие кеши и внутренние счётчики, либо реаллокация буффера, что делает невозможным отличить поведенческую неизменяемость от чистой кодовой неизменяемости.
Но технически возможно сделать кастомный атрибут, что метод нечего не меняет, и добавить кастомную проверку, что такой метод вызывает только методы, которые помечены таким же атрибутом.
>>2835121 Метод с атрибутами, лично мне нравится больше, потому что я может быть хочу, чтобы пароль - не выводился в ToString или выводился звездочками. Атрибуты - дают такую возможность и это заебись.
Как жава это сделает - я лично представлю. Таким же "бойлерплейтом" с магическими аннотациями, которые в жаве используются повсеместно, но почему-то атрибуты в шарпе стали плохими, а в жаве аннотации - хорошие.
>Как жава это сделает - я лично представлю в жаве по аннотации это сгенерится в байткоде при компиляции в шарпе то же самое делает fody
разница лишь в том, что лобок этот старый тулз который очень необходим в жаве в силу ее выразительной убогости и поэтому и развился и даже поддержку IDE получил, а Fody больше платформа для того же самого, куда каждый пилит что хочет
Поддержка IDE для тустринга не нужна, так что особой разницы между лобком этим и фоди нет в данном случае. Но вообще это мало кому нужно генерить этот тустринг ибо явное лучше неявного.
>>2835196 >разница лишь в том, что лобок этот старый тулз который очень необходим в жаве в силу ее выразительной убогости и поэтому и развился и даже поддержку IDE получил, а Fody больше платформа для того же самого, куда каждый пилит что хочет >ничестно ебёте!
>>2835256 Ничего не творится Не тупи Никакая кодогенерация сахара не исправит фундаментальные ограничения жавы. Я с нее ушел на котлин и доволен как слон. Если бы ты с котлином пришел, то у тебя была бы аргументация. Но с жавой ты вызываешь только сочувствие.
>>2835264 Убогий, вали уже в свой тред На этом всё Жавист настолько дебил что бесполезно пояснять ему что он дебил Не буду тратить на это время И другим не советую
>>2835196 >вот жеж вам скучно Ну, мне реально скучно. Аналитика на работе нет, менеджеры - пидорасы. Вместо них - бегай за клиентом выясняй, че ж он там хочет, веди переписку, созвоны и прочее. Я уже месяца 2 ни строчки боевого кода не писал. А я, мать его, ПРОГРАММИСТОМ РАБОТАТЬ УСТРАИВАЛСЯ. Аааааа. Плак-плак.
утянул с гитхаба солюшен, я точно знаю что он компилируется где-то там у человека на его машине, а у меня все засрано ошибками от проебанных зависимостей. как это вообще решают? я его не планирую у себя компилировать, есть ли способ хотя бы просто заткнуть студию на тему внешних зависимостей и посмотреть на код без красноты с сохранением ссылок внутри проекта?
Шарпаны вопрос. Хочу выложить апи проект на сервер в докер У меня будет сам проект + постгря + монга Ессно всё на линупсе и под линупсом Вопросы: 1) Кестрел или Нгинх? 2) Можно нормальный гайд для дебилов по выкладке в докер под линуксом для кестрела/нгинха? По поводу кестрела - я упираюсь в то, что кестрел не видит сертификаты какие-то. Я чет по гайдам создаю на локальной машине и через енв переменные передаю в докер ран, но неткор все равно серт не видит. А остальные гайды бля под винду где проще По нгинху чет сложнее прям выглядит, я пока не разбирал, если будет что-то хорошее скиньте плиз
>>2836075 У тебя кестрел будет всегда и нжинкс опционально. Нжинкс ставят отдельным контейнером независимым от тех кто за ним стоит, в рамках кубов это ингресс
>>2836064 там не нугет, а целая стопка каких-то ебенячих пиздоглазых длл которые к гитхабу, конечно же, не приложены. я просто хочу временно заткнуть пикрелейтед.
>>2836075 Ты мне кажется вообще не разобрался в теме. Сборка асп кор контейнера это 2 операции: copy твоих бинарей в aspnet:X.0 и entrypoint на длл. Всё. Под виндой асп кор ведёт себя идентично лини покуда ты не лезешь в богомерзкий иис
>>2836103 Это я понял. И в докерфайле это все прописано. Но когда я делаю тестово докер ран - контейнер запускается, останавливается, в логах пишет - сорри, но я не вижу сертов, сделай dotnet dev-certs https --trust (но это на Винду и мак, а на Линукс иди к нам в доки) Я правильно понимаю что серт я генерю локально и должен просто передать как переменную среды в докер ран или композ? И вообще, нужен ли этот серт мне для вебапи на впске, может я чет не так делаю? >>2836088 Понял, спасибо
>>2836226 Мне лень отвечать скажу только что 1. dev cert как бы удивительно не было только для разработки, кури доку по настройке кестрела 2. кури гугл, ты завуалированно просишь тебе доку пересказывать что докера что мсдн
>>2836452 Понимаю, шарпобляди сложно понять, что он сидит в луже говна, но представь себе, бывают. В Java давно уже забыли про проблемы с зависимостями благодаря божественному мавену.
>>2836455 ДОЛБОЕБУ сложно понять что чел НЕ ХОЧЕТ затягивать зависимости на машину ибо ему не нужно компилить, а просто код посмотреть с рабочими переходами по коду
— Двач-программач, вот у меня почему-то красненьким все в среде разработки показывается… — Так ты ж пишешь на петушарпе. Джаву с мавеном попробуй. — Джаваблядь закукарекала. На джаве мне неудобно. — Тогда ручками зависимости качай, лалка.
— Двач, а почему я код так медленно пишу? И мне очень неудобно. — Потому что ты на петушарпе пишешь? На джаве пиши. — Джавабляди не нужны! Бамп! Еще варианты? Бамп! — Ну котлин попробуй. — Ебанутые...
— Двач, почему на меня коллеги так странно поглядывают? — Потому что ты на петушарпе ешь! — Каждый раз одно и то же, что за дебильные анонимусы. А другого объяснения нет? — Может и есть, но это не важно. Важно писать код на джаве. — Кажется, я совсем не понимаю мира и не гожусь для этой жизни. — Да все с тобой нормально, просто возьми джаву, когда надо будет написать код. - ПРОСТО! аххахахах! ПРОСТО! Ахуительная история. Угу. ПРОСТО блять. Спасибо, идиоты, за совет, блять.
— Двач, двач! Мне так плохо, я опять не выспался! За что мне это? — На чём код писал, дебилушка? — На петушарпе, конечно. — А джаву не пробовал взять? — Почему анонимусы так безжалостны ко мне, а еще двач-помогач?! Это невыносимо! — Джаву взять не пробовал? — Нет! — А что тебе помешало? — Я не хочу об этом говорить. Всё. Тред закрыт. САЖИ ТРЕДУ САЖИ. Вайп!
— Знал бы ты, двач, как я хочу композиции! — У каждого своя судьба. — Как ты думаешь, анон, когда-нибудь у меня получится сделать композицию? Я ведь не хочу ничего особенного. — Так скачай JDK, установи lombok и пиши свою композицию. — Да? Хорошо, я подумаю.
— Двач, и как люди пишут toString() для классов и не помечают все поля бойлерплейтом? — На джаве, блять!! — А чего ты ругаешься сразу? Я ж нормально спросил...
>>2836462 ты просто брехливое чмо в жава та же ситуация - открываешь проект и начинает затягиваться куча говна и пока все это говно не затянется все будет красным гореть. Так что иди нах, дебич
>>2836467 Ты правда не видишь разницы? Джава то, что решает ломбок не придумывала (0), она просто нихуя не делала в этом направлении. В петушарпе же навалили кучу говна (-1), которую пришлось разгребать через configureAwait(false).
>>2836468 в дотнете тоже все затягивается автоматически. Исключение - зависимости были просто кучкой длл или зависимыми проектами, которые просто не были выложены в паблик.
В жава при таком подходе эта же куча жаров ниоткуда сама не нарисуется и подпроекты тоже.
инет может быть 10000000 раз хороший, просто это дерьмо засрет диск, а нужно будет 0 раз, ведь они просто не нужны. в дотнет будет то же самое. При открытии проекта начнется засираться кеш nuget-а лишним говном.
>>2836469 >она просто нихуя не делала в этом направлении. >В петушарпе же навалили кучу говна (-1) ИМЕННО. Когда УЖЕ во многие языки завезли асинк авайт (даже в пхп появится лол) - в жаве кодят как еще прадеды кодили - строят монструозные конструкции и закатывают солнце вручную. про onfigureAwait(false) ты вообще не знаешь что это - так что смешно слышать от джавалошка какую то там критику
помню сколько слышал от жавистов "не нужны нам ваши лямбды" - а потом бац и завезли. ЛОООООЛ ГОВНОЕДЫ Так если не нужны, то чего вдруг убедили разрабов жавы таки добавить их в жаву
или как в го с дженерикам "оно не нужно". А теперь "йоба, да это же киллер фича"
>>2836452 я посмотрел уже и пиздоглазых вызовов там не так уж и много и по коду можно примерно понять что там они делают и почем то что мне надо находится внутри неймспейсов проекта т.е. оно все нормально индексируется. но каким-то хуем отвалился весь System + System.Collections.Generic. вот что это за ШИЗА?
>>2836472 это глюк студии. Открываешь старый проект - все красное. Нужно удаление .vs (иногда не помогает) в idea-шных IDE там есть рестат и инвалидация кешей, а в студии удаляю .vs
>>2836471 Ну не надо проецировать. Обычно такое слышится от шарпоблядей, которые лучше ручками будут макакить бойлерплейт и, чтобы легче было коупить, еще и пообещают линтером нипущить и зопретить нормальные человеческие практики, если они появятся.
>>2836474 мало ли. может проект на дотнет 5, а у чела просто на машине такого нет, а стоит 7 Не стоит путать рантайм и сдк
А может, как оно обычно бывает, проект пытается быть кросс и там прописано 100500 вариантов вида .net461, core, standard и части этого добра просто нет на машине
вот у меня нет - я пишу под дотнет 7, зачем мне старое.
Также не стоит забывать что потерянных зависимостей может быть так много, что количество анрезолвед зашкаливает и анализатор перестает строить модель.
>>2836475 >которые лучше ручками будут макакить бойлерплейт совсем тупой???? это слышится в ПЕРВУЮ ОЧЕРЕДЬ от жавистов (и от гошников, но их понять можно) и жависты такие "нахер нам это не нужно. у нас ентерпрайз, посмотри сколько написано всякого на жаве". только жавист будет терпеть монструозность синтаксиса. Взять те же гет сеты - их так и не сделали в самом языке лол, а заставляют жавамакаков либо иметь весь этот бойлерплейт в коде (и насрать что это IDE сгенерит - это просто синтаксический мусор) или юзать сторонние вещи которые сгенерят не в код.
В других языках фичи и сахар привествуются. Даже вон в питоне питоноебы орали на тайпхинтинг мол портит язык, но полезность победила дебилов. туда же и async/await - ну да есть еще додики, но в основном это стало повсеместным.
А в жаве за каждую фичу нужно жертвы богам приносить или я не знаю что сделать чтобы это было. Делают в итоге что то- через десяток лет лол. ДАЖЕ если это просто сахар и не портит совместимость.
>>2836477 Ну пиши явный какая проблема. пишут же жава лошары гетХ/сетХ и их не парит. А те кто не пишут, те генерят. так и тут - нет разницы
И вообще это опционально. В асп.нет кор он не нужен в принципе. Также можно детачнуть контекст на старте операции и дальше уже конфавайтить тоже не нужно. Разные способы есть.
Но это мелочи жизни по сравнению с ВООБЩЕ НЕТ АСИНК/АВАЙТ, пишем как прадеды
>>2836478 >мало ли. может проект на дотнет 5, а у чела просто на машине такого нет, а стоит 7 Хуя себе оправдание шарпошлюхи. А что оно оправдывает-то?
>>2836478 >совсем тупой???? это слышится в ПЕРВУЮ ОЧЕРЕДЬ от жавистов (и от гошников, но их понять можно) и жависты такие "нахер нам это не нужно. у нас ентерпрайз, посмотри сколько написано всякого на жаве". >только жавист будет терпеть монструозность синтаксиса. Взять те же гет сеты - их так и не сделали в самом языке лол, а заставляют жавамакаков либо иметь весь этот бойлерплейт в коде (и насрать что это IDE сгенерит - это просто синтаксический мусор) или юзать сторонние вещи которые сгенерят не в код.
>В других языках фичи и сахар привествуются. Даже вон в питоне питоноебы орали на тайпхинтинг мол портит язык, но полезность победила дебилов. туда же и async/await - ну да есть еще додики, но в основном это стало повсеместным.
>А в жаве за каждую фичу нужно жертвы богам приносить или я не знаю что сделать чтобы это было. Делают в итоге что то- через десяток лет лол. ДАЖЕ если это просто сахар и не портит совместимость. Самый эпичный "нет, ти!!!!" за всю историю человечества. Ладно, повоевал с джавистами, пора и писать туСтринг вручную. Генератор его же ненужен. Стоп, это же джависты так говорят только. Падажжи ёбана...
>>2836478 >Ну пиши явный какая проблема. пишут же жава лошары гетХ/сетХ и их не парит. А те кто не пишут, те генерят. >так и тут - нет разницы Не-а. @Getter в джаве такой же явный, как и метод getХуй(). Потому что когда открываешь класс, сразу видишь, что он делает. А твоя параша настраивается где-то в ебенях и делает неявно хуйню на весь проект, и пока не прочитаешь все настройки говнофоди, не поймёшь, что и как работает. И еще их держать в голове надо.
>>2836489 1 "нет ти" это про тебя. посмотри каждый второй свой пост жавалошок 2 про тустринг тебе выше по треду много раз поясняли ты долбоеб какой то реально. Пытаешься косить под тролля, но косишь под долбоеба. и не перестаешь
>>2836491 >Не-а. @Getter в джаве такой же явный, как и метод getХуй() {get; } такой же явный как и метод гетМозгУжавистаЕсли найдешь() >и делает неявно хуйню на весь проект ну точно долбоебище эпичный. то есть тебе в говножаве можно указать аннотацию где ты хочешь чтобы оно работало, и это типа можно только в жаве - весь остальной мир типа работает неявно
нет никакой принципиальной разницы между ломбоком и фоди если не нужна поддержка IDE. Но как пояснить это жавалошаре?
>>2836497 >1 "нет ти" это про тебя. посмотри каждый второй свой пост жавалошок И снова "нет, ти!!!", лол.
>{get; } такой же явный как и метод гетМозгУжавистаЕсли найдешь() Ебло, кто-то тебя за {kukarek;} спрашивал? Мы про конфигуравейт говорили.
>>и делает неявно хуйню на весь проект >ну точно долбоебище эпичный. >то есть тебе в говножаве можно указать аннотацию где ты хочешь чтобы оно работало, и это типа можно только в жаве - весь остальной мир типа работает неявно Что ты блядь высрал?
>нет никакой принципиальной разницы между ломбоком и фоди если не нужна поддержка IDE. Но как пояснить это жавалошаре? Ну и это тоже. Ещё один "нинужно", но не забывай, так говорят только джависты.
Это ж пиздец, он правда перешёл на шизофазию. Интересно, это петушарп и его комьюнити так по мозгам долбит или наоборот, в петушарп идут только с iq < 80?
>>2836499 >И снова "нет, ти!!!", лол. это уже клиника у жаволошка. проехали
>Ебло, кто-то тебя за {kukarek;} спрашивал? Мы про конфигуравейт говорили. цитирую жавалошка >Не-а. @Getter в джаве такой же явный, как и метод getХуй() >Мы про конфигуравейт говорили. еще одна клиника. склероз. тебе бы к врачу что ли
по поводу же ConfigureAwait - он настраивается (как и все в фоди) и указываешь в каких проектах тебе это нужно. Ничего неявно не начинает работать автоматом абы где - даже это модуль работает только там, где ЯВНО укажешь.
>Ещё один "нинужно", поясняю жаваЛОХУ если у тебя генерятся геттеры и сеттеры, то IDE должна как то узнать об сгенереном, чтобы ты мог юзать их в коде и IDE не ругалась "нет такого". В случае с гетсетами или тустрингами или конфигуравайтами ОНО СУЩЕСТВУЕТ изначально - то есть никакого неявного НОВОГО кода, про который студия должна ждать - ПРОСТО НЕ РОЖДАЕТСЯ, а потому не нужны никакие доп средства чтобы студии рассказать "там эта, у тебя свойство появилось"
я понятно пояснил долбоебу? впрочем, у него шиза и склероз.
>>2836507 >рррря, клиника!!!! А может по делу что-то скажешь? Алсо, снова "ниееет, ти", ведь я до этого недвусмысленно намекнул на твои психические заболевания постом про шизофазию, лол.
>>2837108 >ты с клиентом попутал? Нет, нужен именно сервер (небольшой), не хочу ASP тянуть, хочу в функционалоном стиле свои обработчики запросов написать как например в сишном Served https://github.com/meltwater/served .
Почему в шарпе, когда IntelliSense предлагает мне имя опционального параметра аля "message:", после его выбора двоеточие не вставляется? Я получаю просто "message". В бейсике все работает.
Я уже заебался подставлять двоеточие вручную. Может я что-то делаю не так?
в приличном обществе за такое бьют ногами если нельзя использовать конструктор? я планирую вызывать этот метод только один раз, но паранойя говорит мне обратное.
>>2838096 Зависит от того куда ты интегрируешься. Для ui фреймворков это распространено но в условном асп бэке я бы не хотел такое видеть (либо спихнуть на di этот вызов)
Ну. Типа допустим, у тебя как-бы плагинная архитектура. Ядро - прходится по папочке ./plugs ищет dll'ки и достает из них IPlugin'ы. Ну вот как иначе ты будешь их инициализировать, чтобы было ПРОСТО.
Просто вот такие вот Init, BeforeInstall, Install, AfterInstall, OnTick, BeforeUninstall, Unistall, AfterUninstall и прочее - должны быть не в единственном экземпляре на весь проект, а частью некоего архитектурного решения, которое должно быть задокументировано и про которое должны все знать.
>>2837066 Могу своим поделиться. Умеет отдавать статику. В остальном - вот контекст, че хочешь то и делай с ним.
Суть примерно следующая:
new ServerBilder() .Listen(80) .UseStatic("./www") .UseServices(serviceProvider)// чтобы в стиле ASP провайдить сервисы в обработчкик .CreateDipatcher(assembly) .Use<POST>((ctx, "my/secret/api") => var dao = ctx.Request.Body.FromJSONAsync<MyDAO>(); Console.WriteLine(dao); return ctx.CreateResult.OK(new {status = "OK"}); ) .Build() .Run();
почему у вас в оппике 2 картинки посвещены жявке? у вас комплекс неполноценных долбаебов? пытаетесь самим себе доказать что ваше говноязык лучше говноявы?
Продолжаю пилить программу для рисования с использованием Win2d, и столкнулся с одной проблемой, решение которой я надеюсь вы мне подскажите. В Win2d есть такое понятие как CanvasDevice, который собственно хранит контекст необходимый для работы с видеокартой. И все элементы, которые друг с другом взаимодействуют должны быть порождены от одного CanvasDevice, иначе выскочит исключение. Так вот, у меня есть холст (обычный контрол, объявляемый в XAML), и есть кастомные кисти, которым зачастую для работы необходимо инициализировать ресурсы, зависимые от CanvasDevice. Собственно вопрос, как это сделать? На данный момент у меня это реализовано следующем образом - при создании кисти она не загружает никаких ресурсов, загрузка происходит в момент установки кисти текущей кистью для рисования, для чего в обработчике изменения DependencyProperty у меня вызывается асинхронный метод Initialize в который передается контекст необходимый для инициализации. Беда в том, что зачастую загрузка нужных элементов асинхронна, как итог приходится делать сам метод асинхронным, а это может привести к тому, что пользователь попытается нарисовать до того, как загрузятся ресурсы. Соответственно будет краш. И в целом меня напрягает, что я не могу обеспечить необходимый порядок работы программы. Как быть?
>>2839023 Я почему спрашиваю. Я вот смотрю. И я как-бы понимаю, что оно делает. Потому что типа блин, я не первый день код чужой читаю. Но пиздец. Неужели вот так надо было писать? Чтобы что?
>>2838691 Во-первых, вероятно тебе нужно отключить у холста реакцию на мышь на время инициализации кистей. За это отвечает вроде как свойство IsHitTestVisible=false. В WPF оно есть у каждого контрола. В этом случае холст перестает реагировать на любые клики мыши, стилуса (про клавиши не помню, но вероятно тоже).
Если у тебя не WPF, а еще какая-то залупа, в которой нельзя отключить хит мыши, то можно поверх холста бахнуть слой практически прозрачного Border или Grid или чего угодно, который бы собой блокировал холст пока идут необходимые операции. Достаточно 1% прозрачности, чтобы заблокировать собой клик мыши, при этом юзер не заметит разинцы.
Во-вторых, тебя может сбить с толку, что асинхронная функция требует await, который требует async и так далее до бесконечности. На самом деле ты можешь из обычного метода запустить асинхронную функцию и она все так же будет выполняться асинхронно. Разница в том, что await заставляет не выполняться дальнейший код, пока не завершится работа вызываемого асинхронного метода.
Ты получишь вот такой ответ: >0 >Хуякс! >1 >2 >3 >4 >5 >6 >7 >8 >9
Как видишь, сообщение "Хуякс!" из метода Test было выведено не дожидаясь завершения метода TestEachAsync. Оно не на первом месте, но это просто вопрос микросекунд, либо пока не закончится одна итерация async-метода.
И тут ты спросишь: а нахуя это нужно? И тут мы приходим к третьему пункту. В-третьих, для асинхронных методов можно использовать токены. Это может быть токен отмены, либо токен завершения. Это некий элемент, который позволяет извне влиять на работу асинхронного метода, либо получать его состояние.
В этих случаях асинхронный метод запускается обычным способом НЕ в режиме авейта (как в примере выше) и забывается. А далее ты любыми способами (хоть в цикле) проверяешь тот самый токен на окончание асинхронной инициализации твоих кистей, либо активируешь отмену в токене для прекращения работы асинхронного метода.
Так же, в таких случаях устанавливают авейт по таймеру, чтобы завершить ожидание в любом случае, если в асинхронной функции что-то пошло не так. Так устроены например "именованные каналы" которые ожидают ответа сервера определенное количество времени, а потом прекращают работу в любом случае. Даже можно сделать уведомление о завершении асинхронного метода при помощи события.
Это позволяет избавиться от той самой проблемы каскада асинков и авейтов ради одного асинхронного метода. Ну или если асинхронный метод (как в случае с ожиданием ответа сервера) может длится достаточно долго, чуть ли не минуты.
Про токен завершения гугли TaskCompletionSource Про токен отмены гугли CancellationTokenSource
>>2839242 Если аргументы большие или там целое выражение на каждый аргумент — то можно. Только вот конечно arg1 тоже переносить надо, и скобку последнюю, а то так правда уёбищно.
>>2839266 Это код который разбивает буффер на "фреймы". Собственно. Потому я и задаюсь вопросом. А надо ли было его вот настолько обскурным делать? Типа все что оно должно сделать - проверить - встречается ли в буффере какая-то последовательность символов, либо что буффер заполнен на нужное количество байт.
Объясните тупому простую вещь. Конфигурация многие ко многим в EF Core. На примере Student и Course, допустим. Я пишу типа: modelBuilder.Entity<Student>().HasMany<Course>(s=> s.Courses).WithMany<Course>(c=>c.Students).UsingEntity<StudentCourse>()
Так?
Вопрос 1. Где это писать? В StudentConfiguration? Вопрос 2. В CourseConfiguration надо то же самое повторять на эту тему? Если да, то как избежать повтора? Если нет, то как выбрать между StudentConfiguration и CourseConfiguration для описания связей? Вопрос 3. Можно ли это как-то написать внутри StudentCourseConfiguration?
>>2840195 То есть немного не так, да, modelBuilder он внутри глобального OnModelCreating, но его не хочется захламлять, сущностей много, связей тоже. Надо вынести в конфигурацию, в какую?
>>2836462 Я вижу ты шаришь. Тред про шарп, но спрашу, раз тут гуру джавы сидит. Смотри. У меня есть проект на ant, java 5, в котором используется mina и какие-то jre отсутствуют, как я понял, судя по названию класса MainSplashScree, AcitvationWindow и т.д. эти jre какие-то связанные с визуалкой. Собсвтенно. Я сколько не пробовал - все горит красненьким. Ставил идею, ставил нетбинс, ниче само не качается, ругается и не работает. Че мне делать? Надо собрать и кое-какие изменения внести. А нихуя не собирается.
>>2840195 А вообще обычно я не пишу эти связи т.к. они автоматически по навигационным пропам строятся и только миграцию проверяю. Нужно руками задавать только если какой то криворукий мудила всё сломал до тебя и еф не может сам понять ту хуйню которую ебанул этот призрачный гений
>>2840403 Jre это джава, еблан. Не может отсутствовать "несколько jre".
Но вообще, понятия не имею, в чем у тебя дело, ant это легаси хуйня и не потому что какие-то зумеры решили отменить его и заставить всех перейти на своё говнецо, а потому что сами разработчики анта решили сделать вместо него мавен. Может быть (не шарю за ант) ант вообще не умеет автоматически качать зависимости.
Почему RestSharp всегда возвращает ответ OK хотя никакой сервер не работает и браузер по тому же адресу честно возвращает ошибку?
var options = new RestClientOptions("localhost:8999") { Authenticator = new HttpBasicAuthenticator("username", "password") }; var client = new RestClient(options); var request = new RestRequest("testapi"); var response = await client.GetAsync(request, cancellationToken);
>>2840663 В папке проекта - подпапка packages, там лежит куча jar'ов сторонних компонентов: для составления excel'евских отчетов, для работы с БД, много чего еще, но каких-то jre с визульной частью - нет. А в самом проекте - они прописаны. И проект - не собирается. Вот совсем.
>>2840609 Публичным ты делаешь свойство а не переменную. Зачем? На твоем скрине - буквально показано зачем. Чтобы можно было логику какую-то добавить как в get так и в set. Вот допустим ты решил возраст хранить в int потому что удобно часто именно в int хранить. Но ты не хочешь, чтобы снаружи какой-нибудь еблан сделал отрицательный возраст. Если ты наружу поле вытащишь, кто угодно в коде сможет это делать, и придется по всему коду делать проверки, которые бы могли быть внутри класса.
Ну. Типа давай на примере с возрастом.
public class Age {
private int _totalYears = 0; public Age(int totalYears) => TotalYears = totalYears; public TotalYears { get => _totalYears; set {Validate(value); _totalYears = value} } pruvate Validate(int val) => Throw<ValidationException>.If(val<0);
>>2841666 1. проставь кодировку в файле (студия заебала, но после добавления эдиторконфига с ютф8 вроде успокоилась) 2. заверни чистую строку в хтмл и проставь кодировку в хедере
>>2840195 > Вопрос 1. Где это писать? В StudentConfiguration? В OnModelCreating. Плодить эти файлы с конфигурациями - долбоебизм, если у вас не 10+ человек в команде. > Вопрос 2. В CourseConfiguration надо то же самое повторять на эту тему? Не надо. > Вопрос 3. Можно ли это как-то написать внутри StudentCourseConfiguration? Можно. Но не нужно.
Вообще. Нахуя тебе эта промежуточная сущность? В 99% случаев оно нахуй не нужно. Если там какая-то логика нужна, типа - оплочено-неоплочено, когда оплочено и все такое, то тогда тебе нужна нормальная СУЩНОСТЬ, а не этот выпердышь.
Вообще. Сделай нормально. Если у тебя этот StudentCourse - таки сущность, а не просто отражение таблички, то назови нормально.
Когда требуется провести какие-то комплексные операции с файлами, типа архивации или разархивации, то нужно ли это делать через временную папку?
Допустим мне нужно достать файлы из архива. Для этого я должен распаковать архив и дальше прочесть файлы. Должен ли я распаковывать во временную директорию, которая может вообще находиться на другом диске?
Архиватор так и делает для некоторых операций. Но разве это не сказывается на скорости работы? Или угроза задеть юзером данные важнее скорости?
>>2841687 Зачем ты их вообще прописываешь? Навигационные поля сделай и еф всё сам свяжет. Не понимаю этой дрочи на прописывание всего ручками что и так очевидно для еф. Тем более что ты всё равно увидишь в миграции если что то не так пошло.
А связи у тебя 2 шт один ко многим и логично что если подход как выше писал то обе должны быть через StudentCourse заданы
>>2841712 - Не видел консольных архиваторов которые бы писали куда то а потом перемещали - Видел что так делает 7зип гуёвый но почему хз, может что бы конфликты отдавать на откуп проводнику
>>2841756 >>2841758 А как открыть компонент архива не распаковывая его? Ну допустим у меня там xml-документ. Для его чтения я должен использовать XDocument или XmlReader, но они требуют путь к файлу.
Через Stream? Да, наврено. Вижу и там и там есть такой вариант.
>>2841540 что значит докладывай? А кто тут ротешник раскрывал >Всё затягивается автоматически. Если интернет хороший то вообще такой вопрос как "пачему краснинькае" не появляется, все сразу нормально.
>>2841691 Завидую тем людям, от которых не требуют использовать EF ой, да это же я )
Можно ли сделать расширение для статического класса?
И вообще есть такая проблема. Допустим есть несколько классов, у каждого из которых должны быть методы: Open(string filePath); Save(string filePath); Import(string filePath); Export(string filePath);
Куда пихать эти методы? - В тело самих классов? У меня нет опыта с реальными проектами, но выглядит мусорно. Я же не буду пердеж на каждый случай жизни пихать в класс? Неизвестно какой зоопарк образуется с экспортами, например.
- В команду типа ICommand? Неудобно. Хотя уже существуют по команде для каждого из четырех методов и мне достаточно для условного OpenMyClassCommand добавить метод Open. Это самый легкий путь.
- Сделать отдельный файл-менеджер для каждого класса? Вероятно этот вариант подходит. Вот я решил сделать класс, с расширениями, но проблема в том, что такие методы как Open и Import не могут быть расширениями т.к. должны привязаться к экземпляру класса, которого на момент их вызова еще нет — они его должны создать сами.
Вообще интересует практика организации подобного. Насколько зашкварно пихать логику в ICommand? Или они должны существовать всего лишь мостом между View и внутренней логикой? Я считаю что второе.
Я манал, как в WPF биндинги работают блджад? К чему я биндюсь блять? К классу? К объекту? А как xaml узнает к какому именно? Или я из кода объект к вьюшной залупе биндить должен? Но это же тогда надо блокам в xaml имена давать, а на стаковерфлоу пишут что так делать хуево и не по MVVMовски.
>>2842643 К объекту Который в DataContext в текущем месте если ты не пытаешься указать другое место (например ElementName= укажет его как начало для бинда (а не его DataContext) Нет Имена и MVVM перпендикулярны. Вид внутри себя может делать что угодно и как угодно.
>>2842643 Ты биндишься к свойству. Это свойство при обновлении вызывает событие, на которое триггерится привязка.
По твоему тексту ничего не понял. Ты бы описал конкретный пример к чему ты хочешь биндиться: к свойству вьюмодели или к свойству соседнего\родительского контрола в xaml.
Обычно не одобряют биндиг по имени к мейн-контролу, чье имя могут изменить извне. На остальные контролы пофиг.
Но меня пугает, что ты собрался биндиться из кода ко вью-контролу по имени. Это что-то странное.
>>2842643 >>2842662 >>2842674 Вы на инопланетном общаетесь? Как вы друг друга понимаете и понимаете ли вообще? К чему ответ "Нет"? Что за перпендикулярность имен и MVVM? Зачем биндиться из кода ко вью по имени?
ответы давал в том же порядке в каком вопросы с некоторым смещением, а значит ответ "нет" к вопросу "Или я из кода объект к вьюшной залупе биндить должен?"
xaml это вид. имена в xaml - все равно вид. это никак не вылазит за буковку V в MVVM, а значит никак эту самую MVVM не нарушает. Можно разве сказать что "не нужно биндится прямо на элемент, а пусть будет связующим звеном вьюмодель", но это только когда есть за что зацепиться во вьюмодели. Технически же вид может творить внутри себя любую дичь, хоть писать в стиле винформса без биндингов и хамла (или быть консольным выводом) и это никак не нарушит MVVM
>>2841747 >Навигационные поля сделай и еф всё сам свяжет Хммм, окей. А если у меня ключ сложный? Ну типа у студента это (id, class)? Там же правильно назвать надо, как я понял.
>>2842679 >Но меня пугает, что ты собрался биндиться из кода ко вью-контролу по имени. Не пугайся, я просто изучаю WPF параллельно делая на нем пет-прожект, а в туторах про биндинг есть в том числе примеры биндинга из кода, вот и пытаюсь выяснить как "принято" делать.
>>2842737 Моя позиция что если тебе нужен составной ключ то ты что то делаешь не так. Если тебе нужна уникальность через набор полей то для этого делается индекс с ограничением на уникальность
>>2842740 биндинги из кода нужны редко когда пишешь что то этакое динамическое Например динамическую таблицу где нужно больше чем тупо автосгенерить имена колонок.
>>2842740 Биндятся в основном из View к свойствам ViewModel, которая расположена в DataContext. Большая часть данных должна браться оттуда, поэтому имена контролов в основном не нужны в MVVM. Не то, чтобы это запрещено, просто в этом нет смысла.
За редким исключением, когда речь идет о визуальной компоновке контролов, когда свойство одного контрола зависит от свойства другого. Да и то, я сейчас замечаю, что таких случаев все меньше и меньше, потому что это решается либо ValueConverters, либо нормальной разметкой. Случаи типа "заблокировать кнопку, если в комбобоксе выбран такой-то итем" решаются собсно информацией из вьюмодели о выбранном итеме и конвертером. Нет смысла обращаться к состоянию самого комбобокса.
А вот в стилях очень часто дают имена контролам, чтобы различные триггеры могли обращаться к ним.
Так что, основная твоя работа заключается в том, чтобы передать вьюмодель в датаконтекст. А уже вью сама ищет то, что нужно по именам свойств вьюмодели. Делает она это вслепую в рантайме. Т.е. когда ты пишешь <TextBlock Text="{Binding Name}" /> Вьюшка лезет в объект датаконтекста и ищет у него свойство Name. Это свойство должно быть либо DependencyProperty либо INotifyPropertyChanged, иначе выскочит исключение или (что еще хуже) утечка памяти. Потому что такие свойства уведомляют о своем изменении — это важно при биндинге.
Так как все это вслепую, то для себя, на этапе дизайна, ты можешь указать тип датаконтекста, и это нужно чисто для подсказок IntelliSence: d:DataContext="{d:DesignInstance Type=local:MyViewModel}" Чтобы эту залупу каждый раз не запоминать, есть сниппет "ddc", что сокращенно от d:DataContext. Будет вставлена строка выше (ток свою вьюмодель вставляй).
Если биндиться из кода ко вью, то нужно ОЧЕНЬ хорошо понимать для чего это нужно. Потому что это не нужно практически никогда.
>>2842780 Кури как работают настройки в ms di Первый раз когда туда залез было очень даже интересно особенно как создаётся host и app конфигурации (спойлер вторая создаётся на основе того что удалось вытащить из первой). Так же обрати внимание на провайдеры
>>2842823 >есть сниппет "ddc" Я себе сделал еще "gcd" и "grd" - Grid.ColumnDefinitions и Grid.RowDefinitions, Потому что писать это вручную каждый раз - это надо быть ебанутым мазохистом. Вроде есть дефолтный сниппет, но он не такой гибкий.
Вообще для MVVM советую максимально обмазаться сниппетами, если хотите сохранить самообладание и любовь к жизни. У меня есть: nprp - создает расширенное свойство INotifyPropertyChanged dprp - блок DependencyProperty prp - просто расширенной свойство onprp - блок OnPropertyChanged dsp - блок Dispose
Анон, помоги разобраться с CRC. Есть две вроде бы одинаковые функции в приложении на С#, и на Си в коде STM32. При расчете CRC для массивов размером 1024 байт дают одинаковые результаты. Если размер отличается, то разные. Как мне получать одинаковые результаты во всех функциях?
>>2843174 Ты рофлишь? Ты же знаешь что такое CRC? Короче. Не тупи. Прочитай про то что такое CRC и как оно вычиляется. Таблица кстати тебе нахуй не уперлась. Вычислять можно без нее. Она нужна, когда тебе хочется БЫСТРО, но тогда ты ручками значения таблицы прописываешь.
>>2843474 Ну а что делать, если вью не всегда адекватно производит анбиндинг? Особенно это заметно с итемами каких нибудь списков. У тебя объект продолжает биндиться, даже если он удален из списка.
>>2843637 Дык это не про Dispose вьюмоделей. Dispose вьюмоделей это про мессенджер и подписки на модель. Проблема вызова Dispose приводит к weak мессенджеру с его "вьюмодели уже не нужно, а она сообщения принимает и реагирует", а с подписками к модели еще хуже
А биндинг обычно не проблема. У меня никогда это не было проблемой.
>>2843647 >Дык это не про Dispose вьюмоделей. >Dispose вьюмоделей это про мессенджер и подписки на модель. Нихуя не понял. Диспоз это метод который очищает говно, мешающее экземпляру помереть. Не важно подписки или что-то еще.
>А биндинг обычно не проблема. У другого анона та же беда была. Может это из-за попыток забиндиться итемом ко родительскому датаконтексту.
Есть такая проблема, что итему списка недоступен дата контекст родительского контрола. Итему доступен дата контекст ItemSource. В этом случае приходится биндиться по имени к элементу выше по иерархии и брать из него тот самый дата контекст.
Может быть из-за этого. Но факт в том, что удаляя итем из списка, я все равно получал события изменения свойств от ID удаленного итема. Из-за этого была утечка памяти.
Я решил это тем, что в событии Unloaded итема, обнулял все забинденные свойства. Просто я оформил это в метод Dispose.
Еще был случай, когда DataContext чудил, особенно когда объект там постоянно менялся, тоже приходилось выдумывать костыли, но подробностей сейчас не вспомню. Надо уже какой-то блокнотик себе завести, я на выяснение проблем не один день тратил.
>>2843676 >Диспоз это метод который очищает говно верно. но его кто-то должен вызывать. а с этим проблемы. Паттерн вызова очистки прост и понятен. Но вот кто все это вызывать будет? должна ли вьюмодель очищать все Disposable внутри себя? а вдруг не все можно? в прошлых тредах обсуждали и выход из этого лайфтаймы, даже если сбоку (то есть не интеграция в фреймворк, а тупо сам решил использовать - берешь либу и вперед)
Если вьюмодель на что то подписывается или что то запускает, то она обязана получить ( через конструктор) токен своей жизни и использовать его для подписок и запусков. А также для запусков того, что нельзя отменять. А код снаружи просто обязан озаботиться выдачей токена лайфтайма, а значит будет вынужден этот вопрос решить иначе просто не скомпилится. При таком подходе все не живет дольше нужного и все автоматически и правильно диспозится. Причем без лишнего.
>>2843778 >Но вот кто все это вызывать будет? Ну анон мне ИТТ говорил, что диспоз вызывается даже если ты проебал его вызов, просто это делается не сразу и по велению GC. Каковы критерии оценки, что файл нужно удалить — в данном случае непонятно.
Но я все равно на это не полагаюсь, и в моем случае диспоз вызывался при событии Unloaded(), который тоже не всегда может быть вызван, но не в моем случае.
>выход из этого лайфтаймы, До лайфтаймов я еще не дорос (я так каждый раз пишу на протяжении 10 тредов, кек).
>>2843807 >До лайфтаймов я еще не дорос делаешь App начальный лайфтайм, его выдаешь главной вьюмодели, а далее каскадно раздаешь либо свой лайфтайм либо рождаешь дочерние
Все дочерние вьюмодели по дефолту без лайфтайма, то есть привычные тебе. Но если вьюмодель на что то подписывается или запускает, то ей нужен лайфтайм - добавляешь его в конструктор и у тебя перестает компилироваться. Идешь уровнем выше и у тебя 2 варианта
1 в текущем месте никто не управляет временем жизни дочерней модели. Значит просто добавляешь лайфтайм в конструктор текущей и идешь выше 2 в текущем месте управляется время жизни? что значит управляется? ну значит в обычном виде ты бы тут вызвал Dispose, а значит тут рождается дочерний лайфтайм, который ты и должен будешь дропнуть вместо диспоз. Разница в том что в случае диспоза ты даже не в курсе что он нужен, а тут ты сразу видишь что нужно передать лайфтайм в конструктор и потому сразу на месте решаешь откуда его взять. И если ты не имбецил, то сразу подумаешь и про рождение и про терминацию. потом добавляешь родительский лайфтайм в конструктор и идешь выше пока не дойдешь "а тут лайфтайм уже есть идти выше некуда"
Технически можно вообще всем раздавать лайфтаймы, но есть же и простые вьюмодели которые чисто для отображения.
лайфтайм он же и токен отмены. Представь ты запустил авайтное чтото из вьюмодели,а вьюмодели пришел Dispose тебе нужно добавлять этот момент в Dispose (а Dispose может и вообще не быть по ошибке)
А так терминация лайфтайма каскадно отменяет все подписки и все канселлит. Если у тебя все подписки принимают лайфтайм, то физически нельзя забыть диспознуть ибо тебя комплиятор заставляет решить этот вопрос (ну если ты не дурачок конечно)
Создал пустое чистое приложение UWP в Visual Studio 2022. Добавил кнопку хелло ворд. Запустил и в релизе и в дебаге, всё работает. Без вижуал студио сам экзешник не запускается, ни в дебаге, ни в релизе, в Просмотре событий пишет: >Процесс был завершен из-за необработанного исключения. >Имя сбойного приложения: TestApp1.exe, версия: 1.0.0.0, метка времени: 0x650600fc >Имя сбойного модуля: KERNELBASE.dll, версия: 10.0.22621.2070, метка времени: 0xdf72c80b
>>2844764 >Вообще захотел сделать модное молодежное приложение под виндовс 11. Кстати, виндоу формс визуально адаптируется к новому стилю интерфейса одиннадцатой оси, в силу свой специфики. А вот в впф стили контролов независимые, и тут плюс превратился в минус, ибо надо обновлять все дефолтные стили, а майкрософт не делала этого еще с восьмерки.
С впф ты не получишь молодежный стиль, придется либо самому поебстись, либо скачать где-то еще. Но у тебя есть возможность сделать свой собственный стиль, в отличии от вин формсов.
>>2844771 Я прост попробовал UWP, мне оче понравилась дефолтная копка и такая подстава. Ща пробую WPF, всё работает, но кнопка не оч. Я имел ввиду, что не хочу древний дизай виндовс хп, который в виндовс формс. Хм, не вижу winui, её надо как-то отдельно докачивать выбирать. Я понимаю, что можно сделать что угодно из чего угодно, но я хочу писать свои стили, я хочу кидать какие-нибудь элементы и чтобы всё готово в современном стиле было с ползунками настроек туда сюда.
>>2844778 Так-то из коробки винформсы будут выдавать тебе стиль той версии операционной системы, на которой запущены. Для WPF полюбому можно где-то скачать стиль, я не чекал, я сам себе дизайнер.
>>2844782 Еще есть авалония, но анон ИТТ жаловался на хреновый рендер шрифтов.
>>2844795 >Блять, хули winui по дефолту нет? Чтобы всякая петшня не равлась от того, что студия весит 15Гб. Все разбито на модули, даже библиотеки могут быть разбиты на десяток частей. А ты сам подгружаешь то, что тебе нужно.
Воо, winui тор. У меня винда в темной теме и приложение по дефолту в темной теме и кнопка пиздатая темная. Я сходил в светлую - приложение стало светлым. То что я хотел в общем-то. Приложение подстраивается под дизайн винды. Просто по дефолту.
Блять, но оно как и UWP не работает, если запускать экзешник. А еще почему-то пока только WPF рабочий вариант... А еще почему-то не грузит дизайн, пишет что-то про докачку из нугета...
Ответьте серьезно, те кто тут постоянно про десктоп что-то спрашивает. Вы студенты или самоделкины? Я просто реально не понимаю. Работаю на шарпе с 2014 года. Ни одного НЕ ЛЕГАСИ проекта под десктоп не видел ИРЛ. А то что легаси - это WinForms/WPF. Типа если студенты, вот зачем вам сразу в легаси метить? Если самоделкины, почему не делать на чем-то нормальном типа Qt?
>WinUI 3.0 no XAML designer view Понял, нахуй. Технологии будущего еще не скоро. Короче пойду ка я в виндовс формс, там всё работает из коробки по дефолту и как надо. Ясно всё...
>>2844803 >А еще почему-то не грузит дизайн, пишет что-то про докачку из нугет Зависимостей много. Докачай. В WPF это можно сделать так: В обозревателе решений в проекте -> Зависимости -> Пакеты -> Обновить
>>2844810 Мир начал вращаться вокруг веба из-за простоты (хоть и с другими дебаффами, но это уже конкретные случаи) и рано или поздно ты встанешь в жс своей ногой. Плохо? Хорошо? Да хуй его знает, обычный инструмент который решает задачи
>>2844813 >вокруг веба из-за простоты А помните был такой флеш? Люди там на изичах писали игры, видосики, программки. Очень мало весило. Очень высокое качество. И где теперь флеш?
>>2844813 >Мир начал вращаться вокруг веба из-за простоты Ты чет начал пердеть про студентоту и самоделкиных, а сам нарушил базовый принцип вменяемости: задача -> инструмент под задачу.
Мне поебать на весь мир, если моя задача написать плагин для приложения с максимально схожим UI. Я не хочу ебстись с браузерной залупой, когда меня куча операций с файлами или требующие определенные права, которыми браузер не обладает даже во сне.
Веб-пораша не универсальна. Я не вкатун, я самодельщик — мне нужно добиться своих целей минимально возможными путями, потому что помимо этого всего у меня есть еще задачи.
>>2844805 >WinUI 3.0 no XAML designer view Я думал что это я ебусь в глаза. Что, реально? Тогда сидим на ВПФ и не дергаемся.
как правильно глубоко скопировать структуру вида List<int[]>? у меня сейчас: List<int[]> copy = original.Select(x => x.ToArray()).ToList(); подводные камни?
>>2844838 так и сделал изначально, но потом добавились еще две таких структуры(других), которые тоже надо копировать и длина у них будет не одинаковой, это простыня выйдет на пол-экрана >>2844840 ожидаю пачку новых массивов в новом листе которым от изменений объекта-донора ничего не будет...
>>2844841 >ожидаю Лист - это объект со ссылками на инты. Инты же, пусть и массивы, простые объекты, а не ссылки. Логично, что в новом листе тебе просто нужна ссылка не на тот же инт, а на его копию и всё. Копия инта делается просто. Инт - неизменяемая вещь. Меняя его ты создаешь новый объект, а не меняешь старый. Надеюсь не ошибся и не несу хуйню.
List<int[]> copy = new List<int[]>(); for (int i = 0; i < original.Count; i++) { int[] arr = original; copy.Add(arr); }
>>2844841 >длина И не понял какая разница какая там длина. В конце концов ты можешь использовать листы с разными типами данных просто с объектами, а не с конкретным одним определенной длины.
>>2844804 Если ты не видел, это не значит, что их нет. Мы вот пилим различные приложения на xaml фреймворках для windows store. Но занятие довольно бесперспективное, и я хочу перекатиться в asp net. >>2844813 > Мир начал вращаться вокруг веба из-за простоты (хоть и с другими дебаффами, но это уже конкретные случаи) и рано или поздно ты встанешь в жс своей ногой. Жиза к слову. По веб фреймворкам в миллион раз больше документации, ответов на любые вопросы и тд. Сделать на каком-нибудь реакте красивый интерфейс во много раз проще, чем на xaml, с его кучей костылей и нюансов. >>2844804 > Если самоделкины, почему не делать на чем-то нормальном типа Qt? Ну толсто же. Гуи на шарпе писать куда приятнее, чем на qt срани, не говоря уже о том, что xaml выбирают те, кто знает шарп, зачем им ради гуи учить плюсы?
>>2844857 1. Uwp в разы быстрее wpf, в нем отсутствуют микролаги, которые в wpf являются неотъемлемой частью любой анимации. 2. Есть поддержка directx 11 и direct2d, можно спокойно хостить в окнах результат рендеринга. Wpf же застрял на directx 9, и чтобы работать с видеокартой напрямую придется использовать windowsformhost. А там нас ждет airspace problem. 3. Есть дополнительный визуальный слой, на котором можно рендерить графику в отдельном, не UI потоке, что дает дополнительный буст к производительности. 4. Uwp приложения из коробки выглядят нативно. В wpf тоже есть либы с контролами в стиле win 11, но это сторонние либы, с кучей багов. 5. Более совершенный xaml, есть x:bind компилированные биндинги лютая годнота, конвертация bool в visibility из коробки. хотя нет триггеров, что весьма печально
Минусов конечно тоже дохуя, кто спорит. авалония наше всё, хотя нативных стилей нет
>>2844859 >Более совершенный xaml не знаю в чем он совершенный. UWP xaml это продолжение Silverlight xaml (который по своей природе был "кастрированный WPF") Да и ты следующим же предложением подтверждаешь его кастрированность.
UWP это доп ограничения. Прибито к MS Store (а без него это бубен)
Да он настолько лучше... что скорее мертв, чем еще жив.
Но мне норм. Пока мс занимается херней, я пишу на WPF и норм. Анимации мне не нужны, в остальном палки в колеса не ставит как другие. Пересел бы на авалонию, но там еще менее нативно выглядит и шрифты шрифты жеж
>>2845427 Выше чел же говорил, что джава все сама... Ну ок. Как мне проект 2006 года на анте перетащить на этот твой мавен?
Типа во просто в шарпе, допустим, я открываю древний проект, мне студия: О, это старый проект, давай я попробую его обновить до актуалочки. И в 70% случаев дальше ничего и делать не нужно. А тут - я чет начал пытаться разбираться, и нихуя не понял. То каких-то либ нет, то какие-то методы-классы-модули отсутствуют в современной джаве. Половина кода - красная. Нихрена не работает. Че делать - я не понимаю.
Алсо, если ты не можешь прямо щас это собрать, значит проблема в проекте, а не в самом по себе факте легаси. Нормальные проекты на анте до сих пор собираются и будут собираться до конца времён.
>>2845560 Ну должен быть. Я же про то что это ант вообще знаю потому что идеей открыл проект, она сказала, о, это ант, давай скачаем все для запуска. Я сказал - качай. Хотя коллеги говорили, что вроде все это дело писали в нетбинсе. Но я и нетбинсом пробовал открыть. Он ниче качать не предлагал, но тоже не собирал и не запускал.
>>2845576 Идея анально вгрызается в работу систем сборок и делает так, чтобы без нее собрать было нельзя больше. Возможно это анальное вгрызание работает и в обратную сторону. Установи ант ручками и попробуй из консоли собрать.
Какой надежный способ проверить что файл есть на диске? Столкнулся с тем что File.Exists пиздит что его нет, путь передаю абсолютный, тупо его коприю из дебаггера в тотал коммандер (на случай опечатки) и он существует.
Каким образом лучше всего защитить биндинги от переполнения стека? Допустим у меня есть свойство типа byte, а пользователь вводит число 300.
В голове возникло два способа: 1. Проверять на уровне свойства. Сделать свойство типа int, а дальше проверять в сеттере. Если value выходит за перделы диапазона от 0 до 255, то не присваивать значение. 2. Через конвертер значений.
Еще в других программах заметил, что помимо "красной рамки" текстбокса выскакивает месседжбокс с объяснением допустимого диапазона или формата ввода данных. Так вот, если это делать первым способом, то чет как-то опасненько получается. Особенно если это будет какой нибудь список на сотню итемов, условно говря, то я потенциально получу сотню месседжбоксов.
Склоняюсь ко второму способу, но может есть более элегантный, о котором я не знаю?
Вот тебе банальная ситуация. Допустим я меняю канал RGB-цвета, который в диапазоне от 0 до 255. Так или иначе мне это придется сделать огарничение. Вопрос в том, где это лучше сделать.
забыл в демке показать что будет если будет запущена какая то операция, но в общем то lifetime == CancellationToken, то есть первый кастится во второе и потому его можно использовать напрямую.
Как проверить формат введенных данных по паттерну?
К примеру я хочу проверить цвет aRGB\RGB в формате hex. И в зависимости от условий он может быть разным.
Вот четыре варианта: - без альфаканала и без решетки: FFFFFF (пример пикрил1: фотошоп) - без альфаканала и с решеткой: #FFFFFF (пример пикрил2: корел дро) - с альфаканалом и решеткой: #FFFFFFFF (пример пикрил1: вижуал студия) - с альфаканалом и без решетки: FFFFFFFF (примера нет, но логика понятна)
FF это любое hex значение от 00 до FF В целом, из критериев валидности интересует наличие или отсутствие решетки в начале, и совпадение по количеству символов. Я могу это проверить сам if-ами и проверкой длины, но может быть есть варианты проверки реджексом или string.format, или еще чем-то?
>>2847661 >В xaml не отображается xam-докуменатция к методам. Если что, я ValueConverter делаю. И паттерн првоерки хочу пихать через ConverterParameter.
Ребяты правильно ли я понимаю. Вот я сделал приложение на asp net core mvc И вот я хочу сменить дизайн сайта. Мне ведь нужно будет в исходникака менять код представлений. А вот что бы сделать сайт с возможностью сменой дизайна это мне не надо использовать представления, а например html хранить в бд, делать запрос в бд, генерить страницу и потом в контролере ее возвращать?
>>2847779 > html хранить в бд это слишком пиздец чтобы такое делать, я не фронтендер но лично бы я просто получил какое то значение bool из модельки во view и потом на стороне странички через if или switch отразил нужный мне дизайн но я не знаю этот способ наверно тоже пиздец но хранить html в бд не лучше
>>2847861 Да бля ну я же не могу знать какой дизайн у меня будет. Вот на сей момент я имею генератор сайтов на 1 дизайне. Вторую версию планирую сделать что бы можно было на лету добавлять новые дизайны, и вот думаю как это сделать. Весь смысл задачи в том что бы не компилировать проект каждый раз когда нужно добавить новый дизайн а выставлять его в админке. Например добавляю сайт site.com, заливаю для него дизайн и выбираю и он сразу подгружается. Сейчас все добавленные сайты на одном дизайне работают.
>>2847866 В WPF я вынес все ресурсы в файл. Правда максимум что я могу — это поменять в рантайме стиль контролов или цветовую схему. Но вот сама разметка с расположением контролов всегда будет одной.
>>2847649 там еще есть тонкий момент в подписке (торопился, дышали в спину)
vm.Closed.Subscribe(_lifetime, OnTabClose);
Так то vm умрет и плевать на кого она ссылается, но с другой стороны она может навешать Action на лайфтайм (или добавил просто IDisposable) и все оно на нем повиснет до терминации (а у рутовой вюмодели это никогда и не будет)
с терминацией lifetimeDef при закрытии таба умрет и эта подписка
Такая же проблема (можно навесить Action, а это жесткая связь и мемори лик) есть и с CancellationToken и на этой бомбе подрывались (статья на хабре была) - решается также доп слоем с CancellationTokenSource
Так что, анон, передавая свой лайфтайм не забывай про эту тонкость "а что если кто навесит Action"
хочу вкатиться в шарп и начать зарабатывать, сколько времени нужно чтоб с нуля до джуна добраться? куда лучше подаваться чтобы быстрее (веб, десктоп и т.д.). Есть школьный, предвузовский уровень с/с++
>>2847661 > В xaml не отображается xam-докуменатция к методам. Но может отображаться в окне свойств. [Bindable(true), Category("Новая Категория"), Description("Текст с описанием свойства", DisplayName("Отображаемое имя"))]
>>2848323 >сколько времени нужно чтоб с нуля до джуна добраться? >куда лучше подаваться чтобы быстрее >начать зарабатывать
Я смотрю ты шаращий. Сначала купи 5 курсов от скиллбокса, 2 курса от гибрейнса, 1 курс от яндекс практикума. Выбор на свое усмотрение. Там на все вышеуказанные тобой вопросы ответят, а как только тебя заебет эта миллиард раз обсасываемая тема — возвращайся.
>>2848342 кто вообще пользуется редактором свойств при написании хамла только психи. Предпросмотр понятно, но задавать параметры через редактор свойств неудобно.
Спасибо, на выходных гляну. Ты с призмой не работал? К ней не пытался всё это прикрутить с её регионами и новой системой диалоговых окон? Что думаешь за современные MVVM фреймворки?
А как посмотреть сурс метода? Я кликаю по "Перейти к определению", то часто переходит к странице с подписью "из метаданных", хотя речь идет о достаточно стандартных библиотеках.
>>2848368 В основном в случаях, когда обращаешься к неизвестному контролу и ты не знаешь какие свойства доступны и какие типы даннх они принимают. + менять цвет там легче, чем пытаться вписать hex-параметр.
В остальных случаях я тоже использую xaml напрямую.
Вот тут возникла ситуация. Я делаю условный колорпикер, ну и подглядываю как это сделано в других редакторах, в том числе в фотошопе. А там, если ты в текстбокс ввел данные в неверном формате, то выскакивает месседжбокс с пояснением в каком диапазоне число является валидным.
У меня мессджбокс запускается в ValueConverter, чтобы не мусорить модель и вьюмодель. Но тут возникла проблема, что мой мессджбокс не запускается в модальном режиме или хотя бы TopMost. А чтобы это сделать, я должен передать мессджбоксу окно-owner, но это же сделать невозможно. Где ж я его достану и как передам?
Как вообще передается этот owner, особенно в случаях, когда нет прямого контакта между вьюшками? Одна вьюшка может быть в одном проекте, а другая в другом.
На мой взгляд идиотская ситуация с этими вашими INotifyPropertyChanged. Рассмотрим пример на пикрилейтед, который дается во всех туториалах.
Что происходит, когда я в текстбоксе, привязанном к свойству DoubleValue ввожу значение? В сеттер поступает это значение, КОТОРОЕ вызывает метод OnPropertyChanged() -> что вызывает событие изменения свойства -> которое провоцирует биндинг(ну или что там?) обратиться к геттеру и получить значение.
Собсно нахуя, если я только что ввел значение и оно УЖЕ есть в текстбоксе? Градус абсурда повышается, если я добавлю конвертер и вот тогда возникает сущий пиздец, потому что я трачу ресурсы ДВАЖДЫ на конвертацию: 1. Сначала string парсится в double 2. Затем double конвертируется в стринг
Чтобы в итоге получить то, что было введено. Пиздец. И не надо мне говорить, что для double конвертер не нужен. Под капотом происходит та же хтонь. Речь в принципе про ситуацию в целом. Возьмите Color, где нужен конвертер и где конвертация между типами уже посложнее.
>>2848412 Не работал. Смотрел, но не работал. Слишком все замудрили там. Может для каких то особых приложений это нужно. Я смотрел на разные фреймворки начиная от MVVMFoundation, всякие там MVVMCross, лайты, калибурн, призм и другие. Везде свои плюсы и минусы, а хотелось бы только плюсы (перфекционизм же). При этом недостатки MVVM же еще -окна, мессенджер, weak, жирность вьюмоделей. Может кто-то пишет однооконки с анимациями, а мне нужно много окон, да еще и если в каждом свой мессаджбокс, не блокирующий все, так это хорошо. Ну еще и чтобы совместим был с авалонией
Потому я в свободное время писал для фана и успокоения мук перфекциониста разные самостоятельные фреймворки где собирал все отовсюду и пробовал разные альтернативные подходы И писал с этим прототипы для дела и для пробы "а если так" оценивая выгоду и плату за этот хак. Разные идеи типа - мультиокна, где у каждого окна свой стек и вообще нет проблемы как у >>2848475 (У меня специфические требования - мультиокна. Основное требование.) Как итог - вьюмодель существует в каком то контексте, которое связывает ее с окном (не прямо конечно, все таки я сторонник MVVM и у меня вьюмодели ничего ни про вид, ни про диалоги, они работают с абстракциями) - восстановление в нужное окно которое и так запущено, мы запускаем новую копию приложения, мьютексы то понятно, но нам нужно прыгнуть в нужное немодальное базовое окно - А пусть не каждая вьюмодель держит свой стейт, а будет централизованный стейт (но все же не модель). У нас все равно контекст, можем себе позволить зашарить такое в графе вьюмоделей без последствий. А то не пойми какая вьюмодель работает с моделью, потом шлет сообщения не пойми куда. Что если у вьюмоделей будет общая структура, на которую они и будут подписаны и там и будет стейт. (самая спорная вещь) - а что если все методы дергающие модель туда переедут (решение проблемы год обжект) и пусть вьюмодели и занимаются только своим прямом делом - держанием стейта для вида. - проблема Dispose, проблема weak и вот там вошли лайфтаймы. ...
и тема лайфтаймов мне очень зашла. Даже не в рамках MVVM проектов, а вообще где есть проблема Dispose. Но началась она с MVVM где я заменил все и просто нельзя не передать лайфтайм, а значит нельзя забыть. И никаких вам weak
Это тестовый фреймворк для обкатки идей, написания прототипов и петов. И лайфтаймы себя там хорошо зарекомендовали. Ну да, впихнуть в старый код сложновато. Проще переписать, что я потихоньку и делаю.
>Что думаешь за современные MVVM фреймворки? Ну я видел что майки что то там родили с кодогенерацией. Решил попробовать взял коммюнити тулкит от майков. В общем то лайфтаймы сбоку там вполне зашли, но вот гадская кодогенерация (ctrl+click на свойство из хамл ведет в пустой сгенеренный файл, а не во вьюмодель) и конечно же диалоги как у >>2848475 я взял MVVM.Dialogs, но там нет контроля "забыл или не забыл ты зарегать в нужном месте", и потом у нас в async void вместо мессаджбокса с сообщением происходит ошибка, которая ломает все нахер, и делает это в редких ситуациях потом потом уже в продакшене - ну или я не умею его готовить. А окна мне нужны, а там опять вручную все это кодить.
так что Fody наше все, а без кодогена этот тулкит - кастрированный мввмлайт. ну и зачем?
>>2848475 Самое просто решение "без ничего" твоем случае создай во вьюмодели свойство Func<> и пусть вьюха ближайшая в лоадед или датаконтексчанжед заполнит это свойство (не забудь про очистку этого свойства если вьюха нестабильна
А далее вьюмодель дергает этот метод А уже в нем вид и выводит окно и имеет оунера. До окна можно добраться через GetWindow(this)
>>2848602 Суть в том, что я не могу каким либо образом передать в ValueConverter ссылку на окно, либо на вьюмодель датаконтекста.
Конвертер определяется в ресурсах (пикрил 1) Никакая привязка к энцестору оттуда не работает. Дата контекст недоступен. Даже если мой конвертер наследует FrameworkElement (пикрил 2), никакой биндинг ни по имени, ни по типу не дает положительных результатов.
Ошибка: System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''. BindingExpression:(no path); DataItem=null; target element is 'ByteOverflowProtector' (Name=''); target property is 'Owner' (type 'Window')
>>2848940 не хочу расчехлять студию поэтому если не ошибаюсь пикрил 1 у тебя DataContext как раз доступен, но именно DataContext замени на ElementName= ну потом доберись до окна
но начинать нужно с того что мессаджбоксы в конвертере вообще дичь
>но начинать нужно с того что мессаджбоксы в конвертере вообще дичь А где еще? Я не хочу это добавлять в модель, потому что месседжбокс должен возникать только на ввод данных от пользователя и нигде больше. Именно конвертер отслеживает валидность данных и способен "подсвечивать красным" окно ввода, он не ограничсивает данные во вьюмодель.
Нет никакой прослойки между конвертером и вьюмоделью, которая бы взяла на себя эту работу.
>>2848482 нет интереса ни к чему, просто работаю и живу, но мозг устал от рутины требует нагрузки да и работа получше нужна, решил совместить приятное с полезным
но сам путь твой неправильный. вьюмодель это держатель стейта. Вид обновляет стейт и если стейт нарушен то вьюмодель может просигнализировать об этом. Всякие там IError* или же просто тупо кинуть событие, которое вид отловит и покажет мессаджбокс
>>2848996 Вот объясни мне. 1. Вот есть ситуация когда какой нибудь метод дергает свойство модели сотни раз. 2. И есть ситуация, когда юзер при помощи текстбокса и биндинга дергает то же свойство.
Как это свойство не спутает второе с первым? Что будет, если я недостаточно хорошо отловлю баги, и ошибка неверных данных пойдет не в лог, а в ебало пользователю парадом месседжбкосов, которые он будет разгребать до второго пришествия Христа?
>или же просто тупо кинуть событие, которое вид отловит и покажет мессаджбокс Событие чего? Что в сеттер пришло неверное значение? А откуда оно пришло?
>>2849012 >Как это свойство не спутает второе с первым? оно и не путает. это одно и то же. кто то изменил свойство и вызвал INPC
>Событие чего? что текущее состояние стейта (то есть то что в себе щас держит вьюмодель) является невалидным и нужно окном по морде пользователю дать с сообщением что не так. Каждое изменение чего либо должно вызывать валидатор, который отвалидирует и если че не так - событие, мессаджбокс
>А откуда оно пришло? На самом деле это не имеет значение, ведь неверное свойство установленное из кода попадет на GUI через INPC.
конечно ты можешь менять бэкингфилд и вызывать INPC как тебе удобно, но лучше все таки держать стейт целостным.
Ну вот как ты пишешь ICollectionView из кода. Там же нужно рефреш делать. А для этого нужно подписаться на вьюмодель чтобы она сообщила когда рефреш делать.И вот она на каждое ее изменение сообщает "нужно делать рефреш". Все просто и сердито. Главное не забыть отписаться от события.
>>2849062 >На самом деле это не имеет значение Имеет значение. Я пытаюсь акцентировать на этом внимание. Допустим у меня свойство Byte в него пришло число 300, и допустим нам не важно откуда — все равно выскочит месседжбокс.
Расмотрим первую ситуацию. Вот если число вводит челвоек, то его скорость ввода настолько мала, что при вводе неправильного значения — тут же выскочит месседжбокс. Пользователь может его прочесть, поразмыслить и попробовать снова.
А вот ситуация номер два. Представим, что пользователь взял "пипетку" и ведет по цветовому градиенту, из-за чего за секунду идет обновление свойства десятки раз. И все это еще и в асинхронном режиме. Вопрос касается безопасности, и если вдруг где-то случится баг расчетов и такой метод начнет спамить числом 300 сотни раз в свойство Byte, то в таком случае выскочит куча месседжбоксов подряд, которые я никак не смогу контролировать. Начнется цирк с конями в виде ограничений по таймеру или еще какой хрени.
При этом ошибка неверного ввода со стороны кода — это ошибка, которая должна писаться в лог. А ошибка ввода пользователем не должна писаться в лог, а выводиться сообщением. Тут два принципиально разных действия в зависимости ОТКУДА пришли неверные данные.
Кроме того, этот груз мессджбокса будет вечно таскаться со вью моделью даже в те проекты, где эта возможность уже не нужна. Даже если я установлю какой нибудь регулирующий флаг - это просто мусор.
А вот конвертер эта та прослойка, которую можно всегда заменить. Где-то достаточно подсветки рамки, где-то нужен месседжбокс — все эти изменения никак не повлияют на внутринюю экосистему вьюмодели. Да, может слово "Конвертер" звучит не так, как применяется, но с точки зрения функционала я его воспринимаю как фильтр-прослойку между вью и вьюмоделью.
Я пока не увидел достаточных аргументов в пользу другого подхода.
>>2848991 >нет интереса ни к чему >решил совместить приятное с полезным Стало быть приятное это работа, а полезное это кодинг? Придумай себе пет-проект. Чужой опыт не даст тебе ничего.
>>2849099 жуть какая то ты не только мазохист, а и садист еще
какие еще мессаджбоксы. если чел вводит значение, то при неверном оно должно обвестить красным или фон красным или значение красным, а поверх поля маленький попап похожий на тултип который подскажет что не так.
А второй ситуации "данные от пипетки говно" вообще быть не должно. Вилидируй их при чтении данных с пипетки и если че не так то уж ладно мессаджбокс "я бедный разрабо, мне скучно и я сделал ошибку напиши мне" и на выход.
>>2849149 >какие еще мессаджбоксы. В фотошопе так сделано (видеорил).
>а поверх поля маленький попап похожий на тултип который подскажет что не так. Попап, гениальная мысль! Возможно я даже смогу его запихнуть прям в стиль текстбокса. Остается вопрос как туда передать внятное сообщение, но возможно я просто ретранслирую тултип.
>>2849188 Загугли валидацию Примеры с обводкой или фон и валидация на уровне вьюмодели Там через триггеры как помню И тот же триггер может сделать попап видимым пока ошибка активна
>>2849407 Чертовы триггеры. Попапы висят пока текст не будет валидным.
А еще можно делать не INotifyDataErrorInfo, а через наследование ValidationRule — тогда можно эти валидаторы переиспользовать независимо от конкретной вьюмодели.
Немного не так компактно, как конвертеры, из-за того что ValidationRules принимает коллекцию. Но с другой стороны этих валидаторов можно напичкать сколько угодно.
Щас надо подумать, как бы показывать попап временно.
импортировал в проект либу, а у нее 1 в 1 те же экстеншоны что и в одной из других либ, но более старые. в итоге у меня теперь The call is ambiguous between the following methods or properties и я не могу их вытащить, мне нужны обе либы и экстеншонов этих просто дохуя и в одной из них они устарели. как заставить студию игнорировать одну из либ в этих конкретных методах?
>>2849622 Короче, я щас взглянул и везде нужно наследовать либо папап, либо адорнер, что подразумевает новый класс.
Это накладывает ограничения на мои внешние стили. Потому что надо таскать с собой дополнительные какие-то контролы и прочее. Пока остановился на пикрилейтед. Будет появляться предупреждающий значок, у которого свой собственный тултип с текстом ошибки.
Это, конечно тоже не дает размаха в разнообразии стилей. Надо что-то придумать. У меня стили находятся в отдельных xaml файлах и если они будут использовать какой-то кастомный класс, то его тоже надо как-то хранить в отдельной библиотеке, что ли.
>А еще ты находишься в адорнер слое то есть попап не нужно Не совсем понял о чем ты. Почему я в нем нахожусь?
>>2849998 >Не совсем понял о чем ты. Почему я в нем нахожусь? адорнер слой располагается поверх элементов. Собственно как и попап. Находишься ты в нем ибо Validation.ErrorTemplate располагает этот шаблон в адорнер слое. То есть там можно убрать попап и выводить нужно и оно будет и поверх и таскаться с окном будет
Другое дело что попап разместить просто, а вот разобраться с компоновкой адорнер слоя вызывает реакцию "штаааааа"
был Contract - похерили. Сделали тупо, ниасилили порт и сказали нинужно Да так нинужно, что сделали Microsoft.VisualStudio.Validation для студии и вот в communitytoolkit тоже свой Guard api
>>2850010 Ради спортивного интереса таки сделал. По сути в стилях оформляется эррор-темплейт обычными средствами <Setter Property="Validation.ErrorTemplate"> ... </Setter> ничего мудреного там нет.
Но уже вижу, что такая подсказка будет блокировать вышерасположенный контрол. Так что вернусь к идее пикрила >>2849998 , мне кажется это самый оптимальный вариант.
>>2850001 Не верь слухам, все там нормально. Это наилучший сейчас способ вкатиться в шапр не проебав кучу времени зря. Очень много вакансий, а курсов еще больше.
>>2850435 >ну и пусть блокирует. нечего вводить абы что. Да не. Сам иногда копирую валидное значение из соседнего контрола.
>Можно и автоисправить на граничное значение мигнув ошибкой ненадолго. Типа через анимации? Надо еще посмотреть, они не со всеми свойствами работают. Не, идея хорошая, только ей надо найти применение, например для всяких длинных строк, где предупреждающего значка приходится тянуться.
>>2850787 В очередной раз убеждаюсь что у петушарпомакак всё на самом деле очень, очень плохо с логикой. Причём нахуй тут мой браузер? Причём нахуй язык, на котором он написан?
>>2850840 При том, что без хуюнити петушарп ещё менее нужен, чем нужен был. Раньше хотя бы можно было вилять жопой, что геймдев только на петушарпе, а щас жопой вилять можно только на хуе хитрых жидов из юнити по 20 центов за виляние.
Объясните, как мне сделать асинхронную программулину, но чтобы не плодились потоки?
На прикриплейде буквально весь мой код. И если я хреначу 10к подключений - потоки плодятся как не в себя, а мне - не надо.
И что я хочу в плане асинхронности.
А хочу чтобы у меня было примерно так:
Когда я пишу await - вся моя фигня не непонятную магию творит, а просто условно говорит рантайму - вот есть переменные, схорони их куда-то и передай другому управление, когда я тут пока потуплю. Рантайм говорит: "Понял, принял", сохраняет переменные, оборачивает этот вызов в какой-то Promise устанавливает ему статус Pending, и потом перебирает другие такие вот "промисы", пока какой-то не скажет - все, я потупил достаточно, го дальше, ну или не пукнет, что у него что-то там сломалось, тогда рантайм берет и разворачивает тот промис что готов для обработки и начинает с ним чет делать.
Вот этого я хочу. Почему? Потому что такое поведение - не содержит для меня магии. Но вот как добиться такого в шарпе - я ХЗ.
100к+ подключенных устройств - потоки плодятся как не в себя.
Ну и про дефолтность поведения. Я под капот особо не лез, но судя по дебагеру и проффилировщику. Пока нагрузка невысокая - да, используется условно 4 потока из тредпула и все ок. Но вот резкий скачок(допустим разом подключилось 50к устройств разом) - все, началась содомия. Память куда-то в небо улетела, потоки начали плодиться, процессор все ядра на 100%, гроб-кладбище, буковки по экрану бегают, логгер сходим с ума. Короче да.
А есть тут аноны, которые прошли какие-нибудь курсы от известных инфоцыган и остался доволен? Да, знаю репутация у них такая себе, как и отзывы. Поэтому спрашиваю только про положительный фидбек. Я вот изучил основы шарпа, зачем-то написал программку на wpf(получилось намного больше и сложнее чем я изначально предполагал). И мне самостоятельно изучать как-то сложно, много возникает вопросов, да и оценку сделанного тоже неплохо было бы получать. Вот поэтому подумал, мб на курс какой записаться.
>>2851207 Не путай коннекты с потоками 100к коннектов само собой занимают память. Одних буферов вон сколько. Но перемалываться все это будет в пулеь где пул занят - все ждут. Также следует отличать потоки из пула и i/o потоки из того же пула. Ну и таски от потоков отличать. Триллион тасков можно и в 1 потоке иметь
А какова хрена? Я вижу, что System.Math это public partial класс (пикрил 1) Так почему же если я создаю в том же неймспейсе public partial calss Math, то мне пишет:
Ошибка CS0101 Пространство имен "System" уже содержит определение для "Math".
>>2851214 В целом ITVDN были норм по шарпу. Но я, как любой уважающий себя человек - воровал их. Сейчас бы купил думаю, хоть они и заменятся чтением книжек.
>>2851233 Ну. Блин. Все же не стоит во такую вот фигню говорить.
Вот я помню, первый курс. Спиздил из магазина книгу по Qt. Я же себя уважаю, платить 1800р за книгу - пошли нахуй. Ну. Спиздил. Сижу. Читаю. Нихуя не понимаю. Потом - спиздил книгу по шарпу. Как раз CLR via С#. Читаю. Какие-то блядь, модули, хуедули. Какие-то заголовки. Какая-то общая языковая среда. Пиздец короче. А потом - я нашел метанит. И почитал, весело поделал что там написано. Постепенно - какие-то там понимания, хуе-мое, сверху в вузе - на ассемблере-плюсах. Потом - спиздил курс ITVDN. И вот теперь я снова открыл книжку по QT - и все еще нихуя, блядь, непонятно. Какие-то сука, контейнеры, сигналы, блядь, этот еще долбоебский плюсовый синтсксис, который сверху тем что в нокле напридумывали помазан. Фу, блядь. Фу, нахуй.
>>2851229 Почему нет способа слияния неймспейсов? Как же заебало. Почему я не могу обращаться к Math и получить методы из System.Math и собственные методы Extended.Math из одной кубышки, так сказать?
Нет у меня внутри конфликтных методов, так чего же ты трясешься, студия?
>>2808819 (OP) Какую бесплатную либу сейчас принято юзать для работы с вордом/экселем. Ворд для генерации таблиц, эксель тоже + простые формулы между колонками.