24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
8. Что нужно знать, чтобы взяли работать? — Общие навыки — TPL, Linq, DI, интеграционные тесты. Преимущество перед такими же вкатунами даст парочка интересных пет-проектов где вы делаете всё максимально правильно и точно следуя архитектуре. — Архитектура — DDD, микросервисная архитектура. Так же необходимо ознакомиться с паттернами проектирования. Обязательны к изучению: MVVM, MVC. — Базы данных — PostgreSQL/MSSQL + Mongo/Redis. Из ORM: EFCore обычно достаточно, но есть более быстрый, но менее удобный Dapper. Тратить время на ADO.NET не стоит. — Алгоритмы — сортировка, поиск, оценка сложности алгоритмов, рекурсия, алгоритмы на строках. — Структуры данных — связанные списки, деревья (бинарные, красно-чёрные), хеш-таблицы, графы. — Системы контроля версий — обычно гита достаточно.
Сениор, который собеседует челиков - в треде. Спрашивайте что ли как пройти собеседования и как 300к в секунду зарабатывать. Хотя я больше сервисами занимаюсь, а у вас судя по прошлому треду сплошное WPF и прочее говно.
шарпач, какие могут быть подводные камни? у меня есть класс в котором имеется лист из ConcreteNode я отдаю его другому классу через интерфейс, а он дергает интерфейс на ConcreteNode и вызывает метод метод Tick() на этом классе вызывается +- 90-120 раз в секунду, когда и сколько раз конкретно заранее неизвестно если лист который я отдаю из Repository изменится(ConcreteNode будут добавляться-убираться по индексу через эвенты на который там подписано), хватит ли проверки на null перед ProcessNode() или нужно как-то хитрее идти?
>>2516358 ох ты и понаписал да какая разница сколько в секунду. у тебя многопоток что ли? есть состояние гонки? если да, то от этого и пляши. тебе же ВИДНЕЕ
Из твоего скрина и описания вообще хер понять. >ConcreteNode будут добавляться-убираться по индекс на скрине оно вообще закоменчено и не используется.
Если все же многопоток, то всегда думай с точки зрения "а если изменится"
например ты проверяешь на нулл на хер знает какой строк (тебе лень было номера строк захватить что ли) и далее берешь итератор от этого. Есть ли шанс что за это время не нулл снова станет нулл?
Вот ты взял итератор и итерируешь. Есть ли вероятность, что содержимое списка изменится? Если да, то итератор это не любит ибо List не threadsafe, тут нужно иммутаблелист
Ок. изменится не содержимое списка, а сам список. Должен ли обход это учесть и прерваться ради нового списка или дойти до конца? А если дойти до конца, то есть ли вероятность что список еще раз сменится и один из списков будет просто потерян.
хз что вообще делают null в списке. ЗАЧЕМ ВООБЩЕ ДОБАВЛЯТЬ null в список???
>>2516394 я реально не шарю нихуя. у меня не многопоток, тут может быть состояние гонки? например вот у меня итерируется одна версия листа а в это время приходит эвент который активирует метод, который сносит одну из ConcreteNode из листа. лист итерируется на старых данных, а затем на новых? >на скрине оно вообще закоменчено и не используется. так закоменченое сидит в другом классе который этот интерфейс использует, я его для наглядности приложил
>>2516411 А нужно шарить. кто из нас телепат? ответ: никто
В одном потоке не может работать сразу 2 разных кода. Если у тебя везде 1 поток, значит код, который выкидывает событие, не сможет работать пока идет вот эта итерация. А значит список никогда не будет изменен, да и нуллабле его делать нет смысла - лучше присвоить дефолтное Array.Empty<> и проверка на нулл станет не нужна.
Если у тебя событие может быть выполнено посреди итерации, то это уже самый настоящий многопоток. И тут да - будет "сначала доитетрирует на старых, а потом будет на новых (причем за это время новые могу смениться несколько раз)"
Я без понятия что делает твой код. Но если бы делал я что то типа "вот оно вжух событие и там бац обходит в цикле и повторяет", то, во-первых, там была бы очередь (ну чтобы не птерялось ничего), а во-вторых там была бы очередь типа Channel чтобы не городить огород с "я тут очередь опустошил и теперь постоянно проверяю есть чё"
То есть реализация стандартного Producer-Consumer 1 есть общая очередь канал или блокколлекция 2 сервис1 может генерить событие или может знать по очередь прямо (пофиг) - суть в том, что на событие он просто кладет ноду в очередь и идет дальше заниматься своим делом 3 в то же время сервис2 выгребает эти ноды и что-то с ними делает
Ни одна нода не будет потеряна, не будет лагов на событии и вообще это просто стандартно и удобно
>>2516411 >а в это время приходит эвент который активирует метод, который сносит одну из ConcreteNode из листа. лист итерируется на старых данных, а затем на новых? Итератор выкинет эксепшон - коллекцияю нельзя менять во время итераций.
Самый простой способ обойти это - делоешь копию коллеции по которой надо итерироваться и ей уже не грозит краш, если прилетят или удялятся ноды. Потом надо будет отдельно как-то обработать новые ноды, но ты сам думай как это сделать.
>>2516222 Про юзинг правильно написали, это очень любят спрашивать. А так смотря что ты называешь сахаром.
>>2516224 >За солид ебешь? Не ебу, но иногда спрашиваю. Желательно всё же понимать что там за принципы, к тому же они не особо сложные, 2 минуты на вики буквально дадут понимание. >Лайвкодить заставляешь? Не, я не делаю то, что ненавидел сам. У нас есть идея давать кандидатам код, чтобы они делали лайв код ревью - вот эта штука кажется мне гораздо более показательной и не такой напрягающей. >>2516242 В Dapper например пишут прямо sql код для работы с БД, и иногда это оправдано. В EF действительно всё под капотом. В остальном хз о чём ты, может не работал с такими технологиями.
>>2516281 Если ты сидишь на десктопе тебе виднее какой там рынок. Нормально специализироваться на чём-то одном, я вот ничего кроме asp.net core считай и не делаю.
>>2516219 Не совсем по собесам, но насколько легко залететь с 0 опыта на aspnet core онли бэк (без js)? А то на большинстве вакансий trainee\junior просят ангуляр\реакт.
И насколько хорошо вообще шарписту надо знать JS? Я то вроде в ангуляре могу компоненты накидать, но нравится не сильно. А если будет react\vue и без TS то вообще боль :(
>>2516487 >В EF действительно всё под капотом. Хм. В EF точно так же можно чистым sql-м хуярить при надобности. Ну а то, что под капотом, вполне спокойно в отладчике смотрится во что оно преобразуется.
>>2516530 >но насколько легко залететь с 0 опыта на aspnet core онли бэк (без js)? С нуля практически малореально. Вот где-то через год-полтора работы недофулстеком вполне уже можно. Просто по опыту сейчас на рынке очень мало контор в коотрых одновременно было бы и толковое разделение на фронт/бэк и чтобы им требовались безопытные джуны. Вполне реально влезть в контору где ты будешь у тебя разделение обязанностей бэк/фронт будет где-то 70/30. А оттуда уже потихоньку двигаться в сторону чистого бэка.
>>2516530 >И насколько хорошо вообще шарписту надо знать JS? В принципе достаточно знать как запрос с фронта на бэк и обратно ходит. Плюс уметь пользоваться отладочной консолью браузера.
>>2516530 >Не совсем по собесам, но насколько легко залететь с 0 опыта на aspnet core онли бэк (без js)? Сейчас скорее оче сложно. После пиздеца много рабочей силы появилось. Половина челиков которых собеседую говорят, что их проект закрыли/сократили/убрали премии. И это не джуны. >И насколько хорошо вообще шарписту надо знать JS? Хз. Я онли бэк пишу, на JS писать могу, но знаю очень поверхностно, собес по нему точно не пройду. Чо тебе кстати реакт не нравится? По мне так скорее ангуляр это неудобная хрень.
>>2516590 Всё так. Я бы правда чистого SQL в EF пытался избегать насколько можно.
>>2516598 >Всё так. Я бы правда чистого SQL в EF пытался избегать насколько можно. Я бы чистого SQL в любой ORM избегал бы до самого последнего. Вся суть ORM как раз в том, чтобы как можно меньше касаться SQL напрямую.
Зачем вообще нужен sql и ебанина с СУБД? Какой от них профит по сравнению с обычной файловой системой в качестве бд? Там кроме индексов и транзакций что-то полезное еще есть?
Меня не отпускает крамольная мысль, что БД это какой-то оверинжиниринг со своим языком, форматом файла, и подходом к проектированию базы. Реалиционна хуйня не всегда удачно ложится на бизнес-логику и приходится страдать.
В одном бложике прочитал, что хорошо организованая файловая система уже неплохая БД. Есть производительность, надеженость, кастомные дата-стримы позволяющие привязывать к файлам произвольныке метаданные и обрабатывать их например по тегам или еще как-то хитро.
Еще вспоминаю опыт в геймдеве - никакой СУБД-поебистикой для данных не занимались. Хранили все данные в зип-архивах с логической структурой подходящей проекту. Довольно гибко и удобно.
Помогите с ef core. Хочу сделать миграцию, но диспетчер говорит, что не может определить отношения между таблицами. У меня два класса - книга и автор. В каждом есть коллекция объектов другого класса.(public ICollection<Book> BookAuthors {get; set;} в классе Author и public ICollection<Author> AuthorBooks {get; set;} в классе Book соответственно.
>>2516818 Назови попробуй их Books и Authors просто, кмк еф хочет создать для твоего м2м промежуточную таблицу, которая как раз называется либо BookAuthors либо AuthorBooks и сосёт. Переименуй кароч проперти
>>2516818 Разобрался, проблема была в том, что помимо списка авторов у меня было поле "Руководитель проекта" также типа Author. Убрал поле - всё заработало. Но оно то всё равно мне нужно.
Дороу. Есть у меня одна папка в которой 10к файлов, и есть вторая папка в которой те же самые 10к файлов, только некоторые из которых изменены. Какой самый нормальный способ их синхронизировать и заменить все изменённые файлы в одной из папок? Перебирать что ли все 10к?
>>2517039 Если тебе пофиг на историю изменений просто скопируй один каталог поверх другого, измененные файлы заменятся, те которые не изменялись - останутся теми же.
>>2516487 >А так смотря что ты называешь сахаром. Дак в том и вопрос, что не понятно что учить, а что нет. Та же джава хороша тем, что легко учится, т.к. содержит мало конструкций. А в шарп их надобавляли дофига. Некоторые на мой взгляд просто избыточны и лишь ухудшают чтение кода. А вот код на джаве, хоть и многословный, но всегда легко читается.
>>2517291 ConfigureAwait так и не засахарили using тупо не может сделать 2 var disposable в одном выражении. нужно 2 using. возможность опустить скобки не является решением. if не является выражением. Тернарный оператор здорово, но не для сложных конструкций new
Помогите с entity framework. Есть класс в котором есть две переменные одного типа (компания заказчик и компания исполнитель), как запретить присваивать им одинаковые значения?
>>2517291 Делегаты и евенты слишком сахарные. Я конечно разобрался, что там в основе те же функциональные интерфейсы как в джаве, но всё равно в голове сложно укладывается.
Да какие асбтракции-то. Делегат - это обычный типизированный коллбек, безопасный аналог указателя на функцию из плюсов. Совершенно ясный и понятный. А нагромождение костылей в жабе - этот как раз обход недостатка дизайна языка, где это изначально не было продумано.
Это для маленьких кривеньких проектиков, долгая жизнь которых не предусмотрена. Т.к. естественная жизнь многих проектов в это не укладывается, создателям orm-ов пришлось придумать микросервисную архитектуру.
Анончики, хочу вкатиться в c# разработку, какую-то базу учил в универе, сейчас уже плохо помню, сколько в среднем займет времени, чтобы я смог выполнять какие-то простенькие заказы?
>>2517619 А в шарпе типа пипец продумано лол. Вот прямо щас Я могу Array.Sort(_values, (x, y)=> x.CompareTo(y)); но не могу Array.BinarySearch(_values, keyTuple, (x, y) => x.CompareTo(y));
потому что для Sort есть перегрузка с делегатом, а для BinarySearch нету, ему IComparer подавай, который как раз тот самый функциональный интерфейс с одним методом и он НЕ ПРЕОБРАЗУЕТСЯ из (x, y)=> x.CompareTo(y), ведь у нас тут не жава, а шарп.
Так что костыль это или фича - крайне спорно. Лично я считаю что это фича и я бы хотел видеть такую и в шарпе.
Вместо удобного "я передал лямбду, а компилятор сам все сделает" я должен использовать длинный костыль в виде явной фабрики (только потому что автор класса не сделал очевидную перегрузку)
И после этого они над функциональными интерфейсами смеются ха ха.
>>2517999 ты только зацени уровень портяночности var index = Array.BinarySearch(_values, key, Comparer<KeyValuePair<TKey, object>>.Create((x, y) => x.Key.CompareTo(y.Key)));
>>2518008 Ты мог бы доебаться до дизайна Array.BinarySearch, не умеющего в делегаты, но за каким-то хуем доебался до самих делегатов. Функциональные интерфейсы - это тупо костыль, чтобы не добавлять в жабу делегаты, которые так сложно добавить из-за говнокода в JVM и политики оракла тормозить развитие жабы.
>>2518020 до делегатов доебался не я. я просто мимо проходил и показал что НЕ СТОИТ высмеивать фичи из других языков которые неплохо бы и в шарпе видеть.
>это тупо костыль А вот лично для меня костыль - как раз Comparer<>.Create()
ведь хули один из БАЗОВЫХ классов шарпа даже в последней версии дотнета не принимает делегат (которые существуют аж с версии дотнета 1.1)
И вообще фича удобная, ведь тупо пришлось бы делать меньше перегрузок метода и такой херни как с BinarySearch просто не было бы.
>>2518020 >которые так сложно добавить из-за говнокода в JVM это оффтоп конечно, но я без понятия о чем ты. Я не знаю жаву, я юзаю котлин и там совместо сосуществуют и всякие там (Int)->Long (аналог Func<int, long>), так и эти функциональные интерфейсы. И JVM как то не мешает. Да и вообще как она может мешать, если это на уровне компилятора решается - компилятор просто может переписать лямбду в интерфейс и сам и на бинарном уровне будет одинаково.
>>2518032 Нет, только сеньорам, джунам достаточно уметь выводить хеллоуаорлд в консольку. Милдлы уже могут объявлять свои переменные и даже писать свои методы.
>>2518050 ASP.NET Core надо было по-новому назвать. К примеру, Autumn. Были бы разные модули типа: Autumn MVC, Autumn Data (вместо EF), Autumn Cloud для микросервисов всяких.
>>2518123 А какой выход ты видишь лучше, кроме как делать уродство в виде:
abstract ActionResult<T> ErrorResult<T> : ActionResult<T> OkResult<T> : ActionResult<T> ? Вот это как раз уродливо в конечном варианте выглядит. Или по твоему - все методы - всегда возвращают однозначный результат? Или может - нужно на каждый чих - кидать исключения? Как по мне - с мандами - красивше выходит и удобнее.
>>2518132 Так это проблемы по перформансу. А не прошедшее валидацию сущности - не являются исключительной ситуацией. Исключение нужно бросать, внезапно, в исключительных ситуациях, например - база недоступна, тут действительно надо кинуть исключение, чтобы на самом высоком уровне- перехватить его и прекратить обработку. Если на каждый чих кидать исключение то оно уебищно выглядит + сразу большие проблемы с производительностью.
>>2518140 >А не прошедшее валидацию сущности - не являются исключительной ситуацией
Я думал ты это в качестве примера привел. Тогда просто дизайн функции кривой, она и валидирует, и ещё какой-то другой такой же штатной работой занимается. Нужен рефакторинг - валидиацию в одно место, работу в другое (и выше по стеку и определяется что делать когда валидация просрана, что - когда нет).
Приведи другой тогда пример, где нужен этот either на твой взгляд.
>>2518015 >var index = Array.BinarySearch(_values, key, Comparer<KeyValuePair<TKey, object>>.Create((x, y) => x.Key.CompareTo(y.Key))); Ты написал говнокод. Я бы тебе за такое на ревью лося бы пробил сапогом. 1. Делегат и компарер должны быть предварительно объявлены отдельными переменными с понятными названиями и комментариями при необходимости. 2. var index? Кто JS-петуха пустил в мою решоточку? Почему был не написать int вместо var? Длина такая же. Ясности больше. var указывается только там, где тип очевиден. Например var sb = new StringBuilder(). Но и это уже не актуально в новых шарпах. Поэтому по сути хорошим тоном является везде явно указывать тип, а var писать может быть только в Linq'е.
Это когда либо он всплывает через несколько секунд по наведению пойнтера (охуенно удобно), либо дублируется var, а серенькими букофками ещё добавляется тип. Просто заебись. Правда, при ревью пулл реквеста в браузере, например, нихуя ни всплывает, как и при просмотре истории, но ничего.
А ещё можешь почитать для чего ms вообще высрал этот var, и это совсем не для того, чтобы совать его везде при каждом удобном случаче.
>>2517887 >выполнять какие-то простенькие заказы Какие заказы? На шарпе фриланс мертв. Это ентерпрайз решение для штатных сотрудников, как и джава. Мелкие задачи в одно рыло на нем не решают. В лучшем случае будешь на фреймворке 4.6.1 пилить для пиндоса надстройку к аутлуку или екселю. Учи пхп, если хочешь с заказов кормиться.
>>2517291 >какие именно конструкции по твоему избыточны? Пикрилы уебищны и уродливы. Зачем такие вырвиглазние брайнфак-лайк решения наспех впихивать в язык мне не понятно. Некоторая экономия строк кода за счёт убийства читабельности и интуитивности понимания и тем более написания таких конструкций.
>>2518177 >Делегат и компарер должны быть предварительно объявлены отдельными переменными с понятными названиями и комментариями при необходимости. Кому должны? с хера ли? ты и в LINQ вместо каждой лямбды обьявляешь?
>>2518210 Чел, ты можешь в своих петпроектах срать как тебе вздумается. Просто когда твой код будут читать другие люди, не нужно делать так, чтобы они тебя ненавидели, и считали необученным и безграмотным идиотом. Если в твоём коде появляется конструкция типа ))) - три и более скобки подряд, то это например один из верных маркеров того, что это сложно будет читать и понимать, читателю придется останавливаться и разбираться что во что вложено, а может быть даже копировать из браузера код в текстовый редактор и там разбивать на блоки, чтобы прочитать. Поэтому очевидным решением будет выносить отдельные вложенные сущности в самостоятельные переменные. Линк при грамотном написании не имеет таких проблем и там это не требуется, как правило.
Где хранить классы, определяющие формат входных данных для webapi? В asp.net в действии советуют создавать их внутри контроллера, но я хз насколько это правильно.
>>2518225 >Если в твоём коде появляется конструкция типа ))) - три и более скобки подряд ну так поэтому я и хейтю что нет функциональных интерфейсов, а эти костыли и когда тебя ВЫНУЖДАЮТ мудрить с именаи, то это говно язык
>>2518264 >нет функциональных интерфейсов Где их нет? В стандартной либе? Так там дохуя чего нет, даже не смотря на то, что стандартная либа шапра из коропки даёт столько всего, что другим языкам и не снилось, и в которые в отличие от шарпа в каждый проект приходится тянуть зависимости от дикого зоопарка разномастных либ. Зато можно допилить самому или сделать обертку или сделать аналог или скачать нугет пакет, если кто-то уже озаботился проблемой. Сам по себе язык сишарп поддерживает функциональные интерфейсы, типа IComparer. Можно даже запилить какой-то свой обобщённый класс с имплисит кастованием его интанса из делегата. Так что я не очень понимаю, на что ты жалуешься. На отсутствие вожделенных перегрузок в стандартной либе грех жаловаться.
>>2518299 >Сам по себе язык сишарп поддерживает функциональные интерфейсы, типа IComparer их нет в шарпе. он не скастит сам (x, y)=> в IComparer поэтому и приходится использовать портяночную фабрику вместо "компилятор за меня это сам переписал"
>На отсутствие вожделенных перегрузок в стандартной либе грех жаловаться. ну так то да. всего то пара десятков лет прошло с момента рождения класса Array и делегатов И можно было бы сказать, что не знал автор класса по делегаты, но в Array.Sort он есть.
>>2518196 >Какие заказы? На шарпе фриланс мертв. Не совсем так. Он не мертв, он скорее в тени. Вполне возможно найти какую-нибудь подработку, вроде написания пары-тройки микросервисов для какой-нибудь мелкой (относительно энтрепрайза) конторы за более-менее нормальный прайс. Но только по знакомству. С улицы в такие проекты никого не берут. >>2518316 >А вообще, разве шарписты не нужны тем же юнитистам? Модуль какой нибудь захуярить им время о твремени разве не требуется? Нет, там своя атмосфера. В геймдеве (особенно на юнити) кодерских задач как таковых не особо много, все что нужно вполне решается силами пары-тройки штатных макак.
>>2518046 >Почему у Микрософт такие дебильные названия? Просто у них в отделе нейминга продуктов какой-то рептилоид сидит (наверное брат того который названия в IKEA придумывает) У них абсолютно всегда и во всех продуктах была хуйня с неймингом. Что в досе, что в винде, что с МС офисом, что с консолями. Смирись.
Entity framework из меня уже все соки выпил. Я пытался сделать миграцию, но при обновлении бд постоянно вылезала ошибка, причину которой я понять был не в состоянии. что-то про каскадное удаление и рекурсию Помогло в итоге только удаление бд, всех миграций и создание бд начисто.
>>2518561 >Помогло в итоге только удаление бд, всех миграций и создание бд начисто. Ну, на этапе разработки ситуация "да заебало бля, короче я дропаю БД и все миграции и делаю единую" - очень часто встречается. Так что норм.
>>2518206 Тоже с этого жопа горит. Какие-то хипстерки тащат парашный стрелочный синтаксис из функциональных языков. До дебилов не доходит, что уже есть православый switch, а более сложные случаи ПАТТЕРН МАТЧИНГА должны быть спрятаны в полиморфные вызовы методов объектов.
>>2519181 >а он тут причем? Да все при том же. Весь синтаксический сахар стрелочек компиляется в свичи/ифы.
>паттерн-матчинг - сокращают цепочку развесистых if В тру объектном дизайне развесистых ифов не должно быть.
Какбы плохая практика патерн матчинга - пытаться проверить сразу много данных на месте, вместо упаковки их инвариантов и проверки их одним семантическим методом. Это наследие из тех времен когда были списки, но не было объектов с поведением. В списки могли засунуть всякую херень. Нужен был гибкий способ их фильтровать на предмет ошибок и дальнейшей обработки. В ОО-языке наличие патерн матчинга это шаг назад, разрабы натурально лезут обратно на дерево функций с которого только недавно слезли.
>>2519203 >Весь синтаксический сахар стрелочек компиляется в свичи/ифы. ммм. в этом наверное и есть суть сахара как сахара ) Предлагать взамен то, от чего сахар должен спасти - ну такое себе
>В тру объектном дизайне развесистых ифов не должно быть. >ОО-языке наличие патерн матчинга внезапно люди пишут НЕ ТОЛЬКО крайне высокоуровневый код. И этим все сказано. Каждой задаче - СВОЙ ИНСТРУМЕНТ.
Считать, что в коде не должно быть развесистых иф - ты там формошлепаешь что ли? да любой алгоритмический код или работающий с рефлексией и кодогеном, да всякие сериализаторы кастомные просто перенасыщены разными ифами.
я обожаю C#, обожаю его синтаксис, люблю писать на нём что-то (WPF, хочу учить asp.net), но блять, по сравнению с другими языками (python, java, js) количество ресурсов по изучению C# и его технологий равно нулю. Я говорю про ресуры на русском (да, я не знаю английского, вот такой хуесос). Дрочить метанит уже заебало (мне не нравится статьи там, особенно бесит дохуя опечаток и ошибок); мне не нравится профессор веб; я не хочу изучать язык или технологию по документации, потому что для любого нормального языка есть сайты по изучению/курсы/книги; я не хочу читать устаревшие книги фримана или шилдта, потому что новые ещё не перевели. Я писал на C# для себя 1.5-2 года и сейчас просто выгорел от того, что последние полгода я не прогрессирую от слова совсем, нет желания что-то учить и программировать вообще, просто потому что уже тошно видеть одни и те же ублюдские ресурсы с отвратительными статьями. Ну почему так нахуй, один из самых популярных языков, а происходит такое говно. (и да, может с английскими ресурсами такая же хуйня, хз)
>>2519251 при подписке на кого-то этот кто-то удерживает тебя пока сам жив и не дает тебя скушать. А значит если контрол удалился, то его ссылка на тебя не препятствует тебя сожрать.
>>2519251 Ну а в обычных событиях контрола где в code-behind этого же контрола хендлер - там контрол ссылается сам на себя, то есть такое GC выглядит как циклическая ссылка, что не мешает собрать мусор.
Поэтому контролы обычно ничего не удерживают, если ты сам не постараешься что-то захватить.
конечно если ты в контроле сам подписался на какой то синглтон сервис - он будет держать тебя (контрол как подписчик) вечно если забудешь отписаться (что кстати нихрена не тривиально ибо событие выгрузки контрола не очень такое себе нормальное - у меня вот lifetime-ы и когда контрол выгружается, то лайфтайм протухает и все автоотписывается и мне пришлось городить огород чтобы работало нормально)
к вьюмоделям контролы подписываются через биндинги и там работают слабые ссылки.
Исключение - не OneTime биндинг к свойствам без INPC - то есть если биндинг к чему то, что не поддерживает INPC, например ты биндишься к IList то без OneTime у тебя будет утечка.
>>2519259 >то его ссылка на тебя не препятствует тебя сожрать Сборщиком мусора?
Но когда я вручную подписывался внутри контрола, то было очень много случаев, когда контрол продолжал существовать, даже когда я удалял на него ссылку.
>>2519274 Если объект держит на тебя ссылку, но сам объект был скушан GC, то и ссылка на тебя исчезла. При обычной подписке ссылку на тебя удерживают через делегат, что просто немного косвенности, но смысл не меняет.
>даже когда я удалял на него ссылку. ссылку откуда?
Подписки контрола обычно в его же code-behind - умирают вместе с ним всякие атачед пропертис если они приатачены к контролу и нигде ты не закрепил их - тоже умрут вместе с контролом.
Если ты не плодишь код, где в коде рождаешь контролы или захватываешь ссылки на контролы и этот сам код не прилепляешь к чему то долгоживущему, то проблем нет
>>2519265 типичный двачер, я ему говорю про то, что для других языков дохуища курсов/книг/сайтов для изучения, он мне говорит выучить англ. язык. Если что, выученный мной английский не увеличит количество ресурсов на русском и не улучшит их качество, чини логику.
И да, я не говорил, что не учу англ./не собираюсь учить англ, я говорю про то, что нет ресурсов, какое "сами сдвинули меня с места", ты чет ваще дебил какой-то...
>Во первых в шарпах куча сахара. Он не всем так уж и нужен, по мне, это ничтожный аргумент. Верно. Он не нужен упоротым, поросшим мхом, жавистам, любящим писать длиннннно и много. >Во вторых java опенсорс, линуха Ну тут как бы можно и не читать дальше ибо и так все понятно > В третьих у шарпов есть куча нюансов в CLR в отличие от уже отшлифованной JVM. А тут в прошлых тредах жаловались именно на необходимость тюнинга JVM. про type erasure будем вспоминать? нет, ну и ладно >и не заморачиваться над более узкими оптимизациями структуры были изначально. Далее Span/ref, дотнет 7 вообще вышел под лозунгом "не нужны нам новые фичи, даешь оптимизацию" >и безопастностью которая у шарпов слабее хз о чем это он. особенно после нашумевшей истории с log4net >Видим nхибернейт стартовал на java, стиздили на шарпы. ммм и чо? для жавистом же - им же проще переходить. А так кто юзает хибернейт? стандарт это EF >elasticsearch - java, Jira - java, Jenkins - java, Kafka - java а гитлаб внезапно руби. И чет НИКТО не переписывает на жаву, на такую замечательную жаву. >То что крупные компании используют java тк раньше не было выбора - смешно. мда. ой дурак. >async await? Может стоит осторожнее с многопоточным работать? асинк/авайт это киллер вещь для работы с корутинщиной и асинхронщиной. настолько крутая, что ее вводят везде где можно - питон, жс, даже руби писать в старом стиле это как делать операцию топором - можно коненчно, но топорно и тут его "осторожнее" как раз и нужно. >В java хорошая многопоточность в отличии от шарпов дооааа доааа )) >Почему в на CS50 Harvard, java изучается как нормальный язык ох ох. да в разных учебных заведениях даже паскаль изучают. это ни о чем не говорит. >но программируя на python, go, java чувствуешь себя программистом, а не девелопером. ась? на питоне кстати реально кульно в плане "думаешь о задаче. а не о том как". Потом идет шарп. потом жава, потом го
>>2519299 >для других языков дохуища курсов/книг/сайтов для изучения Каких? Русскоязычный материал — всякая основа, уровня информации из метанита или "курсы для прокрастинаторов". Специализированные вещи никто никогда не переводит.
На C# количественно туторов меньше просто потому, что всяких хуесосов-разводил меньше, но тематически все на том же уровне. Не знаю в какой ты реальности живешь, но в моей реальности найти годную информацию по питону и джаваскрипту гораздо сложнее — без вот этой хуни, где на середине статьи тебе начинают впаривать масло для бороды.
>>2519327 >"думаешь о задаче. а не о том как" В любом языке можно так делать, просто потом получается говнокод. И в одних языках это осуждается (поэтому приходится "думать как"), а в других это норма.
>>2519299 то просто ты ленивый да одного хабра хватает чтобы знать разные этакие штуки глубоко в мсдн неплохо описана работа с их продуктами - тот же EF внезапно хорошо описан Книги никогда не читал.
>Во первых в шарпах куча сахара. Он не всем так уж и нужен, по мне, это ничтожный аргумент. Во вторых java опенсорс, линуха и тп, а это власть и кастом перед любым заказчиком, не говоря уже про разные APS, JVM, JDK, GC. И как сказали что заказчику нужно быстрее и хорошо - тогда java так же очень хорошо подходит(подключаем бут и не паримся, все работает из коробки). В третьих у шарпов есть куча нюансов в CLR в отличие от уже отшлифованной JVM. Мелкомягкие просто тупо продают язык как продукт и не заморачиваться над более узкими оптимизациями и безопастностью которая у шарпов слабее. Винда сущее говно на которое подсадили СНГ в 2000х. Мы в компании используем linux и поем, мак тут дело вкуса, по мне, лучше взять нормальный ноут и пихнуть туда linux. В четверых, открываем вакансии по шарпам. Видим Например касандру, она на java. Видим nхибернейт стартовал на java, стиздили на шарпы. Далее, elasticsearch - java, Jira - java, Jenkins - java, Kafka - java. То что крупные компании используют java тк раньше не было выбора - смешно. Почему они тогда до сих пор пишут новые сервисы и опенсорc на java? Да java по синтаксису проигрывает, шарпы надувают из года в год, а java забросили на 10 лет. Но даже при таком раскладе, можно писать все что угодно(практически) и не париться. Если вам нужно куча сахара, то шарпы. Зато когда будете работать над крупными проектами в USA, ОАЭ ,China, то слезы не показывайте. async await? Может стоит осторожнее с многопоточным работать? В java хорошая многопоточность в отличии от шарпов. Деплой на azure? Серьезно? 90% девопсов писают кипятком от AWS или на худой GCP, мб стоит выбросить все сертификаты. Почему в на CS50 Harvard, java изучается как нормальный язык, а шарпы мелькают только на курсе Game Development. Почему в Stanford CS java это самый большой курс из всех, а шарпы изучаются в кратком обзоре современных языков. Язык это инструмент, но программируя на python, go, java чувствуешь себя программистом, а не девелопером. Я понимаю что некоторым хочется верить что они давно сделали правильный выбор, и оба спикера сделали правильный выбор. Каждому инженеру важно иметь хороший инструмент. Заказчику хочется быстрее, дешевле, и что бы все могли. Оба языка отлично справляются. Но мало заказчиков знают сколько ночей потребовалось что бы внедрить хорошие решения используя тот или иной язык.
>>2519312 Чел, который представлял джаву, не сказал, что в джаве есть полная обратная совместимость и код 1995 года работает и сейчас. А в сишарпе каждый год всё ломают. Даже в этом треде все сидят и ждут новых книг по дотнету 7, потому что на старом дотнете уже ничего не запускается.
>>2519459 > А C#-код, написанный на первой версии языка, у тебя не компилируется и не работает что ли? Чего пиздишь? Не все стандартные либы нет фреймворк перенесены на неткор.
>>2519459 А ты в курсе вообще, что в 8 версии они ввели null-значимые типы и теперь все ссылочным типам надо приписывать ?, чтобы присвоить null. В 10 версии они изменили Main и он теперь как отдельный файл без класса и функции. Про переделки фреймворков я вообще молчу. Там вообще ничего не осталось от первой версии.
>>2519465 >А ты в курсе вообще, что в 8 версии они ввели null-значимые типы и теперь все ссылочным типам надо приписывать ?, чтобы присвоить null. >В 10 версии они изменили Main и он теперь как отдельный файл без класса и функции.
Хочешь, научу чтобы не надо было, и чтобы Main был с классом и функцией?
>Про переделки фреймворков я вообще молчу. Там вообще ничего не осталось от первой версии.
>>2519468 >Хочешь, научу чтобы не надо было, и чтобы Main был с классом и функцией? Давай!
Я пробовал писать код из книжки Фримана по дотнет кор 2.0 и ничего не работало. Сидел как дурак и гуглил каждый кусок кода, а там писали, что в дотнет 6 всё по-другому. Даже не просто заменить А на Б, а совершенно иной подход. Надо целые модули переписывать.
То же самое, нужен конкретный пример. А то я тоже из гайда спринга (прям текущего на сайте с оф докой) пишу хеллоу ворлд, и он не работает. Т.к. они опять что-то поменяли. Но я-то понимаю, что спринг - это нихуя не "стандартная библиотека".
>>2519474 В Спринге хеллоу ворлд не менялся. Даже в Спринг буте всё тоже самое. Можно взять любую книга за любой год и все примеры выполняться как родные.
>>2519299 >я ему говорю про то, что для других языков дохуища курсов/книг/сайтов для изучения Для шарпа есть МСДН, который покрывает где-то 85...90% информации которую нужно знать.
>>2519548 мсдн-ом он называет оф доку от мелкософт то что ее перенесли на новый адрес сути не меняет. в народе она по прежнему зовется "мсдн" и все понимают о чем речь.
>>2519471 >>Хочешь, научу чтобы не надо было, и чтобы Main был с классом и функцией? >Давай! При создании солюшена ставишь галку "Do not use ttop level statements" и у тебя будет нормальная структура с Main'ом Затем в свойствах проекта устанавливаешь ImplicitUsings и Nullable в disable И у тебя будут нормальные юзинги и отсутствие дроча с nullable
>>2519548 Я хуй знает, но и сейчас любой поисковик по тегу "мсдн" тебя на сайт с доками майкрософта по дефолту выкинет. Так что похуй как он там сейчас называется, суть одна и та же, только пользоваться удобнее стало.
>>2519560 >>2519558 >>2519559 Ну вот мы и сошлись во мнении, что в первую очередь так говорят олды, переадресацию сделали для неофитов, которые услышат от них такую аббревиатуру.
>>2519327 >>В java хорошая многопоточность в отличии от шарпов >дооааа доааа )) Там видимо подразумевались фишки виртуальных тредов.
>>2519327 >А так кто юзает хибернейт? Хибернейт в принципе тема довольно сомнительная нынче. Во многих современных проектах на жабе от него стараются отказываться в пользу нативных запросов и JOOQ.
>>2519327 >асинк/авайт это киллер вещь для работы с корутинщиной и асинхронщиной Обсуждаемо. Делить мир на синхронные и асинхронные функции тоже не есть хорошо. Из всех языков конкарренси для среднего обывателя лучше всего реализован в Go.
>>2519327 >>2519312 А какая разница какой язык круче? Я в свое время писал и на С++, и на шарпе, и на джаве, и на питухоне. В итоге сейчас на проектах с говнолангом сижу. В первую очередь выбирайте проекты, чтобы там были выстроены адекватные процессы и разрабы были нормальными, а не пассажирами с заводов, вкатившиеся по айти курсам. Язык и тулинг это уже сугубо вторично.
>>2519687 Вдруг придётся вручную прикручивать к проекту Tomcat или выучишь дотнет 7, а на работе скажут, а мы пишем на дотнет 8, а ты там нифига не понимаешь, потому что снова всё перелопатили? Вдруг у тебя сломается комп и надо будет писать на слабом ноуте, на котором 10-ку не поставить и вижлу не запустить? Вдруг надо будет написать веб-приложение, а идея у тебя бесплатная и нельзя создать проект на спринге? Вдруг придётся писать под отечественный линупс, а там дотнет не ставится?
>>2519677 >Ну а как бы ты поступил, если у тебя не компилировалось бы? Раньше в книгах по программированию так и писали: "Чел, извини у нас тут дохуя ошибок в листингах программ, но ты разберешься - мы в тебя верим"
как получить делегаты на геттер и сеттер, если на входе объект и его PropertyInfo? с дженериком вместо "????" работает, но я к сожалению не могу использовать дженерик
>>2519725 >>2519692 >Вдруг придётся вручную прикручивать к проекту Tomcat Берешь и прикручиваешь, это делается просто, достаточно парочку гайдов от индусов прочесть.
>>2519692 >выучишь дотнет 7, а на работе скажут, а мы пишем на дотнет 8, а ты там нифига не понимаешь, потому что снова всё перелопатили? Значит берешь и начинаешь понимать, что там они перелопатили.
>>2519692 >Вдруг у тебя сломается комп Тогда я прошу компанию выдать мне новый.
>>2519692 >на котором 10-ку не поставить и вижлу не запустить Ставлю легковесный дистр линукса + vs code.
>>2519692 >а идея у тебя бесплатная и нельзя создать проект на спринге Прошу компанию выдать мне идею ультимейт.
>>2519692 >Вдруг придётся писать под отечественный линупс Попросту не работай в подобных конторах.
>>2519692 >Вдруг придётся вручную прикручивать к проекту Tomcat или выучишь дотнет 7, а на работе скажут, а мы пишем на дотнет 8, а ты там нифига не понимаешь, потому что снова всё перелопатили? А может ты просто даун который не способен осилить несколько страниц текста с описанием изменений. >Вдруг у тебя сломается комп и надо будет писать на слабом ноуте, на котором 10-ку не поставить и вижлу не запустить? Во первых. Ноутов на которых невозможно десятку и студию запустить ты сейчас не найдешь уже в рабочем состоянии, так что не надо пиздеть. Во вторых. Сейчас даже под андроид IDE есть, с автоподстановкой, нюгетами и даже компиляцией на теле. Так что даже в жопе мира можно кодить (как-то так и делал зависнув на неделю без компа в ебенях) >Вдруг надо будет написать веб-приложение, а идея у тебя бесплатная и нельзя создать проект на спринге? Чиво бля? >Вдруг придётся писать под отечественный линупс, а там дотнет не ставится? Ты из какой дыры выполз? Ты сейчас заебешься придумывать линукс на котором нет .net'а.
>>2519731 нет это я тупой и не могу понять что туда пихать чтобы заработало вот это работает отлично, одна проблема только - дженерики использовать нельзя >>2519732 а можно где-то примеры посмотреть? кодогенерация всмысле Reflection.Emit?
>>2519737 А мне кажется, что ты сам не разбираешься в теме и резок на суждения. Старых ноутов дофига и они работают. Это новые ломаются через год, потому что их делают фигово. А старые ещё 50 лет прослужат, а может и больше. Отечественные линупсы не поддерживают дотнет, но зато из коробки есть джава 8 либерика и опенждк. Для примера можешь любой взять, хоть Астру, хоть РедОС.
>>2519768 Эклипс крутой. Спору нет. Есть даже сборки под Спринг бут. Но сам редактор морально устарел Нетбинс вообще не рабочий из коробки. Замаешься его настраивать. VS Code прикольный, но плагин на Спринг не удобный, там тебе выдают последовательно поля ввода, которые надо безошибочно заполнить.
>>2519771 Да я знаю, что ты скажешь. Типа есть веб-форма, где можно заполнить поля и скачать архив с заготовкой проекта. Но это очень не удобно и требует подключение к интернету. А если интернет отключили, а срочно надо что-то сделать!?
Какие есть платформы, и есть ли вообще, для бесплатного хостинга неткор приложеинй? Раньше использовал хероку для ноды и пыхыпы, но сейчас хероку прикрывают на днях. Читаю списки альтернатив хероку и чтот там нету поддержки С# райнтаймов. Куда энтузиасту загружать приложухи для портфолио?
Атрибуты не имеют, и не могут иметь никаких "новых инстансов", и вообще инстансов, не инстанциируются, и не слова "атрибут" и "инстанс" не могут быть использованы рядом.
>>2519974 я не пони это статические классы получается? допустим вот я сделал атрибут пикрелейтед и повесил на несколько проперти а потом на пике 2 их еще в коллекцию положу куда это все ссылается?
>>2519981 теперь я еще больше запутался. я хочу так вот сделать в теории: атрибут будет самостоятельно описывать свой проперти: сделает делегаты на геттер-сеттер, имя для INotify, имя для GUI, какие-то ограничения для элементов GUI и т.д. короче говоря хочу что-то вроде карточки над проперти которая по большей части будет автоматически будет заполняться, а что не будет то прямо над проперти в коде будет висеть - удобно же а затем я хочу вытянуть все эти атрибуты с класса в рантайме и уже через них цепляться. имеет ли смысл морочиться?
>>2519985 >имеет ли смысл морочиться? Имеет, если ты собираешься динамически подцеплять внешние плагины с чужим кодом. Если весь код твои и никакой поддержки расширений не ожидается, то проще эти самые карточки сделать обычными классами без привлечения рефлексии на атрибутах.
>>2519995 >А правда, что когда юзаешь модальное окно (ShowDialog), нужно обязательно диспозить его? Ты про ВинФормы?
ShowDialog это метод формы, ты по сути спрашиваешь надо ли диспозить форму. Ответ очевиден - если у тебя в форме есть неуправляемые ресурсы надо писать свой диспоз и его вызывать, а если форма чисто манагед, то на диспоз можно забить и подождать пока сборщик мусора сам раздуплится.
Cекция using(var shit = new SomeShit()) нужна чтобы формошлепы не забыли гарантировано освободить ресы и занулится.
>Ну допусутим я реализую интерфейс IDisposable, а что там писать? Его надо писать только если у тебя в классе есть неуправляемые ресурсы, во всех остальных случаях - нет.
>>2520066 > Его надо писать только если у тебя в классе есть неуправляемые ресурсы, во всех остальных случаях - нет. Ну вот например в контроллере есть контекст бд, но в шаблоне по умолчанию idispose не реализуется. Почему так?
В конце ты делаешь ToList() и ВНИМАНИЕ у листа есть родной метод реверса. Если тебе нужен иногда обратный порядок группировки можно просто вызвать этот метод конечному результату после линкодрисни.
>>2520211 На синклер бейсике никто не пишет серьёзных программ, а пишут сразу на ассемблере Z80A. Это раньше было сложно достать инфу, а сейчас благодаря интернету можно найти всю инфу по архитектуре Спектрумов.
>>2520215 Дак ладно там бы добавляли новое из разряда: новая функция в библиотеке или новая закорючка в языке. Дак они переделывают полностью язык. Сишарп 1.0 и Сишарп 11 - это два разных языка, как джава и котлин наверно. Я уж молчу про фреймворки, там вообще всё новое в каждой версии. Если взять даже старые книги по ним, то авторы это неоднократно отмечают, что пришлось переписать большую часть книги.
>>2520212 >На синклер бейсике никто не пишет серьёзных программ Воу-воу, палехче. Пишут. И игры даже норм делают. Правда все больше на компилируемом варианте, но пишут.
>>2520228 >Сишарп 1.0 и Сишарп 11 - это два разных языка, как джава и котлин наверно. Угу. И у большинства джавистов одна и та же проблема, всем хотелось бы работать на няшном котлине, но приходится работать на 8-й версии джавы (которая почти 10 лет назад вышла). В то же время на шарпе сейчас найти проекты на версиях ниже 7-й (а сейчас уже наверное ниже 8-й) - постараться нужно.
Да это чисто вкатунская боль, он из книги 2006го года перепечатал в студию, а оно не компилируется, т.к. класса Bitmap нет в .NET6, и начинаются рякания.
Для норм разработки всё это не имеет никакого значения (другое - да, но не это).
>>2520325 >приходится работать на 8-й версии джавы (которая почти 10 лет назад вышла) А в чем проблема, собственно? Да, некоторых удобных фишек в 8 джаве нет, но все основное, включая лямбды и стримы, вполне себе присутствуют. Все последующие версии по факту минорные, может только 21 LTS версия будет популярной, так как туда лум уже могут завезти
>>2520325 >приходится работать на 8-й версии джавы Я бы с удовольствием пошёл работать на 5 версию джавы. Хоть многолетние сеньоры кичатся знаниями, но тогда было легче всё осваивать, чем сейчас. Без лямбд и прочих стримов собес не пройти, а это как бы функциональное программирование, которое требует иного мышления, а не просто ещё одна библиотека.
>>2520418 И веб тоже. Декларативный недосинтаксис хтмл с полной зависимостью от браузера давно по факту вытеснил убеищных JS. Т.е. весь веб исполняемый, а не декаративный как задумывалось изначально. Можно все заменить объектами на любом языке и гонять их по сети на клиент. Мелкомягкие пытались родить что-то похожее в виде сильверлайта, но как обычно не довели до конца и обосрались. Их поражение - наше пролжающеся говноедство ублюдочной функциональной парадигмы JS торчащей из каждого умного утюга.
>>2520448 Да ну. То есть теперь можно сесть и разработать не сервелат, который проприетарный модуль и браузеры ему противились (как и вообще доп плагинам), а сделать можно на wasm и будет счастье?
Но стоп, вот же сделали blazor, а чет не видно массового бега с жс
>>2520302 Дак он наверно на больших ЭВМ компилируется, а на Спектрум заливается образ в машинных кодах. Насколько помню такие компиляторы и раньше были, но ими никто не пользовался, потому что они съедали половину ОЗУ и на программу ничего не оставалось.
>>2520433 Да. И в этих аплетах можно было реализовать приложение без браузерной прослойки хтмл-цсс-жс, плюс нормальное апи для бека. Неудобство только в том, что пользователям надо ставить фреймворк и аддон на браузер, зато с точки зрения разработки каеф - пишешь почти нормальный десктоп, за исключением данных прилетающих по сети.
Алсо, я как-то давно забредал на сайт посвященный алгоритмам поиска путей, определения видимости, разбиения полигонов и прочими такими задачками для игор/графики. На нем все примеры были сделны в аплетах на жаве. Можно было алгоритм из статьи сразу пощупать в живую - поменять данные, мышкой подергать обстаклы и все такое. Был удивлен как все удобно и без тормозов, просто космические технологии древних.
>>2520453 >blazor Он же вроде компилируется в жс на фронте? Это другое.
Идея в том чтобы вообще выкинуть каличный браузерный стек оставив одну запускалку объектов полученых из сети, а дальше они пусть сами ебутся с логикой и отрисовкой всего что нужно.
>>2520543 строку запроса парсит сам движок и биндит тебе на параметры, только называй их правильно и аттрибуты вешай если нужно а сущность нужно если ты хочешь распарсить post или гет запрос сразу в объект вместо параметров к action
>>2520066 >Если весь код твои и никакой поддержки расширений не ожидается ага, весь код мой. я хочу свои собственные классы динамически подцеплять. я хочу. биндингов там где я макакирую юнити нет, поэтому мне приходится велосипедить, суть такова: есть мои сущности, к проперти которых я хочу подцеплять свой UI, двухсторонним манером 1 проперти к коллекции UI элементов. сущности я потом планирую дополнять, возможно менять по мере разработки и хотел бы сделать биндинг этот максимально приятным и открытым для себя же в будущем чтобы потом таскать его в другие проекты. я хочу сделать что-то вроде репозитория где ключом будет тип, а данными - класс-коллекция открытых делегатов на все геттеры/сеттеры декорированных атрибутом проперти и вытянутые из атрибута данные(имя для UI, ограничения т.д.) если попадается класс, которому нужно рисовать UI, то сначала смотрится репозиторий, если там ничего, то создается с рефлексией и фильтром по декорированным проперти и отдается. а если и там нет и атрибутов нет, то орать на весь поезд и требовать остановки потому что классы без атрибута не имеют права в этот обработчик вообще попадать и я где-то проебся. в итоге по идее должна получиться система, где хардкодиться будет только имя проперти для UI и прочие вещи которые я хочу в конструктор атрибута передавать, но т.к. это будет висеть прямо над проперти, то там все сразу будет наглядно видно а всю дичь с рефлексией можно и под капот и она будет крутиться только один раз для каждого декорированного типа, а потом просто раздавать кешированные данные классу отвечающему за создание UI единственное что я пока не допер как делать каким образом правильно запилить открытый делегат буду благодарен если мне укажут где я дурак и как сделать правильнее
>>2520560 Проблема в том, что я могу забиндить параметры только к строкам, так как например min и max у меня могут быть разных типов, в зависимости от выбранного свойства для фильтрации. В итоге мне приходится писать большую портянку из switch case. Я и спрашиваю, уместно ли эту портянку оставлять в обработчике, или лучше вынести в отдельный класс.
>>2520573 >единственное что я пока не допер как делать каким образом правильно запилить открытый делегат Вот это непонятно. Что за открытый делегат? Ты хочешь атрибут который указывает метод-обработчик события?
>>2520573 какой еще открытый делегат. геттеры сеттеры тебе делегаты не помогут. Ты просто не сможешь скастить к Func<T> ведь у тебя нет этого самого T Ты достаешь PropertyInfo и далее генеришь геттеры/сеттеры через expressions или emit и складываешь в словарик и используешь. Конечно ты не сможешь избежать боксинга ведь в этот словарик нужно положить геттер сигнатурно одинаковый, а значит Func<T, object>
Другое дело если ты используешь методы маппинга сразу чтобы не было лишнего object (но это не твой случай, ты же не маппер пишешь)
Вопрос от нюфани: почему во всех примера на шарпе я вижу, что сперва создают объект класса, а только в самом конце программы непосредственно сам класс. Разве программа не выполняется последовательно, сверху вниз? И экземпляр еще не может быть создан до инициализации класса.
>>2520737 Последовательно выполняются инструкции внутри функции. А все определения классов, перечислений и тд, заносятся в метаданные во время компиляции.
>>2521168 очевидно же дропнуть первый метод и нормально переписать второй а еще бросить шарп и уйти работать в пятерочку, а то там вечно на кассе не хватает людей.
>>2518236 Для дтошек использую Requests/Responses И опять же к каждой дто добавляю постфикс Request/Response чтобы быстро понять что это. Когда их много можно группировать по фичам/версиям апи(иногда все вместе). Вообще иногда есть смысл для контрактов завести отдельный проект, где у тебя сообщения для шины и запросы/ответы шарятся между проектами.
>>2521662 >куда отправляющий разве важно куда? там get запрос на получение данных из одной системы (типа 1с предприятие) и post запрос во внутреннюю систему компании. Иными словами, тупо перекидывание данных. нужно сделать так, чтобы это происходило каждые 15 минут. >причем тут вообще IIS приложение должно быть на asp.net, такие приложение разворачиваются в IIS
>>2521660 >ты о чем вообще? О том, что в NetFramework WPF-проекте я вообще не парился, если в xaml-разметке присутствовала кириллица. Я даже порой иконки тащил прямо из символа юникода, если надо какую стрелку вставить.
Щас сделал проект на NET6 и компилятор ругается, что присутствуют недопустимые знаки. Даже если это Text="ываывыва" в TextBlock, даже если это комментарий (тебя ебет, компилятор?). Специфическая универсальность по версии майкрософта, это не когда ты "можешь и там и здесь", а когда ты "не можешь ни здесь, ни там".
Щас почитал SO, все предлагают вставлять коды символов. Вы, блять, больные? 22й год на дворе, вернулись в каменный век. Я себе типа жизнь облегчить хотел, а не решать новые пробелмы.
>>2521695 Ну так и делай что задумал. Ну а что еще делать то делай asp.net проект, пусть принимает запросы. IIS ему особо не нужен, но если хочется, то...да твое дело. И в нем сервис IHostedService/BackgroundService где while(!ct.IsCancellationRequested){ делаем работу await Task.Delay(Timeout.FromMinutes(15)) }
Ну а при внешних запросах меняй в нем что хочешь - это ж singleton (только придется правильно в DI регать)
>>2521655 >Нужно создать веб-сервис, который будет разворачиваться в IIS ASp.Net, только ему необязательно в IIS разворачиваться. >отправляющий запросы в определённый интервал времени. Что почитать по этой теме? Quartz.net
шарпаны, есть два разных интерфейса, наследовать один от другого или от общего базового не хочу можно ли сделать так, чтобы если в классе определен один интерфейс компилятор ОБЯЗЫВАЛ меня определять второй там же?
>>2521720 Нет, ты уж прям хочешь какого-то совсем необычного поведения на уровне вангования. Это же ведь суть интерфейсов — быть смиксованными и уже потом реализоваться. Это же буквально шаблон из трех слов. Уходит традиция, тонкая традиция, когда ты берешь спокойно IКартофель, IМорковь берешь, IБаклажаны берешь, или еще берешь, например, это ... и IМорковки берется например, берется и забираются IДети и IСтарыеЛюди, собираются где-то на Кухне.cs, или если угодно вам ... или если угодно вам в КухонномПритворе.csproj, собираются интерфейсы и спокойно делается руками всё. От этого миксера пошла и микс-культура. Микс-культура нарезается в подпольных фабриках...
Граждане, шарполголики, такой вопрос. Есть некое ASP MVC веб приложение на древнем netframeworke. И у этого приложения при попытке паблишинга где-то лапками прописанно к бэку еще и одновременно паблишить и фронт и складывать его в wwwroot и студия пытается подавать команды node и на них и сыпется. Меня интересуют небольшие правки на беке, мне в хуй не уперлось паблишить одновременно с ним виснущий фронт. Как в древнем netframeworke потререть дополнительные, прописанные лапками, команды при паблишинге. В коре это, кажется делается в csproj. А тут де?
Есть TermBaseRegister и есть TermStorageRegister : TermBaseRegister
TermStorageRegister уже есть в БД (кодфёрст еф6 все дела). Теперь хочу добавить в БД TermBaseRegister, но при миграции ЕФ норовит просто переименовать TermStorageRegister в TermBaseRegister. А мне надо чтоб это две разные таблички были
Подскажите плиз как ЕФ заставить создать вторую табличку, а не переименовывать старую
>>2522741 как хочешь. тут все фломастеры некоторые любят шину за косвенность другие хейтят шину за косвенность кто то делает синглтон кто то таскает с зависимостями кто то просто строки как имена событий и отдельно объект данных кто то юзает целые объекты как события кто то делает получателем метод подходящей сигнатуры а кто то делает интерфейсы типа IReceiver
>>2522741 А еще кто то просто шлет сообщения ака события типа "всех уведомляем" другие же делают Domain Events - тут уже и события ДО самого события даже можно послать. А то и вообще пытаются сшивать части чтобы они друг о друге не знали, а чисто кидались С ОТВЕТАМИ друг в друга, возможно даже инстанцируясь при этом (mediatr)
Т.е. меня в базовом классе есть ссылки на другие классы а ля TermBaseRegister { ... public User Agent {get; set;} ... } И при попытке миграции я получаю ошибку The association 'TermBaseRegister_Agent' between entity types 'TermBaseRegister' and 'User' is invalid. In a TPC hierarchy independent associations are only allowed on the most derived types. Т.е. вот эти ссылки должны быть у наследников только (Я так понимаю в TPC базовый класс чуть ли не абстрактным хотят видеть) Можно конечно в TPT попробовать, но это же кал говна ебаный, от которого только головняк при сборе данных будет кмк
>>2522741 >а как ее сделать? Например как на пике.
Шина событий - это просто класс который споставляет TEvent => список обработчиков.
Любой объект может подписаться на нужное ему событие: Bus.Subscribe<MouseClick>(this.MouseClickHandler);
Любой объект может отправить событие в шину: Bus.Send<MouseClick>(new MouseClick(X, Y));
Все кто на него подписан, получают объект класса события и что-то с ним делают.
>и как сервис прокидывать Просто в конструкторе передаешь инстанцию шины. Или еще проще - делаешь шину синглетоном, но это не тру.
Небольшое замечание: на пикче использованы слабые события, чтобы не было нужды явно отписываться от шины, когда класс получатель становится не нужен. Если использовать обычные делегаты, то нужно отписывааться явно, чтобы не получить утечку память. Слабые события создают меньше головняка с правильным удалением объектов, но внутри у них уличная магия.
>>2522824 >когда класс получатель становится не нужен Вот только отписка так будет только когда GC придет А до этого так и будет получать уведомления и реагировать, хотя уже не нужно
>Слабые события создают меньше головняка с правильным удалением объектов самый лучший подход это сильная (ну то есть не слабая) подписка с lifetime-ом
>>2522832 >Вот только отписка так будет только когда GC придет Ноуп. В моей реализации дохлый класс отпишется когда произойдет любое событие на которое он потписан.
Порядок действий примерно такой: 1. На объект теряются все ссылки. 2. Отрабтавает GC. 3. Становятся невалидными все ссылки в слабых событиях на него. 4. Проходит много-много времени... 5. Происходит событие на которое был подписан уже несуществующий объект - все дохлые ссылки на него чистятся. Вызываются обработчики только у живых объектов.
Оверхед только в том, что некоторое время в шине есть дохлые слабые события. Они могут накапливаться если событие не произойдет никогда, но это очень маловероятный сценарий. я такой ни разу не встречал.
>самый лучший подход это сильная (ну то есть не слабая) подписка с lifetime-ом Можно и так.
>>2522836 у тебя вера в то, что пункт 2 произойдет быстро. На деле твой объект лежит во втором поколении и неизвестно когда GC почистит второе поколение.
>>2522850 Вспомнил лузный флаг IsDisposed и его проверку в каждом публичноv методе. Не вижу проблем добавить еще один флаг IsDead чтобы запретить прием нежелательных событий после кончины объекта. Один флаг всяк проще чем отписка от 100500 событий в шине.
>пункт 2 произойдет быстро Алсо у меня такой проблемы не было. Высокоуровневые события происходят оче редко, между ними всегда успевает встрять GC.
>>2522853 >Один флаг всяк проще чем отписка от 100500 событий в шине. отписка всегда лучше. Ведь сам компонент может продолжать жить, просто не нужные ему события. А значит без механизма явной отписки никуда.
Нужна агитация за использования лайфтаймов, чтобы народ перестал страдать фигней и сразу делал правильно.
Про dispose все знают - понятно, но это не более чем информация "меня очищать нужно так то".
Но не более. когда очищать? как вызвать? очищать ли вложенные IDisposable?
Кто то же должен отвечать за вызов Dispose (мы не говорим конечно про примитивные вещи которым хватит using)
А значит кому то доверяется знание про время жизни. Те же scope в DI могут диспознуть рожденные ими зависимости если они были добавлены как scoped. Неплохо работает в асп.нет где есть явнопонятный scope "запрос" или в простом коде где можно выделить scope, но если что то сложное, долгоживущее, многопоточное, то неудобно.
А значит делаем явный лайфтайм - он определяет область жизни компонента и передается в компонент и с ним компонент подписывается, создает дочерние лайфтаймы. В общем то у самого компонента нет метода Dispose - он подписан на лайфтайм Когда лайфтайм схлопывается, то диспозятся и сам компонент и всё подписки отписываются и вообще происходит очистка всего
В общем то если даже у нас не супер сложный код, то все равно можно использовать эту явность. Просто это непривычно "я не пишу сложные штуки зачем оно мне..." Удобно же что списки принимают лайфтайм, события принимают лайфтайм - отписка пройдет автоматом и не разделена "подписались в конструкторе и отписались в диспозе который хер знает где внизу портянки и вообще если не забыли отписаться" (с лайфтаймом забыть отписаться невозможно.
Слухайте, а если я забыл задиспосить то, что следовало бы. Когда оно исчезнет и перестанет мешаться? После остановки приложение? После перезагрузки компа? Никогда?
>>2522936 Ресурсы не обязательно управляются сборщиком мусора или операционной системой. Это может быть, к примеру, временный файл, который надо явным действием удалить, или завершение сессии пользователя на сервере, для чего надо отправить туда запрос. И всё это придётся делать в Dispose.
>>2522912 Если очень просто, то это как CancellationTokenSource и CancellationToken, где CancellationToken
LifetimeDefintion и Lifetime - выглядят похожие на пару выше как братья. принцип использования и работы идентичен. У обоих есть и флаг состояния и методы вида с семантикой подписки Register И можно создавать дочерние
Просто у Lifetime семантика другая - не "отмена", а "компонент умер". Ну и разные плюхи чтобы диспозилось в обратном порядке.
Семантика это важно. Вон мелкие используют CancellationToken как события appllication в асп.нет, что вызывает недоумение - ну да, там есть Register но как бы от CancellationToken ожидается отмена, а для событий есть...ну event
У меня в таблице есть два поля: дата начала и дата завершения. Можно как-то с помощью атрибутов или fluent api задать условие, согласно которому первая должна быть меньше второй?
"Вообще-то, самая соль там в топовых комментариях (перевод которых стоило бы добавить в начало статьи), где автору справедливо указывают на то, что это не очень ок - предъявлять претензии MS за участия неполноценных фреймворков в бенчах, и тут же сравнивать полноценный фреймворк (full mvc) который занял "лишь 109 строчку", с никем не используемыми реализациями на других языках, о которых никто не знает, которыми никто не пользуется, и которые делались исключительно для бенчмарков.
Хочешь сравнить с php - бери laravel, Yii (374 строчка), а не mixphp. Хочешь сравнивать c Java - тогда где Spring? А, на 351ой.."
>>2523007 Ну наебали с результатами значит наебали, чего бухтеть? Жаль конечно нашего techempower-шизика, он с этой таблицей носился по всей борде больше года, а тут такое вскрылось...
>>2523007 А что там? Снова мухлюют с бенчмарками? Вот это новость (нет).
К слову о том, когда спрашиваешь линуксятников, а проверил ли каждый из них "исходный код", прежде чем ему доверять, на что те отвечают, что умные люди давно все проверили. Ага, ага.
К сожалению мы живем во времена пыли в глаза и впечатлительных людей, иначе пройдут мимо.
>>2523062 ну шину легко сделать или взять готовую а вот выбирать как с ней работать - тут сложно можешь держать, передавая через конструктор может статик (те же Domain Events если будешь гуглить то сплошные статики) а можешь как медиатр - посылатель через конструктор, а вот получатель только реализует интерфейс и сам не подписывается. (но вот лично мне такое не нравится - если подписчик не инстанцирован, значит нечего его будить)
>>2523087 если шину передавать через конструктор то это получается во всех объектах которые создают объекты, которым нужна шина, ее надо держать в референсах т.е. к прочим параметрам при создании надо еще и шину добавлять если у меня например создание: MyObject o = new myObject(arg1, arg2, arg3); то с шиной будет MyObject o = new myObject(arg1, arg2, arg3, bus); или можно как-то иначе?
>>2523094 ну да, зависимостей много но как бы их создает DI
но это как и с логгером. кто то принимает Ilogger<>, другие считают что логинк это вообще "cross cutting concerns" и делают статиком (я статиком)
так что тут выбор из "что меньше бесит и мешает тестированию" 1 статик 2 параметр 3 ambient context, что делают с логгированием, но с мессенджером как то смысла нет, ведь это тот же пункт 1
Можно ведь хотеть разные месседжеры, а можно один статик, но сделать в нем "каналы"(или токен слать с сообщением как доп метка)
В общем кинь монетку
Я как то заморочился и у меня 1 во вьюмоделях мессенджер имеет события с текстовыми именами, вызывает методы и имеет токен. Неудобство - только в рантайме узнаешь, что тип объекта данных не подходит 2 а вот подобие домаиневентс - там классы определяют событие. Целевой класс может иметь несколько хендлеров. Удобно подписывать, неудобно отписывать (обычно и не нужно) 3 я не люблю медиатр с его DI - да ну нечего будить компоненты, да и вообще такая тотальная косвенность приводит к тому что непонятно где что кого. Поэтому у меня подписки явные. Отписки - lifetime отпишет
>>2523026 Спасибо за ответ, воспользуюсь атрибутами. Только тогда возникает еще один вопрос, вот у меня есть класс представляющий таблицу, например book, и класс bookdto, который я использую для получения жсонов, мне получается нужно будет дублировать атрибуты, это не считается плохой практикой?
>>2523124 Мечтаю вкатиься шарпы, но работа не дает. Два тимлида заставляют сидеть на их технологиях: питухонеры и паскалисты. Это какие-то два микроада. Как хитростью незаметно перевести их на рельсы шарпа?
>>2523142 >и паскалисты Ебать тебе повезло, аж завидую малость. Хоть нормальный ЯП попробуешь перед тем как твои мозги будут безвозвратно съедены питоном, шарпом или жабаскриптом.
>>2523201 Нет. Столяров швабодошизик, который боится исполнять чужие покакуньуки на своем калькуляторе. Я свободный от этих предрассудков человек и готов получить и выполнить вирос-шифровальщик хоть по почте.
Паскаль я уважаю, из системных языков он топовый. Самое лучшее отношение граблей к полезному результату. Там где на сишечке будешь охуевать от УБ при выделении памяти и ловить сегфолты работая со строками через указатели, в паскале все делается легко и непринужденно без подводных камней.
>>2523217 Нельзя же. Конпелятор go держит программиста за тупое быдло и постоянно его унижает. Чего стоит хотя бы форс стиля скобок, бесконечные ублюдочные проверки err там где надо и ненадо. Не нужно использовать языки которые умнее тебя в плохом смысле этого слова.
>>2515951 (OP) Можно ли использовать razor вне asp.net? Допустим, считываю строки с файла и передаю их и модель/анонимный тип в соответствующий метод, который возвращает строку.
Хочу расставить все точки над "и" по поводу словарей ресурсов. Я уже задавал вопрос, но его смыло и, в общем, обсуждение перетекло в другое русло. Платформа NET6.
Короче, каково влияние на производительность слияния словарей ресурсов? Мне не удалось расшарить ресурсы глобально, по крайней мере я пришел к мысли делать в каждом проекте локальный словарь, который мерджит словари из другого проекта.
Но появилась проблема, что пока у меня стиль дойдет до UI-элемента, он проходит через пять объединений словаря. А этот элемент будет помещен внутрь другого, который использует все те же ресурсы. И получается какое-то многократное переиспользование одних и тех же словарей.
У меня вопрос, это студией как-то фильтруется? Как-то она чистит вилкой? Потому что, если все оставить как есть, то это будет пугающе для производительности.
>>2523349 хз о чем он пишет если он про что то что в словаре - ну конечно создается, а как иначе (ну для решения этого вроде есть x:Shared). А "ссылается на словарь" - непонятно что это
>>2523107 нашел вот такую, статическая шина, не знаю пока буду ли делать обычной, но мне оче понравился т.к. я могу тупо интерфейсы свои унаследовать и они сразу заработают как надо: https://github.com/velik97/EventBus я допилил в него свое понимание lifetime(выделил на пиках) enum из двух записей: once, repeating внутри листа подписчиков(пик 1) сделал словарь подписчик - enum и метод возвращающий enum подписчика при подписке по дефолту передаю repeating в конце каждой инвокации(пик 2) проверяю, если enum once, то удаляю из листа подписчиков отписываю и удаляю kvp из словаря единственное что на каждый лист подписчиков должен быть свой словарь и наверное надо будет еще и проверять что ключ такой вообще есть прежде чем возвращать через GetLifetime, хотя если подписчик есть в листе он должен быть и в словаре и наверное проверка просто избыточна...
>>2523194 >>2523196 Остался огромный легаси проект по взаимодействию с БД Firebird, в котором храняся данные о товарах и клиентах кабанчиков. Это БД говно, которое нельзя дропнуть, но работает во всяких лазарусах из под коробки.
Для каждого отдела свой ГУИ, который вызывает окно, в котором окно, в котором еще окно. Собственно в каждом окне новая таблица из джойнов или селектов. Вложенность уровня на 3 минимум. Фич так дохуя, что проще доку на 50 страниц ебануть либо каждому пользователю тет-а-тек показывать как работает. Кабанчики охуевают и не могут рабобраться в меню программы лол. Сложно слишком
Проект просто тысячи тысяч строк ибо там штук 5 отделов. У каждого штук 7 таблиц, которые вместе составляются джойнами в другие таблицы (минимум 30 таблиц). Ну и постоянно идет добавление сранных полей. Кабанчики это любят пиздец. Я не работаю с этим, а мой коллега создавший этого огромного монстра. Там можно и документ создать, и в печать отправить, и картинки посмотреть, и чего только нет чем пользуются раз в 100 лет. Оверинжиниринг во все поля.
Проект не рефакторится годами, а только расширяется и обрастает фичами уже хуй знает сколько лет. Все на старом паскале, вроде семерке. Док не существует, а есть только живой автор программы в наличии.
Думаю со временем мне поручат сделать более упрощенные аналоги с такими характеристиками: - сделать много маленьких программ вместо одной большой на отдел для разных задач с максимум 2 уровенями вложенности вместо 3-4 чтобы даже секретутки могли без жопной боли пользоваться - написать простенький мануал - использовать свежие исходники (лазарус) - использовать рукописный код (местами быстрее дефолтных компонентов) от текущего проекта
В чем суть xaml? Почему форму предлагают набирать текстом вместо того чтобы ее удобно нарисовать в десингере? Рыться в атрибутах хмла по памяти vs щелкать удобные кнопочки в инспекторе свойств - почему выбирают первое?
>>2523644 А ты попробуй. И когда надоест выискивать нужный контрол в тулзах и нужное свойство в свойствах, да надоест пытаться попасть в нужное место на дизайнере, да design-data впиливать чтобы визуал был, да постоянно править хамл за дизайнером, а стили так вообще дизайнером никак, то вот придешь и напишешь ответ челу что спрашивает "почему предлагают набирать текстом"
>>2523644 Пжди, в дизайнере тоже рисуется на xaml. У меня даже стили как таковые основаны на UserControls, чтобы в риалтайме видеть превью, а сам стиль — чисто привязка данных к общей теме или комбинация вариаций UserControls. Но таки да согласен, что синтаксис ксамл — мегауебанская вещь, но лучше, чем ничего.
>вместо того чтобы ее удобно нарисовать в десингере? Как нарисовать с зависимостями и привязками? Это надо что-то уровня шаблонов CAD делать (впрочем, я не против), но наступит момент, который кроме как кодом не выразить никак — появится очередная сепарация, что запутает еще сильнее.
А так, я все сложное и так рисую в векторных редакторах, а потом экспортирую как SVG. В целом, получился такой многоступенчатый процесс от общего к частному и количество xaml-разметки сведено к минимуму — служит тупо для ввода параметров.
>>2523644 1. Окно свойств полноценно не доступно для стилей, а без них будет двойная работа. 2. У меня оно находится на втором мониторе, да и панель элементов свернута. Т.е. речь идет о скорости доступа. И порой ме-е-е-е-дленное выдвижение панели элементов с анимацией настолько бесит, что легче начать писать <But и автозаполнение само все напишет быстрее, чем если бы ты вел курсор к панели элементов, искал в списке Button, а потом эта кнопка естественно помещается не в тот контейнер — ты снова лезешь в xaml и вырезаешь и вставляешь в нужное место, потом тебе нужно в эту кнопку что-то вставить, и тебе нужно менять укороченный вариант тэга на расширенный (в то время как при печати тебе достаточно напечатать "/" чтобы получить короткую версию и ">" чтобы получить расширенную)
А так кто как хочет, то так дрочит. Результат один и тот же. Сам использую и то и другое, особенно использую окно свойств, когда забываю как назывался параметр.
>>2523480 я не понимаю твое понимание lifetime и что ты вообще под этим понимаешь
lifetime token идентичен CancellationToken. Вот как ты получаешь CancellationToken и по нему можешь узнать что тебе нужно остановиться, и передаешь его дальше.
Так и lifetime токен ты получаешь извне и он означает время твоей жизни. И ты сам следишь за этим токеном и диспозишься когда токен всё, а также передаешь его другим с семантикой "вот мой токен, когда он протухнет, значит я умер, отпишите/удалите меня у себя"
допустим у меня MVVM. У меня есть окно/workspace и он держит у себя LifetimeDefinition (аналог CancellationTokenSource) и всем раздает токены lifetime. Когда окно закроется, то lifetime протухнет и всё зависящее схлопнется. Моя вьюмодель зависит от времени жизни окна (она должна умереть с закрытием окна) и получает токен lifetime в конструктор. Теперь она может подписаться на смерть окна, а также передать этот токен дальше чтобы все кооперативно узнали, что компонент сдох и больше не живет.
В случае с шинами это берем любую реализацию у которой есть подписка отписка вида (допустим шина с интерфейсами хендлерами может выглядеть так bus.Subscribe(obj) bus.Unsubscribe(obj)
и пишу метод расширение static void Subscribe<T>(this Bus bus, Lifetime lifetime, ISubsciber<THanler> subscriber){ lifetime.Bracket( ()=>bus.Subscribe(subscriber), ()=>bus.Unubscribe(subscriber), ) }
и использую во вьюмодели
bus.Subcribe(lifetime, this)
мне не нужно бояться что я забыл отписаться. когда мой лайфтайм (в котором я живу) сдохнет, то все отпишется. я (вьюмодель) даже не знаю что кому то нужно отписываться. У меня нет диспоза и я не хочу знать что у кого то он есть - я передаю им токен жизненного цикла в котором я живу и пусть сами разбираются.
по факту расширение адаптирует любую стороннюю шину но неудобно ибо легко забыть взять перегрузку с lifetime поэтому я обычно делаю форк шины где удаляю обычные методы подписки
сап, пришло время таки укатиться с js в какой нить другой язык, выбрал сисярп начал писать свою обертку над апи телеги карочи см пик 1 жсон результат запроса - ок выводится см пик 2 хули GetMeResponse? requestResponse = JsonSerializer.Deserialize<GetMeResponse>(result); null возвращает?
алсо вопрос по пик2 см пик 3 мне тут райдер подсвечивает шо поля должны называться с заглавной буквы, хотя в апи телеги ключи в жсон с маленькой, как это обойти?
>>2523896 а блин, рили, в глаза долбанулся и не прочел что пишет, слишком часто это сообщение видел о том что с заглавной поля должны быть пиздос наркоманство кстати
>>2523901 Не знаю как в шарпах, но в бейсике с заглавной нужно писать публичные свойства, а не поля. А вот приватные поля в шарпе точно пишутся с малой буквы. Насчет публичных полей — вопрос, вроде как не делают так.
Но опять же это просто замечание к общим стандартам форматирования, а не ошибка.
но вообще это очень простая вещь CancellationTokenSource + CancellationToken TaskCompletionSource + Task LifetimeDefinition + Lifetime
они как братья - все дают токен, который передается всем желающим и могут следить за изменением токена. А менять состояние токена может только тот, кто его создал
Lifetime токен имеет implicit cast в CancellationToken
Если вдруг в юнити нет CancellationToken то как же вы отменяете операцию что перестала быть актуально?
Ах да, для своего псевдомодального окна >>2523950 я использовал TaskCompletionSource. Создаешь CancellationTokenSource в функции Show и функция уходит в ожидание, пока ты делаешь в окне свои дела, а потом в событии Close меняешь флаг CancellationToken и функция Show возвращает результат. И все работает без всяких бесконечных циклов.
А CancellationTokenSource использовал в асинхронных функциях с бесконечными циклами, чтобы прервать их работу. Например когда пытаешься подключиться к серверу, а он долго не отвечает. Тогда ты меняешь флаг в токене и асихронная функция это детектит и прекращает свои попытки подключиться к серверу.
>>2523966 А что у вас в жабаскрипте по умолчанию true?
По поводу Null, не все приняли однозначно нововведение, это вроде можно отключить в настройках. У меня в бейсике булевые переменные по умолчанию false возвращают.
>>2523964 >А CancellationTokenSource использовал в асинхронных функциях с бесконечными циклами, чтобы прервать их работу. ну вот лайфтайм то же самое, просто семантика "вы еще живы" при отмене CancellationToken ты прекращаешь операцию, при терминации лайфтайма ты выполняешь отписку/очистку и те же отмены операций если что то выполняется (lifetime передается туда где принимается CancellationToken)
Ничего этакого в идее нет. суть в реализации - жетбраинсы поясняют проблему порядка терминации, многоступенчатой терминации, выполнение тасков (которые пока выполняются запрещают смерть лайфтайма чтобы гарантированно жил ресурс) и так далее.
>>2523981 Так GetMeResponse это класс, кек. При чем здесь геттер и сеттер? У тебя там в поле щас пусто — Nothing (Null в этом вашем шарпе). Никто туда не поместил новых экземпляров, вот и пусто. А если поместят, то вернет экземпляр этого класса (че ты там хотел выводить в консоль? Как ты это себе представляешь?)
bool ok — это ваще структура, а структуры имеют дефолтные значения. у int это 0, у bool это false. В новых версиях шарпа и структуры можно заставить возвращать Null, но это другая история.
у полей ok/result нету геттера и сеттера соответственно JsonSerializer.Deserialize<GetMeResult>(result); просто не смог туда ничего сложить насколько я понял
>>2524009 Ах вот ты про что. Ну про причуды шарпа я не знаком. В бейсике есть укороченное свойство как у тебя написано без геттера и сеттера, а есть расширенная — с ними.
Поля вообще так не используют, они больше используются внутри классов. Для "внешнего мира" используют свойства.
>>2524031 да то же самое же. нет никаких отличий есть поля, есть свойства. Все пишут get/set на автомате забыв различия
>>2524035 сериализатор жсон работает со свойствами просто "ну все используют свойства" кто хочет чтобы сериализатор видел поля нужно использовать опцию JsonSerializerOptions.IncludeFields
А имена дай нормальный и используй [JsonPropertyName9"aaa")]
>>2524051 >Я только сейчас задумался как вы вообще отличаете поля от свойств. Свойство - это по сути сахар над полями, позволяющий их инкапсулировать. Конвенционально - в шарпе не принято делать публичные поля. Т.е. все что ты делаешь публичным должно иметь геттер и/или сеттер/инициализатор (развернутые или пустые - не важно) private int _myVar; - поле public int MyVar {get; init; } - свойство public myvar; - говнокод Это все, естественно, если ты кодишь в ООП стиле. Если что-то другое, то можешь не заморачиваться.
А есть какой-то способ выгружать ресурсы у TreeView? А то чем больше открываю вкладок, тем больше оперативы жрет. При этом скрытие оперативу не снижает.
Выстраивал по MVVM паттерну. У меня же все сбиндено ко вьюмодели. Я же не могу просто удалять итемы — иначе удалятся ноды из базы.
Шарпач, подскажи. Есть пакет microsoft.extensions.dependencyinjection Регистрируем сервис: interface IService {} class Service : IService { public Service() {} }
services.AddTransient<IService, Service>();
А как зарегистрировать сервис c параметром в конструкторе?
class Service : IService { public Service(string yoba) {} }
>>2524564 Это заговор, чтобы заставить тебя страдать!!! или нет это просто показывает твою ничтожность, что никто не хочет уделять тебе внимания!!! - вот
или все гораздо проще - первой ссылкой открывается код, который ни о чем без задачи А потом открывается сама задача и там "чет страшное на буржуйском, влом разбираться"
- Простыня из if-ов - Магические цифры (имею в виду индексы массивов), через день ты заебешься вспоминать за какой период у тебя отвечает _data[2] - Использование массивов в логике. - Если придется добавлять какой-либо период (например недели), то это будет ебанина.
смотри, тут принцип простой, когда встречаешь код как на пик1 можешь начинать думать над рефактором, сейчас ты копипастишь вайл циклы, завтра копипастишь функционал в 3х разных местах
пик2 та же трабла с копипастой тебе точно в каждом ифе нужно проверять _timeItmes?
ну и _data[n] как анон сказал никуда не годится, хэшмапу штоли юзай или словарик я с доступом по ключу
и нейминг, да, что вообще за _data? Ты бы смог в моем коде, если бы встретил data[4] понять что получишь на выходе не смотря в место где происходит инициализация понять что вообще за _data и что я получу на выходе?
>>2524723 >>2524737 Спасибо. Со всем согласен. Нужно наверное было после того как прошлись тесты - посмотреть свежим взглядом и избавиться от простыни ифов и циклов.
>>2524723 А вот к тебе еще и вопрос. Ты сразу сел и придумал такое решение? Просто как? Я вот не понимаю. Я - написал тестики по примеру задачки. Начал писать реализацию. Сделал. Тестики прошлись - залил на кодварс. А как придумать сразу чтобы красивенько было - хз...
>>2524742 >Ты сразу сел и придумал такое решение? >Просто как? Знания и опыт. 1) Изучай инструменты которыми пользуешься. Во первых специфические (напирмер сам C# и его библиотеки, фреймворки), во вторых общие (саму теорию программирования, математика, логика, комбинаторика и т.д.) Вот тебе пример. Если посмотреть на пример из твоего же кода на пике. Ты берешь общее значение секунд и вычитаешь из него значение года в цикле, чтобы определить количество лет помещающихся в нем и остаток на другие периоды. Тогда как знай ты математику знал бы, что это решается всего двумя действиями. Первое результат целочисленного деления years = second / year и второе результат остатка от деления nextPeriod = second % year Ты не используешь этого нигде. Почему? Потому что когда ты изучал базу, ты в раздел возможные операторы максимум один раз заглянул и перешел дальше. Ты не прорешал базу, например не разобрал как работают разные типы деления в языке. Это как в школе пытаться решать квадратные уравнения не изучив при этом таблицу умножения и вообще его принципы. Так же и в программировании. 2) Возьми себе за основу, что если ты пишешь код в котором есть повторяющиеся куски, то это плохой код. Если ты написал два одинаковых цикла, отличающиеся только парой переменных, то это нужно переписывать. Понятно, что из этого правила есть куча исключений, но в большинстве случаев это работает так. Увидел повторяющийся код, хотя бы попробуй переписать так чтобы его не было. Например в моем примере тоже есть место которое можно улучшить, цепочка одинаковых вызовов GetTimePart, которые можно было бы засунуть в цикл, если немного помудрить с константами и засунуть их в словарь. 3) Практика и задрачивание. Вот если ты набрал код с моего скрина >>2524723 , погонял его в отладчике, понял как он работает. Попытался его доработать и улучшить по своему, вот тогда тебе это пошло на пользу. Почитай еще что-нибудь по теме. Например если ты почитаешь инфу по типам TimeSpan, DateTime, а так же форматированию при их конвертации через ToString, то поймешь, что вообще в C# эту задачу можно в несколько строк решить.
>>2524365 Лучше так не делать. Всё-таки прелесть DI-конструкторов в соблюдение принципа DIP.
>>2524910 >1) Изучай инструменты которыми пользуешься. Во первых специфические (напирмер сам C# и его библиотеки, фреймворки), во вторых общие (саму теорию программирования, математика, логика, комбинаторика и т.д.)
Например изучить TimeSpan, который по умолчанию конвертирует секунды в минуты, часы и дни.
>>2524988 Кек. Ты заставляешь страдать юзера, который будет пользоваться твоей функцией. В подсказках у него будет @example. За что ты так с ним? Ты бы еще такое имя дал: ADF4-367T-DE7R
>>2525007 >>2525011 ну замените собаку на что угодно например newX или _х если так не нравится собака, суть-то не поменяется, я предлагаю всю эту хуйню в аргументы вынести и оставить поля в покое моя логика простая, чем меньше писать тем лучше this.x = x надо писать больше собаки _x = x и каждое поле так - надо писать больше собаки и смотрится уебищно, никакие аргументы меня не убедят, на дворе 2022, даже vscode умеет выделять приватные поля
>>2525055 >ну замените собаку на что угодно Ничего вообще не должно быть. Имена аргументов и публичных свойств должны быть максимально ясны — это первостепенное правило, а уж внутри класса ты изъебывайся как хочешь. Вне зависимости от яп.
Все равно что на кнопках твоей микроволновки будет вот такая вот ебатория $::Start:: вместо Start. Класс это такой же законченный продукт и он должен выглядеть прилично.
>>2525011 >В подсказках у него будет @example. Самое смешное, что в подсказке у него не будет варианта с @, будет просто exapmle (по крайней мере в студии). Поэтому его говно и хуже.
Анончик, у меня такой вопрос. Есть ли в студии возможность шаблонизации для проекта? Встроенная или в виде расширения?
Поясню. Например у меня есть солюшен со структурой как на 1-м пике. Допустим я хочу добавить сущность Document и соответствующую обвязку к ней в виде репозиториев, сервисов, контроллера, интерфейсов и ДТО (как на пике 2) Хочу чтобы студия по команде сама создавала мне нужную структуру во всех проектах (каталоги, файлы) с именами соответствующими сущности и с шаблонами кода для каждого файла.
Примечание 1: Как создать шаблон для солюшена для создания с нуля с нужной структурой и кодом - я знаю. Тут речь о вставке шаблонов в уже готовый проект.
Примечание 2: Сниппеты не подходят, т.к. это на уровне "вставить кусок кода в текущий файл", нужен более широкий функционал.
>>2525162 >Тут речь о вставке шаблонов в уже готовый проект. Да именно оно. >Ну так пиши расширения для студии Ну так я этого и хотел избежать, думал, что готовое уже что-то есть.
>>2525162 >Ну так пиши расширения для студии, там больше возможностей, чем у чмоппетов. Анонч, а какие способы кодогенерации есть в C#? Чтобы программно создать какой-либо класс из шаблона, сделать автозамену нужных параметров и закинуть его на диск? Почитал про Т4, но такое ощущение, что это не то.
>>2525274 >Чтобы программно создать какой-либо класс из шаблона, сделать автозамену нужных параметров и закинуть его на диск? Ну вот мне пришлось для подобных задач вкатиться в плагины. Там ничего сложного даже с моими, так сказать, способностями, даже при том, что я писал на бейсике, а плагины можно делать только на шарпе. Единственное, что нужно время на написание всего — это очевидно.
По установке деталей не помню, там устанавливаешь нужные компоненты (из меню средства и компоненты) и дальше у тебя появляется шаблон для создания плагинов на C#. Есть видео основ https://youtu.be/Pk7jdsvEhfc
У тебя там тесть триггеры которые запускают твои команды плагина (типа при старте программы, или при запуске решения и т.д. их там дохера), ну или добавляешь кнопку запуска в меню студии. Далее есть функция, которая позволяет получить инфу из твоего решения. Самое примитивное — получить текст с текущего документа или выделенный фрагмент текста. Насчет структуры решения — хз, там надо покопаться и определить что есть, а чего нет.
Не все есть. Например у меня были проблемы с выводом в окно интерпретации, потому что плагин работает отдельным потоком и для него твой экземпляр студии — пустое место. И у меня было такое, что в режиме отладки все норм выводится, а релизная не хочет ничего печатать. Не помню как я там извернулся, по-моему печатал в полоску статуса.
В остальном обычное решение с проектами, функциями, окнами — что хочешь, то и воротишь. Разница только в начальном шаблоне.
>Почитал про Т4 Хз что это. Просто гугли Visual Studio Extensions.
>>2525295 >По установке деталей не помню, там устанавливаешь нужные компоненты С этим уже разобрался. >У тебя там тесть триггеры которые запускают твои команды плагина С этим тоже. >Например у меня были проблемы с выводом в окно интерпретации, потому что плагин работает отдельным потоком и для него твой экземпляр студии — пустое место. С потоками тоже понятно.
>В остальном обычное решение с проектами, функциями, окнами — что хочешь, то и воротишь. Разница только в начальном шаблоне. Ну это да. Но вот я смог получить инфу по солюшену и по проектам. Могу создать нужные каталоги и даже файлы с простой самодельной кодо-генерацией. Но вот как прокинуть их в сами проекты пока не разобрался.
>>2525302 >Ну это да. Но вот я смог получить инфу по солюшену и по проектам. Могу создать нужные каталоги и даже файлы с простой самодельной кодо-генерацией. Но вот как прокинуть их в сами проекты пока не разобрался. На крайняк создавать файлики в решении, а потом как-то их аттачить командой. Как аттачить — это надо искать.
>>2525765 Что тебе не ясно? Вот есть класс BookDto { public string Name {get; set;} public int PageCount {get;set;} public string AuthorName {get;set;} } Мне на контроллер приходит запрос на изменение, где Name="ZalupaKonya", PageCount = 666, а AuthorName = null, вопрос собственно в том, как понять, хотел сделавший запрос обнулить имя автора или же просто не хотел его менять.
>>2525774 такое просто не пройдет валидацию же. а там как сделаешь - может вернешь анпроцессаблеентити или еще как.
а если нулл это штатно то как ты собираешься отличать? ты же не влезешь в мозг пользователя. ну можешь на клиенте переспросить и добавить бул поле, мол это ТАКОЕ
>>2525781 >такое просто не пройдет валидацию же. а там как сделаешь - может вернешь анпроцессаблеентити или еще как. Если свойство указано как nullable то всё спокойно пройдёт. Вообще я решил проблему заведя словарь. При обновлении свойства в нём соответствующему ключу присваивается true
>>2525774 >как понять, хотел сделавший запрос обнулить имя автора или же просто не хотел его менять. Валидатор прикручиваешь и натравливаешь его на Dto
>>2525815 >И как это поможет? Ты в валидаторе можешь прописать любые правила для любого поля/набора полей. Прописываешь, что данное поле не должно быть null и тип ошибки который должен выкинуться. А дальше уже строишь логику от этого, либо даешь отлуп, либо продолжаешь но по другой ветке алгоритма.
>>2526211 Возможно шутка про жаву была лишней. У самого было чувство, что перегнул палку, так что, выражаю модерации свои глубочайшие извинения, и тем, чьи посты попали под удар.
Бля сеньеры помидоры помогите Вот делаю я ебучию OAuth 2.0 В инструкции пишут >code_challenge=<base64url(SHA-256(code verifier))> >To create a code challenge your application will first need to create a one time use code verifier. A simple way to do this is to generate 32 random bytes and base64url encode them. Store this code verifier as you’ll need it in a later step. To create a corresponding code challenge, SHA-256 hash the code verifier, and then base64url encode the raw hash output. The base64url encoding is defined in RFC 4648 and should not contain padding. If you’d like to see an example of creating a code challenge in Python you can find that here. Feel free to contribute examples in other languages to this repository to help others.
Создаю массив рандомных байтов
Random rnd = new Random(); byte[] b = new byte[32]; rnd.NextBytes(b); return b;
Далее делаю из него SHA-256 далее делаю из него бейс64 через https://github.com/neosmart/UrlBase64 что бы было url-safe генерирую ссылку и отправляю На сайте авторизуюсь и получаю код на калбек. Далее по инструкции >Now that your application has the authorization code, it needs to send a POST request to https://login.eveonline.com/v2/oauth/token with a payload containing the returned authorization code, the client ID of your application, and the original URL safe Base 64 encoded 32 byte string that was randomly created for the code challenge in step 3. Мне нужно отправить оригинальный код в бейс64 пост запросом что я и делаю в пикриле и получаю ответ что не верный код сука. Я у себя сравниваю эти коды, тот который я отправил первый раз и тот который во второй, я его из бейс64 в массив байтов, потом в SHA-256 потом в бейс64 и получается такой же как и первый.
Я что то не то отправляю? Или там как то по другому они проверяют коды? Пздц блять нахуй
И ничего никочает. Один торрент с нулем пиров, сбоку есть ссылка на 28гб добра, но пиров тоже негусто. Швабода файлообмена пиздец просто. Все через жопу у анальников!
>>2515951 (OP) .net и .net framework отличаются только кроссплатформой? asp.net внутри .net сильно отличается от asp.net в .net framework? вопрос к вопросу выше, правильно ли я написал или название asp.net и asp.net core две абсолютно разные вещи? nuget пакеты доступны внутри .net framework? Зачем сделали asp.net mvc, если это просто паттерн или это тоже фреймворк внутри фреймворка? Как разобраться в этой архитектуре? Что-то сильно наворотили майки, еще переименовали .net core просто .net
>>2526681 >.net и .net framework отличаются только кроссплатформой? нет не только. они хотели сделать новое и чистое и с нуля то есть "переписать нахрен выбросив легаси" В итоге выбросили концепцию AppDomain, Thread.Abort, WCF, DataTable и не помню еще чего - из за чего даже тот же Slqite либа не могла переехать и они запилили свою Потом из этого часть таки портировали для совместимости в коре 2.
>>2526692 .net framework можно получается не трогать, если не собираюсь в банках говно мамонта ковырять? Можно сразу идти в изучение .net (.net core), т.к это современная реализация включающая в себя asp.net или asp.net реализация в .net framework отличается от современного внутри .net (.net core)?
Шарпочане, вопрос по автосвойствам - обращение к свойству внутри типа компилятор поменяет на обращение к полю, которое им же и было создано или как даунич вставит вызов сгенерированного метода set_propertyName?
>>2526700 >если не собираюсь в банках говно мамонта ковырять? Чел, я сейчас в банке сижу и переписываю сервисы с Core2.1 на .NET6. Хуй ты сейчас найдешь где-нибудь .Net Framework, кроме заводов и совсем отсталых гос.контор. >>2526700 >Можно сразу идти в изучение .net (.net core), Да учи сразу .NET6, ну или на крайний случай .NET Core3.1 (не ниже) Ну и еще .NET Standart 2.0 тоже нужен бывает.
>>2526704 >Хуй ты сейчас найдешь где-нибудь .Net Framework Зависит от задач. Мне например надо было декомпилирвоать в IL-код, редактировать и снова упаковывать в dll. А для Core у майков нет тулзы для этого — только для dll на нетфреймворке.
Ну и раз уж такая тема, то вопрошаю есть ли какие-то варианты как на этапе конпиляции студии как-то пошурудить IL-код?
>>2526681 >.net и .net framework отличаются только кроссплатформой? Не знаю как asp.net, там какая-то осбенноая платформа и вечно жалуются, что пирмеры из книг к прошлым версиям не запускаются, но в WPF я даже не заморачиваясь просто копипащу из .net framework в .net
Ну разве что с нюгетами надо быть аккуратнее т.к. либы там бывают в двух версиях, но вроде как проект .net поддерживает обратную совместимость с либами на .net framework.
>>2526704 >Хуй ты сейчас найдешь где-нибудь .Net Framework Santander, mBank (Commerzbank), XTB, Uniqa. Это клиенты с .net Framework за последние 2 года и только некоторые планируют переходить на .net core. И у всех из них большая часть ключевого функционала висит на framework. Факт, что сейчас намного выгоднее работать с кором, на перспективу развития, да и интереснее, но из-за этого растут ставки на EF ещё потому что это наверняка легаси, а это никто не любит
А есть какой-нить годный курсик по многопоточке в шарпе? От ITVDN курс С# асинхронное программирование понравился (только по асинк авэйт посмотрел), но на торрентах нашел онли 5 серий, а их больше.
>>2515951 (OP) Некроёб на связи. Как поставить .net 4 sdk на шинду 10? Сам пакет стоит по дефолту но вот sdk не ставится. В интернете нашел пока установщик для вин 7, но он вываливается с ошибкой. Алсо, у меня на работе есть пк с 10 виндой и этой sdk, её можно как-то оттуда перенести?
>>2526704 >переписываю сервисы с Core2.1 на .NET6 Зачем? Чтобы что? Не понимаю логику таких переписоывателей. Потом будешь переписывать .NET6 на .NET8 чтобы вкатуны-сузихлебы не терялись от дидовского синтаксиса трехлетней давности? ИБД натуральное.
как достичь согласованности с чужим кодом? вот есть приложение, к нему подключается длл, подписывается на эвент передающий объект и проводит над ним операции. к этому же приложению подключается мой длл, подписывается на этот же эвент и делает почти тоже самое но иначе. первый длл сыпет эксепшонами после моих манипуляций если ему не дать отработать перед моим. менять чужой код я не могу. что делать посоны? как гарантировать порядок выполнения? весь код синхронный.
>>2527367 так я уже. он сказал ебись сам конем УМВР ничего не знаю лол кек. >>2527385 как? мы подписываемся на старте приложения. я не знаю как гарантировать что его хуйня подпишется раньше моей.
>>2527397 так он скажет это из-за длл того мудака(меня), удоляйте. короче какой-то клин. приложение вообще никаких очередностей не поддерживает. автор другого длл пидор и собака на сене. я дебил и не могу придумать обходной путь.
>>2527399 а ты скажи что так то норма ожидать что объект придется не девственно чистый. Скажи что твой супер длл обрабатывает эту ситуацию, а его длл нихера проверок не делает и вообще он рукожоп
так что в споре ты прав. и в общем то так и должно решаться.
Допустим у меня есть две библиотеки, одна анализирует файлы и формирует данные, а другая эти данные обрабатывает и выводит на экран.
И та и другая библиотека может обратиться дург к другу в любой момент. Я не могу в каждую добавить зависимости дург дурга — получается зацикленность.
Делать проект-мост и тупо ретранслировать команды? А если в одном преокте 50 команд, и в другом 50 команд, то мне придется делать лишнюю работу и создавать 100 команд. А если в одном проекте добавятся команды? Хуйня какая-то.
а вот подумал может сделать как-то: 1. если в ассембли есть его длл 2. каким-то образом подцепиться к ЕГО обработчику в рантайме через рефлексию и когда он закончит, жахнуть мой эвент 3. получится что-то типа гетто цепочки вызовов и все довольны
>>2527406 ну если не хочется сообщениями то просто делай отдельный(е) проекты с контрактами. В рантайме ты можешь гарантировать что будет их реализация. Вот на эти проекты и ссылайся
Посмотри на тот же DI от мелких - у них есть отдельная сборка .Abstractions где собственно сами интерфейсы, на которые все и ссылаются.
>>2527407 Короче, семеро гномов решили трахнуть Белоснежку. Один гном в бегает к ней в спальню, другие стоят за дверью. Первый гном кончил, второй гном кончил, третий гном кончил, четвёртый гном кончил, пятый гном кончил, шестой гном кончил, седьмой гном кончил, первый гном слез с Белоснежки.
>>2527407 не выйдет. просто не выйдет. все упрется в "каким то образом"
тебе негде искать его инстанс с обработчиком поэтому ты допустим лезешь в событие, достаешь оттуда делегат...и понимаешь что он еще не подписался...и что тебе тут делать а?
влезать в самое начало на старте приложения, подменять метод как тут в одном из прошлых тредов говорилось - явный перебор.
>>2527412 ну я думаю как-то ждать пока не подпишется? может таску завести и пусть ждет пока не подпишется? а когда подпишется то я сразу его обработчик и подпишу
>>2527417 это все ненадежные костыли ты можешь в цикле да но при этом ты должен допускать что за время пока ты фигней страдаешь он уже подписался и пошло событие
>>2527426 так событие юзеринпут о а кстати может его как раз и авайтить? первый инпут попер = тот чел уже 100% подписался, можно пристраивать гномью многоножку к белоснежке. мне не в падлу подождать если это будет гарантировать что его обработчик уже есть и работает, а юзер скорее всего заметит только маленькую задержку при первом инпуте а дальше все будет работать нормально
>>2527626 Линкопетушение происходит. Никогда так не пиши! Даже за деньги так не пиши! Даже за очень большие деньги!
Если по сути кода. Есть коллекция _items сначала ее прогоняют через фильтер filter(секция where), потом результат сортируют по возрастанию или убыванию с ключем который вернет функция orderBy, затем в конце получившемуся хрючеву вызывают ToList() т.е. превращают результат из итераторов на итераторы в обычный лист.
Все вышеназваное можно написать на обычном форе более понятно, но почему сейчас так не модно. Как хорошо что в геймдеве у серьезных проектов линк не в почете. Там до сих пор живут духом молодости и ультрахардкора, пока глупые вкатуны копипастят дурной код прямо из доки микрософта.
>>2527916 АDO.net же. Делаешь сначала запрос со своим SQL, потом в цикле перебираешь DataTable с результатом, опционально делаешь с ним что-то осмысленное. Забытые технологии древних.
>>2527903 >Линкопетушение происходит. Никогда так не пиши! Даже за деньги так не пиши! Даже за очень большие деньги! аргументируешь?
>Все вышеназваное можно написать на обычном форе более понятно мс: смотрите, чтобы не писать форы мы вам принесли новую технологию LINQ - то же самое, но декларативно - короче, читабельнее, понятнее анон: на обычном форе более понятно
Есть какая-то принципиальная разница в том, как gc обрабатывает жирный Array или List? Содержимое - рекорды. Такое ощущение, что с листом меньше памяти жрёт.
>>2527961 >анон: на обычном форе более понятно Это факт.
У того нюфани который спросил ворос не возникло бы проблем с пониманием базового синтакса фора и пары вызовов в нем объектов переданых в качестве параметров. Просто знаешь базовый синтаксис => все понимаешь. Низкий порог входа означает, что код чистый и написан идиоматическим для языка способом.
Линкопетушение это зло как оно есть. Аргументы: - повышает порог входа - просирает производительность на ровном месте - тащит функциональную парашу в красивый и могучий ОО-язык(неидиоматический код) - разрушает системное мышление у новых нюфагов, провоцируя их писать дрист вместо объектов-хелперов с своим местом в домене приложения.
Для меня загадка почему все так подсели на это дерьмо.
>>2527997 > Это факт. Нет, это чушь. Фор более понятен для тех, кто не знаком с линком, кто глянул его синтаксис никаких трудностей испытывать не будет. > У того нюфани который спросил ворос не возникло бы проблем с пониманием базового синтакса фора и пары вызовов в нем объектов переданых в качестве параметров. Просто знаешь базовый синтаксис => все понимаешь. Низкий порог входа означает, что код чистый и написан идиоматическим для языка способом. А ещё у нюфани не возникло бы проблем с обычным вызовом функций с передачей им аргументов, повод ли это отказывать от внедрения зависимостей?
>>2527997 >Это факт. хз для кого факт. сам я не люблю LINQ из за оверхеда но не могу отрицать что декларативный код читабельнее императивного кода
>с пониманием базового синтакса фор а у него и так не возникло проблем с пониманием синтаксиса. Он спросил нормально ли такое мудрить.
>- повышает порог входа итить. это нужно быть реально дауном чтобы не понимать LINQ это базовая интуитивная концепция >- просирает производительность на ровном месте угу, но не везде она нужна. >-- тащит функциональную парашу в красивый и могучий ОО-язык( писать в одной парадигме....фу быть таким. это деградация и застой >провоцируя их писать дрист вместо объектов-хелперов с своим местом в домене приложения тут я не понял ничего, но если что, то это я тоже обосрал
>Для меня загадка почему все так подсели на это дерьмо. вещь примитивная и базовая. и немного удобная. а перфоманс нужен не везде. лично я LINQ юзаю мало.
>>2528000 >А ещё у нюфани не возникло бы проблем с обычным вызовом функций с передачей им аргументов, повод ли это отказывать от внедрения зависимостей? Тут надо подумать логически. Если обычный вызов функций с параметрами может заменить контейнер с зависимостями, то почему нет? Делать как можно проще не скатываясь в копипасту - это добродетель.
>>2528147 >мать жива. Но это не точно. По данным статистики только 5% программистов пользутся программами своего авторства. Они не видят все их убогой глючности, тормознутости и встратости и наивно думают что с ними все Ок.
>>2528643 Нет, просто не всем нравится использовать авто-сгенерированный код. Получается, что не ты сам пишешь программу. Лично меня это загоняет в депрессию.
>>2515951 (OP) Спустя полдня ковыряния реестра и разных установщиков с ошибками я разобрался - просто смонтировал образ проводником и внутри в папке Setup поставил руками все установки (хотя там скорее всего нужно только .net framework sdk). Дефолтный autorun (setup) и SDKSetup вываливаются с ошибками. Вот пост: https://stackoverflow.com/questions/35733040/how-to-install-net-4-framework-in-windows-10 Первый ответ, линк Microsoft windows sdk for Windows 7 and .NET framework 4. Мб добавьте в шапку для будущих некроёбов. >>2526972 >>2526973
>>2528648 А вот Java SDK можно поставить любую версию на любую ОС. Мало того и на новых версиях можно спокойно выполнять программы, написанные для Java 1.0.
>>2528650 Его раньше тоже можно было спокойно ставить, просто сейчас он считается устаревшим, но это последняя версия фреймворка которую поддерживает XP. Политика мастдая, щито поделать, десу.
ToList и ToArray работают с абсолютно идентичной скоростью, если не верите - смотрите исходный код дотнета, source.dot.net. Однако, я не утверждаю, что это одинаково вообще всегда, возможно некоторые специфические коллекции в реализации ToList отличаются, но дефолтные Enumerable имеют одинаковую реализацию в виде new List(size), list.add(item). А для ToArray new array[size], array = item. И там и там одна хуйня. Однако, это мы говорим про скорость, а не про память.
Еще кстати иногда можно передавать в метод List, а не IEnumerable, т.к при енумерации IEnumerable будут вызываться boxing/unboxing, а при енумерации листа - нет, поскольку Enumerator у List является структурой, а у других классов енумератор является классом (в т.ч у массивов)
>>2528644 >Нет, просто не всем нравится использовать авто-сгенерированный код. Получается, что не ты сам пишешь программу. Лично меня это загоняет в депрессию. Долбоеб ты. Депрессию иди к психиатру лечи и не распространяй свои загоны на код.
>>2528897 Я чётко знаю что и в какой папочке лежит, а с гитом постоянно какая-то дроч. Можно вообще всё сломать и лишится кода, а когда ковыряешь папочку, то всегда знаешь, что у тебя есть резервная.
>>2529040 ох уж ты экономист на спичках. как минимум компилятор/jit может доказать, что Length этой реф структуры не изменится и оптимизировать сей момент
и такое ТЗ: скрипт должен находить все случаи логина пользователей в домене АD c 12:00 до 00:00 часов
Сам я в PS не але, шарящий анон подскажи - верен ли он и сможет ли найти ВСЕ случаи или только по последнему логону работает? НУ и если второе - то в какую сторону исправлять.
>>2529046 ээ ну ты без оскорблений плс я в основном форычей или линками гоняю где могу просто мне ютуб подкинул видос где мужик распинался как распиздато этот Span обгоняет for и я тут такой ну нихуя себе я вообще не знал даже что так можно
В целом, в C# всё нормально, у него есть полная кросс-платформенность и быстрый деплой и компиляция. По моему мнение, в сравнении с С/С++/Ёж, это идеальный язык для кроссплатформенного написления приложений. Плюс он переходит под крыло OpenSource.
>>2529428 Ещё про С# - очень хорошая и быстрая реализация GC и очень хорошая реализация бинарных интерфейсов. Не так хорошо как, например, в фейдже, но тоже очень хорошо. У C# очень хороший и отлаженный драйвер С/С++. Весь его компилятор написан именно на С/С++.
С# это божий язык, который в вебе, в чатиках, в десктопе и в мобилке. Он не боится флепов и кроссплатформенности, он просто над ними нешучно ржал еще 10 лет назад!
>>2529402 Я учу сишарп для того, чтобы делать крутые приложения в экосистеме майков. Это даёт мне кайф - я не люблю разрабатывать на других платформах. Я не учу сишарп для того, чтобы устроится на работу, так как работа - это не для меня.
>>2529122 Я знаю только один вариант, а именно: инициализировать структуру-цель и после этого скопировать его в нее при помощи System.Buffer.BlockCopy. А так я не люблю не-уфсейновые варианты, потому что они не безопасны и очень медленные.
>>2528621 Я сам ручками пишу миграции. На этот счёт у меня есть своё мнение. Я считаю, что миграции надо писать ручками, потому что миграции от мейкера - это однозначно миграции, которые в любом случае надо будет дорабатывать. Проще просто по старинке писать миграции руками, чем дорабатывать мейкерские миграции, чтобы они были не тухлыми.
>>2529433 Потому и придумали MemoryMarshal.TryRead() который под капотом использует ref и класс Unsafe, который под капотом использует хз че там за реализация.
>>2529773 Они настолько быстро всё меняют, что люди не успевают за этими изменениями. Книги отстали уже лет на 10. Тот же Шилдт и Рихтер так и не выпустили новых версий своих книг. А микрософты продолжают клепать новые версии с новым сахаром. Разве они не понимают, что язык засахарится и никто не будет понимать его? Лучше брать пример с джавы и сделать язык более стабильным.
>>2529776 Сахар учится легко, к тому же в MSDN всё описано понятным языком. Хуйня по сравнению с C++, где количество синтаксических фич делает язык сложнее всех популярных языков вместе взятых.
>>2529791 Мне удалось запомнить только стандартный синтаксис. Пишу примерно как на джаве. А все модные сахарные фичи не могу запомнить, а когда вижу в чужом коде, то не понимаю о чём там.
>>2529853 >MSDN-а не существует уже несколько лет. А кого это (цензура) для олдов что мсдн что мсдоки - те же яйца, только в профиль. Ну может заметил что домен изменился - и все. мсдн это устойчивый термин для офдоки среди тех кто не зумер.
>>2529435 >это однозначно миграции, которые в любом случае надо будет дорабатывать. Только если код на основе которого они генерятся говно, то тогда конечно надо будет дорабатывать.
Можно ли на C# сделать нативную библиотеку, функции которой можно будет вызывать из внешних программ или линковать к коду на нативных языках типа С/С++? Ну то есть надо, чтобы в dll-ке, написанной на шарпе, был стандартный виндовый ентрипоинт, и чтобы её функции можно было бы дергать через _stdcall?
Т.е. написать на шарпе либу, содержащую например, вот такую C++ функцию: double _stdcall square(double &x) { return x * x; } И чтобы это могло подключить к себе и скушать всё, что работает с аналогичными сишными либами? 1C, VBA, notepad++, всякие локальные самописные параши и т.п.
Для нет.фреймворка был нугет пакет DllExport, который судя по описанию, позволял это делать. Но для седьмого дотнета реализовать это не получилось, нихрена не работает. А вот на С++ всё работает прекрасно, только я его нихуя не знаю, я не учил его, т.к. верил, что дотнет всемогущ, и на нем можно написать всё что угодно, а оказалось, что нихуя подобного, меня обманули.
>>2529946 Сишарп работает на виртуальной машине, а не компилируется в машинный код, поэтому ограничен в своих возможностях. Серьёзных программ на нём не напишешь.
>>2530009 Ты Рихтера читал вообще, тупень? Сишарп компилируется в IL-код, который затем выполняется на виртуальной машине CLR. Если на машине нет дотнета, то ты ни одну программу на сишарпе даже не запустишь.
>>2530247 >Если на машине нет дотнета, то ты ни одну программу на сишарпе даже не запустишь. А вот и нет, тупень.
Приложения .NET можно публиковать в двух разных режимах. Режим влияет на то, как пользователь запускает приложение.
При публикации автономного приложения в состав включается среда выполнения и библиотеки .NET, а также приложение и его зависимости. Пользователи приложения могут запустить его на компьютере, на котором не установлена среда выполнения .NET.
Вот уж чего чего, а этого я в книге о многопоточном программировании встретить не ожидал > Прежде всего хочу выразить благодарность своему Господу и Спасителю Иисусу Христу. Принятие христианства стало самым важным решением в моей жизни! Если вам понадобится дополнительная информация по этой теме, вы можете связаться со мной на моем сайте http://stephencleary.com/.
>>2529946 Да, используй AOT компиляцию которую полностью доделали в 7 дотнете. Собираешь код в нативную dll без зависимостей от рантайма, ну а дальше дергаешь.
>>2529946 > верил, что дотнет всемогущ, и на нем можно написать всё что угодно, а оказалось, что нихуя подобного, меня обманули Хаха! Смейтесь над ним!
Есть дженерик класс, наследуемый от сетки (пикрил 1). Почему XAML отказывается видеть такой класс? (пикрил 2) Если дженерик составляющую убрать, то норм (пикрилы 3, 4)
Как вообще люди используют x:TypeArguments, если класса даже не видно?
>>2531368 var допустимо использовать только если получаемый тип очевиден и служит только лишь для экономии сил, чтобы не писать вот эту срань myVerySuperLongClass Value = new myVerySuperLongClass Value; зачем дважды писать одно и тоже, когда правая часть совершенно конкретна? Тут нет никакого "доверия машине", тут всесовершенно четко и очевидно и не нарушает законы строгой типизации.
Другое дело, когда метод возвращает object и хер пойми что там на самом деле внутри. В этом случае присваивать результат var как минимум тупо.
>>2531356 Ясненько ... Дженерики напрямую нельзя пихать в XAML — нужно создать класс, который наследует дженерик-класс. Тогда совершенно не ясно предназначение пикриелйтед-хуеты.
>>2531368 Так иде показывает итоговый тип. А самому его прописывать, когда он может быть весьма длинным, смысла никакого нет, особенно если речь идёт о linq
>>2531384 >Другое дело, когда метод возвращает object и хер пойми что там на самом деле внутри. В этом случае присваивать результат var как минимум тупо. Ну вот напишешь ты например PenisType вместо var или object, а у тебя в объекте прилетит VaginaType что делать будешь?
>>2531368 Бывают ситуации когда похуй на тип в конкретном месте. Например из метода возвращается какой-нибудь IEnumerable и что в нем будет лежать тебе похуй. Тебе нужно будет его просто перебрать и отправить дальше.
>>2531413 все потому что оно все заброшено есть спека хамл 2009 но ее нельзя использовать в хамл что компилируется в Baml а без этого x:TypeArguments имеет жесткие ограничения и неюзабелен
в общем старое оно все, увы.
>>2531384 >В этом случае присваивать результат var как минимум тупо. Это верно для редких случаев вида foreach(var item in древняяколлекция) и тому подобных случаев. И проблема станет видна сразу же ибо просто дальше код не будет работать
типоопасности никакой. просто проблема чтения - кому то это хорошо ибо сокращает буквы, а кто то не может запомнить или понять что там - что особенно видно если читаешь код на гитхабе и хз че реально на выходе у чего то этакого
>>2531579 хз как у вас в шарпе, а у нас в бейсике TryCast для таких целей. Переменная в любом случае будет нужного типа, просто там будет Nothing(Null).
Короч юзать var или наш Dim в контексте необязательной типизации аля джава скрипт, на которую намекает анон — это надо постараться. Это надо быть отборным говноделом и обосраться на всех уровнях.
>>2531599 да нет в шарпе никакой магии. var это "меньше буков" там где компилятор может вывести тип. А если это не древный код со всякими arraylist, то выводит всегда. (ну разве что в Regex еще эта древность есть)
А потому писать везде var - все живы никто не умирает. Ну да, проблема читать не в IDE, но не настолько серьезная - очень много читаю код в браузере и а) проблема var не пойму что там - 0.1% (по факту у меня не было такого, но допускаю возможность) б) проблема "блин а в каком неймспейсе этот тип чтобы пойти глянуть его исходник" и начинаешь тупо обыскивать файлы пытаясь по имени угадать - 120%
>быть отборным говноделом и обосраться на всех уровнях. Если проблемы нет, то ее можно придумать
Как же я задолбался удалять .vs в проектах WPF Core
XAML просто клинит и хер что докажешь ему. То кириллица не поддерживается, хотя после пересоздания контрола вдруг начинает поддерживаться; то не удалось найти закрывающий тэг; то ошибка, мол, свойство уже зарегистрировано. То проблема уже устранена, а предупреждение остается висеть.
Я не помню, чтобы такое было на NetFramework. Либо студию косоебит от множества проектов в решении, чего я раньше не делал.
Читаю ef core в действии. В примере к 4 главе, посвященной взаимодействию бизнес логики с бд он вместо одного простого сервиса и репозитория какого-нибудь нагородил кучу классов (пик) и я в итоге не могу во всём этом разобраться. Неужели в реальных проектах все так сложно?
Здравствуйте, подскажите, пожалуйста как реализовать проверку, при нажатии на кнопку, хэш суммы SHA-1 у файла, заранее зная правильную сумму SHA-1 string hashsumfile = "12345" ?
шарпаны, допустимо ли использовать интерфейсы как в пикрелейтед чисто для разграничения доступа если за этими интерфейсами только один реальный класс стоит и других больше не будет?
>>2533110 является сахаром указывает компилятору где разбивать метод на продолжения. 1 await 2 await 3 Логически эквивалентно цепочке тасков 1.ContinueWith(2).ContinueWith(3) где, как известно, каждое продолжение планируется на выполнение после окончания предыдущего
однако это оверхед поэтому компилятор переписывает метод в виде специальной структуры где локальные переменные становятся полями структуры, а код метода дробится на куски по await-aм и все это рождает машину состояний, где как в итераторе вызывается MoveNext и выполняется первый кусок кода и по результату вычисляется какой кусок кода будет следующим и так до конца. А там дальше планировщик, образно говоря, будет дергать в каком то потоке(ках типа тредпул) этот MoveNext пока весь код не перемолотит.
то есть await это точка ожидаемого продолжения когда будет выполнен код, который оно ожидает.
Никакого "Возвращает управление вызывающей функции" не происходит, а происходит "планирование продолжения (обычно в тредпуле)" тем самым освобождая текущий поток и если вызывающему методу плевать на ожидание (у него нет await или GetAwaiter().GetResult()), то это воспринимается как "вернул управление"
>>2532906 Я уже давно, для себя (внутре), все то, что в .net относится к фронтовой части, не считаю частью .net-а. Вся вот эта хуета типа xaml-а в wpf-е, вьюхи в MVC и т.д. и прочее вот это все. Благословен будь Core который позволил полностью отдать все эти головняки фронтендерам и забыть про них. Я уже давно не вылезал за пределы api и мне охуеть как комфортно. Чего и вам советую.
Выбираю книгу по asp.net core для новичка, на русском. Какую из этих двух посоветовали бы? Первая вроде более профессиональная, а вторая скорее для новичков.
Как сделать депенденси проперти для кастомного элемента так, чтобы он принимал множество элементов через XAML? К примеру как свойство Children у грида или стакпанели.
Пробовал поставить тип UIElementColelction, но депенденси проперти регистрирует уж точно не коллекцию.
Подскажите пожалуйста, я хочу сделать небольшую программу для винды. Какую технологию для графического интерфейса взять? Windows forms - устаревшее, не модное, не поддерживает крутые ускорения Wpf - сложное, требует большого усилия для вката, обязательно нужны какие-то библиотеке mvvm хуеввм по губе Браузер, электрон подобная хуйня - 100 мб в лучшем случае, пиздец
>>2534437 Если хочешь, чтобы это пригодилось тебе в будущем, то делай ап на .net core + простой фронт в том же ангуляре. Если делаешь прост для себя лишь бы работало - хуярь в консоли. Wpf и формсы это говно мамонта, не стоит на это тратить своё время.
>>2515951 (OP) Кто-нибудь пробовал разворачивать asp.net приложения в portainer ? Есть ли у кого-то гайд развернуть хотя бы стандартное web api приложение в контейнере ? Я пробовал делать по гайду https://www.youtube.com/watch?v=tBl422FiEBY&t=882s&ab_channel=DevMentors, но у меня порты не пробрасывались и я не могу в локалхосту обратиться к своим методам. Короч полная ерунда, есть ли нормальный гайд ?
>>2534437 Формсам ускорения и не нужно. Оно и так быстрее. Ты хотел сказал про DPI Ну и в формсах тяжело делать "эээх ляпота"
Впф тяжелее в работе, не совсем нативно выглядит Но твори что хочу MVVM это не тяжесть, а спасение от винформсого подхода Он не усложняет, а облегчает жизнь
Всякие WINUI еще тормознее и в общем то там сразу лучше к мауи
>>2534544 Я десигнер и для меня винформы слишком пососные, но с другой стороны для меня код как для вас винформы — работает да и хрен с ним.
>Но твори что хочу Не все возможно. Порой такая ебанина, что приходится даже ломать то, что дается из коробки. А чтобы сломать, должен городить такие города из кучи стилей, ты используешь какой-то класс, а он в конкретно твоей ситуации работает не так как нужно. К примеру фрейм не позволяет биндить ссылку на объект. А юзер контрол не позволяет добавлять итемы с собственным названием. Или ты захотел использовать ту самую ВПФ гибкость, а у там дженерики не работают.
И везде есть какие-то нюансы, какие-то исключения из правил, которые ну просто бьют тебе молотком по пальцам.
>Он не усложняет, а облегчает жизнь И порождает новые ограничения. Иногда появляется радость, что одним взмахом решил одну проблему, но через десять шагов узнаешь, что сам себе создал тупиковую ситуацию. И все сводится к тому, что ты должен идти строго по рельсам, а о какой уникальности может идти речь, когда можно взять те же винформсы?
>>2534570 Ну у меня есть подозрение, что в момент, когда у меня получается жопа, я делаю что-то не так.
Но все же, представь, что есть куча контролов, у каждого есть своя вьюмодель, которая имеет свой собственный уникальный тип, потмоу чт оу каждой вьюмодели всой набор свойств, методов и команд. Мне эту вьюмодель надо как-то получить из контрола. Просто DataContext контрола возвращает Object — это хуйня, я не могу тыкать пальцем в небо и гадать какого же типа там вьюмодель.
Вот, и я решил создать интерфейс со свойством вьюмодели дженерик типа. И вот все эти контролы реализуют данный интерфейс. А теперь представь, что они же являются частью другого контрола и вот тут появляется жопа, потому что объявляются они через xaml.
Как сделать так, чтобы у всех контролов было свойство ViewModel но своего собственного типа, я хз.
>>2534599 у меня такой проблемы не возникает потому что это нужно в code-behind, а там обычно пусто или же в атачед, что тоже редкость.
А также и так понятно обычно что в DataContext - это либо что то крупное как окно или контрол написаный код отображение конкретной вьюмодели, ведь вид не живет изолировано, а отображает вполне известный граф вьюмоделей.
Свои контролы где даже DataContext не юзается тоже мимо.
Юзерконтролы общего назначения тоже не живут в вакууме. Тут возможна пара вариантов 1 принимает что то неведомое, то есть контрол типа PropertyGrid, и включает рефлексию вовсю 2 выдает интерфейс, который обязан реализовать поступающий объект DataContext/Item и тому подобное и делается банальный каст
А тотальный MVVM или его части просто лишают необходимости что то там типы объявлять в хамл.
посоны, а во что заворачивали лист на старых дотнетах если нужно было вызывающему дать доступ по индексу но запретить всякую грязь вроде add clear removeat и т.д.?
>>2534447 > на .net core + простой фронт в том же ангуляре. А как это работать и выглядеть будет, и сложно ли выучить? Просто как страница в браузере, не имеющая ничего общего с интерфейсом системы?
>>2534717 > А как это работать и выглядеть будет, Медленно и уродливо. Чтобы было медленно и красиво, надо очень долго ебаться. > и сложно ли выучить? Очень сложно. Примерно как с нуля учить шарп, дотнет и WPF. > Просто как страница в браузере, не имеющая ничего общего с интерфейсом системы? Да.
>>2534290 Поставилась! Только написано, что лицензия на 90 дней. А дальше что? Я должен купить винду? Но тем не менее это самый лучший вариант для линупс-юзеров.
>>2534769 > А дальше что? Виртуалбокс с его офсайта. Винда с торрентов. И получаешь бесплатно и навсегда. Но я например вполне разрабатываю свои петы на вс-коде под линуксом. Единственное неудобство - никто до сих пор не сделал (бесплатно) визуальный редактор форм с предпросмотром. Приходится вслепую хуярить хамл, а результат смотреть после dotnet run
>>2515954 >8. Что нужно знать, чтобы взяли работать? Реально всё перечисленное освоить с нуля за полгода-год до уровня, когда будешь готов к работе джуном в десктоп-разработке?
>>2534813 Бля, ну его нахуй тогда... Пойду двигать кнопочки на JS.
>>2534817 Очевидно же, что зависит от направления, в котором собираешься работать. Хочешь попердывать над древним кодом и писать тонны доков в каком-нибудь финтехе за огромную ЗП - учишь джаву. Хочешь делать то же самое, но с привкусом спермы и запахом свежести - учишь дотнет. Хочешь в десктоп - учишь дотнет. Хочешь в игры - учишь дотнет/плюсы. Хочешь мобилки - учишь джаву+котлин или свифт. Хочешь в бэк для стартапов - учишь питон или джс. Хочешь во фронт - учишь джс. Хочешь заработать геморрой и шизу к 30 годам - учишь с++/раст. Хочешь пердолиться в жопу - учишь голанг.
>>2534813 Там изменений немного никогда. Добавляются новые фичи в основном. Хватает почитать что нового learn.microsoft и почти наверняка не воспользоваться этим. Если совсем задрот, то можно покупать себе C# in a Nutshell каждый год.
>>2515951 (OP) Сапыч, столкнулся с ошибкой при миграции, почему-то ругается что в моем mssql сертификаты паленые, хотя в другом проекте все ок работает и мигрируется, на старом использовал версии EF 6.10 на новом EF 7.0 .Net6, в чем мой косяк Начал гуглить вопрос, нашел, что фиксить можно только путем отключения шифрования Encrypt, может кто сталкивался с проблемой и есть другие варианты
>>2535641 пик 1 - чет страшное пик 2 - добавим страха в чтении используя однобуквенные названия переменных. пик 3 - хз, наверное тоже страшна раз представлен
итого >Что можно сделать с double, чтобы цикл работал нормально? для начала бы понять что тебе не нравится. вообще про точность чисел с плавающей точкой все знают, но раз тебе нужен именно double, то хоть бы в общих чертах понять о чем ты толкуешь.
>>2535715 пременная x double в цикле for увеличивается на 0,07 с каждой итерацией от 0,1 до 0,8. из-за точности double на 3 итерации ломается цикл т.к. итоговое число будет >0.8. Как это обойти.
>>2536004 Юзай Eto.Forms! Там можно закодить форму на шарпе, да декларативненько (через инициализаторы), да с кодбехайндом на шарпе же (через partial)!
>>2536025 Я сейчас так пишу пет-проекты на винформах с инициализаторами, дизайнером не пользуюсь. Eto.Forms тыкал, нормальная тема, но чуток не хватает документации.
>>2536048 > на винформах с инициализаторами, дизайнером не пользуюсь И как там? Много костылей приходится преодолевать, чтобы сделать грамотно-адаптивный интерфейс? Или ты не паришься и блокируешь изменение размера окон? А если размер окон заблокирован и интерфейс статичный, то что за доёб к ресайзу авалонии выше? Ах да, это ж разные аноны. Ну-ну.
>>2536052 > И как там? Много костылей приходится преодолевать, чтобы сделать грамотно-адаптивный интерфейс? Не много, я один раз написал обёртки с нужными параметрами и везде их использую. > Или ты не паришься и блокируешь изменение размера окон? А если размер окон заблокирован и интерфейс статичный, то что за доёб к ресайзу авалонии выше? Хуй знает, что там в авалонии, никогда её не видел. Если там есть проблемы, видимо, есть на то какие-то причины типа кроссплатформенности.
Зашёл в тред и охуел. 2к22 на дворе, какие нахуй вебформсы, какой нахуй впф, что за пиздец?! Последний раз формсы видел в 2013 на учёбе и в 2015 был легаси проект на девекспресе, с того момента только вариации джавы на фронте, никаких окон, кроме окна браузера. Если вы только вкатываетесь в шарп, то не трожьте десктопные приложения - они мертвы, а если вы почему-то с ними работаете, то срочно уёбывайте оттуда.
>>2536353 >никаких окон, кроме окна браузера. Как ты заебал вонять. Тебе сколько раз хуем по голове стучали? Ебаный дегрод.
Ты кроме магазинчиков и порнсайтов поди ничего в жизни не видел. Мервы у него десктопные приложения, охуеть. Любой профессиональный софт на десктопе. ЛЮБОЙ.
>>2536353 >а если вы почему-то с ними работаете У нас в конторе недавно обновление завезли - переехали все на 4.8 довольные.
Сейчас времена не те, период не тот, чтобы куда-то переходить. А у нас можно пересидеть тяжелые времена. Наш легаси-продукт нужно будет поддерживать и разрабатывать даже в случае ядерной войны. Если что, я не из бСССР.
>>2536019 нет нету. они рисуют на скиашарпе и на выхлопе жопа. смотри пик - там последний это нативный размер текста без указания размера. он такой огромный и проблема видна меньше, но все равно видна.
А так - сравни с заголовком окна.
>>2536353 >десктопные приложения - они мертвы ну вот и проходи мимо в свои ангулары и не мешай зарабатывать денежку.
>>2536362 >переехали все на 4.8 довольные. что мешает переехать на 7? у нас не переезжали на дотнет5 из за wpf некоторых тонкостей пдфных, но на 6 изи.
1. Как заставить ссаную студию вставлять код в нужное место? Речь идет о случаях авто-реализации интерфейсов или подписок на события, когда студия пытается вставить часть кода в уже написанный код. Заебала пидорасить код и вставлять не в том месте.
2. Как дать по щам студии, чтобы она не двигала мои вкладки? Дело даже не в том: слева или справа создавать новую вкладку. Речь идет о шурудении уже открытых вкладок. Кто давал ей право это делать? Прочему пятая по счету вкладка перемещается на позицию второй? Проделки домового?
Ещё мне не нравится { get; set }. Их прямо везде пихают. Вот только начали писать что-то и сразу get-set. И ладно бы это как-то по уму было сделано, но оно максимально дебильно. Свойство, к которому приписано эти get-set, надо ещё писать приватную переменную, т.е. получается двойной расход памяти: одно на переменную, второй на свойство. В джаве же всё сделано просто и со вкусом: объявил переменную прописал нужные тебе методы: getName(), setName(), где Name - имя переменной. Многие ИДЕ сами их генерируют, так что много кода писать не потребуется. Само собой и нет двойного расхода памяти, потому что методы его не тратят.
>>2536527 >Многие ИДЕ сами их генерируют, так что много кода писать не потребуется но на выходе все равно получается много кода, а разница... >объявил переменную прописал нужные тебе методы: getName(), setName(), где Name - имя переменной. ровно ТАКОЕ ЖЕ сгенерит тебе компилятор вместо { get; set } >т.е. получается двойной расход памяти: одно на переменную, второй на свойство. нет не получается. тут с жавой 1 в 1 - разница лишь в том КТО генерит методы getName(), setName() - редактор или компилятор (на то он и сахар)
А модификаторы доступа? Если в джаве есть 4 простых модификатора, которые укладываются в простую табличку и ты всегда чётко понимаешь уровень доступа каждого поля или класса. А что в сишарпе? Просто какой-то зоопарк модификаторов доступа. И такие и сякие. И голову можно сломать, чтобы понять где доступен этот класс, а где нет. И наверняка в будущем они ещё навалят модификаторов побольше, чтобы язык окончательно привратился в помойку. Уже даже опытные программисты, которые начинали с ранних версий, с ужасом смотрят на захламление синтаксиса.
Мне это почему-то напоминает права доступа к файлам в юниксах/линуксах и винде. Если у первых простой битовый массив, то в винде это какой-то ад: всякие изменить, но не удалить, изменить, но удалить, запустить, но не читать и прочий бред.
>>2536537 >Они нужны только пидорам, пишущих в свойствах логику без логики в свойствах само понятие свойство нахер никому и не нужно было бы. Сам функционал "свойство" и рожден именно для написания логики
>>2536568 А я говорю, что под класс Foo будет выделяться не 4 байта, а 8 байт памяти из-за свойства. Потому, что микрософты не предусмотрели возможность манипулирования скрытой переменной Bar и приходится заводить новую _bar.
Ещё мне не нравится, что они сделали ссылочные типы, не допускающие null. Теперь надо везде писать этот уродский ? рядом с каждым типом, чтобы можно было присваивать null. Вот с какой целью эта дичь была сделана?Сама идея ссылки и была в том, что у неё либо null, либо конкретное значение, полученное через new. И ведь микрософтам ещё хватает наглости писать об этом с гордостью, что они сделали какой-то полезный вклад в развитие языка. Рихтер наверно после этого, если и собирался писать новую книгу, то теперь точно не напишет, потому что шарп свернул не туда. Да и вообще после 5 версии шарпа язык пошёл под откос. Его и дальше будут накачивать бредовыми изменениями. Скоро он превратится в Perl с его обилием сложночитаемых закорючек.
>>2536645 а я говорю что разницы между java с ее сеттерами на уровне кода и шарпом с его сеттерами на уровне скомпиленного кода - просто нет
и твой пик НИЧЕМ не отличается от моего ни по памяти ни по реализации. Это ОДНО И ТО ЖЕ.
>>2536681 выключи фичу и всего делов. это ж не котлин где это на уровне компилятора. тут это просто предупреждения > потому что шарп свернул не туда. шарп свернул как раз туда. разве что поздно это начал. гугли "Ошибка на миллиард долларов" .
>>2536681 не туда он свернул во многом при рождении - нулл безопасность - нет замороженных типов нормальных - нет val - неудачная реализация событий - похерили контрактное программирование - жирный обосрамс с IReadOnlyList - new new new - имя конструктора должно иметь имя класса - ConfigureAwait(true). - нет инлайн методов и другое "бррр аж трисет"
>>2536356 >бизнес >на заводе Сам то понял, что сказал? Твоим главным бизнес-заказчиком на заводе будет тётя Срака, которой нужно вести учет чушек на складе.
>>2536509 1. А с каких хренов она должна знать в каком месте этот метод стоять должен. Да и не похуй ли по большому счету.
2. Вкладки можно фиксировать. На пике. Первая - зафиксирована, всегда будет открыта и находится по отношению к другим зафиксированным вкладкам там где она размещена. Вторая открыта и не зафиксирована, всегда будет находится после зафиксированных вкладок и может менять позицию туда-сюда. Третья временно открытая. Пока ты с ней работаешь, но студия закроет ее при первой возможности (например при добавлении новых вкладок)
>>2536542 >Просто какой-то зоопарк модификаторов доступа. Ужас какой, целых 6 штук. И то базовых всего 4 (как в джаве, сюрприз), а остальные их комбинации. Это ж пиздец как сложно запомнить-то. Может программирование это не твое, если у тебя с памятью такие проблемы. Вот тебе простая шпаргалка, может поможет.
>>2536894 >1. А с каких хренов она должна знать в каком месте этот метод стоять должен. Да и не похуй ли по большому счету. Немного бесит. Вообще непонятен алгоритм вставки.
Я прост любитель все разбивать на регионы, и у меня нет такого, что сначала идет список приватных свойств, потом публичных, потом методов, потом событий. А студия этому противится.
Или к примеру у меня приватное свойство находится рядом с его публичной расширенной версией, а студия пытается приватное вставить после приватного и нарушает целостность блока.
2. Вкладки можно фиксировать. Это да, но задолбаешься их фиксировать и откреплять. Тут я тоже не понимаю логики зачем вкладки вообще перемещать нужно.
>>2536913 >Я прост любитель все разбивать на регионы, и у меня нет такого, что сначала идет список приватных свойств, потом публичных, потом методов, потом событий. это не студия издевается над тобой, это ты издеваешсья над студией.
>>2536913 >Тут я тоже не понимаю логики зачем вкладки вообще перемещать нужно. Иногда бывает когда над слишком говнокодистым проектом работаешь приходится открывать пучок вкладок и туда сюда их тасовать, чтобы хоть как-то это в голове уместить. А вообще советую для студии экстеншен Workspace Manager, позволяет сохранять наборы вкладок и потом быстро их загружать. Очень спасает на работе, когда приходится переключаться между разными тасками туда-сюда.
>>2536913 >Я прост любитель все разбивать на регионы Я тоже раньше любил кучу регионов плодить. Сейчас отвык от этого. Наверное научился писать код так, чтобы он был сразу понятен. Максимум, что сейчас делаю, блок конструкторов (если их несколько) или приватных методов в регион оборачиваю.
>>2537045 Те же яйца только в профиль. Тот же CamelCase, только кое-где местами upper с lower поменяли. А вот скобки в джаве по уебански расставляются.
>>2536897 А потом ещё надо выучить кучу модификаторов для аргументов методов. Всякие out, ref, in, params. Многие даже опытные сишарперы их не знают, потому что в каждой новой версии накидывают ещё. И ладно бы был от них какой-то прок, дак это просто сахар ради сахара. Они абсолютно бесполезны. К тому же, касательно in ещё и сами имена подобраны тупо. Гораздо логичнее было бы использовать const, что отражало бы смысл модификатора, но нет, будет in.
>>2537124 А вот в джаве вместо params используется более изящное решение - троеточие. Оно не занимает лишние ключевое слово и выглядит лучше в коде.
Вообще, джава очень экономно относится к ключевым словам и повторно используется многие из них в разных контекстах: final, for, try. В шарпе же постоянно вводят новые ключевые слова и авторам этих изменений наплевать, что программисты уже могли использовать их для написания программ в ранних версиях. Об обратной совместимости они не задумываются.
К тому же названия в шарпе выбираются крайне неудачно. Чего стоит Enumerator, который больше ассоциируется с перечислениями Enum, а не с итераторами.
Может я чего-то не понимаю, но какого хуя у меня gethashcode() выдаёт у файла и копии разный хэш, более того у ОДНОГО И ТОГО ЖЕ файла разный выдаёт. Я чего-то не понимаю? Для чего это хуйня нужна тогда?
>>2537044 Хорошая тема, правда глючная слегка. Надо удалять .vs, чтобы завелось.
И сбивает с толку загрузка воркспейса. Сначала подумал, что опять не работает т.к. предполагал, что переключение будет автоматически по выбору итема в выпадающем списке. А кнопку LoadWorkspace я посчитал за выбор файла с пресетами.
С другой стороны, можно отредактировать пресет не переключаясь на него — панель компактнее.
>>2537207 >Хорошая тема, правда глючная слегка. Надо удалять .vs, чтобы завелось Я х.з. у меня без этого работает. Там просто в каталоге с солюшеном создается файл в котором пресеты закладок хранятся и все. Его можно по желанию в .gitignore занести, на сам проект он никак не влияет.
>>2537045 >Самый оптимальный стиль в джаве. Знаете почему вы будете спорить бесконечно над тем, что оптимальнее? Потому что ваша хуйня решает только 5% проблем. Есть ворох сущностей, которые тоже надо бы как-то обозначить, но у вас есть только UpCase да нижний прочерк.
Раньше читал про правило, что массивы нужно обозначать с большой буквы, а все остальные с малой. Потом узнал, что надо все, что объявляется локально в методе, писать с малой, а все что снаружи — с большой. Потом узнал, что все что приватное в классе с малой, а все что публичное - с большой.
А щас наблюдаю еще один шизопостулат, который (будем объективны) не решает ничего — все равно что пердежом двигать Эверест. Эти обзначения играли роль во времена, когда твой редактор кода был скудным по функционалу. Тогда и функции ПИСАЛИ_КАПСОМ, чтобы хоть как-то отличить. Сейчас студия тебе и всё раскрасит, и подпишет, и даже иконку подставит. Не занимайтесь хуйней.
Единственное, что хуево в шарпе, это визуально одинаковая реализация интерфейса и наследование от класса. Даже конвертер с C# в VB косоебит на этом моменте. А вот наоборот конвертируется замечательно, потому что реализация интерфейсов помечаются как Implements, а наследование как Inherits.
Да и вообще C# очень хуев для автоматической конвертации (что примечательно). Например конвертер не может отличить подписку на событие от простого инкремента, в то время как в бейсике для событий есть ключевые слова AddHandler и RemoveHandler. В C# одно сочетание символов может содержать миллион контекстов.
>>2537132 >программисты уже могли использовать их для написания программ в ранних версиях И студия автоматически добавит к ним символ @, чтобы отличить их от ключевого слова. Озвученной проблемы нет.
>>2531818 Я делаю примерно так же. Сеньеры-помидоры - рофлят с меня, делают 1 класс 5к строк и идут смотреть ютуб, пока я как дебил - хуйней страдаю, еще и пишу тесты. Вот с тестов - горит. Единственный хуй что пишу их((( Типа блядь. Повторяю умные слова про тесты, тестировщики говорят - вот, этот джун дело говорит, заебало нас ваши программулины отлаживать, тестирование всего кроме моего говна - длится по полгода в том числе из-за отсутствия тестов. Нет, сеньеры-помидоры говорят: идите нахуй, не будем тесты писать, а тестировщики за то деньги и получают, хули мы будем тесты писать, пусть они баги ищут. Короче. Да. Из-за этого хреновая картина: Я по полгода сижу - и жду пока код сеньеров оттестируют, потому что тестов нет, нужно все проверить руками, даже мелочи. А я - хуйней страдаю. А я - кодить хочу, а не хуйней страдать(((
>>2537288 У нас тестировщики получают так же как сеньеры. Т.е. заменяем одного сеньера - тестировщиком. Кто разрабатывать будет?
Надо тесты внедрять. Я реально ж вижу, что меньше проблем потом в ходе тестирования. По сути все сводится к тому, чтобы проверить, что то что реализовал - это действительно то что просили.
>>2537272 Вполне возможно. Я просто никогда не сохраняю .vs под контроль версий. Во вторых я никогда не юзаю контроль версий через студию, только непосредственно через сам git. Наверное поэтому и не сталкивался.
>>2537232 и поэтому на мобилах (то есть где нет кровавого энтерпрайза) котлин (с его перегруженностью сложностью, что даже шарп на его фоне бледно выглядит) вовсю вытесняет жаву
>>2537440 На конференции для разработчиков I/O 2019 Google объявила, что язык программирования Kotlin теперь является предпочтительным языком для разработчиков приложений под Android — новые API и библиотеки Jetpack будут публиковаться сначала на Kotlin.
>>2537469 А где происходит эта связка? В проекте тупо лежат два файла, единственная связь которых — одинаковое название класса. Что будет если удалить один из файлов?
Помню, что в винформс был какой-то связующий третий файл.
>>2537518 ок. принимается. упоротый жавист, который привык ковыряться в говне (по твоей ссылке там пример сравнения), может считать попытки остального мира свалить с говна как насилие на бедным жавистом.
>будут публиковаться сначала на Kotlin. ну так то да. из котлина можно вызывать жава код, а вот из УБОГОЙ жавы вызывать котлин хз как.
Впрочем я все равно останусь при своем мнении что выбирающие котлин выбирают его за его фичи, а не потому что гугл решил. Потому как сам выбрал по причинам "жава говно убогое (особенно на андроид там вообще жопашный), а котлин ня"
>>2537535 ну вот ты создаешь юзер контрол MyUserControl в студии и у тебя 2 файла - MyUserControl.xaml и MyUserControl.xaml.cs
То, что они связываются в дереве файлов проекта - просто фича студии по конвенции (и даже какие то расширения есть)
Посмотри на сами файлы. По факту эти 2 файла описывают один partial класс разным языком. (смотри пик)
xaml не является чистым языком разметки как хтмл. Он описывает код декларативно. Он описывает тот же класс просто другими средствами (правда это компилится не в шарп код(IL), а в baml не потому что не может, а по другим причинам) Но если бы компилился в код, то было бы примерно то, что генерит винформс дизайнер.
Если ты в хамле UserControl поменяешь на Grid то получишь ошибку Error (active)CS0263 Partial declarations of 'MyUserControl' must not specify different base classes
Если ты удалишь один из файлов, то будет тот же эффект что с обычным partial файлом - если в нем осталось что-то из удаленной части, то не скомпилит. Например если ты удалишь хамл файл, то в xaml.cs будет ругаться на недоступный InitializeComponent();, который был как раз в хамловой части описания класса.
>>2537598 >xaml не является чистым языком разметки как хтмл. >Он описывает код декларативно. Я понял.
>Если ты в хамле UserControl поменяешь на Grid то получишь ошибку >Error (active)CS0263 Partial declarations of 'MyUserControl' must not specify different base classes А, ну у меня бейсик, и у меня по дефолту не показывает partial и базовый класс. Это наверно из-за настроек, как автоскрытие неймспейсов. Соответственно, при смене класса автоматом видать меняется базовый класс во втором файле. У меня ошибки не возникает.
>>2537436 >Его гугл насильно внедряет, а где свободный выбор языка, там выбирают джаву. Вот сколько не видел джавистов, подавляющее большинство прямо высказывает, что выбрало бы котлин, но приходится жрать джаву, которая их достала.
>>2537729 Не знаю как раньше, а сейчас они дописываются автоматом, я даже сходу сам не импортирую ни одного неймспейса. Намного хуже работа со стилями.
>>2537883 В каком смысле рисовать звук? Если ты про графику, то она имеет несколько категорий: растровая и векторная. С векторной проще всего в WPF — проще, чем в винформсах и можно даже рисовать по прозрачному окну и без проблем применять трансформации масштабирования, поворота, смещения. Canvas для этого идеально подходит.
Если ты про растровую графику, то увы, попиксельно можно было рисовать только в старых библиотеках для винформс. Но спрайтами — это пожалуйста, накидываешь текстурку на какой нибудь Rectangle и трансформируешь как тебе хочется.
Выводить звук без запуска проигрывателя тоже можно из коробки, но нужен формат WAV, никаких mp3 и прочей ебулды. Мб с доп либами можно и что-то еще. Гугли System.Media.SoundPlayer
>>2537891 Ну в общем, есть книжка "Седжвик Р., Уэйн К. - Computer Science. Основы программирования на Java, ООП, алгоритмы и структуры данных (Классика computer science)", но там все примеры на джаве. Хотелось бы их применить на сишарпе, но там очень много задач на рисование и даже на вывод звука посредством колебаний с определенной частотой. Буквально читают wav-файлы и генерируют звук средствами джава.
>>2537943 Когда я сталкиваюсь с тем, что джава снова оказывается лучше сишарпа, то испытываю тоже бурю эмоций. Сразу вспоминаю флешбеки тех моментов, когда решил начать изучение сишарпа. Иногда хочется вернуться в прошлое и сказать самому себе: постой, лучше учи джаву! Не удивительно, что многие сталкиваются с теми же проблемами при изучении сишарпа и лишние напоминание об этом вызывает у них гнев в виде оскорбительных сообщений.
>>2537949 >Когда я сталкиваюсь с тем, что джава снова оказывается лучше сишарпа Я больше поверю в то, что ты прикидываешься глупым джавистом, чтобы дискредитировать Джаву. Просто я не могу поверить, что есть настолько глупые люди. Я даже не могу поверить в жирный троллинг от джависта, ибо данный подход подразумевает некий репутационный демадж Джавы как языка, пользователи которого используют фразу "рисовать музыку".
Даже человек, который ни разу не сталкивался с задачей генерации звуков, люто проиграет с тебя, ну и сделает соответствующие выводы о качестве поданной информации в книге Седжвика Р.
Бля, хочешь затроллить меня? Ну возьми и исследуй тему создания музыки на шарпе, сравни это с методами создания на джаве. Покажи пруфы, что сделать можно, что нельзя. Я с удовольствием почитаю.
А пока что ты для меня кажешься каким-то некомпетентным клоуном-ретардом. Только вдумайся: ты отсутствие желания анона вывалить тебе готовый код, хочешь преподнести как отсутствие функционала в шарпе. И кто ты после этого?
>>2537966 >И кто ты после этого? Это тупо байт, чтобы ты в порыве чувств защиты чести и достоинства шарпа, метнулся искать необходимую информацию и выложил всё готовое. Понятно, что хуесос привыкший к готовой подборочке задач из книги неспособен на поиск необходимой информации. Я больше чем уверен, что и генерация звуков ему как таковая не нужна, а просто она была в книге.
>>2537966 Ты видимо и читать не умеешь. Я писал: рисовать и выводить звук. Это два разных действия. Ты что ли не рисовал никогда в пеинте? Не пользовался музыкальными проигрывателями?
Тем не менее в джаве это всё легко делается. Даже искать ничего не надо. Написал пару строчек и работает.
Как это в шарпе - не знаю. Скорей всего шарп так не умеет. Либо это какая-нибудь хитромудрая коyфигурация в xaml, что имеет мало общего с простотой рисования в джаве.
>>2537976 Я не вижу на твоем скрине рисования звука.
Я вижу нарисованный кружочек и полосочку, о чем было рассказано в этом посте >>2537891 Раз ты этот пост прочитал жопой и проигнорировал написанное, то не удивляся потом, что анон посчитал, что ты имеешь ввиду рисование музыки.
>>2537976 >Скорей всего шарп так не умеет. Ты больной. Зачем ты с такими предубеждениями лезешь в шарп? Ты посчитал, что желаемое невозможно до того, как вообще поискал инфу. Даже после того, как тебе дали ссылку на референсы, ты это проигнорировал и начал поливать говном.
>>2537976 А где на скрине задается закругление концов? В WPF можно зать форму окончания контура. Типа CapStart и CapEnd, там можно выбрать закругление, прямой конец и прямой конец с прибавлением на толщину контура.
И второй вопрос, а это хуйня работает как отдельный объект? Или оно просто рисует пиксели? Можно точку и линию повернуть на 45 градусов и отмасштабировать в 0,5 раз относительно центра точки?
>>2537976 В джаве нихуя так не делается. В стандартной библиотеке нет класса StdDraw, ты его взял хуй пойим где и подключил к своему проекту. Напиши саои пару строчек без сторонних библиотек и попробуй тогда выебнуться.
>>2538028 Это библиотека для книги, но в основе у неё AWT и Swing. Её можно одинаково применять на любой ОС, потому что они полностью кроссплатформенны, в отличии от фейковой кроссплатформенности дотнет кора.
>>2538192 Что, уже не пара строчек? А теперь напиши то же самое на винформах, получится примерно столько же. Вскукарек про кроссплатформенность хуй знает к чему тут вообще, в изначальной постановке вопроса про него ничего не было, так что не надо тут переобуваться. Кому нужна кроссплатформа - тот возьмёт eto.forms или авалонию.
>>2538211 >А теперь напиши то же самое на винформах, получится примерно столько же. Что на формсах, что на WPF получается ровно столько же (т.е. первый варинат анона с библиотекой). Ну может на формсах чуточку длиннее, но в WPF гарантирую ровно столько же кода.
Разница лишь в том, что в WPF нарисованная кривая это редактируемый объект с доступом к толщине, заливке, координатам точек. Можно к кривой применить матрицу трансформаций, ну и прочие радости жизни, типа антиалиазинга, чтобы не было пораши по типу пикрил, или наоборот SnapToPixels, чтобы не было "мыльных" контуров.
>>2538220 >Я не умею на винформах И не надо. Там графику рисовать тупо. Единственное, что там годное — это возможность нарисовать сглаженную кривую по точкам. Т.е. речь идет не о кривых безье, когда указывается 4 точки (это есть и там и там), а когда указывается только две и между ними идет усредненный переход. Так называемые Catmull-Rom кривые. https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline Возможно в WPF есть и такое, но я не нашел.
>>2537949 >Иногда хочется вернуться в прошлое и сказать самому себе: постой, лучше учи джаву! Так, а что тебе мешает сейчас свичнуться на джаву и съебать нахуй из треда ?
>>2537949 >Иногда хочется вернуться в прошлое и сказать самому себе: постой, лучше учи джаву! Так, а что тебе мешает сейчас свичнуться на джаву и съебать нахуй из треда ?
>>2538322 >>2538323 Джава учится дольше, чем сишарп. Само собой речь не про язык, а про фреймворки. А мне надо по-быстрому выучить что-то и вкатиться. Если заработаю себе на 2 года гэпчика, то смогу переучиться на джаву. А сейчас уже поздно, деньги почти закончились.
>>2538331 >Джава учится дольше, чем сишарп. Воу-воу. Притормози. Ты тут всю дорогу внушаешь, что джава лучше и там все проще. Что не надо запоминать кучу модификаторов и т.д. И тут хуяк и все наоборот? К чему тогда твои стенания на тему того какая джава пиздатая если ты ее даже осилить не можешь?
>Само собой речь не про язык, а про фреймворки. Гнилой аргумент. Если ты нормально знаешь язык, то вопрос вката в любой фреймворк дело максимум месяца, а часто вообще неделя-две.
>>2538331 Но как же ты собрался выучить быстро сишарп если каждый год злые майкрософт меняют стек до неузнаваемости? У тебя же учебные примеры не скомпилируются!
>>2538440 Фреймворки в джаве отстойные. Там всякие xml-конфигурация, тонны аннотаций. В итоге пишешь не на джаве, а на всё сподряд. Есть даже специальный язык Спринга SpEL.
Если бы всё училось за месяц, то я бы уже выучил и начал ходить по собесам. Скорей наоборот, язык учишь за месяц, а всё остальное годами.
>>2538447 Я нашёл актуальный курс на торрентах по текущей версии. Надеюсь успеть до дотнета 8.
>>2538669 Удивительно, если хоть в обном языке такое есть. Интерфейсы придумали для ООП, а статик классы - костыль для добавления процедурщины в язык, чтобы не добавлять глобальные функции. Видел интерфейсы в сишке? Вот то-то и оно, нет интерфейсов в процедурщине и быть не может.
>>2538675 в котлине есть ибо там статик это синглтон объект приатаченный к классу и это реально удобно - можно и интерфейс и расширение сделать не только для инстансов, а еще действуют скоупы видимости этих расширений.
Всего этого в шарпе нельзя и приходится извращаться. Нет - код то писать можно рабочий, но вот сделать нормально - увы
>>2538681 Чел, ну как бы статик и синглтон это слегка разные вещи, каждая со своими целями. Ты пытаешься логику одного прицепить на логику другого, а когда не получается выдаешь "плохо сделано, тупо".
>>2538681 > там статик это синглтон объект приатаченный к классу То есть никакой это не статик, а тупо синглтон, обычный объект со всеми вытекающими. Под капотом для JVM создаётся обычный класс, и, понятное дело, можно реализовывать какие угодно интерфейсы. Там и функции есть, которые тоже сделаны через неявные классы. Кому-то не нравится, что в шарпе нет подобного сахара, а кому-то не нравится наличие такой возможности в петухотлине, в котором делали всё лишь бы не как в жабе.
>>2538691 > и потому подобные вещи я называю "статические методы" > И реально пофиг что там под капотом Тебе с таким мышлением дорога в 1С и PHP. Хочешь возиться с котлином или шарпом - используй общепринятую терминологию, иначе хуй кто тебя поймёт.
>>2538700 на статики шарпа я сказал статики. А статики котлина - вот пусть котлинисты в меня тапками и кидают, но я в шарпотреде сижу.
>Тебе с таким мышлением дорога в 1С и PHP. с чего вдруг мне прикасаться к этому дерьму. Тут нет логики. Ведь сахар и DSL средствами языка и нужны для того чтобы скрыть реализацию или сложность заменив ее на удобство
котлин - язык с упором "творите свое DSL и наслаждайтесь" шарп, увы - мы тут делали свою жаву, потому немного одумались, но поздно и мало - так что "жри чо дали"
это просто факт. это может не нравится шарпистам, но это факт.
>>2538744 ну ну. я хейтю из за синтаксиса шарпа, хоть и пишу на нем с его рождения. Все познается в сравнении. Я считал синтаксис шарпа богатым, но волею судеб изучив котлин понял что шарп очень жадный на выразительность. И жалкие крохи выразительности вводятся со скрипом.
Предстоит собес. Подкиньте реальных вопросов на веб-девелопера с годом опыта.
Жутко стремаюсь из-за ощущения что самозванец, хотя в то же время такой же как и я челик с ютуба просто порешав литкодовские задачки в гугл устроился. Что подучить? Что в гитхаб закинуть (инб4: его не чекают; литкод задачки) ? Может вам давали полайвкодить, что были за задачи?
>>2538623 В джаве это таблица 4 на 4 и легко учится. Это в сишарпе миллион модификаторов и каждый год новых насыпают. Джава учится за месяц, а сахар сишарпа не учится вообще за какой-либо вменяемый срок. Понятно, что на собесе может попасться душнила, который завалит сахаром. Поэтому придётся искать вакансии без таких душнил, а с нормальными челиками.
>>2538781 >сахар сишарпа не учится вообще за какой-либо вменяемый срок. Вот и ответ почему жависты из ентерпрайза не переходят на котлин. Мозг у жавистов мааааленький, в буфер все не помещается
>>2538781 >В джаве это таблица 4 на 4 и легко учится. А в шарпе это табличка 6 на 5, которая тоже легко учится. Выше в треде ее уже кидали. Так и запишем, что это предел познаваемости джава-дебила. >каждый год новых насыпают. Ну пиздеть, то не надо. Набор этих модификаторов уже 5 лет не меняется. Единственный модификатор который добавили в C#11 - это file, но про него можно тупо забыть, т.к. он для кодогенераторов предназначен. >а сахар сишарпа не учится вообще за какой-либо вменяемый срок. Весь сахар си-шарпа спокойно умещается в книжке на 250 страниц карманного формата. >Понятно, что на собесе может попасться душнила, который завалит сахаром. Это вообще редкость. Спрашивают только за какой-нибудь фундаментальный сахар вроде using-ов или async/await.
Называть сахаром хайлевельные абстракции языка, взятые из многолетних достижений задротов computer science, это признак животного ебанного лоускилльного, уровень джавистов и пхпшников.
Я создаю отдельную бд для каждого юнит теста, с названием вида {DateTime.Now}.db, как мне просмотреть эту базу данных в райдере? В студии вот есть список всех баз данных, а тут я так понимаю нужно отдельно каждую бд подключать.
>>2538776 Спрашиваю на собесе (всё по тайпскрипту): 1. Difference between let, const and var at TS 2. What is anonymous function 3. Ways to implement lazy loading С вопросов выше можно понять знает ли кандидат основы (вопрос 1), а может шарит глубже (вопрос 2), можно понять как мыслит кандидат, вариантов имплементации lazy loading сотни, интересно какой выберет (почему именно этот, чем он лучше/хуже). И к этому тестовое задание на 1-2 часа работы (72 часа чтобы его выслать), чтобы кандидат спокойно в своём темпе его сделал. Задание: - есть готовый шаблон проекта, созданы пустые компоненты, написаны css - есть готовое rest api (get, delete, put) - get возвращает >10000 объектов, которые нужно поместить в таблицу, которую нужно фильтровать и сортировать на фронте (в get есть параметр paging, но я об этом не говорю, вся инфа в сваггере) - нужен поиск по каждому полю объекта (id, name, amount, price) - каждый из объектов можно удалить, таблица должна обновиться после удаления - можно добавить новый объект, таблица должна обновиться после добавления
Это собес для 3+ года опыта работы, ставка 25$ + VAT
>>2539012 >>2539015 Да. Тут 3+, потому что примерно за это время работы в команде у человека образуются норм софт скилы. Бывают просто отличные программисты, с которыми нету никакой возможности работать (чсв, токсики, просто мутные типы), тогда я охотнее возьму менее опытного, но более предсказуемого кандидата.
Интересно, что только 1 из 5 делает тестовое задание адекватно, без странных конструкций, хардкода, знают что такое eslint. В этом задании не главное, чтобы работало идеально, а как оно сделано и тут уже встречаются пиздецы.
>>2539015 >>2539020 Я ожидаю отдельного сервиса для get, delete, put. Хорошо сделаный paging (для этого нужно понимать сваггер). Отдельный environments. Использование pascalCase (или любой другой). Адекватное название методов (не find() или send()). В конце всё это должно быть запушенно с нормальным названием коммита. И ещё много вещей, на которые я обращаю внимания. Обо всём выше я кандидату не говорю, он сам должен это знать. Я думаю, что ты бы смог решить поставленную задачу, но не сделал бы это на том уровне о котором я пишу. Знать язык программирования это в лучшем случае полдела, а умение им грамотно пользоваться это уже другой уровень.
Поговаривают, что в дотнет 8 снова кардинально переделают ASP.NET и он будет больше похож на Spring. Вместо папок с контроллерами, мы будем просто развешивать аннотации по коду, где нам надо что-то обработать.
>>2539599 Какой-то фейковый прогресс, если честно, судя по описанию. Я ещё в прошлом году это говорил, когда тут сороки-белобоки носились с 5 а потом 6 дотнетом.
>>2539612 Дак проблема, что они опять собираются всё переделать. Как потом это всё учить? Книги-то выходят редко и на написание и перевод требуется 2-3 года.
>>2539620 20-30 лет назад все писали классненькие десктопные приложения, а не всякие веб-сервисы. Микрософты даже первый фреймворк для веба сделали как аналог винформам.
А вообще в том же Спринге есть просто класс конфигураций, где создаются всякие контексты, бины и прочая шляпа. А всё остальное можно писать как хочется, только аннотации развешивай. Полная свобода творчества. А вот в АСП.НЕТ всё прибито гвоздями к полу. Вот тебе одна папка и туда пихай все контроллеры. Пофиг, что тебе надо 100500 таких контроллеров написать, всё равно пихай в одну папку. Про вьюхи и модели я вообще молчу, там полная помойка получается.
>>2539642 > десктопные приложения, а не всякие веб-сервисы Платформа не важна. Важны паттерны. Поняв паттерны, ты будешь их реализовывать на любой платформе в средах любой степени разнородности, ваще на изичах, не испытывая серьёзных проблем, а мелкие проблемы решая мимоходом. То есть, иначе говоря, зная, твёрдо зная, какими паттернами ты реализуешь свой проект, ты не испытывая неудобств, легко переведешь его с десктопа на веб, с веба на десктоп, с моносервера на кластер, и т.д. и т.п. и др.
>>2539663 Почему тогда Спринг легко учится, хоть там и всякая параша с кофигурацией бинов в xml, а такой весь модный современный ASP.NET Core вообще не учится. На тебя вываливают какую-то словесную мешанину: веббилдер, хостбилдер, кофигуре - не кофигуре, билд - не билд. Да откуда я должен знать, что они там имеют ввиду!? В теории рассуждают про какое-то промежуточное ПО, а где в коде слова middleware? Их просто нет. У них даже в наименовании ничего не клеится.
>>2515951 (OP) В ссылках упоминается пик-1 книга. Стоит ли начинать с неё? Смущает тот факт, что там очень старая версия шарпа. Или лучше сразу начать с пик-2?
https://spb.hh.ru/vacancy/73736562 >Полный рабочий день на территории работодателя >Офис недалеко от метро >(17 минут) >можно добраться на трамвае >До нас 3 остановки >35 000 руб. на руки
>>2539739 Это вкатунская вакансия. Можно считать это оплачиваемой стажировкой с которой через полгода спокойно можно на сотыгу свалить и дальше развиваться. Для вкатунцов самое то. На джаве на подобную вакансию человек 200 налетает в первые часы, а тут человек 15...20 наберется.
>>2539745 Если открыть хх, то увидишь, что резюме на шарп столько же, сколько и на джаву. А вот вакансий на шарп раза в 2 меньше. Причём шарп лезут в основном всякие птушники, потому что там модно преподавать шарп, а на джаве как правило выпускники универов.
>>2539762 Так это от первой строчки кода отсчёт. Опыт проганья, а не ком. разработки, так что вкатунская вакуха, потерпеть можно. Особенно если каждый день ездить на трамвае чижик.
>>2539759 А я тебя еще раз спрошу - что за хуйню ты несешь? Ты можешь спокойно создавать контроллеры где ты захочешь, хоть в корне проекта, хоть в каталоге Services. То что класс является контроллером определяется в первую очередь не тем где он лежит в проекте, а тем от чего он наследуется и какой у него внутри функционал. Каталог Controllers, не более чем конвенция. Т.к. залезая в незнакомый проект, я ожидаю что контроллеры будут все-таки собраны в одном месте, а не размазаны по всему дереву проекта. Т.к. по факту это точка входа в него. Хотя очень хорошей практикой все-таки будет хоть как-то группировать их по своим каталогам в пределах того же Controllers.
>>2539765 Не буду спорить, т.к. без реальных цифр это тупое дело. Но вроде в МВП треде был чел, который собирал помесячную статистику, там цифры были как раз наоборот. Скажу только, что количество выходцев из училищ/универов величина более-менее постоянная. А вот за счет "выпускников" говнокурсов, java по количеству явно перевешивает, т.к. во первых всяких курсов по jave намного больше и они популярнее. Во вторых большинство курсов по шарпу ориентированы на геймдев, а их выпускники в принципе бесполезны где-нибудь за пределами разработки игр.
Если совсем грубо обобщить (прямо вот совсем грубо) на уровне вакансий не уровня выше мидл-минус. Если на Java будет 100 и 200 резюме, то все эти кандидаты будут конкурировать друг с другом за все эти вакансии. В шарпе же в это время будет 50 вакансий и 100 резюме. Но из них будет вакансий 10 геймдева и на них будет 40 кандидатов, еще вакансий 20 легаси и на него будет еще 30 кандидатов зависнувших на .netFramework и на оставшиеся 20 вакансий энтерпрайза, останется 30 человек, что уже не настолько безнадежно как в Java.
>>2539902 >что в идеале апи Скорее в норме. >>2539902 >return Ok(await _service.DoSomething(request)); ? Это если у тебя "always return 200", если же по классике, то что-нибудь вроде: return CreateResponse(await _service.DoSomething(request)); где CreateResponse, простой базовый метод возвращающий Ок или Fail, в зависимости от бизнес логики.
>>2540224 >Это если у тебя "always return 200", если же по классике, то что-нибудь вроде: >return CreateResponse(await _service.DoSomething(request)); >где CreateResponse, простой базовый метод возвращающий Ок или Fail, в зависимости от бизнес логики. Так для этого же есть промежуточное по, которое будет перехватывать эксепшоны и формировать нужный ответ.
>>2540281 >Так для этого же есть промежуточное по, которое будет перехватывать эксепшоны и формировать нужный ответ. Мидлварь предназначен для обработки технических или общих фейлов. Ты же не будешь для каждого бизнес процесса свой отдельный мидлварь писать.
>>2540239 Как ты сам выучишь без курсов и книг? Некоторые, кто давно вкатился, ещё находятся при ошибочном мнении, что они сами всему научились, хотя раньше на работу брали по факту окончания универа или технаря, а там их уже натаскивали опытные коллеги. У меня однокурсник именно так и вкатился в 2008, хотя языка даже не знал. Тогда было модно С++ учить, а на всякие джавы и сишарпы мы смотрели свысока.
>>2540341 Метанит пишет один чел. У него нет даже напарника, который бы правил опечатки и косяки. А любая книга проходит рецензирование и этим занимаются как правило серьёзные челы уровня профессоров в области компьютерных наук. Касательно сишарпа, авторы книг как правило имеют сертификаты от микрософт, что они реально специалисты в этой области. Кроме всего прочего, книга у тебя будет всегда на руках, а метанит может в любой момент закрыться и твой вкат накроется медным тазом.
>>2540224 > где CreateResponse, простой базовый метод возвращающий Ок или Fail, в зависимости от бизнес логики. Можно поподробнее? У меня например бизнес логика просто кидает исключение при неверных вводных данных или ещё каких-либо проблемах. Как мне это исключение обрабатывать?
>>2540359 >У меня например бизнес логика просто кидает исключение при неверных вводных данных или ещё каких-либо проблемах. Как мне это исключение обрабатывать? Странный вопрос. Ты когда исключение выбрасываешь, ты же не в воздух это делаешь. Ты должен всегда подразумевать где оно у тебя отлавливается и обрабатывается. Либо там же где ты его выкинул, либо из того слоя который у тебя дергает бизнес логику. Ну либо через мидлварь, но это уже изврат.
А если у пользователя выскочила ошибка, то что она мне даст? У меня нет всей цепочки действий — нужно логирование, но я же не могу им засрать всю программу и постоянно собирать логи.
>>2540607 > Ты должен всегда подразумевать где оно у тебя отлавливается и обрабатывается. Ну так я планировал его обрабатывать внутри контроллера, но это вроде как плохая практика, контроллер же должен быть пустым.
>>2540639 >Нормально реализовано? Нет. Как минимум, потому ты пробрасываешь конретный эксепшен, а ловишь общий. Алсо, всегда ставь скобки в If-ах, не будь мудаком.
>>2540834 Во первых - when используется не так. В том смысле, что тут он вообще не нужен и достаточно простого Catch(ArgumentOutOfrangeException ex). То что ты написал работать будет, но выглядит максимально по индусски. Во вторых попробуй напиши в одном контроллере несколько похожих методов и ты сразу увидишь, что в каждом из них у тебя будет повторяющийся код из одинаковых цепочек catch-ей. И куда-то в одно место ты их не вынесешь, что сильно ломает DRY принцип. Если бы ты возвращал стандартизированный ResultObject, тогда тебе всю его обработку и распил на IActionResult, можно было бы вынести в отдельный экстеншен единый для всех контроллеров. И тогда все методы в них действительно состояли бы из одной строки.
>>2540834 400 выдаст валидатор входных данных и метод контроллера будет пуст от этого 500 выдаст мидлваря если до нее долетит какое то исключение - чего так то быть не должно. как и 404 вообще роутинг выдаст
>>2540943 Вот очень хорошее видео. Чел очень хорошо рассказывает, то что я пытался криво в своих ответах рассказать. Подробно объясняет как и почему не нужно кидать исключения и как от этого уйти. И даже небольшой бенчмарк показывает.
Особенно понравилась мысль, что использование мидлвари для отлова эксепшенов в целях реализации контракта - подход сродни использованию goto в своем коде.
Вкатунцам на заметку, если сможете разобраться, реализовать подобное в сових петах, которые прикладываете к резюме и объяснить на собесах почему и зачем так сделали, то на место джуна влетите со свистом.
>>2541283 > и срезается Или не срезается. При колебаниях тебе и оклад могут порезать.
Да, сама схема оклад+премия бесящая (особенно когда ею оперируют в ростатах нарисовывая несуществующие средние зарплаты). Но тем не менее это не значит что там платят только 30к. Ну а то что это галера где за любой чих ползарплаты отбирают... Так а что еще ждет начинающего масленка? Галера и ждет, а дальше он сам должен выбиваться в сеньоры.
Плюс там может быть не только премия, а еще и надбавки к окладу - вот их уже не могут срезать. Например у меня в зп 30% от оклада - северные и стаж.
>>2541338 >Да, сама схема оклад+премия бесящая (особенно когда ею оперируют в ростатах нарисовывая несуществующие средние зарплаты). За один месяц выдали 100.000 рублей (50 премия + 50 оклад), во второй только оклад 50 тысяч, средняя зарплата за два месяца -75 тысяч. А по твоей логике должна быть 50?
>>2541648 Я х.з. гоферы вроде тащатся от реализации. Сам я не го пробовал, но из того, что об этом читал могу назвать такие недостатки (конечно это исключительно мое личное мнение): 1) Выглядит несколько прибитым гвоздями. В шарпе ты можешь пользоваться исключениями, можешь не пользоваться, можешь смешать все вместе. Тут же создатели языка включили вахтеров и установили единый способ. 2) Такое ощущение, что там весь стектрейс и контекст к проебывается к херам по дефолту. Думаю лет через 5...10 те кто будет разгребать, то что нынешние говнокодеры наклепают, будут крайне опечалены и разозлены этим фактом.
>>2541736 Просто голанг разрабатывали люди, которым нравится старый сишный стиль программирования. Тебе не надо изучать тонны фреймворков и библиотек, а ты сам выстраиваешь логику программы как хочешь. Я бы вот лучше голанг пошёл изучать, чем долбиться в этот асп.нет. Но туда не берут вкатунов, а только опытных челов.
>>2541894 >Просто голанг разрабатывали люди, которым нравится старый сишный стиль программирования. Ну т.е. любителями велосипедов. >Тебе не надо изучать тонны фреймворков и библиотек, а ты сам выстраиваешь логику программы как хочешь. Угу, тут будет старая шутка про то что каждый разраб на С начинает с придумывания своей библиотеки для работы со string-ами.
Ну и так, к сведению, C# тоже не хуем с горы создавался.
Андерс Хейлсберг (род. 2 декабря 1960) — датский инженер-программист, создатель Turbo Pascal, Delphi, C# и TypeScript. Т.е. чел как бы шарящий за все эти вещи.
Ну и при желании ты на шарпе также можешь навелосипедить что угодно. От высочайших ООП абстракций, до адской БДСМ байтоебли. Его плюс как раз в оптимальном соотношении удобство/возможности
>>2541894 >Я бы вот лучше голанг пошёл изучать, чем долбиться в этот асп.нет. Но туда не берут вкатунов, а только опытных челов. Вкатунов сейчас никуда не берут. Это сродни выйгрышу в лотерею. А год...два назад и в гоферы можно было спокойно с улицы залететь.
>>2542439 Вот такие смузихлебы-вкатунщики сейчас и визжат что айти умирае... И я очень рад что это айти-гнилье наконец-то начали гнать из фанга (а значит скоро мода дойдет и до остальных)
Видите-ли он не хочет работать со старым говном. А нахуя он тогда нужен?
Ну смузихлебы клепающие говносайтики под ключ с нуля не понимают что что в промышленности не пишут каждый год с нуля весь софт Даже просто если обновлять технологии - то это не год и не два, и возможно нужно соорудить переходные прослойки.
Я например так работал - переделывал софт с vb на шарп - сначала накидал фронтэнд и связал код со старым кодом (были красивые вызовы vb кода из шарпа) - чтобы оно сразу все работало. Теперь постепенно убираю эти связи переписывая бэкэнд в критичных местах. При этом оно все работает прямо сейчас в промышленности. Начальнику не нужно ждать десять лет - когда там новый софт заработает, он уже видит новенький красивый гуи и его хотелки появляются сразу. Понятно что если в этот момент понадобится новый программист - но будет требоваться знание и vb и шарпа. Но это на время переходного периода, в конце все связи с vb должны быть уничтожены.
>>2542480 Гугли ICloneable, Поверхностное копирование, Глубокое копирование. Реализуешь то, что подходит под твою ситуацию. Перебираешь список, делаешь полный клон каждого объекта и помещаешь его в новый список. Придется как минимум разобраться в вопросе копирования содержимого объекта в другой объект. Простого и готового способа тут нет.
>>2542523 Челик, ты же в курсе, что PascalCase, это и есть CamelCase, да? А то, на что ты так неистово дрочишь, это его разновидность - loweCamelCase. И в шарпе, так же как в Java, Go и VB, используются они оба.
Вчера читал про ссылочные типы не допускающие null и офигевал с того, какого говна навернули микрософты. Ладно бы они как-то решили проблему, но нет, они добавили тонны кала, но ссылочные типы не допускающие null по-прежнему могут содержать null и программа может вылететь с NullReferenceException. Почему в Java спокойно используют ссылочные типы допускающие null, а вот микрософтам этот null чем-то мешает?
>>2542593 Почему? Тащем-та линк это просто про перебор коллекций с данными, какое отношение это имеет к прокидыванию результата между слоями? Ну и даже если у тебя это как-то завязано, то linq это по большому счету расширения, на которые ты можешь накинуть свою обертку и точно так же их использовать, это будет даже еще удобнее.
>>2542600 > Почему? Тащем-та линк это просто про перебор коллекций с данными, какое отношение это имеет к прокидыванию результата между слоями? Потому что внутри селекта нельзя просто написать return Result, нужно в любом случае перебрать все значения, затем ещё раз их перебрать чтобы проверить была ли ошибка, и только тогда вернуть result из метода.
>>2542601 Пример приведи. Чет я плохо понимаю, какие у тебя могут быть ошибки в селекте, который по факту просто проекция данных из одной модели в модель.
посоны я тут короче немного пошуршал и рассортировал проект по папкам шоб аккуратно было и красиво, но неймспейсы старые остались и там чад кутежа во мгле ада есть ли способ в студии быстро привести их в соответствие со структурой во всем проекте?
>>2542599 >Почему в Java спокойно используют ссылочные типы допускающие null где спокойно? NRE на NRE и NRE погоняет. Забавно видеть в каком нибудь еклипс или пишарме иногда NRE в его тулзах.
>а вот микрософтам этот null чем-то мешает? гугли "ошибка на миллиард долларов" - там пояснят
С нуллабле можно писать и без NRE конечно, просто это сложнее био нужно самому следить. вот для этого и делается "пусть компилятор где может сам следит". Так что языки где СРАЗУ есть четкое разделение на нулл типы и нет - просто больше защищают от ошибок вида "не уследил"
И не нужно говорить про "следи лучше". Если код пишешь не ты один, то нужны жесткие контракты, а это выливается в итоге в использование всяких NullGuard и анализаторы, что по факту то же самое
>>2543467 На шарпе легко писать код хоть в блокноте, не надо запоминать громоздкие пакеты и всякие LocalContainerEntityManagerFactoryBean. Это в жабе без иде хуй что напишешь.
>>2543509 > простой, легкий в обучении синклер бейсик еще проще в обучении, но как то ценится удобство писать код, а не учить язык.
Как бы важна способность просто и удобно выражать мысли в код, а не плясать с бубном.
И тут у жавый полная жопень. Например, вместо удобной async/await, что ЛОЛ будет уже небось и в синклер бейские даже, но не в жаве - в жаве нужно городить огородище.
>>2543509 > простой, легкий в обучении То есть примитивный. Понятное дело, что язык легко выучить, если в нём нихуя нет и всё делается через библиотечные костыли.
>>2543518 Но как раз в джаве удобно писать и ещё удобней читать код. Не нужно держать в голове тонны сахарных конструкций. Все прописано явно. Синклер Бейсик же не был даже структурированным языком. Простой цикл типа while там надо было расписывать в виде IF-GOTO. Многочисленные переходы превращали всё в спагетти-код. Помню как-то в журнале "Наука и жизнь" в конце 1980-х публиковали программы на Бейсике, но с ходу разобрать код было невозможно. Приходилось расписывать эти макаронины на отдельной бумажке в виде блок-схем. В сишарпе тоже самое, приходится весь сахар выписывать на бумажку и смотреть во что разворачивается та или иная закорючка. И боюсь, что в ноябре микрософты ещё накинут нам сахарку, что все офигеют. Какую-нибудь конструкцию языка сломают так, что придётся по новой переучиваться.
>>2543519 Джава - это чистый ООП язык. Если ты соблюдаешь ООП-стиль, то проблем не возникает. Проблемы как раз в сишарпе, который пытается добавлять сахарок, чтобы продолжали писать в процедурном стиле. Сишарп позволяет много вольностей в плане размещения классов по файлам, самих файлов по папкам, и порой малоопытный программист клепает лютый говнокод. В джаве же изначально приняты стандарты, которые заставляют писать упорядоченный код.
>>2543703 >В сишарпе тоже самое, приходится весь сахар выписывать на бумажку и смотреть во что разворачивается та или иная закорючка. Чувак мы поняли уже, что джависты тупые и без бумажки код разобрать не могут. Съеби уже. Сарказм, если что. Не считаю джавистов тупыми, кроме конкретно вот этого.
>>2543728 Легкость и простота джавы не говорит о том, что на ней пишут тупые. Напротив умный человек будет стремиться к простым и элегантным решениям. Разве можно назвать код на сишарпе таким? Нет, там в одной строчке может быть с десяток всяких знаком вопросов, восклицательных знаков и прочих закорючек. Такой код сложно читать и воспринимать. Код на джаве же порой читается также легко как текст на английском (для тех, кто понимает английский).
>>2543703 >Но как раз в джаве удобно писать и ещё удобней читать код ага ага. правда вместо 2 строк получается текста на 3 страницы, но то такое. >>2543748 >Код на джаве же порой читается также легко как текст на английском только читать приходится много. И ничего хорошего в этом нет. Аж вообще ничего. А в случае с многопотоком еще и держать большой контекст в голове, ведь сложное выраженное убогими словами как бы добавляет сложности.
>>2543792 Ты как программист всё равно должен вникать во все тонкости. Разница лишь в том, что на джаве ты сам выстраиваешь логику приложения, а сишарпе вынужден подстраиваться под микрософт. Если они завтра выкатят какое-нибудь говнецо, то придётся им пользоваться, потому что выбора нет. При этом ещё и вникать в кишочки этого говнеца, полностью в нём вымазавшись.
Сейчас работаю на десктопе, через ~год (если айти до конца не здохнет) хочу перекатиться в веб. Как лучше сделать, чтобы увеличить шансы на вкат + чтобы было по-сытнее? Рассматриваю 2 пути - ASP.NET + js + react (не хотел бы связываться с динамикодрисней, можно ts учить без js? нужен ли хтмл и css? какой-то другой фрейм для фронта мб?) - фуллстак вариант, или же ASP.NET + Go - чисто бэкенд варик, с мб полностью переходом на го - платят вроде больше. Что посоветуйте, аноны?
>>2543942 Лучше смотри в сторону .NET с модными молодежными микросервисами, без ГОвна только. Я сам декстоп винФормс + чистый бэкенд, но монолиты. Перекатиться с миддла почти 4 лвл на миддл/+ на чистого бэкендера с стейт-оф-арт стеком пока не получается.
>>2543971 Ну в сторону модных молодежных сервисов и смотрю, только как в них с десктопа залететь - вопрос. В вебе я сделаю выпуки на уровне вкатунцов курсовых.
>>2543820 Какой забористый бред ты несешь. Жавист, уходи. Ну просто траллишь же, что допустимо, но хоть бы не делал это так уныло.
>что на джаве ты сам выстраиваешь логику приложения... вынужден подстраиваться под микрософт подстраиваются не под вендора, а под средства языка из-за ограниченности выразительных средств вынужден строить монструозную хрень только потому, что иначе на этом убожестве и не выразить. сравни многопоток на жаве и... да на чем угодно.
> то придётся им пользоваться да прям таки. неудачные концепции отмирают. примитивная концепция new Thread()/BeginXXX в шарпе давно заменилась на удачную концепцию TPL/async+await и первое используют имхо только в школах школьники.
Если я хочу добавить для веб апи веб интерфейс, как лучше это сделать? Добавить страницу разор непосредственно в проект, или создать отдельный проект и вызывать апи из него?
>>2544937 Объясни мне, анон, без троллинга, почему Foo(IAboba aboba) не равно Foo(T aboba) если вместо T вызывающая сторона может поместить только IAboba?
>>2545064 Ну так и скажите что пацаны не вывезли в таблице вызовов поэтому НИНУЖНО (ну или это я шиз и такого кейса никогда не было)
Если у какой-то функции в компайлтайме с применением ограничений сигнатура соответствует функции интерфейса - это одна и таже функция, и интерфейс должен считаться реализованным, хули нет то?
Если proposal на гитхабе накидать, индусы сделают или обоссут?
Есть исходный лист, мне нужно запретить вмешиваться в него. Сто делает метод .AsReadOnly? Он делает дубликат коллекции или обходится малой кровью, выставляя какой нибудь флаг?
И вообще, как поступить в такой ситуации: мне надо драг н дропом перетащить итемы из одной условной таблицы в другую. Из одной таблицы я формирую список итемов, а в другой он обрабатывается и может этот список повредить. На чьей стороне, так сказать, возложены обязательства?
С одной стороны неизвестно кто и каким образом будет обращаться с твоим списком и логично делать копию на стадии формирования списка. С другой стороны метод обрабатывающий список как бы становится небезопасным т.к. шатает список, а пользователь может этого и не просил. Если будут двое копировать список, то дюже затратно.
>>2545139 ну ты создаешь open generic. Чтобы этой твой класс смог реализовывать интерфейс, компилятор должен сразу создать closed generic версию класса. И очевидно это не было сделано потому что "хз зачем это нужно"
Почему говорят о модели в рамках MVC как об одной сущности? Но ведь по факту там их две: POJO-объекты, которые определяют тип модели, и репозиторий, который определяет где это всё хранится. Почему тогда не выделить в MVC четвертый компонент R, чтобы было понятно всем?
Итт есть блейзеро-зумеры? В каком же я ахуе какой я долбаёб и повелся на новомодные технологии какое майки выслали говно - на данный момент у меня полностью пизданулась отладка проекта. Суть: зашёл в свой блейзоро проект спустя несколько месяцев (допиливал на .net framework легаси говно) попутно обновляя студию. Сейчас у меня 17.4.3 студия - блейзоропроект при запуске висит в вечном лоад стейте (да, веб проект в дебаг среде просто перестал загружаться) и выдает какую-то одну из ебанутых ошибок в консоли браузера, сейчас например "WebSocket connection to 'wss://localhost:port/projectname/' failed. Error in connection establishment: net::ERR_CERT_DATE_INVALID. То есть сейчас у меня по сути только последний паблиш релиз живой. У меня и раньше отапливался websocket со студией, но по крайней мере с ним отапливался только хот релоад и отладка на стороне клиента (что тоже конечно хуево), а сейчас совсем нихуя не запускается. Гугление навскидку пока нихуя не дало.
>>2546050 На вскидку: - отличие doble, int, decimal - что возвращает метод async - отличие абстрактного класса от интерфейса - объясни модификаторы доступа в c# - отличие unit тестирования от integration Можешь посмотреть ещё c# design patterns, бывает, что спрашивают.
>>2546050 Могут ещё на знание сахарка пример подлый подсунуть, чтобы проверить не с джавы ли ты свичнулся. string checkNull(string? maybeNull) { return maybeNull == null ? null : ""; }
А что это за чудо такое KeyStates? Оно, к примеру, есть в эвенте DragDrop. Если нажать несколько клавиш и вывести KeyStates в консоль, то пишутся состояния через запятую, типа: LeftMouseButton, ShiftKey
Перечисления ведь передаются в единственном числе.
>>2545889 хотят и говорят. это логическое деление V - вид отображающий M - вся логика которая что то делает C - отвечает за связь остальных букв и интерактив
И всем понятно. Ведь всем понятно, что это описывается деление на логические куски и им дали более менее подходящие названия.
Ну кроме тех, которые "постойте постойте, кака така модель? я вот моделями называю классы, что репа с ними работает, а тут модель что то не то, вы что угораете?"
>>2546767 С нуля не реально. Нужно знать какой-нибудь язык типа джавы, тогда за полгода-год реально осилить. Но имей ввиду, что за это время микрософты выпустят новые версии сишарпа и дотнета и придётся снова переучиваться. Следующая версия как раз LTS, а они любят под неё все переворачивать с ног на голову.
>>2546833 давно известно что первый язык (программирования или разговорный) выучить сложнее всего. Остальные идут намного легче. И чем больше базового познаешь - тем легче очередной язык.
так что нет понятия "лучше", есть "легче", но шарп тут не причем. Это касается вообще любого языка схожего по парадигме.
>>2543703 Петушарп в принципе включает многое из жабы, на нём в теории можно писать понятный код. В теории. На практике майки себе в обезьянки заделали тех, кого легче всего заделать - самых тупых кодомакак. И теперь мы имеем, что имеем - живое представление того, как из двух почти идентичных языков можно сделать абсолютно разные экосистемы.
>>2547150 Не спрашивали всю эту хуйню. Дали тестовое - я его норм сделал не без огрехов и взяли. В процессу всю эту залупу можно выучить. И то, по необходимости.
>>2547894 >Петушарп позорно использовать Я такое уже неоднократно слышал, но не понимаю почему. Это из-за микрософта?
>уебищная экосистема Тут ты не прав. Наоборот в дотнете всё доступно из коробки. А вот в джаве наоборот надо выискивать от сторонних разработчиков и применять разной кривости решения. Сравнить тот же Thymeleaf и Razor. В первом нельзя делать даже вложенные шаблоны, а второй позволяет чуть ли не писать код вперемешку с разметкой, полная свобода.
>>2548024 >Это из-за микрософта? Убогий клон жабы с кучей бесполезного говносахара, кучей говнокода в экосистеме от школьников, кучей школьников в комьюнити, кучей анальных палок всем системам, кроме шинды, куча пиздежа, в том числе про кроссплатформенность.
>>2548438 >жабы с кучей бесполезного говносахара, жабист не палится. совсем не палится. привык к МНОГОСЛОВНЫМ, монструозным, многостраничным описаниям ПРОСТЫХ вещей и считает что его говно не пахнет )
>>2548746 А мне нравится явно писать геттеры-сеттеры. Код как-то красивее выглядит с ними. А сишарпные { get; set } к тому же не гибкие, к ним надо костылить дополнительное поле, которое жрёт ещё память.
>>2548746 Магические атрибуты - убивают жаву, няша. Это очень плохая хуйня. Негодная. Чем больше магии, тем хуже. Банально, ты не можешь даже перейти к куску кода, который эту магию делает. Вот майки - это поняли и потому - из фреймворка потихоньку выпиливаются атрибуты магические. И это - хорошо.
>>2548796 Это такой троллинг тупостью? Шарповые геттеры и сеттеры это просто сахарок для методов huinya getHuinya() и void setHuinya(huinya value). Они настолько же гибкие, как и явные геттеры и сеттеры. Или ты каким-то чудесным образом придумал как хранить состояние объекта, не заводя под них поля внутри класса, которые в эти геттерах и сеттерах вертишь? С производительностью и потреблением памяти там все одинаково. Единственная разница, что со свойствами компилятор за тебя генерирует часть бойлерплейтного кода.
>>2548821 >ряяяяяяяяя!!!! А по делу есть чё сказать? Например там пруфы что это магические атрибуты и что я должен ручками, как истинный петушарпер, делать конструкторы?
КРИВОРУКОЕ ШКОЛОКОМЬЮНИТИ ПЕТУШАРПЕРОВ НЕ ЗАВЕЗЛО ЛОМБОК @ РЯЯЯЯ НИНУЖНА!!! И ЭТА ВАЩЕ МАГИЯ!!! @ С ЛИЦОМ АНАЛЬНИКА ДУБЛИРУЕШЬ ВСЕ ПОЛЯ В КОНСТРУКТОР @ @ @ ДОБАВЛЯЕШЬ МАГИЧЕСКОЕ {get, set} К ПОЛЯМ
>>2548863 Ну. Дык это буквально магические атрибуты. Если ты взглянешь на них, без знания, что это за магия - ты не поймешь как они работают. Ты не можешь перейти и посмотреть что за код выполняется, как и где. Конструкторы - имеют 0 ссылок на вызов. Приватные поля - магическим образом получают геттер-сеттер. Это магия в чистом виде. А любая магия в программировании - плохо. И да. В шарпе - такую же магию ты можешь запилить сам буквально за 10 минут. Просто тебя ссаными тряпками закидают, и именно потому что это магия, которая не решает никаких проблем, но усложняет понимание твоего кода.
>>2548868 >РЯЯЯЯЯЯЯЯЯ ЯСКОЗАЛ ЛУЧШЕ РУЧКАМИ КОНСТРУКТОРЫ ПИСАТЬ ПОТОМУ ЧТО КРИВОРУКОЕ ШКОЛОКОМЬЮНИТИ НЕ СМОГЛО В ЛОМБОК, ЯСКОЗАЛ НЕУДОБНО @ALLARGSCONTRUCTOR ПИСАТЬ, ПОТОМУ ЧТО РЯЯЯЯЯЯЯЯЯЯЯ
Хотел создать событие SelectionChanged для собственного класса, и под это дело решил заюзать дефолтный SelectionChangedEventArgs. Но эта параша требует id класса RoutedEvent (первый параметр).
Простите за французский бейсик, но думаю все ясно.
>>2549081 >Но как потом перейти на 7 версию? Учишь по книжкам, делаешь проекты. Когда будешь готов, открываешь официальное руководство от майков по переходу с 2.1 на 7.0 и переводишь свои проекты. В процессе научишься.
>Сильно ли это сложно? Если учишься по принципу: "скопировал пример из книжки, если собралось/запустилось - то значит я научился, идем дальше", то да. Если же вдумчиво перебираешь кишочки и понимаешь зачем и что нужно, то нет.
>>2549228 Потому что так диды делали и ты будешь. А если серьезно, потому что dotnet-ef не часть студии. Если же тебе прямо совсем нужно, то там вроде были расширения для консолефобов, позволяющие мэнеджить миграции из студии.
Суп, подскажите, что сделать с этим? Пик 1 - проблема Пик 2 - то, что я установил Пробовал и в VS 19, результат один Раньше как-то получалось. Сейчас: в дизайнере форма есть, но при сборке проекта ошибка Да, на Шарпе это всё проще, но мне надо на крестах, но не собирается
Извиняюсь, что сру уже в третий тред этим, просто испытываю довольно жёсткий баттхёрт с этого. Помогите, пожалуйста... Из треда плюсов послали к вам
>>2549489 Спасибо, я видел эту простыню и она меня сукгнула. Хотя щас еще раз пересмотрел и по факту нужна только часть EventManager.RegisterRoutedEvent.
>>2549600 >Я не понимаю о чем речь идет. Мне винформу нужно создать, при запуске получается пикрил Не понимаю, может, установил что-то ненужное и происходит конфликт?
Есть список условных кнопок Buttons Есть переменная так называемой активной кнопки ActiveButton, где лежит ссылка на одну из кнопок списка Buttons.
Как мне сделать так, чтобы событие нажатия кнопки срабатывало только от ActiveButton? Есть какое-то лаконичное решение без подписки на всю сотню кнопок списка Buttons? Может через какой-то биндинг.
Вот я видел, что в DataTemplate (xaml) можно привязать событие к каждому итему в списке. Он что, рили подписывается на каждый итем из списка?
Посоны, какой версии asp.net core сейчас стоит изучать? На метаните уже лежит 8 версия, но полно хороших гайдов под .net core 2.2, у того же kudvenkat 120 видосов по нему.
>>2551112 На 3.1 успели написать достаточно много и монолитов и микросервисов (которые как раз стало удобно делать начиная с 3.1). Поэтому вероятность даже в следующем году попасть на проект с 3.1 где тебе предстоит что-то доделывать или писать новое - достаточно высока. Плюс никто не даст джуну писать, что-то новое сразу на .net6 или .net7, такие игрушки дяди сеньоры оставляют для себя. Ну а идти работать без опыта куда-то где есть что-то ниже чем 3.1 смысла нет.
>>2551442 А, еще 10 часовой видос, но это по mvc, хз, юзают ли его до сих пор, мне чет кажется, что сейчас все на webapi + жаваскрипте, еще в некоторых вакансиях даже видел блейзор
>>2551445 mvc от webapi отличается только чем ты пукаешь в ответ на запрос - технология то одна и та же. Бля... Мне видимо самоу придется учить жопаскрипт хэтэмээль и сисисэс... Не хотю...
>>2551513 и как данные на фронт идут - формируются динамически и отправляются в случае разора и прочей обмазанной жабаскрипто дрисни, или же пукаешь жсончиком на развернутый в браузере фронт.
>>2551442 >Посоветуешь хорошей литературы по этой версии? Хуй знает, я за 5 лет в профессии ничего кроме Рихтера и краткого справочника Албахари не читал. Все остальное по офф. докам от майкрософта изучал, там инфа по всем версиям есть.
>>2551513 Я тоже не хотю учить жаваскрипт и хэтэмээль, я только закончил 150 уроков по sql от kudvenkat, думал я до этого SQL знал, а оказывается нихуя и у того же метанита наверное всего 20% контента, которое он описывает. >>2551598 Хуясе ты чад, я Рихтера тоже читал, но давно, хотя многое до сих пор помню.
>>2551609 Хз у меня на работе десктоп, есть webapi небольшое. Поковыряю асп.нет, поковыряю всякие медиаторы cqrs немного тестов и прочую дрисню крутану еще годик попыта и влечу куда-нибудь надеюсь посытнее. План такой. Насчет фронтодрисни хз, если честно. Пока молодой все интересно, все хочется потыкать, но энивей времени есть где-нибудь полгода - нужно как-то концентрированно зазадротить. С жабаскриптохуйней вроде шансов повыше залететь, но платят фулстакам все равно меньше чем ГО-внерам, хотя хз.
>>2553013 Хех, я только что отсмотрел 150 видосов от kudvenkat по sql, дальше у майкрософтов прочту про asp.net core 5, позадрачиваю некоторые задачки на литкоде, попробую парочку проектов на гитхаб аплоднуть, выучить git и docker, повторить энтити фреймворк и пойти уже собеседоваться. Думаю за месяца 2 управлюсь, я до этого уже имел опыт и с asp.net core и энтити фреймворков и sql, но вот html, javascript и css у меня соснулые.
>>2550619 > событие нажатия кнопки срабатывало только от ActiveButton? Чагоблять? У тебя все кнопки видны? Их все можно нажать? Но одна из них будет работать? Ты сам то не чувствуешь проёб в дизайне своём?
Что полезно изучить за сутки к собеседованию на позицию джуна c#? (а точнее даже стажера) Перекатываюсь из 1с, тестовое задание сделал как-то по наитию
>>2556579 На ютубе есть полно курсов по шарпу, типа многочасовых видео. Смотришь 10 часов шарпа, потом 4 часа EF, 4 часа форм, 6 часов ASP. Как раз укладываешься.
Помощь новичку в освоенииНовенький02/01/23 Пнд 16:04:58#1144№2560931
Доброго времени суток всем работягам! Начинаю, в это нелегкое время, свой тернистый путь C# разработчика. Меня интересует преимущественно бэкенд. Хотелось бы в этом треде найти единомышленников или людей с опытом работы в этой индустрии. Изучаю шарп уже полгода, но всё равно чувствую, что во многих местах присутствуют пробелы в знаниях (как минимум на тестовых заданиях и интервью при трудоустройстве). Я понимаю, что есть огромное количество учебных материалов и ресурсов, но откровенно говоря, в них можно просто утонуть, затянув при этом свое обучение на долгие, долгие годы. Поэтому хотелось бы найти человека, который поможет сориентироваться на месте и подсказать несостоявшемуся джуну как оно всё устроено на самом деле. Надеюсь на Ваше понимание)
>>2561151 Если отвечать прямо на этот вопрос, то да. Меня больше интересуют идейные люди, чьи интересы не ограничиваются работой "от" и "до". Это всё на добровольной основе и никак не регламентировано. Я буду благодарен любой помощи, даже если это будет 10 минутная переписка с наставлениями и рекомендациями.
1. Ресурсы:
— https://dotnet.microsoft.com/learn
— https://ru.stackoverflow.com/a/416585/422180
— https://metanit.com
— https://professorweb.ru
2. С# для веб
— https://docs.microsoft.com/ru-ru/aspnet/core
3. C# для десктопа
— WPF ( https://docs.microsoft.com/ru-ru/dotnet/desktop/wpf )
— WinForms ( https://docs.microsoft.com/ru-ru/dotnet/desktop )
4. С# для игр
— Unity-тред в /gd/
— Учебники https://ru.stackoverflow.com/a/609901/422180
5. С# для мобильной разработки
— https://docs.microsoft.com/ru-ru/dotnet/maui
6. Годные ютуб-каналы
— https://www.youtube.com/c/CODEBLOG
— https://www.youtube.com/c/AndreyShyrokoriadov
— https://www.youtube.com/c/DevJungles
— https://www.youtube.com/user/Shmachilin
Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: