Этого треда уже нет.
Это копия, сохраненная 13 февраля в 11:33.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
C# вот-вот 8 дотнета тред #53 /csharp/ # OP 2920885 В конец треда | Веб
Предновогодний тред лучшего языка на планете.

1. Ресурсы:
https://dotnet.microsoft.com/learn
https://github.com/dotnet
https://ru.stackoverflow.com/a/416585/422180
https://metanit.com
https://professorweb.ru

2. С# для веба
https://docs.microsoft.com/ru-ru/aspnet/core

3. C# для десктопа
https://docs.microsoft.com/ru-ru/dotnet/desktop

4. С# для игор
https://dotnet.microsoft.com/en-us/apps/games/engines

5. С# для мобильной разработки
https://docs.microsoft.com/ru-ru/dotnet/maui]

Шапка: https://pastebin.com/HT7Hi6FD
Предыдущий: >>2910820 (OP) (OP)

ВНИМАНИЕ, в тред повадился срать джавадебил. Шарпочане, игнорируйте, а лучше репортите. Главное - не кормите.
2 2920899
В чем прек интерцепторов, которые добавят? Какие кейсы?
3 2920900
>в тред повадился срать джавадебил.
Мне кажется, что у админов это такая стратегия, чтобы поддержать тред на плаву. Не в первом разделе наблюдаю такой эффект, когда тред начинает затихать, и в него врывается свой местный шиз и начинает байтить на споры. Схема везде идентичная.
4 2920902
>>2920899
Может для доступа к методам, к котоырм просто так не добраться. С другой стороны зачем все обмазали интернал методами, чтобы потом городить интерцепторы?
5 2920903
Репортите пожалуйста этого гандона как только он высовывает рыло. Спасибо.
6 2920904
>>2920903
Ну так ты не отвечай. А если отвечает кто-то другой, значит ему нравится.
2023-11-1400-43-13.png45 Кб, 698x878
7 2920911
>>2920899
не для кожаных мешков
Screenshot2023-11-14-03-48-07-396com.zchandev.iChan-edit.jpg388 Кб, 1080x1705
9 2920915
>>2920900
Я айчаном пользуюсь, а в нем потёртые сообщения остаются. И судя по нему, модер таки потер испражнения, которыми жавадебил новый тредик испачкать пытался.
Давайте скажем спасибо дяде-модеру
10 2920916
>>2920885 (OP)

>вот-вот 8 дотнета тред


Все ближе к почившему бейсику. Аж на душе тепло.
Скоро мы все будем путаться в том, что поленились создать ручками.

Но вот от точки запятой я бы без иронии отказался. Жду C# 13.
11 2920919
https://habr.com/ru/articles/773444/
Что-то, как по мне, не в ту сторону они идут. Мне возможность обрезать ASP .NET Core приложения не сильно, честно говоря, упёрлась. Я ещё не сталкивался с тем, чтобы размер получающихся приложений был проблемой, чтобы так запариваться.
12 2921141
>>2920919
Это нужно дядям в майкрософте из Azure, чел. Го уж больно сильно дышит в спину шарпу (и джаве).
13 2921151
>>2921141

>Го уж больно сильно дышит в спину шарпу (и джаве).


кто сказал? С каких пор на го стало нормально писать что то не мелкое?
14 2921230
У ObservableCollection в событии CollectionChanged, свойство NewItems имеет тип IList.

Собсно вопрос: а какого хрена, если я не могу в ObservableCollection изменить больше одного итема? Там даже нет метода AddRange, или EditRange. В чем смысл?
15 2921253
>>2921230
Слишком мало времени прошло. https://github.com/dotnet/runtime/issues/18087
Они слишком заняты написанием новых фич
Баги править некогда
16 2921260
>>2921230
Вернее там обсуждение и даже пуллреквест и он даже типа мержед уже несколько лет
Но хз где все это теряется по пути к выпуску фреймворка
17 2921526
>>2921253
>>2921260
Ясно, теперь понятно почему мой кастомная ObservableCollection не поддерживала AddRange, даже если я сам шатал событие CollectionChanged — xaml привязки просто не реагировали на это.
18 2921624
>>2920885 (OP)
Прошу прощения, что прерываю ваши срачи. Но мне нужен совет знающих людей. Я слышал от вас, что все самые крутые программисты пишут на шарпах. Ну вот подскажите пожалуйста.
Есть предприятие. В нём десятки разных рассылок. Большинство из них отбирают получателей всяким хитроумным образом по неким данным о случившихся событиях. Всё это захардкожено в разных местах. Периодически захардкоживается сам получатель или даже только его мейл или номер телефона, куда слать смс.
В итоге есть куча получателей, которые уже давно уволились и куча потенциальных получателей, которые даже не знают, какие рассылки специально для их должности уже сделаны, и служба поддержки, которая затрудняется всё это перенастраивать. Плюс компания на одних только смсках теряет кучу бабла, тогда как у всех сотрудников есть емейлы, есть приложения от нашей же компании, но мы всё равно шлём смс "для надёжности".
А как это у вас сделано и организовано?
19 2921869
>>2921624
Ты че, собрался все это переделывать с нуля или обуздать?

Вероятно должна быть какая-то база данных с сотрудниками и там хранятся контактные данные, и если в этой базе отсутствует сотрудник, либо его статус или данные не соответствуют правилам рассылки, то никакой рассылки для него не будет. Данные это класс сотрудника, в котором есть свойства с телефоном, почтой, днем рождения, должностью, филиалом и т.д.

А вообще на ютубе полно туторов по созданию каталогов условных магазинов товаров, где у товаров есть различные категории. Суть одна и та же. Так же ознакомься с паттернами проектирования.
20 2921956
>>2921624
Ваша компания называется "6-Б класс"? Выглядит так, как будто создатель это системы делал все по наитию, зная только синтаксис шарпа.
.png64 Кб, 718x739
21 2922052
Ну всё, релизнулось, можно качать.
23 2922067
Ебать они там всего наоптимизировали
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/
24 2922085
>>2922052
без поддержки студии (да решарпера) бесполезная шняга
так что еще ждать и ждать
25 2922094
>>2922085
Студия уже, додик, а чо там у жыдбрейнсов ниебет
26 2922096
>>2922094
лол. посмотрите на этого поборника голой студии
прямо спартанец.
27 2922107
Я вот ещё только разбираюсь в шарпах поэтому прошу помощи. Вот у меня есть только 1 моделька и небольшой набор CRUD операций к ней. Стоит ли вообще добавлять в проект Mapper или на меня как на дурачка посмотрят?
28 2922110
>>2922107
вопрос использования мапперов это вопрос религии.
29 2922112
>>2922110
Так есть ли шанс что эти старания хоть кто то оценит? Или сразу в касту пониже за подобные приколы определят
30 2922116
>>2922112
достоинства для одного являются недостатками для другого.
лично я противник мапперов за их неявность, то есть предпочитаю маппить явно

а еще в шарп есть operator explicit/implicit о котором почему то все забывают. И раз уж я маплю явно, то навешиваю это дело на него

вот за это на костре сожгут
31 2922173
Аноны, подскажите че делать.

Есть условный базовый класс-контрол (пикрил 1), у которого есть слайдер и ползунок этого слайдера (UI-Thumb). На входе есть свойство OffsetValue. Если это свойство изменить, то вызовется событие, которое изменит положение ползунка. А если тянуть ползунок, то изменится значение OffsetValue.

А теперь я наследую этот класс (пикрил 2), который на вход принимает GradientStopValue состоящее из двух параметров: Color и Offset. При изменении свойства, Offset идет на OffsetValue базового класса, а Color идет на второй контрол UI-Color для отображения цвета.

Собсно затык в том, что делать, если будет изменен ползунок слайдера UI-Thumb. Как мне изменить свойство Offset значения GradientStopValue?

У меня получается зацикленность. Если я буду отслеживать изменение свойства OffsetValue, а потом измению GradietnStopValue.Offset, то это вызовет событие OnGradietnStopValuePropertyChanged, которое изменит OffsetValue которое ... ну вы поняли.
32 2922193
>>2922173
Одно из решений проблемы — это создавать флаг подавления в хенделере события OnGradientStopValuePropertyChanged, но оно мне кажется каким-то кондовым и грязным. Может есть какой-то иной подход? Конструкция этих двух классов может меняться как угодно, но должно быть два класса.

Интересует решение зацикленности, когда свойство может меняться с двух сторон.
33 2922321
>>2921869
В планах и обуздывать, и частично переделывать.
Про какие именно паттерны идёт речь? Их много.
Категории - понятно. Кто будет эти категории проставлять? Как? По каким правилам? Как заставить работников включить уведомления для нужных рассылок, чтобы они потом не жаловались, что они ничего не знали и ни в чём не виноваты? Они же привыкли к смскам, а работников тысяч
и. Как назначить используя класс работника рассылку "дежурному заместителю старшего монтёра вышестоящего подразделения"?
>>2921956
У меня такое же впечатление, если честно. Делали разные люди, в том числе и знакомые с паттернами. А получилось всё равно дико сложно, запутанно, дорого, неуниверсально и неудобно.
Потому я пришёл спросить, как это сделали умные люди.
2023-11-1423-42-59.png73 Кб, 1476x886
34 2922323
>>2922173
Короче такой вариант.
Добавил флаг IsThimbsDragging в базовом классе, который активируется при начале перетягивания ползунка и деактивируется при завершении.

Дальше класс-наследник подписывается на событие перетягивания ползунка ThumbChangedEvent.

Хендлер OnGradientStopValuePropertyChanged проверяет флаг IsThimbsDragging и не делает ничего, если флаг == true.

Но все выглядит как какая-то переусложненная залупа.
35 2922351
>>2922321

>Про какие именно паттерны идёт речь? Их много.


Я не могу подсказать точно. На мой взгляд тут громадный объем работы, если делать с нуля.
По идее у тебя определенно должны быть сервисы, чтобы если что, то можно было бы что-то еще добавить без боли, или чтобы в будущем замена одного не мешала другому. От этого и копай.

>Кто будет эти категории проставлять? Как? По каким правилам?


Тот, кто занимается рассылками. Если все настолько адресно вплоть до одного человека на предприятии, то какой смысл в категориях? С другой стороны, есть ли персонал, который будет поддерживать всю эту категоризацию и следить за актуальностью базы данных? Используется ли эта база данных где-то еще, или придется ее поддерживать онли для рассылок?

Часто в предприятиях есть уровни доступа, чтобы какой нибудь левый Васян не смог взять и удалить сотрудника из базы данных, или разослать всем дикпики. Поэтому на вопрос "кто это будет делать?" я ответить не могу.

Непонятно какого рода сообщения. Т.е. это надо сесть и проанализировать их, в каких ситуациях они возникают и прочее. Найти взаимосвязи на предмет того, что можно сделать универсальным и как облегчит работу с приложением. Составить блок-схему приложения. Я не знаю, есть ли мегамозги, которые вот так просто могут броситься в омут не анализируя ничего и написать приложение. Первое что всегда делается — это сбор данных, чтобы понять куда двигаться дальше.

Я месяц потратил чисто на АНАЛИЗ своего приложения. Собирал данные и структурировал всё, смотрел как сделано у других. Мне никто в общем-то не подсказывал ничего глобального ИТТ. Тут один анон подсказывал какие-то локальные вещи, был достаточно компетентный, но он по ходу съебался. Он мне рассказал про MVVM паттерн, потому что до этого я считай вручную забивал данные в текстбоксы и была целая каша, когда одни и те же данные должны были отображаться в разных окнах, к примеру. Потом мне понадобилось логирование, а в туторах оно разъяснялось через Dependency Injection — так я познакомился с сервисами. А с этими вещами все достаточно легко масштабируется.
35 2922351
>>2922321

>Про какие именно паттерны идёт речь? Их много.


Я не могу подсказать точно. На мой взгляд тут громадный объем работы, если делать с нуля.
По идее у тебя определенно должны быть сервисы, чтобы если что, то можно было бы что-то еще добавить без боли, или чтобы в будущем замена одного не мешала другому. От этого и копай.

>Кто будет эти категории проставлять? Как? По каким правилам?


Тот, кто занимается рассылками. Если все настолько адресно вплоть до одного человека на предприятии, то какой смысл в категориях? С другой стороны, есть ли персонал, который будет поддерживать всю эту категоризацию и следить за актуальностью базы данных? Используется ли эта база данных где-то еще, или придется ее поддерживать онли для рассылок?

Часто в предприятиях есть уровни доступа, чтобы какой нибудь левый Васян не смог взять и удалить сотрудника из базы данных, или разослать всем дикпики. Поэтому на вопрос "кто это будет делать?" я ответить не могу.

Непонятно какого рода сообщения. Т.е. это надо сесть и проанализировать их, в каких ситуациях они возникают и прочее. Найти взаимосвязи на предмет того, что можно сделать универсальным и как облегчит работу с приложением. Составить блок-схему приложения. Я не знаю, есть ли мегамозги, которые вот так просто могут броситься в омут не анализируя ничего и написать приложение. Первое что всегда делается — это сбор данных, чтобы понять куда двигаться дальше.

Я месяц потратил чисто на АНАЛИЗ своего приложения. Собирал данные и структурировал всё, смотрел как сделано у других. Мне никто в общем-то не подсказывал ничего глобального ИТТ. Тут один анон подсказывал какие-то локальные вещи, был достаточно компетентный, но он по ходу съебался. Он мне рассказал про MVVM паттерн, потому что до этого я считай вручную забивал данные в текстбоксы и была целая каша, когда одни и те же данные должны были отображаться в разных окнах, к примеру. Потом мне понадобилось логирование, а в туторах оно разъяснялось через Dependency Injection — так я познакомился с сервисами. А с этими вещами все достаточно легко масштабируется.
36 2922729
>>2922112

>Так есть ли шанс что эти старания хоть кто то оценит?


Ты неправильно ставишь вопрос. Это не должно быть "стараниями". Ты должен достаточно хорошо разбираться в технологии так, чтобы вопрос "прикручивать или не прикручивать" был из области вкусовщины, а не того сколько ты времени затратишь на это дело.
37 2922990
читаю что нового в шарпе 12
все мутнее и мутнее

новый синтаксис массивов....всего то 20 лет прошло.

ref readonly - че сразу его не сделали

[System.Runtime.CompilerServices.InlineArray(10)]
public struct Buffer
а чем этот буфер отличается от stackalloc?

параметры для лямбд по умолчанию....кому то они были нужны?

примари конструкторы - тут же вам не котлин блин. Хотя и там они тоже спорное решение
(хотя как решение "а давайте принудим людей делать легковесные конструкторы, а логику не пихать в конструкторы" - норм, но в котлине поэтому есть init, а в шарпе что?)
38 2923113
>>2922990
В котлине местами ощущается, что делали неопытные люди. Ну типа этот инит выглядит как быстро фикс кривизны примари конструктора, когда у них есть обычные конструкторы.
39 2923121
>>2923113
Или же они позже добавили обычные конструкторы, но не выкинули инит. Хз, как можно было проигнорить момент, что бывает больше чем один конструктор, это ппц.

Помню они еще убеждали, что приватные сеттеры нам не нужны.
40 2923126
>>2923113
это не фикс кривизны, а разделение присвоения данных и логики
ну а вторичные конструкторы вынужденная мера, ведь иногда нужно больше 1го конструктора

зато в WPF сделали наконец диалог выбора папки. Не ждали? а они взяли и сделали, чтобы шарписты страдали.
41 2923138
>>2923126

>это не фикс кривизны, а разделение присвоения данных и логики


Там можно без инит присвоить полям, инит родили как раз чтобы логику впихнуть от первичного.
Просто если у тебя больше чем присвоить данные поля - вхерачь уже конструктор, какой нахер еще инит.

В общем, сначала идея, потом костыль. lateinit в туже степь
42 2923166
>>2923138

> у тебя больше чем присвоить данные поля


ну котлин вообще пошел по пути "меньше символов"

lateinit получше будет чем шарповское ! (отстань)
в теории, ведь "я присвою значение позже" отличается от "отвали и не проверяй поле"
тогда анализатор может проверить, а не забыли ли про присвоение этого поля в классе и напомнить об этом.

так что латеинит не хватает в шарпе. А ! как раз костыль
43 2923266
>>2923166
Нефига ты анализаторы одухотворяешь. Может там сделано как раз наоборот? Разработчик компилятора даже говорил, что у них нет внутренней доки, ты представляешь какой там бардак?

Просто проблема шарпа в том что на него натягивают, а котлин такой уже родился, но даже тут можно было не использовать 100500 ключевых слов, а сделать что-то типа:
val vr: Type = ?
Или вообще по дефолту следить за всеми не нулл полями без инициализации (самим помечать как lateinit)
44 2923285
>>2923266

>Нефига ты анализаторы одухотворяешь


потому что это ревью кода на стадии разработки этого кода. Иногда могут ошибаться, но обычно точно указывают либо на ошибку, либо на неоднозначность.

Сам наступал на грабли когда посчитал что решарпер ошибается и засупресил его. И потом через время в рантайме выяснилось что ошибся я. И я потратил потом тучу времени чтобы выяснить причину.

>проблема шарпа в том что на него натягивают


никто ничего не натягивает. нулсафети не лезет в комплятор, это всего лишь анализатор не более. Так что нет никакой разницы кто когда родился. А вот то что в шарп принесли не латеинит (с его семантикой "позже"), а ! ( с его семантикой "вообще не смотри на это поле") уже явная недоработка шарпа

И да - в том же шарпе наделали туеву хучу аттрибутов на эту тему типа MayBeNullWhen (и чет их не парит использование 100500 слов), а вот латеинит нет.
45 2923318
>>2923285
Кто вообще тебе сказал что я разделял компилятор на фронтенд и бэкенд. Я сказал компилятор в целом и да, бардак.
Не удивляюсь почему котлин так медленно развивается.

Котлин уже дизайнели с такими костылями (но могли бы лучше), а в шарпе уже был рожден с нуллами и многим синтаксисом, поэтому были подводные и пришлось сделать хотя бы так. Но опять же, те вообще с нуля дизайнили и могли обойтись без lateinit - он выглядит как поздний костыль.

Сейчас бы вообще сидеть и сравнивать прокси язык с полноценной платформой. Хочешь, иди сделай пару сахарков и изобрети какой-нибудь F#
46 2923331
>>2923285

>и чет их не парит использование 100500 слов


Школота даже не понимает разницу между атрибутами и вреде ключевых слов, особенно уже живущего языка.

Написал бы это предложение раньше, я бы отвечать даже не стал.
image.png341 Кб, 547x410
47 2923352
Сука проклинаю тот день когда выбрал ебучий шарп.

Платят копейки, везде ебучее легаси и конкуренция с индусами за миску супа.
48 2923358
>>2923352
Индусы пишут на всем, что скажет западный барин. Просто последние годы связка .NET Fullstack + Azure стала востребованной у аутсорсеров и в Индии пооткрывали сертифицированных центров от майков.
49 2923360
>>2923358

>.NET Fullstack + Azure


Литерали ми блядь
50 2923364
>>2923318
а я не знаю почему ты связываешь анализаторы и компилятор.
Компилятор это конечно базовый анализатор правил чтобы код компилировался
Но в общем неважно - мне без разницы кто ВМЕСТО МЕНЯ проверяет код на нулсафети, лишь бы делал это правильно и мне сообщал об этом.

И я бы не сказал что котлин развивается медленно. Даже по сравнению с шарпом он развивается сверхбыстро.

>и могли обойтись без lateinit


критикуешь предлагай. В андроиде в силу его особенностей вообще норма поздняя инициализация. И если не lateinit то что? (как в шарпе не предлагать - это еще хуже)
"Не использовать" не предлагать. Ты против - ну не используй, кто заставляет. А в андроид просто иначе никак нельзя.

> Хочешь, иди сделай пару сахарков


я вообще не знаю что мы обсуждаем. я всего лишь высказал что латеинит лучше через !

>>2923331

>разницу между атрибутами и вреде ключевых слов, особенно уже живущего языка.


ну значит иди нах раз такой умник выискался
для справки - в шарпе предлагался АТТРИБУТ lateinit. Я вообще не ебу че ты завел речь про компиляторы, ключевые слова и прочее. Я говорил лишь про нуллсафети и способы с ней жить. Шарп высрал тонну разных аттрибутов на эту тему, но в итоге просто ставишь ! чем сможешь подобрать "как бля пояснить анализатору что тут не будет нулл потом и пусть заткнется"
51 2923374
Шарпаны, привет из джавы
Попробовал я ваш дотнет и сказать, что я охуел - ничего не сказать. Написал меньше, чем на джаве, а прочитать это проще. Буквально по-английски читаю без доки и понимаю, что здесь будет происходить.
Вообщем покопаю поглубже, поизучаю. Говорят, что я от entity framework и linq должен охуеть и невыхуеть обратно. На что еще обратить внимание?
52 2923413
>>2923374
На unsafe джавадебил, ты решил тактику сменить?
53 2923419
>>2923413
Че дебил-то сразу?
54 2923420
>>2923374
Шарп последние годы тяготеет к ФП. Не прям полностью, но заметно.
Из интересностей - генераторы кода потыкать.

А если так. MediatR, Foddy, Automapper, Dapper и в бой. EF - лично мне за годы работы с ним - больше боли принес.
55 2923424
>>2923420
а мне медиатр и автомаппер
потому что явное для меня лучше неявного.
56 2923507
>>2923420

>Dapper EF


SQL не нужен
57 2923520
Медиатор - это типа event bus? Это же пиздец антипаттерн, неявные зависимости, в которых потом ни за что не разберёшься. Это уровня goto, который может по любым файлам прыгать.
58 2923558
>>2923520
Медитр - это типа диспечера запросов. Просто немного по уебищному обзывают свои методы.

И я не знаю как тебе, но меня в свое время - здолбало руками диспачить запросы.

Ну а про то что может по любым файлам прыгать. Тебя контроллеры не смущают? Вот ты добавил новый контроллер - вот, теперь хуй пойми как, но ты после запросика по нужному роуту оказываешься в своем контроллере. Сылок на этот контроллер - 0 штук. Магия. Нахуй. Чет не смущает.
59 2923567
>>2923558

>Магия. Нахуй.


А вот в....
60 2923571
>>2923558

>вот, теперь хуй пойми как,


нет не хуй пойми как, а по вполне понятным заданным правилам
и да - это вынужденная мера поскольку мы ВЫНУЖДЕНЫ роутить по строковым правилам

С медиатром же не так. Он позволяет определить хендлер который "где-то" и вся система становится слабо связанной. И ты в рантайме даже не знаешь получил ли кто посылку или же из за каких то изменений теперь не получает. Да и вообще - где эти все. Конечно можно ходить по коду, но вся логика размазывается по вот таким хендлерам с неявной связью.
Это крайность, которая нравится не всем.
61 2923581
>>2923571

Че за "где-то"?

+features
|--feature_a
|----controller
|----request
|----response
|----handler
|--feature_b
|----controller
|----request
|----response
|----handler
62 2923584
+features
|--feature_a_controller
|--feature_a_request
|--feature_a_response
|--feature_a_handler
|--feature_b_controller
|--feature_b_request
|--feature_b_response
|--feature_b_handler
...
|--feature_y_controller
|--feature_y_request
|--feature_y_response
|--feature_y_handler
|--feature_z_controller
|--feature_z_request
|--feature_z_response
|--feature_z_handler
63 2923590
>>2923584
У нас обычно фичи осмысленно как-то называются.
Типа: DeviceRead, DeviceControl, DeviceReload, DeviceFirmwareUpdate, etc если все в одной папке будет - будет неудобно.
64 2923592
>>2923581
ну то есть ты пруфанул что у тебя логика размазана по всяким там хендлерам и вообще везде. Вместо явной зависимости которую вызываем (пусть и через интерфейс) мы посылаем "на деревню дедушке", а где этот дедушка - хз вообще то. А как этот дедушка дружит с транзами если мы что то делаем с ними - опять хз

Дедушки лежат по всему проекту и все общаются сообщениями.
мало отличий от классического евентбаса со всеми ему присущими недостатками.
65 2923594
>>2923592
Потому что плюсов - больше чем недостатков, няша.
Ну серьезно.
Начинать можем от того, что мы ХОТИМ снизить связность.
Заканчивать, что в случае рефакторинга, у тебя не меняются те части кода, которые к непосредственному рефакторингу не относятся, и на ревью не прилетает 100500 измененных файлов, через которые ревьюер не будет прбираться и просто завернет такой ПР.
66 2923606
>>2923594

>Потому что плюсов - больше чем недостатков, няша.


все это ОЧЕНЬ СУБЪЕКТИВНО
у тебя оно решает какие то проблемы, другие создает. Просто зло для тебя является допустимым, но так считают далеко не все.
Что для одного достоинство - недостаток для другого.
что рождает статьи подобные "Вероятно вам не нужен MediatR"

та же херня и с автомпперами. и с орм, и евентбасами и вообще всем на свете.
67 2923619
Если вы ещё обожаете MediatR, значит вы просто не сталкивались с упоротыми его ценителями. Я вот сталкивался.

Пришёл на проект. Там 20+ микросервисов. Во всех используется медиатр, причём весьма специфичным образом. В каждый сервис из общей либы подключаются behaviour-ы, которые извлекают и проставляют в реквесты мета-инфу (UserLogin, CorrelationId и т.д.) и логгируют в кафку все действия в системе (требование безопасников такое было). Все реквесты, кстати, наследовали общий базовый класс из этой либы, чтобы были поля, куда эту мета-инфу пихать.

Но самая мякотка была в взаимодействии между сервисами. Для всех HTTP и GRPC клиентов кодогенерацией генерировались хэндлеры, которые хавали запросы из медитора и отправляли их в сооветсвующие методы клиента. То есть, чтобы сходить во соседний сервис, нужно было посылать сообщение в IMediator. Также и с кафкой. Все прочитанные из топика сообщения по одному отправлялись в медиатр. Ну и для записи в топик, конечно, тоже нужно было засылать сообщения в mediatr, где их перехватытвал специальный generic-handler и пересылал в kafka-топик. Ну и приправлено всё это было автомапером, конечно. Ведь при таком подходе кол-во используемых DTO-х возрастало раза в два.

Вся это было сделано для того, чтобы универсальным способом логировать все действия в системе для аудита от безопасников.
68 2923623
учуся в быдлоунике, изучаем сишааарп, этот язык кому-то нужен ваще ? я хз
69 2923624
>>2923623
Мне нужен.
70 2923668
>>2923594
Я сейчас могу по всему коду приложения гулять через ctrl, find usages и find implementation. У меня явный и логичный граф зависимостей, в коллстеке всегда явно просматриваются слои абстракции.
Мне кажется, что медиатор используют там, где изначально дизайн кода говно, явным образом прокидывать зависимости стыдно, dependency injection будет порождать циклы, вот и маскируют этот ад пересылкой сообщений.
71 2923669
>>2923668
нет
медиатор используют там, где хотят уменьшить связность
и в итоге впадают в другую крайность - слишком слабо связано, все через сообщения через медиатор.
Кто то считает, что "если код нормально разложить, то все там понятно и структурно, да и вообще можно вклиниться".
Другие же считают, что логика слишком размазана по проекту и никакая структуризация тут не поможет.
72 2923737
>>2923623
Нет, сейчас все пишут на MERN стеке и питончике броу... Скажи своим преподам что они скуфы!
73 2923977
>>2923623
открой hh и посмотрим, кому нужен
Бонусом получишь список того, что именно из него нужно
74 2924019
>>2923623
Жаба протухла, нужна новая джава, вот и учи язык будущего.
75 2924136
>>2923977

>открой hh и посмотрим, кому нужен


и получишь список того, где программисты не задерживаются
Почему? хороший вопрос.
76 2924149
>>2924136
Ага ага, все топовые вакансии только в секретном клубе чатике!
77 2924154
>>2924149
ваще то да. я именно так себе и нашел. сам не искал, это меня нашли и еще упрашивали. холят и лелеют, чуть какашки за мной не убирают.
78 2924183
>>2924136
Человек спросил, кому нужен сишарп, я ему ответил, где смотреть. Мне похуй, задерживаются там или нет, пусть хоть на один день нанимают. Если ищут сишарп разработчика - значит в компании используют или собираются использовать сишарп
79 2924267
>>2922351

>Он мне рассказал про MVVM паттерн, потому что до этого я считай вручную забивал данные в текстбоксы и была целая каша, когда одни и те же данные должны были отображаться в разных окнах, к примеру.


Ну, у нас эта задача решена на уровне ERP. Там контрол на форме привязывается к полю таблицы БД, и они сами общаются между собой через data source и его data object-ы. Правда, чем отличается контроллер, модель представления и вот этот вот data source я что-то до сих пор никак не пойму.
А вопрос о рассылках был скорее в сторону "как сделать нечто универсальное, подходящее для самых разных задач". Пожар - уведомить соответствующие категории получателей. Датчики дают показания, требующие внимания - уведомить какого-нибудь дежурного специалиста в таком-то подразделении. Кому-то завтра на смену выходить - уведомить его и его начальника, например. Ну и так далее.
Часто нужно уведомить какую-то категорию получателей, отобранную по должности в каком-то подразделении. Проблема в том, что структура предприятия, или, скорее, предприятий, очень запутанная. Структур как бы несколько параллельных. При этом многие ветви одной из структур похожи, но не идентичны. А в другой вообще чёрт ногу сломит. Это просто дерево подчинённых подразделений, да ещё и с неограниченной вложенностью. И всё это можно ещё условно разделить по категориям: склады, производственные подразделения, офисы... И список должностей это целый зоопарк, где каких-нибудь сварщиков может быть четыре вида, хотя все они делают одну и ту же работу. Есть особый справочник, в котором перечисляются ответственные по подразделениям и т.д.
И вот приходят к нам и говорят, например: У нас проблема, к нам каждый день приходит технадзор и штрафует нас, вручая нам акты. А мы должны своевременно устранить косяки, а для этого мы должны автоматически генерировать уведомления начальникам участка и их руководству. И так по каждому участку. Но определить крайнего зачастую не так-то просто. То должность ему не ту поставили, то в график не внесли, то ещё чего-нибудь. То он уволился и вместо него с такого-то числа назначен другой. При чём иногда должность одна, а работу человек выполняет другую.
И ещё одна проблема - мы не можем предсказать, что от нас захотят завтра. Вот такой опыт может быть у кого-то есть?
79 2924267
>>2922351

>Он мне рассказал про MVVM паттерн, потому что до этого я считай вручную забивал данные в текстбоксы и была целая каша, когда одни и те же данные должны были отображаться в разных окнах, к примеру.


Ну, у нас эта задача решена на уровне ERP. Там контрол на форме привязывается к полю таблицы БД, и они сами общаются между собой через data source и его data object-ы. Правда, чем отличается контроллер, модель представления и вот этот вот data source я что-то до сих пор никак не пойму.
А вопрос о рассылках был скорее в сторону "как сделать нечто универсальное, подходящее для самых разных задач". Пожар - уведомить соответствующие категории получателей. Датчики дают показания, требующие внимания - уведомить какого-нибудь дежурного специалиста в таком-то подразделении. Кому-то завтра на смену выходить - уведомить его и его начальника, например. Ну и так далее.
Часто нужно уведомить какую-то категорию получателей, отобранную по должности в каком-то подразделении. Проблема в том, что структура предприятия, или, скорее, предприятий, очень запутанная. Структур как бы несколько параллельных. При этом многие ветви одной из структур похожи, но не идентичны. А в другой вообще чёрт ногу сломит. Это просто дерево подчинённых подразделений, да ещё и с неограниченной вложенностью. И всё это можно ещё условно разделить по категориям: склады, производственные подразделения, офисы... И список должностей это целый зоопарк, где каких-нибудь сварщиков может быть четыре вида, хотя все они делают одну и ту же работу. Есть особый справочник, в котором перечисляются ответственные по подразделениям и т.д.
И вот приходят к нам и говорят, например: У нас проблема, к нам каждый день приходит технадзор и штрафует нас, вручая нам акты. А мы должны своевременно устранить косяки, а для этого мы должны автоматически генерировать уведомления начальникам участка и их руководству. И так по каждому участку. Но определить крайнего зачастую не так-то просто. То должность ему не ту поставили, то в график не внесли, то ещё чего-нибудь. То он уволился и вместо него с такого-то числа назначен другой. При чём иногда должность одна, а работу человек выполняет другую.
И ещё одна проблема - мы не можем предсказать, что от нас захотят завтра. Вот такой опыт может быть у кого-то есть?
80 2924299
Спрашиваю не холивара ради. А зачем вообще C# нужен? Микросервисы - java/go, десктоп - qt/gkt, мобилки - java/kotlin. Какая область применения C#? Я даже представить не могу себе, что веб-сервис на C# будет на линуксе крутиться, безумие какое-то.
81 2924301
>>2924299

>Микросервисы - java/go


жава...микросервисы...ооокай
го язык на любителя.

>десктоп - qt/gkt


это вообще не языки программирования если че

> мобилки - java/kotlin



и вот тебе нужно знать целый зоопарк технологий вместо чего то одного.
82 2924303
>>2924301

>это вообще не языки программирования если че


И чего? Используется там в основном C++/C.

>жава...микросервисы...ооокай


Что не так? Спрашивал в другом треде, сказали на Java Spring пишут спокойно
83 2924307
>>2924303

>там в основном C++/C.


которые тоже внезапно нужно знать. и языки это так себе
и да - кутю можно использовать даже из шарпа, просто "а зачем"

>сказали на Java Spring пишут спокойно


у жавистов свое понятие минимализма. софт жрет 100000 гигов оперативы - ну нормально, докупи еще, память дешевая (с)
84 2924309
>>2924307
Хорошо. А по поводу того того, на каких серверах исполняется? На линуксе он хорошо себя чувствует? Слышал .net core якобы поддержку имеет.
85 2924313
>>2924309
я ж тебе не гугл на детские вопросы отвечать
отлично он чувствовал себя на линуксе уже несколько лет назад.
86 2924316
>>2924309
На линуксах уже нормально работает лет так 5. Сейчас MS вообще активно затачивает рантайм на работу в Linux-контейнерах. Есть даже офф. docker-образы https://hub.docker.com/_/microsoft-dotnet-runtime/ на базе различных дистрибутивов. Пользуемся имя для деплоя своих микросервисов в K8s. Зависимость есть. Брат жив.
87 2924318
>>2924316
ну у меня брат умер когда нужно было использовать netvips (биндинги для потоковой обработки имаджей) и на линуксах стабильно утекала память (а на винде нет)
Понятно что это проблемы линуксов и с сишными либами ниже, но все же это доставило много много проблем, которые не решились.
88 2924364
>>2924299
Помимо перманентной долбежки в бэкенд на всех языках, у шарпа есть просто неоспоримое преимущество - геймдев.

Ты знал, что игра раст написана не на расте, а на юнити? А то что геншин на юнити?

еще и вменяемый десктоп из всего зоопарка альтернатив, если не учитывать полпроцента десктоп-линуксоидов
16996660636320.png40 Кб, 1443x247
89 2924377
>>2924309
Лучше чем джава
image.png29 Кб, 783x509
90 2924385
>>2924299
С учетом того что шарп второй язык интернета, можно было ротешник не открывать.
91 2924393
>>2924385

>PHP 76,7%


Лол.
16633360650392.png56 Кб, 826x738
93 2924419
>>2924393
Если смотреть по миллионикам, то там пхп уже сосули
94 2924428
>>2924412
Опять обиженный прибежал показывать как сокетные квази-веб-сервера всех побеждают.
95 2924429
>>2924428
По делу что нибудь скажешь?
image.png241 Кб, 1807x627
96 2924433
>>2924412
>>2924428
А тем временем, асп.нет это топ 3 всех серверов.

Это еще не учитывая 8 дотнет, где они на 25% подтянули json и фортуну.
97 2924435
>>2924364
Они написаны на C# просто потому что M$ проплатили юнити. Там необязательно мог быть юнити. Более того, я часто видел как юнити ругают именно за это, за то, что там C#.
98 2924437
>>2924433

>наши великие 99,9%


>обоссаные 99,9% у джавы

99 2924449
>>2924433
Обосрался со скрина. Буквально погрешность
javacs.png48 Кб, 1201x225
100 2924451
>>2924435
Можно плакать и рыдать, но юнити это шарп, кроме шарпа там костылено, даже годот прикрутил как основной из поддерживаемых - шарп.

Шарп это уже игровая индустрия. А джава это кобол.
16996660636320.png40 Кб, 1443x247
101 2924458
>>2924437
Ну одно дело фулл вебфреймворк, другое сокетная перделка без поддержки фулл http, которые никто в проде не юзает.

Я уже кидал сравнение флагманов, срыг спринг победил джангу, чем не радость
102 2924468
>>2924458

> сокетная перделка без поддержки фулл http


И щас ты выложил пруфы.
103 2924480
>>2924468
История про рапидоид, который зависал при 404 ошибке, в цикле обработки запроса.
Два года эта залупа была в топе жабьих тестов.
Причем автор на ишью ответил спустя только 1-2 месяца, настолько это было демонстративным костылем сам ищи в гитхламе эту ишью, у меня кончилась моча вас поливать
104 2924483
105 2924485
>>2924480
Какой ещё рапидоид? Причём он тут?
106 2924491
>>2924485

>Два года эта залупа была в топе жабьих тестов.

107 2924493
>>2924491
И чё?
109 2924497
>>2924496
Слив принят.
110 2924498
>>2924496
Слив принят.
111 2924499
>>2924496
Слив принят.
112 2924500
>>2924497
Мокрый, но непоколебимый.
113 2924586
Опять жавистов обсыкаете? прекращайте. лучше обсуждайте дотнет 8
114 2924601
>>2924299

> Микросервисы - java/go


Просто нет.
Если микросервисы, то это либо питон, когда надо быстро наговнякать, либо раст, когда хотим перформанса, либо шарп, когда у нас штат шарпистов.

> десктоп - qt/gkt


Это кто что-то сложное на этом пишет-то, лол? Буквально весь сложный десктоп завязан на шарпе + какой-нибудь Devexpress я конечно преувеличиваю, некоторые штуки всякие немцы на Qt пишут и там сложное, но это пишут штатом из 200 С++ кодеров, нахуй, в то время как на шарпе сложный десктоп делает тетя Маша, которая умеет перетягивать из конструктора контроллы и настраивать в визуальном редакторе, как оно должно себя вести, именно потому - так больно переходить было на кор и потому - фреймворк классический до сих пор поддерживают и парралельно в него впиливают всякое. Потому что считай ВЕСЬ, мать его, десктоп на этом держится.

> мобилки - java/kotlin


Тут спорить не буду, потому что это действительно так. Замарин и его переименование - кал говна.

> Какая область применения C#?


Именно что любая. Мать его, я видел как на заводах GSM-модули управляются шарпом в устройствах, потому что все буквально есть на все случаи жизни С КАРОБКИ. Хуяк-хуяк и погнали, 2 недели - MVP выпустили.
115 2924608
>>2924586
Было бы что обсуждать... Хотя блейзер сервер научили автоматически отсылать клиентам компоненты завернутые в васм. Теперь хоть какой-то фронт появился. Толстый клиент, хуе-мое. Надо будет попробовать, как оно на вкус...
116 2924611
Кстати, там это, в привью студии рефреш UI вышел...
117 2924613
>>2924601
Гуй на C# будет работать только на винде.
118 2924620
>>2924613
Ну. Т.е.на абсолютном большинстве десктопов мира.
119 2924627
>>2924620
Плевать что там у "абсолютного большинства". Есть эталон для гуя и это Qt. Если пишешь программу не на Qt, то она просто не нужна. Особенно если эта программа будет платной и бесполезной.
120 2924631
>>2924613
Есть Авалония и Уно, долбаеб
121 2924633
>>2924627
Именно потому, те кому таки нужен таки кроссплатформенный гуй - пишут его на всяких флаттерах, реакт-нейтивах, електронах и прочем, но не на Qt.

Ну срсли. Ну чел. Qt - нормально, если ты попенсорс для линукса делаешь. Или ты сименс, нокла, но в остальных случаях - Qt - нахуй не упал, тем более в 2023
122 2924643
>>2924627

>Есть эталон для гуя и это Qt.


Есть эталон говноеда и это ты.
123 2924656
>>2924633
если ты питонист то кутя твой выбор ибо любое другое хуже.
но если ты шарпист, то ты уже не жавист, что великолепно
124 2924659
>>2924643

>пук


Правду про вас, шарпомушек, молвили "злые" языки, чуть что сразу рвонькаетесь и оскорбляете анона, нехуй с вами дел иметь, вечно догоняющими.
125 2924675
>>2924631
Это ты долбаеб, мать твою ебал. Авалония и Уно это дерьмище основанное на WPF/UWP, худших высерах M$.
126 2924676
>>2924659
Аррря, ты че они уже обогнали. Пока в джаве давным давно существуют нормальные прокси классы, шарпушкам барен разрешил использовать их и без интерфейса. Вот это да, ух как по жабе ударили! Победно. Так глядишь и гуй на линукс переедет, а то у них там брат живой, но без гуя.
2023-11-1621-18-31.png4 Кб, 340x181
127 2924688
>>2924267

>Ну, у нас эта задача решена на уровне ERP Там контрол на форме привязывается к полю таблицы БД, и они сами общаются между собой через data source и его data object-ы.


А говоришь данные захардкожены. А если у тебя данные о сотруднике находятся за пределами, то это плохая база данных.

Или речь идет о хардкодинге свойств условной модели? Данные могут быть как ключ\значение в словаре, а дальше через дата-темплейты подбирается вывод данных в нужный контрол или страницу. Вот как это сделано к примеру в окне Properties вижуал студии (пикрил). Там ведь данные выводятся автоматически в зависимости от DataTemplate. Для значений типа HorizontalAlignment свой контрол, для Thickness другой, для Brush третий.
Мне к примеру приходилось выводить словарь ресурсов, где может быть все что угодно, и я не создавал какую-то специальную модель для этого, где вбиты заранее заготовленные свойства.

Я не понимаю с чем именно у тебя проблемы.

>А вопрос о рассылках был скорее в сторону "как сделать нечто универсальное, подходящее для самых разных задач".


Каких? Программа должна принимать решения, когда на предприятии непонятно кто заступил на смену, а кто уволился? Даже если ты разошлешь сообщение потенциальным исполнителям, то зная Петровичей, они будут скидывать ответственность друг на друга.
128 2924696
>>2924676
пришел жавист и пукнул. обычное дело. я даже не буду просить его показать где в его говножаве прокси без интерфейса создается. так что отвечать мне не нужно

>>2924659
злые языки это говножависты. что приперлись в тред, в который их не звали
130 2924715
>>2924711
а цену этому не подскажешь? ах да - стирание типов. ну такая мелочь ага. Говна поели и радуются

в шарпе всегда генерь хоть обгенерься, но поскольку типы не стираются то сложнее сделать как в жаве.

и тут возникает вопрос - что нужнее. типы или прокси без интерфейса

подумай об этом на досуге, говноед.
131 2924734
>>2924715

>но поскольку типы не стираются то сложнее сделать как в жаве


Почему сложнее?

мимо питонист
132 2924736
>>2924715

>а цену этому не подскажешь? ах да - стирание типов. ну такая мелочь ага. Говна поели и радуются



Что-то тебя конкретно понесло. Причем тут стирание типов? Как будто мартышка что-то однажды услышала и начинает повторять где не попадя.
133 2924740
>>2924734
потому что типы не стерты. а значит IL точно знает что вызывает метод класса А.Foo() а не какой то Foo() непонятно чей. На уровне CLR такая информация есть. И динамически в рантайме ты ее не подменишь. Fody это уже не про рантайм.

>>2924736
ответил
134 2924747
>>2924740

>На уровне CLR такая информация есть. И динамически в рантайме ты ее не подменишь



Как это мешает написать аналог bytebuddy? Ну есть информация о типах и есть, дальше что?
135 2924756
>>2924747
если метод Foo(Bar b) принимает этот Bar, то если ты туда что то передашь не этот типа у тебя рантайм рухнет. То есть если ты буквально влезешь в IL после генерации и подменишь - у тебя все упадет с ошибкой CLR
то есть рантайм защищается от всякой неведомой херни
Если опускаться до уровня unsafe то там все сложно. Я лично писал иссуйку на гитхаб когда вот так все падало с критической CLR ошибкой (не исключение, а тотальное падение) ибо "так низзя" (они пофиксили это дело)

то есть рантайм CLR старается быть безопасным по возможности
поэтому и LinqExpressions сгенеренный метод работает медленней чем через IL ибо всякие там проверки безопасности. Но даже в чистом IL с типами лучше не играться. Все нестабильно. Я игрался - в моих методах я опустил il инструкции и просто молюсь ктулху что все будет ок (ибо если бы это была не моя личная либа - меня бы сожгли, а потом....снова сожгли, но сначала сожгли)
136 2924757
>>2924747
то есть IL от дотнета более безопасный от вмешательств, чем такое же для жавы
вот сколько ковырял и менял smali - так там куда более лояльно относится ко всяким хакам, чем в MSIL
137 2924766
>>2924756
>>2924757
А плюсы от этой безопасности вообще есть? Я пока вижу, это как какой-то маразм, из-за которого либ крутых нет.
138 2924770
>>2924766
от небезопасности smali тоже ничего хорошего. все работает после вмешательств - а везде ли? а вот хз

а в шарпе кодогенерация в рантайме обычное дело, так что там проверки наверное больше нужны.
даже тот же Span чем знаменит? не только унификацией работы с буферами, а и безопасностью работы с ними (работает в паре с GC)
вот тут я не могу утверждать, но я думаю не столько в проверках дело, сколько в рантайме, то есть рантайм знает про тип владельца метода, а не просто "кто-то вызывает метод" чтобы искать метод по своим таблицам или хз. Я так глубоко не лез. Я в smali и в MSIL лез лишь когда было нужно,а это редко
ведь я шарпист (вот тут не каждый поймет)
139 2924773
>>2924756
Ну. Я не знаю про что тут говорится.
Но я делал на работе хуйню, которая делала примерно следующее:
Если класс - удовлетворяет интерфейсу, но не реализует его - генерируем в рантайме класс обертку, которая этот интерфейс таки реализует и просто передаем эту обертку туда где нужен интерфейс.

Никаких ансейфов, обычная генерация типов в рантайме.
Но я делал это правда явно. Надо было сделать duck.As<IBird>(); Потому что - тут я все же считал, что явное - лучше неявного. НО думаю, что если закопаться вглубь - можно и неявно как-нибудь делать.
140 2924777
>>2924773
сгенерить класс адаптер/прокси легко. Просто если у класса нет интерфейса/базового класса/или он сам закрыт для переопределения
то мы не можем передать наш объект прокси куда то, где ждут сам оригинал
поэтому если не интерфейс, то всякие там либы требуют делать методы virtual чтобы можно было их переопределить.
141 2924783
Да, как капчу пройти-то?
2023-11-16234240.jpg32 Кб, 799x530
142 2924784
Хардбасс, уважаемые!
Памахите советом и своим важным мнением.
С# или Java? А может сразу Go?

Вкатился в это ваше айти пару лет назад тестировщиком. Без релевантного образования и без опыта ваще. Было тогда 35+
Душа просила и просит стать девелоппером, а душный склад ума с уклоном в научпоп, вроде позволит это сделать.

В тестировании не нравятся три вещи:
-быть замыкающим звеном. Это когда уже все, блять, аналитики, лиды, разрабы разобрались, обсосали требования и уже деплоится, а тебе говорят, ну чё там всё просто на 0,5sp, смотреть нехуя, за обед управишься авотхуй, минимум 3 мажора + правки требований Т.е. я всегда в прошлом.
-тыкать приложение как черный ящик. Хочется понимания, как там под капотом логика работает. А времени разбираться нету надо за обед успеть
-постоянные переключения контекста. То это посмотри, то вот там смоук сделай, то саппорту помоги если баг - заведи, то в джире порядок наведи передвинь статусы за разработчиков и лейблы расставь нужные, а то им некогда и вообще забыли, а у ПМ метрики хуйово собираются когда джира непричесанная И это все, блядь, фоном помимо основной фичи, в которую надо погрузиться и протестировать

Смотрю в сторону C# или JAVA. Ну т.е. что выбрать, чтобы попердолить полгодика, чтобы устроиться девелопером?
Java пробовал немного до устройства тестером. охуевал расшифровывать Cat cat = new Cat();
C# - текущий стек на проекте, но учить меня никто не будет и джунов не берут.

Далее мой пузырь стереотипов.
Плюсы окунуться в Java вижу такие:
-самый главный для меня - подкинули курс dmDev https://www.youtube.com/@dmdev/playlists где за ручку всё последовательно с примерами и домашками прокачает меня до возможности трудоустройства
-нет синтаксического сахара, все концепции через руки дойдут
-не привязана к вендору, нельзя будет russkim запретить использовать что-то, не останешься без работы
-почти не изменяется от выпуска к выпуску. Выучив однажды, знания практически не устареют
-со временем можно "устроиться в банк и пердеть от корпоратива до корпоратива"
-вакансий на hh.ru >6000шт.
Минусы:
-говорят, что 99% у тебя будут тонны легаси, где ты на три шага в любую сторону уже не будешь понимать что происходит. И никто никогда не понимал.
-очень много велосипедов от разных производителей, бардак с документацией
-линуксы ни разу не настраивал

Плюсы за C#:
-живой, развивающийся проект на работе но она и так настоебывает за день, что ничего уже не хочется смотреть
-коллеги, конечно няши, где надо пояснят, если что. Но за ручку никто водить не будет. У всех нет времени.
-всё в одном месте и от одного производителя, IDE, сервер IIS, документация/справочная, туториалы, CLR, база данных, гитхаб
-синтаксический сахар везде, типа проще жить будет
-пробовал писать автотесты, кликалки UI, но оч мало
-винду 3.11 ещё с дискет устанавливал уверенный пользователь, скажем так, но админить не умею
Минусы:
-главный для меня - нет пошагового пути как в случае с джавой. Даже не очень шарю чем .NET отличается от ASP.NET. Какие-то там Azure и прочие ништяки, которые то ли надо, то ли не надо знать? Смотрел ulearn.me, но там показалось, чёт перегружено лишним академическим, отдалённым от обычного ремесла. Рассчитайте координаты узлов механического манипулятора, блять. А я ХОЧУ, чтобы на первую работу по короткой проверенной дороге провели, без воды.
-всё от одного производителя из недружественной страны, который завтра выключит русский язык в хэлпах, послезавтра запретит использовать IIS, MSSQL, потом студию и гитхаб...
-вакансий меньше ~3000, лол
-синТОКСИЧЕСКИЙ сахар, который скрывает от тебя базовые концепции
-существенно меняется от версии к версии. Что работало на .NET3 не скомпилируется в .NET6
-легаси 10+ лет, а не 15+

А может сразу Go?.. если уж как бэ лунапарк с нуля
2023-11-16234240.jpg32 Кб, 799x530
142 2924784
Хардбасс, уважаемые!
Памахите советом и своим важным мнением.
С# или Java? А может сразу Go?

Вкатился в это ваше айти пару лет назад тестировщиком. Без релевантного образования и без опыта ваще. Было тогда 35+
Душа просила и просит стать девелоппером, а душный склад ума с уклоном в научпоп, вроде позволит это сделать.

В тестировании не нравятся три вещи:
-быть замыкающим звеном. Это когда уже все, блять, аналитики, лиды, разрабы разобрались, обсосали требования и уже деплоится, а тебе говорят, ну чё там всё просто на 0,5sp, смотреть нехуя, за обед управишься авотхуй, минимум 3 мажора + правки требований Т.е. я всегда в прошлом.
-тыкать приложение как черный ящик. Хочется понимания, как там под капотом логика работает. А времени разбираться нету надо за обед успеть
-постоянные переключения контекста. То это посмотри, то вот там смоук сделай, то саппорту помоги если баг - заведи, то в джире порядок наведи передвинь статусы за разработчиков и лейблы расставь нужные, а то им некогда и вообще забыли, а у ПМ метрики хуйово собираются когда джира непричесанная И это все, блядь, фоном помимо основной фичи, в которую надо погрузиться и протестировать

Смотрю в сторону C# или JAVA. Ну т.е. что выбрать, чтобы попердолить полгодика, чтобы устроиться девелопером?
Java пробовал немного до устройства тестером. охуевал расшифровывать Cat cat = new Cat();
C# - текущий стек на проекте, но учить меня никто не будет и джунов не берут.

Далее мой пузырь стереотипов.
Плюсы окунуться в Java вижу такие:
-самый главный для меня - подкинули курс dmDev https://www.youtube.com/@dmdev/playlists где за ручку всё последовательно с примерами и домашками прокачает меня до возможности трудоустройства
-нет синтаксического сахара, все концепции через руки дойдут
-не привязана к вендору, нельзя будет russkim запретить использовать что-то, не останешься без работы
-почти не изменяется от выпуска к выпуску. Выучив однажды, знания практически не устареют
-со временем можно "устроиться в банк и пердеть от корпоратива до корпоратива"
-вакансий на hh.ru >6000шт.
Минусы:
-говорят, что 99% у тебя будут тонны легаси, где ты на три шага в любую сторону уже не будешь понимать что происходит. И никто никогда не понимал.
-очень много велосипедов от разных производителей, бардак с документацией
-линуксы ни разу не настраивал

Плюсы за C#:
-живой, развивающийся проект на работе но она и так настоебывает за день, что ничего уже не хочется смотреть
-коллеги, конечно няши, где надо пояснят, если что. Но за ручку никто водить не будет. У всех нет времени.
-всё в одном месте и от одного производителя, IDE, сервер IIS, документация/справочная, туториалы, CLR, база данных, гитхаб
-синтаксический сахар везде, типа проще жить будет
-пробовал писать автотесты, кликалки UI, но оч мало
-винду 3.11 ещё с дискет устанавливал уверенный пользователь, скажем так, но админить не умею
Минусы:
-главный для меня - нет пошагового пути как в случае с джавой. Даже не очень шарю чем .NET отличается от ASP.NET. Какие-то там Azure и прочие ништяки, которые то ли надо, то ли не надо знать? Смотрел ulearn.me, но там показалось, чёт перегружено лишним академическим, отдалённым от обычного ремесла. Рассчитайте координаты узлов механического манипулятора, блять. А я ХОЧУ, чтобы на первую работу по короткой проверенной дороге провели, без воды.
-всё от одного производителя из недружественной страны, который завтра выключит русский язык в хэлпах, послезавтра запретит использовать IIS, MSSQL, потом студию и гитхаб...
-вакансий меньше ~3000, лол
-синТОКСИЧЕСКИЙ сахар, который скрывает от тебя базовые концепции
-существенно меняется от версии к версии. Что работало на .NET3 не скомпилируется в .NET6
-легаси 10+ лет, а не 15+

А может сразу Go?.. если уж как бэ лунапарк с нуля
143 2924785
>>2924783
пойти в школу и выучить базовые арифметические операции
(ну или как я тыкать капчу пока не будет простое выражение ибо влом считать в уме)
144 2924787
>>2924785
я думал ей надо как обычно, всё что видишь вводить, а не примеры решать
давно не заходил
145 2924795
>>2924787
все просто. поступаешь в 1 класс и там за 11 классов тебя научат считать
а потом идешь куда то и учишь шарп

действуй
146 2924796
>>2924783
Купи пасскод. На что-то же ты должен тратить миллионы, заработанные программированием на шарпе.
147 2924803
>>2924796
на шлюх конечно он должен тратить
ну что за вопросы. какой еще пасскод. ты что
148 2924828
>>2924747
Неправильно ссышь на шарподебилов. Не "как это подложило вам говна в штаны", а "мне похуй на причины вашего говна в штанах".
149 2924834
>>2924828
жаваговнсит копротивляется
забавно
у стирания типов как есть плюсы
так и минусы

но шарпговножую этого не понять.
150 2924836
>>2924828
блин
жавоговножую. ну ты понел
йоба.jpg176 Кб, 500x500
151 2924838
>>2924834
>>2924836
Красноречивая оговорочка.
152 2924842
>>2924838
у меня продолжается тяница. шарпист может себе это позволить ))))
153 2924844
>>2924688

>А говоришь данные захардкожены.


Некоторые захардкожены. Прямо почтовые ящики в исходном коде указывают. А иногда по коду сотрудника вычисляют, но код сотрудника также может быть зашит в исходный текст какого-нибудь метода, и потом поди его найди, чтобы поменять.
>>2924688

>Или речь идет о хардкодинге свойств условной модели?


Речь о том, что получателей иногда прямо в коде указывают. Кроме того, даже если они прямо и не указаны, то отбор событий для уведомления всё равно зачастую построен на жёстких правилах, которые нельзя настроить, не влезая в код. А требования к рассылке уведомлений периодически меняются. Типа "давайте по такой-то фигне уведомлять будем не сегодняшнего дежурного, а того, кто завтра дежурит". А у нас написан метод, которому на вход вообще дата не подаётся. Или "а давайте по таким-то поломкам уведомления будем слать не начальникам подразделений, а замам начальников". А у нас написан метод, который умеет одного сотрудника возвращать, но не список сотрудников, а замов много. И не всегда возможно настройками из какой-либо формы перенастроить логику отбора сотрудников и событий для оповещений.
154 2924863
>>2924842

>продолжается тяница


Няш, мне вообще не нравица, то что ты столько бухаешь. Это типа такая профилактика после пользования шарпа? Прекращай как бы, а то оскуфеешь и кто ж тебя в мужья-то возьмет?
155 2924865
>>2924863
это значит что у меня достаточно бабла для этого
шарп тут не причем. шарп лишь дает денежку
ну да нужно прекратить, но блин легче сказать
а в деньгах проблемы нет
156 2924867
>>2924784

> С# или Java?


Джава конечно.

+асинхронность без загрязнения кода через async/await
+скорость выше в 3-26 раз
+огромное количество либ, выбирай не хочу
+много разных GC
+обратная совместимость и как следствие возможность всегда использовать самую последнюю версию джавы
+кроссплатформенность (настоящая, в том числе для либ для гуёв и сред разработки и вообще для всей экосистемы)
+подход к разработке, когда буквально каждая фича, которая присутствует, сделана лучше, чем у пародий на джаву (как пример интерполяция строк, но это не единственный пример, практически каждый класс в стдлибе джавы является примером)
+поддержка композиции без перепечатывания методов (@Delegate)
+поддержка изменения неизменяемых объектов через копирование через @With и @WithBy
+улучшенная генерация геттеров — не надо хуярить на каждое поле {get;}, можно просто повесить на весь класс @Getter, а также можно сделать их в fluent-style без убого префикса Get через @Accessors(fluent = true)
+мавен (лучшая система сборки ever)
+не пидорашье комьюнити, которое, в отличии от петушарпа, занимается написанием кода, а не запрещениями, наказаниями и тасканиями за уши
+-стирание типов (кто-то считает стирание очень хорошим, кто-то очень плохим, по факту это небольшая проблема, которая мешает создавать два метода с одинаковой сигнатурой после стирания, и всё)

Шарподебилы тут же щас начнут копротивляться и пытаться что-то контрвспукнуть, но обрати внимание, ничего они даже пытаться опровергать не будут, только скажут "нинужно" и "ничестно", либо вообще начнёт какую-то несвязную ересь нести, еле-еле касающуюся темы.
157 2924872
>>2924865
Да-да, денег много, я понял. Вложи это в свое здоровье лучше, а не вот это вот все. Консультации там, обследования можно провести, зубки проверить, лазерную эпиляцию бахнуть, а может пластику небольшую совсем провести. Столько возможностей, ех.
158 2924951
>>2924784
Очевидно у тебя уже шарп на работе и есть шанс. Ибо сомневаюсь что где-то имеет вес джун 35+. Так что без вариантов.

Пошаговых курсов полно, на тех же инетах есть качественный курсы (в том числе слитые) где за ручку водят как дебила. Но ценности это не имеет, так как профессия заставляет уметь собирать инфу самому, то что ты за 3 месяца просмотра узнаешь, что мог бы узнать за неделю на каком-нибудь metanit или доках мс, делает все эти видео разводом для лохов (как местный жабёнок).
16996660636320.png40 Кб, 1443x247
159 2924954
>>2924867

>+скорость выше в 3-26 раз


Да. чем у питона.

>+асинхронность без загрязнения кода через async/await


Зеленые треды хороши только когда у тебя фулл язык на них как го, в остальном это такие костыли что ппц. Асинки это наилучшие решение если язык изначально был "синхронным".
К сожалению после убийства жабы в андройде, жаба стала больше никому не нужна, кроме кабанчика с накопившимся кобол-кодом, поэтому 21 жабы ты на проде никогда уже не увидишь.

>+обратная совместимость


Такая что половина еще на 8 сидит, лол.

Дальше мне стало чет лень кормить жабёнка, развлекай лучше ты нас.и да, мы со злости не пойдем бамбать тонуший жабий тред
160 2924961
Кто шарит за MaterialDesignInXaml в WPF

Как сделать чтобы оно применялось не на весь проект, а только на конкретное окно?

А то понравилось как оформляет - но по инструкции с документации оно это делает глобально на весь проект.

А если мне надо чтобы только одно окно было оформленно этой либой? Писать везде Style=none тот еще долбоебизм
161 2924993

>Зеленые треды хороши только когда у тебя фулл язык на них как го, в остальном это такие костыли что ппц. Асинки это наилучшие решение если язык изначально был "синхронным".


Вот это шарпушиный копиум, конечно. Индусы из майкрософта не осилили и сделали дешевый костыль с асинками, значит не нужно. В то время как белые люди из оракла посидели, подумали и не спеша выкатили абсолютно бесшовно работающее решение. Ей богу, у вас секта, а не язык.
162 2925016
Как по нормальному конвертировать string в double с учетом всей этой региональной еботни?

Например
string s = "10.54";
double d = Convert.ToDouble(s);
Крашнится, потому что надо "10,54"

Можно конечно добавить IFormatProvider provider = new CultureInfo("ru-RU");
Но откуда я знаю откуда текст и какой там регион? Текст может с базы данных, а может с таблички из интернета

Есть нормальная функция которая правильно работает?
163 2925022
>>2925016
Нет ни единой в мире либы которая нормально работает с конвертацией из строки в дабл.
164 2925024
>>2924951

>на тех же инетах есть качественный курсы (в том числе слитые) где за ручку водят как дебила.


вот-вот. В инете тонны всего. И в отсутствии опыта не поймёшь, что из этого говно, а что норм. Скиллфактори всякие этим и пользуются, что вкатуны не знают, что от них на самом деле потребуется на работе и рубят бабло на них на нас.
В QA вкатывался сам, не заплатив денег вообще. Но я тыкался как слепой котенок 8-10 мес, ночами прослушивал гигабайты всякой чепухи, которая мне вообще никогда не пригодится. Знал бы путь, за 2 месяца вкатился бы.

Метанит пробовал грызть по С#, да сухо и по делу. Дошел до делегатов/событий и чёт приуныл https://metanit.com/sharp/tutorial/3.28.php Изучать подобное в отрыве от реального применения демотивирует.

Может, ты, опытный - ткнёшь пальцем в годный курс по С# на Youtube/Udemy ? Пускай даже и не слитый, платный После которого на работе ждут.

Вчера покрасноглазил, от безысходности вот это пока выбрал https://www.youtube.com/watch?v=E3rCQDXwOpA&list=PLEtg-LdqEKXbpq4RtUp1hxZ6ByGjnvQs4&index=3

> сомневаюсь что где-то имеет вес джун 35+.


вот здесь немного больно стало
165 2925031
>>2924954

> Да. чем у питона.


Не надоело урину на ебальник принимать? -> >>2924412

> Зеленые треды хороши только когда у тебя фулл язык на них как го, в остальном это такие костыли что ппц. Асинки это наилучшие решение если язык изначально был "синхронным".


Аргументация будет?

> К сожалению после убийства жабы в андройде, жаба стала больше никому не нужна, кроме кабанчика с накопившимся кобол-кодом, поэтому 21 жабы ты на проде никогда уже не увидишь.


Ну что я и говорил, > либо вообще начнёт какую-то несвязную ересь нести, еле-еле касающуюся темы.<

> Такая что половина еще на 8 сидит, лол.


Один хуй её больше, чем в шарпоговне, в котором вместо "добрый день" — "апинейм удалено".
166 2925034
>>2924951
Да, и какой план у шарповиков, если MS запретит использование своих продуктов в рфии?
Понятно, что вряд ли кто-то с двача вообще хоть раз покупал лицензионную винду. Если только не с ноутом впридачу.

Однако пиратство и офицальный запрет всё же немного разное. Скорей всего разработка на C# будет скукоживаться.
167 2925095
>>2925034

>если MS запретит использование своих продуктов в рфии


Как запретит? Скажет "не пишите на C#" и ножкой громко топать будет?
168 2925137
>>2925095
ну я хз, как именно можно запрещать и ножкой топать и как поведет себя работодатель. и я не знаю девелоперских зависимостей от продуктов MS

У меня есть пример из QA. В прошлом году пришлось отказаться от slack и testrail с многолетней историей, тысячами сущностей, перекрестных ссылок между ними и техдолгом!
Были возможности и обходные пути, как остаться на них, но компания решила, что мы переезжаем. Это было очень больно и до сих пор аффектит.
169 2925141
>>2925137
Весь дотнет уже давно опенсурсный (компилятор, рантайм, оф. либо). Так что я хз, как MS сможет это запретить. Максимум могут перестать лицензии на студию отпускать. Но и это не проблема. К примеру, те же жидбрейнс уже полтора года как ушли из России, а у нас в компании лицензии на их продукты до сих пор как-то продлятся/покупаются.
170 2925142
>>2925137

>ну я хз, как именно можно запрещать


во первых сама платформа оно опенсурс.
во-вторых есть клоны как языка, так и платформы, в том числе от линуксоидов, надо будет, опять откопают
в-третьих C# это просто стандарт. надо будет, напишут свой компилятор
javacs.png48 Кб, 1201x225
171 2925242
>>2925034
Да, но пока ровно наоборот.
172 2925253
>>2925024

>Может, ты, опытный - ткнёшь пальцем в годный курс по С#


Я вкатился уже давно, но люди хвалят ITVDN на торрентах как отдельно, так и 300гиговая раздача была, но я не помню точно, меня просвещали джуны
173 2925257
>>2925242
Есть openjdk. Или опять не то?
174 2925259
>>2925031
Жабёнок, обоссы себя сам, не интересно одно и тоже, старайся лучше, приелся уже.
javafree.png48 Кб, 925x177
175 2925265
>>2925257
Кустарное подделие с тормозами и тонной подводных неточностей, но для хеллоуворда норм.
image.png21 Кб, 440x74
176 2925336
>>2925253
Найс. Спасибо.

Нашел раздачу на 301гиг

Може(те) сказать вкратце, чем отличаются эти три вида разрабов с пикрила? Чтобы для себя понять и примерно сопоставить, кем являются наши разрабы, например.
177 2925348
>>2925336
был дотнет фрейворк и кор, последний опенсорсный, позже в 5 версии дотнета их объединили, убрав пропретарную версию
178 2925353
Есть ли способ как из РФ подключаться к GPT без геморроя и чтобы не слетало? Желательно без vpn.

Пробовал регаться с зарубежных сервисов по отправке СМС. Зарегался, но подключение потом к самому чату нестабильно. Периодически отваливается.
179 2925354
>>2925336
был дотнет фрейворк (старый) и кор (опенсорсный), позже в 5 версии дотнета их объединили, кор стал основным.
Там тебе в курсах объяснят
180 2925355

>>>>2924961


ну если оно делает путем подключения словаря ресурсов то просто подключай его только в нужном окне

>>2925016
дык s.Replace(",", ".") и потом парси
ну или разберись в намберформат вроде. забыл

>>2925031
опять что то непонятное меряют тут >>2924412
опять реализации, а не сам язык
вот взять первый скрин - жсоны там
лол, да даже в том же шарпе если взять не дефолтный жсон, а хотя бы SpanJson, то он прилично быстрее
А еще я говорил что важно не только скорость, а и фичи.
трактор едет медленно, но пашет лучше чем гоночный болид.

>Один хуй её больше, чем в шарпоговне


а как же тогда виртуальные треды лол. ведь ты так хвалился.
а выходит - устраиваешься на работу, а там их просто нет
ну разве что унылый лобок для сахара

>>2925265
кстати да. впрочем и оригинальная жава поделие
вон не может сама себя обновить на винде (как всегда делала)
причины хз, просто факт

>>2925348
не объединили, а кор стал 5 версией, а старый дотнет умирает.
180 2925355

>>>>2924961


ну если оно делает путем подключения словаря ресурсов то просто подключай его только в нужном окне

>>2925016
дык s.Replace(",", ".") и потом парси
ну или разберись в намберформат вроде. забыл

>>2925031
опять что то непонятное меряют тут >>2924412
опять реализации, а не сам язык
вот взять первый скрин - жсоны там
лол, да даже в том же шарпе если взять не дефолтный жсон, а хотя бы SpanJson, то он прилично быстрее
А еще я говорил что важно не только скорость, а и фичи.
трактор едет медленно, но пашет лучше чем гоночный болид.

>Один хуй её больше, чем в шарпоговне


а как же тогда виртуальные треды лол. ведь ты так хвалился.
а выходит - устраиваешься на работу, а там их просто нет
ну разве что унылый лобок для сахара

>>2925265
кстати да. впрочем и оригинальная жава поделие
вон не может сама себя обновить на винде (как всегда делала)
причины хз, просто факт

>>2925348
не объединили, а кор стал 5 версией, а старый дотнет умирает.
181 2925359
>>2925348
правильно ли я тебя понял, что сейчас, после релиза NET6, 7, 8

ASP.NET Core + ASP.NET = C#.NET разработчик ?
182 2925366
>>2925359
По годам надо смотреть, сейчас core просто убрали.
183 2925372
>>2925366
Или тут я навру
184 2925411
>>2925359
Нет. Ты можешь быть .net разрабом и никогда в жизни не притронуться к ASP.NET-у. Например в десктопе или геймдеве.
ASP.NET(Core) это отдельный фреймворк для разработки сервисов и веб-приложений.
dbc41d63b8ed112ef1c734cb53d8d027.jpg63 Кб, 341x500
185 2925415
Насколько кал? Не хочу читать западные переведёнки т.к. понимаю насколько разрушительно хуёвым может быть перевод, но и моего B2 не хватит чтоб понимать ангельский. Если это кал посоветуйте других русских ну и желательно не времена мамонта, боюсь что выучив 5 нет нихуя не пойму в будущем.
186 2925465
>>2925137

>как поведет себя работодатель.


>У меня есть пример из QA.


То что ты привел как пример, это всего лишь замена одного набора инструментов на другой. Да это может быть больно и неудобно, но в основном для рядовых исполнителей. Т.к. по факту персонал остается тот же, его нужно просто переучить и дать привыкнуть. Все. Даже зарплаты поднимать не нужно. Я такие перемены переживал не раз. Замена с редмайна на джиру+конфлюенс. Переход с битбакета на гитлаб, и т.д. Одних мессенджеров корпоративных уже 3 штуки только за этот год поменялось. И т.д.

А теперь представь, что работодателю ударила моча в голову и он "надо менять все с шарпа на джаву, а то санкции-хуянкции, все запретят". Ему придется весь штат разрабов поменять, т.к. почти никто из них не будет переучиваться на другой стек. А это значит найти в короткий срок дохуя очень хороших дорогих разрабов (середнячки тут не подойдут, т.к. это не просто разработка с нуля). Причем и старых всех уволить не получится, т.к. текущее поддерживать нужно. Это на пару порядков больше бабла придется угрохать, чем просто слаку с тестрейлом поменять.

>>2925137

>девелоперских зависимостей от продуктов MS


Да сейчас вообще похуй. Хочешь винда, хочешь линукс. Половина вообще на маках на шарпе разрабатывает и в хуй не дует.
Запускается на чем угодно, базы любые используешь и т.д.
Ну может какие-нибудь azure сервисы недоступны, но я хуй знает - никогда ими не пользовался.

Я тебе еще пример приведу. Существенная часть банковской инфраструктуры в РФ работает на ibm-овских мейнфреймах. А те кто с ними хоть раз сталкивался знают какой там дичайший вендорлок. И они до сих пор используются и будут еще долго использоваться. Несмотря на то, что ibm уже давно ушел с нашего рынка, несмотря на санкции и то, что разработка на них стоит охуенно дорого и разрабов хер найдешь. Просто потому что переход с них на что-то другое будет стоить настолько неебических денег, что даже топ банки не хотят в это ввязываться.

Так что расслабь булки.
187 2925481
>>2925415

>Насколько кал?


Чел 2018-й год... Там про .net framework рассказывается и приводятся скрины из 2015-й студии. Сам то как думаешь?
Оно на момент выпуска может и норм было, но уже 5 лет прошло, тут тебе не джава, у нас все что старше двух...трех лет, уже устарело (ну может кроме Рихтера, это чтиво на все времена, но не для всех и к обучению оно не имеет отношения)
>>2925415

>кал посоветуйте других русских


Русских нет. А вот в переводе можешь вот это взять:
"C# 10 и NET 6 Современная кроссплатформенная разработка [2023] Марк Прайс". Судя по тому, что переводила та же команда, которая до этого переводила Эндрю Лока с "Aps.Net в действии", перевод должен быть нормальным.
188 2925483
>>2925415
Книга/10

https://learn.microsoft.com/ru-ru/dotnet/csharp/tour-of-csharp/

Просто берешь и проходишь.
image.png446 Кб, 1000x1000
189 2925489
>>2925415
Ппц какие вы привередливые, вы не вкатитесь в айти с такими запросами. Жри Троелсона, новое нагуглишь
190 2925511
191 2925581
>>2924844

>Прямо почтовые ящики в исходном коде указывают.


Такого быть не должно. Такие данные должны быть за пределом кода. Либо в какой-то доп базе данных, если редактирование основной недоступна. Но все проблемы таких систем в поддержании актуальности данных. Именно поэтому ERP это не дешевая шутка.

> А у нас написан метод, который умеет одного сотрудника возвращать


Что мешает добавить метод, возвращающий несколько сотрудников? Я когда пишу свое, даже миллипусечное приложение, то знаю, что так оно по итогу и будет, что придется иметь дело со списком. Даже INotifyCollectionChanged возвращает массив, даже если изменен всего один итем.

>давайте по такой-то фигне уведомлять будем не сегодняшнего дежурного, а того, кто завтра дежурит


Что мешает написать фильтр? Ты же в курсе про ICollectionView? Там можно писать фильтры, сортировщики и все это не руинит основной список. Делай хоть сколько фильтров. Сначала список фильтруешь по дежурным, потом по дате дежурства, а потом по длине их члена.

Или делайте нодами, лол, если уж там совсем специфические сценарии. Вон в Houdini или в Unreal Blueprints можно без проблем цвет привязать к дате, например. Там просто модули, отвечающие за определенный параметр, либо обрабатыващие данные определенным образом. Поэтому там можно из цвета RGB достать канал R, который по сути число и связать со свойством Data.Day, который тоже является числом, а между ними вставить ноду Clamp или ноду какого нибудь множителя и получить изменение цвета по дате. И такой сценарий никак не предусмотрен изначально.

Я шучу, а может и нет. Но мне кажется, что большая часть проблем решается обычными методами, типа дописывания еще одной функции, если приложение остаточно модульное, либо фильтрации данных. Некоторые проблемы решается с опытом.
192 2925831
Может ли конторе прилететь иск, если я скопирую в проект классы из этой папки? https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/Math
193 2925925
>>2924756

>если метод Foo(Bar b) принимает этот Bar, то если ты туда что то передашь не этот типа у тебя рантайм рухнет



Ну ок, допустим в джаве есть метод foo(Object b), где в этом методе вызывается какое-нибудь свойство типа b.getBarProperty(). И точно так же все рухнет, только на несколько этапов позже.

И я при этом не понимаю, как такие ограничения мешают написать аналог bytebuddy. Ну да, байткод другой и может быть CLR чуть строже его прогоняет через себя, но разве это является фундаментальной причиной по которой такую либу нельзя написать?

питонист
194 2925951
>>2925925
Изменение байткода, это как педерастия, порядочные джависты такое в проекты не тащят кроме тестов, которые в проде будут выкинуты.

Понятно, что местный ребенок никогда не работал в тырпрайзе и просто радуется очередной магической динамикодрисне, но не стоит опускаться до таких уровней.
195 2925959
>>2925353
бамп вопросу
сегодня не только лишь все в этом треде голосуют за путина сидят на chat GPT, разве не?

вариант без шизофазии: ну вы же все используете GPT. Расскажите, как это делать стабильным образом?

Про CoPilot тоже интересно - как? Но в первую очередь про GPT.
196 2925965
>>2925951
Оно в спринге есть.
беседа-сприг-господ.png422 Кб, 566x800
197 2925975
>>2925965
Так кто говорил, что срыг не эталонное магическое говно?
Хуже был только проект play или как там его, которые вдохновлялись рельсами от рубей. Где-то был доклад, как стильные и молодежные дебажили это магическое чудо.
198 2926198
>>2925959
Будешь общаться с нейросетью — дурачком станешь.
2023-11-1723-39-01.png6 Кб, 916x177
199 2926202
2023-11-1723-51-18.png35 Кб, 969x234
200 2926220
>>2925959
Копилот устанавливается из расширений. Заходишь в управление расширениями, ищешь в поиске GitHub Copilot и устанавливаешь. После перезагрузки вводишь код привязки устройства, который либо автоматом копируется в буфер обмена, либо указан в окне вывода вижуал студии. Соглашаешься на сбор данных и юзаешь свое копро. Можешь заодно на рейтинг посмотреть.
201 2926346
Лол, зашёл вчера на udemy найти какой-нить курс по вкату в C# насколько я понимаю теперь мне нужен курс по ASP.NET Core и там горящая распродажа.
Было 5990 --> стало 1500. Спешите! Такая цена только 12 часов!
Пока я был в нерешительности, пробовал такое же на ютубе или сливах поискать, чекнул ещё раз сегодня, а цена уже 650р!
Видимо, это сам архангел Гавриил хочет, чтобы я закончил уже ныть и, таки навернул C#
справедливости ради, надо сказать, на все остальные Java, Golang и т.д. тоже 650р
202 2926353
>>2926346
Жалоба успешно отправлена. Ошибок нет.
203 2926360
>>2926346
Ну кто на этой хуйне курсы ищет, я вот знаю где 5990 0 и к оплате приниматся карты виза, мастеркард, пиковые тузы, пятёрочка выручает
https://rutracker.org/forum/tracker.php?nm=udemy%20C%23
Буквально нет ни одной причины что-то покупать у любых инфоцыган
204 2926369
>>2926360
Смотрел рутреккер тоже. И там всё старое. По твоей ссылке буквально пара раздач НЕ по юнити. К тому же, всё на английском. Я не против английского как такового, читать там комменты в коде или гитхаб. Но слушать новый технический материал на неродном языке, вот просто не готов ещё этим переусложнять себе жизнь.

А 650р, ну это буквально цена двух бокс-мастеров теперь без хашбраунов внутри

Впрочем, спасибо.
205 2926381
>>2925265

>кустарное поделие


>openjdk


Помолчал бы, умнее выглядел, дегенерат.
206 2926382
>>2925259
Слив принят.
207 2926383
>>2925355

>что-то непонятное меряют


Ты совсем еблан? Это буквально тот же тест, на который я отвечал, только не обрезанный по удобному для шарподебилов, а полный.
208 2926392
>>2926382
Это хорошо что ты свои сливы осознаешь и принимаешь.
209 2926394
>>2926369
Тебе же сказал для вката в сторону ITVDN смотреть. Нет начинают дальше зарываться в канализацию.

Все курсы устаревшие, даже новые, они там штампуют по одному и тому же как издания в книгах. В любом случае видео полезно только чтобы получить базовые представления, если уж совсем туго, всех этих видосов как if писать, и как переменную создавать просто тонна, даже метанит плейлист когда-то делал.

Реально сложные вещи там никто не разбирает, так как, видимо, боятся вкатунов спугнуть.
210 2926412
>>2926392

>стрелочка


Лол.
211 2926421
>>2925137

> В прошлом году пришлось отказаться от slack и testrail с многолетней историей, тысячами сущностей, перекрестных ссылок между ними и техдолгом!


Куда по итогу перекатились?
212 2926543
>>2926394

>ITVDN


Да, качнул пару вводных видосов, чтобы сориентироваться в этих Automation Script Pages

А с udemy что-то я обосрался. В качестве пробы купил за два боксмастера какой-то "охуенно-хороший" курс, по паттернам проектирования до которого наверное миримум год на коммерческой разработке надо расти, блять и все цены вернулись на 5990р
Чистил куки, перезагружал, заходил инкогнито, с другого компа, аккаунта, всё равно. Во всех случаях нету больше цены 650р.
Как они это делают? Можно как-то обойти?
Мне уже не купить, а просто интересно понять, как они меня детектят и ставят другую цену?

>>2926421
Вместо слака - ебучая отечественная "Пачка". У которой регулярно проёбываются уведомления пользователям при меншинах. Т.е. по сути, главная функция корпоративного мессенджера - тегнуть кого-то, чтобы он пришёл или внимание обратил - проёбывается.
Вместо ебучего тестрейла, который нам постоянно md- разметку ломал, пересели на гуглдоки
Что-то с джирой пытаются намутить, может зефир там или что-то другте будет.
213 2926578
>>2926383

>Ты совсем еблан?


я 1000^5000 раз говорил что скорость без учета фич можете засунуть себе в жопу
в скорости если захотеть может порвать всех даже синклербейсик
а толку
214 2926583
>>2926543

>Вместо ебучего тестрейла, который нам постоянно md- разметку ломал, пересели на гуглдоки


Ебать, импортозаместились.
215 2926590
Какие же майкрософт - пидорасы.
Взяли и на похуй - поменяли 80 порт на 8080 по дефолту.
Мне теперь как еблану - лезть nginx. Допиливать композ ебучий.
Вот просто реально. Как жа это бесит. Неделя до сдачи на прод, тимлид - особенный: давайте накатим .NET8. Теперь вместо того чтобы чуть больше потестить и чет причесвать - бегай порты меняй, проверяй, что ниче там не сломалось в плане доступности.
11/10 короче. Обожай мелкомягких.
216 2926599
>>2926590
Причем здесь Майкрософт? Твой тимлид не особенный, а просто долбоеб, который за неделю до дедлайна решил вкатить новую версию
даже студенты в вузах так не делают
217 2926615
>>2926599
Ну. Не могу же я ему вот так и сказать. Типа токсичненько слегка.
218 2926624
>>2926590
Продакшн
@
Без тестирования накатили обнову перед выходными
@
Не сконфигурирован явно порт в приложении
@
Доярка пролила молоко на сервер
219 2926644
>>2926578
Перечитай ещё раз моё сообщение и перечитывай до тех пор, пока не дойдёт.
220 2926645
>>2926590
Лол, а говорили копрософт не ломает обратную совместимость с 4 петушарпа! Опять напиздели что-ли? И самое главное это даже задокументировано не было в графе breaking changes, пиздец, ахаха!
image.png33 Кб, 975x348
221 2926646
Петуханы, подскажите где я мог проебаться? Скажу сразу, что я хуепутало самоучка и быдлокодинг моё хобби.
Сейчас пилю проект на шарпе, десктопное приложение, планирую его монетизировать путем продажи ключей доступа с повременной оплатой. Для проверки лицензии планирую подключаться к собственному серверу авторизации по TCP, с некоторой периодичностью буду посылать hearbeat пакет где буду проверять не наебывает ли юзер мой клиент разреверсив алгоритм проверки авторизации и подняв свой сервер, помимо этого через TCP буду гонять туда сюда разные данные. Понятное дело, что приложение будет обфусцировано и всё сделано по максимуму, для того, чтобы взлом был нецелесообразен по временным затратам.

Как работает авторизация:
При подключении к серверу клиент посылает login пакет с определенным пейлоадом (публичный ключ, версия клиента и т.д.) и после чего ждет ответа от сервера. Сервер через делает запрос к БД, проверяет есть ли такой ключ в базе и сколько рабочего времени осталось у ключа, далее, соответственно, отвечает успешна ли авторизация или нет, в случае успешной авторизации создает отдельную сессию, помещает её в БД (время создания сессии, версия клиента, время последнего успешного heartbeat пакета и т.д.)

В отдельном бэкграунд потоке обрабатываются активные сессии всех пользователей, где с периодичностью отнимается время у всех используемых этими сессиями лицензионных ключей. Если время закончилось, сервер посылает определенный пакет и клиент прекращает работу.

Вебморду планирую запилить на блейзоре, где юзер после регистрации получает доступ к панели управления где может пополнять счет, продлевать время лицензии, видеть свои активные сессии и т.д.

Общее количество concurrent юзеров будет в районе 500, максимум 1000. Всё будет работать на одном VPS сервере.

Есть какие-либо замечания?
222 2926647
>>2926646

>петуханы


Чёт проиграл. Какой тред, такое и обращение.
223 2926651
>>2926645
Это не ломающее изменение, просто пидорасы - решили что теперь в контейнерах по дефолту прописана переменная окружения с портом не 80 а 8080. Дескать УЛУЧШАЕМ ЭКСПИРИЕНС ТЕХ КТО НЕ ПОД РУТОМ, ну охуеть, блядь, а те кто под рутом - пусть страдают получается. Пиздец нахуй.
Но из-за этого теперь - надо допиливать docker-compose, надо nginx перенастраивать, интеграционные тесты - заново прогонять, чтобы проверить - что все доступно. Это такой гемор, когда по плану было на след неделе уже на прод выкатить.
224 2926653
>>2926651
Подучи определение брекинг ченджа, хули.
225 2926659
>>2926615
НА ТИМЛИДА НЕЛЬЗЯ ВЫЁБЫВАТЬСЯ
@
ЗНАЧИТ, ВИНОВАТ МАЙКРОСОФТ


>>2926645
Уже задокументировали
https://learn.microsoft.com/en-us/dotnet/core/compatibility/8.0

> Default ASP.NET Core port changed to 8080

226 2926662
>>2926659
Ох ты ж пиздец сколько там поломок... Когда я в первый раз смотрел, там буквально одна поломка была написана, какой-то апи выпилили.
170030480029275058.jpg28 Кб, 968x274
227 2926666

>ррррря кроссплатформенность кококо!


>ой а почему мой код работающий на шинде не работает на юниксе

228 2926677
>>2926653
Всегда считал, что ломающими можно считать только когда ломается либо синтаксис, либо поведение либ. А окружение. Ну, на самом деле - мы бы могли свои контейнеры делать и сами прописать нужный нам порт, просто мы - ленивые для этого + не хотим тратиться на поддержку этого дела. Короче, не знаю, реально ли считать это ломающим измененеием или нет, даже если майки так считают.

>>2926659
Та можно и повыебываться. Просто не называть же его просто долбоебом. Это неконструктивно.
А назвать майков пидорасами - сам бог велел. Типа ну срсли. У меня с этим обновлением еще и HTTP клиент сломался, если пытаюсь с 65000+ портами соединяться(всегда их ставил для тестов, но теперь - почему-то кидает исключение, дескать закрыто, хотя сервер на который обращаюсь, даже не получил соединение, и тем же постаманом - все еще нормально можно кидать запросики, короче, шляпа).
229 2926680
>>2926666
Хуже то, что такие точечные поломки на линуксе будут ещё лет 10. Был бы язык кроссплатформенным с самого начала - не пришлось бы это переделывать.
230 2926682
>>2926677
Ты может перестанешь копротивляться? Даже твой барин сам признал, что это брейкинг чендж.
231 2926721
Аноны, почему выражение:
new PriorityQueue<MyObject, double>(Comparer<double>.Create((a, b) => a - b))
вызывает ошибку компилятора о том, что он не может double в int преобразовать? Вроде конструктор принимает компаратор на дженерике, не выкупаю почему ожидается int
232 2926801
>>2926651

>интеграционные тесты - заново прогонять, чтобы проверить - что все доступно.


Т.е., обычно при обновлении сред вы этого не делаете? Ну охуенно, успехов вам тогда.
233 2926809
>>2926680

>Был бы язык кроссплатформенным с самого начала - не пришлось бы это переделывать.


Там дело не в языке, а в том, что майки тупо хуй забили на написание нормальной кроссплатформенной IO библиотеки. Типа вот есть базовый функционал, он работает, что-то больше - ебитесь сами. Или mono.posix юзайте или свое делайте.
Честно говоря, поработав с файлами в линухе, я их поинмаю. Линукс то еще говнище в этом плане.
234 2926813
>>2926644
перечитал. до меня дошло что ты жавист. а жависты они долбоебы по определению
235 2926819
>>2926809
Почему когда двачеры выпердывают в интернет мнение по какой-то технологии, то они забылвают добавить пример в качестве пруфа.
236 2926850
>>2926819
Каких тебе пруфов нужно чудила?
Попробуй просто через стандартный System.IO хотя бы линуксовые пермишены на файл прочитать/раздать, а когда не получится погугли и увидишь, что из нормальных вариантов только моно.юникс, который хрен знает уже сколько в пререлизной версии находится (но справедливости ради, работает вроде бы четко)
237 2926874
>>2926809

>Честно говоря, поработав с файлами в линухе, я их поинмаю. Линукс то еще говнище в этом плане.


В UNIX идеальная концепция файлов и иерархии.
238 2926930
Тред кухарок
16870873892190.png211 Кб, 680x709
239 2927057
240 2927072
Заметил, что sealed используют только чсв ебанаты
241 2927077
>>2927072
Рихтера начитались.
242 2927078
>>2927072
И правильно делают, я не для макак свои классы пишу, которые думают, что что-то могу там исправить. Если че-то не устраивает - можно всегда своё написать с нуля.
243 2927247
Хм.
Что смотрите.
У меня в приложениях - чет дохуя словарей статичных которые нужны просто чтобы читать какие-то штуки по имени.

И вот че я подумал.
А что если заменить их всех - массивами-то?

Типа чем это:

var dic = new Dictionarty<string, something>()
{
["a"] = new Somthing(1),
["b"] = new Somthing(2),
}

Но ведь все мы знаем, что словари - это медленно.
И вот че меня заинтересовало. А может ли шарп - такую оптимизацию проводить: смотрит, что словарь - неизменяемый - и заменяет его массивом?
По мне - была бы отличная хуйня, если словарь используется чисто как хранилище.
image.png45 Кб, 590x352
244 2927300
245 2927398
>>2926543

> Вместо слака - ебучая отечественная "Пачка". У которой регулярно проёбываются уведомления пользователям при меншинах. Т.е. по сути, главная функция корпоративного мессенджера - тегнуть кого-то, чтобы он пришёл или внимание обратил - проёбывается.


Печально. Еще и платный. А есть свободный зулип.

> Вместо ебучего тестрейла, который нам постоянно md- разметку ломал, пересели на гуглдоки


Для доков - аскидок, но там синтаксис чуть отличается от md
246 2927418
>>2927247
А искать ты в этом массиве как собрался? А если тебе не нужен поиск, тогда нахуя тебе вообще словари?
247 2927443
>>2927247
Зачем такая оптимизация в языке, если самому сделать с массивами легко? Заводишь константы с индексами, инициализируешь массив, дальше в коде везде обращаешься с использованием констант. И что это у тебя за немыслимо тяжёлые вычисления, где "словари слишком медленные"?
248 2927449
Такое дело.
Есть бд в ней модель собранной html страницы, и есть просто папка с этими хтмл страницами.
Дак вот, получение страницы через Where(n = n.Name ="zalupka").FirstOrDefault()
Гораздо дольше че получение страницы из файла по его имени File.ReadAllLines("zalupka.html")
Вангую потому что поиск идет а файл я беру сразу.
Стоит ли мне еще протестировать модель в которой праймери кей будет string и иметь то самое название как у файла а именно zalupka ?
Можете примерно почувствовать будет ли скорость выше чем если бы я брал данные из файла?
249 2927459
>>2927449
upd
файлов и следовательно записей в бд 300к
250 2927461
>>2927449
Индексы в твоей БД хоть есть?
251 2927467
>>2927461
Я хуй знает.
Sqlite Code First что студия мне там создала в душе не ебу.
252 2927471
>>2927467
Значит, индексов нет, и каждая запись ищется полным перебором.
image.png31 Кб, 342x51
253 2927481
>>2927471
Понял принял спасибо, добавлю индексы.
Приближусь ли я к такой же скорости как и с файлами?
Пикрил выборка 1к записей по 1 шт за раз.
254 2927491
>>2927481
Может, даже быстрее файликов будет. От многого зависит.
255 2927499
>>2920885 (OP)
пришел с /b треда, может тут подробнее ситуацию смогут объяснить. (мне сейчас некогда за Б смотреть, спать надо)

30 лет. неудавшийся проектант по ТеплоГазВода. затошнило от специальности, плюс везде надо общаться или по блату.
подумал что то другое, чтобы вылезти с Мухосрани.
матан был норм. но все забыл, так как нигде не пригодилось. буквально.
из прогерства БЕЙСИК был в школе, да эксель в универе/работах в офисах. мда. насчет этого не заморачивался и нужные формулы тупо искал в нете, разбирался и делал. а потом забывал. потому что зачем запоминать такое?

>C#


пал выбор на РЕШЕТКУ
мечтал всегда игори делать. или около того.
здесь сгодится, чтобы потом забугор свалить?
согласен просто програмули делать пока.

>Заходишь на сайты компаний со стажировками и смотришь че нужно от стажера, записываешь наиболее востребованные навыки


с усоловий того же Озона я приохуел.
я уже ковыряю месяц в сумме, мало чего понятно.
начинаю в себе сомневаться.

> Пару месяцев ебошить


делаю перерывы. т.к. еще не отошел от выгорания и депры. но щас чувствую можно темп прибавить. а то это растянулось на 4 месяца и я выучил с гулькин хуй.

>Смотришь видосы на ютубе "собес языкнейм на джуниора", читаешь статьи о вопросах на собеседовании, разбираешься в темах для нормального ответа на эти вопросы


да. смотрел. насохранял кучу полезного в плейлист.

>Подавать заявки на СТАЖИРОВКИ


смотрел до этого стажировки в своем районном городе
их 0.
рядом миллионник не смотрел.
а вот МИДЛОВ дохуя хотят. в магазы в основном.

>Если не выходит, то записываешься на курсы от команий


ну я паралелльно еще на заочку поступил в Московский филиал универа по ИТ. поспрашиваю там, может чего какую работу могут предлагать

но я хз какой проект придумать, чтобы и в будущей игре сгодилось и никто не заподозрил, что это будет ФУРРИ игра. я чувствую себя человеком, но люблю заверотянок очень, типа акул, оборотней, волчиц. такие дела.
вкратце: от 1 лица, за человека-неудачника в сайфай вселенной короче, где он полетит на планету отрабатывать долги, иначе его пихнут в биореактор, а биомусор с плохими генными данными как он, не в почете на Земле. но лучше в 2д наверн вначале будет оптимально.
или какую то прогу просто лучше сваять потихоньку для диплома?
255 2927499
>>2920885 (OP)
пришел с /b треда, может тут подробнее ситуацию смогут объяснить. (мне сейчас некогда за Б смотреть, спать надо)

30 лет. неудавшийся проектант по ТеплоГазВода. затошнило от специальности, плюс везде надо общаться или по блату.
подумал что то другое, чтобы вылезти с Мухосрани.
матан был норм. но все забыл, так как нигде не пригодилось. буквально.
из прогерства БЕЙСИК был в школе, да эксель в универе/работах в офисах. мда. насчет этого не заморачивался и нужные формулы тупо искал в нете, разбирался и делал. а потом забывал. потому что зачем запоминать такое?

>C#


пал выбор на РЕШЕТКУ
мечтал всегда игори делать. или около того.
здесь сгодится, чтобы потом забугор свалить?
согласен просто програмули делать пока.

>Заходишь на сайты компаний со стажировками и смотришь че нужно от стажера, записываешь наиболее востребованные навыки


с усоловий того же Озона я приохуел.
я уже ковыряю месяц в сумме, мало чего понятно.
начинаю в себе сомневаться.

> Пару месяцев ебошить


делаю перерывы. т.к. еще не отошел от выгорания и депры. но щас чувствую можно темп прибавить. а то это растянулось на 4 месяца и я выучил с гулькин хуй.

>Смотришь видосы на ютубе "собес языкнейм на джуниора", читаешь статьи о вопросах на собеседовании, разбираешься в темах для нормального ответа на эти вопросы


да. смотрел. насохранял кучу полезного в плейлист.

>Подавать заявки на СТАЖИРОВКИ


смотрел до этого стажировки в своем районном городе
их 0.
рядом миллионник не смотрел.
а вот МИДЛОВ дохуя хотят. в магазы в основном.

>Если не выходит, то записываешься на курсы от команий


ну я паралелльно еще на заочку поступил в Московский филиал универа по ИТ. поспрашиваю там, может чего какую работу могут предлагать

но я хз какой проект придумать, чтобы и в будущей игре сгодилось и никто не заподозрил, что это будет ФУРРИ игра. я чувствую себя человеком, но люблю заверотянок очень, типа акул, оборотней, волчиц. такие дела.
вкратце: от 1 лица, за человека-неудачника в сайфай вселенной короче, где он полетит на планету отрабатывать долги, иначе его пихнут в биореактор, а биомусор с плохими генными данными как он, не в почете на Земле. но лучше в 2д наверн вначале будет оптимально.
или какую то прогу просто лучше сваять потихоньку для диплома?
256 2927506
>>2927491
Я понимаю что можно ускорится с помощью Dappera или напрямую писать SQL запросы но через EF удобнее, да и есть еще места где можно оптимизировать.
Но вот если у меня все файлы будут лежать в БД то записей будет реально дохуя, и выборка будет уже по 2м полям так как надо будет определить какому сайту принадлежит страница. Я так понимаю что можно будет сделать составные индексы.
Сейчас файлы у меня лежат так
/site1.com/.html
/site2.com/
.html
/site3.com/*.html

Если это всё в бд хранить то будет примерно так:
Основная БД в которой хранится контент 300к, приоритет чтения этого контента, скорость добавления нового контента не критичная так как будет происходить редко, на ночь поставил и забыл.
А вот если все сайты добавлять в 1 буду то она просто будет ебаническая, считай 1 сайт это копия главной бд просто с перемешанным контентом.
Конечно в бд можно хранить только порядковый номер контента(предложений) типо [1] [3] [2] [4] [5] Ну тогда каждый раз придется после получения порядка вывода контента лезть в главную бд брать контент полностью и каждый раз собирать его. Место на диске занимать будет меньше, но страницу собирать дольше.

Вообще можно на на лету в рабочей программе создавать новую бд и dbcontext?
Например в панельке админа я добавил новый сайт, бд то я создам, а как потом использовать тот контекст который мне нужен?
257 2927516
>>2927499
ты хоть пробовал игры то делать? Не советую геймдев. Если хочешь вкатиться туда, где ещё есть места, советую бэкенд, на шарпе можно в бэк. Только там надо ещё базы данных знать и скорее всего докеры хуекеры всякие. Учи язык, учи проектирование на языке, асинхронное программирование, дрочи задачи алгоритмические, чтоб собес на джуна/стажера пройти. Курсы хорошие есть от Окуловского на ulearn, бесплатно, основы программирование 1,2 и проектирование на c#
258 2927627
>>2926813
Ясно, слив принят.
259 2927893
>>2925951

> Изменение байткода


Иногда необходимо (манки патчинг). Ясен хуй к срыгу это не относится, так как там с самого начала всё построено на волшебстве.
260 2927896
>>2925925
Всё правильно ты не понимаешь, он хуйню несёт.
261 2927989
>>2927896
верно. несу хуйню. я на IL не пишу, я всего лишь иногда правил IL по простому и smali по сложному.
я лишь смотрю что всякие там фейки,молы,субституты могут обернуть класс (без интерфейса - раз, причем публичный - два) в проксю, но запроксирует только виртуальные методы.
Почему? хз.
262 2928040
Мужики, а че учить после того как овладел базовым синтаксисом?
263 2928076
>>2928040
Все. Кроме того, фреймворки, которые делают то, чем ты хочешь заниматься.
264 2928087
Ребят, это прикол какой то? Набираю в поиске c# вакансии без уточнений, выдает 2-3 вакансии всего. Это шутка или от платформы в рф полностью отказались?
265 2928102
>>2928087
Звучит, как происки джавистов...
266 2928139
>>2928087
Х/з. Может особо перестали на всякие хх вакансии выкладывать. Мне в телегу хрюни с предложениями регулярно долбятся, хотя я уже полтора года резюме не открывал. Причем частенько хрюни из достаточно крупных компаний (Озон, Яндекс, Тинькофф и т.д.) или кипрские галеры. Так что работа на .net есть. Другое дело, что июни сейчас особо никому не нужны.
267 2928144
Как жить, если ты впф разработчик? На асп возьмут только джуном, падение доходов минимум вдвое, да и для этого нужно будет рвать жопу и учить жс с реактом после работы и по выходным.
268 2928147
>>2928144
Мммм. Продолжать писать десктоп на впф?
269 2928149
>>2928147
Хочу сытые сотыгы, они только в асп
270 2928245
>>2928144
Ну, у тебя два варианта.
Либо ты дальше сидишь-пердишь на WPF на прежнем месте ещё лет 5, и в случае увольнения охуеваешь, что вакансий на WPF особо и нет, а те что есть - кудлатое легаси за копейки. По итогу, так как иначе, придёшь к мысли, что надо учить ASP .Net и выкатываться на бэк.
Либо берешь яйца в руки и начинаешь учить ASP .Net прямо сейчас. Причем жсопарашу можно и не учить. Есть вакансии на ASP .Net, где ты будешь чистым бэкенд разрабом. (Я к примеру сейчас даже к HTTP почти не прикасаюсь. У нас все взаимодействие между сервисами через GRPC и кафку. HTTP только на apigw, чтобы с фронтом общаться).
В принципе, если подучишь ASP Net, SQL и архитектуру, то сможешь попытаться и на Мидлла скатиться, особенно если с софтами все хорошо. Я в свое время вообще с UWP-ждуна перекатится на ASP-мидла. (Правда у меня был опыт в веб-разработке, но не на C#).
271 2928278
>>2928102
Опять жависты насрали в мои портки...
272 2928290
>>2928278
Хедхантер же на джаве, вот они и скручивают лайки вакансии на шарфик.
273 2928305
>>2928290
Ну вот хх на жабе, а какие реальные проекты на сишорпе?
274 2928315
>>2928305
Только самые хорошие...
275 2928361
>>2928305
Из прям известных - Stackoverflow и его побратимы (Server Fault, Super User)
276 2928370
>>2928361
Врети
277 2928377
>>2928361
Посмотрел кстати, у них html-ка на сервере рендерится. И кто после такого говорит, что SSR плох? На сайте-то не 2 человека сидят.
278 2928387
>>2928377
Ты прикинь какой ебичкой мощности сервера нужны, чтобы это работало. А обычным кабанам нужно чтобы девшего и сердито было...
279 2928391
>>2928387

>А обычным кабанам нужно чтобы девшего и сердито было...


И C# сюда не подходит сразу же, удивительно да? Легче ведь пыховода нанять, чтобы он наговнял быстренько.
280 2928397
>>2928391
Наговнякать не трудно и на шарпах, чел...
281 2928474
>>2928397
Кринж же, чел...........
282 2928482
>>2928474
Чел...
283 2928604
>>2927516
а путь от Михаила Флёнова норм?
284 2928606
>>2927516
нет... не пробовал.
но знаю как это трудно. ведь уметь надо все. либо на аутсорсе собирать по фрагментам, платя кому то денежку.
.png30 Кб, 804x844
285 2928629
>>2927499

> мечтал всегда игори делать


А чо не дела-то? Хотя бы ту же змейку.

> я хз какой проект придумать, чтобы и в будущей игре сгодилось и никто не заподозрил, что это будет ФУРРИ игра


Делай свою систему для менеджмента проектами с историей версий, изменениями, правами доступа и т.д.
Такая-то джира+гит для ассетов и доков в одном флаконе. Это реально полезная хуйня в геймдеве была бы, потому что те же модельки-текстурки художник проебал, и хуй как восстановишь, а если в гит лить - то в контексте не кода - нихуя не понятно, а что изменили, как найти ту версию, что нужна и прочее. Вот если бы кто-то сделал аналог гитовских инструментов для вот этой всей хуйни - это был бы реально полезный проект, а вся хуйня с менеджментом - до кучи, чтобы все с каробки.
image.png48 Кб, 594x773
286 2928709
>>2928087

>Это шутка или


Нет это ты или зеленый или дурачок.
287 2928727
>>2928629
интересно. записал в блокнот.
288 2928784
Вопрос работягам, вы пытаетесь в перфоманс на работе? Ну типо написали вы какой то код. Работает. Будите его оптимизировать или похуй, если попросят только тогда оптимизировать?
289 2928798
>>2928784
На реальных задач редко есть пространство для перформанса.
Это только на мелком пет проекте или там, где ты хотя бы половину всего кода контроллируешь, возможно.
290 2928809
>>2928784
В основном стараюсь делать упор на удобство будущей поддержки кода.
В перформанс очень редко. Только если с НТ приходит весть, что возможны выходы за SLA, тогда разбираюсь с ними где узкие места и там правлю.
291 2928841
>>2928784
Обычно я пытаюсь в перформанс, который дёшево стоит и не сильно влияет на читаемость кода. Типа использования правильных типов коллекций, минимизация походов в базу/внешние сервисы и т.д. Ну и на планы SQL-запросов просматриваю, когда код, работающий с базой пишу.
Специально улучшением производительности кода редко заниматься приходится. Да и опять же, обычно все в оптимизацию запросов к базе упирается. Но иногда все же приходится, особенно если инфраструктурные штуки пилишь. У нас есть парочка таких (своя обёртка над Confluent Kafka и люто оптимизированный по памяти парсер экселей).
292 2928871
>>2928784
Мой алгоритм такой:
Сделать фичу
Потестировать труками
Покрыть тестами сверху
Если были ошибки - исправить
Отрефакторить чтобы менее говняно смотрелось
Отправить на ревью

Перформансом я буду заниматься, только если придет фидбек, что что-то там медленно.

Почему я так делаю? Потому что на самом деле - оказывается вот так, что 95% кода - перформанса с тупым решением в лоб достататочно. И если я буду тратить время, чтобы оптимизировать все и вся - я фичи, которые нужны заказчику - сделать не успею, либо хуево потещу, либо я хуево напишу, что через год - не пойму, что эта хуйня вообще делает. В результате - на выигрышь в перформансе - всем буквально будет насрать. В результате - мне будут ебать мозги, лишат премии, и прочая хуйня. Вот и на кой оно мне надо?
293 2929022
БАМП НАХУЙ, НАНОСЕКИ ЕБАНЫЕ ХОТЬ ОДИН ОТВЕТ БУДЕТ? >>2926646
294 2929048
>>2929022
Саааааси хуууй, сааааси. Соси соси соси. Ты тупой тупой, долбоееееб.
image.png43 Кб, 947x340
295 2929116
>>2927491
>>2927449
С индексами быстрее но не быстрее чем с файлами(
x.jpg121 Кб, 1024x1280
296 2929124
Всем привет! Сегодня я понял, что мне нужно изучить C#.
Ну как изучить, хотя бы понять на любительском уровне.
Посоветуйте книжку/pdf/сайт, чтобы примерно понять основы.
До этого в основном верстал-дристал фронтенд.
image.png20 Кб, 845x144
297 2929127
Hello Ana!
Как-то не так вначале прочиталось...

Metanit - норм сайт? Вроде висит в шапке.
298 2929131
>>2929124
>>2929124
Метанит или MSDN
Или какой нибудь ебантяй с ютуба, если вода нравится конечно.
299 2929133
>>2929131
Рихтера имеет смысл читать?
300 2929134
>>2929133
Может быть потом.
С начала просто выучи синтаксис, Рихрет тот пиздец нудный.
Но ты начни читать и посмотри как пойдет. Главное научится учится.
301 2929137
>>2929134
Я мимо, надо было дописать. У меня есть опыт на сях и других языках эзотерических, так что с синтаксисом проблем не будет, кишочки интересны.
302 2929138
>>2929133
Я пробовал. 100-200 стр прочитал кажись. Вроде оно понятно, о чем пишет, последовательно. Потом какая-то useless материя началась. Запоминать это бесполезно, без того, чтобы применять. А применять ты не можешь, т.к. не можешь даже одну минуту писать код без подглядывания в туториал или ютуб-курс.

В итоге, щитаю, что Рихтера стоит читать после года практики. В лучшем случае 6 мес.

мимо вкатывальщик
303 2929142
>>2929131
Окей, спасибо. Да уж лучше читать, чем смотреть.
image.png16 Кб, 977x140
304 2929163
Согласны?
Если у меня на сайте нет страницы и моё asp net core выдает 404 ошибку то это хуево? Должна быть страница 404 а код от Nginx ОК?
.png49 Кб, 1563x205
305 2929167
>>2929163
Согласен, только шарп тут при чём?
306 2929179
>>2928377
Он просто древний, тогда SPA ещё не вошли в моду.
307 2929180
>>2929163
Нет, это бред.
308 2929207
Тред тупых хуесосов.
309 2929709
>>2929163
ДВУХСОТКА-ДОДИК ЗАКАЗАЛ СЕБЕ ДОДОПИЦЦУ
@
ПИЦЦУ ПРИНЕСЛИ, НА КОРОБКЕ ФИРМЕННАЯ НАКЛЕЙКА "Я ПРОВЕРИЛ, ВСЁ ХОРОШО"
@
ДВУХСОТКАДОДИК ОТКРЫЛ КОРОБКУ, А ТАМ ГОВНО
@
В ГОВНЕ ТОРЧИТ ЗАПИСОЧКА "409 MESYA4NII BALANS NE SWEDEN"
@
ОХУЕВШИЙ ЗВОНИТ В ПОДДЕРЖКУ
@
НУ ВЫ ЖЕ ПОНИМАЕТЕ, ЧТО НАКЛЕЙКА ОТНОСИТСЯ ТОЛЬКО К ВНЕШНЕМУ ВИДУ КОРОБКИ
@
МЫ ЖЕ НЕ МОЖЕМ СМЕШИВАТЬ КУЛИНАРНЫЙ, УПАКОВОЧНЫЙ И ДОСТАВОЧНЫЙ ПРОТОКОЛЫ
@
ГОВНО В КОРОБКЕ ЗАКЕШИРОВАЛОСЬ
@
ТЕПЕРЬ ДАЖЕ ПРИ ОТДАЧЕ ПИЦЦЫ В ПИЦЦЕРИИ ДВУХСОТКА-ДОДИКУ БУДЕТ ПРИЕЗЖАТЬ ГОВНО В КОРОБКЕ БЛИЖАЙШИЕ 4 ЧАСА
310 2929731
Стоит ли юзать blazor?
311 2929753
>>2928377

> у них html-ка на сервере рендерится. И кто после такого говорит, что SSR плох?


Забавно это слышать на форуме со статичным рендером html-ек.
312 2929780
>>2929753
Эм нет, тут JSON'ы гоняются. По крайней мере 1 раз да, ответ от сервера с готовой страничкой, потом - нет.
313 2929795
>>2929780
Почему тогда лайки в ньюсаче обновляются только после появления новых постов на странице?
314 2929824
>>2929709
поэтому при ошибке не нужно слать 200 (вроде бы ты как бы хттп протокол за это и ратует - не просто так там есть огромный пул ошибок)
но это не значит что нужно героически все коды натягивать на хттп
послал не 200 - а внутри суть. И никакого кеширования не будет
и где теперь твоя пицца с говном?

а 404 это "нет пиццы" или "пиццерии нет нахуй"? как отличишь?
image.png2 Кб, 197x78
315 2929837
>>2929795
Не ебу. Ты можешь зайти сам в запросы и понажимать на кнопку обновить, увидишь JSON'чики с постами.
316 2929919
Приветствую. Возникла необходимость под Desktop организовать приложение с возможностью DockManager'а -- перетаскивать окна, как по типу Visual Studio. Есть ли какие-то альтернативы платных, чтобы +\- поддержка была (обновление не позднее трех лет)? Я наткнулся на AvalonDock -- пока есть сомнения в возможностях работы, под netcore3.0 не билдится даже (знаком с WPF от силы месяца 2, возможно руки из задницы). Есть мысли?
317 2929923
>>2929919
Вдовесок. Вообще странное впечатление возникло, что под шиндовс нет нормального докменеджера, открытого, как в вижле. Задача в проде (так что тут смотрят на лицензию).
318 2929931
>>2929923
Задача сама по себе всратая -- нужны панели эти для графиков. Количество графиков -- ограничено памятью пк. Из возможных приглянулся ScottPlot с поддержкой ускорения. Эмпирически выбрал его по результатам.
319 2929992
>>2929837
Ну значит просто обезьяна тупорылая сделала хуйню. В любом случае такая проблема тем более была бы и на статических хтмлках, в этом случае даже и без тупости обезьяны.
320 2930003
>>2929992
Ну тем не менее благодаря этой "хуйне" существуют кастомные клиенты двача. Отдавалась бы статика - хуй пососали бы.
321 2930050
>>2929824

>"пиццерии нет нахуй"?


Это уже на 500 (ну или 503) тянет.
А вообще нехуй угадайкой заниматься в стиле "у нас тут свой REST. А у нас свой". Нужно спеки на апи нормальные составлять, со всеми вариантами ответов и разрешением неоднозначностей, тогда и похуй будет, что там 'классика' или 'always 200'.
322 2930057
>>2930003
вот только эти жсоны - такая же статика. Никакой там динамики нет.
что полный хтмл, что полный жсон - перегенеривается при посте. А дальше уже сам сервер отдает статику всем желающим с экономией на трафике путем хидеров хттп на тему If-Modified-Since

>>2930050
каких 500
500 это если пиццерия жива и у нее проблемы. Пиццерия сгорела, запрос никуда не сроутился и отдал 404
А клиент думает что это пиццерия ответила.
323 2930076
>>2930057
>>2929824
>>2930050
Да какая нахуй пиццерия? Вы совсем со своими аналогиями ебанулись.
В РЕСТЕ 90% запросов это дай мне сущность по id. Тут вообще никаких нет разночтений, 404 — это нет искомой сущности.
324 2930085
>>2930076
А я вот посчитал, что id низя отдавать клиентам, мол это сделает его натуральным ключом... И ввел в кортежах столбец name/number. Насколько я еблан?
325 2930087
>>2930076

>404 — это нет искомой сущности.


ты мне тут лекции не читай, а на вопрос отвечай
нет искомой сущности - 404
что то временно случилось (косячный апдейт или жавист код писал) и запрос вообще не нашел адресата - 404

давай отличай одно отдругого
326 2930097
>>2930076
500 - нет искомой сущности
327 2930102
>>2930097
Вообще вот вам база
200 – запрос выполнен вот данные или ничего
500 – пизда иди нахуй вот тебе текст ошибки или "ошибка на стороне сервера пишите в ТП"
Все остальное пришлётся само тебе не надо.
328 2930125
>>2930085
на 79.3456%
тяжело было посчитать, но я справился.
329 2930131
>>2930003
Долбоёб, "хуйня" здесь не попытка в адекватный принцип работы сайта здорового человека, а обкуренное раковое обновление лайков при изменении содержания страницы.
330 2930139
>>2930087
А кто сказал, что различие должно быть именно в коде ответа?
331 2930142
Переписываю своё приложение Снова
Как мне переопределить папку wwwroot для каждого сайта.
Поясню.
Моё asp net core приложение обслуживаетили как правильно сказать? N сайтов.
Логику сильно расписывать не буду в вкратце вот так:
Nginx пересылает абсолютно все запросы server_name _; на proxy_pass http://localhost:5000;
В зависимости на какой домен пришел запрос приложение уже рулит.
А именно берет страничку немного её модифицирует и отдает.
Дело в том что сайты висят каждый на своём html шаблоне. Шаблоны и сайты могут добавлятся.
И сейчас все статичные файлы лежат просто в wwwroot. Проблема в том что на шаблонах есть файлы с одинаковыми именами. Например style.css, можно переименовать файлы, можно создавать папку на каждый сайт типо
wwwroot/site1/ и брать файлы от туда. Но тогда в исходном коде страницы будет видно что файлы берутся не из корня типо вот так <link href="/static/css/default.css?cache=7" title="makaba" type="text/css" rel="stylesheet">
а Как то так
<link href="/nameSite/static/css/default.css?cache=7" title="makaba" type="text/css" rel="stylesheet">
Хотелось бы этого избежать.
В какую сторону попать?
Вот пока писал мб в Nginx сделать еще один роут который бы все статичные файлы отдавал с
/var/www/coreapp/wwwroot/$host/
Но тоже хз
Подсабите плэз
ps это не mvc так как там html шаблон вшит и я не могу его на лету менять и редактировать.
332 2930144
>>2930139
ты ответил вопросом на вопрос
ясно все с тобой.
333 2930157
>>2930125
А можно теперь расписать причины этого заключения?
334 2930167
>>2930157
ну я глянул на чела который имеет уже счетчик уникальных номеров (и при этом у него ж вряд ли firebird, где его нужно отдельно заводить), а он сам считает, небось и сам за уникальностью следит

и вроде бы у него не как на ютубе - то есть псевдослучайные айди которые мешают парсинг перебором

и не нужны ему глобальные айди типа гуидников.

и думаю...нууу чел просто пиздец

а дальше все просто
пи - это 3.14 * взял числа от букв 'з' 'д' 'е' 'ц', далее бухнул и там сложная формула не помню уже, главное что результат успел записать
и тебе сообщил.
335 2930172
>>2930167
Так, только бить не начинай, для уникальности я завел по табличке и sequential для каждого id там. Таким образом генерация будет на стороне бд и связь one-to-one с столбцом name/number.
336 2930173
>>2930142
вот что бывает когда мультисайт делаешь не на пхп, который хоть и говно, но все же для мультисайтов уровня "на коленке" подходит лучше

ну а что ты сделаешь
ну разве что рерайт на уровне nginx чтобы он знал какой файл ему нужен. Может по рефереру (ненадежно), а может по ключу что ты после ? пишешь.
337 2930174
>>2930172
ну еще монгодб нужно прицепить и эластик. - туда эти намберы слать писать.
338 2930175
>>2930174
Блин, ну почему вы такие вредные... Тебя блинб прицеплю.
339 2930177
>>2930175
ему советы дают (и даже не посылают), а он недоволен
смотри так жавистом станешь и не заметишь. Берегись
340 2930179
>>2930177

>смотри так жавистом станешь


Ты не поверишь...

>и даже не посылают


Я же няша, за что меня посылать?
341 2930182
>>2930173

>Может по рефереру (ненадежно), а может по ключу что ты после ? пишешь.


Это как? По какому ключу?
Вобще с файлами не проблема, просто не удобство.
342 2930187
>>2930131
Топни.
343 2930198
>>2930087

> что то временно случилось (косячный апдейт или жавист код писал) и запрос вообще не нашел адресата - 404


Я на любую схему api могу придумать баг, который будет выглядеть как какой-то ожидаемый ответ, а означать совсем другое, так что твой аргумент инвалид.

Кстати, в том же ASP.NET, если у тебя несуществующий url, то тебе не веб-сервер 404 возвращает, а фреймворк. Это кошерно или уже нет? Ладно, в IIS можно настроить хендлер, который эти 404 в 200 преобразует и напишет route not found в боди. А если это Kestrel?

>>2930102

> Все остальное пришлётся само тебе не надо.


Not authorized мне тоже веб-сервер пришлёт? Там это в лучшем случае на статику можно настроить.
А если у меня SSR, и надо редирект после пост-запроса делать, мне тоже это надо на ajax переписывать и руками редиректить?
Вообще существующие веб-серверы хорошо если треть имеющихся кодов умеют присылать. А остальные коды, что, не нужны?
344 2930201
Пацаны. В общем. Вдохновился я статьей, про то что надо переосмыслить подход к структуре проекта.
Сделал в общем так:

org.Project.csproj
Program.cs
Module1
--Modile1Installer.cs
--Endpoints
----Endpoint1.cs
----Endpoint2.cs
--Models
----Model1.cs
----Model2.cs
--...
Module1

Ну. Собственно. Выглядело на бумаге - ок.

Но оказывается - MinimalApi - не умеет в XML. Вот просто охуеть. И вся эта охуитительная структура - теперь идет нахуй.
Как так-то? Почему так?
Коуда писать?
Кому звонить?
Не хочу в эндпоитны HTTP-совать и XML'ки доставать из тела руками.
345 2930243
>>2930198

>Not authorized мне тоже веб-сервер пришлёт? Там это в лучшем случае на статику можно настроить


Пришлет дотНЕТ и без твоего участия. В продуктовой сборке он ещё и любые исключения вернет как 500.
Я про то что руками прям обычно 200 и 500 кидают, все остальное в дотНЕТ за тебя вышлет сам фреймворк, что кошэрно и удобно и шлёт он довольно точные коды.

Мне вообще нравится писать бэк на С# только из-за фреймворка который позволяет не ебаться и просто довериться ему сосредочив свои мысли не на кодах ответа, а на написании бизнес кода.
346 2930249
>>2930182
Ну ты ж добавил ?cache=7
Что мешает добавить туда любой флаг для нгинх
347 2930260
>>2930249
Это код с двача для примера
У меня просто ссылка на css
348 2930264
>>2930260
Ну так добавь подобный флаг
А вообще КОМУ НЕ НАСРАТЬ на путь к css
Находишь проблему на ровном месте
349 2930273
>>2930243
Но ведь фреймворк не веб-сервер, он не должен коды возвращать.

Ну и ты ещё половину моего поста проигнорировал.
350 2930275
>>2930264
Мб гугл боту не насрать и он просечет что все мои сайты на одном приложении крутятся. Ну он по любому рано или поздно просечет, но я старюсь их делать максимально не похожими.

Ну и если флаг добавлять то я тогда ваще хуй знает как сделать, как назвать файл что бы по флагу его взяло)
351 2930282
>>2930273
Если тебе нужен редирект верни в ответ Redirect()

Ты никогда на С# не писал или че за тупые вопросы как писать банальные вещи?
352 2930300
>>2930282
Я знаю как всё писать, спасибо. Я и NoFound() могу вернуть, только вот NotFound по-твоему почему-то нельзя, а Redirect можно, и [Authorize] можно, и даже свой фильтр прикрутить можно, хотя во всех этих случаях код ответа будет возвращать не веб сервер, что по твоей идеологии является табу.
353 2930319
>>2930275
делать ему больше нехер. его больше волнует что они на одном айпи и похожи по сути.
354 2930323
>>2930319
Ну ип прячется за cloudflare а шаблоны нужны что бы они хоть как то отличались)
355 2930339
>>2930323
тогда похапэ тебе поможет
а на деле просто заведи флаги хоть рэндомный набор букв. какая разница
356 2930361
>>2930142
Ваша задача - настроить ASP.NET Core приложение так, чтобы оно обслуживало несколько сайтов, каждый из которых имеет свою папку `wwwroot`. Для решения этой задачи есть несколько подходов:

### 1. Использование Middleware для Переопределения `wwwroot`

Вы можете использовать middleware в ASP.NET Core для динамического определения папки `wwwroot` в зависимости от запрашиваемого домена. Примерно так:

1. Создайте middleware, который анализирует запрашиваемый домен и на основе этого устанавливает нужный путь к статическим файлам.
2. В middleware используйте `IWebHostEnvironment` для установки нового пути к `wwwroot`.
3. Убедитесь, что этот middleware добавлен в начале конвейера обработки запросов, чтобы он выполнялся перед обработкой статических файлов.

### 2. Настройка Nginx

Вы также можете настроить Nginx для обработки статических файлов, используя разные пути к `wwwroot` в зависимости от запрашиваемого домена. Примерно так:

1. Настройте блок сервера в Nginx для каждого домена.
2. В каждом блоке укажите разные корневые папки для статических файлов.
3. Убедитесь, что запросы на статические файлы не перенаправляются на ваше ASP.NET Core приложение.

### 3. Использование Поддоменов

Еще один вариант - использование поддоменов для каждого сайта. Это может упростить маршрутизацию и организацию статических файлов, так как каждый поддомен может иметь свой собственный набор статических файлов.

### 4. Использование Virtual File Providers

ASP.NET Core поддерживает Virtual File Providers, которые позволяют вам определять виртуальные пути к файлам. Вы можете настроить отдельные виртуальные пути для каждого сайта и использовать их для обслуживания статических файлов.

### Важные Моменты:

- Производительность: Если вы решите обрабатывать статические файлы через ваше ASP.NET Core приложение, это может повлиять на производительность. Обычно лучше, чтобы Nginx обрабатывал статические файлы.
- Безопасность: Убедитесь, что ваше решение не создает уязвимостей в безопасности, особенно если оно включает динамическое формирование путей к файлам.
- Тестирование: Тщательно протестируйте вашу конфигурацию в разных сценариях, чтобы убедиться, что все работает корректно.

Выбор метода зависит от вашего конкретного случая, ваших требований к производительности, безопасности и легкости поддержки.
356 2930361
>>2930142
Ваша задача - настроить ASP.NET Core приложение так, чтобы оно обслуживало несколько сайтов, каждый из которых имеет свою папку `wwwroot`. Для решения этой задачи есть несколько подходов:

### 1. Использование Middleware для Переопределения `wwwroot`

Вы можете использовать middleware в ASP.NET Core для динамического определения папки `wwwroot` в зависимости от запрашиваемого домена. Примерно так:

1. Создайте middleware, который анализирует запрашиваемый домен и на основе этого устанавливает нужный путь к статическим файлам.
2. В middleware используйте `IWebHostEnvironment` для установки нового пути к `wwwroot`.
3. Убедитесь, что этот middleware добавлен в начале конвейера обработки запросов, чтобы он выполнялся перед обработкой статических файлов.

### 2. Настройка Nginx

Вы также можете настроить Nginx для обработки статических файлов, используя разные пути к `wwwroot` в зависимости от запрашиваемого домена. Примерно так:

1. Настройте блок сервера в Nginx для каждого домена.
2. В каждом блоке укажите разные корневые папки для статических файлов.
3. Убедитесь, что запросы на статические файлы не перенаправляются на ваше ASP.NET Core приложение.

### 3. Использование Поддоменов

Еще один вариант - использование поддоменов для каждого сайта. Это может упростить маршрутизацию и организацию статических файлов, так как каждый поддомен может иметь свой собственный набор статических файлов.

### 4. Использование Virtual File Providers

ASP.NET Core поддерживает Virtual File Providers, которые позволяют вам определять виртуальные пути к файлам. Вы можете настроить отдельные виртуальные пути для каждого сайта и использовать их для обслуживания статических файлов.

### Важные Моменты:

- Производительность: Если вы решите обрабатывать статические файлы через ваше ASP.NET Core приложение, это может повлиять на производительность. Обычно лучше, чтобы Nginx обрабатывал статические файлы.
- Безопасность: Убедитесь, что ваше решение не создает уязвимостей в безопасности, особенно если оно включает динамическое формирование путей к файлам.
- Тестирование: Тщательно протестируйте вашу конфигурацию в разных сценариях, чтобы убедиться, что все работает корректно.

Выбор метода зависит от вашего конкретного случая, ваших требований к производительности, безопасности и легкости поддержки.
357 2930367
>>2930361

>


>


Спасибо на чат жпт не может в задачи сложнее чем hello world.
Ответ типо ну сделай хорошо и будет хорошо.
358 2930371
>>2930367
Но он прав насчет пункта 2
И вопрос будет решеш
359 2930374
>>2930371
У меня доменов несколько сотен и каждый день какие то удаляются а какие то прибавляются.
360 2930376
>>2930374
И что. Заведи кота.

Или найди способ не ребутать асп, питон, руби....
Или возьми похапэ где такой проблемы нет и страдай
361 2930378
>>2930367
ну а что ты хотел. Сам все нагадил и у нас ответы просишь
я на тебя целый вопрос потратил, а у гпт лимит 50 на 3 часа
362 2930380
>>2930378
зачем тратить время гпт, когда тебя и так тут могут послать куда хочешь?
363 2930396
>>2930380
когда тебя и так тут могут послать куда хочешь?
Гпт не пошлет, а максимально будет пытаться помочь. Покат лимит не закончится
364 2930401
>>2930396
Мы пошлем. Без регистрации и смс. И даже куда не хочешь

А вообще это деградация. Молодежь не умеет гуглить,ей нужен чат
365 2930404
>>2930401
жпт норм когда нужно накидать что то мелкое.
А для сложного кода нужно его пиздец как четко описать. Но если я его четко опишу то я сам по такому описанию смогу написать и нахуй тот жпт.

Пример.
Даем жпт код и просим написать подробное описание кода, описать каждую строку все подробно.
Он пишет портянку.
Эту портянку вставляем в новый чат и просим написать код по этому описанию
Он пишет практический такой же код
Кажется нихуя себе какой умный. Но бля по такому описанию я сам смогу написать код. А что бы составить такое описание нужен сам код.
366 2930486
>>2930144
Слив принят.
367 2930487
>>2930187
Слив принят.
368 2930524
>>2930404

>Он пишет практический такой же код


>практический такой же


Вот в этом "почти" и кроется, кстати, основная анальная жопа взаимодействия с ИИ. Сначала это чуть-чуть "практически" то же самое, потом какие-то вариации, а потом на похуях что-нибудь вроде "define true = false" (утрирую) и еще и будет уверен в правильности своего решения. И хуй ты разберешь его галлюцинации среди тысяч строк кода.
369 2930538
Как fauxpilot подключить к Visual Studio 2022? Ну и ли вообще к любой студии, а не к VSCode
370 2930720
>>2930486
да. ТВОЙ слив.
принимаю.
371 2930723
>>2930720

>стрелочка


Лол.
372 2930999
Вопрос про .NET Framework: насколько сильно включенная трассировка (я про Trace.axd на IIS) влияет на производительность? Я ньюфаг, не бейте
373 2931018
>>2930487
Слил тебе защеку, учись мысли выражать, "хуйня".
374 2931057
>>2931018
Не ворочайся, слитое.
375 2931085
>>2927499

>что это будет ФУРРИ игра. я чувствую себя человеком, но люблю заверотянок очень, типа акул,


Так, убирайся обратно в b или оставайся
376 2931105
>>2925024
Ты на хуй, мудозвон, ссылки в спойлер прячешь? Чтобы я, кликая по ним, выкатился из треда?
377 2931109
>>2931057
Топ.
378 2931179
Опять жавист в треде обтекает. Его обсыкают, а он обтекает. Странное у него хобби.

>>2925024
возраст особого значения не имеет. Лишь бы склад ума подходил. Тогда все в этот склад заваливаться будет нормально.

Вообще даже голубя можно научить писать скрипты и формочки лепить.

А вот мыслить абстракциями, метафорами, оопшно, многопоточно и всякие такие алгоритмы - особый навык, ведь элементы не имеют аналогов в реальном мире и это другой стиль мышления, чем тебе привычный.
379 2931415
>>2930538
никак
.jpg181 Кб, 630x840
380 2931499
Хм.
Хм.
Все же.
Не знаете че надо сделать, чтобы MinimalApi научить работать с XML в контексте получения в теле запроса документа определенного формата?
Типа чтобы контроллеры так умели - просто делаю: AddXmlSerializerFormatters(). А вот че делать в MinimalApi - не знаю.
381 2931537
Просто напомню, что если у вас есть публичные свойства и методы, которые не представлены в интерфейсе, то вы пишите говнокод.
382 2931579
>>2931537
ДТО и энтити вышли из чата.
383 2931602
>>2931537
Просто напомню, что интерфейсы - не нужны в нормальных языках, и это просто костыль.
384 2931621
>>2931602
Ну хочешь писать классы из одних методов пиши.
Ты какие альтернативы видишь разделения наследования поведения и реализации? Множественное наследование классов?
385 2931627
Профессионалы, а что думаете о последнем видосе Бороды?
Где он на панике рассказывает, что у программирования осталось в лучшем случае 3-5 лет.

Предположения и рассуждения имхо вполне логичны. Выглядит так, что вкатываться поздно. Верней, вкатываться не получится в принципе.
Просто ИИ отрегулирует рынок так, что количество программеров уже близко к насыщению и дальше программистами будут становиться только самые талантливые и трудолюбивые люди. Т.е. условно 2% от всех вкатунов. Просто потому, что они с помощью ИИ смогут выполнять весь объем работ, на который нужны были все эти 98%.

Никто же не говорит сейчас "пойду вкачусь в железнодорожники" или "свитчую из фотографа в пожарные". И тех и других на рынке столько, сколько требуется. Если уж тебе вправду нравятся паровозики, то можешь стать железнодорожником. Но никто тебе там сотыги и смузи на обед не сулит. Не понравилось, трудно, можешь уёбывать с жд, другого найдут.

https://www.youtube.com/watch?v=p9wBNOJH59Q&ab_channel=%D0%90%D0%B9%D0%A2%D0%B8%D0%91%D0%BE%D1%80%D0%BE%D0%B4%D0%B0

или обсуждали уже?
386 2931636
>>2931627
Да. На жопоголизме тоже можно заработать.
387 2931642
>>2931627

> ИИ


Дальше не читал.
388 2931662
>>2931537
Чушь собачья. Чел вообще не разбирается в вопросе
image175 Кб, 1492x1102
389 2931664
>>2931627
А почему бухгалтеров до сих пор не заменил ни excel, ни 1С?
390 2931668
>>2931621
Да это фпшник. У них нет внедрения зависимостей, поэтому в каждую функцию приходится в виде параметров передавать либо другие функции на вызов, либо результат их вычисления.
Но так как в фп мокать функции сложно, поэтому функции передавать нельзя, значит их надо вызывать на уровень выше. А так как уровнем выше такая же функция, то всё приходится пропихивать до самого верхнего уровня.
В итоге никаких слоёв абстракций нет, а функция-точка входа, видимо, выглядит как портянка из вызова всего подряд.
Зато нет костылей-интерфейсов.
391 2931676
>>2931085
ну мне делать там нехуй.
буду сюда иногда заходить.
392 2931679
>>2931664
заебешься автоматизировать
но вполне возможно.
393 2931684
>>2931627

>Профессионалы, а что думаете о последнем видосе Бороды?



Жалко мужика, че тут думать еще

https://www.youtube.com/watch?v=sONRkfctgT0
394 2931707
>>2931627
Я даже смотреть не хочу, это просто полная хуйня.
Я, когда код пишу, у меня подавляющая часть времени уходит на проектирование структуры классов, методов ит.д. Писать работающий код - это минимальная необходимая квалификация для джуна, и даже с этим ИИ не справляется. А ведь код ещё должен быть читаемый, поддерживаемый и тестируемый.
Я пару раз пытался попросить написать ИИ маленький участок, чтобы не тратить время на поиск нужных функций и их сигнатур в доках, и то он написал не то, что мне нужно. Мне проще загуглить, попасть на стековерфлоу, посмотреть несколько решений, комменты к ним, и выбрать наиболее оптимальное.

С написанием текстов у ИИ тоже плохо: попроси ИИ написать рассказ, он тебе выдаст текст без вменяемого последовательного сюжета. Не умеет ещё пока ИИ в нужный уровень абстракции.
.png57 Кб, 738x450
395 2931720
>>2931621
Альтернативой вижу - то как сделано в TS. Опитсывается тип, во время компилятции - проверяется, что переданная хуйня - удовлетворят типу. Все.
На кой хуй нужно какой-то там интерфейс имелементировать, какую-то хуйню городить, потом сверху адептеры делать, адаптеры для адаптеров, потом - поняв что выглядит как говно - шлифануть фассадом.
Короче. Нахуй костыли.
396 2931738
>>2931707

>на поиск нужных функций и их сигнатур в доках


Бедняжки, а ведь нормальные иде это делают по дефолту...
397 2931743
>>2931668
Ты ведь никогда в фп не прогал?
398 2931748
>>2931720
Причём тут вообще ООП? Тип ахуеть не встать, я на С++ тоже могу такое написать и мне даже не нужен для этого отдельный тип я в качестве параметра укажу указатель на функцию.
399 2931768
>>2931748
Тоже не понимаю, при чем тут ООП.
Я просто напомнил, что интерфейсы - ненужный костыль.
image.png50 Кб, 941x297
400 2931774
>>2931720
че дальше?
401 2931776
>>2931768
Этот чел них не понимает
image.png61 Кб, 1220x286
402 2931778
>>2931720
>>2931774
сорян забыл про параметры
403 2931782
>>2931768

>Я просто напомнил, что интерфейсы - ненужный костыль


поэтому скинул фп код? ну заебись че молодец, как это относится к ООП и системам классов?
image.png78 Кб, 192x330
404 2931786
>>2931707

>Я даже смотреть не хочу, это просто полная хуйня.



Дык время тичот. Я помню в 2005-07 в компьютерном классе в говно-шараге стояли говнокомпы. Пентиум 3, 667MHz. И это когда уже третий дум вышел и сталкер. Даж не помню для чего они там были, какой предмет по ним изучали. Наверное просто стояли на балансе, лол
От нехуй делать, кто-то притащил "Искуственный интеллект" на дискете! Оно даже со встроенным обучением было. Типа сам даешь ответ "оло-ло-ло" на вопрос "сколько ног у осьминога?" и он этот ответ потом подсовывает. Можно было даже вменяемый минидиалог получить на четыре-пять вопрос-ответов. Но в общем, это просто полная хуйня.
Прошло время, да целых 17 лет. Но производительность растет экспоненциально. И вот сейчас же никто особо не угарает над общением с чатом GPT, его всерьёз опасаются, с его помощью даже учатся (тем самым ставя себя в младшую роль) или зарабатывают реальные деньги.
И я тут соглашусь, что через 3-5 лет такого интенсива, GPT или что на их основе вырастет, это уже будет реально конкуренты. И в том числе на выдумывание абстракций, структур и т.д.
5 лет это очень мало. На хату возможно успеешь заработать, если на барбершопах экономить. А вот выйти программистом на пенсию уже не получится скорей всего.
405 2931787
>>2931774
>>2931778
Динамик - не проверит тип того что я туда не единичку просто передал, няша.
А в командной разработке, к сожалению - часто нужно чтобы проверил, ведь если я - бог программирования, то вокруг меня много всяких странных челов, которые хотят попортить мое божественное творение, пихая всякую мерзость. Так что типы таки нужны. Но вот интерфейсы - нихуя.

>>2931782
Каким местом ты там ФП код увидел-то?
Чистейшее ООП, лул. Просто без всяких уродств с интерфейсами.
406 2931789
>>2931720
Так ты на JS тоже самое мог написать. Причём класс Printer тут вообще лишний и без него будет все работать.
407 2931791
>>2931789
Нужна проверка того что переданный объект имеет нужный метод с корректной сигнатурой. Потому и ТС.
JS - проглотит если я туда что угодно пихну.
408 2931793
>>2931787

>Динамик - не проверит тип того что я туда не единичку просто передал, няша


Так в твоём коде тоже не будет проверок. TS проверяет это чисто линтером, можно убрать это поведение и будет как в обычном JS передавай че хочешь.

Ты изначально вообще понимаешь что в том же шарпе сущ типы данных во время выполнения кода? И почему вообще работает переопределение методов в ООП, ну чисто на уровне памяти компьютера?

Ты блять принёс функциональный код я принёс его же. Ты мне принеси пожалуйста ООП код.
409 2931841
>>2931793
он тебя не поймет.
он думает что если сигнатура подходит то все ок

и ему не пояснить что не ок - метод может быть переопределен, могут быть 2 интерфейса с одним именем метода и что в общем то нужно иметь возможность описать контракт чтобы классы знали чего от них ожидают - а это и есть собственно интерфейсы
.png68 Кб, 422x615
410 2931872
>>2931793

> Ты блять принёс функциональный код я принёс его же


Надеюсь так ты доволен.

> Ты изначально вообще понимаешь что в том же шарпе сущ типы данных во время выполнения кода?


И толку?

> И почему вообще работает переопределение методов в ООП, ну чисто на уровне памяти компьютера?


Я не понимаю к чему ты это спрашиваешь? В контексте того, что интерфейсы - просто костыль. Ну, допустим - знаю. И чо?

>>2931841
Ну. А теперь ты приведи мне реальный кейс, когда у тебя класс - должен реализовывать 2-3 одинаковых интерфейса, иметь разное поведение, и при этом это должен быть один и тот же класс.
Типа чел. Ну срсли.
Давай разберем. Вот код

class MySupperMegaDupperOneToRuleThemAllPrinter : IConsolePrinter, IFilePrinter, ILogPrinter {

public virtual void Print(string text){...}
public virtual void IConsolePrinter.Print(string text){...}
public virtual void IFilePrinter.Print(string text){...}
public virtual void ILogPrinter.Print(string text){...}
}

Приведи хоть один реальный кейс, где это не говнокод и вообще хорошо.

Все эти истории про контракты это конечно на бумаге - весело и прикрасно. Но тогда давай, объясняй мне, на кой хуй при том что интерфейсы - не костыль, в любом коде через пару итераций - появляется адаптер, адаптер адаптера, прокси, хуекси и прочая залупа. Ведь КОНТРАКТ. Че эт такое-то? КЛАСС ЕМУ НЕ УДОВЛЕТВОРЯЕТ. И потому - мы делаем поверх одного костыля - еще несколько, чтобы как-то оно ехало. Отличная идея. Просто 11/10. Чтобы не нужно было обфускатор гонять, а просто в коде из-за кучи ненужного говна - никто и так не разобрался.
411 2931890
>>2931872

>2-3 одинаковых интерфейса


не одинаковых. интерфейсы разные. но у них может совпасть один метод.
и такое не редкость.
но придумывать примеры с потолка не хочу.

>где это не говнокод и вообще хорошо


ты сам придумал говно и хочешь чтобы я оправдал почему не говно. Впрочем ФАСАДНЫЙ класс может быть вполне и таким и не быть говном ибо он фасад.

>Ведь КОНТРАКТ. Че эт такое-то? КЛАСС ЕМУ НЕ УДОВЛЕТВОРЯЕТ


ну так удовлетвори. тебе ДАЛИ КОНТРАКТ и это твои проблемы кто его удовлетворит. Тебя никто не ограничивает в выборе кто же реализует контракт.
412 2931935
>>2931499

>А вот че делать в MinimalApi - не знаю.


Ничего. Минимал-апи - это хуйня для быстрого прототипирования, чтобы, когда нужно, по фасту накидать говнокода, проверить концепцию и пойти делать нормально.
.png70 Кб, 519x608
413 2931954
>>2931890

> но у них может совпасть один метод.


В типах TS - нужно чтобы не только один метод совпадал. Если у тебя совпадает только один метод - а в остальном типы разные, то это разные типы и TS - пошлет нахуй. А если твой объект - полностью подходит под этот тип - то с фига он контракту-то не соответствует?

> Впрочем ФАСАДНЫЙ класс может быть вполне и таким и не быть говном ибо он фасад


Фассад, который каким-то интерфейсам удовлетворяет - это 99% говнокод.
Фассад - нужен только в случаях, если мы хотим скрыть сложность. Если ты делаешь фассад под интерфейсы - это говно какое-то.

> ну так удовлетвори. тебе ДАЛИ КОНТРАКТ и это твои проблемы кто его удовлетворит. Тебя никто не ограничивает в выборе кто же реализует контракт.



Так и в чем тогда смысл-то, лол?
Ну вот:

// лежит в чужой библиотеке
class A { public void print(string str) { Console.WriteLine(str); }}

// лежит в нашей библиотеке
Interface B { public void print(string str); }
class MyClass { void DoSome(string str, B b) { b.print(b); }

// теперь я просто с какого-то хуя должен делдать вот эту залупу
// хотя она нахуй не нужна, но я буду это делать, потому что - ну, надо
// проигрывая в скорости, проигрывая в памяти, зато интерфейс реализовал
public class AtoB : B {
private A _a;
public(A a) => _a = a;
public void print(string str) { _a.print(str); }
}

В тс - такой проблемы в принципе не возникнет никогда.

Ну да ладно. Видимо магический интерфейс - это что-то, что вам прям душу греет. Чувствуете себя в безопасности. Если для вас - костыли - это заебись. Ну, хули. Мне спорить не оч хочется.
.png70 Кб, 519x608
413 2931954
>>2931890

> но у них может совпасть один метод.


В типах TS - нужно чтобы не только один метод совпадал. Если у тебя совпадает только один метод - а в остальном типы разные, то это разные типы и TS - пошлет нахуй. А если твой объект - полностью подходит под этот тип - то с фига он контракту-то не соответствует?

> Впрочем ФАСАДНЫЙ класс может быть вполне и таким и не быть говном ибо он фасад


Фассад, который каким-то интерфейсам удовлетворяет - это 99% говнокод.
Фассад - нужен только в случаях, если мы хотим скрыть сложность. Если ты делаешь фассад под интерфейсы - это говно какое-то.

> ну так удовлетвори. тебе ДАЛИ КОНТРАКТ и это твои проблемы кто его удовлетворит. Тебя никто не ограничивает в выборе кто же реализует контракт.



Так и в чем тогда смысл-то, лол?
Ну вот:

// лежит в чужой библиотеке
class A { public void print(string str) { Console.WriteLine(str); }}

// лежит в нашей библиотеке
Interface B { public void print(string str); }
class MyClass { void DoSome(string str, B b) { b.print(b); }

// теперь я просто с какого-то хуя должен делдать вот эту залупу
// хотя она нахуй не нужна, но я буду это делать, потому что - ну, надо
// проигрывая в скорости, проигрывая в памяти, зато интерфейс реализовал
public class AtoB : B {
private A _a;
public(A a) => _a = a;
public void print(string str) { _a.print(str); }
}

В тс - такой проблемы в принципе не возникнет никогда.

Ну да ладно. Видимо магический интерфейс - это что-то, что вам прям душу греет. Чувствуете себя в безопасности. Если для вас - костыли - это заебись. Ну, хули. Мне спорить не оч хочется.
414 2931968
>>2931954
Зачем тебе в этом примере вообще TS? Потому что он обеспечивает чисто проверку типов аля синтаксис кода?
Перепиши это на JS и у тебя не будет ошибок.

TS не имеет никакой системы типов, это просто синтаксисический сахар
415 2931969
>>2931954
причем тут блин типы
у 2х интерфейсов может быть один совпадающий по сигнатуре метод. и в классе он конечно имеет 2 реализации, но ОДИНАКОВЫЕ по сигнатуре
какой из них будет выбирать твой тс блин
и вообще что ты пришел с тс - это транслятор в жс, где совсем другая жизнь

>Фассад, который каким-то интерфейсам удовлетворяет - это 99% говнокод.


ничего подобного. ибо это ФАСАД. в этом его суть чтобы спрятать распределенную сложность иерархии за чем то одним простым, пусть даже с нарушением SRP ибо это ФАСАД
И КОНЕЧНО ЖЕ все интерфейсы которые были размазаны по каким то классам ПЕРЕЕЗЖАЮТ в фасад.

>Так и в чем тогда смысл-то, лол?


в том что интерфейс это контракт, который описывает ИСКЛЮЧИТЕЛЬНО нужный функционал

если мне нужно сварить борщ, то мой контракт описывает "сварить борщ" и мне знать не нужно будет ли это жена, соседка или проститутка (а может даже я сам или волшебник в голубом вертолете прилетит). Меня эти подробности не интересуют

ты же хочешь чтобы я приглашал целую бабу (причем с функцией варки борща) мне борщ варить. А волшебника уже никак или мне и это прописывать заранее? и себя любимого не забыть?

Мне эти лишние знания не нужны. Я выставил МИНИМАЛЬНЫЕ УСЛОВИЯ - и входящий тип меня вообще не волнует. Ну да, я получу виртуальный вызов - но в этом и есть суть, что я не буду знать кого вызываю ибо мне это НЕ НУЖНО ЗНАТЬ
416 2931976
>>2931954

>Ну да ладно. Видимо магический интерфейс - это что-то, что вам прям душу греет. Чувствуете себя в безопасности. Если для вас - костыли - это заебись. Ну, хули. Мне спорить не оч хочется


Ты понимаешь что в С#, С++, Java типы данных реально существуют во время выполнения? Каждый класс это реально отдельная вещь. В С++ вообще на этапе компиляции даже шаблоны создаются как отдельные типы данных по одному на каждый типизированый шаблон.

Интерфейс это синтаксисический сахар над абстрактным классом где есть только лишь методы. По сути это просто таблица виртуальных функций которая как есть записывается в любой дочерний тип.
Также интерфейс требует реализации его метдов.

В ЖС И ТС нет никаких классов вообще. Это просто утиная типизация и хуйня аля можно вызвать что угодно у чего угодно. Твой Printer это и есть интерфейс по сути.
417 2931979
>>2931976
да. интерфейс позволяет описать НЕОБХОДИМЫЙ МИНИМУМ который требуется, и не требовать знания типов

Даже есть принцип разделения интерфейсов. Это когда один общий интерфейс, допустим IЖена, дробится на "варитборщ", "прибирается", "сосет" и так далее.

и если тебя интересует какая то одна часть этого, то ты вполне можешь вызвать не жену и получить реализацию конкретного аспекта. Зачем ради одного действия жениться то.

так что да- интерфейсы это сила, главное не делать их перегруженными иначе смысл теряется.
418 2931988
Нахуя тут даун за ТС усирается? Он не понимает что там нет никаких типов данных и даже нормального ООП? Только эрзац пародия и имитация на уровне линтера.

Приперся в тред про С# и пишет а вот в ТС работа с классами лучше. Ну естественно наверное потому что там вообще нет классов
419 2931994
>>2931969

> у 2х интерфейсов может быть один совпадающий по сигнатуре метод. и в классе он конечно имеет 2 реализации, но ОДИНАКОВЫЕ по сигнатуре


Зачем твоему классу реализовывать два интерфейса?

> ты же хочешь чтобы я приглашал целую бабу


Нет. Я просто хочу утиную типизацию. Все. Если это выглядит как утка, пахнет как утка, крякает как утка - то мы можем предположить - что это утка. Все чего я хочу.

> Я выставил МИНИМАЛЬНЫЕ УСЛОВИЯ


Ты создал целый интерфейс и засталвяешь строить монструозную хуйню вокруг этого. Хотя тебе, как ты сказал - нужен только борщ.

Так почему не сделать так:

foo(borschProvider: { doBorsch(): void, setBorschColor(color: "green"| "red" )} )

Зачем ты меня заставляешь сверху нахуевертить всякого говна с адаптерами, хуяптерами и прочим? Чтобы что? Чтобы где? Чтобы вместо того чтобы 1 строчку кода написать - я написал 100500?

> Я выставил МИНИМАЛЬНЫЕ УСЛОВИЯ - и входящий тип меня вообще не волнует


Ну и чем в таком случае тебе тип из TS и его утиная типизация не подходит? Интерфейсы шарпа - тяжелее, они вынуждают как раз всю муру тащить с наследованием, вынуждают делать всякую срань с адаптерами и раздувать кодовую базу мусором всяким, который не относится к решаемой задаче.

>>2931976

> Ты понимаешь что в С#, С++, Java типы данных реально существуют во время выполнения?


> C++


Можешь не продолжать. В вопросе ты не разбираешься от слова совсем.

>>2931968

> Зачем тебе в этом примере вообще TS? Потому что он обеспечивает чисто проверку типов аля синтаксис кода?


Именно потому.

> Перепиши это на JS и у тебя не будет ошибок.


Ну. Перепиши свой код на ассемблер - у тебя тоже никаких проблем с интерфейсами и типами не будет, потому что процессору - до пизды че там придумали мясные мешки, говорят остановить выполнение - остановим, не говорят - погнали дальше. Дальше что? Че дальше-то, блядь?
419 2931994
>>2931969

> у 2х интерфейсов может быть один совпадающий по сигнатуре метод. и в классе он конечно имеет 2 реализации, но ОДИНАКОВЫЕ по сигнатуре


Зачем твоему классу реализовывать два интерфейса?

> ты же хочешь чтобы я приглашал целую бабу


Нет. Я просто хочу утиную типизацию. Все. Если это выглядит как утка, пахнет как утка, крякает как утка - то мы можем предположить - что это утка. Все чего я хочу.

> Я выставил МИНИМАЛЬНЫЕ УСЛОВИЯ


Ты создал целый интерфейс и засталвяешь строить монструозную хуйню вокруг этого. Хотя тебе, как ты сказал - нужен только борщ.

Так почему не сделать так:

foo(borschProvider: { doBorsch(): void, setBorschColor(color: "green"| "red" )} )

Зачем ты меня заставляешь сверху нахуевертить всякого говна с адаптерами, хуяптерами и прочим? Чтобы что? Чтобы где? Чтобы вместо того чтобы 1 строчку кода написать - я написал 100500?

> Я выставил МИНИМАЛЬНЫЕ УСЛОВИЯ - и входящий тип меня вообще не волнует


Ну и чем в таком случае тебе тип из TS и его утиная типизация не подходит? Интерфейсы шарпа - тяжелее, они вынуждают как раз всю муру тащить с наследованием, вынуждают делать всякую срань с адаптерами и раздувать кодовую базу мусором всяким, который не относится к решаемой задаче.

>>2931976

> Ты понимаешь что в С#, С++, Java типы данных реально существуют во время выполнения?


> C++


Можешь не продолжать. В вопросе ты не разбираешься от слова совсем.

>>2931968

> Зачем тебе в этом примере вообще TS? Потому что он обеспечивает чисто проверку типов аля синтаксис кода?


Именно потому.

> Перепиши это на JS и у тебя не будет ошибок.


Ну. Перепиши свой код на ассемблер - у тебя тоже никаких проблем с интерфейсами и типами не будет, потому что процессору - до пизды че там придумали мясные мешки, говорят остановить выполнение - остановим, не говорят - погнали дальше. Дальше что? Че дальше-то, блядь?
420 2932006
>>2931994

>говорят остановить выполнение - остановим


Процессоры так не умеют же. Будут nop жечь. Или я не прав?
421 2932011
>>2931994

>Зачем твоему классу реализовывать два интерфейса?


да хоть 10 или даже 100 и это норма. я показал тебе что интерфейс жена можно раздробить и класс жена будет все это реализовывать

>Я просто хочу утиную типизацию.


тогда крякай как утка. только шарп тут причем. в языках с такой типизацией свои правила.

>Ты создал целый интерфейс


да. я описал НУЖНЫЙ МНЕ контракт "сваритьборщ"

>засталвяешь строить монструозную хуйню


ничего тебя я не заставляю. я прошу предоставить КОГО УГОДНО кто сваритборщ и мне НЕ ХОЧЕТСЯ знать остальные детали кто это и откуда ты его взял.

> меня заставляешь сверху нахуевертить всякого


не заставляю ничего хуевертить. я прошу дать мне того кто выполнит МОЙ контракт (то есть сварит мне мой борщ)
а как там у тебя устроено - это твои личные проблемы. У меня вот адаптер крайне крайне редкий гость.

> случае тебе тип из TS и его утиная типизация не подходит?


1 это медленная херь
2 это не проверить толком на этапе компиляции. нужный класс может быть доступен далеко потом в рантайме из хуй знает какой сборки и точно так же получен через 10 слоев через которые проходит варщикборща
3 я уже говорил что может быть совпадение сигнатуры. И вместо того чтобы просто реализовать конкретный интерфейс - ты заставляешь меня писать адаптер из за 1 совпадающего метода.

>Интерфейсы шарпа - тяжелее, они вынуждают как раз всю муру тащить с наследованием


пункт 2 выше. мне совсем не улыбается потом в рантайме узнаь что оказывается сигнатура то не проходит. И вручную делать рефакторинг где IDE не может толком подсказать где менять методы не улыбается.

даже вот в питоне придумали протоколы (тот же интерфейс, но не нужно реализовывать), а ты со своим убогим тс все возишься
422 2932012
>>2932006
Да не умеют. Процессор всегда работает и гонит конвееер. Причём если процесс нормально не уведомит что он остановился то процессор никогда не переключится на другой процесс ведь ожидает когда процесс закончит дела. На одноядерном камне это буквально приводит к ступору всей системы наглухо, если смочь можно и на 2 ядерном также сделать.
Помнишь раньше зависание означало не что какая-то программа не отвечает, а что у тебя буквально компьютер перестал работать.
423 2932014
>>2932011
Ну на фронте реально непонятно зачем нужны все эти интерфейсы. Я посмотрю как он будет в игровом движке вызывать метод Update() у всех объектов сцены без интерфейса IGameObject
424 2932015
>>2932014
если ты пишешь на динам языке то тебе да -непонятно
но ты и пишешь там по другому
и платишь за это "рефакторинг жопный"

иначе ты пишешь на языке со стат типизацией и "рефакторинг кул, не нужно тесты писать ахуенно братан", но платишь за это если тебе нужно что то сильно переделать то у тебя просто не компилится них и 100 ошибок

тут 2 стула. лично я выбрал второй. и даже в питоне по максимуму записываю тайпхинты
а на жс я не пишу - я ж не говноед.
425 2932018
>>2932015
А теперь хочешь пушку? В Typescript вообще-то есть interface и он служит ровно тому что должен.
1) заставляет тебя реализовать его.
2) можно указать как параметр или поле где-то чтобы обозначить что вот тут требуется такое вот.
По сути тебе даётся гарантия что объект который ты получишь через параметр с типом интерфейса содержит поля и методы из него.

На этапе транспиляции в js все упоминания интерфейса будут удалены это чистый сахар.
426 2932020
>>2932018
и в чем пушка то
у тебя это опциональный инструмент для тех кто любит строгость (лично я ушел с руби (с его то выразительной мощью) на питон сменив лагерь на лагерь "строгие типы рулят" и помощь IDE лучше динамики)

в шарпе и прочих стат языках это БАЗА, а не костыль как ты там высказал. Они абсолютно необходимы чтобы все можно было доказать на этапе компиляции ( ну и рефакторинг видит все)
427 2932031
>>2932012
У нас начиная с 95 винды вытесняющая многозадачность.
Комп не виснет, когда виснет программа. Комп виснет, когда сдох супервайзор, который процессы переключает.
428 2932033
Типизация тайпскрипта вообще убогая. Ну, на самом деле, это виноват жабаскрипт, который, как php, фрактал плохого дизайна. Однако тайпсрипт это просто попытка соплями заклеить трещины, которые идут вниз до бесконечности.
Премия за самое уродство отдаётся перегрузке методов, которые на самом деле один и тот же метод, а разработчик имеет анальный зоопарк аргументов непонятных типов и содержаний.
429 2932065
чому if-else можно без скобок, а try-catch нельзя?
430 2932109
>>2932031
А процесс ОС у тебя наверное выполняется на каком-то другом месте, да? Не будет работать супервизор если все ядра процессора будут залочены зависшими процессами.
431 2932122
>>2932033

>Типизация тайпскрипта вообще убогая


Там её вообще нет. Просто статическая проверка, можно даже банально подавить эти ошибки и все.
432 2932144
>>2932065
if-else тоже нельзя. За пропущенные скобки будут пиздить палками
image.png52 Кб, 599x878
433 2932312
Любимые шарпушки, а можете объяснить, почему это завершается вообще? Разве изменения переменной bool visible для всех тредов? Я думал это как в жабе, может захардкодится значение и усе, вечный цикл.
image.png53 Кб, 838x751
434 2932319
>>2932312
Просто для примера в жебе - это вечный цикл.
435 2932375
>>2932312
может.
436 2932376
>>2932375
А в чем проблема тогда? Житу времени мало?
437 2932377
>>2932376
в тебе конечно.
438 2932378
>>2932377
Мило. А можешь тогда ты написать? Ну или помочь
439 2932381
>>2932378
зачем тебе помогать. ты жавист. тут жавистов не любят
440 2932385
>>2932381
Так я по поводу шарпа как бы спрашиваю. Тем более ты на котлине сам пишешь. Хули ебало корчишь?
441 2932389
>>2932385
так на котлине же. уже не жавист. смекаешь?
котлинисты в треде тут не срали
а вот жависты набегали и показывали свой "уровень развития"

откуда мне знать зачем ты спрашиваешь
можешь ты один из набегавших и просто ищешь очередной идиотский повод (ну у тех поводы были идиотскими)
442 2932400
>>2932389

>уже не жавист


Вот если б там была не жава виртуальная машина, я б еще понял. А так, по моему ты коупишь.

>откуда мне знать зачем ты спрашиваешь


Хочу понять в чем разница семантик.

>ищешь очередной идиотский повод


Не ищу.. Обещаю.
443 2932417
>>2925016
public class Rectangle {
static String x="10.54";
static double y = Double.parseDouble(x);

public static void main(String[] args) {

System.out.println(y);
}
}

//Мимо 45 летний дебил изучающий джаву.
2023-11-22 14 10 00.png13 Кб, 349x556
444 2932425
>>2932400

>не жава виртуальная машина


жвм конечно говно, но речь шла про сахар. жавист со своим волосатым лобком всех достал.

>Хочу понять в чем разница семантик.


да кто ж ее знает тонкости рантаймов. тем более они меняются.
твой пример не зависнет.
вот тебе другой пример из инета
в 4.8 зависнет
в 8.0 не зависнет
445 2932472
>>2932425
Пасиба, значет я прав был, что гарантий на видимость нет.
446 2932475
>>2932425

>жвм конечно говно


эта боль анального раба майкрософта
image.png139 Кб, 1198x845
447 2932479
>>2932312

>Разве изменения переменной bool visible для всех тредов


У тебя статическая переменная общая для всех объектов данного типа. Она глобальна в отношение всех потоков и объектов.
448 2932484
>>2932479
У вас по спеке все static еще и volatile?
image.png194 Кб, 1660x1055
449 2932488
>>2932425

>в 4.8 зависнет


но это же пиздешь
450 2932492
>>2932484

>volatile


это абсолютно логичное поведение. Статик поля общие для всего объявления типа с чего бы треды имели разные варианты типов? в С++ точно также, еще скажи "вау глобальные переменные доступны из любого места"
image.png6 Кб, 919x55
451 2932506
>>2932492
Нифига не логичное. Вот гарантии volatile из спеки жабы. По ней есть глобальная очередь синхронизации. Это как бы накладно по перфомансу, зачем просто бай дефолт это делать? И можно ссылочку на вашу спеку с гарантиями на static?
image.png32 Кб, 670x421
452 2932514
>>2932506
>>2932492
Еще из вашей нашел. Сразу скажу, что в cpp volatile значит другое. Зачем приплетать неясно.
453 2932527
>>2932475
о жавист лобковый нарисовался
сколько уже сказано про стирание типов и отстуствие структур, а он все строит из себя....да долбоеба он строит.

а зачем нужны структуры? ну для удобства и GC не напрягать
а что такое удобство?
дам пример. допустим, у нас имадж и мы с ним работаем напрямую с буфером (что в общем то всегда нужно ибо это самый быстрый способ).

что мы имеем в шарпе? смотрим пик 1. удобно обходим буфер и без копирования получаем удобную работу с пикселями

что мы имеем в жаве. Структур нет и мы не можем получить пиксель и работать с ним типа pixel.A
а как нам быть? а по старинке? как деды в плюсах делали - достаем инт и распаковываем вручную чтобы получить 3 цвета (пик 2). И потом таскаемся с этими переменными отдельно ибо мы НЕ МОЖЕМ запихать их в 1 объект - он даст аллокацию.

и это самый простой пример

>>2932488
ты думаешь я не проверял. проверял. я хз че там у тебя не виснет. может ты вообще в дебаге проверяешь.

>>2932514
там написана не совсем правда. компилятор поставит барьеры и будет стараться чтобы не кешировалось. Но гарантии не будет. (так уж устроены процессоры)
454 2932551
>>2932488
я тоже умею такие картинки рисовать
455 2932571
>>2932527
>>2932425

>в 4.8 зависнет


>в 8.0 не зависнет


Потому что так не пишут это искусственный пример. Добавь в while любое действие и не будет висеть даже в 4.8.

Сперва пишут какую-то хуйню высасоную из пальца, потом ОООО смотрите
456 2932577
Котоны, запилил микросервис. Нужно добавить аутентификацию. Мне развернутая система аутентификации вроде JWT особо не нужна - сервис будет работать за ВПН и принимать запросы из CRMки.
Я даже не особо хочу пилить базу данных для этого микросервиса (он просто служит как интегратор с парой разных внешних эндпоинтов и под капотом делает немного логики).

Есть варианты простой проверки токена, или пилить JWT? Можно ли запилить JWT без SQL, с какой-нибудь нереляционной легкой БД?
image.png54 Кб, 757x633
457 2932581
>>2932571
Ну вот тебе поведение. Если хуйнуть туда sync, то появяца барьеры. Жеба их так просто не убирает конечно, но теоретически и х снести может легко. По идее шарп делает ровно тоже самое. В каком месте это хуйня не совсем ясно, это база как бы.
458 2932582
>>2932551
Что рисовать ебанутый? Ты реально думаешь я сидел в фотошопе редактировал чтобы на двач залить?
Ей богу проще хуйню придумать чем поверить что в интернете пишут хуету?
459 2932584
>>2932581
Ей богу иди нахуй со своей джавой уже совершенно другое обсуждают
460 2932585
>>2932584
Ладно...(
Злюки вы.
461 2932586
>>2932585
Ты приперся в с# тред и начал затирать "а вот в джаве" на что ты рассчитывал?
image.png13 Кб, 966x118
462 2932587
>>2932586
У меня разрешение как бы есть.
463 2932589
>>2932577
Бамп вопросу.
464 2932590
>>2932571

>это искусственный пример


да. простой искусственный пример для того чтобы показать эффект.
искусственность кода никак не отрицает наличие показываемого эффекта
Эффект показан? дело сделано.

так что твой довод смыт в унитаз.

>>2932582
ты человек без юмора вижу. все, больше с тобой не говорю. Я потратил на тебя время, а у тебя жавизм в крови
465 2932592
>>2932590

>Эффект показан? дело сделано.


Какой эффект? Что если писать говнокод с пустыми циклами тебя может не понять компилятор?
466 2932595
>>2932592
что именно он там не поймет? выбросит цикл? нет не выбросит
эффект того что изменение переменной в другом потоке МОЖЕТ БЫТЬ проигнорировано
этот код показывает это? да

унитаз там
467 2932604
>>2932577
Мы ебём что ли какой тебе уровень конфигурируемости аутентификации нужен?
Самый простой способ: пропиши ключ в web.config и заставь клиента слать его на каждый запрос в виде параметра в url. Типа /somemethod?param1=val1&key=yoba_secret_key
468 2932612
>>2932604
Чет орнул как ключ доступа передаётся в открытом виде прям сука в урле
2023-11-22 15 26 27.png57 Кб, 1351x895
469 2932614
>>2932571
ну и пока был открыт редактор

>Добавь в while любое действие и не будет висеть даже в 4.8.


добавил. и даже сделал его не локальным чтобы никакой оптимизатор не смог его выбросить

висит аж бегом
470 2932616
>>2932614
Console.Write(); напиши и все.
471 2932621
>>2932616
зачем? я ж не имбецил
у класса есть четкая задача - посчитать количество итераций что он пройдет и сообщить мне
добавив вывод в консоль - я нахер сломаю саму сущность класса.
472 2932625
>>2932616
Там же в реализации лока... Мне почему-то кажеца, что ты тролль
473 2932628
На с# вообще есть жизнь? Уже несколько лет пишу на работе wpf приложения за скромную зп, но понимаю, что они нахуй не нужны и в случае чего ещё одну работу я просто не найду. Думал о бэке, но все вакансии на бэк шарп это портал в ад. Требования: 20 десятка технологий (даже не преувеличение), знание петухона, пыха, среакт, уверенное знание древнегреческого. ЗП: 80к
unity02.jpg24 Кб, 480x360
474 2932630
Как часто ASP.NET Core девелоперы в своей рабочей биографии пересечены с разработкой игр?
Допустим я устроюсь на работу дотнет девелопером, и при этом упомяну что игры разрабатываю в свободное время - меня ссаными тряпками не забросают?
475 2932632
>>2932630
Что за тупые вопросы
476 2932636
>>2932628

>ЗП: 80к


ну само знание это одно, а вот что делать нужно - другое
у меня такая зарплата на подработке, но там я работаю 3 часа в неделю.
477 2932670
>>2932614
https://sharplab.io/#v2:EYLgHgbALANALiAhgZwLYB8ACBmABJgJlwGEBYAKAG8LdbcAHAJwEsA3ROAU12AHteANrgD6AMwGIA5gG4adJmw7dmAOzgiAxrwCuazo1nk6uObQXsu+KLgCyACgCUp3NSPG6AdwAWzAdzsAhGISkk5u7i7OEbTCWrpcjADUiYbRuAC+zpnk2UA=
Разный кодеген на разных .NET:
x64 (.NET 7) - считывает _flag только перед циклом, цикл - бесконечный
FW x86 (4.8) - считывает _flag каждый раз
FW x64 (4.8) - считывает _flag только перед циклом, и в цикле каждый раз проверяет считанное (т.е. неизменённое) значение, т.е. цикл всё равно бесконечный
Вообще код должен считать и проверить _flag только перед циклом и больше его не проверять (т.е. сделать бесконечный цикл), т.к. "побочных эффектов" внутри цикла нет.

https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEBDAzgWwB8ABABgAJiBGAOgCUBXAOwwEt8YaBhCfAB1YAbGFADKIgG6swMXAG4AsAChlxAMyUATOS7KA3svJHyfKKwnYMMcsAgRB5APoAzQdgDmipcfKHjp80trYhRyAFkqAAoASj8jA28fYwB3AAsha0iAQhc3d1jEpPIEoqMAXzjyCsLfGoCLK0pQsM0YypLSgBMIBmBhcmxyAF5yUi9S8jSM8mzcjwKJjomjQYBqEeoaMMtUmlFWJkjsaPHS6p9z40r6oKbwtTaapaTu3v7BkbHKnyn+2dd5t9jM8JmsRgA5CB8I4nIHlSqXIyVADaYRgGFSEE6AEl+IJImiMVjcXxBAB5PhsCBMXA0SHYpiCA4HfIAXWuZga1lefWskOhPPeC2BcMoAHZRqd4UpqkA==
Но почему здесь (в M1()) он загружает _flag каждый раз - я хз. Может, код такой, потому что у него размер меньше. Ну и JIT, даже в .NET 8, неидеален.

А вообще, не поставил volatile или не используешь барьеры - сам себе злобный буратино.
478 2932676
>>2932630

>


>Как часто ASP.NET Core девелоперы в своей рабочей биографии пересечены с разработкой игр?


>Допустим я устроюсь на работу дотнет девелопером, и при этом упомяну что игры разрабатываю в свободное время - меня ссаными тряпками не забросают?



Я никогда не позволю в моей команде работать моральному уроду, который писал что-то на Unity3d. Это для меня красный флаг.
479 2932678
>>2932670
смотря что писал. может он писал шедевры вроде "русы против ящеров"
480 2932679
пик 1 .NET 4.8
пик 2 .NET 4.8 но в while есть Console.WriteLine();
пик 3 .NET 6 просто while

Мне лень, можете изучать
481 2932697
>>2932636

>у меня такая зарплата на подработке, но там я работаю 3 часа в неделю


5/2 в офисе
482 2932711
>>2932679
.NET 8 имеет другой IL код вот и все. Банально в ранних версиях нет защиты от говно кода типо пик2
483 2932721
>>2932697
сделаю предположение, что там требуется знания технологий да, но на уровне джуна конечно
а ты и де факто и будешь на старте изучения.
484 2932723
>>2932612
Конечно это нихера не секьюрно, но если у тебя сервис и клиент глубоко внутри анально огороженной зоны, то этого вполне достаточно.
485 2932734
>>2932628

>Думал о бэке, но все вакансии на бэк шарп это портал в ад. Требования: 20 десятка технологий (даже не преувеличение), знание петухона, пыха, среакт, уверенное знание древнегреческого. ЗП: 80к


Всю жизнь работаю бэк/фуллстек asp.net
Ни разу не требовали других бэк языков.
Никуда перекатываться не собираюсь.
486 2932740
Вопрос, у меня есть AddSingleton<IT,T> мне же не надо беспокоится что GC удалит объект который используется в рабочем приложении?
Объект может не использоваться какое то время но он критический важен.
487 2932741
>>2932734
ну он утрировал конечно

но факт есть факт - лучше быть бэком чем фуллстеком. Еб...сь сами со своим фронтендом.
488 2932742
>>2932734

>Всю жизнь работаю бэк/фуллстек asp.net


А что ещё знать нужно, кроме asp.net? Попробую поковырять что ли месяцок, может зайдёт
>>2932721

>сделаю предположение, что там требуется знания технологий да, но на уровне джуна конечно


Не, это всё на мидла типа. Я не знаю, может в ДС вакансии на бэк адекватные, но в провинции это вот такой пиздец.
489 2932743
>>2932740
его будет удерживать контейнер, а контейнер тоже будет удерживаться кем то.
так что не удалит.
490 2932752
>>2932628
Не знаю какие вакансии ты смотришь, но платят даже джунам по 120-140к
491 2932754
>>2932752
Ну это совсем мало. Я после чтения справки на сайте майкрософта пошел на собес, там обосрал джаву и сразу предложили 350к с авансом. Вопросов по си хэштегу даже не задавали.
show.png6 Кб, 270x120
492 2932757
>>2932754
но работаешь ты в итоге....на заводе? )

зы: зачем двач капчует сложные примеры если все равно влом считать в уме и кликаешь до простого
493 2932759
>>2932752
А в губы целуют? Породниться предлагают?
494 2932761
>>2932759
Я не знаю о чем вы. Я 3 года назад на 100к после уника пришел.
495 2932787
>>2932761
так то времена были другие. ковиды всякие, удаленки.
мне работа не нужна, но зашел в гугл глянул вакансии - и печально как то если ты не москва или спб

ну да, можно из дома щас у некоторых, но сложно оценить сколько получит именно джун.
496 2932841
>>2932711
Не очень понятно, почему она вообще должна быть. Это оптимизация и она работает.
497 2932906
>>2932577
>>2932723

Я, короче, вижу два варианта.

Basic Authentication (креды передаются в хедерах запроса, можно зашифровать, но я всё равно оставил только https).
Как здесь: https://dotnettutorials.net/lesson/web-api-basic-authentication/

JWT, как здесь https://www.youtube.com/watch?app=desktop&v=mgeuh8k3I4g&ab_channel=NickChapsas

Для моей задачи за глаза хватит Basic Authentication, но JWT написать будет поинтереснее лично для себя.
498 2933055
Где должны лежать контроллеры, если структура проекта:

MyApp.Application
MyApp.Bootstrap
MyApp.Domain
MyApp.Infrastructure

Типа кроме Bootstrap - все библиотеки. Bootstrap - WebApi - проект.

Типа я думаю - в Infrastructure. Ведь это же инфраструктурная логика, приложению же вроде как должно быть пофиг - через HTTP запрос получили, чи через шину или GRPC.
Но.
1. Чтобы контроллеры нормально работали - приходится явно загружать сборку через Assembly.Load
2. Сваггер - настраивается сложнее(потому что сваггер - таки в Bootstrap)
3. Если сваггер и всю эту настройку перенасить в Infrastructure - смысл вроде теряется совсем.
499 2933084
>>2933055

>Bootstrap - WebApi - проект.


Тут и должны
500 2933090
>>2933084
А почему?
Лично мне вот не оч нравится, что WebApi - собирает все необходимое. И приходится - всю инфраструктуру делать public. Сразу возникает мысль - а нафига я тогда это все делаю, если могу напрямую из Application дергать нужное мне и не придумывать какие-то там абстракции и прочее.
Ну да ладно.
501 2933097
>>2933055
Интерфейс - это слой сам по себе. Ты не можешь переиспользовать контроллеры в другом виде интерфейса: консольке, десктоп гуе, очереди сообщений и даже в сервер-сайд рендеринг веб-сайте, значит они являются интегральной частью твоего веб апи интерфейса, а значит им место в веб апи проекте.
502 2933144
>>2933090
Потому что контроллер это ВЕБ АПИ не АПИ а именно прям конкретно веб. Это конечная точка, там даже базовые классы из дотНЕТ реализуют HTTP протокол и все что надо.

Если ты хочешь чтобы у тебя были доступны какие другие виды взаимодействия то ты должен написать интерфейс, не IZalupa а взаимодействия, с тем чем хочешь.

По идее у тебя должен быть слой абстракции тогда в виде интерфейсов через которые ты запускаешь бизнес логику. Просто инжектим где надо и пользуемся.
503 2933224
>>2932630

>Как часто ASP.NET Core девелоперы в своей рабочей биографии пересечены с разработкой игр?


Практически никогда.
505 2933312
>>2933260
У майкрософта в коде зоопарк на самом деле.
image.png214 Кб, 480x360
506 2933481
Кстати, смех смехом, а стоит ли поучиться разработке на Unity для души, или Unity бесперспективно умер после скандала, и лучше сразу идти в UE?
507 2933563
>>2928144
Ты это буквально я. Как давно в впф, брат?
508 2933660
>>2933481
Учи конечно
Сделаешь игру "русы против жавистов"
509 2933666
>>2933563
Всю впфную жизнь.
1674596908718.png47 Кб, 1052x433
510 2933706
Как вы именуете роуты?
Используете множественное число или единственное?
Добавляете ли глаголы или действие определяете исключительно из типа запроса?

Пример на пике.
Какой вариант предпочтительнее?
511 2933787
512 2933807
>>2933787
>>2933706
Решил сказать почему.
В v1 Get, Delete и Patch имеют одинаковые сигнатуры, ну то есть если ты на клиенте случайно забыл сменить метод то можешь очень весело сосать.
Прикинь ахуено было бы вместо get(userId) был бы вызван delete(userId) прям на проде. Прям для абсолютно всех пользователей исходя из логики работы любой системы.

АПИ должно быть таким чтобы нельзя было случайно проебаться и получить 200 код в ответ.
513 2934059
>>2933706
V2 но имена сущностей во множественном числе.
514 2934061
>>2933481
>>2933481
Для души лучше годот или какой-нибудь еще немейнстримный движок или самому что-нибудь навелосипедить.
В геймдеве интересно только в трех случаях:
1) когда разбираешься в реализации каких-либо механик
2) когда разбираешься в каких-либо инструментах (тот же движок или как он устроен)
3) когда делаешь первые 30% какой-либо игры

Все остальное скучнейшая залупа. Для первых двух пунктов - юнити и UE слишком унылы, а для третьего вообще похуй на чем.
515 2934096
>>2933706
Делаю так:
[POST] /api/{serviceName}

{
// тело запроса
}

Брат жив. Зависимость есть.
516 2934127
Никогда не работал с микросервисами, есть какие ресурсы для изучения? Опыта вот вообще ноль, в общих чертах понимаю, но саму реализацию не совсем
517 2934189
>>2934127
И не надо. Эти абсолютно всегда антипаттерн. Я никогда не видел реальные микросервисы. Зато много раз видел как есть 20+ микрозалуп которые имеют бешеную связанность между собой и по сути это монолит, в 100% случаев есть сервис оркестрации который для внешних пользователей и будет АПИ.

Плюс я лучше нормально напишу хороший монолит чем буду через HTTP или какие-то сервисы очередей передавать данные между частями системы.
518 2934243
>>2934127
Ну.
Смотри. Примерно так это выглядит. https://github.com/dotnet/eShop
Из почитать - куча книг есть. Можешь майковские статьи почитать.
На деле - проблема в том, что крутанские крутаны - не особо делятся внутренностями, в результате - у каждого свой зоопарк. А мелочь всякую на это подсаживают, чтобы продавать ажуру и AWS.

>>2934189
И как ты будешь монолит масштабировать, няша?
Вот у вас затык в одном конкретном месте. Допустим - из-за возросшего количества вообщений - воркер не успевает нормально обрабатывать очередь.
Что ты делаешь в микросервесной архитектуре - ты запускаешь второго, третьего, десятого воркера, разносишь из географически и живешь нормально.
Что ты делаешь в монолите - ты либо лезешь в залупу, либо бибу сосешь и страдаешь с тем, что тебе надо ВЕСЬ МОНОЛИТ разворачивать, либо - ищешь магов каких-то, которые тебе оптимизацию прям нихуевую сделают(а потом - все равно сосешь бибу, либо режешь на микросервисы).
А если упадет что-то. Че у тебя будет в микросервисном случае? Да ничего особого, все остальные куски приложения работают, после того как хелсчек не получишь - перезапустишь, если не перезапустится через какое-то время - отправим девопсу страшное письмо, пусть разбирается. Но все остальные части системы - продолжают работать.
С монолитом - у тебя упал монолит - у тебя все приложение нахуй недоступно, беги, нахуй, пондимать резервные сервера, беги трубить тревогу, все пропало, спасайся кто может. Ну и куча сложностей вокруг резервных серверов, которые надо всегда держать про запас.

Не. Я конечно понимаю, что если просто хуячить микросервисы, потому что модно-молодежно, не стоит. Если у вас - 100 пользователей, и в среднем система обрабатывает 200 запросов в сутки - то нахуй вам эти микросервисы не всрались. Просто как-бы. У кого-то так, а у кого-то час простоя - стоит довольно охуительных денег и
519 2934505
>>2931537
ебанутый
520 2934511
>>2931720
ну и зачем ты интерфейс написал?
521 2934544
>>2933807

>Решил сказать почему.


>В v1 Get, Delete и Patch имеют одинаковые сигнатуры, ну то есть если ты на клиенте случайно забыл сменить метод то можешь очень весело сосать.


>Прикинь ахуено было бы вместо get(userId) был бы вызван delete(userId) прям на проде. Прям для абсолютно всех пользователей исходя из логики работы любой системы.



>АПИ должно быть таким чтобы нельзя было случайно проебаться и получить 200 код в ответ.


Ну что это за цирк ёбаный, метод забыл сменить? Так можно и url забыть сменить.
И что за хуйня про продакшен? Такие баги ловятся при тестировании. Ты без тестирования релизить собираешься?
Плюс, если ссышься, напиши тесты.
522 2934558
>>2934544

>Ну что это за цирк ёбаный, метод забыл сменить? Так можно и url забыть сменить.


>И что за хуйня про продакшен?


Берешь копипаст делаешь и забываешь отредачить, особенно когда раз 40 это делаешь.
Часто пишешь тесты на вызов АПИ? Как данные мокаешь для этого?

Если ты забыл сменить урл то у тебя происходит ошибка потому что DELETE /item/id не существует 404.

Да спокойно на прод че угодно даже с тестами уходит, никто не запускает полный набор тестов перед каждым релизом, у нас их может по 2 в день быть если задачи быстро делаются. Полный регресс раз в месяц происходит.
Лучше на уровне архитектуры устранять возможность что-то неправильно сделать чем с умным ебалом рассуждать что вот надо было лучше ревью провести или тесты полные прогнать. Закон Мерфи нахуй, если у тебя одинаковые урлы для GET и DELETE то обязательно будет космический проеб и упаси тебя бог чтобы ваши админы делали бэкапы базы или у вас было мягкое удаление.
.png92 Кб, 675x653
523 2934560
>>2931627
Ну. Пока я постил всякую хуйню которая легко гуглится и не требует RFC читать - я тоже немного припустил.
А потом - прикриплейд.
524 2934568
>>2934560
Да эта хуйня тупо тебе выжимку из интернета делает причём первых трех ссылок гугла.
Я пытался найти редкие запросы не осилив гугл и копилот маек мне выдал буквально цитаты из того что я читал и пояснения к ним.

Спасибо нахуй я наверное уже заебался гулить если решил спросить сетку.
525 2934574
public static int Get()
{
int i = 0;
i++;
return i;
}
Всегда ли будет возвращено 1 если метод используют много потоков? Не будет ли такова что один поток сделает +1 а другой поток в это время сделает var i = 0; и первый поток вернет 0?
526 2934614
>>2934574
Ну. Давай думать.

Поток - имеет свой стек и контекст.
Поток - встречает метод который надо выполнить
Поток - сохраняет локальные переменные, всякую остальную залупу и текущее положение в свой стек
Поток - берет указатель на метод
Поток - прыгает в метод на который указывает указатель
Поток - заходит в метод
Поток - сохраняет в стек или что-то эмулирующее регистры значение i
Поток - увеличивает значение i
Поток - кладет в регистр или что-то их в .NET эмулирует значение которое возвращается
Поток - очищает стек от того что накидал в процессе прохода по методу
Поток - прыгает по адресу на вершине стека в то место с которого заходил в метод

Поток - выходит

В какой момент - может измениться значение i из другого потока?
527 2934615
>>2934560
А можно пояснить для маслят неопытных? Можно без особых подробностей.
На пикрилейтед - полная хуита? Или что?
528 2934624
>>2934615
На прикриплейд - буквально что-то в духе
я спросил бы анона: "Как познакомиться с девочкой", а он мне: "Просто берешь и без задней мысли - знакомишься"

Типа. Ну охуеть. Ответил. Спасибо. Пойду с этими знаниями пикапмастером становиться.

Алиса - лучше ответила кста. Но тоже хуевато.
529 2934628
>>2934624

>я спросил бы анона: "Как познакомиться с девочкой"


"Чтобы познакомиться с девочкой нужно говорить" вот так примерно.

Он дал абсолютно верный ответ как кодируется имя метода, но абсолютно бесполезный.
530 2934635
>>2934574
Запусти приложение пару раз с 3 потокам которые выводят результаты в консоли. Все на этом как бы эксперимент завершен.
Вообще в статик методах которые можно использовать в многопотоке принято делать синхронизацию потоков.

Снова принесли говнокод с вопросами.
531 2934638
>>2934635

> Вообще в статик методах которые можно использовать в многопотоке принято делать синхронизацию потоков.


Но тут она не нужна.
Если бы он обращался к разделяемым ресурсам - да. А тут - нахуя?
532 2934646
>>2934638
А бля она локальная, спать хочу уже надо идти.

В любом случае я собеседование прерываю обычно на таких вопросах. Давайте обсудим какие-то реальные вещи, а не залупу конскую. Может у вас есть какие-то примеры из работы? Ах бля у вас вообще нет работы с потоками акромя вызывать чтения файла? Так зачем вы мне мозги ебете.
533 2934665
>>2934574
Как у тебя вообще возник этот вопрос..?
534 2934666
>>2934665
Ну это скорее не вопрос а проверка моих знаний. Часто задаю вопросы на которые уже знаю ответ но что бы подтвердить его нужно другое мнение.
image.png31 Кб, 548x441
535 2934668
>>2934666
И как именно ты бы объяснил почему же результат гарантировано будет 1?
вообще можно что-то интереснее придумать. Вот на пике гарантировано будет усе ок. Почему?
image.png28 Кб, 474x507
536 2934671
>>2934668
Ладно, проебался. Сделал 2 чтения.
537 2934673
>>2934671
Ну здесь же не статик метод, в конструкторе передаем 1 и всегда в многопотоке будет 1
538 2934674
>>2934673
В чем проблема экземпляр разнести по нескольким потокам. Че вы так к этому стейтик прицепились? Буквально практически нихуя не значит для многопоточки.
539 2934676
>>2934674
В душе не ебу что такое стейтик.
Я пишу код по наитию.
Наитие мне подсказывает что на 1 экземпляре запустить 10000 раз метод в многопотоке результат будет один и тот же.
540 2934722
Нахуя придумали Random.GetItems ?
Или я его неправильно использую?
Вообще есть список этой всей сладкой ебалы которая медленнее простыхне простых решений ? Я бы прочитал и никогда их не использовал.
541 2934732
>>2934722

> Или я его неправильно использую?


Это.
Аллоцируй массив в setup, а не в теле бенчмарка.
542 2934736
>>2934732
>>2934732
В чем профит ? И там и там создаётся лист
543 2934738
>>2934736

Сейчас ты тестируешь не рандом, а создание массива
image.png365 Кб, 500x500
544 2934755
>>2934738
>>2934738
>>2934738
Да один хуй получается новая приблуда гораздо медленнее
545 2934815
>>2934722
Вообще общпя реализация рэндом гетитемс должна выдавать элементы без повторений. Вот реализуй такой "олд стиль" в нативе и сравнивай.
546 2934835
>>2934615

>На пикрилейтед - полная хуита? Или что?


Все эти нейросети-помощники тренируются на ПРИМЕРАХ, и чем их больше, тем точнее ответ.

Совершенно очевидно, что на платиновые вопросы, ответы на которые содержатся прям в первой ссылке гугла, у нейронки тоже есть ответ.

Но если тебя интересует какой-то редкий случай и не хочется перелопачивать весь интернет ради одной статьи, то тебе не по адресу т.к. нейросеть в таких случаях будет нести хуйню, либо что-то обобщенное.
547 2934843
>>2934676

>В душе не ебу что такое стейтик.


>Я пишу код по наитию.


Бля эти люди среди нас.
548 2934884
>>2934574
всегда
локальные переменные всегда локальные для потока
так что хоть триллион потоков - результат будет один
549 2934925
Как в студии автоматом закомментить вот так

/
многострочный
коммент
/

вместо
//многострочный
//коммент

Зачем студия ведет себя, словно c# это бейсик, не поддерживающий комментирование блоком?
2023-11-2412-47-15.png1 Кб, 150x92
550 2934927
>>2934925
Звездочки проебались
551 2934935
>>2934925
потому что комментированние блоком фуфло
хочешь - делай вручную
552 2935148
>>2934925
Ctrl+Shift+/
553 2936087
Когда посетителям этого треда завезут многопоточность без оверхеда на вызов системных потоков, чтобы они перестали брызгать желчью от злости и забегать в бессильной злобе в джаватред?
554 2936115
>>2936087
Нахуй не нужо. Джава мертвый язык, я не знаю проектов где кто-то начал его с 0 на ней, кроме двух говно компаний где после ебли заказчик пришёл к нам с просьбой переписать проект.
555 2936130
>>2936115
Да мы все и так давно знали что шарпомухам подходы к разработке белых людей нинужны. Ты на вопрос ответь.
556 2936154
>>2936115
Нафиг ты ему отвечаешь
У жавадебила обострение и галлюцинации что кто к нему в тред забегает
Ни одного шарписта в мире не волнует оверхед асинка
.png20 Кб, 297x609
557 2937226
Чет мне вот эта структура проекта не нравится.
Начинал полгода назад. Казалось - так и надо.
Сейчас решил вернуться, ведь скоро отпуск - надо чего-нибудь намутить. И смотрю и кажется говном каким-то.
558 2937496
>>2937226
Хранить имплементации в одной куче с интерфейсами как-то по гейски. Ну а пихать туда же контракты, вообще по пидорски.
559 2937734
>>2937226
ну все. очередная стадия. спасет только завод.
image.png30 Кб, 298x779
560 2938755
>>2937226
А как вам моя структура?
Делал по наитию, пытался максимально все по файлам разбить, но как обычно, в конце понял что есть вещи которые можно было сделать лучше.
3 раз переписывать не буду.
561 2939842
>>2938755
Нууууу.
Я вот со своей расстроился потому что у меня возникла какая фигня в голове: А зачем я собственно разбиваю по: Сервис, модель вот это вот. Почему не разбивать по фичам? Типа: Уаправление пользователями - все что с ними связано - там. Авторизация - все эти JWT и прочее - там. Ну и в таком духе. Чтобы если надо - можно было выдрать кусок и копипастой сразу фичу впихнуть куда надо. Проблема только с "общими" штуками, которые не специфичны для фичи, но фича за них цепляется. Единственное что вижу - делать для фичи "порты", в которые сверху кто-то эти обще вещи будет пробрасывать, а фича на основе вот этой внешней логики - типа расширяться.
Ну а у тебя на вид - классическая структура с разделением по слоям. Только контексты - непонятно чому в модели лежат, их бы в DAL положить.
562 2940114
На работе заставили пересесть со стека: MS SQL Server, .NET, Angular, gRPC. На PGSql, .NET, Vue3, RabbitMQ, Docker.
Я теряю в своей стоимости на рынке или не?
Просто ангуляр - мне нравился больше чем Vue. MSSQL - тоже больше чем PGSql нравился. Вот реббит - да, прикольная фигня, но я до этого и с gRPC нормально обходился, да и удобнее было с ним, ведь клиент и сервер генерировались по протобафу, а тут приходится как додик - свой велосипед использовать, чтобы контракты сообщений соблюдались.
В общем. Поясните - надо ли мне рыпаться и пытаться в свободное время утраченные знания восстанавливать, или то что сейчас использую - тоже оплачивается нормально на рынку?
image.png36 Кб, 1040x535
563 2940143
>>2940114

>Я теряю в своей стоимости на рынке или не?


На каком рынке?

>Просто ангуляр - мне нравился больше чем Vue.


Что то, что это хуйня. Вот если бы ты на реакт перешел, то тогда чуть-чуть бы выйграл. А так, ты уже проиграл в том, что тебе приходится фулстеком быть.

>MSSQL - тоже больше чем PGSql нравился.


см пик. Плюс знание двух СУБД всегда лучше чем одной.

>Поясните - надо ли мне рыпаться и пытаться в свободное время утраченные знания восстанавливать, или то что сейчас использую - тоже оплачивается нормально на рынку?


Нормально, оплачивается. А еще больше оплачивается опыт по переводу сервисов с одного стека на другой.
В РФ, например, сейчас кейсы пересадки "Win -> Linux+Docker", "MSSQL -> PGSql", "Файлы -> Очереди" один из самых распространенных на дотнете.
564 2940178
>>2940114
Вот только я не понял, какого хуя у вас RabbitMq и GRPC противопоставляются. Они как бы для разных вещей. Rabbit - для асинхронного взаимодействия между сервисами, GRPC для синхронного, и они вполне могут в одном сервисе уживаться.
565 2940414
>>2938755
В проекте не видно экстеншенов для IServiceCollection, соответственно у тебя все сервисы собираются в Program.cs, соответственнно там срач. Нехорошо.
566 2940680
>>2940414
Ну делал как в гайде
builder.Services.AddSingleton<IMyDependency, MyDependency>();
567 2940900
>>2940680

>как в гайде


В "гайдах" обычно показывают сам принцип того как это работает, но не обясняют как сделать хорошо.
Вот эти вот все AddSinglton, AddScoped и всю прочую дребедень с помощью которой ты добавляешь сервисы в контейнер и конфигурируешь приложение, принято выносить в отдельные расширения. Чтобы стартовый класс не был засран, плюс чтобы можно было все это разнести по слоям и/или подпроектам.
568 2940918
Продолжаю писать программу для рисования, и столкнулся с очередной проблемой. У меня есть интерфейс IGraphicObject, который представляет контракт для всех объектов обычные линии, кривые безье, сплайны, геометрические фигуры и тд, рисуемых на холсте, а именно свойства Bounds, Brush, и метод Draw. И встал вопрос как эти объекты грамотно создавать, сейчас у меня километровые методы с кучей свичей тот еще говнокод конечно. Просто передать массив точек и отрисовать его не выйдет, так как при рисовании длинных линий при добавлении точки каждый раз все перерисовывать заново это пиздец полный пробовал уже. То есть объект должен хранить промежуточное состояние на своем внутреннем холсте и при добавлении точки просто его дорисовывать. При это после рисования оно должно (опционально) сбрасываться, чтобы в памяти не хранился миллион битмапов.
Как это красиво сделать? Пока думаю добавить в интерфейс IGraphicObject метод, который будет возвращаться IGraphicObjectFactory, где и будет происходить промежуточная отрисовка. Но это как по мне будет лишнее переусложнение.
569 2941638
>>2940918
Заведи кота же
.png154 Кб, 827x700
570 2941670
>>2940918
ХЗ чего тебе надо, но я бы сделал так. Лол.
571 2941674
>>2941670
Ебать, это прям god object.
>>2940918
Помню на жабе подобное делал https://pastebin.com/deGpeBtY
Думаю сможешь на шарп перевести... А мне лееень. Но тут проблемы есть какие-то, но какие тоже не помню, давно делал
572 2941708
>>2941670
ему нужно завести кота
конечно его задаче это не поможет
но котик - святое
573 2942256
>>2941670
Впервые вижу такую инициализацию словаря
574 2943043
Да блять, как с этими ебаными енамами работать то? Есть бд postgres, через scaffold-db сгенерировал сущности для enityframework (database first), но enum'ы делал сам, тк scaffold их игнорирует.
В постгре значения енамов записаны с нижним регистром, но в asp.net указаны по-обычному.

Сопоставление указал, написал контроллеры, вроде всё ок.

И в итоге это говно просто не выводилось. Сначала выдавало сообщение, что сопоставить значения не может, потом что такого значения enum в бд нет. Написал ебанутый конвертер с которым даже что-то заработало, но тут другая проблема вылезла - создать новую запись не получалось.

Я и с атрибутами игрался, EnumMember указывал, разные сопоставления пробовал (и даже без него лол), но сука нихуя не работает.

В интернете из похожего нашёл только то, что люди изменяли значения енамов в самой базе данных на верхний регистр.

Но блять, должно же быть решение, что бы по-человечески связывать енамы из entity framework со значениями из бд. Как это сделать? В чём я проебался?
575 2943052
>>2943043

> В чём я проебался?


В том что решил хранить в БД енамы

Делай как человек:

class MyDictionray
{
public int Id { get; set; }
public string text { get; set; }
}

Заполняй - из своего enum'а,
Почему так лучше? Потому что так ты снизишь вероятность рассинхрона базы и своего enum'а. ЕФ - ну никак не будет следить за тем, что ты решил пару элементов в енуме поменять, передвинуть местами, добавить, удалить. В результате - ты такой спокойно себе в приложении чет добавил, а потом - не вдупляешь, что за залупа тебе из базы лезет.

Если не хочется на каждый енум создавать таблицу - можешь поэкономить и сделать всего 2 таблицы: тип и собственно запись.
576 2943147
>>2934558
Да ты ебанулся. Это какой-то феерический манки кодинг, когда ты не запускаешь код, который поменял, и манки тестинг, когда никто не тестирует даже в общем виде создание/изменение/удаление сущности нового/изменённого функционала.
Я сменил 6-7 рабочих мест, и нигде такой пиздец не допускался.
Удивительно, что у вас вообще хоть что-то работает с таким подходом.
577 2943161
>>2943043
Храни в виде строки. Я не знаю, как там в ЕФ маппинг настраивается, но это может проще работать.
Или вообще лучше проходи на mongodb.

>>2943052
Все, кто хранят значения enum в виде чисел, должны гореть в аду.
578 2943249
>>2943161

>Все, кто хранят значения enum в виде чисел, должны гореть в аду.


все кто хранят енум как строки, должны гореть в аду
переименуешь енум и все сломается
579 2943260
>>2943161

> Все, кто хранят значения enum в виде чисел, должны гореть в аду.


Это вообще тут при чем?
enum обычно используется там, где в домене определен какой-то набор константных значений.
Ну так вот. Хряня хоть в числе, хоть в строке - ты получаешь ситуацию, что у тебя рассинхрон БД и приложения. Начиная от того что ты опечатку сделал, заканчивая тем, что что-то добавилось в домен, что-то убавилось.
И что ты получишь, даже если ты в строке хранил? Ты получишь ситуацию, когда у тебя в таблице значения, которые теперь приложение обработать не в состоянии, потому что - ты поменял на уровне приложения что-то, миграцию забыл сделать, все, пиздарики, страдай.

Когда у тебя значения енумов - в таблице отдельной - ты автоматом получаешь и синхронизацию с приложением(ты же как нормальный человек - засеиваешь БД при запуске, проверяшь, что бд не корапченая и т.д.), ты получаешь проставление нужных значений, если у тебя домен поменялся, ты получаешь автоматически - корректировку енума, если ты опечатался или теперь в домене решили изменить название для того же элемента перечисления, оставив всю остальную логику.

Короче. Нормальный подход - то что должно быть енумом - должно быть отдельной таблицей. Если жмемся на отдельную таблицу для каждого енума - делаем одну супер-таблицу, в которой все значения енумов лежат(тогда правда ебатория с тем, чтобы таблицы, которые пользуют эти значения - не отражали доменную область, потому что из-за такого вот жмотства - ты вынужден городить либо триггеры, либо на уровне приложения следить постоянно, а это будет проблематично, если базой пользуются разные приложения)
580 2943402
>>2943260
Во-первых, у тебя такой же рассинхрон может быть по любому чиху. Добавил поле, убрал поле, сменил тип с дабла на инт.
Если ты каждый раз при апгрейде засидливаешь все енамы в бд заново, то можешь легко точно так же получить семантический рассинхрон. Меняешь местами два названия енамов, и всё, у тебя данные в БД некорректны.
Только это ещё хуже будет: если я в коде значение енама переименовал, то при попытке получения несуществующих данных будет ошибка, то есть есть шанс поймать это на этапе тестирования, а в твоём случае ты перестановку никак не поймаешь.

Если прям хочется иметь гарантию существующих значений енама в таблице данных, так, ладно, заведи свою таблицу енамов, только сделай ключом не инт/гуид, а строку. Можно её единственным столбцом и сделать.

А претензия к числовым значениям в БД у меня в том, что когда ты хочешь посмотреть, что у тебя за данные хранятся, надо либо смотреть в шпаргалку, либо каждый раз писать джойны.

>>2943249

>переименуешь енум и все сломается


А ты переставишь два значения местами и кирдык, см. выше сценарий.
581 2943407
>>2943402

> А претензия к числовым значениям в БД у меня в том, что когда ты хочешь посмотреть, что у тебя за данные хранятся, надо либо смотреть в шпаргалку, либо каждый раз писать джойны.


Ты из какого года капчуешь? Даже хейдискуль - умеет отображать что там за внешним ключем лежит, не говоря уже про всякие навикаты и прочие просмотрщики содержимого.
Чи ты как дед - ручками пишешь: Select Zalupa ftom Hui?
582 2943430
>>2943043
Если кому-то не было похуй на енумы, то я вроде их решил.
HasPostgresEnum не поддерживает передачу массива поэтому пришлось использовать атрибут PgName в коде свойств самого енама, что бы явно сопоставить значения из ef со значениями из бд. В коде Program.cs сопоставление через NpgsqlDataSource.
Выводится всё теперь корректно, а от всякого конвертирования вовсе удалось избавиться.

Непонятно правда, какого хулео в документации вообще про все эти нюансы не указано https://www.npgsql.org/efcore/mapping/enum.html?tabs=with-datasource

Пик1 - Енам в EF
Пик2 - Указываю его в контексте данных
Пик3 - У модели с енамом не использую никакого конвертирования, только указываю свойства
Пик4 - Маппинг в Program.cs
583 2943779
Аноны, хочу внутри контрола добавить команду, как это сделано например в слайдере для всяких передвижений ползунков по хоткею.

В классе TestControl, наследуемом от UserControl, я создаю RoutedCommand и привязываю ее к методу OnExecuteMyCommand:

MyCommand = new RoutedCommand(
. . . . . . . . "MyCommand",
. . . . . . . . typeof(TestControl),
. . . . . . . . new InputGestureCollection() { new KeyGesture(Key.F, ModifierKeys.Control) });

CommandBindings.Add(new CommandBinding(MyCommand, OnExecuteMyCommand));


Но хоткей Ctrl + F не запускает команду. Если я наследую какой нибудь Button, то все срабатывает. Сначала я думал что дело в отсутствии реализации интерфейса ICommandSource, но дело как будто бы в отсутствии фокуса. Если я опять же буду наследоваться от UserControl, но кнопку добавлю в качестве контента этого контрола, то хоткей срабатывает. Пытался поставить свойство Focused = true, но не помогло.

В чем дело?
584 2943788
>>2943779
вообще то фокус и фокус клавиатуры - разные вещи
2023-11-3014-56-21.png11 Кб, 740x141
585 2943804
>>2943788
Это?
image.png129 Кб, 1373x822
586 2943915
>>2940918
Короче захуярил такую архитектуру. Рейт
587 2944050
>>2940918
Не понял сути проблемы. У тебя объект уже хранит в себе данные о точках. Что мешает добавить методы AddPoints? RemovePoints, InsertPoints, UpdatePoints как это делается во всех остальных рисовальщиках?

Я делал именно так.
588 2944096
>>2944050
Суть в том, анон, что если хранить только точки, то линию нужно будет перерисовывать при каждом их добавлении. Поэтому объект во время рисования должен хранить внутри себя битмап, на котором будет дорисовывать линию по мере появления точек. И уже этот битмап будет отрисовываться на холсте, видимом пользователям. А после окончания рисования и отрисовки финальной версии на постоянном холсте, он должен этот внутренний битмап очистить, чтобы память не занимал.
589 2944266
>>2944096

>то линию нужно будет перерисовывать при каждом их добавлении


Нет, ты ДОрисовываешь линию от предыдущего сегмента.

Но я не знаю как устроена технология отрисовки. Если это вектор, то рисуется только редактируемый сегмент, остальные сегменты остаются нетронутыми. Если это растр, то там вроде вообще нет как таковых данных о точках, кроме записи в историю действий.
Это первое.

А второе — то, что при масштабировании и скроллинге холста тебе полюбасу все видимое добро перерисовывать. В этом собсно вся и загвоздка всех этих редакторов, которые при 30 слоях формата 30 000 пикселей начинают лагать.
590 2944299
>>2944266

> Нет, ты ДОрисовываешь линию от предыдущего сегмента.


Нет, анон, если делать так, то линия будет с острыми углами, я рисую используя сплайн, для получения гладкой кривой. С ним я сначала дорисовываю линию, потом как появится новая точка стираю ее и перерисовываю с интерполированной.
591 2944310
>>2944299
Но это все не суть важно, главное тут то, что в процессе рисования холст будет постоянно изменяться, например если я рисую прямую линию или квадрат, то при каждом движении мыши нужно будет очищать холст и заново отрисовывать фигуру. И чтобы это не прописывать в коде я и хочу всю логику инкапсулировать в IGraphicObjectBuilder
2023-11-3018-57-54.png31 Кб, 1091x298
592 2944330
>>2944299

> то линия будет с острыми углами, я рисую используя сплайн


Чел ... ну я подзабыл, что перерисовываются соседние сплайны, но у тебя никогда не будет перерисовываться что-то дальше соседних. Даже в режиме редактирования одной ноды, по факту должно активироваться указанная нода + две соседние.
593 2944347
>>2944310
А ты смотрел как устроен Canvas в WPF?
594 2944349
>>2944330

> Чел ... ну я подзабыл, что перерисовываются соседние сплайны, но у тебя никогда не будет перерисовываться что-то дальше соседних


Как я уже сказал, рисование линиями не ограничивается. Сплайны к слову тоже есть разные, для кубического нужно перерисовывать всю линию.
595 2944358
>>2944349

>для кубического нужно перерисовывать всю линию


Все что изменяется должно перерисовываться.

>всю логику инкапсулировать в IGraphicObjectBuilder


А что если один графический элемент идет поверх другого? Как твой IGraphicObjectBuilder будет знать о других объектах?
Я возможно ошибаюсь, но холст занимается отрисовкой, а не контент холста.
596 2944371
>>2944358

>Я возможно ошибаюсь, но холст занимается отрисовкой, а не контент холста.



Хотя я тут поразмыслил. Допустим холст отвечает за перерисовку. При добавлении контента в холст, он подписывается на изменение геометрии добавляемого контента (к примеру это будет VectorFigure).

В этом VectorFigure есть метод AddPoint. Далее этот метод вызывает событие изменения OnGeometryChanged, на которое реагирует холст.

Тут возникает вопрос, "а шо, холст должен хранить в себе все возможные методы отрисовки различных элементов?". Хороший вопрос.

Возможно ты прав. Надо смотреть как устроен Canvas в WPF.
597 2944374
>>2944371
Я только не понимаю, почему в WPF несколько контролов не могут одновременно держать один и тот же экземпляр графического элемента.
598 2944391
>>2944358
А зачем ему об этом знать? Объектами управляет сам холст, и он отрисовывает IGraphicObjectBuilder поверх предыдущего рисунка. Единственное, если нужно будет реализовать размытие или пиксилизацию или штамп, или ещё что-то, пиздец, то да, что-то нужно будет придумывать. Но это, имхо, уже больше к кистям относится, нежели к графическим объектам. Можно при начале рисования передавать контекст холста кистям, но если кисти он не нужен, то получается избыточность, да и откровенно сложно будет управляться с таким количеством перекрестных ссылок
image.png371 Кб, 640x393
599 2945020
помогите ньюкеку
как работает порядок исполнения кода в сишарпе? если я сначала опишу функцию, а только потом её инициализирую, компилер пошлёт меня нахуй, отделается варнингом или скажет малаца?
600 2945167
>>2920885 (OP)
Привет, анончики.
Кто-нибудь использует мак для программирования на дотнете? Поделитесь опытом
601 2945754
>>2945020
Объясни толком, что конкретно ты хочешь сделать. В шарпе нельзя ни объявить функцию, ни инициализировать. Да и функций в привычном понимании в шарпе нет.
602 2945756
>>2945020
"Ты пытаешься втереть мне какую-то дичь"
603 2945767
>>2945754

>Да и функций в привычном понимании в шарпе нет


Тащем-та есть. Локальные.
Но инициализации и у них нет.
604 2945772
>>2945167
Знакомые используют. Кто-то райдер ставит, кто-то VSCode.
605 2945890
>>2945772
а они знают что в рф лгбт запретили?
606 2945910
>>2945890
Запретили токо пропаганду. А они тихо-мирно, в своем узком кругу наяривают.
607 2945937
>>2945910
пропаганду запретили давно уже. а теперь и движение
а значит его членам не стоит говорить о том, что они члены этого движения

а разработка шарпа на маке - именно такое.
608 2946220
>>2945767
В локальные методы тоже this передается, чел...
609 2946221
>>2946220
Ну ты конечно пчел.
610 2946863
Пацаны. Не хотите устроить ревью?
https://github.com/BakaVaka/SampleClietnServer
611 2946900
>>2946863
Ты уже третий итт, кто пишет свой сервер с клиентом. Это на каких-то курсах нынче изучают?
612 2946912
>>2946900
Всмысле третий? Это все был я скорее всего. Мне почему-то прям нравится эта фигня с тем что приходят байтики, они парсятся, потом еще диспечеризацию какую-нибудь динамическую на основе аттрибутов навесить.

Единственное. Я не могу вот что придумать. Как эффективно сделать хуйню которую я в свое время видел в мине. Типа что на одном порту - несколько протоколов могут висеть, и типа логика такая, что ты можешь с одной стороны - миддлварь и по нему гонять байтики для парсинга, а потом - добавить отдельный обработчик - и к нему приходит копия того что натекло с сокета, и он уже может по своему пайплайну погонять.
Типа да. Можно просто копировать перед тем как отправить в какой-то пайплайн и каждому пайплайну копию. Но в моей голове - это какая-то фигня получается неэффективная. Вот.
613 2946928
>>2941670
Шарпоговнокод момент. Зато за геттеромакакинг покопротивляться успели, видите ли, то, что копрософт им с лопаты не скормил это всё нинужно и только код портит. Лол.
614 2946938
>>2946863
Ты реально это говно 50-строчное сюда притащил? У тебя проблемы с самооценкой? Почему ты просишь это оценивать? Я бы понял ты бы какой-нибудь мессенджер написал, или ещё что-то клиент-серверное, но это даже кидать стыдно.
615 2946944
>>2946912

>Я не могу вот что придумать.


А не проще тебе в исходники Asp.Net посмотреть?
616 2946975
>>2946944
У них там контекст контекстом погоняет и фичи туда-сюда сует. Сложно для восприятия.
617 2947054
>>2946938
Потому что по моему опыту реальных ревью, никто даже 1000 строк кода не будет смотреть. А если что-то среднее, тысяч на 60 строк кода, так вообще - будет два вопроса: 1) Где тесты? 2) Оно работает?
А я ревьюшечку хотел. Потому что меня уже задолбало, что на работе - никто мой код не ревьюит, всегда пишут: LGTM... А ревью хочу!
618 2947112
>>2947054

>Потому что по моему опыту реальных ревью, никто даже 1000 строк кода не будет смотреть.


Потому код-ревью в виде "проверять и искать ошбики в коде" - это хуйня из под коня и придумана инфоцыганами для вкатышей с курсов. Чтобы у них было ложное ощущение, что их никто не бросит и всегда будет им попку подтирать. Никто на реальной работе (кроме самых упоротых) этим не занимается. Аппрув на код-ревью в большинстве случаев означает, что ты не хуй с горы и мерджишь свой код легитимно, согласно какой-то запланированной задаче, а не по желанию левой пятки.
Т.к. подразумевается, что все профессионалы и умеют рабоать свою работу (это не считая всяких анализаторов в IDE, стайлкопов и т.д.)
619 2947140
>>2947112
Ну. Блин.
Я вот когда ревью провожу - как минимум пытаюсь вникнуть, что код должен был делать в контексте задачи. И доебываюсь, если вижу что-то в духе:

void Cancel(bool flag) => _canceled = flag;

Или когда код совсем какой-то непонятный - прошу либо комментарии написать, либо порефакторить, чтобы было понятно без необходимости лезть в таску или идти к разработчику, чтобы узнать, что это вообще такое и зачем оно так сделано.
620 2947554
>>2946938
Какие же шарподебилы токсики, пиздец просто.
621 2947692
>>2946863
https://github.com/BakaVaka/SampleClientServer/blob/master/src/Shared/Connection.cs

>var socket = new Socket(host.AddressFamily, SocketType.Stream, ProtocolType.Tcp);


> try {


> await socket.ConnectAsync(host);


> return new Connection(socket);


> } catch(SocketException) {


> socket.Dispose();


> throw;


> }


using же блять есть
622 2947693
>>2946863
https://github.com/BakaVaka/SampleClientServer/blob/master/src/Shared/Connection.cs

> Func<Stream, CancellationToken, Task<T>> decoder


Функция должна глаголом называться. decode.
623 2947697
>>2946863
https://github.com/BakaVaka/SampleClientServer/blob/master/src/Server/Listener.cs

> var temp = new Socket(_listenerEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);


Имя переменной должно описывать, что в ней содержится.

> // do nothing, this is server call stop


> catch( OperationCanceledException ) {}


Это какая-то хуйня. Корректное поведение не должно вызывать исключения. Попробуй остановку не через CancellationToken делать. Сделай просто метод Stop().

> // если нам нужен "рестарт" и мы хотим переиспользовать объект слушаетля


Не надо переиспользовать объект listener для других хэндлеров, это не какой-то карьерный самосвал. Просто делай новый. Засунь хэндлер запросов конструктор. Можно сделать Listener<T>, где T будет хэндлер запросов и инжектить его через DI.
Алсо, преждевременная генерализация это примерно так же плохо, как преждевременная оптимизация. Обычно, если у тебя есть сервер, обрабатывающий запросы, он одним и тем же способом их обрабатывает до посинения.
image.png33 Кб, 683x709
624 2947774
Жабёнок ты тут? Когда на работе попробуем потоки?
RUr8Mp61l4g.jpg207 Кб, 1280x1058
625 2947797
>>2947774
Это вот на таких картинках основано убеждение шарподебилов в том, что макакить гетсеты не так уж и плохо? По теме — больше года назад попробую, когда вышла 19 джава.
626 2947912
>>2947697

> Это какая-то хуйня. Корректное поведение не должно вызывать исключения. Попробуй остановку не через CancellationToken делать. Сделай просто метод Stop().


Я с этим полностью согласен, но майки это считают единственно верным способом остановки чего-нибудь в контексте асинхронщины.
>>2947692
Если я задиспозю сокет через юзинг в этом методе, то коннекшн при попытке что-то делать с ним - будет кидать ObjectDisposedException каждый раз, когда чет пытаюсь читать-писать в сокет. Потому сокет диспозится только если не удалось соединиться с удаленным хостом.
627 2948282
>>2947697
Метод стоп, который вызовет свой внутренний CancellationToken
То есть код цикла не изменится
Изменится лишь семантика остановки

Хотя в данном случае семантика стоп получше будет
628 2951193
Я залетный джавадибил перекатчик из другой технологии, который рассматривает для себя варианты куда собственно перекатиться.
Я правильно понимаю, что изучив C# я могу писать и бэкенд, и под андроид, и под айос, и даже игры? И всё это тут хорошо работает и за это даже можно получать кровавые доллары?
629 2951262
>>2951193
В целом - да.
Но как всегда с оговорками.
MAUI - для андроида и иос - говнина.
Бекенд - отлично.
Десктоп - для винды - отлично, кроссплатформенный - с оговорками.
Игры - если про юнити, я бы после всей хуйни- не стал. Плюс - везде где шарп для игр используется, там оч много отличается на самом деле и знание большого шарпа не совсем кладутся туда и наоборот.
630 2952309
>>2951193
Нет, здесь ты будешь ебаться с убогим сборщиком и шлёпать гетсеты.
631 2952340
>>2952309
Ну хотя бы доки можно без впна увидеть.
632 2952412
>>2952309

>шлёпать гетсеты


ты так говоришь, как будто что-то плохое
633 2952437
>>2952412
Я бы по попе шлепал лучше...
634 2952484
>>2952340
Доки по спидгетсетингу?
635 2952488
>>2952412
За исключением бойлерплейта ничего.
636 2952493
>>2952484
Ну знаете, туториалы там https://docs.oracle.com/javase/tutorial/
Или спеки https://docs.oracle.com/javase/specs/
Даже про интегер не почитаешь https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html

Ну ничего, барену-то виднее!
637 2952540
>>2952493
Так если это не доки по спидгетсетингу и не гайд по пвп со сборщиком, какое это отношение к теме имеет?
638 2952549
>>2952540
Откуда я знаю? Сам какую-то поеботу выдумал, сам же возмутился. Мелкомягкие-то свои доки не блочили, все еще можно свободно взять и посмотреть, хотя из рф они якобы ушли. Думаем.
639 2952558
>>2952549
Я? Это же ты доки какие-то вкинул.
640 2952848
Работяги, почему в VS в дебаг режиме приложение работает нормально и потребление памяти на растёт, держится в районе 400мб но когда я делаю релиз и в релизе начинаются качели. Сразу в 2гига памяти занимает приложение, потом начинаются качели то 2.5-1г, а потом через часа 3 вообще закрывается приложение без ошибок.
У меня в приложении есть 2 List<string> в которых может быть в общем 200к url адресов. Но бля это же не 2 гига же?
Собственно метод который я запускаю на скрине и то как я его запускаю семафор на 140 потоков.
641 2952861
>>2952848
Хотя в дебаге тоже есть утечка памяти но происходит она медленнее релиза
642 2952928
>>2952848
Вот думаю что это всё объекты HtmlAgilityPack, почему они не удаляются? Метод отработал, экземпляр класса уже нигде не используется же.
643 2952969
>>2952848
А тебе прям обязательно эти 200к строк держать в памяти разом? Что мешает выгрузить их в файл/бд, а потом по необходимости доставать?
Плюс. Про свой агилити-пак. Посмотри, мож там что-то диспосабл, а ты не диспозишь.
Про утечку. В классическом смысле она в шарпе - сложно реализуема. Ищи объекты, которые долго живут и при этом держат ссылки на что-то.
644 2952978
>>2952848
Да. Нахрен убери тредпул.
Делай как человек:

var tasks = Enumerable.Range(0, conceurrentWorkersAmount)
.Select( async x=> {
while(!cancellation.IsCancellationRequested){
await MyTask();
}
})
645 2952983
>>2952969
В памяти их держу для проверки ходил ли я по этой ссылке или нет.
Захожу на страницу, добавляю её в список пройденных ссылок, паршу все ссылки которые есть на странице, далее проверяю их в списке ходил ли я по ними или нет, если не ходил то в очередь на парсинг их добавляю. Если держать ссылки в бд то будет очень долго проверку делать. Ведь на странице может быть 20 ссылок, 140 потоков это дохуя запросов к бд.
У HtmlDocument нет Dispose.
Если я правильно понимаю то в памяти хранятся всё что спарсил HtmlAgilityPack и не удаляются.
646 2952986
>>2952848
Хм. ХММММ.
Смотрю И вижу что зеленым подчеркнуто в методе что ты в тредпуле вызываешь.
Предполагаю - это асинхронный метод.
Ты его не ждешь и сразу отжимаешь семафор.
Вангую, что падает из-за этого.
647 2952992
>>2952978

> Делай как человек:


> linq

image.png30 Кб, 641x277
648 2953007
>>2952986
Вот так надо было?
Я просто думал что после await год не пойдет дальше и будет запуск по 1 задаче.
649 2953011
>>2953007
Вообще все эти авейт асинки магия для меня, пишу по наитию.
650 2953016
>>2953007
Надо было либо как в примере с линку.
Либо, если так уж хочется тредпула -

ThreadPool.QueueUserWorkItem( async (_) => {
var crawl = new Crawl();
await crawl.GoAsync();
semaphore.Release();

})
651 2953033
>>2953016
Я просто хочу в бесконечном цикле что бы запускались
var crawl = new Crawl();
await crawl.GoAsync();
И одновременно работало 140 копий, по завершению работы какой либо копии что бы подгружалась еще одна но максимум 140)
А трейд пул это жпт чат мне посоветывал)
652 2953048
>>2953033

Ну и что тебе мешает сделать так, если линку не хочется:

List<Task> tasks = new();

for(int i = 0; i < maxTasks; i++){

var t = Task.Run( async () => {

while(true){
try{

var crawl = new Crawl();
await crawl.GoAsync();

catch(Exception){}

}
});
tasks.Add(t);

}

await Task.WhenAll(tasks)
653 2953050
>>2953048
Это будет работать как раз через тредпул. И парралельно сколько надо твоих задач запускать.
654 2953078
>>2953048
Спасибо, так вроде работает
655 2953082
>>2952488
дурачку пояснили уже что свойства в шарпе ОТДЕЛЬНАЯ ОСОБАЯ ШТУКА, а не тупо указание компилятору "сгенерь за меня геттеры и сеттеры"
но дурачок не понимает
656 2953108
>>2953078
>>2953048
Но всё равно куда то память утекает.
900мб, а начиналось все с 140, 70к урлов не могут же занимать 750мб
657 2953114
>>2953108
Если ты по профиллировщику смотришь - то он не реальный размер памяти показывает.
Смотри в диспечере задач.
658 2953119
>>2953114
Ну да там и смотрю.
уже 1.6гб(

Может быть когда делается
while(true){
try{

var crawl = new Crawl();
await crawl.GoAsync();

catch(Exception){}

}
После выполнения объект crawl и всё что с ним связанно остается в памяти?
659 2953120
>>2953119
остается пока не будет скушано сборкой мусора.
660 2953407
>>2953082
И чё? Это как-то оправдывает гетсетошлёпанье?
661 2953413
>>2953407
Очередное напоминание, что в джаве нет свойств, и надо писать ажно по методу на каждый гет и сет, да ещё и поле заводить. Это куда больше бойлерплейта, чем в свойствах шарпа.
И да, есть ломбок, который может это сгенерировать, но
а) при добавлении логики придётся писать всё ручками
б) в джаве это было насколько убого, что аж пришлось делать целый тул кодогенерации

Для шарпа тоже мог бы существовать такой тул, который сам гет-сеты везде пропишет, но его никто не сделал. Знаешь почему? Потому что написать {get; set;} гораздо проще, чем
string m_fuckingField;
string getFuckingField(){return m_fuckingField;}
void setFuckingField(string value){m_fuckingField = value;},
и это никого не напрягает.
662 2953415
>>2953413
Я тут мимо пробегал.
По мне - свойства было лишним. Решил на днях на плюсах пописать ради восстановления знаний. И в принципе не возникло ситуации, в которой я по свойствам скучал особо.
Как и события и делегаты в том виде в котором их сделали(когда кто угодно откуда угодно может добавить свой обработчик, а ты ебись потом ищи, еще и по какой-то причине ссылку студия где добавляют обработчик не показывает, такой-то треш)
А вот рекорды - оч поздно завезли. Их надо было чуть ли не с самого начала вводить.
rtti.JPG35 Кб, 480x834
663 2954489
шарпач, есть ли способ объединить в свиче case A и case B, не трогая сами классы?
664 2954511
>>2920885 (OP)
Где-то видел инфу, что в дотнете запилили что-то вроде контейнеров, как я понял заменяющих докер. Сразу не прочитал, а теперь не могу найти. Кто-нибудь в курсе?
665 2954517
666 2954652
>>2954489
Выбирай что больше нравится
667 2954682
Я тут задался вопросом. А как в памяти-то объекты хранятся?

Ну. Типа. Вот структуры в классических компилируемых языках имеют вид в духе:

struict {
int a;
int b;
char c[4];
};

И в памяти это будет выглядеть примерно так(упрощенно, ессно, про выравнивания и прочее не думаем):
[00,00,00,00,00,00,00,00,00,00,00,00] - пустая
[00,00,00,01,00,00,00,01,00,00,00,00] - с 1 первых двух полях структуры

А как в шарпе-то оно хранится? Что вообще в объекте класса-то имеется?
Ну, подозреваю, должна быть какая-то ссылка на тип который у объекта.
Должны быть поля класса.
У типа - должна быть какая-то таблица методов, методы должны еще наверное о сигнатуре сообщать как-то. Но это не точно.

В общем. Кто тут шаристый. Поделитесь знаниями.
668 2954718
>>2954682

>А как в памяти-то объекты хранятся?


В куче (heap)
https://endjin.com/blog/2022/07/understanding-the-stack-and-heap-in-csharp-dotnet
670 2955061
Аноны помогите пожалуйста. Сутки сижу не могу замапить эту хуйню. Есть вот такие 2 сущности конфиги на скринах. При попытке их добавить вместе вылетает ошибка

>System.InvalidOperationException: The value of 'EntrepreneurInfo.Id' is unknown when attempting to save changes. This is because the property is also part of a foreign key for which the principal entity in the relationship is not known

671 2956118
>>2954652
спасибо я совсем забыл про dynamic
672 2956431
>>2955061
Зачем у тебя связи один к одному на этапе прототипа?
Типа если у тебя что-то привязано к какой-то там таблице, один к одному, то нихай и будет частью этой таблицы.
673 2956514
Приветы!
Я только начинаю. Пробую решать задачки (например на LeetCode). Завёл себе отдельный проект в Visual Studio для задачек. Посоветуйте, как правильно его организовать, чтобы каждая задачка была обособлена (в папке там или в файле). И когда наживаешь F5 - то запускается именно та задача, над которой сейчас работаю.

Плаваю в понятиях "решение", "пакет", "неймспейс". Пока не очень понимаю, как они друг сдругом соотносятся.

Чат GPT посоветовал сделать такую структуру

LeetCodeSolutions

├── Task001
│ └── Task001.cs
├── Task002
│ └── Task002.cs
└── ...

у меня в каждом файле TaskXXX.cs содержится метод Main(), поэтому не запускается.

Наверняка такой велосипед уже сто раз изобретали. Помогите плес
674 2956520
>>2956514
Пкм по решению, добавить проект, консольное приложение. Пкм по проекту, назначить запускаемым или как-то так. Новая задачка - новый проект.
image.png24 Кб, 543x187
675 2956528
>>2956514
Нахуй этим заниматься, если литкод все задачки сохраняет?

Кстати, шарпаны, а ваша студия умеет историю файлов сохранять? Вот пик. Или нинужна ибо гит?
676 2956767
На шарпе не принято использовать абстрактные классы? Везде вижу только интерфейсы, хотя, казалось бы, описываются сущности (взгляните, например, на библиотеку Discord.NET - там интерфейсы IMessage, IDiscordClient)
677 2956821
>>2956767
при отсутствии множественного наследования (и слава богу) использование абстрактного класса должно иметь обоснование.
678 2956914
>>2956821

> при отсутствии множественного наследования


> (и слава богу)


Стокгольмский синдром как он есть
679 2956922
>>2956914
И нахуя нужно вводить проблему ромба? Какие плюсы-то?
680 2956942
>>2956922
Плюс в возможности унаследоваться от двух классов, очевидно. Например от базовой вью модели и модели какой-либо сущности.
681 2956990
>>2956767

>На шарпе не принято использовать абстрактные классы?


Принято. Постоянно используются.
682 2956992
>>2956821
>>2956942
Тогда где применять абстрактные классы вместо интерфейсов?
683 2956996
>>2956942

>Например от базовой вью модели и модели какой-либо сущности.


Какое же говно. Пиздец, надеюсь никогда в жизни не столкнусь с подобным кодом.
684 2957021
>>2956996
Почему же? Мне вот сейчас приходится передавать модель в конструктор вью модели которая унаследована в свою очередь от абстрактной вью модели с параметром - UserViewMode: AbstractEntityViewModel<User>, где абстрактная модель в качестве аргумента конструктора принимает модель заданного типа. При множественном наследовании я бы просто создавал сразу вьюшки и использовал в том числе как модели
685 2957049
>>2956767
Абстракный класс используется, если есть логика которую надо наследникам дать.
Если нужен только контракт - используется интерфейс.
Сущность это, хующность или еще что-то не важно.
686 2957060
>>2956992
когда в этом классе полно собственной логики что делает невыгодным имплементировать ее в каждом классе.

интерфейс же - не более чем контракт. И если тебе нужен только контракт, то зачем тебе абстрактный класс для описания контракта, если для этого придуман интерфейс.

>>2957021
проблемы весомее пользы, поэтому такого наследования много где нет.
любители наху...ить пусть идут в языки со множественным наследованием и там отрываются от души. чего они в шарп то пришли.
687 2957419
шарпаны, а насколько уже заматерел блазор? хочу PWA себе сделать
688 2957480
>>2957419
Вакансий на нём мало, но всё же они уже есть, значит, достаточно заматерел.

> себе сделать


В проектах для себя можно юзать хоть ноунейм васянские поделки.
689 2957487
>>2957419
Блазор заебись сделали. При серверной модели хостинга он теперь умеет комбинировать подходы к отрисовке страничек. Хочешь полный интерактив, хочешь mvc вьюху отравляй, хочешь сборочку с васм клиентом.
690 2958160
Господа, я сидел в криокамере последние 7 лет и помню, что winforms больше не модно и всех заставляют писать на wpf. Какие тренды в 2к23? Wpf всё ещё №1 или есть еще другие шаблоны?
691 2958167
>>2958160
WTF успел выйти из моды, всех пытались заставить писать на UWP. Он мало кому понравился, все остались на WTF, а UWP типа легаси. Потом взяли Xamarin, выкинули оттуда поддержку линукса, назвали это MAUI и теперь заставляют писать на нём. Ещё есть сторонние Avalonia, Uno platform и Eto.Forms, они хотя бы поддерживают линупс. Как будто всё это говнище может сравниться с божественными винформами.
Веб
692 2958171
>>2958160
А вообще, MS такого высокого мнения о своих либах для гуя, что Visual Studio Code написали на электроне.
693 2958178
>>2958160
Впф сдох, а формочки на коне. А вообще встраиваешь в окно, которое тебе нравиться, webview2 и верстаешь на разоре.
694 2958193
>>2956520
Спасибо! То, что надо!

>>2956528
если литкод все задачки сохраняет?

Ну для себя же. Чтобы когда-нибудь вернуться к решению, может отрефакторить его.

А ещё вопрос. Много где слышал, что для того чтобы перестать страдать и начать нормально программировать, нужно как-то особым образом мозги повернуть. Особенно касается программирования в ООП стиле.

Можете пояснить, что это значит? Как у вас поворачивались мозги? Что лучше делать для этого?

Вот смотрю туторы всякие, пошагово переписываю их в IDE, вроде бы всё понятно и не суперсложно. Но как самому такое написать, сидишь тупишь, как обезьяна в мозгу Гомера.
695 2958202
>>2958160
В моде сейчас CLI
696 2958205
>>2958193
Писать код в блокнотах и онлайн редакторах удел челов без нормальной ide, у которой есть нативная поддержка твоего ЯП.
697 2958219
>>2958193

>Что лучше делать для этого?


Впусти в себя Иисуса.
698 2958243
Меня оч сильно задолбало, что после сборки - в папке с собранным проектом - каша.

Допустим. Я бы хотел чтобы после сборки было что-то в духе

-app.exe
-appsettings.json
--packages
----Newtonsoft.Json.dll
----Npgsql.dll

Т.е. я все еще не собираю это в один огромный экзешник, а dll лежат отдельно, просто лежат они не в той же папке, где exe, а в отдельной папочке рядышком и не превращают каталог выходной в ебучее непонятное нечто.

Вот как мне такое сделать?
699 2958384
>>2958243
Делаешь post build event в котором перемещаешь, все dll-ки в нужный тебе каталог. Добавляешь в app.config приложения путь где оно должно их искать. Вроде как-то так. Раньше это работало, но не знаю будет ли работать в современном .Net-е
Только я бы не советовал так делать, т.к. можно поиметь кучу непредвиденных сайдэффектов.
Просто привыкни, что тебе должно быть насрать, что там в выходном каталоге находится. Учись работать с CI/CD механизмами.
700 2958405
>>2958384
Ну. Я немного приврал, что это меня бесит. Мне-то как раз пофиг всегда было.
А вот люди, которым доставляешь сборку - негодуют постоянно.
Типа они хотят типа чтобы было вот так:

app.exe
uninstall.exe
--doc
-----README
-----PatchNote
-----Instruction.pdf
----libs
-------lib1.dll
-------lib2.dll
--scripts
-----create.service.bat
-----start.service.bat
-----stop.service.bat
-----clean.bat

Я им говорю, что нахуй оно надо-то? Типа это же серверное приложение. Запустили, оно работает. Нех лазить в папки.
Мне говорят, что А ВДРУГ НАДО БУДЕТ, А НИХУЯ НЕПОНЯТНО.
701 2958460
>>2958405
Тогда просто засовываешь все что билдится в один из подкаталогов сборки, и прокидываешь ярлыки. Типа вот так:
app.lnk <- ярлык на основной экзешник
uninstall.lnk
--doc
-----README
-----PatchNote
-----Instruction.pdf
--bin <- вот тут будет вся сборка проекта
--scripts
-----create.service.bat
-----start.service.bat
-----stop.service.bat
-----clean.bat

>>2958405

>Мне говорят, что А ВДРУГ НАДО БУДЕТ, А НИХУЯ НЕПОНЯТНО.


А ты им скажи, что нехуй лазить туда тем кому НЕПОНЯТНО, пусть квалифицированные люди это делают.
702 2959784
Есть тестовое задание написать сервис по конвертированию html в pdf
В описании задания файлы эти нужно хранить в памяти, но потом там же есть условие что сервис должен быть стабильным, т.е. если после того как клиент отправил файл на конвертацию на сервер и сервер был перезагружен, то он должен иметь возможность вернуть сконвертированный файл обратно клиенту, но как это сделать если все хранится в памяти? Нихуя не понятно

Другой вопрос, в условии сказано что html файлы могут быть большими и конвертация одного файла может занять 3-4 минуты, но так как все методы асинхронные то оптимизировать больше нечего?
Ну то есть вот контроллер, вот асинхронный метод в репозитории, а вот и сам асинхронный метод библиотеки которая и конвертирует, насколько я понял добавить/улучшить больше нечего?
Я думал может при вызове библиотечного метода конвертации отправлять его выполняться в другой поток через await Task.Run, но потом нашел вот что:

>Async and await on ASP.NET are all about I/O. They really excel at reading and writing files, database records, and REST APIs. However, they’re not good for CPU-bound tasks. You can kick off some background work by awaiting Task.Run, but there’s no point in doing so. In fact, that will actually hurt your scalability by interfering with the ASP.NET thread pool heuristics. If you have CPU-bound work to do on ASP.NET, your best bet is to just execute it directly on the request thread. As a general rule, don’t queue work to the thread pool on ASP.NET.


Хотя вот в других туториалах вполне себе пихают CPU-bound таски в await Task.Run, но мне кажется слушать белого человека с 15+ годами опыта в асинхронности лучше чем блогпост Раджеша из Индии, но все же

И еще вопрос, есть ли необходимость использовать Concurrent коллекцию? Ведь может случиться так что два разных файла сконвертируются одновременно и возможно появится проблема с добавлением их в обычную коллекцию
703 2960012
>>2959784
Цитата говорит что не нужно планировать работу в потоке пула из запроса ведь ты и так находишься в потоке пула и можно работу просто выполнить.

А конвертить у тебя должен фоновый сервис который будет делать это в потоках вне пула (а то и в отдельных процессах)

Про хранение в памяти бред. Там должно быть про устойчивую к ребуту очередь конвертации.
704 2960043
>>2959784

>Есть тестовое задание написать сервис по конвертированию html в pdf


Это на какой грейд? И сколько времени дается?
705 2960062
>>2959784

> если после того как клиент отправил файл на конвертацию на сервер и сервер был перезагружен, то он должен иметь возможность вернуть сконвертированный файл обратно клиенту


Если прям так и написано, значит ты должен результат хранить где-то еще. Либо в базе, либо на диске, либо в редисе, либо еще где-то.

> в условии сказано что html файлы могут быть большими и конвертация одного файла может занять 3-4 минуты


Значит, что ты не должен как целиком загружать все это себе, а конвертировать "на лету" не дожидаясь полной загрузки.

Асинхронность - это не про оптимизацию, а про эффективное использование ресурсов железяки.

> добавить/улучшить больше нечего


Если спеки PDF ные знаешь, то скорее всего - есть че. Если берешь готовую либу и просто дергаешь оттуда метод - да, ниче уже не придумаешь.

> И еще вопрос, есть ли необходимость использовать Concurrent коллекцию? Ведь может случиться так что два разных файла сконвертируются одновременно и возможно появится проблема с добавлением их в обычную коллекцию


В базу пиши. Не выебывайся.
706 2960071
>>2959784
Теперь про код.
Я бы уже завернул сразу.
1. В контроллере у тебя ниче быть не должно связанное с логикой приложения. Получай через DI сервис, отдавай ему стрим, результат - заворачивай в свой JSON/XML/HTML что еще тебе там надо. А вот эти вот размазывания логики между контроллером и остальной логикой приложения - не нужны.
2. Никаких Console.WriteLine - используй логгер нормальный.
3. using - убери скобки, отвратительно смотрится.
4. Убери уродство с Request.Form.Files, по взгляду на сигнатуру контроллера - нихуя не понятно, чего апи ждет, сваггером не подергаешь и вообще хуйня какая-то
5. Для контроллеров - надо XML доки писать, чтобы в сваггере - было понятно что за хуйня и зачем.
6. IActionResult - сразу нахуй.
7. BadRequest на все эксепшины - сразу нахуй, это не ошибка клиента, если у тебя место закончилось
8. Не вижу тестов.
9. Если уж и хранишь результат в какой-то коллекции в памяти - храни в словаре, чтобы по ключу делать TryRemove(resultId, out var pdf).
10. Зачем тебе копировать стрим? Достал из запроса - передал этот же стрим дальше.
707 2960577
>>2960071

>3. using - убери скобки, отвратительно смотрится.


ФЛОМАСТЕРЫ.
не каждый сахар шарпа удобен
и вот это одно из них.
708 2960626
>>2960071

> Зачем тебе копировать стрим? Достал из запроса - передал этот же стрим дальше.


Копирование стрима это база базовая, ведь никогда не знаешь, что с этим стримом может сделаться, пока ты его сношаешь.поэтому бывает один и тот же стрим копируется чуть ли не десяток раз, хотя в действительности не изменяется
709 2960651
>>2960626
но ты ЗНАЕШЬ
ты знаешь что стрим тебе не нужен, а значит можешь его дальше передать. И если там кому то нужно сто раз его читать - то это его уже забота.
710 2960680
>>2960071

>4. Убери уродство с Request.Form.Files, по взгляду на сигнатуру контроллера - нихуя не понятно, чего апи ждет, сваггером не подергаешь и вообще хуйня какая-то


Разве можно получать сразу стрим с клиента? Или ты иммешь ввиду получить файл через скажем List<IFormFile> files и уже в репозитории его в стрим?
>>2960071

>6. IActionResult - сразу нахуй.


Почему? И какая альтернатива?
711 2960756
>>2960680

> Или ты иммешь ввиду получить файл через скажем List<IFormFile> files и уже в репозитории его в стрим?


Можно и просто через IFormFile. Без листа. Но да.
Почему? Потому что тогда сваггер - тебе красивенько нарисует кнопку с выбором файла и ты сможешь проверить свое апи без лишних телодвижений.
А сверху - тебе ASP провалидирует это дело и до обработчика даже дело не дойдет, если пришла какая-то лажа.

> Почему? И какая альтернатива?


Потому что непонятно что в результате вернется в случае успеха. Допустим, если у тебя какая-то легкая операция, которая ничего не мутирует - ты нормально можешь дернуть это апи, чтобы проверить. А если это вот такая тажелая фигня, или что-то мутирующее(например удаление/изменение), это просто неудобно(взял, нафиг, и удалил всю тестовую базу, теперь иди и заново засеивай ее)
Альтернатива:
ActionResult<Что ты там возвращаешь>
Или просто Что ты там возвращаешь.

Исключения, когда это что-то прям низкоуровневое что приходится прямо в Response писать. Но это редкость и не этот случай.
712 2960777
>>2960756
>>2960756

>Без листа


А что если юзеру лень будет по одному файлики на форме клиента заливать? Мне то лично не сложно, но работодатель думаю вполне может и спросить про этот момент
713 2960780
>>2960777
В коде что изначально был - только один файл берется. Предполагал, что это обговорено в описании задачи.
А так - да. Согласен, что в реальном использовании - лучше коллекцию использовать.
изображение.png29 Кб, 624x167
714 2961348
Ребят, чота решил сделать бота для fc 24, но столкнулся с такой проблемой, что на сайте игры, чтобы нажать кнопку, нужно выполнить event mousedown на кнопку, а не обычный click.
Пользуюсь cefsharp, голову уже сломал, но отправить этот mousedown на кнопку я не знаю.

Никто не подскажет ?
715 2961366
>>2961348
Вроде как додумался, брать относительные позиции xy и посылать евент туда
716 2961407
Насколько хорошая идея вкатываться в юнити в 20234? Есть опыт написания говна на шарпе почти 5 лет.
717 2961423
>>2961407
Не знаю насчет конкретно юнити, но вкатывание в геймдев в принципе такое себе.
718 2962521
Я сделал страшное. Класс на 1800 строк.
Как мне с этим жить?
А главное, как мне его рефакторить?
Суть класса-то операция импорта данных из файла в приложение. Разбить на более-мелкие - можно, но это же бред, сам класс нужен ровно для одной фичи, и вот эти микроклассы которые получатся - будут просто фигней, которая расфосована по файликам, но нужна все для той же одной фичи.

Пожалейте меня. Пожалуйста.
719 2962557
>>2962521
Нам тебя жаль
Ты ж бестолочь
720 2962823
>>2962521

>Разбить на более-мелкие - можно, но это же бред, сам класс нужен ровно для одной фичи, и вот эти микроклассы которые получатся - будут просто фигней, которая расфосована по файликам, но нужна все для той же одной фичи.


Можешь не разбивать, а оставить как есть. Подождать месяца 2 и потом вернуться к классу с целью что-нибудь там изменить/исправить/добавить.
Вот тогда ты себя уже не жалеть будешь, а материть и проклинать.
>>2962521

>А главное, как мне его рефакторить?


Начни сначала с выноса всякой повторяющейся мелочи в экстеншены и обертки/дто
varvar.JPG27 Кб, 543x582
721 2963227
допустимо ли так делать и если нет, то есть ли лучше способы?
722 2963261
я хотел бы визуализировать типовой Excel файл в WinForms, может кто подсказать хорошую альтернативу DataGridView что бы она поддерживала слияние ячеек из коробки?
723 2963381
>>2963227

>ли так делать


Так - это как? Что сделать то хотел?
724 2963598
>>2962521
Операция импорта из файла обычно делится на несколько этапов, которые достаточно независимы. Ну типа, парсинг файла, валидация спаршенных сущностей, мапинги, сохранение загруженных данных куда бы то ни было и т.д. Всё это можно в отдельные классы выделить. Смысл - меньше когнитивная нагрузка на читающего.
725 2964101
>>2920885 (OP)
Шарпаны, какие неймспейсы предпочитаете: block_scoped или file_scoped ?
726 2964358
Почему на шарпах так мало вакансий в крупные рф компании?
Везде го жаба и так далее, я понимаю что нг скоро и найма мало но все таки

Уже впечатление что надо в го перекат делать

мимо 2 года шарпов
727 2964360
>>2964101

Если у тебя один неймспейс на файл, то file scoped топ.
728 2964365
>>2964358
или шарпы в рф нужны чтобы получить опыт и пиздовать горбатиться на западного барина?
729 2964388
>>2964358

> в го перекат


После шарпа - боль и унижение на каждом шагу.
730 2965871
>>2964101
Те что без скобочек.

Моя коричневая мечта - что и для классов сделают как для неймспейсов, учитывая, что 99% времени у тебя один файл - один класс. Так на кой хуй тратить место под эти отсутпы?
731 2966103
>>2964358
Почитал про go в очередной раз. Минусы, которые вынес для себя:
ждуну будут платить 50-80k (не больше, чем на любом другом языке)
вакансий столько же, сколько на C#
не получится устроиться чистым go-разрабом. Даже у Яндекс.Практикума на курсах в дополнение идёт второй "неочаровательный" язык (питон, php, js)
вывод - в 90% случаев будешь не гофером, а переводчиком с php на go
ещё один знакомый (ждун на go) моего знакомого поделился болью, что вынужден писать на Go монолит, вместо божественных микросервисов. Он привёл аналогию - это как на феррари ездить по московским 9-ти балльным пробкам.

энивэй, я всего лишь вкатывальщик на C#
732 2966155
>>2966103

> не получится устроиться чистым go-разрабом. Даже у Яндекс.Практикума на курсах в дополнение идёт второй "неочаровательный" язык (питон, php, js)


То же самое относится к шарпу
733 2966466
>>2966155

>То же самое относится к шарпу


Да нихуя. С приходом б-жественного .Core/.Net, как раз таки намного легче получается быть чистым бекендером. Я уже полтора года как никакого фронта не касался и реакт уже забывать начал.
734 2967690
Что происходит когда я создаю структуру Span<T> | Memory<T> в одном методе и посылаю его другому методу? Что происходит в стэке и со структурой?
Получается что стэк метода-обработчика структуры как бы внутри стэка метода-создателя и поэтому ничего не копируется и оба могут адресовать структуру пока исполнение не вышло за пределы метода-создателя?
Я правильно понял?
image.png157 Кб, 616x354
735 2967695
>>2967690
*само-апд
Вот пикча. за джс извени
Получается что пока с методом one() не распрощались, то его локальные переменные всё ещё висят в стэке?
(И теоретически доступны для two() и three(), ну и объясните если локальные переменные в one() изолируются two() и three() то примерно каким образом?)
736 2967755
>>2967695
Все так. С хвостовыми вызовами не совсем так. Параметры передаются в метод, их значения копируются ниже по стеку. Это могут быть значения, а могут быть ссылки-знаения. Например если ты вызовешь несколько методов, один из другого, углубляя стек, и будет передавать одно и тоже int значение (структуру) (например 5), то это значение скопируется в стеке столько же раз.
737 2968199
>>2958160

>Как будто всё это говнище может сравниться с божественными винформами.


Твое отношение поменяется, когда задача будет чуть сложнее создания кнопочки и текстбоксика. А если смотреть с позиции "оно и нафиг нам нинужно", то можно сидеть на vba 7.

Но перечисленные новиночки и в правду говно. Возможно только у авалонии есть шанс.
738 2968305
Всем привет! Начал изучать C# для интереса, давно хотел попробовать. Скачал книжку для изучения, и все бы ничего, но нет возможности установить Visual Studio (под рукой только запароленный ноутбук рабочий, на который без админки ничего не поставить). Подскажите, пожалуйста, есть ли какой-нибудь онлайн компилятор или можно что-то в этом случае придумать? Заранее большое спасибо
739 2968308
Как обновить ObservableCollection из другого потока? Я просто ебал в рот, что только я не перепробовал уже. Уже тысячу раз делал переключение потоков и всё работало всегда адекватно, но ObservableCollection это пиздец. Вроде в итоге сделал что-то типа такого
Application.Current.Dispatcher.Invoke(new Action(() => AddToColletion(item);
и оно работает, НО ТОЛЬКО НЕСКОЛЬКО РАЗ. Несколько раз отрабатывает и падает с

>Данный тип CollectionView не поддерживает изменения в своем SourceCollection из потока, отличного от потока Dispatcher


Как-будто поток просто перестаёт переключаться на главный
740 2968326
>>2968308
Пофиксил. Рефрешил коллекцию вручную вот таким способом раньше и забыл убрать, когда уже не нужно стало.
CollectionViewSource.GetDefaultView(MainCollection).Refresh();
Когда убрал, то почему-то начало работать нормально. Почему - хуй знает.
741 2968335
>>2968308
Так ты задачу-то не решил. Обновление все равно идет из диспатчера. Давай думай дальше.
742 2968340
>>2968335

>Обновление все равно идет из диспатчера


И что?
743 2968377
>>2968305

>есть ли какой-нибудь онлайн компилятор


Дохуя их по запросу "C# online"

>или можно что-то в этом случае придумать


Скачай portable версию Visual Studio Code.
744 2968576
>>2967755
Это только к хвостовым относится?
И где ещё прочитать про работу замыканий в C# на низком уровне?

>>2968377

>Скачай portable версию Visual Studio Code.


И что ему с ним делать? По дефолту с виндой идут только .Net Framework (и те скорее просто рантаймы без SDK, ну или SDK максимум четвёртой версии).
https://learn.microsoft.com/en-us/archive/blogs/astebner/mailbag-what-version-of-the-net-framework-is-included-in-what-version-of-the-os
F0SgRrIXgBk7q6g.jpg39 Кб, 547x680
745 2968607
>>2959784
Kjk, это же самое тестовое только вчера закончил делать и отправил, а сегодня зашел в тред и тут такое
746 2968640
>>2968377
А какой конкретно компилятор посоветуешь? Может есть список годноты
>>2968576
Я даже портабл скачать не могу. Ноутбук прям сильно огорожен паролем
747 2968673
>>2968576
Нет, там речь шла про обычные вызовы, при которых стек углубляется. При неосторожной рекурсии можно получить переполнение стека.

При хвостовом вызове весь байт код выполняется в рамках одной записи активации, стек не растет. Обновляются локальные переменные. Каждый новый хвостовой вызов имеет дело с обновленными значениями переменных, при этом инструкции остаются те же. Переполнение стека исключено, можно "углубляется" в рекурсию сколько душе угодно.

Почитай Сидиристого dotnet book.

Про лямбды вот есть пост >>2729162
749 2968704
>>2964358
Крупные это яндекс-мыло-банки-озон-авито?
Чем тебе тот же додо не угодил? 2гис? Да много на самом деле вакансий.
А если взять то же производство - то на крупных просто дохуища вакансий(другое дело, что там опыт специфичный).
Просто многие крупные компании, которые шарпы используют - не айтишные, а это накладывает некоторые особенности. Это да.
750 2968730
Здравствуйте. Можно ли оставить логику авторизации и регистрации в контроллере? Или лучше вынести их в отдельные сервисы?
751 2968735
>>2968730
Можно хоть в Program.cs все приложение сейчас писать.

А про лучше. Ну, вот тебе понадобится эта логика еще в каком-нибудь месте. Простой пример - в твоем приложении нужен будет шлюз чтобы через JSONRPC авторизоваться. Так сто лучше - вынести. Не понадобится, ну, и хорошо. А понадобится - потом может не быть время на рефакторинг.
752 2968757
>>2968730
Регистрация обычно делается через контроллеры, слишком уж она специфичная. Но аутентификация/авторизация предполагает некую миддлварь, которая пишется отдельно от контроллеров и срабатывает до передачи им управления.
753 2968759
>>2968735
>>2968757
Это я пытаюсь аналог Identity server сделать. Тут всего две задачи: авторизации и регистрация. Приложение, которое будет выполнять круды - отдельное там, собственно, мидлваре и т.д. Спачибо за ответы. Оставлю пока так.
754 2968761
>>2968759
Ну и клиент будет только веб.
755 2968764
>>2968757
Щито там специфичного, что в контроллерх делать надо и нельзя сделать какой-нибудь IIdentityService?
>>2968759
Ну. Как хочешь.
Просто кейс, когда надо будет потом делать какую-нибудь точку входя для OAuth, или наоборот для регистрации OpenID или еще чего-нибудь, не гори, что придется кучу копипасты хреначить и страдать.
756 2968766
>>2968704
Мы как раз уже месяц C#-backend-мидло-петушка ищем в команду. Только вот беда, что одни нихуя не знающие вкатунцы на собесы приходят. На столько вкатунцы, что я аж выхуеть не могу (типо девочки-тимлида, которая как aaync-await работает не знает, не говоря же об архитектуре). Хз чем анон ноет, если действительно шарит.
Мимо-озоноблядь
757 2968773
>>2968764
Ну это вряд ли придётся делать. Задача просто наваять сайт, куда наша компания будет загружать запрос на логистику и на него другие компании будут отвечать. Можно вообще не заморачиваться и ебануть два поля в бд: email, password и всё, но я хочу чтобы было хоть как-то по правильному. Вот решил asp.net Identity использовать и jwt токены, чтобы в react прокидывать
758 2968776
>>2968773
А почему не хочу в сервис выделять - лень + проект разрастётся. Щас у меня компакный проект, где минимум папок и т.д. Папка с сервисами всю малину попортит.
759 2968777
>>2968766
Хрюшу меняйте на мужика, желательно не пидора.
У нас такая же шляпа началась, как кун ХР съебал. Как только пизду выкинули на мороз и снова куна поставили - сразу нашли несколько нормальных человек.
760 2968786
>>2968766
Какая ставка? Интересно.
761 2968789
>>2968786
Если честно, то хз. Я обычный разраб, мне такая инфа не доступна. У нас инфу по вилке только лид и вышестоящее начальство видят.
762 2968880
>>2968730
Че это за говно? OAuth2 делай, епт.
763 2969010
>>2968880
Почитал я про OAuth2, но так и не понял зачем мне он нужен. Мне же нужна простенькая авторизация по email/password. К тому же я уже использую jwt токены. Мб я что-то не понял, опыта то в этом вообще нуль
764 2969013
>>2969010
Вот токен
765 2969138
Пацаны.
В общем.
Какая ситуевина.
Работал я над программулиной. На шарпе. Программулина - сервер.
Собственно. Разработал.
Все вроде как заебись.
НО. Возникла проблема.
1. Клиенты не хотят докер ставить(типа сервера на которые ставится моя хрень - не подключены к внешнему интернету, так что просто стянуть контейнер не получится)
2. Есть клиенты и с линуксом и с виндой.

При этом - качать сами по инструкции зависимости - тоже не хотят.
Говорят - хотим инсталлятор, чтобы далее-далее-далее-ок и все само.
Ну. Для винды - я взял и запихнул все с помощью InnoSetup. Вроде для винды решение ок.
Но для линукса - все еще остается проблема. Приходится писать шелл-инсталляторы, а там - такой, блядь, зоопрак. У кого-то деба, у кого-то редхат, кто-то на убунте, там учти что надо добавить PPA репки нужные, тут - скачай что-то.
При этом клиентам - весь этот юникс вей - до пизды на самом деле, им хочется чтобы поставил и работало.

В общем. Я, наверное тупой. Но разве нет какого-то инструмента, чтобы просто наклацал: дотнет, постгрес, нгинкс и вот этот вот архивчик поставь, из архивчика переложи в ~/server/www то что лежит в папке www, остальное - переложи в папку ~/server/back, создай демонов для постгреса и нгинкса.

Да. Проблема же еще в том, что программулина доступна на сайте, ее по идее кто хош должен иметь возможность скачать и поставить. Опять же с виндой - все ок. А как делать правильно в линуксе, чтобы не ебаться с зоопарком этих всех дистрибутивов - я так и не понял.
766 2969382
>>2969138
doker save и docker load
767 2969399
>>2969382
Докер сам никто ставить не хочет, няш.
maui + syncfusion 768 2969705
Всем здрасте, пишу курсач частью которого является мобильное приложение, выбор пал на maui, до этого пробовал работать с android studio – не понравилось. Так вот: начал использовать syncfusion listview, чтобы кайфово работать с фильтрацией данных(поиск и еще всякие параметры), т.к. не нашел в интернетах как можно сделать те же функции с использованием стандартного listview. Накидал логику с дизайном, запустил и... узнал что syncfusion, оказывается, платный, конечно есть бесплатный пробный период, но ныне доступ к сайту забугорных чуваков закрыт для российского пользователя, так что не знаю есть ли смысл его получать. Так вот, можно ли как-нибудь кинуть sf на подписку и дать проекту поработать чуть дольше, чем две минуты? Либо же есть способ реализовать необходимые мне функции через стандартный инструмент?
769 2969819
>>2969705
Ну. Хм.
Вот давай подумаем. Можно ли это сделать с помощью стандартных инструментов.
Представим, что мы - синфьюжн и у нас еще нет этого навороченного листвью. Учитывая, что мы знаем, что в будущем сделаем - наверное способы есть.
Допустим, тебе нужна фильтрация. Ее нет из коробки.
Что бы мы могли сделать, имея некоторый опыт работы с интерфейсом других программ?
Ну. Например - сделать кнопку: фильтр, при клике на которую - будет попап, в котором бы можно было настроить фильтры. Настраиваем фильтры, жмакаем применить, фильтр применяется на вью-модельевскую коллекцию.
Далее - мы хотим еще поиск какой-то. Как это можно реализовать? Берем инпут в который можно вводить текст. Делаем кнопку с лупой. Если нажали кнопку с лупой и текст инпута не пустой - применяем какое-нибудь contains на коллекцию вью модели.
Для курсача - этого более чем достаточно.
770 2970124
Фарпаны, а есть кто учился с ментором?
Бывает ли такое, что за условные 5тыр в месяц человек доводит тебя с нуля (ну или с хеллоуворлдщика) до скиллов, позволяющих начать искать работу?
Имею ввиду, конечно, реальные скиллы программирования, а не как жёстко наябывать в резюме

Гугл выдает сайты getmentor, solvery и т.д. Интересует, есть ли итт люди, которые этим пользовались и пришли к успеху? Или успешные ASP.NET господа, практикующие менторство?
771 2970164
>>2970124
Не учился и не верю что кто-то с нормальными скиллами будет тратить свое время, чтобы реальные скиллы дать, если это не вуз.

По своему опыту - теория + много практики дают самый ощутимый буст.

Могу краткий гайд для фуллстека дать.

Теория
- Основы(системы счисления, структуры данных, алгоритмы, терминология, сети, и т.д.)
- SQL на уровне - создать БД с таблицами, базовые операции чтения-записи-удаления-изменения, разные виды JOIN'ов, нормальные формы(хотя бы до 3й), базовое администрирование(создать пользователя, настроить ему разрешения для ограниченного списка операций)
- Сам шарп + .NET(понимать, что это вообще за зверь, что такое CLR, общие вещи для .NET'а типа модулей, сборок и вот этого всего)
- ASP.NET Core - что такое, зачем
- Любой фреймворк для фронта из тройки(Angular, React, Vue), на уровне того, что ты можешь туду лист сделать и отправить запросики на сервер, получить жсончики в ответ и отрисовать этот самый ТуДу лист
- Докер
- Линукс на уровне - можешь подключиться по SSH, посмотреть логи grep'ом, посмотреть сколько там места на сервере, поправить конфиги через vim, создать сервис, положить куда надо сертификаты, обновить пакеты, настроить сеть
- Архитектура и паттерны(базово, можешь MVC назвать, MVVM, месседж бас)
Очереди(на уровне - можешь в докере подрубить ребит и 2 сервиса через очередь заставить общаться)

Практика - берешь и выбираешь любой проект который тебе интересно, если ниче не интересно - CMS/Интернет магазин/Автоматизация какой-нибудь библиотеки/IOT хуйня для умного дома.
Собственно, делаешь проект. Пока не сделаешь на том уровне, что сам бы пользовался хотя бы иногда. В процессе - набиваешь шишки, понимаешь, нахуя вся хуйня вообще нужна.
772 2970220
>>2970124

>что за условные 5тыр в месяц


За 50К в месяц я был бы готов уделить тебе максимум по 4 часа в неделю (разово или разбитыми на 2 части). Сам подумай сколько нихуя ты получишь за 5К.

Скилы позволяющие начать искать работу (именно 'начать искать', а не 'найти') набрать в таком режиме можно где-то за полгода-год. При условии, что ты не тупой, имеешь хоть какую-то базу в программировании и готов сам ебашить все свободное время, чтобы научиться.

Мимо, успешный ASP.NET господин.
773 2970241
>>2970220
Чёт слишком дохуя ты свое время оцениваешь. Тебя на работе меньше ценят, уёба. 3к в час блять. Соси хуй и отвечай бесплатно в треде, инцел.
774 2970250
>>2970241
Я не он, но оценка более-менее справедливая. Нормальный разраб с опытом получает около 250к в месяц. Это, при 23 рабочих днях в месяц и 8 часовом рабочем дне даёт где-то 1.35к в час. Учитывая, что менторить вкатунца придется после работы, то это должно идти по сверхурочной ставке, тобишь x2. Вот и выходит 2.7к ч в час.
Но будем честны, вкатунец даже косарь в час скорее всего не потянет.
775 2970257
>>2970241
Чел. Время после работы - это личное время, и задешево его проебывать - никто, имеющий нормальные скиллы - не будет.
Тем более, что для нормального менторинга надо:
Оценить уровень
Составить программу в зависимости от уровня долбоеба
Составить задания
Следить за выполнением
Выяснять че долбоебу не понятно
Подсказывать
Разбираться в его говнокоде

Плюс - это требует от того кто менторит - желание именно учить.
Лично я бы дешевле чем 100к в месяц, по 5 часов в неделю(по часу в день, либо 2.5 в выходные вечером). И то, только если бы увидел, что чел реально мотивированный и будет то что я ему даю - делать по 6-8 часов в день сам, а я - только проверять и корректировать, отвечать на вопросы.

Ну а если бы я просто хотел заработать - мне проще связаться со знакомыми и взять на выходные халтурку. Там не нужно объяснять, готовить что-то, просто взял, сел и сделал, получил денежки и пошел по делам.
776 2970260
>>2970257

>Там не нужно объяснять, готовить что-то, просто взял, сел и сделал, получил денежки и пошел по делам.


У меня проще взять дежурство на выходной во время накатки релиза. Из обязанностей только быть на связи (я на удаленке) и отвечать ребятам с прода на вопросы по установке сервисов. Иногда подкинуть им пару конфигов или скриптов для базы если они забыли. Все остальное время сидишь и занимаешься своими делами, хоть в игры играй, хоть сериалы смотри. Можно вообще куда-нибудь из дома свалить, главное ноут с собой взять.
8 часов практически нихуя не деланья = +20К
777 2970261
>>2970257
>>2970250
Да мне похуй, когда он там будет жопу свою поднимать. Че блять если вы на подработку устраивайтесь в такую же позу встаете, хуе мое, личное время, давай х2. Нахуй вас пошлют.
Тут тоже работа, пошел бы он нахуй с такими расценками, проще стажером пойти, и вообще нихуя не платить, а этот уеба будет забесплатно слушать мое нытье и терпеть.
778 2970273
>>2970261

> если вы на подработку устраивайтесь в такую же позу встаете, хуе мое, личное время, давай х2


Ну как бы да. Обычно, когда всякие халтурки беру, то делаю по более высокой ставке, чем если бы просто работал. В большинстве случаев люди это понимают и относятся нормально.

> проще стажером пойти, и вообще нихуя не платить


Так нихуя не умеющего вкатунца даже стажёром не возьмут. Нахрена на него свое время тратить, если он самых базовых вещей не умеет

Если хочется дешевле, то welcom на всякие курсы от всяких скиллбоксов и гикбрейнсов. Там тебя поменторят.
779 2970281
>>2970261

>Да мне похуй, когда он там будет жопу свою поднимать.


Тебе похуй, ему тоже похуй. Все при своих остаются.

>Че блять если вы на подработку устраивайтесь в такую же позу встаете, хуе мое, личное время, давай х2.


Так а смысл брать вторую работу за такие же или меньшие бабки, если их можно и на основной работе получить, просто за переработки или доп. задачи? Подработку как раз и берут, когда нужно срубить денег побольше и побыстрее.

>проще стажером пойти


В 2023-м? Ну удачи, чо. Расскажешь потом.
780 2970287
>>2970273

>если он самых базовых вещей не умеет


Ну это-то можно и без ментора поправить, имхо.
>>2970281

>Так а смысл брать вторую работу


Семью там создать. Это жи тет а тет. Что ты понимаешь!

>В 2023-м? Ну удачи, чо.


А зачем тогда ментор?

>Расскажешь потом


Ну мне стажерство предложили, хотя я жабист...
781 2970667
>>2970164
О, спасибо, няш!

А что из этого можно опустить или наоборот, минимум, который нужно оставить, если только на БЭКА учиться?
782 2970678
>>2970667

>если только на БЭКА учиться?


Лол, это по сути и есть минимальны стек на бэкендера. Из того, что я вижу можно выкинуть разве что MVVM, ну и из js фреймворков оставить только один, реакт например.
783 2971025
Ребят, а вот у ITVDN в курсах
.NET Developer
ASP.NET MVC Developer,
ASP.NET Core Developer
чем они, блять, отличаются? Особенно последние два

встречается ADO.NET. Это что-то устаревшее?
784 2971070
>>2971025

>встречается ADO.NET. Это что-то устаревшее?


Это база на которой по сути работают и EF и даппер и прочие ормки.
Знать хотя бы поверхностно её лишним не будет, просто хотя бы для понимания, что там под капотом происходит. Но если тебя на собесе будут на полном серьезе про то как она работает спрашивать, с прицелом на то, что "у нас все на чистом ADO.NET работает", то съебывай оттуда нахуй, без оглядки.
785 2971222
Это снова я >>2968305. Попытался на блокноте писать. Но из-за отсутствия библиотек (поправьте если ошибаюсь) условные диалоговые окна по другому пишутся как в книге указано. Да и каждый раз в командной строке писать немного душно. Поэтому ещё раз прошу посоветовать выход из указанной в посте ситуации. Большое спасибо и с наступающим новым годом.
изображение.png49 Кб, 643x524
786 2971228
Здравствуйте. Это схема из спецификации OAth2.0. Вопрос такой: где мне реализовывать регистрацию, восстановление пароля, смену почты? Насколько я понял, то Authorization Server нужен для того, чтобы выдавать access токены, а это значит, что делать контроллеры и сервисы для регистрации на нём нельзя? Где тогда всё это располагать? На ресур сервере? - вряд ли. Решил использовать OpenIddict библиотеку. У них там есть примеры с кодом, но нигде нет примера с регистрациеймб я плохо искал, у них пользователи тупо зашиты в коде. Помогите, пожалуйста. https://github.com/openiddict/openiddict-core - сыллка на OpenIddict
787 2971233
>>2971228
Почему нельзя? В кейклок условно это все делается установкой пары галочек. Кстати, а нахуя вы сами велосипедите сервера авторизации?
788 2971234
>>2971233
А есть готовые? Я просто хз, впервые делаю проект коммерческий, поэтому не хочется проблем с оплатой лицензий и т.д. Знаю, что есть IdentityServer4, но по-моему он больше не поддерживается, а последующие версии платные.
789 2971235
>>2971234
https://www.keycloak.org/
Попенсорцовый, на жабе.
790 2971238
>>2971235
Э. А я хочу на шарпе всё. Тем более я уже сделал регистрацию/авторизацию/смену пароля/аллаха на Identity ASP.NET Core. Просто хочу прикрутить OAuth2. Там мне выше кто-то написал, что это всё (Identity ASP.NET Core) хуйня и надо OAuth заделать. Вот сижу и думаю, как это правильно сделать
791 2971239
>>2971238

>А я хочу на шарпе всё.


Ну сделают на шарпе сервер авторизации такого уровня, тогда и приходи. А так, вроде он не сложно интегрируется https://nikiforovall.github.io/aspnetcore/dotnet/2022/08/24/dotnet-keycloak-auth.html
792 2971241
Тем более, когда буду с завода увольняться я сис админ, скажу что сам реализовывал аутентификацию. Думаю, что это будет плюсом для меня
image.png191 Кб, 809x585
793 2971292
>>2971241

>скажу что сам реализовывал аутентификацию


Ты не понимаешь ddd.
794 2971318
>>2971292
Но я хочу сам сделать. Я уже в курсе, что есть готовое решение в виде кейклока
image.png4 Кб, 259x116
795 2971392
Допустим, у меня есть прикриплейд.
Собственно. Проект с Api - нужен чтобы внешнему консьюмеру давать данные. Проект QueueWorker - нужен чтобы отделить запись и чтобы если сервис не лег если много кто-то и часто писать будет.
Стоит ли делать третий проект для внутренних апишек, типа это могут быть и запись и чтение, но в специальном формате, который не идет наружу, а нужен для какой-то специальной логики внутренним сервисам?
Или это все я хуйней страдаю и переусложняю, а достаточно было один проект сделать и в нем все хуярить?
796 2971486
>>2971222
Чел, ну ёмана. Из тех кто здесь сидит (да и вообще тех кого я знаю) онлайн компиляторы нужны примерно никому, поэтому для того чтобы дать тебе совет, это нужно лезть в интернет, пробовать каждый, изучать и т.д. Кому это нахрен нужно.
Ты сам давно уже мог ввести в поиске "C# online compiler" и пробовать их изучать и работать.

Со своей стороны могу посоветовать, если есть планшет на андроиде, то можешь попробовать вот это:
https://4pda.to/forum/index.php?showtopic=1009215
Там нормальная IDE с автодополнением. Можно ставить нюгеты, поддерживает даже ASP.NET и можно там же компилить и собирать, есть куча примеров и уроков.
image.png237 Кб, 400x400
797 2971487
>>2971233

>кейклок


Говнина ебаная.
798 2971614
почему в таком прекрасном языке нет горутин и виртуальных тредов? В го и джаве есть, а в божественном шарпе нет.
799 2971662
>>2971614
Сможешь внятно объяснить, чем эти горутины/виртуальные треды лучше TPL?
800 2971669
>>2971487
Аргументы?
801 2971763
>>2971486
Извините, я только учусь и очень туго соображаю. Я вот прочитал и вроде как можно сделать портабл вариант Visual Studio (флешку к ноуту подрубить можно). Это рабочий вариант?
802 2972090
Ребят, я сейчас с ума сойду. Почему коды выводит True?..

using System;

public class A
{
public int t;
}
public class B : A
{
}

class Program
{
static void Main()
{
A a = new A()
{
t = 3
};

B b = a as B;
Console.WriteLine(b == null);
}
}
803 2972095
>>2972090
Потому что a ссылается на объект типа A, а не B, и as не может привести тип к B, поэтому возвращает null.
Привести что угодно к какому угодно типу нельзя, здесь не джаваскрипт и не питон. Можно привести к реальному типу объекта или его предку, но не к потомку, и не важно, что в потомке нет новых полей.
804 2972097
>>2972090

>B b = a as B;



Рискну предположить, что b == null, т.к. ты создал переменную b, но не проинициализировал её. Т.е. наверн надо написать B b = new a as B
805 2972100
>>2972090
Потому что нельзя родительский тип привести к наследуемому типу.

Теперь давай думать, а почему.

Можно метафору представить. Вот представь, что у тебя есть некий абстрактный транспорт, который может ехать. Вот, ты создал этот транспорт. А теперь идешь и говоришь всем, что это вертолет. Люди смотрят, видят, что ехать-то может, а винтов не видят, кабины не видят.

А можно не метафору а попробовать подумать, как это примерно должно работать для компуктера в упрощенном виде(это не совсем то как оно работает в реале, но для наглядности).

Вот допустим, у тебя есть некая структура данных в памяти вида:

struct A{
int t;
void⋆ ctor1;
void⋆ destructor;
void⋆ methodsTable;
void⋆ virtualMethodsTable;
}

struct B{
A⋆ parentGuts;
void⋆ parentCtor1;
void⋆ ctor1;
void⋆ destructor;
void⋆ parentMethodsTable;
void⋆ methodsTable;
void⋆ virtualMethodsTable;
}

Ну так вот. Как видишь, структура B - знает что она наследник A. А что это значит? А это значит, что в принципе - никакой сложности с тем, чтобы использовать B как A - не возникает и мы легко приводим тип к родительскому.
Но вот структура A - ничего о наследниках своих не знает. Даже если они пустые и нихуя в них нет. Как компуктер догадается, где что должно лежать для струткуры A если мы хотим представить ее как B? Никак не догадается в обычном случае, если мы хитрые колдунства совершать не будем.
805 2972100
>>2972090
Потому что нельзя родительский тип привести к наследуемому типу.

Теперь давай думать, а почему.

Можно метафору представить. Вот представь, что у тебя есть некий абстрактный транспорт, который может ехать. Вот, ты создал этот транспорт. А теперь идешь и говоришь всем, что это вертолет. Люди смотрят, видят, что ехать-то может, а винтов не видят, кабины не видят.

А можно не метафору а попробовать подумать, как это примерно должно работать для компуктера в упрощенном виде(это не совсем то как оно работает в реале, но для наглядности).

Вот допустим, у тебя есть некая структура данных в памяти вида:

struct A{
int t;
void⋆ ctor1;
void⋆ destructor;
void⋆ methodsTable;
void⋆ virtualMethodsTable;
}

struct B{
A⋆ parentGuts;
void⋆ parentCtor1;
void⋆ ctor1;
void⋆ destructor;
void⋆ parentMethodsTable;
void⋆ methodsTable;
void⋆ virtualMethodsTable;
}

Ну так вот. Как видишь, структура B - знает что она наследник A. А что это значит? А это значит, что в принципе - никакой сложности с тем, чтобы использовать B как A - не возникает и мы легко приводим тип к родительскому.
Но вот структура A - ничего о наследниках своих не знает. Даже если они пустые и нихуя в них нет. Как компуктер догадается, где что должно лежать для струткуры A если мы хотим представить ее как B? Никак не догадается в обычном случае, если мы хитрые колдунства совершать не будем.
806 2972156
>>2972090
Ты должен понимать, что А : B это не какой-то единый организм. А может существовать как отдельный независимый класс и у него может быть очень много наследников. Но вот у B наследник конкретный.

Когда ты инициализируешь B, то он инициализирует сперва родителя A, потом сам себя. В итоге ты можешь обращаться как к B, так и А. Ты можешь сам это проверить, добавив вывод в консоль в обеих конструкторах A и B какой-то текст, затем посмотреть что происходит.
public class A
{
public A()
{
Console.WriteLine("Constructor A");
}
}

public class B : A
{
public B()
{
Console.WriteLine("Constructor B");
}
}

Если ты создашь новый экземпляр A, то в консоли будет это
Console.WriteLine("Constructor A");

Если ты создашь новый экземпляр B, то в консоли будет это
Console.WriteLine("Constructor A");
Console.WriteLine("Constructor B");


А если сделать наоборот? Ну предположим, что при инициализации A, инициализируется наследник B. Почему бы так не сделать? Теоретически все норм, но что если у тебя сотни наследников разных типов: C, D, R, F, J и т.д. ? Какой из них инициализировать? Все сразу? Ерунда какая-то.

Или представь, что ты создаешь еще один класс-наследник, работа которого зависит от параметров в его конструкторе.
public class Zalupa : A
{
public Zalupa(string lastName, string firstName){. . .}
}

Мы видим, что невозможно создать новый экземпляр Zalupa без ввода параметров lastName и firstName. Но ты берешь и инициализируешь класс A, а потом пытаешься при помощи него добраться до класса Zalupa, у которой нет информации о lastName и firstName.
A a = new A()
Zalupa z = a as Zalupa;
Тут как минимум нужна машина времени или хз что.
806 2972156
>>2972090
Ты должен понимать, что А : B это не какой-то единый организм. А может существовать как отдельный независимый класс и у него может быть очень много наследников. Но вот у B наследник конкретный.

Когда ты инициализируешь B, то он инициализирует сперва родителя A, потом сам себя. В итоге ты можешь обращаться как к B, так и А. Ты можешь сам это проверить, добавив вывод в консоль в обеих конструкторах A и B какой-то текст, затем посмотреть что происходит.
public class A
{
public A()
{
Console.WriteLine("Constructor A");
}
}

public class B : A
{
public B()
{
Console.WriteLine("Constructor B");
}
}

Если ты создашь новый экземпляр A, то в консоли будет это
Console.WriteLine("Constructor A");

Если ты создашь новый экземпляр B, то в консоли будет это
Console.WriteLine("Constructor A");
Console.WriteLine("Constructor B");


А если сделать наоборот? Ну предположим, что при инициализации A, инициализируется наследник B. Почему бы так не сделать? Теоретически все норм, но что если у тебя сотни наследников разных типов: C, D, R, F, J и т.д. ? Какой из них инициализировать? Все сразу? Ерунда какая-то.

Или представь, что ты создаешь еще один класс-наследник, работа которого зависит от параметров в его конструкторе.
public class Zalupa : A
{
public Zalupa(string lastName, string firstName){. . .}
}

Мы видим, что невозможно создать новый экземпляр Zalupa без ввода параметров lastName и firstName. Но ты берешь и инициализируешь класс A, а потом пытаешься при помощи него добраться до класса Zalupa, у которой нет информации о lastName и firstName.
A a = new A()
Zalupa z = a as Zalupa;
Тут как минимум нужна машина времени или хз что.
807 2972327
>>2971392
Э. Стой. сервак авторизации, который я пытаюсь запилить - это вообще отдельное приложение, которое запускается отдельно. Основное приложение, где планируются круды по слоистой архитектуре сделано и на него будет переадресация после авторизации на сервере авторизации. А вообще всё можно в одном проекте захуярить, меня никто не контролирует в этом плане да и некому, я тут единственный (на работе), кто может хоть что-то написать, помимо 1C программистов
808 2972329
>>2972327
Вернее переадресация будет на фронт, который планирую на реакте написать. А вот уже с фронта круд запросы будут на бекенд поступать
809 2972367
Помогите плиз с програмой - написал консольное приложение C# обработки PDF файлов (конвертация в PNG файлы с использованием Ghostscript.NET.Processor). Как в нее добавить многопоточность/асинхрон обработки данных, чтобы обработка данных была быстрее?
810 2972374
>>2972367
async/await бахни. Авось заработает.
811 2972426
>>2972374

> async/await бахни. Авось заработает.


> конец 2к23


> программач.итоги

812 2972445
>>2972374
>>2972426
Бахнул async/await по канонам - не заработало)
image.png676 Кб, 1561x641
813 2972472
Продолжаю начинать смотреть купленные на торрентах видосы от ITVDN.
Курс называется "ASP.NET Базовый".
И, что-то чувствую, подвох. Скажите, пожалуйста, вот эти все aspx на скрине - это тоже всё устаревшее?
814 2972504
>>2972445
Ясен хуй не заработает, если методы библиотеки не являются асинхронными. Да и в целом асинхронность существует для того, чтобы не стопорить параллельные задачи, типа работы UI.

Нужна многопоточность, но я ни разу не работал с Ghostscript.NET.Processor, так что не помогу.
815 2972517
>>2972504

>Ясен хуй не заработает, если методы библиотеки не являются асинхронными


Как же хороша многопоточка в сишорпе. Не то что в джаве. Виртуальные треды не нужны, кстати) Асинк/эвейты - интуитивно понятное решение)
816 2972538
>>2972472
Судя по виду это скорее всего ASP.NET WebForms, которое только на .NetFramework и это древнее говно мамонта. Бросай нахуй смело, если только не рассчитываешь работать с какой-нибудь совсем легаси парашей.
817 2972543
>>2972517
Не, ну ты можешь создать таску и выполнить асинхронно неасинхронный метод, но в целом данное решение не всегда может дать положительный эффект.
818 2972603
>>2972543
Если ты имеешь ввиду просто сделать

Task DoAsync(){
DoSync();
return Task.CompletedTask;
}

То этот код выполнится синхронно.

Если

await Task.Run(DoSync);

То это тоже выполнится синхронно, но в тредпуле.

Если хочется параллельности без лишних изъебств, то надо использовать ParallelQuery. Ну или через тредпул как деды, а тасками или прямо дергать тредпул - уже самому решать.
image.png26 Кб, 856x522
819 2972731
>>2972327
Я не знаю зачем ты мне ответил. Но раз никто не ответил, давай я к тебе долюблюсь, потому что ты либо странно выражаешься, либо что-то не так делаешь. А мне - скучно.

Так вот. В чем проблема того механизма авторизации, который ты указал. Проблема простая. Твой сервер авторизации с какого-то фига знает либо про основное приложение, либо про веб-сервер с фронтом, который у тебя ХЗ на чем будет, не суть.
Как по хорошему должно быть?
У тебя должен быть гейтвей, который проверяет, какую апишку хотят дергать. Это такая-то единая точка доступа ко всем апишкам. Так вот, этот гейтвей - таки знает, что если апишка требует авторизации, а никакого токен валидного не передано - он должен либо 401 отдать, либо редеректнуть на сервер авторизации(зависит от того какая у тебя там схема, с токенами, куками или еще что-то ты там придумал).
Дальше.
Получили токен авторизации. Все, теперь гейтвей пропустит запрос к нужной апишке.

Это максимально простой и понятный флоу, который подходит для маленьких и средних проектов.

Для гейтвея - можешь использовать что удобно. Можешь еще один Nginx настроить, можешь - взять Traefik, можешь - Ocelot. Самописное - лучше не брать, потому что заебешься, хотя иногда - и это норм.

Теперь. На всякий случай уточняем. Данные пользователя - ты не хранишь в открытом виде. Никакие. Потому что если это РФ, твое ПО завернут на ФЗ о персональных данных, и тогда придется плясать вокруг пидорасов, которые 100500 денег за услуги по безопасности вокруг требуют. Оно тебе надо? Не надо. Все шифруем-хешируем. Пароли - солим и тоже хешируем.
Далее. Через пару месяцев после ввода в эксплуатацию, тебе скажут: У нас есть корпоративные учетки/гугловские учетки/учетки госуслуг, потому - сразу надо продумать механизм авторизации-регистрации через других поставщиков. Как минимум - на бумаге и в модели заложить, чтобы было куда потом расти.
Далее. С вероятностью 99% двухфакторная аутентификация потребуется. Сейчас в принципе уже почти везде ее требуют, если себя уважают. Потому - хотя бы СМС придется уметь отправлять.
Далее. РФ, а значит ЭЦП. Вход по ЭЦП наше все. Особенно если это завод, как ты сказал, ведь через полгодика-год, вашу приблуду захотят сертифицировать в ФСБ, а там без ЭЦП - тебя сразу нахуй пошлют.
То что забывают чаще всего при первой версии ПО для авторизации-аутентификации. Восстановление пароля. Даже если одмен руками пользователей заводит - механизм сброса пароля /восстановления доступа должен присутствовать.

В общем. Вроде ниче не забыл.

Как же пиздец мне скучно. Вы бы знали. Еще и прямо в отпуске - компуктер сдох с игрульками, которые собирался пройти. Жду, когда привезут новый. Обидно - пиздец.
image.png26 Кб, 856x522
819 2972731
>>2972327
Я не знаю зачем ты мне ответил. Но раз никто не ответил, давай я к тебе долюблюсь, потому что ты либо странно выражаешься, либо что-то не так делаешь. А мне - скучно.

Так вот. В чем проблема того механизма авторизации, который ты указал. Проблема простая. Твой сервер авторизации с какого-то фига знает либо про основное приложение, либо про веб-сервер с фронтом, который у тебя ХЗ на чем будет, не суть.
Как по хорошему должно быть?
У тебя должен быть гейтвей, который проверяет, какую апишку хотят дергать. Это такая-то единая точка доступа ко всем апишкам. Так вот, этот гейтвей - таки знает, что если апишка требует авторизации, а никакого токен валидного не передано - он должен либо 401 отдать, либо редеректнуть на сервер авторизации(зависит от того какая у тебя там схема, с токенами, куками или еще что-то ты там придумал).
Дальше.
Получили токен авторизации. Все, теперь гейтвей пропустит запрос к нужной апишке.

Это максимально простой и понятный флоу, который подходит для маленьких и средних проектов.

Для гейтвея - можешь использовать что удобно. Можешь еще один Nginx настроить, можешь - взять Traefik, можешь - Ocelot. Самописное - лучше не брать, потому что заебешься, хотя иногда - и это норм.

Теперь. На всякий случай уточняем. Данные пользователя - ты не хранишь в открытом виде. Никакие. Потому что если это РФ, твое ПО завернут на ФЗ о персональных данных, и тогда придется плясать вокруг пидорасов, которые 100500 денег за услуги по безопасности вокруг требуют. Оно тебе надо? Не надо. Все шифруем-хешируем. Пароли - солим и тоже хешируем.
Далее. Через пару месяцев после ввода в эксплуатацию, тебе скажут: У нас есть корпоративные учетки/гугловские учетки/учетки госуслуг, потому - сразу надо продумать механизм авторизации-регистрации через других поставщиков. Как минимум - на бумаге и в модели заложить, чтобы было куда потом расти.
Далее. С вероятностью 99% двухфакторная аутентификация потребуется. Сейчас в принципе уже почти везде ее требуют, если себя уважают. Потому - хотя бы СМС придется уметь отправлять.
Далее. РФ, а значит ЭЦП. Вход по ЭЦП наше все. Особенно если это завод, как ты сказал, ведь через полгодика-год, вашу приблуду захотят сертифицировать в ФСБ, а там без ЭЦП - тебя сразу нахуй пошлют.
То что забывают чаще всего при первой версии ПО для авторизации-аутентификации. Восстановление пароля. Даже если одмен руками пользователей заводит - механизм сброса пароля /восстановления доступа должен присутствовать.

В общем. Вроде ниче не забыл.

Как же пиздец мне скучно. Вы бы знали. Еще и прямо в отпуске - компуктер сдох с игрульками, которые собирался пройти. Жду, когда привезут новый. Обидно - пиздец.
820 2972798
>>2972731
Ничёсе ты выдал. Спасибо большое. Восстановление пароля уже есть, двухфакторку щас делаю, но пока только по email'у. Данные само собой в открытом виде не хранятся. А вот авторизация через другие учётки - это как раз OAuth 2, который я пытаюсь реализовать. А вот про гетвей вообще не знал, буду делать
821 2972808
>>2972731
А ещё такой вопрос. Во у меня есть таблицы от Identity ASP.NET Core с ролями, пользователями и т.д. Как мне связывать, допустим, написанные пользователем новости в бд? Правильно понимаю, что нужно сделать две бд: identity и news. А связывать это всё, допустим, Guid айдишником пользователя. Или можно вообще всё в одну бд спихнуть и сделать связи от identity user -> news
822 2972838
>>2972808
Все от архитектуры зависит.
Если разные приложения с отдельными базами, то ты в приложении где news - делаешь таблицу
Условно.
Subscribers(TopicId, UserId).
Для реализации фичи - этого обычно достаточно.

Минус - консистентность системы. Если пользователя удаляют из Identity - тебе нужно либо забить в остальных частях системы, либо придумывать механизм как чистить(через очередь, каким-то воркером по крону и т.д.).

Конечно - удобнее было бы это все в одной БД держать. Но тогда при росте приложения - начинается боль. Чем больше база, тем сложнее ее поддерживать, тем больше соблазна - переложить часть логики в нее и вообще. А если логика а БД - это значит тесты уже не такие дешевые. Да.

Короче. Ответ на вопрос - зависит.

Я бы делал во втором приложении явную таблицу ПользователиПриложения(условно), в которой столбец - IdentityUserId. Вот на основе этой таблицы бы уже вся хурма с подписками и прочим в этом приложении. Чтобы не придумывать всякое разное, когда окажется, что надо всякие настройки хранить помимо подписок. Типа реально же - потом надо будет по регионам разбить твои новости, языкам, заблоченым/пользователям. Все это в Identity - не хочется пихать все. Опять же - это дает возможность, если надо, войти, попользоваться приложением в каком-то ознакомительном режиме, потом сохраниться и привязать IdentityUserId и не потерять что ты там настроил.
823 2972882
>>2972838
Понял, пасиб
824 2973221
Аноны, где посмотреть исходники дефолтных классов?
Если нажать по F12, то мне выдает поверхностную информацию "из метаданных", в гугле выдает какой-то бред.

К примеру, мне нужен класс
System.Windows.Media.TranslateTransform
Вот "типа" исходники
https://github.com/microsoft/CodeContracts/blob/master/Microsoft.Research/Contracts/PresentationCore/Sources/System.Windows.Media.RotateTransform.cs

Но если посмотреть, там метод public RotateTransform(double angle) абсолютно пуст.
image.png100 Кб, 805x388
825 2973236
>>2972538
Чел, чел, спасибо!

А вот это актуалочка?
MVC - на слуху. Entity Framework - тоже.
Смущает Web API. Razor-страницы
Темы курса такие:
Урок 1: Вступление. Установка. Ознакомление
Урок 2: Структура базового проекта. Что такое Middleware
Урок 3: Конфигурация. Основы конфигурации.
Урок 4: Понятие маршрутизации
Урок 5: MVC. Основные значения
Урок 6: Модели
Урок 7: Представления
Урок 8: Контроллеры
Урок 9: Web API. Razor-страницы
Урок 10: Entity Framework Core
Урок 11: Публикация приложения. Доступные сервера
826 2973270
>>2973236

>Смущает Web API. Razor-страницы


Web API норм. Насчет razor pages я х.з. вроде старый, но говорят, что зная их, можно легко въехать в тот же Blazor.

Я бы тебе советовал вот это для начала прочесть:
https://metanit.com/sharp/aspnet6/
Разобрать каждую тему, тогда уже хоть какое-то понимание появится.
А потом уже лезть во всякие MVC и т.д.
827 2973302
>>2973221
Студия криво работает с некоторыми библиотеками и вместо декомпиляции показывает метаданные.
Исходники можно почекать на https://source.dot.net/

Конкретно для RotateTransform класс состоит из двух частей
1.
https://source.dot.net/#PresentationCore/System/Windows/Media/Generated/RotateTransform.cs
2.
https://source.dot.net/#PresentationCore/System/Windows/Media/RotateTransform.cs

Можно установить расширение
https://marketplace.visualstudio.com/items?itemName=EfreyKong.Ref12-VS2022
Оно по сути, по нажатию F12 будет запускать в браузере ссылку на тот же https://source.dot.net/
828 2973335
насколько бредово пилить экстеншен на сеттер интерфейса?
что-то типа:
public int Hueta
{
get => hueta;
set => hueta = this.SetHueta(value);
}
KDT7-i8-gyDuHxdSeVqJx7kKYk-960.jpg113 Кб, 960x793
829 2973690
>>2973335
Интерфейса? Он же абстрактный, там нет сеттеров.
И зачем тебе пилить дополнительный статический класс, чтобы работать с другим экземпляром?

Какова конечная цель?
830 2973706
Как комбинировать partial static классы?

Допустим в одной библиотеке у меня есть класс partial static MyLibrary.Math
И в другой библиотеке partial static MyLibrary.Math

Вторая библиотека импортирует первую и я ожидаю, что в классе Math мне будут доступны методы из первой библиотеки. Но я получаю конфликт имен. Разве partial не для этого создан?
831 2973743
Встретился с такой вот таким поведением.

В общем. Смотрите. Есть у меня класс билдер приложения. Делал по принципу миддлваров.
Т.e. Use(Func<Context, CancellationToken, Task> handler, Func<Context, CancellationToken, Task> next, CancellationToken ct);

Собственно.
У меня есть миддлварь вида:

(ctx, ct) => {
try{
if(next!=null) await next(ctx, ct);
}
catch(Exception e){
_logger.LogError(e);
}
}

Думаю понятно, что должен идти первым и задуман чтобы обрабатывать все ошибки которые не обработаны ранее.

И вот какая фигня. Ниже - идет загрузка dll, та dll загружает уже другую dll и там где-то кидается исключение, которое вот этот вот обработчик не ловит, и никто тоже не ловит; но при этом - ASP'шный обработчик ошибок как-то таки это все ловит, лул.

Чего делать - я не знаю. И что происходит - тоже не понимаю. Типа я ожидаю что исключение обработается. Оно не обрабатывается. Ну ок. Не обрабатывается, я ожидаю что тогда программа упадет. Но она тоже не падает.
Как искать-то причину и что вообще происходит - я хз.
Какие-нибудь зацепки?
832 2973761
>>2973743
async void?
833 2973766
>>2973690
у меня иерархия наследования вышла такой ебанутой и базовый класс вышел настолько толстым, что я решил лучше все переписать. пытаюсь обобщить и убрать из базового класса как можно больше функционала, но понял уже что так насиловать интерфейсы нельзя
834 2973788
>>2973335
В reactive ui так сделано
835 2973886
Блядь, открыл первую главу учебника, и охуел с того, как тут много рассказывается про фреймворки .NET, .NET Core, ASP.NET Core и т д.

Есть у кого-то инфографика того, что придется изучать?

Правильно ли я понимаю, что есть несколько языков - C#, F#, VB. Всем им доступна среда исполнения .NET Core, которая упаковывает и запускает программы, конфигурирует библиотеки? Слово Core вроде бы убрали? Все верно?
836 2973893
>>2973886
Достаточно ли для понимания того, что как и у Java, у сисярпа есть виртуальная машина, которая исходный код на нем превращает в CIL (или IL), и потом исполняет, + кроссплатформенно?
837 2973910
>>2973886
>>2973893
В принципе понимание верное, только

>Всем им доступна среда исполнения .NET Core,


сама среда называется CLR (Common Language Runtime).
838 2973914
>>2973910
Спасибо!
839 2973921
>>2973886
.NET и .NET Core это сейм щит.
.NET Core был, когда .NetFramework, но последнее говно мамонта иссохло, и .NET Core стал просто .NET

>Правильно ли я понимаю, что есть несколько языков - C#, F#, VB. Всем им доступна среда исполнения .NET Core, которая упаковывает и запускает программы, конфигурирует библиотеки? Слово Core вроде бы убрали?


.Net - это семейство программных продуктов, включающих в себя языки программирования, библиотеки, инструменты и другие компоненты, необходимые для создания приложений.

Код C#, F# и VB переводится в промежуточный язык CIL.
Ты даже можешь создать один проект на VB, а другой на C# и оба проекта будут прекрасно взаимодействовать (за исключением пары нюансов).
840 2973930
>>2973706
Так как ты хочешь - никак.

Partial - это сахар, который позволяет разделить исходный код по разным файлам в пределах одного проекта.
Под капотом, после компиляции, это все равно будет один класс в пределах одной сборки.
841 2973946
>>2973921

>Ты даже можешь создать один проект на VB, а другой на C# и оба проекта будут прекрасно взаимодействовать (за исключением пары нюансов).


Для любителей извращенного, при желании можно даже код на Java выполнять в среде .Net.
Для особых ценителей, обратное (С# на JVM), вроде как, тоже возможно.
842 2974262
>>2973946

>Для любителей извращенного


Ну мне эта возможность очень помогла с переходом с VB на C#. Я не стал доделывать программу до конца на VB, а просто добавил новый проект на C# и продолжил писать программу. До сих пор использую либы на бейсике.
843 2974512
Еще такой вопрос. Я с плюсов потихоньку перекатываюсь, знаю что такое абстрактный класс. В C# все тоже самое?

И еще, интерфейс это штука, которая по сути может объединить несколько классов ,которые реализуют этот интерфейс? Типо говорю функция void sheet(inter a, inter b), где а и б - разные классы, реализующие один интерфейс?

Плюс еще вопрос, нахуй нужны свойства? Понимаю про методы и поля, а свойства где используются и зачем?
844 2974620
>>2974512

>интерфейс это штука, которая по сути может объединить несколько классов


Интерфейс не может объединять классы. А вот класс может реализовать несколько интерфейсов.

Интерфейс, образно говоря, это свод правил, например для будущих классов, которые возможно пока еще не существуют. Он как бы описывает что "в твоем классе должны быть такие-то методы с такой-то сигнатурой и такие-то свойства". Класс, который реализовывает эти правила, должен иметь соответствующие свойства и методы, заявленные в интерфейсе.

К примеру, ты создаешь некую коллекцию, которая обращается к свойству Value каждого итема. Далее ты создаешь интерфейс со свойством Value, и тот, кто будет реализовывать этот интерфейс в своем классе, будет обязан создать свойство Value у себя, иначе будет висеть предупреждение.
Таким образом, твоя коллекция не зная что за неизвестный класс в нее пихают, благодаря реализованному интерфейсу в этом классе будет уверенна, что свойство Value там точно присутствует. Без интерфейса коллекция просто бы не приняла какой-то неизвестный ей тип данных, либо пришлось бы более дорогостоящими способами (типа рефлексии) проверять есть ли в этом классе свойство Value.

Ну это один из вариантов применения интерфейса.

Абстрактный класс это примерно тоже самое за исключением того, что наследовать ты можешь только один класс, а вот реализовывать интерфейсов можешь множество. Соответственно каждый из этих интерфейсов будет требовать что-то свое, и твой класс это все должен реализовать.

А вот где применять абстрактный класс - надо еще понять. Интерфейс на мой взгляд более универсален, к тому же в современных версиях шарпа он может так же иметь внутри себя какую-то логику, а не просто шаблоны, чем обесценивает все качества абстрактного класса. Хотя пихать логику в интерфейсы на мой взгляд - пиздец. Это развращает.
845 2974649
>>2974620
Спасибо!
846 2974650
>>2974512

>Плюс еще вопрос, нахуй нужны свойства? Понимаю про методы и поля, а свойства где используются и зачем?



Это нужно для инкапсуляции. Поля должны быть приватными, они используются внутри класса, либо его наследников. А свойствами ты можешь контролировать какие поля передать наружу.

Насколько я знаю, в плюсах ведь тоже есть геттер и сеттер, которые пердают данные полей наружу класса. Собсно в шарпе свойство это и есть два метода Get и Set, обмазанных сахаром для удобства. Ты посмотри как выглядят расширенные свойства.
Из-за этого, например, нельзя свойство внутри класса передать напрямую в параметр метода этого класса, как если бы это было обычное поле.

Соответственно, так как это методы, то это дает один весомый плюс. В эти свойства ты можешь помещать логику, а не просто сохранять значение. Например очень часто можно встретить, как свойство помимо передачи значения приватному полю, вызывает событие о том, что свойство изменено, чтобы все привязки обновили данные. Или к примеру передается строковое значение, которое парсится в свойстве и передается приватному полю уже как численное значение. На самом деле роль свойств велика и одними полями некоторые вещи реализовать невозможно. Но даже если можно обойтись публичными полями, то все же стоит использовать свойства - это даст понимание пользователю.

Единственная рекомендация - не использовать по возможности тяжелую логику в свойствах. Для этого все же нужно использовать обычные методы. Ну и самому быть начеку при работе с неизвестными тебе классами и не дрочить одно свойство несколько раз в пределах одного метода. А то бывает в цикле обращаешься к свойству Width, а оно на самом деле запускает тяжелые расчеты в геттере. Ну я имею ввиду, что на будущее (пока это тебе наверно не надо) неплохо бы чекать исходники и понимать как это свойство там работает. Мне вот лично с этой неопределенности пригорает и похоже эта проблема мало кого волнует.
847 2974698
>>2974650
Мил человек, спасибо большое за развернутые ответы.

В плюсах возможно тоже есть, но просто энивей можно обойтись обычными методами же. Поэтому и я задал этот вопрос.
848 2974705
помогитее пж, почему он в выводе выводит от 1.20 до 1.42
мне нужно только до 1.40

double q, y, y1, x;
int n;
n = 1;
y = 1.2;
Console.WriteLine("║y |x |");

while (y < 1.41)
while (n <= 12)
{
if (n > 5)
{
q = Math.Cos(n);
y1 = y y y;
x = (y / 2 n - 1) + q;
n += 1;
y1
= y;
}
else
{
y1 = y y y;
q = 1;
x = (y / 2 n - 1) + q;
n += 1;
y1
= y;
}
Console.WriteLine($"║{y,5:f2}║{x,5:f2}║");
y += 0.02;
}
848 2974705
помогитее пж, почему он в выводе выводит от 1.20 до 1.42
мне нужно только до 1.40

double q, y, y1, x;
int n;
n = 1;
y = 1.2;
Console.WriteLine("║y |x |");

while (y < 1.41)
while (n <= 12)
{
if (n > 5)
{
q = Math.Cos(n);
y1 = y y y;
x = (y / 2 n - 1) + q;
n += 1;
y1
= y;
}
else
{
y1 = y y y;
q = 1;
x = (y / 2 n - 1) + q;
n += 1;
y1
= y;
}
Console.WriteLine($"║{y,5:f2}║{x,5:f2}║");
y += 0.02;
}
849 2974707
>>2974705
там строчка y1 = y y y
и y1 *= y
850 2974708
>>2974707
умножить в общем y на y на y, почему то не отображается
851 2974864
>>2974698

>В плюсах возможно тоже есть, но просто энивей можно обойтись обычными методами же.


Ну в шарпе ты тоже можешь обойтись обычными методами. Ты можешь даже поле сделать публичным. Но вопрос не в том, что ты можешь, а в том чтобы дать понять другим, что ты имеешь ввиду. Нужен определенный стандарт. Даже ItelliSence зная, что у тебя есть свойство, выдаст немного больше информации.

Ну представь себя на месте обычного пользователя каким-то там классом. Как обычный метод этого класса даст понимание, что он не просто что-то там делает, но еще меняет внутренние поля класса? Ну да, ты должен назвать что-то вроде SetValue и GetValue, что это не просто какие-то там методы, а специальные методы с которыми надо быть аккуратнее, что приблизит тебя к концепции свойств.

К тому же есть куча автоматических взаимодействий кода со свойствами. К примеру привязки. Если ты будешь изучать MVVM-паттерн, то познакомишься с тем, как условный GUI-текстбокс привязывается к свойству и автоматически обновляется или обновляет данные этого свойства. Это возможно благодаря стандартизации таких вещей, как геттер и сеттер.
852 2974878
>>2974708
Ньюфаг штоле? Разметка макабы пидорасит. Звездочка это аналог открывающего тэга <i/>, который делает текст наклонным.

Поэтому код либо кидай скриншотом, если он короткий, либо оформляй через pastebin, а сюда кидай ссылку. Подсветку синтаксиса не забудь врубить.
2023-12-2412-04-05.png3 Кб, 451x241
853 2974879
>>2974878
хуй пизда джигурда
854 2974888
>>2974878

> открывающего тэга <i>


фикс
855 2974944
>>2974705

> почему он в выводе выводит от 1.20 до 1.42


Может быть потому, что проверка while происходит в начале блока, соответственно блок выполняется до конца, значение y инкрементируется до 1.42 (а что ему мешает?), затем начинается новая итерация, вайл видит, что значение y не удовлетворяет условию и выходит из цикла.

Или ты думал, что вайл будет отслеживать состояние y на протяжении всего блока? Нет, проверка производится в начале каждой итерации цикла.

Т.е. тебе надо сделать бесконечный цикл, что-то вроде while (true)
А саму проверку (y < 1.41) делать в конце блока до того как начнется изменение y
И если условие не удовлетворяет, то делать break; из цикла
856 2974990
>>2974944

>Т.е. тебе надо сделать бесконечный цикл, что-то вроде while (true)


В шарпе есть do...while цикл для этих целей.
857 2975158
>>2974990
Один хрен у него переменная y уже присвоит значение.
Это не поможет.

Ему надо записывать значение в локальную переменную, проверять не вышла ли она за границы диапазона, и в зависимости от результата либо присваивать значение переменной y и идти дальше, либо прерывать цикл.

Ну или присваивать значение y в начале блока.
image.png30 Кб, 642x214
858 2975167
>>2974705
Как-то так
859 2975618
Всем привет. Я так понимаю компилятор никак нельзя поставить на условную флешку? VS Code на флешку ставится и работает. Но вот в дебаг режим не заходит. В интернете говорят из-за того что .NET нельзя поставить на флешку. Так ли это и можно ли как-то сделать полноценный портативный вариант? Спасибо
860 2976023
>>2975618
Пока
862 2977764
Здрасьте!

Я, как лютый нуб пишу всякое такое, типа:

`DateTime currentDate = new DateTime.Now;`

и оно, ясен пень, не компилируется. Иду в документацию MS и просто тону там. Объясните, как она устроена? В каком разделе например есть описание всех методов в алфавитном порядке (или как-то по другому сгруппированные)?

Видел где-то, что можно из даты вытащить текущий год, типа такого
`someDate.ToString("yyyy");`

Вот как посмотреть методы, которые можно у даты вызвать?
Или синтаксис и параметры ToString();

https://learn.microsoft.com/ru-ru/dotnet/api/system.datetime.tostring?view=net-8.0#system-datetime-tostring
image.png62 Кб, 1300x270
864 2977780
>>2977764

>Вот как посмотреть методы, которые можно у даты вызвать?


Для этого и существуют нормальные IDE и IntelliSence
865 2977986
>>2977780
Как ты это сделал, шайтан?
866 2977991
>>2977986
Щас скажет что это решарпер. В 99% случаев, когда происходит какая-то магия, то это решарпер.
867 2978004
>>2977991
Или вообще Rider.
868 2978220
Пикрил 1.
Почему значения типа байт, хранящиеся в переменных типа object выдают false при сравнении?

Смотрите. Есть свойство ICollection ParentCollection, в него помещается коллекция
Collection<byte> MyBytes { get; set; } = new() { 15, 3, 100, 148, 96 };

Есть параметр object value, через него передается переменная byte MyByte = 148;
Явно в коллекции MyBytes есть значение равное 148, но результат сравнения выдает False (пикрил 2 - вывод каждой итерации из цикла)
869 2978236
>>2978220
Ссылки разные?
870 2978265
>>2978220
хз че ты там мутишь, но не забываем про боксинг, где для равных по значению значимых типов создаются обертки с разными ссылками
byte a = 1;
byte b = 1;
Console.WriteLine(a==b);
Console.WriteLine((object)a==(object)b);

True
False
871 2978315
>>2978265
Разве при сравнении на втором пике не должен использоваться оператор, определенный в bool? Переопределение же
872 2978365
>>2978315
Хуйню выдал.
873 2978394
>>2978236
Какие ссылки? Это ж структуры, я ожидал передачу значения.

>>2978265

>не забываем про боксинг, где для равных по значению значимых типов создаются обертки с разными ссылками


Ах вот оно что

>хз че ты там мутишь


Вообще, изначально была проблема в том, что мне надо в лист боксе отобразить итемы, у которых нет свойства Name или ID.
Поэтому создал конвертер, который выводит тип объекта и его индекс в списке. А так как хочу сделать универсальный конвертер, то сравниваю обджекты. В общем, использую "object.Equals(a, b)" вместо "a == b".
874 2978414
>>2977986
>>2977991
>>2978004
Вы, бПоздравилПоздравилПоздравил, Поздравилб пПоздравилПоздравиль удаПоздравилПоздравилПоздравилПоздравилыПоздравил чтПоздравил ПоздравилПоздравил? СтаПоздравилдаПоздравилтПоздравилая Visual Studio 2022. Community Edition.
875 2978439
>>2977986
>>2977991
>>2978004
Visual Studio 2022. Community Edition.
876 2978445
>>2978414
лол
877 2978450
>>2978445
Угу. Там даже ни одного мата не было. Х.з. чего доска так возбудилась.
2023-12-2616-08-24.png10 Кб, 885x161
878 2978722
>>2978439
Хм, действительно. Значит это локальная залупа спецом для дата тайм.
Не интересно.
879 2978957
>>2978722
нет. это StringSyntaxAttribute, который позволяет сделать подсказки по формату для визуал студии. То есть он подсказывает студии что тут строка, но не просто строка, а формат даты или регулярка (вот все допустимые значения https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.stringsyntaxattribute)

вот бы найти еще нормальный мануал как самому создавать. но как обычно все интернал.
881 2980506
почему компилятор разворачивает опциональные параметры методов типа public void DoThing(Bar bar, Foo foo = null) в какую-то херню?
если прописываю как положено:
DoThing(bar, null)
...то все нормально выглядит
а если как по идее для чего опциональные параметры и нужны:
DoThing(bar)
...то начинается какая-то хуита.

вот я поставил два метода рядочком:
DoThing(bar);
DoThing(bar);

так компилятор по мнению ILSpy два раза сука объявляет это Foo как null и передает отдельно в каждый метод, а еще и блядь такая bar копирует:
Foo foo = null;
DoThing(bar, foo);
Foo foo2 = null;
Bar bar2 = this.bar;
DoThing(bar2, foo2);

это хуйню как вообще понимать, 🥗ач?
882 2980532
>>2980506
Видимо ILSpy хреново IL назад в 🥗овый код переводит. В IL лишних локальных переменных нет, null сразу на Новогодний Репертуар грузится. Если в релизной конфигурации собрать, то вообще даже локальная переменная под bar заводится не будет, все операции чисто на Новогодний Репертуаре будут.

https://sharplab.io/#v2:C4LglgNgPgAgTARgLAChXwMyoN6oAQF7xz6G4qGV4BuAhgE54BGDeAvHgHYCmA7ngCEGACgQAGMQEoA3KSp45VACIB7ACoALMJwDmwlvRnyCiyqs3a9BmYoC+ixQAd6YOsG5EEANiIAWPOZausJCjAYANHgAYioqeABmsexcAK4QEJKK5MaeAJz6DDYUxjAI+YkqRZT2KDXoGHj03ADGKvQAJtGxwtrAeABqtBAp3EUwDU2tHYIivQNDIzJAA===
883 2980542
>>2980532
лол
884 2980544
Новогодний Репертуар?
image.png101 Кб, 914x716
885 2980732
>>2920885 (OP)
Мне нравится, как в библиотеке Bukkit для 🍊 работает система событий. Для прослушивания событий есть интерфейс Listener, с которым можно создать метод, который будет вызываться при инициализации события. Тип события указывается в параметрах метода.
Как такое можно реализовать в 🥗? Мне совсем не нравится, что события здесь функционально-ориентированные.
886 2980737
🥗?
887 2980738
Новогодний Репертуар 🥗
888 2980793
>>2980732
Да просто реализуй. Какая проблема то
Чем класс листенер отличается от любого другого класса с методами кроме семантики (ну и она же в названии)?
Ничем не отличается

Никто не заставляет юзать нативные события.
Если у тебя в хендлере нужно 2+ метода - ну и делай листенеры
Просто они по семантике будут не универсальные подптсчики, а "конекретно тутовые хендлеры"
Но все это метафоры. Реализация то одинаковая
889 2980917
>>2980732
Если не хочется использовать стандартные event-ы, то стоит посмотреть в сторону реализации интерфейса IObservable.
https://learn.microsoft.com/en-us/dotnet/api/system.iobservable-1?view=net-8.0
https://learn.microsoft.com/ru-ru/dotnet/standard/events/observer-design-pattern

А там, если захочется, то и реактивщиной обмазаться можно будет https://github.com/dotnet/reactive
890 2981416
Сап, а кто какой api gateway использует и почему?
891 2981461
>>2981416
Nginx

> почему


По умолчанию.
2023-12-2918-13-35.png16 Кб, 534x578
892 2982764
Слушайте, а что выводится по умолчанию в качестве разделителя вещественного числа: точка или запятая?

Я создаю новое WPF-приложение, Net7.0, пытаюсь забиндить double в текстбокс, и в качестве разделителя у меня стоит точка. При этом у меня нет никаких кастомных конвертеров и валидаторов. Смотрю в настройках винды формат числа — там стоит запятая (пикрил).

У меня переклин. Я недавно переустанавливал винду и мне кажется, что должна по дефолту быть запятая. А если нет, то почему Застолье игнорирует настройки винды?
893 2982800
>>2982764
вижуал Застолье
894 2982833
>>2982764
При этом если через конвертер тупо конвертировать занчение в стринг, то выводится запятая. Че за нах?
895 2982842
>>2982833
Попробовал в конвертере проверить, что приходит в параметр culture и почему-то там указано "en-US". Почему? В настройках российский регион.
896 2982851
>>2982842
Ну типа при инициализации App могу написать
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));


Но вопрос, какого хуя я этого никогда не делал раньше? Может есть где-то глобальная настройка в Застолье? Может какой-то плагин поменял?
897 2983126
Вопрос по Avalonia: есть ли виджеты таблицы с переключением режима edit/read-only, с возможностью выделить отдельную ячейку в строке и возможностью сделать контекстное меню?

Дефолтный DataGrid и не дефолтный TreeDataGrid не умеют в выделение отдельной ячейки по дефолту. Неужели надо самому SelectionModel писать? Или есть готовые решения которые я не нашел? Так влом самому писать просто
898 2983238
>>2983126
Я могу судить по впф. Для этих целей пришлось бы перелопачивать весь стиль.

Дата грид это такая залупень, шо я ебал ее в рот. Я все делал через ListView из которого можно при помощи стилей сделать что угодно. Окно свойств вижуал cтудии — это все ListView на самом деле.
899 2983359
Застолье?
900 2983361
Новогодний Репертуар 🥗 Застолье
901 2983428
>>2982851
Это делается так - CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCultute("ru-Ru");
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCultute("ru-Ru");
902 2983494
>>2983428
1. Где делается?
2. А жесткое указание ру-региона вместо той, что задана в операционной системе
3. Почему я не делал так раньше и все работало
903 2983495
>>2983494

>А почему там жесткое


фикс
image.png64 Кб, 887x639
904 2983932
Только что заметил лютый пиздец но он работает.
Поток заходит в Первый лов в ToCheck(string ip) а потом срабатывает метод Update() а там тоже лок с тем же объектом. Вот смотрю на код и как бы по смыслу он не должен работать, даже в 1 поток, но он отрабатывает нормально.
Почему так?
Смысл зайти и проверить дату редактирования файла, если файл младше то перезагрузить его, лок нужен что бы в файл не вцепились сразу 2 потока.
905 2983999
>>2983932

>Почему так?


Так совпало. Можешь 100 проверок локов сделать да еще с каким нибудь таймером ожидания и тогда шансы будут еще выше. Но рано или поздно два потока под таким таймингом зайдут, что не спасет.

Вроде же есть всякие очереди, которые и решают эту проблему. Разве не?
https://metanit.com/sharp/tutorial/4.7.🎄
Поток создает запрос в очередь и этот запрос будет обработан только после того как будут обработаны запросы от других потоков. Тогда у тебя будет гарантия, что несколько потоков не сядут жопой на один сральник.
906 2984003
>>2983999

>>🎄


Рака яиц тому, что для программача настроил Новогоднее Настроение.
Гугли "Очередь Queue".
image.png543 Кб, 1587x730
907 2984031
>>2984003
блять я испугался
А зачем мне очередь?
Я просто сделаю 2 lockObject и когда поток зайдет ToCheck(string ip) он залочит первый лок и другие уже не войдут в него, а потом залочит в Update().
Хотя я сейчас непонимаю я нахуя я делал lock в Update() так как в него по идее не может ни кто попасть так как вызов этого метода есть только в ToCheck(string ip) и он под локом.
Наверное ночью писал и не понимал что пишу, бывает такая хуйня что находит вдохновение и 15 часов могу писать код, только вот последние часы не помню что и нахуя писал.
908 2984066
А вот еще вопрос, я запускаю сайт на ubuntu как службу, а можно еще через докер.
Какие профиты я получу используя докер? Ну или какие не получу?
909 2984109
>>2984066
через докер ты получишь "оно просто работает но докер"
без него тебе ВОЗМОЖНО придется ставить рантайм и прочее чтобы у тебя это работало, а это не так просто

у меня были траблы opencv + ffmpeg + vip для имаджей
не Прочиталось никак. вошло в конфликт на реальной системе
впрочем не Прочиталось из за випа что стала память утекать
910 2984111
>>2983932

>Почему так?


lock разворачивается в Monitor.Enter+Exit, а там
https://learn.microsoft.com/en-us/dotnet/api/system.threading.monitor.enter

>It is legal for the same thread to invoke Enter more than once without it blocking; however, an equal number of Exit calls must be invoked before other threads waiting on the object will unblock.

911 2984113
>>2984031

>блять я испугался


Я бы тоже, потому предупредил.

>А зачем мне очередь?


При многопоточности, обращения потоков к свойству не происходят последовательно. Один поток меняет статус lock на true, а второй в это время его уже проверил и думает что там false и лезет читать файл. Они могут полезть одновременно.
С булевыми переменными это уловить сложно, но вот с другими более сложными типами переменных получить конфликт легко.
912 2984125
>>2984113
Но я не совсем понимаю есть ли у меня многопоточность)
Метод контролера public IActionResult Index() работает ли он сразу в многопотоке? Пока 1 выполнение идет, а второй юзер зашёл на страницу его в очередь поставит или будет создал второй HomeController и в нем сработает метод?*
913 2984130
>>2984125
займет поток из пула, а значит пул исчерпается и остальные буду ждать.
914 2984400
На сколько адекватна идея хранить данные о подключении к бд в другой бд?
К примеру мне нужно много бд, каждая бд для своего сайта.
Я делаю как то так
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=db.Where(d => d.Domain ==Request.Host.Host).First()"); //ну типо по какому домены пришёл запрос ту бд и берем
}
Не будет ли конфликтов каких кто?
Идея в том что сайты разные и контент совершенно разный. Выиграю ли я в скорости запросов?
915 2984450
>>2984066
С докером ты получишь удобство разворачивания, обновления всего этого дела.
Без докера, тебе надо обновить свой сайт - ты ручками по ССШ заливаешь новую версию. Ты обновил .NET - ручками иди обновляй на хосте зависимости. Да, удаляешь - иди руками чисть что там насрал.
Если что-то упадет - ты можешь в докере изи настроить автоподнятие.
Сверху - нахуевертить всяких писек, чтобы если что-то идет странно(память резко потреблять больше стало, место скоро кончится и т.д) - тебе прилетели уведомления, метрики куда надо.
Короче. Минимально - удобство.

Дальше, если у тебя какая-то микросервисная шляпа начнется - ты просто берешь и делаешь нужное кол-во инстансов, сколько хост потянет - и все, так тебе придется искать как твою службу размножить, настраивать это все и т.д.
916 2984451
>>2984400
В таком виде - хуевая.
А вцелом - норм. Что такого?
917 2984592
Когда я в цикле запрашивается длина коллекции, она запрашивается при каждой итерации, или только один раз? Особенно этот вопрос касается IEnumerable и его метода Count()

for (int i = 0; i < MyCollection.Count(); i++)
{ }
918 2984774
>>2983238
Отвечу с опозданием: выяснил что TreeDataGrid все таки позволяет одиночное выделение ячейки, но документации к нему по многим другим моментам не хватает.

Норм аналогов для WPF-ного ListView в Avalonia нет(

Теперь мучаюсь с тем как сделать переключение режимов в контроле TreeDataGrid между "только чтение" и "изменение", тупо документации не хватает. Придется смотреть код
919 2984833
>>2984592
Каждый раз.
920 2985523
>>2984592
Так нельзя делать. У тебя каждый раз IEnumerable будет перевычисляться. В лучшем случае это потеря производительности, в худшем это может всё распидорасить, если у тебя хтонь в конструкции.
921 2985553
>>2985523
И ElementAt нельзя использовать в цикле For? Нужно foreach?
Где-то я видел, что ElementAt это что-то вроде foreach который обходит коллекцию до нужного индекса.

А как тогда к примеру сравнивать итемы двух IEnumerable? С For все просто:
for (int i = 0; i < 100; i++)
{
If (MyCollectionA.ElementAt(i) == MyCollectionB.ElementAt(i)){ }
}
922 2985556
>>2985553

> Где-то я видел, что ElementAt это что-то вроде foreach который обходит коллекцию до нужного индекса.


Как хуево, что сорсы либ закрыты, и нельзя самому посмотреть, как оно реализовано...
923 2985574
>>2985553
Сначала идет попытка проверить что за зверь, и если он не IList, то тогда действительно будет в цикле перебираться.
924 2985590
>>2985553
>>2985574
Так что лучше запрашивать IList вместо IEnumerable, если это возможно, но IList можно редактировать, а IEnumerable запрещает вносить изменения в список.
2024-01-0121-22-21.png9 Кб, 705x173
925 2985591
>>2985590
А зачем тогда нужен IEnumerable? На пикрил пишут, что он подходит для перебора итемов, но он не очень-то хорош в этом.
926 2985617
>>2985591
Для перечисления.
927 2985644
>>2985591
как он может не быть хорошо в том для чего он исключительно и предназначен....
928 2985657
>>2985644

>как он может не быть хорошо в том для чего он исключительно и предназначен....



Ну потому что вот это пример >>2985553 не очень эффективен по сравнению с аналогичной реализацией над IList.
929 2985662
>>2985617
А что такое перечисления? foreach?
930 2985679
>>2985591
Для перебора. А не для определения размера.
931 2985728
>>2985590

>Так что лучше запрашивать IList вместо IEnumerable, если это возможно,


Зачем. Если тебе под IEnumerable придет List (или даже Array) то они вполне себе определятся как IList и все отработает как надо.
932 2985732
>>2985657

>Ну потому что вот это пример >>2985553 не очень эффективен по сравнению с аналогичной реализацией над IList.


Ну так ты тут нихрена не перебором занимаешься, а элементы по индексу достаешь, что как бы выходит за область применения IEnumerable
933 2985806
>>2985662
Все, что вызывает энумератор для перечисления. Например, foreach, да.
934 2985851
>>2985591
Ну вот тебе синтетический пример:
IEnumerable<int> GetSquares(){ return Enumerable.Range(1, 100).Select(x=>x*x); }
...
Console.WriteLine(string.Join(", ", GetSquares().Take(5)));

Так в итоге посчитаются только пять квадратов.
Если возврат метода заменить на List или [], то посчитается сто, хотя выведется только пять.

Суть IEnumerable в том, что ты наслаиваешь трансформации, а считает он в итоге только то, что тебе нужно в конце. В некоторых случаях это позволяет оптимизировать вычисления. А если у тебя результат такой конструкции не используется, то он не будет ничего считать вообще. Правда это говнокодом попахивает.

Ещё есть IQueryable который вообще по возможности превращается в запрос к БД. Тоже нахерачиваешь проекций, фильтров и группировок, а запрос выполняется только когда ты начинаешь данные реально использовать.

Ну и да, если тебе надо данные из IEnumerable использовать несколько раз, то надо сделать ToList() или ToArray(), и читать уже из них, иначе оно будет пересчитываться несколько раз (ещё и разные результаты могут получиться, если у тебя исходные данные изменятся, например).
935 2985872
Где перекат? Срачей не будет больше, тред не улетит в лимит.
936 2985874
>>2985872
Перeкат будет через 65 поcтов.
937 2985988
>>2985872
Срач устроить легко
ЖАВА ГОВНО

щас прибегать жавист и начнет обсираться
# OP 938 2988001
>>2985872
Джавадебил, тебе невтерпеж?
939 2988872
Пришел сюда из Python, решил попробовать C# и особенно ASP.NET. Читаю пока тут: https://learn.microsoft.com/en-us/aspnet/core/data/ef-rp/intro?view=aspnetcore-8.0
Бля, да это же охуительный язык! Аноны, а есть что-нибудь на подобии A Byte Of Python, где кратко описан синтаксис и основные плюшки C#?
940 2988881
>>2988872
Блазор покури. Там верстать еще приятнее. Особенно если использовать интерактив сервер, с кодбихайнд блоком.
941 2988902
>>2988872
metanit.com
Раздел про шарп.
942 2988922
>>2988881
>>2988902
Спасибо за наводку.
943 2988995
>>2920885 (OP)
Парни, там это, Никлаус Вирт умер 1-го января.
Почтим память.
Без него (хоть и опосредованно), вряд ли бы наш любимый C# был бы таким крутым и замечательным.
Press F5 to respect.
944 2989027
>>2988995
Деды уходят... F5
945 2989355
Таак, блять. Есть слой Domain, мне там надо сделать сущность Request. Этот реквест может быть двух типов RequestFOB и RequestFCA. Отличие буквально в трёх полях. Мне в домене лучше сделать сущность BaseRequest и потом просто её наследовать этими RequestFOB и RequestFCA? Или всё запихнуть в один класс Request и там уже null фигачить, если запрос FOB или FCA. Или как лучше сделать? Подскажите, пожалуйста.
946 2989411
>>2989355
Ты правильно придумал
947 2989412
>>2989411
Я в итоге всё в интерфейс засунул
948 2989414
>>2989412
А должен был перекатить тред
949 2989419
>>2989414
Я скорее его на хуй перекачу ибо не умею
950 2989425
>>2989355

>Или как лучше сделать?


Любой вариант, который подходит под твои требования и бизнес-логику.
Плюс можешь еще сделать Request как свойство каждой из отдельных сучностей, тогда проще нормализовать будет.
951 2989427
>>2989425
У меня опыта разработки 0. Поэтому и спрашиваю. Сейчас я запихнул всё в интерфейс.

>Плюс можешь еще сделать Request как свойство каждой из отдельных сучностей


Наверное так лучше...Я щас на гитхабе посидел, там челы также делают
952 2989437
>>2989355

>RequestFOB и RequestFCA.


В соответствии с гайдланами стоит использовать только очень известные сокращения типа URL, HTTP, TCP. Всё остальное стоит писать полностью.
Плюс к этому даже сокращения надо писать паскаль/кэмел кейсом: RequestFob, RequestFca.
953 2989439
>>2989437
Я сам не знаю что такое FOB и FCA это в отделе логистики какие-то термины. В понедельник на работу пойду спрошу. А про соглашение как писать сокращение спасибо
954 2989442
>>2989414
Нет, жабадебил, не будет переката до 1000постов.
955 2989558
https://habr.com/ru/articles/701352/
Шарперы слушаю ваши оправдания.
956 2989559
Глупый вопрос. Но ответ нужен.
Сколько при запуске занимает памяти нет.кор фреймворк?
957 2989571
>>2989442
Сам ты жавадебил. Или без жава.
На мобильном девайсе тяжко грузить столько прстов
958 2989573
>>2989558
Что быстрее? Кот или кит?
959 2989586
>>2989573
Что логичнее, объяснить содержание или скатиться в неясные вопросы?
960 2989587
>>2989571

>тяжко грузить столько прстов


У тебя ондроед второй? Или ты из подвала? У меня все нормально грузит.

мимо джавабоярин
961 2989592
>>2989586
А ты попробуй ответь и все поймешь

>>2989587
Ну и иди нах. Сиди один в этом треде. А я зайду через месяц
962 2989615
>>2989592
Самослив?
963 2989953
>>2989558
Ты на дату статьи посмотри, год назад это уже все обсосали иди в архивач и там ищи.
964 2990438
>>2989953
Новые данные подкатили? Есть ссылки?
965 2990574
>>2990438
Сравнимать несравнимое
Ну-ну
966 2992268
Блять, я не понимаю. Посмотрел гайд как сделать глобальную обработку исключений. Решил прикрутить в свой проект, начал тестить ии... Почему-то он отлавливает не все ошибки. Ошибки валидации некоторые отлавливает, а некоторые нет (я использую FluentValidation). Например, если устроить переполнение переменной он выдаст свой "дефолтный" ексепшн (рис.1), а если надо проверить, чтобы значение было не ноль, то он выдаст то, что надо(рис.2). Код флюент валидации(рис.3) и код глобал-хуёбал ексепшен хендлера(рис.4). Объясните, пожалуйста, чему так.
изображение.png271 Кб, 1847x977
967 2992273
>>2992268
Хуйню написал про переполнение. Переполнение - это "общий" ексепшн, который обрабатывает, по идее, на рис.1. Fluent Validation его никак не должна обрабатывать
17046384003840.png22 Кб, 1037x342
968 2992279
А проблема вся в том, что я хочу изменить сообщение вывода вот этого (рис.1), но т.к это не попадает в глобальную обработку исключений, то я не знаю где это править
изображение.png129 Кб, 1602x298
969 2992303
Щас залез в коменты к гайду, а там вот такое написали. Это так? Тогда как надо организовывать обработку исключений...
970 2992572
>>2992303
Это шизик.
Но по хорошему:

try{
...
}catch(SocketException sex){
Log(sex)
FreeSocketAndCompleteConnection(connection);
}
catch(DbUpdateException due){
Log(db);
RetryAfterDelay(1000);
}
17046384003840.png22 Кб, 1037x342
971 2992756
>>2992572
То есть от более частного исключения к более общему, я правильно понял? Это хорошо, а вот как согнать все исключения в один обработчик я не понимаю. Вот например: я делаю запрос через postman и специально не задаю одному полю значения. Я ожидаю, что исключение попадёт в мой глобальный обработчик и я смогу там подкорректировать вывод ошибки, чтобы не было в какой строке ошибка произошла и т.д. Но получается так, что это исключения даже не доходит до глобального обработчика, оно ещё раньше где-то обрабатывается...Или я чего-то не понимаю
972 2993657
Вопрос к математикам. Кто знаком с матрицами трансформаций?

Такая проблема. Допустим в WPF у меня есть группа трансформаций, состоящая всего из одной трансформации — вращения на 90° вокруг центральной точки в относительном пространстве:
<TransformGroup>
<RotateTransform Angle="90" CenterX="0.5" CenterY="0.5"/>
</TransformGroup>


Я могу при помощи свойства Value из этой группы получить матрицу:
[0 1 -1 0 1 0]

И вопрос: а как получить центр вращения? Те самые

>CenterX="0.5" CenterY="0.5"


Я могу сделать декомпозицию матрицы и получить
Angle: 90;
OffsetX: 1;
OffsetY: 0;

Но это не даст мне никакой информации о центре вращения.
973 2993737
>>2993657
Никак не можешь
2024-01-0820-21-52.png2 Кб, 111x112
974 2993790
>>2993737
Все оказалось банальным. Можно же применять трансформации к точке. Главное знать изначальные габариты трансформируемого объекта.
975 2993793
>>2993790
Если в TransformGroup будет куча трансформаций, то уже никак не узнать.
976 2993809
Как работает явное приведение?
Почему
byte b = 1 + 1;
работает, а
int a = 1;
byte b = a + 1;

нет?
Типа компилятор видит угрозу в математическом выражении, результат которого может не поместиться в byte?
977 2993823
>>2993809
Ты присваиваешь не константу в виде единицы, а переменную, в которой может в теории содержаться число выше 255 или ниже 0, потому что эта переменная типа int.

Компилятор не смотрит на фактическое значение int, ведь в рамках работы программы оно может поменяться на что угодно. Как итог, ты можешь получишь StackOverflowException, и компилятор на это обращает твое внимание.

Если ты уверен, что в "a" никогда не будет нежелательных чисел, то ты приводишь явно к байту, либо изначально объявляешь переменную как байт. Если ты не уверен, то либо проверяй значение, либо сразу обрезай: byte.Clamp(a, 0, 255);
978 2993825
>>2993823

>byte.Clamp(a, 0, 255);


byte b = (byte)int.Clamp(a + 1, 0, 255);
979 2993826
>>2993823

>получишь StackOverflowException


Уверен?
980 2993832
>>2993826
Казалось, что выдавал исключение. На деле просто возвращается к началу и прибавляет остаток
int a = 257;
byte b = (byte)a;

Выдаст результат b: 1
981 2993845
>>2993832
Он просто урезает биты. И да, стековерфлоу это другое, про переполнение стека вызовов функций.
982 2993850
>>2993809
Потому что засунуть byte в int это как если бы осел выебал дракониху. Странно, но никому не повредит.
А вот попытка запихнуть int в byte - это уже как дракону выебать ослицу. Компилятор это видит и предупреждает тебя, что что-то тут не так. Поэтому в твоем случае ты должен явно приводить переменную: byte(a) + 1, как бы говоря компилятору: "Да, да я полностью уверен, пусть бедную ослицу разорвет нахрен."
Как бы не относится к экстримцоде, но это объяснение у них годно получилось.
983 2993859
>>2993850

>byte(a)


Не скомпилится.
984 2993867
>>2993859
Да похуй, я просто пъяный. (byte)a + 1 естественно.
Но мысль ясна.
985 2993873
>>2993867

>(byte)a + 1


Тоже не скомпилится, алкаш
986 2994040
>>2993809
Чем тебя спека не устраивает? https://docs.oracle.com/javase/specs/jls/se21/html/jls-5.html#jls-5.5
987 2994084
>>2993867

> (byte)a + 1 естественно.


(byte)(a + 1)
sage 988 2994114
(byte)((byte)(a))((byte)(+))((byte)(1))
989 2994118
>>2994040
Пошëл нахуй.
990 2994247
>>2994114
Учиться тебе еще и учиться
(byte) 0x01
991 2995114
Решеточники, такой вопрос. Есть условный класс A и B. В классе A создается множество экземпляров класса B. Они помещаются в List. После этого каждого экземпляра класса B вызывается Task X, этот Task у каждого экземпляра выполняется с разной скоростью. После того, как последний экземпляр класса В завершит выполнение Таска X, нужно вызвать функцию Y в классе A. Есть какое-то изящное решение этой задачи?

Были мысли насчет какого-то флага в классе B, который становится true после выполнения функции, а потом вызов TrueForAll с предикатом. Может есть что-то получше?
992 2995478
>>2995114
А Task.WhenAll чем тебя не устраивает?
993 2995537
Это пиздец, сколько синтаксического сахара в шарпе. Реально вообще это все запомнить?
994 2995553
>>2995537
Тебе нет
995 2995577
>>2995553
Почему?
996 2995627
>>2995537
Чего бы и нет. Просто берешь и используешь.
В какой-то момент ты сам себе начнешь его создавать в виде всяких экстеншенов, перегрузок и т.д.
997 2995695
>>2995478
Устраивает, но хотелось именно через события. В задании есть требование, чтобы я где-то события впихнул.
998 2996069
>>2995577
потому что это ты
999 2996213
>>2996069
Но я охуенный.
1000 2996221
>>2996213
Ты пидор.
1001 2996227
>>2996221
Я охуенный пидор.
1002 2996255
>>2996227
Но головушка слабовата

Впрочем, если оформишь перекат - проклятие спадет
1003 2996274
>>2995695
ну впихни после Task.WhenAll событие ЧтоТоТамКомплетед.
1004 2996913
Всем ку. Кто-нибудь шарит за AutoMapper? Пытаюсь смапить модель из домена с ViewModel, но нихуя не получается. Во ViewModel отсутствуют два поля: UserId и Responses. Если вручную переделать доменную модель во ViewModel, то всё работает, но по идее AutoMapper сам должен с этой хуйнёй справится. Пробовал Ignore(), но не сработало.
1005 2996938
>>2996913
Автомаппер - наебка для гоев. Из коробки он только с простейшими круд-моделями работает. А в большинстве случаев там явно все правила прописывать нужно и по хорошему еще и тестами посильно этот мапинг покрывать.
1006 2997709
В пизду этот автомаппер. Нихуя так и не заработал. Удалил его нахуй и поставиил мапстер. Все заработало. Плюс вычитал в инете, что он почти во всём лучше, чем автомаппер
1007 2997823
>>2997709

> Удалил его нахуй и поставиил мапстер.


Ну ты и додстер)
1008 2997913
Аноны, есть что-то вроде ссылки на свойство? Я знаю что звучит тупо, но меня интересует средство, которое сможет побороть проблему.

Предположим у меня есть список разношерстных элементов, у которых нужно отредактировать свойство цвета, но имена этих свойств не являются едиными. К примеру:
- Path.Fill
- Button.Background
или
- Path.Stroke
- Button.BorderBrush

У элементов нет общего предка:
Shape -> Path
Control -> ... -> Button
Panel -> Grid

Я не могу использовать рефлексию, обращаясь грубо говоря по имени, да и затратно это.
Предположим, что я создам какой-то метод, который пройдется по списку элементов и извлечет из нужного свойства кисть, а потом составит новый список IList<Brush>.
Но на этапе редактирования может случиться например то, что какие-то кисти имеют статус Frozen == true, и такие кисти редактировать нельзя, их нужно клонировать в новый экземпляр. Но что я смогу сделать с этим экземпляром? Заменив итем IList<Brush> новым экземпляром, я не отредактирую свойство элемента, который содержит экземпляр старой кисти.

И что в таких случаях делать? Может есть какие-то хитрые списки, которые по паттерну обращаются к нужному свойству элемента? Ну вот есть же DataTemplate, к примеру, который на основе типа данных подбирает нужный экземпляр контрола.

Или может есть хитрые биндинги по шаблону?
изображение.png159 Кб, 922x472
1009 2997972
>>2997823
Да я
1010 2998085
>>2997913
Ъ-путь это не изобретать велосипедов, а реализовать интерфейс с методом SetColor.
Если это не совсем твои классы, ты можешь нахерачить им extention methods, то есть добавить каждому SetColor как расширение.
А то, что ты хочешь - это чистое и незамутнённое зло, не надо этого хотеть.
Это по первой части.
По второй - я вообще не понял, чего ты хочешь и как она связана с первой. Ты хочешь изменить цвет кисти, если она заблокирована? Зачем? В чём смысл этого действия?
1011 2998152
>>2998085
Давай поясню. Я хочу сделать редактор кистей, подобный тому, что есть в окне свойств вижуал студии. Универсальный. Но у майкрософт целый зоопарк элементов, опять же:
Shape -> Path
Control -> ... -> Button
Panel -> Grid

... и я не хочу для каждой категории делать отдельный редактор кистей. Мне нужна универсальная информация, которую бы мой редактор мог обработать.

Сейчас я склоняюсь к ObservableCollection<Brush> с подпиской на изменение итемов. Просто я этот вариант оставил как запасной.

>реализовать интерфейс с методом SetColor


Во-первых, классы не мои, а некоторые запечатаны.
Во-вторых, какое именно свойство будет менять SetColor? Потому что часто есть несколько свойств, которые в какой-то момент нужно задействовать, а какой именно — зависит от внешних факторов о которых редактор кистей знать не обязан. Менять ли фон или контур, редактору цвета должно быть наплевать.

>SetColor как расширение


Та же проблема. Расширение не должно решать что делать.

>А то, что ты хочешь - это чистое и незамутнённое зло, не надо этого хотеть.


Таковы обстоятельства. Есть условный канвас, в котором могут находиться как производные от Panel, так производные от Shape, так и от Control. Я не виноват, что майкрософт родили такой зоопарк. Они может тоже не виноваты, но раз никто не виноват, то должно быть популярное решение данной проблемы.

>Ты хочешь изменить цвет кисти, если она заблокирована? Зачем?


Согласен, спорно. Но если тебя смущает такой пример, вот еще один: в свойстве может быть SolidColorBrush, а пользователь в окне редактора кистей выберет RadialGradientBrush. Это так же потребует создания нового экземпляра.
1012 2998372
>>2998152
Как же хорошо, что я не занимаюсь десктопом или фронтом и мне не приходится решать проблемы вроде "как надевать штаны через голову"
1013 2998448
>>2998152

> какое именно свойство будет менять SetColor?


Вот у каждого элемента будет свой сетколор, и он будет знать, что делать. И ты всегда будешь знать, что ты делаешь - ты устанавливаешь цвет. Твой код не вызывает Ктулху, не превращает тебя в гибрид Синдзи и Харухи, а устанавливает цвет у элементов.
Ты пишешь каждому классу extension method, который знает, что делать в конкретном классе. Если там нет чёрной магии, и всё что надо сделать, доступно публично. Запечатан он, не запечатан - тебя не волнует.

А про новые экземпляры я всё равно не понял. Ты пытаешься сделать что-то, чего сделать нельзя? А зачем ты пытаешься это сделать, если этого нельзя?
1014 2998455
>>2998152
Алсо, я в графике ничего не понимаю, не мог бы ты объяснить свою задачу простыми словами? Ну там панели, кнопки, это понятно. Это такие визуальные элементы на форме, я когда-то очень давно писал на дельфях Button1Click(), я что-то помню. Так. А зачем их одновременно красить? А кисти тут при чём? Кисть, как я помню, это способ нанесения рисунка на канву. Какое отношение они имеют к элементам формы?

Потому что сегодня ты захотел поменять цвет у десятка несвязанных друг с другом элементов (и что такое "поменять цвет" у них ты придумал сам). А завтра ты захочешь поменять у них запах, текстуру, вкус, гендер - и на каждый чих тебе придётся писать набор расширений. Ты делаешь что-то странное, кмк.
1015 2998609
>>2998448

>Вот у каждого элемента будет свой сетколор, и он будет знать, что делать.


Это как? В одном случае пользователь хочет поменять цвет фона — это одно свойство, а в другом случае он меняет цвет контура — это другое свойство. Вот запустил я метод SetColor и че? Куда он полезет? В первое или второе?
Экстеншен не поможет, либо у него будет слишком много полномочий, либо дальнейшая поддержка подобной системы будет деструктивной, потому что вариаций откуда брать данные — масса.

Не это хуета. Я лучше буду использовать обозреваемую коллекцию, а по каким принципам будут извлекаться данные и откуда — это не важно.

>Ты пытаешься сделать что-то, чего сделать нельзя?


Почему нельзя? Можно. Например свойство Background может содержать класс, реализующий абстрактный класс Brush. Классов таких великое множество.

Вот тебе кнопочка со сплошным однородным цветом
MyButton.Background = new SolidColorBrush();

А вот кнопочка с градиентом
MyButton.Background = new LinearGradientBrush();

Вот так и создается новый экземпляр, совершенно легально.
А если ты по поводу freezable-классов, так frozen state активируется в случаях, когда кисть инициализируется в xaml, и такой подход нужен, чтобы биндиться прямо из ресурсов (к примеру). В моем случае это не нужно, поэтому мне нужна возможность перезаписать кисть. Вот и всё.
1016 2998629
>>2998455

>Это такие визуальные элементы на форме


Аааа, ясно. Это WPF, не знаю насколько он похож на подход в делфи. Но от винформсов отличается достаточно сильно.

>А кисти тут при чём? Кисть, как я помню, это способ нанесения рисунка на канву.


Алгоритм отрисовки. Одна кисть заливает сплошным однородным цветом, другая рисует линейный градиент, третья рисует радиальный градиент, четвертая рисует битмап. Пикрил - вариации.

Каждый контрол (это то, что ты называешь формой) содержит в себе набор кистей, отвечающих за визуал определенного элемента. Например у кнопки это может быть задний фон, стиль рамки, передний план (иконка\текст). Пикрил 2 - кисти кнопки.

>А зачем их одновременно красить?


Я строю универсальный класс. Для одних случаев достаточно редактирования одного объекта, для других нужно менять коллекцию. Поэтому мне проще сразу обрабатывать коллекцию.

>А завтра ты захочешь поменять у них запах, текстуру, вкус, гендер


Вот за это кисти и отвечают. Ты можешь реализовать абстрактный класс Brush и создать что-то свое. При этом ты можешь настроить тему приложения так, что у тебя во всех элементах интерфейса это перерисуется автоматом.

Я как раз занимаюсь универсальной системой скинов и тем для своих приложений. Она есть дефолтная, но это говнище куцее.
1017 2998654
>>2998455

>Кисть, как я помню, это способ нанесения рисунка на канву. Какое отношение они имеют к элементам формы?


В WPF суть контрола в том, что это конструктор.

Есть набор простейших элементов, которые комбинируются между собой, формируя сложный UI-элемент. Ты можешь внутрь кнопки поместить еще одну кнопку, и все это будет элементом комбобокса.

Вот к примеру на видеорил мой собственный контрол, который редактирует свойства радиальной кисти, а на втором показан контрол для изменения линейного градиента. Это такие же UI-элементы как кнопка или комбобокс. В дальнейшем им можно изменить стили, и например сделать стиль аля windows 11 или mac, чтобы ползунки были другой формы или цвета. При этом внутрь контрла лезть уже не надо.
1018 2998655
>>2998654
Алсо, на видосах эффект двойного курсора — это проблемы с записью. Видимо фэпасов мало поставил.
image.png45 Кб, 580x333
1019 2998672
Что этой хуите нужно?

как тут может быть разыменование если есть проверка на null?
1020 2998686
>>2998672
мамой поклянись что ToString() не вернет null
.png43 Кб, 651x729
1021 2998693
>>2997913
Что мешает как-то так сделать?
1022 2998854
>>2998693
Интересная идея. Тоже была мысль через экшоны попытаться сделать.
1023 2999410
>>2998654
Анон, это ты что такое пилишь? Для себя или работа? Выглядит интересно.
1024 2999427
>>2998654

> 1 вебм


Сам придумал или подсмотрел где идею? Выглядит здорово, я бы до такого не додумался.
1025 2999709
>>2999427
Просто представил, что это обычная фигура в графическом редакторе, к тому же система трансформаций такая же. Я в свое время задрался настраивать градиенты что в иллюстраторе, что в кореле.
1026 2999969
Шарпаны, я ньюфаг и хочу начать писать сетевой код на шарпе. Для начала простенький чат ну и так далее.
Только я начал гуглить и выдает какието уебищные видосы на ютубе с нерабочим кодом и какието странные книги за 2014й год.
Наверное я чтото не то ищу.
Подскажите что курить и куда двигаться? хочу научиться писать сетевые предложения.
1027 3000112
>>2999969
Для чата в реальном времени используй SignalR
https://metanit.com/sharp/signalr/1.1.php
1028 3000113
А так же вопрос по SignalR
Как мне в нём в Хабе перехватить параметр http://example.com/?userId=123
А именно в телеге хочу сделать небольшое web apps с передачей параметра в виде User ID и так определять какой ТГ юзер зашёл в приложение. Да не безопасно, но это потом, я так демку делаю.
ГПТ сказал типо так
var userId = Context.GetHttpContext().Request.Query["userId"];
Но там пусто.
Как сделать так как мне надо?
1029 3000115
>>3000113
Даже получить 1 раз это значение пока в хабе открыто соединение
1030 3000116
Обещали перекат. Где?
1031 3000306
>>2999969

>хочу начать писать сетевой код на шарп


Цель?

>чат ну и так далее


Blazor - лучший выбор. Ну или Bolero (Blazor под капотом), если хочешь писать на F#.
1032 3000385
>>3000116
Делай. Тебя ждали.
.png73 Кб, 806x943
1033 3000456
>>2999969
Начни с чего-то такого,
Гуглится - ТЭЦЭПЭ СЕРВЕР СИ ШАРП
1034 3000513
>>3000456
>>3000306
>>3000112
Благодарю.
1035 3001004
Всем привет. Кто-нибудь в курсе как настроить путь в csproj, чтобы папка создавалась не в корне, а,например, в папке Common. На скрине отметил, где создаётся папка Mappers, создаётся она командами из <Target Name="Mapster">.
1036 3001157
>>3001004
Не совсем понимаю, что тебе нужно. Но скорее всего и не пойму, т.к. если какая-то библиотека требует какого-то хитрого пердолинга в csproj, то очень вряд ли стоит ей пользоваться.
1037 3001187
>>3001157
Это mapster для маппинга моделей. А нужно изменить место создания папки Mappers. Я предполагаю, что создаётся она командами, что заключены в <Target Name="Mapster">. А вот что там менять надо - я не очень понимаю.
image.png27 Кб, 601x325
1038 3001355
1039 3001596
MAUI норм тема чтоб для андроида на сисярпе писать? Не хочу учить ебучий котлин и реакт тоже блевотный нахуй.
1040 3001731
>>3001596

>норм тема


Там XAML, если от него не тошнит, то норм.
# OP 1041 3002295
ВЫШЕЛ ИЗ ЗАПОЯ, ПЕРЕКАТ

>>3002293 (OP)
1042 3045140
Посоветуйте книжек или уроков С# через разработку игорей
Тред утонул или удален.
Это копия, сохраненная 13 февраля в 11:33.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски