Сохранен 1042
https://2ch.hk/pr/res/2920885.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

C# вот-вот 8 дотнета тред #53 /csharp/

 Аноним OP 14/11/23 Втр 00:12:51 #1 №2920885 
image.png
image.png
image.png
Предновогодний тред лучшего языка на планете.

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)

ВНИМАНИЕ, в тред повадился срать джавадебил. Шарпочане, игнорируйте, а лучше репортите. Главное - не кормите.
Аноним 14/11/23 Втр 00:24:01 #2 №2920899 
В чем прек интерцепторов, которые добавят? Какие кейсы?
Аноним 14/11/23 Втр 00:25:35 #3 №2920900 
>в тред повадился срать джавадебил.
Мне кажется, что у админов это такая стратегия, чтобы поддержать тред на плаву. Не в первом разделе наблюдаю такой эффект, когда тред начинает затихать, и в него врывается свой местный шиз и начинает байтить на споры. Схема везде идентичная.
Аноним 14/11/23 Втр 00:29:07 #4 №2920902 
>>2920899
Может для доступа к методам, к котоырм просто так не добраться. С другой стороны зачем все обмазали интернал методами, чтобы потом городить интерцепторы?
Аноним 14/11/23 Втр 00:29:14 #5 №2920903 
Репортите пожалуйста этого гандона как только он высовывает рыло. Спасибо.
Аноним 14/11/23 Втр 00:31:35 #6 №2920904 
>>2920903
Ну так ты не отвечай. А если отвечает кто-то другой, значит ему нравится.
Аноним 14/11/23 Втр 00:43:54 #7 №2920911 
2023-11-1400-43-13.png
>>2920899
не для кожаных мешков
Аноним 14/11/23 Втр 00:43:54 #8 №2920912 
>>2920899
https://andrewlock.net/exploring-the-dotnet-8-preview-changing-method-calls-with-interceptors/
Аноним 14/11/23 Втр 00:49:36 #9 №2920915 
Screenshot2023-11-14-03-48-07-396com.zchandev.iChan-edit.jpg
>>2920900
Я айчаном пользуюсь, а в нем потёртые сообщения остаются. И судя по нему, модер таки потер испражнения, которыми жавадебил новый тредик испачкать пытался.
Давайте скажем спасибо дяде-модеру
Аноним 14/11/23 Втр 00:55:39 #10 №2920916 
>>2920885 (OP)
>вот-вот 8 дотнета тред
Все ближе к почившему бейсику. Аж на душе тепло.
Скоро мы все будем путаться в том, что поленились создать ручками.

Но вот от точки запятой я бы без иронии отказался. Жду C# 13.
Аноним 14/11/23 Втр 01:04:32 #11 №2920919 
https://habr.com/ru/articles/773444/
Что-то, как по мне, не в ту сторону они идут. Мне возможность обрезать ASP .NET Core приложения не сильно, честно говоря, упёрлась. Я ещё не сталкивался с тем, чтобы размер получающихся приложений был проблемой, чтобы так запариваться.
Аноним 14/11/23 Втр 11:54:48 #12 №2921141 
>>2920919
Это нужно дядям в майкрософте из Azure, чел. Го уж больно сильно дышит в спину шарпу (и джаве).
Аноним 14/11/23 Втр 11:59:59 #13 №2921151 
>>2921141
>Го уж больно сильно дышит в спину шарпу (и джаве).
кто сказал? С каких пор на го стало нормально писать что то не мелкое?
Аноним 14/11/23 Втр 12:30:28 #14 №2921230 
У ObservableCollection в событии CollectionChanged, свойство NewItems имеет тип IList.

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

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

А вообще на ютубе полно туторов по созданию каталогов условных магазинов товаров, где у товаров есть различные категории. Суть одна и та же. Так же ознакомься с паттернами проектирования.
Аноним 14/11/23 Втр 18:14:27 #20 №2921956 
>>2921624
Ваша компания называется "6-Б класс"? Выглядит так, как будто создатель это системы делал все по наитию, зная только синтаксис шарпа.
Аноним 14/11/23 Втр 19:16:57 #21 №2922052 
.png
Ну всё, релизнулось, можно качать.
Аноним 14/11/23 Втр 19:31:59 #22 №2922064 
>>2922052
https://devblogs.microsoft.com/dotnet/announcing-dotnet-8/

Эрекция
Аноним 14/11/23 Втр 19:40:34 #23 №2922067 
Ебать они там всего наоптимизировали
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/
Аноним 14/11/23 Втр 20:06:44 #24 №2922085 
>>2922052
без поддержки студии (да решарпера) бесполезная шняга
так что еще ждать и ждать
Аноним 14/11/23 Втр 20:19:04 #25 №2922094 
>>2922085
Студия уже, додик, а чо там у жыдбрейнсов ниебет
Аноним 14/11/23 Втр 20:23:33 #26 №2922096 
>>2922094
лол. посмотрите на этого поборника голой студии
прямо спартанец.
Аноним 14/11/23 Втр 20:41:10 #27 №2922107 
Я вот ещё только разбираюсь в шарпах поэтому прошу помощи. Вот у меня есть только 1 моделька и небольшой набор CRUD операций к ней. Стоит ли вообще добавлять в проект Mapper или на меня как на дурачка посмотрят?
Аноним 14/11/23 Втр 20:52:10 #28 №2922110 
>>2922107
вопрос использования мапперов это вопрос религии.
Аноним 14/11/23 Втр 20:55:47 #29 №2922112 
>>2922110
Так есть ли шанс что эти старания хоть кто то оценит? Или сразу в касту пониже за подобные приколы определят
Аноним 14/11/23 Втр 21:01:14 #30 №2922116 
>>2922112
достоинства для одного являются недостатками для другого.
лично я противник мапперов за их неявность, то есть предпочитаю маппить явно

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

вот за это на костре сожгут
Аноним 14/11/23 Втр 21:44:35 #31 №2922173 
2023-11-1421-23-24.png
2023-11-1421-39-05.png
Аноны, подскажите че делать.

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

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

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

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

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

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

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

Но все выглядит как какая-то переусложненная залупа.
Аноним 15/11/23 Срд 01:10:57 #35 №2922351 
>>2922321
>Про какие именно паттерны идёт речь? Их много.
Я не могу подсказать точно. На мой взгляд тут громадный объем работы, если делать с нуля.
По идее у тебя определенно должны быть сервисы, чтобы если что, то можно было бы что-то еще добавить без боли, или чтобы в будущем замена одного не мешала другому. От этого и копай.

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

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

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

Я месяц потратил чисто на АНАЛИЗ своего приложения. Собирал данные и структурировал всё, смотрел как сделано у других. Мне никто в общем-то не подсказывал ничего глобального ИТТ. Тут один анон подсказывал какие-то локальные вещи, был достаточно компетентный, но он по ходу съебался. Он мне рассказал про MVVM паттерн, потому что до этого я считай вручную забивал данные в текстбоксы и была целая каша, когда одни и те же данные должны были отображаться в разных окнах, к примеру. Потом мне понадобилось логирование, а в туторах оно разъяснялось через Dependency Injection — так я познакомился с сервисами. А с этими вещами все достаточно легко масштабируется.
Аноним 15/11/23 Срд 12:34:27 #36 №2922729 
>>2922112
>Так есть ли шанс что эти старания хоть кто то оценит?
Ты неправильно ставишь вопрос. Это не должно быть "стараниями". Ты должен достаточно хорошо разбираться в технологии так, чтобы вопрос "прикручивать или не прикручивать" был из области вкусовщины, а не того сколько ты времени затратишь на это дело.
Аноним 15/11/23 Срд 15:33:44 #37 №2922990 
читаю что нового в шарпе 12
все мутнее и мутнее

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

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

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

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

примари конструкторы - тут же вам не котлин блин. Хотя и там они тоже спорное решение
(хотя как решение "а давайте принудим людей делать легковесные конструкторы, а логику не пихать в конструкторы" - норм, но в котлине поэтому есть init, а в шарпе что?)
Аноним 15/11/23 Срд 16:38:54 #38 №2923113 
>>2922990
В котлине местами ощущается, что делали неопытные люди. Ну типа этот инит выглядит как быстро фикс кривизны примари конструктора, когда у них есть обычные конструкторы.
Аноним 15/11/23 Срд 16:42:18 #39 №2923121 
>>2923113
Или же они позже добавили обычные конструкторы, но не выкинули инит. Хз, как можно было проигнорить момент, что бывает больше чем один конструктор, это ппц.

Помню они еще убеждали, что приватные сеттеры нам не нужны.
Аноним 15/11/23 Срд 16:45:12 #40 №2923126 
>>2923113
это не фикс кривизны, а разделение присвоения данных и логики
ну а вторичные конструкторы вынужденная мера, ведь иногда нужно больше 1го конструктора


зато в WPF сделали наконец диалог выбора папки. Не ждали? а они взяли и сделали, чтобы шарписты страдали.
Аноним 15/11/23 Срд 16:51:09 #41 №2923138 
>>2923126
>это не фикс кривизны, а разделение присвоения данных и логики
Там можно без инит присвоить полям, инит родили как раз чтобы логику впихнуть от первичного.
Просто если у тебя больше чем присвоить данные поля - вхерачь уже конструктор, какой нахер еще инит.

В общем, сначала идея, потом костыль. lateinit в туже степь
Аноним 15/11/23 Срд 16:58:53 #42 №2923166 
>>2923138
> у тебя больше чем присвоить данные поля
ну котлин вообще пошел по пути "меньше символов"

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

так что латеинит не хватает в шарпе. А ! как раз костыль
Аноним 15/11/23 Срд 17:40:12 #43 №2923266 
>>2923166
Нефига ты анализаторы одухотворяешь. Может там сделано как раз наоборот? Разработчик компилятора даже говорил, что у них нет внутренней доки, ты представляешь какой там бардак?

Просто проблема шарпа в том что на него натягивают, а котлин такой уже родился, но даже тут можно было не использовать 100500 ключевых слов, а сделать что-то типа:
val vr: Type = ?
Или вообще по дефолту следить за всеми не нулл полями без инициализации (самим помечать как lateinit)
Аноним 15/11/23 Срд 17:49:30 #44 №2923285 
>>2923266
>Нефига ты анализаторы одухотворяешь
потому что это ревью кода на стадии разработки этого кода. Иногда могут ошибаться, но обычно точно указывают либо на ошибку, либо на неоднозначность.

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

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

И да - в том же шарпе наделали туеву хучу аттрибутов на эту тему типа MayBeNullWhen (и чет их не парит использование 100500 слов), а вот латеинит нет.
Аноним 15/11/23 Срд 18:03:08 #45 №2923318 
>>2923285
Кто вообще тебе сказал что я разделял компилятор на фронтенд и бэкенд. Я сказал компилятор в целом и да, бардак.
Не удивляюсь почему котлин так медленно развивается.

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

Сейчас бы вообще сидеть и сравнивать прокси язык с полноценной платформой. Хочешь, иди сделай пару сахарков и изобрети какой-нибудь F#
Аноним 15/11/23 Срд 18:11:56 #46 №2923331 
>>2923285
>и чет их не парит использование 100500 слов
Школота даже не понимает разницу между атрибутами и вреде ключевых слов, особенно уже живущего языка.

Написал бы это предложение раньше, я бы отвечать даже не стал.
Аноним 15/11/23 Срд 18:30:15 #47 №2923352 
image.png
Сука проклинаю тот день когда выбрал ебучий шарп.

Платят копейки, везде ебучее легаси и конкуренция с индусами за миску супа.
Аноним 15/11/23 Срд 18:34:48 #48 №2923358 
>>2923352
Индусы пишут на всем, что скажет западный барин. Просто последние годы связка .NET Fullstack + Azure стала востребованной у аутсорсеров и в Индии пооткрывали сертифицированных центров от майков.
Аноним 15/11/23 Срд 18:39:49 #49 №2923360 
>>2923358
>.NET Fullstack + Azure
Литерали ми блядь
Аноним 15/11/23 Срд 18:51:32 #50 №2923364 
>>2923318
а я не знаю почему ты связываешь анализаторы и компилятор.
Компилятор это конечно базовый анализатор правил чтобы код компилировался
Но в общем неважно - мне без разницы кто ВМЕСТО МЕНЯ проверяет код на нулсафети, лишь бы делал это правильно и мне сообщал об этом.

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

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

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

>>2923331
>разницу между атрибутами и вреде ключевых слов, особенно уже живущего языка.
ну значит иди нах раз такой умник выискался
для справки - в шарпе предлагался АТТРИБУТ lateinit. Я вообще не ебу че ты завел речь про компиляторы, ключевые слова и прочее. Я говорил лишь про нуллсафети и способы с ней жить. Шарп высрал тонну разных аттрибутов на эту тему, но в итоге просто ставишь ! чем сможешь подобрать "как бля пояснить анализатору что тут не будет нулл потом и пусть заткнется"
Аноним 15/11/23 Срд 19:11:18 #51 №2923374 
Шарпаны, привет из джавы
Попробовал я ваш дотнет и сказать, что я охуел - ничего не сказать. Написал меньше, чем на джаве, а прочитать это проще. Буквально по-английски читаю без доки и понимаю, что здесь будет происходить.
Вообщем покопаю поглубже, поизучаю. Говорят, что я от entity framework и linq должен охуеть и невыхуеть обратно. На что еще обратить внимание?
Аноним 15/11/23 Срд 19:59:55 #52 №2923413 
>>2923374
На unsafe джавадебил, ты решил тактику сменить?
Аноним 15/11/23 Срд 20:05:37 #53 №2923419 
>>2923413
Че дебил-то сразу?
Аноним 15/11/23 Срд 20:08:46 #54 №2923420 
>>2923374
Шарп последние годы тяготеет к ФП. Не прям полностью, но заметно.
Из интересностей - генераторы кода потыкать.

А если так. MediatR, Foddy, Automapper, Dapper и в бой. EF - лично мне за годы работы с ним - больше боли принес.
Аноним 15/11/23 Срд 20:17:04 #55 №2923424 
>>2923420
а мне медиатр и автомаппер
потому что явное для меня лучше неявного.
Аноним 15/11/23 Срд 21:18:04 #56 №2923507 
>>2923420
>Dapper EF
SQL не нужен
Аноним 15/11/23 Срд 21:24:09 #57 №2923520 
Медиатор - это типа event bus? Это же пиздец антипаттерн, неявные зависимости, в которых потом ни за что не разберёшься. Это уровня goto, который может по любым файлам прыгать.
Аноним 15/11/23 Срд 21:54:22 #58 №2923558 
>>2923520
Медитр - это типа диспечера запросов. Просто немного по уебищному обзывают свои методы.

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

Ну а про то что может по любым файлам прыгать. Тебя контроллеры не смущают? Вот ты добавил новый контроллер - вот, теперь хуй пойми как, но ты после запросика по нужному роуту оказываешься в своем контроллере. Сылок на этот контроллер - 0 штук. Магия. Нахуй. Чет не смущает.
Аноним 15/11/23 Срд 22:07:10 #59 №2923567 
>>2923558
>Магия. Нахуй.
А вот в....
Аноним 15/11/23 Срд 22:12:29 #60 №2923571 
>>2923558
>вот, теперь хуй пойми как,
нет не хуй пойми как, а по вполне понятным заданным правилам
и да - это вынужденная мера поскольку мы ВЫНУЖДЕНЫ роутить по строковым правилам

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

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

+features
|--feature_a
|----controller
|----request
|----response
|----handler
|--feature_b
|----controller
|----request
|----response
|----handler
Аноним 15/11/23 Срд 22:28:25 #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
Аноним 15/11/23 Срд 22:40:17 #63 №2923590 
>>2923584
У нас обычно фичи осмысленно как-то называются.
Типа: DeviceRead, DeviceControl, DeviceReload, DeviceFirmwareUpdate, etc если все в одной папке будет - будет неудобно.
Аноним 15/11/23 Срд 22:42:09 #64 №2923592 
>>2923581
ну то есть ты пруфанул что у тебя логика размазана по всяким там хендлерам и вообще везде. Вместо явной зависимости которую вызываем (пусть и через интерфейс) мы посылаем "на деревню дедушке", а где этот дедушка - хз вообще то. А как этот дедушка дружит с транзами если мы что то делаем с ними - опять хз

Дедушки лежат по всему проекту и все общаются сообщениями.
мало отличий от классического евентбаса со всеми ему присущими недостатками.
Аноним 15/11/23 Срд 22:50:52 #65 №2923594 
>>2923592
Потому что плюсов - больше чем недостатков, няша.
Ну серьезно.
Начинать можем от того, что мы ХОТИМ снизить связность.
Заканчивать, что в случае рефакторинга, у тебя не меняются те части кода, которые к непосредственному рефакторингу не относятся, и на ревью не прилетает 100500 измененных файлов, через которые ревьюер не будет прбираться и просто завернет такой ПР.
Аноним 15/11/23 Срд 23:06:56 #66 №2923606 
>>2923594
>Потому что плюсов - больше чем недостатков, няша.
все это ОЧЕНЬ СУБЪЕКТИВНО
у тебя оно решает какие то проблемы, другие создает. Просто зло для тебя является допустимым, но так считают далеко не все.
Что для одного достоинство - недостаток для другого.
что рождает статьи подобные "Вероятно вам не нужен MediatR"

та же херня и с автомпперами. и с орм, и евентбасами и вообще всем на свете.
Аноним 15/11/23 Срд 23:24:40 #67 №2923619 
Если вы ещё обожаете MediatR, значит вы просто не сталкивались с упоротыми его ценителями. Я вот сталкивался.

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

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

Вся это было сделано для того, чтобы универсальным способом логировать все действия в системе для аудита от безопасников.
Аноним 15/11/23 Срд 23:30:24 #68 №2923623 
учуся в быдлоунике, изучаем сишааарп, этот язык кому-то нужен ваще ? я хз
Аноним 15/11/23 Срд 23:30:58 #69 №2923624 
>>2923623
Мне нужен.
Аноним 16/11/23 Чтв 01:24:18 #70 №2923668 
>>2923594
Я сейчас могу по всему коду приложения гулять через ctrl, find usages и find implementation. У меня явный и логичный граф зависимостей, в коллстеке всегда явно просматриваются слои абстракции.
Мне кажется, что медиатор используют там, где изначально дизайн кода говно, явным образом прокидывать зависимости стыдно, dependency injection будет порождать циклы, вот и маскируют этот ад пересылкой сообщений.
Аноним 16/11/23 Чтв 01:29:03 #71 №2923669 
>>2923668
нет
медиатор используют там, где хотят уменьшить связность
и в итоге впадают в другую крайность - слишком слабо связано, все через сообщения через медиатор.
Кто то считает, что "если код нормально разложить, то все там понятно и структурно, да и вообще можно вклиниться".
Другие же считают, что логика слишком размазана по проекту и никакая структуризация тут не поможет.
Аноним 16/11/23 Чтв 09:09:26 #72 №2923737 
>>2923623
Нет, сейчас все пишут на MERN стеке и питончике броу... Скажи своим преподам что они скуфы!
Аноним 16/11/23 Чтв 13:27:37 #73 №2923977 
>>2923623
открой hh и посмотрим, кому нужен
Бонусом получишь список того, что именно из него нужно
Аноним 16/11/23 Чтв 13:48:05 #74 №2924019 
>>2923623
Жаба протухла, нужна новая джава, вот и учи язык будущего.
Аноним 16/11/23 Чтв 15:03:33 #75 №2924136 
>>2923977
>открой hh и посмотрим, кому нужен
и получишь список того, где программисты не задерживаются
Почему? хороший вопрос.
Аноним 16/11/23 Чтв 15:20:23 #76 №2924149 
>>2924136
Ага ага, все топовые вакансии только в секретном клубе чатике!
Аноним 16/11/23 Чтв 15:25:54 #77 №2924154 
>>2924149
ваще то да. я именно так себе и нашел. сам не искал, это меня нашли и еще упрашивали. холят и лелеют, чуть какашки за мной не убирают.
Аноним 16/11/23 Чтв 15:46:06 #78 №2924183 
>>2924136
Человек спросил, кому нужен сишарп, я ему ответил, где смотреть. Мне похуй, задерживаются там или нет, пусть хоть на один день нанимают. Если ищут сишарп разработчика - значит в компании используют или собираются использовать сишарп
Аноним 16/11/23 Чтв 16:34:06 #79 №2924267 
>>2922351
>Он мне рассказал про MVVM паттерн, потому что до этого я считай вручную забивал данные в текстбоксы и была целая каша, когда одни и те же данные должны были отображаться в разных окнах, к примеру.
Ну, у нас эта задача решена на уровне ERP. Там контрол на форме привязывается к полю таблицы БД, и они сами общаются между собой через data source и его data object-ы. Правда, чем отличается контроллер, модель представления и вот этот вот data source я что-то до сих пор никак не пойму.
А вопрос о рассылках был скорее в сторону "как сделать нечто универсальное, подходящее для самых разных задач". Пожар - уведомить соответствующие категории получателей. Датчики дают показания, требующие внимания - уведомить какого-нибудь дежурного специалиста в таком-то подразделении. Кому-то завтра на смену выходить - уведомить его и его начальника, например. Ну и так далее.
Часто нужно уведомить какую-то категорию получателей, отобранную по должности в каком-то подразделении. Проблема в том, что структура предприятия, или, скорее, предприятий, очень запутанная. Структур как бы несколько параллельных. При этом многие ветви одной из структур похожи, но не идентичны. А в другой вообще чёрт ногу сломит. Это просто дерево подчинённых подразделений, да ещё и с неограниченной вложенностью. И всё это можно ещё условно разделить по категориям: склады, производственные подразделения, офисы... И список должностей это целый зоопарк, где каких-нибудь сварщиков может быть четыре вида, хотя все они делают одну и ту же работу. Есть особый справочник, в котором перечисляются ответственные по подразделениям и т.д.
И вот приходят к нам и говорят, например: У нас проблема, к нам каждый день приходит технадзор и штрафует нас, вручая нам акты. А мы должны своевременно устранить косяки, а для этого мы должны автоматически генерировать уведомления начальникам участка и их руководству. И так по каждому участку. Но определить крайнего зачастую не так-то просто. То должность ему не ту поставили, то в график не внесли, то ещё чего-нибудь. То он уволился и вместо него с такого-то числа назначен другой. При чём иногда должность одна, а работу человек выполняет другую.
И ещё одна проблема - мы не можем предсказать, что от нас захотят завтра. Вот такой опыт может быть у кого-то есть?
Аноним 16/11/23 Чтв 17:01:16 #80 №2924299 
Спрашиваю не холивара ради. А зачем вообще C# нужен? Микросервисы - java/go, десктоп - qt/gkt, мобилки - java/kotlin. Какая область применения C#? Я даже представить не могу себе, что веб-сервис на C# будет на линуксе крутиться, безумие какое-то.
Аноним 16/11/23 Чтв 17:03:30 #81 №2924301 
>>2924299
>Микросервисы - java/go
жава...микросервисы...ооокай
го язык на любителя.
>десктоп - qt/gkt
это вообще не языки программирования если че
> мобилки - java/kotlin

и вот тебе нужно знать целый зоопарк технологий вместо чего то одного.
Аноним 16/11/23 Чтв 17:04:30 #82 №2924303 
>>2924301
>это вообще не языки программирования если че
И чего? Используется там в основном C++/C.
>жава...микросервисы...ооокай
Что не так? Спрашивал в другом треде, сказали на Java Spring пишут спокойно
Аноним 16/11/23 Чтв 17:06:55 #83 №2924307 
>>2924303
>там в основном C++/C.
которые тоже внезапно нужно знать. и языки это так себе
и да - кутю можно использовать даже из шарпа, просто "а зачем"
>сказали на Java Spring пишут спокойно
у жавистов свое понятие минимализма. софт жрет 100000 гигов оперативы - ну нормально, докупи еще, память дешевая (с)
Аноним 16/11/23 Чтв 17:09:18 #84 №2924309 
>>2924307
Хорошо. А по поводу того того, на каких серверах исполняется? На линуксе он хорошо себя чувствует? Слышал .net core якобы поддержку имеет.
Аноним 16/11/23 Чтв 17:15:24 #85 №2924313 
>>2924309
я ж тебе не гугл на детские вопросы отвечать
отлично он чувствовал себя на линуксе уже несколько лет назад.
Аноним 16/11/23 Чтв 17:20:54 #86 №2924316 
>>2924309
На линуксах уже нормально работает лет так 5. Сейчас MS вообще активно затачивает рантайм на работу в Linux-контейнерах. Есть даже офф. docker-образы https://hub.docker.com/_/microsoft-dotnet-runtime/ на базе различных дистрибутивов. Пользуемся имя для деплоя своих микросервисов в K8s. Зависимость есть. Брат жив.
Аноним 16/11/23 Чтв 17:23:49 #87 №2924318 
>>2924316
ну у меня брат умер когда нужно было использовать netvips (биндинги для потоковой обработки имаджей) и на линуксах стабильно утекала память (а на винде нет)
Понятно что это проблемы линуксов и с сишными либами ниже, но все же это доставило много много проблем, которые не решились.
Аноним 16/11/23 Чтв 18:15:40 #88 №2924364 
>>2924299
Помимо перманентной долбежки в бэкенд на всех языках, у шарпа есть просто неоспоримое преимущество - геймдев.

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

еще и вменяемый десктоп из всего зоопарка альтернатив, если не учитывать полпроцента десктоп-линуксоидов
Аноним 16/11/23 Чтв 18:24:40 #89 №2924377 
16996660636320.png
>>2924309
Лучше чем джава
Аноним 16/11/23 Чтв 18:29:20 #90 №2924385 
image.png
>>2924299
С учетом того что шарп второй язык интернета, можно было ротешник не открывать.
Аноним 16/11/23 Чтв 18:31:31 #91 №2924393 
>>2924385
>PHP 76,7%
Лол.
Аноним 16/11/23 Чтв 18:37:02 #92 №2924412 
Снимок экрана 2023-11-11 031302.png
Снимок экрана 2023-11-11 031346.png
Снимок экрана 2023-11-11 031618.png
>>2924377
Хуже, чем джава.
Аноним 16/11/23 Чтв 18:38:45 #93 №2924419 
16633360650392.png
>>2924393
Если смотреть по миллионикам, то там пхп уже сосули
Аноним 16/11/23 Чтв 18:41:32 #94 №2924428 
>>2924412
Опять обиженный прибежал показывать как сокетные квази-веб-сервера всех побеждают.
Аноним 16/11/23 Чтв 18:42:15 #95 №2924429 
>>2924428
По делу что нибудь скажешь?
Аноним 16/11/23 Чтв 18:44:51 #96 №2924433 
image.png
>>2924412
>>2924428
А тем временем, асп.нет это топ 3 всех серверов.

Это еще не учитывая 8 дотнет, где они на 25% подтянули json и фортуну.
Аноним 16/11/23 Чтв 18:45:35 #97 №2924435 
>>2924364
Они написаны на C# просто потому что M$ проплатили юнити. Там необязательно мог быть юнити. Более того, я часто видел как юнити ругают именно за это, за то, что там C#.
Аноним 16/11/23 Чтв 18:47:48 #98 №2924437 
>>2924433
>наши великие 99,9%
>обоссаные 99,9% у джавы
Аноним 16/11/23 Чтв 18:51:07 #99 №2924449 
>>2924433
Обосрался со скрина. Буквально погрешность
Аноним 16/11/23 Чтв 18:51:55 #100 №2924451 
javacs.png
>>2924435
Можно плакать и рыдать, но юнити это шарп, кроме шарпа там костылено, даже годот прикрутил как основной из поддерживаемых - шарп.

Шарп это уже игровая индустрия. А джава это кобол.
Аноним 16/11/23 Чтв 18:55:13 #101 №2924458 
16996660636320.png
>>2924437
Ну одно дело фулл вебфреймворк, другое сокетная перделка без поддержки фулл http, которые никто в проде не юзает.

Я уже кидал сравнение флагманов, срыг спринг победил джангу, чем не радость
Аноним 16/11/23 Чтв 18:58:56 #102 №2924468 
>>2924458
> сокетная перделка без поддержки фулл http
И щас ты выложил пруфы.
Аноним 16/11/23 Чтв 19:07:39 #103 №2924480 
>>2924468
История про рапидоид, который зависал при 404 ошибке, в цикле обработки запроса.
Два года эта залупа была в топе жабьих тестов.
Причем автор на ишью ответил спустя только 1-2 месяца, настолько это было демонстративным костылем сам ищи в гитхламе эту ишью, у меня кончилась моча вас поливать
Аноним 16/11/23 Чтв 19:10:16 #104 №2924483 
>>2924480
Ладно я нашел
https://github.com/rapidoid/rapidoid/issues/94
Аноним 16/11/23 Чтв 19:13:37 #105 №2924485 
>>2924480
Какой ещё рапидоид? Причём он тут?
Аноним 16/11/23 Чтв 19:16:13 #106 №2924491 
>>2924485
>Два года эта залупа была в топе жабьих тестов.
Аноним 16/11/23 Чтв 19:17:09 #107 №2924493 
>>2924491
И чё?
Аноним 16/11/23 Чтв 19:18:25 #108 №2924496 
>>2924493
Ниче
https://www.youtube.com/watch?v=1vgDUbK7Tao
Аноним 16/11/23 Чтв 19:19:15 #109 №2924497 
>>2924496
Слив принят.
Аноним 16/11/23 Чтв 19:20:09 #110 №2924498 
>>2924496
Слив принят.
Аноним 16/11/23 Чтв 19:22:07 #111 №2924499 
>>2924496
Слив принят.
Аноним 16/11/23 Чтв 19:22:45 #112 №2924500 
>>2924497
Мокрый, но непоколебимый.
Аноним 16/11/23 Чтв 20:23:59 #113 №2924586 
Опять жавистов обсыкаете? прекращайте. лучше обсуждайте дотнет 8
Аноним 16/11/23 Чтв 20:35:49 #114 №2924601 
>>2924299
> Микросервисы - java/go
Просто нет.
Если микросервисы, то это либо питон, когда надо быстро наговнякать, либо раст, когда хотим перформанса, либо шарп, когда у нас штат шарпистов.
> десктоп - qt/gkt
Это кто что-то сложное на этом пишет-то, лол? Буквально весь сложный десктоп завязан на шарпе + какой-нибудь Devexpress я конечно преувеличиваю, некоторые штуки всякие немцы на Qt пишут и там сложное, но это пишут штатом из 200 С++ кодеров, нахуй, в то время как на шарпе сложный десктоп делает тетя Маша, которая умеет перетягивать из конструктора контроллы и настраивать в визуальном редакторе, как оно должно себя вести, именно потому - так больно переходить было на кор и потому - фреймворк классический до сих пор поддерживают и парралельно в него впиливают всякое. Потому что считай ВЕСЬ, мать его, десктоп на этом держится.

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

> Какая область применения C#?
Именно что любая. Мать его, я видел как на заводах GSM-модули управляются шарпом в устройствах, потому что все буквально есть на все случаи жизни С КАРОБКИ. Хуяк-хуяк и погнали, 2 недели - MVP выпустили.
Аноним 16/11/23 Чтв 20:41:18 #115 №2924608 
>>2924586
Было бы что обсуждать... Хотя блейзер сервер научили автоматически отсылать клиентам компоненты завернутые в васм. Теперь хоть какой-то фронт появился. Толстый клиент, хуе-мое. Надо будет попробовать, как оно на вкус...
Аноним 16/11/23 Чтв 20:43:50 #116 №2924611 
Кстати, там это, в привью студии рефреш UI вышел...
Аноним 16/11/23 Чтв 20:46:15 #117 №2924613 
>>2924601
Гуй на C# будет работать только на винде.
Аноним 16/11/23 Чтв 20:52:18 #118 №2924620 
>>2924613
Ну. Т.е.на абсолютном большинстве десктопов мира.
Аноним 16/11/23 Чтв 20:59:10 #119 №2924627 
>>2924620
Плевать что там у "абсолютного большинства". Есть эталон для гуя и это Qt. Если пишешь программу не на Qt, то она просто не нужна. Особенно если эта программа будет платной и бесполезной.
Аноним 16/11/23 Чтв 21:05:38 #120 №2924631 
>>2924613
Есть Авалония и Уно, долбаеб
Аноним 16/11/23 Чтв 21:07:25 #121 №2924633 
>>2924627
Именно потому, те кому таки нужен таки кроссплатформенный гуй - пишут его на всяких флаттерах, реакт-нейтивах, електронах и прочем, но не на Qt.

Ну срсли. Ну чел. Qt - нормально, если ты попенсорс для линукса делаешь. Или ты сименс, нокла, но в остальных случаях - Qt - нахуй не упал, тем более в 2023
Аноним 16/11/23 Чтв 21:14:13 #122 №2924643 
>>2924627
>Есть эталон для гуя и это Qt.
Есть эталон говноеда и это ты.
Аноним 16/11/23 Чтв 21:21:20 #123 №2924656 
>>2924633
если ты питонист то кутя твой выбор ибо любое другое хуже.
но если ты шарпист, то ты уже не жавист, что великолепно
Аноним 16/11/23 Чтв 21:23:07 #124 №2924659 
>>2924643
>пук
Правду про вас, шарпомушек, молвили "злые" языки, чуть что сразу рвонькаетесь и оскорбляете анона, нехуй с вами дел иметь, вечно догоняющими.
Аноним 16/11/23 Чтв 21:29:14 #125 №2924675 
>>2924631
Это ты долбаеб, мать твою ебал. Авалония и Уно это дерьмище основанное на WPF/UWP, худших высерах M$.
Аноним 16/11/23 Чтв 21:29:32 #126 №2924676 
>>2924659
Аррря, ты че они уже обогнали. Пока в джаве давным давно существуют нормальные прокси классы, шарпушкам барен разрешил использовать их и без интерфейса. Вот это да, ух как по жабе ударили! Победно. Так глядишь и гуй на линукс переедет, а то у них там брат живой, но без гуя.
Аноним 16/11/23 Чтв 21:36:29 #127 №2924688 
2023-11-1621-18-31.png
>>2924267
>Ну, у нас эта задача решена на уровне ERP Там контрол на форме привязывается к полю таблицы БД, и они сами общаются между собой через data source и его data object-ы.
А говоришь данные захардкожены. А если у тебя данные о сотруднике находятся за пределами, то это плохая база данных.

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

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

>А вопрос о рассылках был скорее в сторону "как сделать нечто универсальное, подходящее для самых разных задач".
Каких? Программа должна принимать решения, когда на предприятии непонятно кто заступил на смену, а кто уволился? Даже если ты разошлешь сообщение потенциальным исполнителям, то зная Петровичей, они будут скидывать ответственность друг на друга.
Аноним 16/11/23 Чтв 21:41:35 #128 №2924696 
>>2924676
пришел жавист и пукнул. обычное дело. я даже не буду просить его показать где в его говножаве прокси без интерфейса создается. так что отвечать мне не нужно

>>2924659
злые языки это говножависты. что приперлись в тред, в который их не звали
Аноним 16/11/23 Чтв 21:51:05 #129 №2924711 
>>2924696
https://www.javassist.org/
https://bytebuddy.net/#/
https://github.com/cglib/cglib
Действительно, где же.
Аноним 16/11/23 Чтв 21:59:14 #130 №2924715 
>>2924711
а цену этому не подскажешь? ах да - стирание типов. ну такая мелочь ага. Говна поели и радуются

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

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

подумай об этом на досуге, говноед.
Аноним 16/11/23 Чтв 22:20:51 #131 №2924734 
>>2924715
>но поскольку типы не стираются то сложнее сделать как в жаве
Почему сложнее?

мимо питонист
Аноним 16/11/23 Чтв 22:24:14 #132 №2924736 
>>2924715
>а цену этому не подскажешь? ах да - стирание типов. ну такая мелочь ага. Говна поели и радуются

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

>>2924736
ответил
Аноним 16/11/23 Чтв 22:30:02 #134 №2924747 
>>2924740
>На уровне CLR такая информация есть. И динамически в рантайме ты ее не подменишь

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

то есть рантайм CLR старается быть безопасным по возможности
поэтому и LinqExpressions сгенеренный метод работает медленней чем через IL ибо всякие там проверки безопасности. Но даже в чистом IL с типами лучше не играться. Все нестабильно. Я игрался - в моих методах я опустил il инструкции и просто молюсь ктулху что все будет ок (ибо если бы это была не моя личная либа - меня бы сожгли, а потом....снова сожгли, но сначала сожгли)
Аноним 16/11/23 Чтв 22:37:44 #136 №2924757 
>>2924747
то есть IL от дотнета более безопасный от вмешательств, чем такое же для жавы
вот сколько ковырял и менял smali - так там куда более лояльно относится ко всяким хакам, чем в MSIL
Аноним 16/11/23 Чтв 22:47:49 #137 №2924766 
>>2924756
>>2924757
А плюсы от этой безопасности вообще есть? Я пока вижу, это как какой-то маразм, из-за которого либ крутых нет.
Аноним 16/11/23 Чтв 22:53:26 #138 №2924770 
>>2924766
от небезопасности smali тоже ничего хорошего. все работает после вмешательств - а везде ли? а вот хз

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

Никаких ансейфов, обычная генерация типов в рантайме.
Но я делал это правда явно. Надо было сделать duck.As<IBird>(); Потому что - тут я все же считал, что явное - лучше неявного. НО думаю, что если закопаться вглубь - можно и неявно как-нибудь делать.
Аноним 16/11/23 Чтв 23:00:55 #140 №2924777 
>>2924773
сгенерить класс адаптер/прокси легко. Просто если у класса нет интерфейса/базового класса/или он сам закрыт для переопределения
то мы не можем передать наш объект прокси куда то, где ждут сам оригинал
поэтому если не интерфейс, то всякие там либы требуют делать методы virtual чтобы можно было их переопределить.
Аноним 16/11/23 Чтв 23:08:26 #141 №2924783 
Да, как капчу пройти-то?
Аноним 16/11/23 Чтв 23:11:08 #142 №2924784 
2023-11-16234240.jpg
Хардбасс, уважаемые!
Памахите советом и своим важным мнением.
С# или 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?.. если уж как бэ лунапарк с нуля
Аноним 16/11/23 Чтв 23:12:07 #143 №2924785 
>>2924783
пойти в школу и выучить базовые арифметические операции
(ну или как я тыкать капчу пока не будет простое выражение ибо влом считать в уме)
Аноним 16/11/23 Чтв 23:16:55 #144 №2924787 
>>2924785
я думал ей надо как обычно, всё что видишь вводить, а не примеры решать
давно не заходил
Аноним 16/11/23 Чтв 23:23:38 #145 №2924795 
>>2924787
все просто. поступаешь в 1 класс и там за 11 классов тебя научат считать
а потом идешь куда то и учишь шарп

действуй
Аноним 16/11/23 Чтв 23:23:43 #146 №2924796 
>>2924783
Купи пасскод. На что-то же ты должен тратить миллионы, заработанные программированием на шарпе.
Аноним 16/11/23 Чтв 23:27:46 #147 №2924803 
>>2924796
на шлюх конечно он должен тратить
ну что за вопросы. какой еще пасскод. ты что
Аноним 17/11/23 Птн 00:11:18 #148 №2924828 
>>2924747
Неправильно ссышь на шарподебилов. Не "как это подложило вам говна в штаны", а "мне похуй на причины вашего говна в штанах".
Аноним 17/11/23 Птн 00:14:09 #149 №2924834 
>>2924828
жаваговнсит копротивляется
забавно
у стирания типов как есть плюсы
так и минусы

но шарпговножую этого не понять.
Аноним 17/11/23 Птн 00:14:52 #150 №2924836 
>>2924828
блин
жавоговножую. ну ты понел
Аноним 17/11/23 Птн 00:15:40 #151 №2924838 
йоба.jpg
>>2924834
>>2924836
Красноречивая оговорочка.
Аноним 17/11/23 Птн 00:16:51 #152 №2924842 
>>2924838
у меня продолжается тяница. шарпист может себе это позволить ))))
Аноним 17/11/23 Птн 00:18:52 #153 №2924844 
>>2924688
>А говоришь данные захардкожены.
Некоторые захардкожены. Прямо почтовые ящики в исходном коде указывают. А иногда по коду сотрудника вычисляют, но код сотрудника также может быть зашит в исходный текст какого-нибудь метода, и потом поди его найди, чтобы поменять.
>>2924688
>Или речь идет о хардкодинге свойств условной модели?
Речь о том, что получателей иногда прямо в коде указывают. Кроме того, даже если они прямо и не указаны, то отбор событий для уведомления всё равно зачастую построен на жёстких правилах, которые нельзя настроить, не влезая в код. А требования к рассылке уведомлений периодически меняются. Типа "давайте по такой-то фигне уведомлять будем не сегодняшнего дежурного, а того, кто завтра дежурит". А у нас написан метод, которому на вход вообще дата не подаётся. Или "а давайте по таким-то поломкам уведомления будем слать не начальникам подразделений, а замам начальников". А у нас написан метод, который умеет одного сотрудника возвращать, но не список сотрудников, а замов много. И не всегда возможно настройками из какой-либо формы перенастроить логику отбора сотрудников и событий для оповещений.
Аноним 17/11/23 Птн 00:35:02 #154 №2924863 
>>2924842
>продолжается тяница
Няш, мне вообще не нравица, то что ты столько бухаешь. Это типа такая профилактика после пользования шарпа? Прекращай как бы, а то оскуфеешь и кто ж тебя в мужья-то возьмет?
Аноним 17/11/23 Птн 00:37:20 #155 №2924865 
>>2924863
это значит что у меня достаточно бабла для этого
шарп тут не причем. шарп лишь дает денежку
ну да нужно прекратить, но блин легче сказать
а в деньгах проблемы нет
Аноним 17/11/23 Птн 00:40:27 #156 №2924867 
>>2924784
> С# или Java?
Джава конечно.

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

Шарподебилы тут же щас начнут копротивляться и пытаться что-то контрвспукнуть, но обрати внимание, ничего они даже пытаться опровергать не будут, только скажут "нинужно" и "ничестно", либо вообще начнёт какую-то несвязную ересь нести, еле-еле касающуюся темы.
Аноним 17/11/23 Птн 00:43:26 #157 №2924872 
>>2924865
Да-да, денег много, я понял. Вложи это в свое здоровье лучше, а не вот это вот все. Консультации там, обследования можно провести, зубки проверить, лазерную эпиляцию бахнуть, а может пластику небольшую совсем провести. Столько возможностей, ех.
Аноним 17/11/23 Птн 07:47:57 #158 №2924951 
>>2924784
Очевидно у тебя уже шарп на работе и есть шанс. Ибо сомневаюсь что где-то имеет вес джун 35+. Так что без вариантов.

Пошаговых курсов полно, на тех же инетах есть качественный курсы (в том числе слитые) где за ручку водят как дебила. Но ценности это не имеет, так как профессия заставляет уметь собирать инфу самому, то что ты за 3 месяца просмотра узнаешь, что мог бы узнать за неделю на каком-нибудь metanit или доках мс, делает все эти видео разводом для лохов (как местный жабёнок).
Аноним 17/11/23 Птн 08:04:28 #159 №2924954 
16996660636320.png
>>2924867
>+скорость выше в 3-26 раз
Да. чем у питона.
>+асинхронность без загрязнения кода через async/await
Зеленые треды хороши только когда у тебя фулл язык на них как го, в остальном это такие костыли что ппц. Асинки это наилучшие решение если язык изначально был "синхронным".
К сожалению после убийства жабы в андройде, жаба стала больше никому не нужна, кроме кабанчика с накопившимся кобол-кодом, поэтому 21 жабы ты на проде никогда уже не увидишь.
>+обратная совместимость
Такая что половина еще на 8 сидит, лол.

Дальше мне стало чет лень кормить жабёнка, развлекай лучше ты нас.и да, мы со злости не пойдем бамбать тонуший жабий тред
Аноним 17/11/23 Птн 08:48:20 #160 №2924961 
Кто шарит за MaterialDesignInXaml в WPF

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

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

А если мне надо чтобы только одно окно было оформленно этой либой? Писать везде Style=none тот еще долбоебизм
Аноним 17/11/23 Птн 09:28:13 #161 №2924993 
>Зеленые треды хороши только когда у тебя фулл язык на них как го, в остальном это такие костыли что ппц. Асинки это наилучшие решение если язык изначально был "синхронным".
Вот это шарпушиный копиум, конечно. Индусы из майкрософта не осилили и сделали дешевый костыль с асинками, значит не нужно. В то время как белые люди из оракла посидели, подумали и не спеша выкатили абсолютно бесшовно работающее решение. Ей богу, у вас секта, а не язык.
Аноним 17/11/23 Птн 09:52:35 #162 №2925016 
Как по нормальному конвертировать string в double с учетом всей этой региональной еботни?

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

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

Есть нормальная функция которая правильно работает?
Аноним 17/11/23 Птн 10:02:53 #163 №2925022 
>>2925016
Нет ни единой в мире либы которая нормально работает с конвертацией из строки в дабл.
Аноним 17/11/23 Птн 10:04:02 #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+.
вот здесь немного больно стало
Аноним 17/11/23 Птн 10:11:31 #165 №2925031 
>>2924954
> Да. чем у питона.
Не надоело урину на ебальник принимать? -> >>2924412

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

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

> Такая что половина еще на 8 сидит, лол.
Один хуй её больше, чем в шарпоговне, в котором вместо "добрый день" — "апинейм удалено".
Аноним 17/11/23 Птн 10:16:03 #166 №2925034 
>>2924951
Да, и какой план у шарповиков, если MS запретит использование своих продуктов в рфии?
Понятно, что вряд ли кто-то с двача вообще хоть раз покупал лицензионную винду. Если только не с ноутом впридачу.

Однако пиратство и офицальный запрет всё же немного разное. Скорей всего разработка на C# будет скукоживаться.
Аноним 17/11/23 Птн 10:57:02 #167 №2925095 
>>2925034
>если MS запретит использование своих продуктов в рфии
Как запретит? Скажет "не пишите на C#" и ножкой громко топать будет?
Аноним 17/11/23 Птн 11:33:43 #168 №2925137 
>>2925095
ну я хз, как именно можно запрещать и ножкой топать и как поведет себя работодатель. и я не знаю девелоперских зависимостей от продуктов MS

У меня есть пример из QA. В прошлом году пришлось отказаться от slack и testrail с многолетней историей, тысячами сущностей, перекрестных ссылок между ними и техдолгом!
Были возможности и обходные пути, как остаться на них, но компания решила, что мы переезжаем. Это было очень больно и до сих пор аффектит.
Аноним 17/11/23 Птн 11:39:15 #169 №2925141 
>>2925137
Весь дотнет уже давно опенсурсный (компилятор, рантайм, оф. либо). Так что я хз, как MS сможет это запретить. Максимум могут перестать лицензии на студию отпускать. Но и это не проблема. К примеру, те же жидбрейнс уже полтора года как ушли из России, а у нас в компании лицензии на их продукты до сих пор как-то продлятся/покупаются.
Аноним 17/11/23 Птн 11:39:27 #170 №2925142 
>>2925137
>ну я хз, как именно можно запрещать
во первых сама платформа оно опенсурс.
во-вторых есть клоны как языка, так и платформы, в том числе от линуксоидов, надо будет, опять откопают
в-третьих C# это просто стандарт. надо будет, напишут свой компилятор
Аноним 17/11/23 Птн 12:34:18 #171 №2925242 
javacs.png
>>2925034
Да, но пока ровно наоборот.
Аноним 17/11/23 Птн 12:39:55 #172 №2925253 
>>2925024
>Может, ты, опытный - ткнёшь пальцем в годный курс по С#
Я вкатился уже давно, но люди хвалят ITVDN на торрентах как отдельно, так и 300гиговая раздача была, но я не помню точно, меня просвещали джуны
Аноним 17/11/23 Птн 12:41:12 #173 №2925257 
>>2925242
Есть openjdk. Или опять не то?
Аноним 17/11/23 Птн 12:42:15 #174 №2925259 
>>2925031
Жабёнок, обоссы себя сам, не интересно одно и тоже, старайся лучше, приелся уже.
Аноним 17/11/23 Птн 12:44:27 #175 №2925265 
javafree.png
>>2925257
Кустарное подделие с тормозами и тонной подводных неточностей, но для хеллоуворда норм.
Аноним 17/11/23 Птн 13:18:31 #176 №2925336 
image.png
>>2925253
Найс. Спасибо.

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

Може(те) сказать вкратце, чем отличаются эти три вида разрабов с пикрила? Чтобы для себя понять и примерно сопоставить, кем являются наши разрабы, например.
Аноним 17/11/23 Птн 13:23:15 #177 №2925348 
>>2925336
был дотнет фрейворк и кор, последний опенсорсный, позже в 5 версии дотнета их объединили, убрав пропретарную версию
Аноним 17/11/23 Птн 13:25:28 #178 №2925353 
Есть ли способ как из РФ подключаться к GPT без геморроя и чтобы не слетало? Желательно без vpn.

Пробовал регаться с зарубежных сервисов по отправке СМС. Зарегался, но подключение потом к самому чату нестабильно. Периодически отваливается.
Аноним 17/11/23 Птн 13:25:40 #179 №2925354 
>>2925336
был дотнет фрейворк (старый) и кор (опенсорсный), позже в 5 версии дотнета их объединили, кор стал основным.
Там тебе в курсах объяснят
Аноним 17/11/23 Птн 13:25:48 #180 №2925355 
>>>>2924961
ну если оно делает путем подключения словаря ресурсов то просто подключай его только в нужном окне

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

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

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

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

>>2925348
не объединили, а кор стал 5 версией, а старый дотнет умирает.
Аноним 17/11/23 Птн 13:27:27 #181 №2925359 
>>2925348
правильно ли я тебя понял, что сейчас, после релиза NET6, 7, 8

ASP.NET Core + ASP.NET = C#.NET разработчик ?
Аноним 17/11/23 Птн 13:32:11 #182 №2925366 
>>2925359
По годам надо смотреть, сейчас core просто убрали.
Аноним 17/11/23 Птн 13:33:30 #183 №2925372 
>>2925366
Или тут я навру
Аноним 17/11/23 Птн 14:11:44 #184 №2925411 
>>2925359
Нет. Ты можешь быть .net разрабом и никогда в жизни не притронуться к ASP.NET-у. Например в десктопе или геймдеве.
ASP.NET(Core) это отдельный фреймворк для разработки сервисов и веб-приложений.
Аноним 17/11/23 Птн 14:19:59 #185 №2925415 
dbc41d63b8ed112ef1c734cb53d8d027.jpg
Насколько кал? Не хочу читать западные переведёнки т.к. понимаю насколько разрушительно хуёвым может быть перевод, но и моего B2 не хватит чтоб понимать ангельский. Если это кал посоветуйте других русских ну и желательно не времена мамонта, боюсь что выучив 5 нет нихуя не пойму в будущем.
Аноним 17/11/23 Птн 14:44:57 #186 №2925465 
>>2925137
>как поведет себя работодатель.
>У меня есть пример из QA.
То что ты привел как пример, это всего лишь замена одного набора инструментов на другой. Да это может быть больно и неудобно, но в основном для рядовых исполнителей. Т.к. по факту персонал остается тот же, его нужно просто переучить и дать привыкнуть. Все. Даже зарплаты поднимать не нужно. Я такие перемены переживал не раз. Замена с редмайна на джиру+конфлюенс. Переход с битбакета на гитлаб, и т.д. Одних мессенджеров корпоративных уже 3 штуки только за этот год поменялось. И т.д.

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

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

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

Так что расслабь булки.
Аноним 17/11/23 Птн 14:58:58 #187 №2925481 
>>2925415
>Насколько кал?
Чел 2018-й год... Там про .net framework рассказывается и приводятся скрины из 2015-й студии. Сам то как думаешь?
Оно на момент выпуска может и норм было, но уже 5 лет прошло, тут тебе не джава, у нас все что старше двух...трех лет, уже устарело (ну может кроме Рихтера, это чтиво на все времена, но не для всех и к обучению оно не имеет отношения)
>>2925415
>кал посоветуйте других русских
Русских нет. А вот в переводе можешь вот это взять:
"C# 10 и NET 6 Современная кроссплатформенная разработка [2023] Марк Прайс". Судя по тому, что переводила та же команда, которая до этого переводила Эндрю Лока с "Aps.Net в действии", перевод должен быть нормальным.
Аноним 17/11/23 Птн 15:00:35 #188 №2925483 
>>2925415
Книга/10

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

Просто берешь и проходишь.
Аноним 17/11/23 Птн 15:02:22 #189 №2925489 
image.png
>>2925415
Ппц какие вы привередливые, вы не вкатитесь в айти с такими запросами. Жри Троелсона, новое нагуглишь
Аноним 17/11/23 Птн 15:14:11 #190 №2925511 
>>2925481
>>2925483
>>2925489
спасибо
Аноним 17/11/23 Птн 15:43:13 #191 №2925581 
>>2924844
>Прямо почтовые ящики в исходном коде указывают.
Такого быть не должно. Такие данные должны быть за пределом кода. Либо в какой-то доп базе данных, если редактирование основной недоступна. Но все проблемы таких систем в поддержании актуальности данных. Именно поэтому ERP это не дешевая шутка.

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

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

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

Я шучу, а может и нет. Но мне кажется, что большая часть проблем решается обычными методами, типа дописывания еще одной функции, если приложение остаточно модульное, либо фильтрации данных. Некоторые проблемы решается с опытом.
Аноним 17/11/23 Птн 18:10:55 #192 №2925831 
Может ли конторе прилететь иск, если я скопирую в проект классы из этой папки? https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/Math
Аноним 17/11/23 Птн 19:34:16 #193 №2925925 
>>2924756
>если метод Foo(Bar b) принимает этот Bar, то если ты туда что то передашь не этот типа у тебя рантайм рухнет

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

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

питонист
Аноним 17/11/23 Птн 19:51:18 #194 №2925951 
>>2925925
Изменение байткода, это как педерастия, порядочные джависты такое в проекты не тащят кроме тестов, которые в проде будут выкинуты.

Понятно, что местный ребенок никогда не работал в тырпрайзе и просто радуется очередной магической динамикодрисне, но не стоит опускаться до таких уровней.
Аноним 17/11/23 Птн 19:59:18 #195 №2925959 
>>2925353
бамп вопросу
сегодня не только лишь все в этом треде голосуют за путина сидят на chat GPT, разве не?

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

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

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

Впрочем, спасибо.
Аноним 18/11/23 Суб 06:04:40 #205 №2926381 
>>2925265
>кустарное поделие
>openjdk
Помолчал бы, умнее выглядел, дегенерат.
Аноним 18/11/23 Суб 06:05:50 #206 №2926382 
>>2925259
Слив принят.
Аноним 18/11/23 Суб 06:07:57 #207 №2926383 
>>2925355
>что-то непонятное меряют
Ты совсем еблан? Это буквально тот же тест, на который я отвечал, только не обрезанный по удобному для шарподебилов, а полный.
Аноним 18/11/23 Суб 06:53:54 #208 №2926392 
>>2926382
Это хорошо что ты свои сливы осознаешь и принимаешь.
Аноним 18/11/23 Суб 07:02:41 #209 №2926394 
>>2926369
Тебе же сказал для вката в сторону ITVDN смотреть. Нет начинают дальше зарываться в канализацию.

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

Реально сложные вещи там никто не разбирает, так как, видимо, боятся вкатунов спугнуть.
Аноним 18/11/23 Суб 08:01:31 #210 №2926412 
>>2926392
>стрелочка
Лол.
Аноним 18/11/23 Суб 08:37:12 #211 №2926421 
>>2925137
> В прошлом году пришлось отказаться от slack и testrail с многолетней историей, тысячами сущностей, перекрестных ссылок между ними и техдолгом!
Куда по итогу перекатились?
Аноним 18/11/23 Суб 12:01:08 #212 №2926543 
>>2926394
>ITVDN
Да, качнул пару вводных видосов, чтобы сориентироваться в этих Automation Script Pages

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

>>2926421
Вместо слака - ебучая отечественная "Пачка". У которой регулярно проёбываются уведомления пользователям при меншинах. Т.е. по сути, главная функция корпоративного мессенджера - тегнуть кого-то, чтобы он пришёл или внимание обратил - проёбывается.
Вместо ебучего тестрейла, который нам постоянно md- разметку ломал, пересели на гуглдоки
Что-то с джирой пытаются намутить, может зефир там или что-то другте будет.
Аноним 18/11/23 Суб 12:28:47 #213 №2926578 
>>2926383
>Ты совсем еблан?
я 1000^5000 раз говорил что скорость без учета фич можете засунуть себе в жопу
в скорости если захотеть может порвать всех даже синклербейсик
а толку
Аноним 18/11/23 Суб 12:34:24 #214 №2926583 
>>2926543
>Вместо ебучего тестрейла, который нам постоянно md- разметку ломал, пересели на гуглдоки
Ебать, импортозаместились.
Аноним 18/11/23 Суб 12:45:58 #215 №2926590 
Какие же майкрософт - пидорасы.
Взяли и на похуй - поменяли 80 порт на 8080 по дефолту.
Мне теперь как еблану - лезть nginx. Допиливать композ ебучий.
Вот просто реально. Как жа это бесит. Неделя до сдачи на прод, тимлид - особенный: давайте накатим .NET8. Теперь вместо того чтобы чуть больше потестить и чет причесвать - бегай порты меняй, проверяй, что ниче там не сломалось в плане доступности.
11/10 короче. Обожай мелкомягких.
Аноним 18/11/23 Суб 12:58:54 #216 №2926599 
>>2926590
Причем здесь Майкрософт? Твой тимлид не особенный, а просто долбоеб, который за неделю до дедлайна решил вкатить новую версию
даже студенты в вузах так не делают
Аноним 18/11/23 Суб 13:10:35 #217 №2926615 
>>2926599
Ну. Не могу же я ему вот так и сказать. Типа токсичненько слегка.
Аноним 18/11/23 Суб 13:23:32 #218 №2926624 
>>2926590
Продакшн
@
Без тестирования накатили обнову перед выходными
@
Не сконфигурирован явно порт в приложении
@
Доярка пролила молоко на сервер
Аноним 18/11/23 Суб 13:47:39 #219 №2926644 
>>2926578
Перечитай ещё раз моё сообщение и перечитывай до тех пор, пока не дойдёт.
Аноним 18/11/23 Суб 13:48:56 #220 №2926645 
>>2926590
Лол, а говорили копрософт не ломает обратную совместимость с 4 петушарпа! Опять напиздели что-ли? И самое главное это даже задокументировано не было в графе breaking changes, пиздец, ахаха!
Аноним 18/11/23 Суб 13:49:23 #221 №2926646 
image.png
Петуханы, подскажите где я мог проебаться? Скажу сразу, что я хуепутало самоучка и быдлокодинг моё хобби.
Сейчас пилю проект на шарпе, десктопное приложение, планирую его монетизировать путем продажи ключей доступа с повременной оплатой. Для проверки лицензии планирую подключаться к собственному серверу авторизации по TCP, с некоторой периодичностью буду посылать hearbeat пакет где буду проверять не наебывает ли юзер мой клиент разреверсив алгоритм проверки авторизации и подняв свой сервер, помимо этого через TCP буду гонять туда сюда разные данные. Понятное дело, что приложение будет обфусцировано и всё сделано по максимуму, для того, чтобы взлом был нецелесообразен по временным затратам.

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

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

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

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

Есть какие-либо замечания?
Аноним 18/11/23 Суб 13:50:32 #222 №2926647 
>>2926646
>петуханы
Чёт проиграл. Какой тред, такое и обращение.
Аноним 18/11/23 Суб 13:53:31 #223 №2926651 
>>2926645
Это не ломающее изменение, просто пидорасы - решили что теперь в контейнерах по дефолту прописана переменная окружения с портом не 80 а 8080. Дескать УЛУЧШАЕМ ЭКСПИРИЕНС ТЕХ КТО НЕ ПОД РУТОМ, ну охуеть, блядь, а те кто под рутом - пусть страдают получается. Пиздец нахуй.
Но из-за этого теперь - надо допиливать docker-compose, надо nginx перенастраивать, интеграционные тесты - заново прогонять, чтобы проверить - что все доступно. Это такой гемор, когда по плану было на след неделе уже на прод выкатить.
Аноним 18/11/23 Суб 13:57:56 #224 №2926653 
>>2926651
Подучи определение брекинг ченджа, хули.
Аноним 18/11/23 Суб 14:03:11 #225 №2926659 
>>2926615
НА ТИМЛИДА НЕЛЬЗЯ ВЫЁБЫВАТЬСЯ
@
ЗНАЧИТ, ВИНОВАТ МАЙКРОСОФТ


>>2926645
Уже задокументировали
https://learn.microsoft.com/en-us/dotnet/core/compatibility/8.0
> Default ASP.NET Core port changed to 8080
Аноним 18/11/23 Суб 14:06:31 #226 №2926662 
>>2926659
Ох ты ж пиздец сколько там поломок... Когда я в первый раз смотрел, там буквально одна поломка была написана, какой-то апи выпилили.
Аноним 18/11/23 Суб 14:08:43 #227 №2926666 
170030480029275058.jpg
>ррррря кроссплатформенность кококо!
>ой а почему мой код работающий на шинде не работает на юниксе
Аноним 18/11/23 Суб 14:14:35 #228 №2926677 
>>2926653
Всегда считал, что ломающими можно считать только когда ломается либо синтаксис, либо поведение либ. А окружение. Ну, на самом деле - мы бы могли свои контейнеры делать и сами прописать нужный нам порт, просто мы - ленивые для этого + не хотим тратиться на поддержку этого дела. Короче, не знаю, реально ли считать это ломающим измененеием или нет, даже если майки так считают.

>>2926659
Та можно и повыебываться. Просто не называть же его просто долбоебом. Это неконструктивно.
А назвать майков пидорасами - сам бог велел. Типа ну срсли. У меня с этим обновлением еще и HTTP клиент сломался, если пытаюсь с 65000+ портами соединяться(всегда их ставил для тестов, но теперь - почему-то кидает исключение, дескать закрыто, хотя сервер на который обращаюсь, даже не получил соединение, и тем же постаманом - все еще нормально можно кидать запросики, короче, шляпа).
Аноним 18/11/23 Суб 14:17:54 #229 №2926680 
>>2926666
Хуже то, что такие точечные поломки на линуксе будут ещё лет 10. Был бы язык кроссплатформенным с самого начала - не пришлось бы это переделывать.
Аноним 18/11/23 Суб 14:18:29 #230 №2926682 
>>2926677
Ты может перестанешь копротивляться? Даже твой барин сам признал, что это брейкинг чендж.
Аноним 18/11/23 Суб 14:34:48 #231 №2926721 
Аноны, почему выражение:
new PriorityQueue<MyObject, double>(Comparer<double>.Create((a, b) => a - b))
вызывает ошибку компилятора о том, что он не может double в int преобразовать? Вроде конструктор принимает компаратор на дженерике, не выкупаю почему ожидается int
Аноним 18/11/23 Суб 15:25:14 #232 №2926801 
>>2926651
>интеграционные тесты - заново прогонять, чтобы проверить - что все доступно.
Т.е., обычно при обновлении сред вы этого не делаете? Ну охуенно, успехов вам тогда.
Аноним 18/11/23 Суб 15:32:27 #233 №2926809 
>>2926680
>Был бы язык кроссплатформенным с самого начала - не пришлось бы это переделывать.
Там дело не в языке, а в том, что майки тупо хуй забили на написание нормальной кроссплатформенной IO библиотеки. Типа вот есть базовый функционал, он работает, что-то больше - ебитесь сами. Или mono.posix юзайте или свое делайте.
Честно говоря, поработав с файлами в линухе, я их поинмаю. Линукс то еще говнище в этом плане.
Аноним 18/11/23 Суб 15:34:07 #234 №2926813 
>>2926644
перечитал. до меня дошло что ты жавист. а жависты они долбоебы по определению
Аноним 18/11/23 Суб 15:38:02 #235 №2926819 
>>2926809
Почему когда двачеры выпердывают в интернет мнение по какой-то технологии, то они забылвают добавить пример в качестве пруфа.
Аноним 18/11/23 Суб 15:57:28 #236 №2926850 
>>2926819
Каких тебе пруфов нужно чудила?
Попробуй просто через стандартный System.IO хотя бы линуксовые пермишены на файл прочитать/раздать, а когда не получится погугли и увидишь, что из нормальных вариантов только моно.юникс, который хрен знает уже сколько в пререлизной версии находится (но справедливости ради, работает вроде бы четко)
Аноним 18/11/23 Суб 16:12:50 #237 №2926874 
>>2926809
>Честно говоря, поработав с файлами в линухе, я их поинмаю. Линукс то еще говнище в этом плане.
В UNIX идеальная концепция файлов и иерархии.
Аноним 18/11/23 Суб 16:37:28 #238 №2926930 
Тред кухарок
Аноним 18/11/23 Суб 17:44:43 #239 №2927057 
16870873892190.png
>>2926930
Аноним 18/11/23 Суб 18:02:30 #240 №2927072 
Заметил, что sealed используют только чсв ебанаты
Аноним 18/11/23 Суб 18:09:43 #241 №2927077 
>>2927072
Рихтера начитались.
Аноним 18/11/23 Суб 18:13:42 #242 №2927078 
>>2927072
И правильно делают, я не для макак свои классы пишу, которые думают, что что-то могу там исправить. Если че-то не устраивает - можно всегда своё написать с нуля.
Аноним 18/11/23 Суб 20:52:47 #243 №2927247 
Хм.
Что смотрите.
У меня в приложениях - чет дохуя словарей статичных которые нужны просто чтобы читать какие-то штуки по имени.

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

Типа чем это:

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

Но ведь все мы знаем, что словари - это медленно.
И вот че меня заинтересовало. А может ли шарп - такую оптимизацию проводить: смотрит, что словарь - неизменяемый - и заменяет его массивом?
По мне - была бы отличная хуйня, если словарь используется чисто как хранилище.
Аноним 18/11/23 Суб 21:26:03 #244 №2927300 
image.png
Аноним 18/11/23 Суб 23:39:08 #245 №2927398 
>>2926543

> Вместо слака - ебучая отечественная "Пачка". У которой регулярно проёбываются уведомления пользователям при меншинах. Т.е. по сути, главная функция корпоративного мессенджера - тегнуть кого-то, чтобы он пришёл или внимание обратил - проёбывается.
Печально. Еще и платный. А есть свободный зулип.
> Вместо ебучего тестрейла, который нам постоянно md- разметку ломал, пересели на гуглдоки
Для доков - аскидок, но там синтаксис чуть отличается от md
Аноним 18/11/23 Суб 23:57:49 #246 №2927418 
>>2927247
А искать ты в этом массиве как собрался? А если тебе не нужен поиск, тогда нахуя тебе вообще словари?
Аноним 19/11/23 Вск 00:18:08 #247 №2927443 
>>2927247
Зачем такая оптимизация в языке, если самому сделать с массивами легко? Заводишь константы с индексами, инициализируешь массив, дальше в коде везде обращаешься с использованием констант. И что это у тебя за немыслимо тяжёлые вычисления, где "словари слишком медленные"?
Аноним 19/11/23 Вск 00:21:23 #248 №2927449 
Такое дело.
Есть бд в ней модель собранной html страницы, и есть просто папка с этими хтмл страницами.
Дак вот, получение страницы через Where(n = n.Name ="zalupka").FirstOrDefault()
Гораздо дольше че получение страницы из файла по его имени File.ReadAllLines("zalupka.html")
Вангую потому что поиск идет а файл я беру сразу.
Стоит ли мне еще протестировать модель в которой праймери кей будет string и иметь то самое название как у файла а именно zalupka ?
Можете примерно почувствовать будет ли скорость выше чем если бы я брал данные из файла?
Аноним 19/11/23 Вск 00:26:54 #249 №2927459 
>>2927449
upd
файлов и следовательно записей в бд 300к
Аноним 19/11/23 Вск 00:28:05 #250 №2927461 
>>2927449
Индексы в твоей БД хоть есть?
Аноним 19/11/23 Вск 00:34:19 #251 №2927467 
>>2927461
Я хуй знает.
Sqlite Code First что студия мне там создала в душе не ебу.
Аноним 19/11/23 Вск 00:37:32 #252 №2927471 
>>2927467
Значит, индексов нет, и каждая запись ищется полным перебором.
Аноним 19/11/23 Вск 00:42:16 #253 №2927481 
image.png
>>2927471
Понял принял спасибо, добавлю индексы.
Приближусь ли я к такой же скорости как и с файлами?
Пикрил выборка 1к записей по 1 шт за раз.
Аноним 19/11/23 Вск 00:54:45 #254 №2927491 
>>2927481
Может, даже быстрее файликов будет. От многого зависит.
Аноним 19/11/23 Вск 01:05:57 #255 №2927499 
>>2920885 (OP)
пришел с /b треда, может тут подробнее ситуацию смогут объяснить. (мне сейчас некогда за Б смотреть, спать надо)

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

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

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

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


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

>Подавать заявки на СТАЖИРОВКИ
смотрел до этого стажировки в своем районном городе
их 0.
рядом миллионник не смотрел.
а вот МИДЛОВ дохуя хотят. в магазы в основном.

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

но я хз какой проект придумать, чтобы и в будущей игре сгодилось и никто не заподозрил, что это будет ФУРРИ игра. я чувствую себя человеком, но люблю заверотянок очень, типа акул, оборотней, волчиц. такие дела.
вкратце: от 1 лица, за человека-неудачника в сайфай вселенной короче, где он полетит на планету отрабатывать долги, иначе его пихнут в биореактор, а биомусор с плохими генными данными как он, не в почете на Земле. но лучше в 2д наверн вначале будет оптимально.
или какую то прогу просто лучше сваять потихоньку для диплома?
Аноним 19/11/23 Вск 01:18:45 #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?
Например в панельке админа я добавил новый сайт, бд то я создам, а как потом использовать тот контекст который мне нужен?
Аноним 19/11/23 Вск 01:44:34 #257 №2927516 
>>2927499
ты хоть пробовал игры то делать? Не советую геймдев. Если хочешь вкатиться туда, где ещё есть места, советую бэкенд, на шарпе можно в бэк. Только там надо ещё базы данных знать и скорее всего докеры хуекеры всякие. Учи язык, учи проектирование на языке, асинхронное программирование, дрочи задачи алгоритмические, чтоб собес на джуна/стажера пройти. Курсы хорошие есть от Окуловского на ulearn, бесплатно, основы программирование 1,2 и проектирование на c#
Аноним 19/11/23 Вск 08:49:29 #258 №2927627 
>>2926813
Ясно, слив принят.
Аноним 19/11/23 Вск 12:46:06 #259 №2927893 
>>2925951
> Изменение байткода
Иногда необходимо (манки патчинг). Ясен хуй к срыгу это не относится, так как там с самого начала всё построено на волшебстве.
Аноним 19/11/23 Вск 12:47:34 #260 №2927896 
>>2925925
Всё правильно ты не понимаешь, он хуйню несёт.
Аноним 19/11/23 Вск 13:24:44 #261 №2927989 
>>2927896
верно. несу хуйню. я на IL не пишу, я всего лишь иногда правил IL по простому и smali по сложному.
я лишь смотрю что всякие там фейки,молы,субституты могут обернуть класс (без интерфейса - раз, причем публичный - два) в проксю, но запроксирует только виртуальные методы.
Почему? хз.
Аноним 19/11/23 Вск 13:49:49 #262 №2928040 
Мужики, а че учить после того как овладел базовым синтаксисом?
Аноним 19/11/23 Вск 14:10:35 #263 №2928076 
>>2928040
Все. Кроме того, фреймворки, которые делают то, чем ты хочешь заниматься.
Аноним 19/11/23 Вск 14:14:59 #264 №2928087 
Ребят, это прикол какой то? Набираю в поиске c# вакансии без уточнений, выдает 2-3 вакансии всего. Это шутка или от платформы в рф полностью отказались?
Аноним 19/11/23 Вск 14:23:16 #265 №2928102 
>>2928087
Звучит, как происки джавистов...
Аноним 19/11/23 Вск 14:43:21 #266 №2928139 
>>2928087
Х/з. Может особо перестали на всякие хх вакансии выкладывать. Мне в телегу хрюни с предложениями регулярно долбятся, хотя я уже полтора года резюме не открывал. Причем частенько хрюни из достаточно крупных компаний (Озон, Яндекс, Тинькофф и т.д.) или кипрские галеры. Так что работа на .net есть. Другое дело, что июни сейчас особо никому не нужны.
Аноним 19/11/23 Вск 14:47:20 #267 №2928144 
Как жить, если ты впф разработчик? На асп возьмут только джуном, падение доходов минимум вдвое, да и для этого нужно будет рвать жопу и учить жс с реактом после работы и по выходным.
Аноним 19/11/23 Вск 14:49:17 #268 №2928147 
>>2928144
Мммм. Продолжать писать десктоп на впф?
Аноним 19/11/23 Вск 14:50:52 #269 №2928149 
>>2928147
Хочу сытые сотыгы, они только в асп
Аноним 19/11/23 Вск 15:36:57 #270 №2928245 
>>2928144
Ну, у тебя два варианта.
Либо ты дальше сидишь-пердишь на WPF на прежнем месте ещё лет 5, и в случае увольнения охуеваешь, что вакансий на WPF особо и нет, а те что есть - кудлатое легаси за копейки. По итогу, так как иначе, придёшь к мысли, что надо учить ASP .Net и выкатываться на бэк.
Либо берешь яйца в руки и начинаешь учить ASP .Net прямо сейчас. Причем жсопарашу можно и не учить. Есть вакансии на ASP .Net, где ты будешь чистым бэкенд разрабом. (Я к примеру сейчас даже к HTTP почти не прикасаюсь. У нас все взаимодействие между сервисами через GRPC и кафку. HTTP только на apigw, чтобы с фронтом общаться).
В принципе, если подучишь ASP Net, SQL и архитектуру, то сможешь попытаться и на Мидлла скатиться, особенно если с софтами все хорошо. Я в свое время вообще с UWP-ждуна перекатится на ASP-мидла. (Правда у меня был опыт в веб-разработке, но не на C#).
Аноним 19/11/23 Вск 15:49:18 #271 №2928278 
>>2928102
Опять жависты насрали в мои портки...
Аноним 19/11/23 Вск 15:54:37 #272 №2928290 
>>2928278
Хедхантер же на джаве, вот они и скручивают лайки вакансии на шарфик.
Аноним 19/11/23 Вск 15:58:19 #273 №2928305 
>>2928290
Ну вот хх на жабе, а какие реальные проекты на сишорпе?
Аноним 19/11/23 Вск 16:02:24 #274 №2928315 
>>2928305
Только самые хорошие...
Аноним 19/11/23 Вск 16:15:14 #275 №2928361 
>>2928305
Из прям известных - Stackoverflow и его побратимы (Server Fault, Super User)
Аноним 19/11/23 Вск 16:20:35 #276 №2928370 
>>2928361
Врети
Аноним 19/11/23 Вск 16:26:37 #277 №2928377 
>>2928361
Посмотрел кстати, у них html-ка на сервере рендерится. И кто после такого говорит, что SSR плох? На сайте-то не 2 человека сидят.
Аноним 19/11/23 Вск 16:30:19 #278 №2928387 
>>2928377
Ты прикинь какой ебичкой мощности сервера нужны, чтобы это работало. А обычным кабанам нужно чтобы девшего и сердито было...
Аноним 19/11/23 Вск 16:31:36 #279 №2928391 
>>2928387
>А обычным кабанам нужно чтобы девшего и сердито было...
И C# сюда не подходит сразу же, удивительно да? Легче ведь пыховода нанять, чтобы он наговнял быстренько.
Аноним 19/11/23 Вск 16:35:05 #280 №2928397 
>>2928391
Наговнякать не трудно и на шарпах, чел...
Аноним 19/11/23 Вск 17:24:36 #281 №2928474 
>>2928397
Кринж же, чел...........
Аноним 19/11/23 Вск 17:32:24 #282 №2928482 
>>2928474
Чел...
Аноним 19/11/23 Вск 18:59:23 #283 №2928604 
>>2927516
а путь от Михаила Флёнова норм?
Аноним 19/11/23 Вск 19:00:15 #284 №2928606 
>>2927516
нет... не пробовал.
но знаю как это трудно. ведь уметь надо все. либо на аутсорсе собирать по фрагментам, платя кому то денежку.
Аноним 19/11/23 Вск 19:10:57 #285 №2928629 
.png
>>2927499
> мечтал всегда игори делать
А чо не дела-то? Хотя бы ту же змейку.
> я хз какой проект придумать, чтобы и в будущей игре сгодилось и никто не заподозрил, что это будет ФУРРИ игра
Делай свою систему для менеджмента проектами с историей версий, изменениями, правами доступа и т.д.
Такая-то джира+гит для ассетов и доков в одном флаконе. Это реально полезная хуйня в геймдеве была бы, потому что те же модельки-текстурки художник проебал, и хуй как восстановишь, а если в гит лить - то в контексте не кода - нихуя не понятно, а что изменили, как найти ту версию, что нужна и прочее. Вот если бы кто-то сделал аналог гитовских инструментов для вот этой всей хуйни - это был бы реально полезный проект, а вся хуйня с менеджментом - до кучи, чтобы все с каробки.
Аноним 19/11/23 Вск 19:50:29 #286 №2928709 
image.png
>>2928087
>Это шутка или
Нет это ты или зеленый или дурачок.
Аноним 19/11/23 Вск 19:56:55 #287 №2928727 
>>2928629
интересно. записал в блокнот.
Аноним 19/11/23 Вск 20:33:30 #288 №2928784 
Вопрос работягам, вы пытаетесь в перфоманс на работе? Ну типо написали вы какой то код. Работает. Будите его оптимизировать или похуй, если попросят только тогда оптимизировать?
Аноним 19/11/23 Вск 20:42:02 #289 №2928798 
>>2928784
На реальных задач редко есть пространство для перформанса.
Это только на мелком пет проекте или там, где ты хотя бы половину всего кода контроллируешь, возможно.
Аноним 19/11/23 Вск 20:47:48 #290 №2928809 
>>2928784
В основном стараюсь делать упор на удобство будущей поддержки кода.
В перформанс очень редко. Только если с НТ приходит весть, что возможны выходы за SLA, тогда разбираюсь с ними где узкие места и там правлю.
Аноним 19/11/23 Вск 21:01:59 #291 №2928841 
>>2928784
Обычно я пытаюсь в перформанс, который дёшево стоит и не сильно влияет на читаемость кода. Типа использования правильных типов коллекций, минимизация походов в базу/внешние сервисы и т.д. Ну и на планы SQL-запросов просматриваю, когда код, работающий с базой пишу.
Специально улучшением производительности кода редко заниматься приходится. Да и опять же, обычно все в оптимизацию запросов к базе упирается. Но иногда все же приходится, особенно если инфраструктурные штуки пилишь. У нас есть парочка таких (своя обёртка над Confluent Kafka и люто оптимизированный по памяти парсер экселей).
Аноним 19/11/23 Вск 21:19:36 #292 №2928871 
>>2928784
Мой алгоритм такой:
Сделать фичу
Потестировать труками
Покрыть тестами сверху
Если были ошибки - исправить
Отрефакторить чтобы менее говняно смотрелось
Отправить на ревью

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


Почему я так делаю? Потому что на самом деле - оказывается вот так, что 95% кода - перформанса с тупым решением в лоб достататочно. И если я буду тратить время, чтобы оптимизировать все и вся - я фичи, которые нужны заказчику - сделать не успею, либо хуево потещу, либо я хуево напишу, что через год - не пойму, что эта хуйня вообще делает. В результате - на выигрышь в перформансе - всем буквально будет насрать. В результате - мне будут ебать мозги, лишат премии, и прочая хуйня. Вот и на кой оно мне надо?
Аноним 19/11/23 Вск 22:39:57 #293 №2929022 
БАМП НАХУЙ, НАНОСЕКИ ЕБАНЫЕ ХОТЬ ОДИН ОТВЕТ БУДЕТ? >>2926646
Аноним 19/11/23 Вск 22:52:15 #294 №2929048 
>>2929022
Саааааси хуууй, сааааси. Соси соси соси. Ты тупой тупой, долбоееееб.
Аноним 20/11/23 Пнд 00:03:26 #295 №2929116 
image.png
>>2927491
>>2927449
С индексами быстрее но не быстрее чем с файлами(
Аноним 20/11/23 Пнд 00:17:36 #296 №2929124 
x.jpg
Всем привет! Сегодня я понял, что мне нужно изучить C#.
Ну как изучить, хотя бы понять на любительском уровне.
Посоветуйте книжку/pdf/сайт, чтобы примерно понять основы.
До этого в основном верстал-дристал фронтенд.
Аноним 20/11/23 Пнд 00:20:45 #297 №2929127 
image.png
Hello Ana!
Как-то не так вначале прочиталось...

Metanit - норм сайт? Вроде висит в шапке.
Аноним 20/11/23 Пнд 00:22:10 #298 №2929131 
>>2929124
>>2929124
Метанит или MSDN
Или какой нибудь ебантяй с ютуба, если вода нравится конечно.
Аноним 20/11/23 Пнд 00:24:03 #299 №2929133 
>>2929131
Рихтера имеет смысл читать?
Аноним 20/11/23 Пнд 00:28:21 #300 №2929134 
>>2929133
Может быть потом.
С начала просто выучи синтаксис, Рихрет тот пиздец нудный.
Но ты начни читать и посмотри как пойдет. Главное научится учится.
Аноним 20/11/23 Пнд 00:29:26 #301 №2929137 
>>2929134
Я мимо, надо было дописать. У меня есть опыт на сях и других языках эзотерических, так что с синтаксисом проблем не будет, кишочки интересны.
Аноним 20/11/23 Пнд 00:32:09 #302 №2929138 
>>2929133
Я пробовал. 100-200 стр прочитал кажись. Вроде оно понятно, о чем пишет, последовательно. Потом какая-то useless материя началась. Запоминать это бесполезно, без того, чтобы применять. А применять ты не можешь, т.к. не можешь даже одну минуту писать код без подглядывания в туториал или ютуб-курс.

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

мимо вкатывальщик
Аноним 20/11/23 Пнд 00:35:01 #303 №2929142 
>>2929131
Окей, спасибо. Да уж лучше читать, чем смотреть.
Аноним 20/11/23 Пнд 01:34:07 #304 №2929163 
image.png
Согласны?
Если у меня на сайте нет страницы и моё asp net core выдает 404 ошибку то это хуево? Должна быть страница 404 а код от Nginx ОК?
Аноним 20/11/23 Пнд 01:56:32 #305 №2929167 
.png
>>2929163
Согласен, только шарп тут при чём?
Аноним 20/11/23 Пнд 04:00:58 #306 №2929179 
>>2928377
Он просто древний, тогда SPA ещё не вошли в моду.
Аноним 20/11/23 Пнд 04:17:34 #307 №2929180 
>>2929163
Нет, это бред.
Аноним 20/11/23 Пнд 08:41:34 #308 №2929207 
Тред тупых хуесосов.
Аноним 20/11/23 Пнд 16:19:33 #309 №2929709 
>>2929163
ДВУХСОТКА-ДОДИК ЗАКАЗАЛ СЕБЕ ДОДОПИЦЦУ
@
ПИЦЦУ ПРИНЕСЛИ, НА КОРОБКЕ ФИРМЕННАЯ НАКЛЕЙКА "Я ПРОВЕРИЛ, ВСЁ ХОРОШО"
@
ДВУХСОТКАДОДИК ОТКРЫЛ КОРОБКУ, А ТАМ ГОВНО
@
В ГОВНЕ ТОРЧИТ ЗАПИСОЧКА "409 MESYA4NII BALANS NE SWEDEN"
@
ОХУЕВШИЙ ЗВОНИТ В ПОДДЕРЖКУ
@
НУ ВЫ ЖЕ ПОНИМАЕТЕ, ЧТО НАКЛЕЙКА ОТНОСИТСЯ ТОЛЬКО К ВНЕШНЕМУ ВИДУ КОРОБКИ
@
МЫ ЖЕ НЕ МОЖЕМ СМЕШИВАТЬ КУЛИНАРНЫЙ, УПАКОВОЧНЫЙ И ДОСТАВОЧНЫЙ ПРОТОКОЛЫ
@
ГОВНО В КОРОБКЕ ЗАКЕШИРОВАЛОСЬ
@
ТЕПЕРЬ ДАЖЕ ПРИ ОТДАЧЕ ПИЦЦЫ В ПИЦЦЕРИИ ДВУХСОТКА-ДОДИКУ БУДЕТ ПРИЕЗЖАТЬ ГОВНО В КОРОБКЕ БЛИЖАЙШИЕ 4 ЧАСА
Аноним 20/11/23 Пнд 16:27:46 #310 №2929731 
Стоит ли юзать blazor?
Аноним 20/11/23 Пнд 16:33:20 #311 №2929753 
>>2928377
> у них html-ка на сервере рендерится. И кто после такого говорит, что SSR плох?
Забавно это слышать на форуме со статичным рендером html-ек.
Аноним 20/11/23 Пнд 16:45:29 #312 №2929780 
>>2929753
Эм нет, тут JSON'ы гоняются. По крайней мере 1 раз да, ответ от сервера с готовой страничкой, потом - нет.
Аноним 20/11/23 Пнд 16:54:10 #313 №2929795 
>>2929780
Почему тогда лайки в ньюсаче обновляются только после появления новых постов на странице?
Аноним 20/11/23 Пнд 17:07:03 #314 №2929824 
>>2929709
поэтому при ошибке не нужно слать 200 (вроде бы ты как бы хттп протокол за это и ратует - не просто так там есть огромный пул ошибок)
но это не значит что нужно героически все коды натягивать на хттп
послал не 200 - а внутри суть. И никакого кеширования не будет
и где теперь твоя пицца с говном?

а 404 это "нет пиццы" или "пиццерии нет нахуй"? как отличишь?
Аноним 20/11/23 Пнд 17:15:15 #315 №2929837 
image.png
>>2929795
Не ебу. Ты можешь зайти сам в запросы и понажимать на кнопку обновить, увидишь JSON'чики с постами.
Аноним 20/11/23 Пнд 18:03:28 #316 №2929919 
Приветствую. Возникла необходимость под Desktop организовать приложение с возможностью DockManager'а -- перетаскивать окна, как по типу Visual Studio. Есть ли какие-то альтернативы платных, чтобы +\- поддержка была (обновление не позднее трех лет)? Я наткнулся на AvalonDock -- пока есть сомнения в возможностях работы, под netcore3.0 не билдится даже (знаком с WPF от силы месяца 2, возможно руки из задницы). Есть мысли?
Аноним 20/11/23 Пнд 18:05:33 #317 №2929923 
>>2929919
Вдовесок. Вообще странное впечатление возникло, что под шиндовс нет нормального докменеджера, открытого, как в вижле. Задача в проде (так что тут смотрят на лицензию).
Аноним 20/11/23 Пнд 18:08:21 #318 №2929931 
>>2929923
Задача сама по себе всратая -- нужны панели эти для графиков. Количество графиков -- ограничено памятью пк. Из возможных приглянулся ScottPlot с поддержкой ускорения. Эмпирически выбрал его по результатам.
Аноним 20/11/23 Пнд 18:47:17 #319 №2929992 
>>2929837
Ну значит просто обезьяна тупорылая сделала хуйню. В любом случае такая проблема тем более была бы и на статических хтмлках, в этом случае даже и без тупости обезьяны.
Аноним 20/11/23 Пнд 18:51:53 #320 №2930003 
>>2929992
Ну тем не менее благодаря этой "хуйне" существуют кастомные клиенты двача. Отдавалась бы статика - хуй пососали бы.
Аноним 20/11/23 Пнд 19:12:15 #321 №2930050 
>>2929824
>"пиццерии нет нахуй"?
Это уже на 500 (ну или 503) тянет.
А вообще нехуй угадайкой заниматься в стиле "у нас тут свой REST. А у нас свой". Нужно спеки на апи нормальные составлять, со всеми вариантами ответов и разрешением неоднозначностей, тогда и похуй будет, что там 'классика' или 'always 200'.
Аноним 20/11/23 Пнд 19:14:04 #322 №2930057 
>>2930003
вот только эти жсоны - такая же статика. Никакой там динамики нет.
что полный хтмл, что полный жсон - перегенеривается при посте. А дальше уже сам сервер отдает статику всем желающим с экономией на трафике путем хидеров хттп на тему If-Modified-Since

>>2930050
каких 500
500 это если пиццерия жива и у нее проблемы. Пиццерия сгорела, запрос никуда не сроутился и отдал 404
А клиент думает что это пиццерия ответила.
Аноним 20/11/23 Пнд 19:25:49 #323 №2930076 
>>2930057
>>2929824
>>2930050
Да какая нахуй пиццерия? Вы совсем со своими аналогиями ебанулись.
В РЕСТЕ 90% запросов это дай мне сущность по id. Тут вообще никаких нет разночтений, 404 — это нет искомой сущности.
Аноним 20/11/23 Пнд 19:29:23 #324 №2930085 
>>2930076
А я вот посчитал, что id низя отдавать клиентам, мол это сделает его натуральным ключом... И ввел в кортежах столбец name/number. Насколько я еблан?
Аноним 20/11/23 Пнд 19:30:31 #325 №2930087 
>>2930076
>404 — это нет искомой сущности.
ты мне тут лекции не читай, а на вопрос отвечай
нет искомой сущности - 404
что то временно случилось (косячный апдейт или жавист код писал) и запрос вообще не нашел адресата - 404

давай отличай одно отдругого
Аноним 20/11/23 Пнд 19:41:18 #326 №2930097 
>>2930076
500 - нет искомой сущности
Аноним 20/11/23 Пнд 19:44:05 #327 №2930102 
>>2930097
Вообще вот вам база
200 – запрос выполнен вот данные или ничего
500 – пизда иди нахуй вот тебе текст ошибки или "ошибка на стороне сервера пишите в ТП"
Все остальное пришлётся само тебе не надо.
Аноним 20/11/23 Пнд 19:58:30 #328 №2930125 
>>2930085
на 79.3456%
тяжело было посчитать, но я справился.
Аноним 20/11/23 Пнд 20:00:35 #329 №2930131 
>>2930003
Долбоёб, "хуйня" здесь не попытка в адекватный принцип работы сайта здорового человека, а обкуренное раковое обновление лайков при изменении содержания страницы.
Аноним 20/11/23 Пнд 20:02:58 #330 №2930139 
>>2930087
А кто сказал, что различие должно быть именно в коде ответа?
Аноним 20/11/23 Пнд 20:04:56 #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 шаблон вшит и я не могу его на лету менять и редактировать.
Аноним 20/11/23 Пнд 20:04:59 #332 №2930144 
>>2930139
ты ответил вопросом на вопрос
ясно все с тобой.
Аноним 20/11/23 Пнд 20:11:31 #333 №2930157 
>>2930125
А можно теперь расписать причины этого заключения?
Аноним 20/11/23 Пнд 20:18:20 #334 №2930167 
>>2930157
ну я глянул на чела который имеет уже счетчик уникальных номеров (и при этом у него ж вряд ли firebird, где его нужно отдельно заводить), а он сам считает, небось и сам за уникальностью следит

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

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

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

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

ну а что ты сделаешь
ну разве что рерайт на уровне nginx чтобы он знал какой файл ему нужен. Может по рефереру (ненадежно), а может по ключу что ты после ? пишешь.
Аноним 20/11/23 Пнд 20:25:32 #337 №2930174 
>>2930172
ну еще монгодб нужно прицепить и эластик. - туда эти намберы слать писать.
Аноним 20/11/23 Пнд 20:26:24 #338 №2930175 
>>2930174
Блин, ну почему вы такие вредные... Тебя блинб прицеплю.
Аноним 20/11/23 Пнд 20:27:36 #339 №2930177 
>>2930175
ему советы дают (и даже не посылают), а он недоволен
смотри так жавистом станешь и не заметишь. Берегись
Аноним 20/11/23 Пнд 20:30:45 #340 №2930179 
>>2930177
>смотри так жавистом станешь
Ты не поверишь...
>и даже не посылают
Я же няша, за что меня посылать?
Аноним 20/11/23 Пнд 20:33:03 #341 №2930182 
>>2930173
>Может по рефереру (ненадежно), а может по ключу что ты после ? пишешь.
Это как? По какому ключу?
Вобще с файлами не проблема, просто не удобство.
Аноним 20/11/23 Пнд 20:36:54 #342 №2930187 
>>2930131
Топни.
Аноним 20/11/23 Пнд 20:49:10 #343 №2930198 
>>2930087
> что то временно случилось (косячный апдейт или жавист код писал) и запрос вообще не нашел адресата - 404
Я на любую схему api могу придумать баг, который будет выглядеть как какой-то ожидаемый ответ, а означать совсем другое, так что твой аргумент инвалид.

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

>>2930102
> Все остальное пришлётся само тебе не надо.
Not authorized мне тоже веб-сервер пришлёт? Там это в лучшем случае на статику можно настроить.
А если у меня SSR, и надо редирект после пост-запроса делать, мне тоже это надо на ajax переписывать и руками редиректить?
Вообще существующие веб-серверы хорошо если треть имеющихся кодов умеют присылать. А остальные коды, что, не нужны?
Аноним 20/11/23 Пнд 20:52:02 #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'ки доставать из тела руками.
Аноним 20/11/23 Пнд 21:10:36 #345 №2930243 
>>2930198
>Not authorized мне тоже веб-сервер пришлёт? Там это в лучшем случае на статику можно настроить
Пришлет дотНЕТ и без твоего участия. В продуктовой сборке он ещё и любые исключения вернет как 500.
Я про то что руками прям обычно 200 и 500 кидают, все остальное в дотНЕТ за тебя вышлет сам фреймворк, что кошэрно и удобно и шлёт он довольно точные коды.

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

Ну и ты ещё половину моего поста проигнорировал.
Аноним 20/11/23 Пнд 21:24:06 #350 №2930275 
>>2930264
Мб гугл боту не насрать и он просечет что все мои сайты на одном приложении крутятся. Ну он по любому рано или поздно просечет, но я старюсь их делать максимально не похожими.

Ну и если флаг добавлять то я тогда ваще хуй знает как сделать, как назвать файл что бы по флагу его взяло)
Аноним 20/11/23 Пнд 21:26:15 #351 №2930282 
>>2930273
Если тебе нужен редирект верни в ответ Redirect()

Ты никогда на С# не писал или че за тупые вопросы как писать банальные вещи?
Аноним 20/11/23 Пнд 21:35:43 #352 №2930300 
>>2930282
Я знаю как всё писать, спасибо. Я и NoFound() могу вернуть, только вот NotFound по-твоему почему-то нельзя, а Redirect можно, и [Authorize] можно, и даже свой фильтр прикрутить можно, хотя во всех этих случаях код ответа будет возвращать не веб сервер, что по твоей идеологии является табу.
Аноним 20/11/23 Пнд 21:50:46 #353 №2930319 
>>2930275
делать ему больше нехер. его больше волнует что они на одном айпи и похожи по сути.
Аноним 20/11/23 Пнд 21:53:10 #354 №2930323 
>>2930319
Ну ип прячется за cloudflare а шаблоны нужны что бы они хоть как то отличались)
Аноним 20/11/23 Пнд 22:08:32 #355 №2930339 
>>2930323
тогда похапэ тебе поможет
а на деле просто заведи флаги хоть рэндомный набор букв. какая разница
Аноним 20/11/23 Пнд 22:30:50 #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 обрабатывал статические файлы.
- Безопасность: Убедитесь, что ваше решение не создает уязвимостей в безопасности, особенно если оно включает динамическое формирование путей к файлам.
- Тестирование: Тщательно протестируйте вашу конфигурацию в разных сценариях, чтобы убедиться, что все работает корректно.

Выбор метода зависит от вашего конкретного случая, ваших требований к производительности, безопасности и легкости поддержки.
Аноним 20/11/23 Пнд 22:37:12 #357 №2930367 
>>2930361
>
>
Спасибо на чат жпт не может в задачи сложнее чем hello world.
Ответ типо ну сделай хорошо и будет хорошо.
Аноним 20/11/23 Пнд 22:38:12 #358 №2930371 
>>2930367
Но он прав насчет пункта 2
И вопрос будет решеш
Аноним 20/11/23 Пнд 22:40:55 #359 №2930374 
>>2930371
У меня доменов несколько сотен и каждый день какие то удаляются а какие то прибавляются.
Аноним 20/11/23 Пнд 22:50:44 #360 №2930376 
>>2930374
И что. Заведи кота.

Или найди способ не ребутать асп, питон, руби....
Или возьми похапэ где такой проблемы нет и страдай
Аноним 20/11/23 Пнд 22:55:45 #361 №2930378 
>>2930367
ну а что ты хотел. Сам все нагадил и у нас ответы просишь
я на тебя целый вопрос потратил, а у гпт лимит 50 на 3 часа
Аноним 20/11/23 Пнд 22:56:38 #362 №2930380 
>>2930378
зачем тратить время гпт, когда тебя и так тут могут послать куда хочешь?
Аноним 20/11/23 Пнд 23:16:26 #363 №2930396 
>>2930380
когда тебя и так тут могут послать куда хочешь?
Гпт не пошлет, а максимально будет пытаться помочь. Покат лимит не закончится
Аноним 20/11/23 Пнд 23:25:14 #364 №2930401 
>>2930396
Мы пошлем. Без регистрации и смс. И даже куда не хочешь

А вообще это деградация. Молодежь не умеет гуглить,ей нужен чат
Аноним 20/11/23 Пнд 23:29:18 #365 №2930404 
>>2930401
жпт норм когда нужно накидать что то мелкое.
А для сложного кода нужно его пиздец как четко описать. Но если я его четко опишу то я сам по такому описанию смогу написать и нахуй тот жпт.

Пример.
Даем жпт код и просим написать подробное описание кода, описать каждую строку все подробно.
Он пишет портянку.
Эту портянку вставляем в новый чат и просим написать код по этому описанию
Он пишет практический такой же код
Кажется нихуя себе какой умный. Но бля по такому описанию я сам смогу написать код. А что бы составить такое описание нужен сам код.
Аноним 21/11/23 Втр 09:03:14 #366 №2930486 
>>2930144
Слив принят.
Аноним 21/11/23 Втр 09:03:42 #367 №2930487 
>>2930187
Слив принят.
Аноним 21/11/23 Втр 09:58:12 #368 №2930524 
>>2930404
>Он пишет практический такой же код
>практический такой же
Вот в этом "почти" и кроется, кстати, основная анальная жопа взаимодействия с ИИ. Сначала это чуть-чуть "практически" то же самое, потом какие-то вариации, а потом на похуях что-нибудь вроде "define true = false" (утрирую) и еще и будет уверен в правильности своего решения. И хуй ты разберешь его галлюцинации среди тысяч строк кода.
Аноним 21/11/23 Втр 10:19:38 #369 №2930538 
Как fauxpilot подключить к Visual Studio 2022? Ну и ли вообще к любой студии, а не к VSCode
Аноним 21/11/23 Втр 12:30:11 #370 №2930720 
>>2930486
да. ТВОЙ слив.
принимаю.
Аноним 21/11/23 Втр 12:31:51 #371 №2930723 
>>2930720
>стрелочка
Лол.
Аноним 21/11/23 Втр 14:51:39 #372 №2930999 
Вопрос про .NET Framework: насколько сильно включенная трассировка (я про Trace.axd на IIS) влияет на производительность? Я ньюфаг, не бейте
Аноним 21/11/23 Втр 14:59:02 #373 №2931018 
>>2930487
Слил тебе защеку, учись мысли выражать, "хуйня".
Аноним 21/11/23 Втр 15:11:23 #374 №2931057 
>>2931018
Не ворочайся, слитое.
Аноним 21/11/23 Втр 15:25:01 #375 №2931085 
>>2927499
>что это будет ФУРРИ игра. я чувствую себя человеком, но люблю заверотянок очень, типа акул,
Так, убирайся обратно в b или оставайся
Аноним 21/11/23 Втр 15:35:33 #376 №2931105 
>>2925024
Ты на хуй, мудозвон, ссылки в спойлер прячешь? Чтобы я, кликая по ним, выкатился из треда?
Аноним 21/11/23 Втр 15:37:31 #377 №2931109 
>>2931057
Топ.
Аноним 21/11/23 Втр 16:08:35 #378 №2931179 
Опять жавист в треде обтекает. Его обсыкают, а он обтекает. Странное у него хобби.

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

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

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

Аноним 21/11/23 Втр 18:32:44 #379 №2931415 
>>2930538
никак
Аноним 21/11/23 Втр 19:48:52 #380 №2931499 
.jpg
Хм.
Хм.
Все же.
Не знаете че надо сделать, чтобы MinimalApi научить работать с XML в контексте получения в теле запроса документа определенного формата?
Типа чтобы контроллеры так умели - просто делаю: AddXmlSerializerFormatters(). А вот че делать в MinimalApi - не знаю.
Аноним 21/11/23 Втр 20:13:47 #381 №2931537 
Просто напомню, что если у вас есть публичные свойства и методы, которые не представлены в интерфейсе, то вы пишите говнокод.
Аноним 21/11/23 Втр 20:31:04 #382 №2931579 
>>2931537
ДТО и энтити вышли из чата.
Аноним 21/11/23 Втр 20:44:42 #383 №2931602 
>>2931537
Просто напомню, что интерфейсы - не нужны в нормальных языках, и это просто костыль.
Аноним 21/11/23 Втр 21:01:52 #384 №2931621 
>>2931602
Ну хочешь писать классы из одних методов пиши.
Ты какие альтернативы видишь разделения наследования поведения и реализации? Множественное наследование классов?
Аноним 21/11/23 Втр 21:08:20 #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

или обсуждали уже?
Аноним 21/11/23 Втр 21:12:30 #386 №2931636 
>>2931627
Да. На жопоголизме тоже можно заработать.
Аноним 21/11/23 Втр 21:13:40 #387 №2931642 
>>2931627
> ИИ
Дальше не читал.
Аноним 21/11/23 Втр 21:25:03 #388 №2931662 
>>2931537
Чушь собачья. Чел вообще не разбирается в вопросе
Аноним 21/11/23 Втр 21:25:19 #389 №2931664 
image
>>2931627
А почему бухгалтеров до сих пор не заменил ни excel, ни 1С?
Аноним 21/11/23 Втр 21:26:20 #390 №2931668 
>>2931621
Да это фпшник. У них нет внедрения зависимостей, поэтому в каждую функцию приходится в виде параметров передавать либо другие функции на вызов, либо результат их вычисления.
Но так как в фп мокать функции сложно, поэтому функции передавать нельзя, значит их надо вызывать на уровень выше. А так как уровнем выше такая же функция, то всё приходится пропихивать до самого верхнего уровня.
В итоге никаких слоёв абстракций нет, а функция-точка входа, видимо, выглядит как портянка из вызова всего подряд.
Зато нет костылей-интерфейсов.
Аноним 21/11/23 Втр 21:29:22 #391 №2931676 
>>2931085
ну мне делать там нехуй.
буду сюда иногда заходить.
Аноним 21/11/23 Втр 21:30:24 #392 №2931679 
>>2931664
заебешься автоматизировать
но вполне возможно.
Аноним 21/11/23 Втр 21:31:26 #393 №2931684 
>>2931627
>Профессионалы, а что думаете о последнем видосе Бороды?

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

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

С написанием текстов у ИИ тоже плохо: попроси ИИ написать рассказ, он тебе выдаст текст без вменяемого последовательного сюжета. Не умеет ещё пока ИИ в нужный уровень абстракции.
Аноним 21/11/23 Втр 21:41:35 #395 №2931720 
.png
>>2931621
Альтернативой вижу - то как сделано в TS. Опитсывается тип, во время компилятции - проверяется, что переданная хуйня - удовлетворят типу. Все.
На кой хуй нужно какой-то там интерфейс имелементировать, какую-то хуйню городить, потом сверху адептеры делать, адаптеры для адаптеров, потом - поняв что выглядит как говно - шлифануть фассадом.
Короче. Нахуй костыли.
Аноним 21/11/23 Втр 21:51:14 #396 №2931738 
>>2931707
>на поиск нужных функций и их сигнатур в доках
Бедняжки, а ведь нормальные иде это делают по дефолту...
Аноним 21/11/23 Втр 21:52:58 #397 №2931743 
>>2931668
Ты ведь никогда в фп не прогал?
Аноним 21/11/23 Втр 21:55:28 #398 №2931748 
>>2931720
Причём тут вообще ООП? Тип ахуеть не встать, я на С++ тоже могу такое написать и мне даже не нужен для этого отдельный тип я в качестве параметра укажу указатель на функцию.
Аноним 21/11/23 Втр 22:06:56 #399 №2931768 
>>2931748
Тоже не понимаю, при чем тут ООП.
Я просто напомнил, что интерфейсы - ненужный костыль.
Аноним 21/11/23 Втр 22:11:18 #400 №2931774 
image.png
>>2931720
че дальше?
Аноним 21/11/23 Втр 22:13:20 #401 №2931776 
>>2931768
Этот чел них не понимает
Аноним 21/11/23 Втр 22:14:22 #402 №2931778 
image.png
>>2931720
>>2931774
сорян забыл про параметры
Аноним 21/11/23 Втр 22:15:29 #403 №2931782 
>>2931768
>Я просто напомнил, что интерфейсы - ненужный костыль
поэтому скинул фп код? ну заебись че молодец, как это относится к ООП и системам классов?
Аноним 21/11/23 Втр 22:17:47 #404 №2931786 
image.png
>>2931707
>Я даже смотреть не хочу, это просто полная хуйня.

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

>>2931782
Каким местом ты там ФП код увидел-то?
Чистейшее ООП, лул. Просто без всяких уродств с интерфейсами.
Аноним 21/11/23 Втр 22:19:13 #406 №2931789 
>>2931720
Так ты на JS тоже самое мог написать. Причём класс Printer тут вообще лишний и без него будет все работать.
Аноним 21/11/23 Втр 22:20:20 #407 №2931791 
>>2931789
Нужна проверка того что переданный объект имеет нужный метод с корректной сигнатурой. Потому и ТС.
JS - проглотит если я туда что угодно пихну.
Аноним 21/11/23 Втр 22:23:15 #408 №2931793 
>>2931787
>Динамик - не проверит тип того что я туда не единичку просто передал, няша
Так в твоём коде тоже не будет проверок. TS проверяет это чисто линтером, можно убрать это поведение и будет как в обычном JS передавай че хочешь.

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

Ты блять принёс функциональный код я принёс его же. Ты мне принеси пожалуйста ООП код.
Аноним 21/11/23 Втр 22:43:53 #409 №2931841 
>>2931793
он тебя не поймет.
он думает что если сигнатура подходит то все ок

и ему не пояснить что не ок - метод может быть переопределен, могут быть 2 интерфейса с одним именем метода и что в общем то нужно иметь возможность описать контракт чтобы классы знали чего от них ожидают - а это и есть собственно интерфейсы
Аноним 21/11/23 Втр 22:54:07 #410 №2931872 
.png
>>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. Чтобы не нужно было обфускатор гонять, а просто в коде из-за кучи ненужного говна - никто и так не разобрался.
Аноним 21/11/23 Втр 22:58:21 #411 №2931890 
>>2931872
>2-3 одинаковых интерфейса
не одинаковых. интерфейсы разные. но у них может совпасть один метод.
и такое не редкость.
но придумывать примеры с потолка не хочу.

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

>Ведь КОНТРАКТ. Че эт такое-то? КЛАСС ЕМУ НЕ УДОВЛЕТВОРЯЕТ
ну так удовлетвори. тебе ДАЛИ КОНТРАКТ и это твои проблемы кто его удовлетворит. Тебя никто не ограничивает в выборе кто же реализует контракт.
Аноним 21/11/23 Втр 23:10:12 #412 №2931935 
>>2931499
>А вот че делать в MinimalApi - не знаю.
Ничего. Минимал-апи - это хуйня для быстрого прототипирования, чтобы, когда нужно, по фасту накидать говнокода, проверить концепцию и пойти делать нормально.
Аноним 21/11/23 Втр 23:14:51 #413 №2931954 
.png
>>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); }
}


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

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

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

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

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

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

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

Мне эти лишние знания не нужны. Я выставил МИНИМАЛЬНЫЕ УСЛОВИЯ - и входящий тип меня вообще не волнует. Ну да, я получу виртуальный вызов - но в этом и есть суть, что я не буду знать кого вызываю ибо мне это НЕ НУЖНО ЗНАТЬ
Аноним 21/11/23 Втр 23:31:23 #416 №2931976 
>>2931954
>Ну да ладно. Видимо магический интерфейс - это что-то, что вам прям душу греет. Чувствуете себя в безопасности. Если для вас - костыли - это заебись. Ну, хули. Мне спорить не оч хочется
Ты понимаешь что в С#, С++, Java типы данных реально существуют во время выполнения? Каждый класс это реально отдельная вещь. В С++ вообще на этапе компиляции даже шаблоны создаются как отдельные типы данных по одному на каждый типизированый шаблон.

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

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

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

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

так что да- интерфейсы это сила, главное не делать их перегруженными иначе смысл теряется.
Аноним 21/11/23 Втр 23:49:36 #418 №2931988 
Нахуя тут даун за ТС усирается? Он не понимает что там нет никаких типов данных и даже нормального ООП? Только эрзац пародия и имитация на уровне линтера.

Приперся в тред про С# и пишет а вот в ТС работа с классами лучше. Ну естественно наверное потому что там вообще нет классов
Аноним 21/11/23 Втр 23:58:39 #419 №2931994 
>>2931969
> у 2х интерфейсов может быть один совпадающий по сигнатуре метод. и в классе он конечно имеет 2 реализации, но ОДИНАКОВЫЕ по сигнатуре
Зачем твоему классу реализовывать два интерфейса?

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

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

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

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

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

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

>>2931976
> Ты понимаешь что в С#, С++, Java типы данных реально существуют во время выполнения?
> C++
Можешь не продолжать. В вопросе ты не разбираешься от слова совсем.

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

> Перепиши это на JS и у тебя не будет ошибок.
Ну. Перепиши свой код на ассемблер - у тебя тоже никаких проблем с интерфейсами и типами не будет, потому что процессору - до пизды че там придумали мясные мешки, говорят остановить выполнение - остановим, не говорят - погнали дальше. Дальше что? Че дальше-то, блядь?
Аноним 22/11/23 Срд 00:08:34 #420 №2932006 
>>2931994
>говорят остановить выполнение - остановим
Процессоры так не умеют же. Будут nop жечь. Или я не прав?
Аноним 22/11/23 Срд 00:22:21 #421 №2932011 
>>2931994
>Зачем твоему классу реализовывать два интерфейса?
да хоть 10 или даже 100 и это норма. я показал тебе что интерфейс жена можно раздробить и класс жена будет все это реализовывать

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

>Ты создал целый интерфейс
да. я описал НУЖНЫЙ МНЕ контракт "сваритьборщ"

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

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

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

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

даже вот в питоне придумали протоколы (тот же интерфейс, но не нужно реализовывать), а ты со своим убогим тс все возишься
Аноним 22/11/23 Срд 00:26:05 #422 №2932012 
>>2932006
Да не умеют. Процессор всегда работает и гонит конвееер. Причём если процесс нормально не уведомит что он остановился то процессор никогда не переключится на другой процесс ведь ожидает когда процесс закончит дела. На одноядерном камне это буквально приводит к ступору всей системы наглухо, если смочь можно и на 2 ядерном также сделать.
Помнишь раньше зависание означало не что какая-то программа не отвечает, а что у тебя буквально компьютер перестал работать.
Аноним 22/11/23 Срд 00:30:22 #423 №2932014 
>>2932011
Ну на фронте реально непонятно зачем нужны все эти интерфейсы. Я посмотрю как он будет в игровом движке вызывать метод Update() у всех объектов сцены без интерфейса IGameObject
Аноним 22/11/23 Срд 00:32:41 #424 №2932015 
>>2932014
если ты пишешь на динам языке то тебе да -непонятно
но ты и пишешь там по другому
и платишь за это "рефакторинг жопный"

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

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

На этапе транспиляции в js все упоминания интерфейса будут удалены это чистый сахар.
Аноним 22/11/23 Срд 00:46:09 #426 №2932020 
>>2932018
и в чем пушка то
у тебя это опциональный инструмент для тех кто любит строгость (лично я ушел с руби (с его то выразительной мощью) на питон сменив лагерь на лагерь "строгие типы рулят" и помощь IDE лучше динамики)

в шарпе и прочих стат языках это БАЗА, а не костыль как ты там высказал. Они абсолютно необходимы чтобы все можно было доказать на этапе компиляции ( ну и рефакторинг видит все)
Аноним 22/11/23 Срд 01:09:35 #427 №2932031 
>>2932012
У нас начиная с 95 винды вытесняющая многозадачность.
Комп не виснет, когда виснет программа. Комп виснет, когда сдох супервайзор, который процессы переключает.
Аноним 22/11/23 Срд 01:17:46 #428 №2932033 
Типизация тайпскрипта вообще убогая. Ну, на самом деле, это виноват жабаскрипт, который, как php, фрактал плохого дизайна. Однако тайпсрипт это просто попытка соплями заклеить трещины, которые идут вниз до бесконечности.
Премия за самое уродство отдаётся перегрузке методов, которые на самом деле один и тот же метод, а разработчик имеет анальный зоопарк аргументов непонятных типов и содержаний.
Аноним 22/11/23 Срд 04:18:00 #429 №2932065 
чому if-else можно без скобок, а try-catch нельзя?
Аноним 22/11/23 Срд 08:30:28 #430 №2932109 
>>2932031
А процесс ОС у тебя наверное выполняется на каком-то другом месте, да? Не будет работать супервизор если все ядра процессора будут залочены зависшими процессами.
Аноним 22/11/23 Срд 08:46:01 #431 №2932122 
>>2932033
>Типизация тайпскрипта вообще убогая
Там её вообще нет. Просто статическая проверка, можно даже банально подавить эти ошибки и все.
Аноним 22/11/23 Срд 09:21:54 #432 №2932144 
>>2932065
if-else тоже нельзя. За пропущенные скобки будут пиздить палками
Аноним 22/11/23 Срд 12:23:00 #433 №2932312 
image.png
Любимые шарпушки, а можете объяснить, почему это завершается вообще? Разве изменения переменной bool visible для всех тредов? Я думал это как в жабе, может захардкодится значение и усе, вечный цикл.
Аноним 22/11/23 Срд 12:34:17 #434 №2932319 
image.png
>>2932312
Просто для примера в жебе - это вечный цикл.
Аноним 22/11/23 Срд 13:32:51 #435 №2932375 
>>2932312
может.
Аноним 22/11/23 Срд 13:34:41 #436 №2932376 
>>2932375
А в чем проблема тогда? Житу времени мало?
Аноним 22/11/23 Срд 13:35:36 #437 №2932377 
>>2932376
в тебе конечно.
Аноним 22/11/23 Срд 13:36:44 #438 №2932378 
>>2932377
Мило. А можешь тогда ты написать? Ну или помочь
Аноним 22/11/23 Срд 13:38:53 #439 №2932381 
>>2932378
зачем тебе помогать. ты жавист. тут жавистов не любят
Аноним 22/11/23 Срд 13:41:03 #440 №2932385 
>>2932381
Так я по поводу шарпа как бы спрашиваю. Тем более ты на котлине сам пишешь. Хули ебало корчишь?
Аноним 22/11/23 Срд 13:44:05 #441 №2932389 
>>2932385
так на котлине же. уже не жавист. смекаешь?
котлинисты в треде тут не срали
а вот жависты набегали и показывали свой "уровень развития"

откуда мне знать зачем ты спрашиваешь
можешь ты один из набегавших и просто ищешь очередной идиотский повод (ну у тех поводы были идиотскими)
Аноним 22/11/23 Срд 13:46:47 #442 №2932400 
>>2932389
>уже не жавист
Вот если б там была не жава виртуальная машина, я б еще понял. А так, по моему ты коупишь.
>откуда мне знать зачем ты спрашиваешь
Хочу понять в чем разница семантик.
>ищешь очередной идиотский повод
Не ищу.. Обещаю.
Аноним 22/11/23 Срд 14:08:10 #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 летний дебил изучающий джаву.
Аноним 22/11/23 Срд 14:12:52 #444 №2932425 
2023-11-22 14 10 00.png
>>2932400
>не жава виртуальная машина
жвм конечно говно, но речь шла про сахар. жавист со своим волосатым лобком всех достал.

>Хочу понять в чем разница семантик.
да кто ж ее знает тонкости рантаймов. тем более они меняются.
твой пример не зависнет.
вот тебе другой пример из инета
в 4.8 зависнет
в 8.0 не зависнет
Аноним 22/11/23 Срд 14:41:38 #445 №2932472 
>>2932425
Пасиба, значет я прав был, что гарантий на видимость нет.
Аноним 22/11/23 Срд 14:43:54 #446 №2932475 
>>2932425
>жвм конечно говно
эта боль анального раба майкрософта
Аноним 22/11/23 Срд 14:49:58 #447 №2932479 
image.png
>>2932312
>Разве изменения переменной bool visible для всех тредов
У тебя статическая переменная общая для всех объектов данного типа. Она глобальна в отношение всех потоков и объектов.
Аноним 22/11/23 Срд 14:56:34 #448 №2932484 
>>2932479
У вас по спеке все static еще и volatile?
Аноним 22/11/23 Срд 15:01:05 #449 №2932488 
image.png
>>2932425
>в 4.8 зависнет
но это же пиздешь
Аноним 22/11/23 Срд 15:04:08 #450 №2932492 
>>2932484
>volatile
это абсолютно логичное поведение. Статик поля общие для всего объявления типа с чего бы треды имели разные варианты типов? в С++ точно также, еще скажи "вау глобальные переменные доступны из любого места"
Аноним 22/11/23 Срд 15:11:27 #451 №2932506 
image.png
>>2932492
Нифига не логичное. Вот гарантии volatile из спеки жабы. По ней есть глобальная очередь синхронизации. Это как бы накладно по перфомансу, зачем просто бай дефолт это делать? И можно ссылочку на вашу спеку с гарантиями на static?
Аноним 22/11/23 Срд 15:16:19 #452 №2932514 
image.png
>>2932506
>>2932492
Еще из вашей нашел. Сразу скажу, что в cpp volatile значит другое. Зачем приплетать неясно.
Аноним 22/11/23 Срд 15:21:29 #453 №2932527 
2023-11-22 15 14 09.png
2023-11-22 15 17 18.png
>>2932475
о жавист лобковый нарисовался
сколько уже сказано про стирание типов и отстуствие структур, а он все строит из себя....да долбоеба он строит.

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

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

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

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

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

>>2932514
там написана не совсем правда. компилятор поставит барьеры и будет стараться чтобы не кешировалось. Но гарантии не будет. (так уж устроены процессоры)
Аноним 22/11/23 Срд 15:31:24 #454 №2932551 
2023-11-22 15 26 27.png
2023-11-22 15 29 23.png
>>2932488
я тоже умею такие картинки рисовать
Аноним 22/11/23 Срд 15:36:17 #455 №2932571 
>>2932527
>>2932425
>в 4.8 зависнет
>в 8.0 не зависнет
Потому что так не пишут это искусственный пример. Добавь в while любое действие и не будет висеть даже в 4.8.

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

Есть варианты простой проверки токена, или пилить JWT? Можно ли запилить JWT без SQL, с какой-нибудь нереляционной легкой БД?
Аноним 22/11/23 Срд 15:39:33 #457 №2932581 
image.png
>>2932571
Ну вот тебе поведение. Если хуйнуть туда sync, то появяца барьеры. Жеба их так просто не убирает конечно, но теоретически и х снести может легко. По идее шарп делает ровно тоже самое. В каком месте это хуйня не совсем ясно, это база как бы.
Аноним 22/11/23 Срд 15:39:53 #458 №2932582 
>>2932551
Что рисовать ебанутый? Ты реально думаешь я сидел в фотошопе редактировал чтобы на двач залить?
Ей богу проще хуйню придумать чем поверить что в интернете пишут хуету?
Аноним 22/11/23 Срд 15:41:08 #459 №2932584 
>>2932581
Ей богу иди нахуй со своей джавой уже совершенно другое обсуждают
Аноним 22/11/23 Срд 15:41:36 #460 №2932585 
>>2932584
Ладно...(
Злюки вы.
Аноним 22/11/23 Срд 15:42:32 #461 №2932586 
>>2932585
Ты приперся в с# тред и начал затирать "а вот в джаве" на что ты рассчитывал?
Аноним 22/11/23 Срд 15:43:34 #462 №2932587 
image.png
>>2932586
У меня разрешение как бы есть.
Аноним 22/11/23 Срд 15:47:45 #463 №2932589 
>>2932577
Бамп вопросу.
Аноним 22/11/23 Срд 15:47:46 #464 №2932590 
>>2932571
>это искусственный пример
да. простой искусственный пример для того чтобы показать эффект.
искусственность кода никак не отрицает наличие показываемого эффекта
Эффект показан? дело сделано.

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

>>2932582
ты человек без юмора вижу. все, больше с тобой не говорю. Я потратил на тебя время, а у тебя жавизм в крови
Аноним 22/11/23 Срд 15:49:42 #465 №2932592 
>>2932590
>Эффект показан? дело сделано.
Какой эффект? Что если писать говнокод с пустыми циклами тебя может не понять компилятор?
Аноним 22/11/23 Срд 15:54:00 #466 №2932595 
>>2932592
что именно он там не поймет? выбросит цикл? нет не выбросит
эффект того что изменение переменной в другом потоке МОЖЕТ БЫТЬ проигнорировано
этот код показывает это? да

унитаз там
Аноним 22/11/23 Срд 16:07:03 #467 №2932604 
>>2932577
Мы ебём что ли какой тебе уровень конфигурируемости аутентификации нужен?
Самый простой способ: пропиши ключ в web.config и заставь клиента слать его на каждый запрос в виде параметра в url. Типа /somemethod?param1=val1&key=yoba_secret_key
Аноним 22/11/23 Срд 16:12:28 #468 №2932612 
>>2932604
Чет орнул как ключ доступа передаётся в открытом виде прям сука в урле
Аноним 22/11/23 Срд 16:13:22 #469 №2932614 
2023-11-22 15 26 27.png
>>2932571
ну и пока был открыт редактор

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

висит аж бегом
Аноним 22/11/23 Срд 16:15:08 #470 №2932616 
>>2932614
Console.Write(); напиши и все.
Аноним 22/11/23 Срд 16:18:48 #471 №2932621 
>>2932616
зачем? я ж не имбецил
у класса есть четкая задача - посчитать количество итераций что он пройдет и сообщить мне
добавив вывод в консоль - я нахер сломаю саму сущность класса.
Аноним 22/11/23 Срд 16:20:17 #472 №2932625 
>>2932616
Там же в реализации лока... Мне почему-то кажеца, что ты тролль
Аноним 22/11/23 Срд 16:21:37 #473 №2932628 
На с# вообще есть жизнь? Уже несколько лет пишу на работе wpf приложения за скромную зп, но понимаю, что они нахуй не нужны и в случае чего ещё одну работу я просто не найду. Думал о бэке, но все вакансии на бэк шарп это портал в ад. Требования: 20 десятка технологий (даже не преувеличение), знание петухона, пыха, среакт, уверенное знание древнегреческого. ЗП: 80к
Аноним 22/11/23 Срд 16:22:15 #474 №2932630 
unity02.jpg
Как часто ASP.NET Core девелоперы в своей рабочей биографии пересечены с разработкой игр?
Допустим я устроюсь на работу дотнет девелопером, и при этом упомяну что игры разрабатываю в свободное время - меня ссаными тряпками не забросают?
Аноним 22/11/23 Срд 16:24:11 #475 №2932632 
>>2932630
Что за тупые вопросы
Аноним 22/11/23 Срд 16:26:27 #476 №2932636 
>>2932628
>ЗП: 80к
ну само знание это одно, а вот что делать нужно - другое
у меня такая зарплата на подработке, но там я работаю 3 часа в неделю.
Аноним 22/11/23 Срд 16:41:59 #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 или не используешь барьеры - сам себе злобный буратино.
Аноним 22/11/23 Срд 16:46:53 #478 №2932676 
>>2932630
>
>Как часто ASP.NET Core девелоперы в своей рабочей биографии пересечены с разработкой игр?
>Допустим я устроюсь на работу дотнет девелопером, и при этом упомяну что игры разрабатываю в свободное время - меня ссаными тряпками не забросают?

Я никогда не позволю в моей команде работать моральному уроду, который писал что-то на Unity3d. Это для меня красный флаг.
Аноним 22/11/23 Срд 16:49:08 #479 №2932678 
>>2932670
смотря что писал. может он писал шедевры вроде "русы против ящеров"
Аноним 22/11/23 Срд 16:50:27 #480 №2932679 
image.png
image.png
image.png
пик 1 .NET 4.8
пик 2 .NET 4.8 но в while есть Console.WriteLine();
пик 3 .NET 6 просто while

Мне лень, можете изучать
Аноним 22/11/23 Срд 17:07:31 #481 №2932697 
>>2932636
>у меня такая зарплата на подработке, но там я работаю 3 часа в неделю
5/2 в офисе
Аноним 22/11/23 Срд 17:12:47 #482 №2932711 
image.png
image.png
>>2932679
.NET 8 имеет другой IL код вот и все. Банально в ранних версиях нет защиты от говно кода типо пик2
Аноним 22/11/23 Срд 17:15:06 #483 №2932721 
>>2932697
сделаю предположение, что там требуется знания технологий да, но на уровне джуна конечно
а ты и де факто и будешь на старте изучения.
Аноним 22/11/23 Срд 17:16:33 #484 №2932723 
>>2932612
Конечно это нихера не секьюрно, но если у тебя сервис и клиент глубоко внутри анально огороженной зоны, то этого вполне достаточно.
Аноним 22/11/23 Срд 17:20:52 #485 №2932734 
>>2932628
>Думал о бэке, но все вакансии на бэк шарп это портал в ад. Требования: 20 десятка технологий (даже не преувеличение), знание петухона, пыха, среакт, уверенное знание древнегреческого. ЗП: 80к
Всю жизнь работаю бэк/фуллстек asp.net
Ни разу не требовали других бэк языков.
Никуда перекатываться не собираюсь.
Аноним 22/11/23 Срд 17:25:02 #486 №2932740 
Вопрос, у меня есть AddSingleton<IT,T> мне же не надо беспокоится что GC удалит объект который используется в рабочем приложении?
Объект может не использоваться какое то время но он критический важен.
Аноним 22/11/23 Срд 17:25:08 #487 №2932741 
>>2932734
ну он утрировал конечно

но факт есть факт - лучше быть бэком чем фуллстеком. Еб...сь сами со своим фронтендом.
Аноним 22/11/23 Срд 17:25:51 #488 №2932742 
>>2932734
>Всю жизнь работаю бэк/фуллстек asp.net
А что ещё знать нужно, кроме asp.net? Попробую поковырять что ли месяцок, может зайдёт
>>2932721
>сделаю предположение, что там требуется знания технологий да, но на уровне джуна конечно
Не, это всё на мидла типа. Я не знаю, может в ДС вакансии на бэк адекватные, но в провинции это вот такой пиздец.
Аноним 22/11/23 Срд 17:26:11 #489 №2932743 
>>2932740
его будет удерживать контейнер, а контейнер тоже будет удерживаться кем то.
так что не удалит.
Аноним 22/11/23 Срд 17:31:31 #490 №2932752 
>>2932628
Не знаю какие вакансии ты смотришь, но платят даже джунам по 120-140к
Аноним 22/11/23 Срд 17:34:43 #491 №2932754 
>>2932752
Ну это совсем мало. Я после чтения справки на сайте майкрософта пошел на собес, там обосрал джаву и сразу предложили 350к с авансом. Вопросов по си хэштегу даже не задавали.
Аноним 22/11/23 Срд 17:36:42 #492 №2932757 
show.png
>>2932754
но работаешь ты в итоге....на заводе? )

зы: зачем двач капчует сложные примеры если все равно влом считать в уме и кликаешь до простого
Аноним 22/11/23 Срд 17:38:39 #493 №2932759 
>>2932752
А в губы целуют? Породниться предлагают?
Аноним 22/11/23 Срд 17:39:45 #494 №2932761 
>>2932759
Я не знаю о чем вы. Я 3 года назад на 100к после уника пришел.
Аноним 22/11/23 Срд 18:02:18 #495 №2932787 
>>2932761
так то времена были другие. ковиды всякие, удаленки.
мне работа не нужна, но зашел в гугл глянул вакансии - и печально как то если ты не москва или спб

ну да, можно из дома щас у некоторых, но сложно оценить сколько получит именно джун.
Аноним 22/11/23 Срд 18:46:23 #496 №2932841 
>>2932711
Не очень понятно, почему она вообще должна быть. Это оптимизация и она работает.
Аноним 22/11/23 Срд 19:28:36 #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 написать будет поинтереснее лично для себя.
Аноним 22/11/23 Срд 20:53:04 #498 №2933055 
Где должны лежать контроллеры, если структура проекта:

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

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

Типа я думаю - в Infrastructure. Ведь это же инфраструктурная логика, приложению же вроде как должно быть пофиг - через HTTP запрос получили, чи через шину или GRPC.
Но.
1. Чтобы контроллеры нормально работали - приходится явно загружать сборку через Assembly.Load
2. Сваггер - настраивается сложнее(потому что сваггер - таки в Bootstrap)
3. Если сваггер и всю эту настройку перенасить в Infrastructure - смысл вроде теряется совсем.
Аноним 22/11/23 Срд 21:26:11 #499 №2933084 
>>2933055
>Bootstrap - WebApi - проект.
Тут и должны
Аноним 22/11/23 Срд 21:30:34 #500 №2933090 
>>2933084
А почему?
Лично мне вот не оч нравится, что WebApi - собирает все необходимое. И приходится - всю инфраструктуру делать public. Сразу возникает мысль - а нафига я тогда это все делаю, если могу напрямую из Application дергать нужное мне и не придумывать какие-то там абстракции и прочее.
Ну да ладно.
Аноним 22/11/23 Срд 21:34:51 #501 №2933097 
>>2933055
Интерфейс - это слой сам по себе. Ты не можешь переиспользовать контроллеры в другом виде интерфейса: консольке, десктоп гуе, очереди сообщений и даже в сервер-сайд рендеринг веб-сайте, значит они являются интегральной частью твоего веб апи интерфейса, а значит им место в веб апи проекте.
Аноним 22/11/23 Срд 22:32:18 #502 №2933144 
>>2933090
Потому что контроллер это ВЕБ АПИ не АПИ а именно прям конкретно веб. Это конечная точка, там даже базовые классы из дотНЕТ реализуют HTTP протокол и все что надо.

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

По идее у тебя должен быть слой абстракции тогда в виде интерфейсов через которые ты запускаешь бизнес логику. Просто инжектим где надо и пользуемся.
Аноним 22/11/23 Срд 23:16:40 #503 №2933224 
>>2932630
>Как часто ASP.NET Core девелоперы в своей рабочей биографии пересечены с разработкой игр?
Практически никогда.
Аноним 22/11/23 Срд 23:50:32 #504 №2933260 
>>2932144
https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/coding-style.md
Аноним 23/11/23 Чтв 02:59:45 #505 №2933312 
>>2933260
У майкрософта в коде зоопарк на самом деле.
Аноним 23/11/23 Чтв 11:45:28 #506 №2933481 
image.png
Кстати, смех смехом, а стоит ли поучиться разработке на Unity для души, или Unity бесперспективно умер после скандала, и лучше сразу идти в UE?
Аноним 23/11/23 Чтв 12:49:06 #507 №2933563 
>>2928144
Ты это буквально я. Как давно в впф, брат?
Аноним 23/11/23 Чтв 13:50:56 #508 №2933660 
>>2933481
Учи конечно
Сделаешь игру "русы против жавистов"
Аноним 23/11/23 Чтв 13:52:03 #509 №2933666 
>>2933563
Всю впфную жизнь.
Аноним 23/11/23 Чтв 14:33:24 #510 №2933706 
1674596908718.png
Как вы именуете роуты?
Используете множественное число или единственное?
Добавляете ли глаголы или действие определяете исключительно из типа запроса?

Пример на пике.
Какой вариант предпочтительнее?
Аноним 23/11/23 Чтв 15:40:17 #511 №2933787 
>>2933706
>v2
Аноним 23/11/23 Чтв 15:46:35 #512 №2933807 
>>2933787
>>2933706
Решил сказать почему.
В v1 Get, Delete и Patch имеют одинаковые сигнатуры, ну то есть если ты на клиенте случайно забыл сменить метод то можешь очень весело сосать.
Прикинь ахуено было бы вместо get(userId) был бы вызван delete(userId) прям на проде. Прям для абсолютно всех пользователей исходя из логики работы любой системы.

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

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

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


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

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

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

Не. Я конечно понимаю, что если просто хуячить микросервисы, потому что модно-молодежно, не стоит. Если у вас - 100 пользователей, и в среднем система обрабатывает 200 запросов в сутки - то нахуй вам эти микросервисы не всрались. Просто как-бы. У кого-то так, а у кого-то час простоя - стоит довольно охуительных денег и
Аноним 23/11/23 Чтв 22:47:22 #519 №2934505 
>>2931537
ебанутый
Аноним 23/11/23 Чтв 22:50:49 #520 №2934511 
>>2931720
ну и зачем ты интерфейс написал?
Аноним 23/11/23 Чтв 23:15:25 #521 №2934544 
>>2933807
>Решил сказать почему.
>В v1 Get, Delete и Patch имеют одинаковые сигнатуры, ну то есть если ты на клиенте случайно забыл сменить метод то можешь очень весело сосать.
>Прикинь ахуено было бы вместо get(userId) был бы вызван delete(userId) прям на проде. Прям для абсолютно всех пользователей исходя из логики работы любой системы.

>АПИ должно быть таким чтобы нельзя было случайно проебаться и получить 200 код в ответ.
Ну что это за цирк ёбаный, метод забыл сменить? Так можно и url забыть сменить.
И что за хуйня про продакшен? Такие баги ловятся при тестировании. Ты без тестирования релизить собираешься?
Плюс, если ссышься, напиши тесты.
Аноним 23/11/23 Чтв 23:23:36 #522 №2934558 
>>2934544
>Ну что это за цирк ёбаный, метод забыл сменить? Так можно и url забыть сменить.
>И что за хуйня про продакшен?
Берешь копипаст делаешь и забываешь отредачить, особенно когда раз 40 это делаешь.
Часто пишешь тесты на вызов АПИ? Как данные мокаешь для этого?

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

Да спокойно на прод че угодно даже с тестами уходит, никто не запускает полный набор тестов перед каждым релизом, у нас их может по 2 в день быть если задачи быстро делаются. Полный регресс раз в месяц происходит.
Лучше на уровне архитектуры устранять возможность что-то неправильно сделать чем с умным ебалом рассуждать что вот надо было лучше ревью провести или тесты полные прогнать. Закон Мерфи нахуй, если у тебя одинаковые урлы для GET и DELETE то обязательно будет космический проеб и упаси тебя бог чтобы ваши админы делали бэкапы базы или у вас было мягкое удаление.
Аноним 23/11/23 Чтв 23:24:05 #523 №2934560 
.png
>>2931627
Ну. Пока я постил всякую хуйню которая легко гуглится и не требует RFC читать - я тоже немного припустил.
А потом - прикриплейд.
Аноним 23/11/23 Чтв 23:27:06 #524 №2934568 
>>2934560
Да эта хуйня тупо тебе выжимку из интернета делает причём первых трех ссылок гугла.
Я пытался найти редкие запросы не осилив гугл и копилот маек мне выдал буквально цитаты из того что я читал и пояснения к ним.

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

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

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

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

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

Алиса - лучше ответила кста. Но тоже хуевато.
Аноним 23/11/23 Чтв 23:54:46 #529 №2934628 
>>2934624
>я спросил бы анона: "Как познакомиться с девочкой"
"Чтобы познакомиться с девочкой нужно говорить" вот так примерно.

Он дал абсолютно верный ответ как кодируется имя метода, но абсолютно бесполезный.
Аноним 23/11/23 Чтв 23:57:10 #530 №2934635 
>>2934574
Запусти приложение пару раз с 3 потокам которые выводят результаты в консоли. Все на этом как бы эксперимент завершен.
Вообще в статик методах которые можно использовать в многопотоке принято делать синхронизацию потоков.

Снова принесли говнокод с вопросами.
Аноним 24/11/23 Птн 00:00:14 #531 №2934638 
>>2934635
> Вообще в статик методах которые можно использовать в многопотоке принято делать синхронизацию потоков.
Но тут она не нужна.
Если бы он обращался к разделяемым ресурсам - да. А тут - нахуя?
Аноним 24/11/23 Птн 00:06:13 #532 №2934646 
>>2934638
А бля она локальная, спать хочу уже надо идти.

В любом случае я собеседование прерываю обычно на таких вопросах. Давайте обсудим какие-то реальные вещи, а не залупу конскую. Может у вас есть какие-то примеры из работы? Ах бля у вас вообще нет работы с потоками акромя вызывать чтения файла? Так зачем вы мне мозги ебете.
Аноним 24/11/23 Птн 00:43:09 #533 №2934665 
>>2934574
Как у тебя вообще возник этот вопрос..?
Аноним 24/11/23 Птн 00:46:06 #534 №2934666 
>>2934665
Ну это скорее не вопрос а проверка моих знаний. Часто задаю вопросы на которые уже знаю ответ но что бы подтвердить его нужно другое мнение.
Аноним 24/11/23 Птн 00:54:35 #535 №2934668 
image.png
>>2934666
И как именно ты бы объяснил почему же результат гарантировано будет 1?
вообще можно что-то интереснее придумать. Вот на пике гарантировано будет усе ок. Почему?
Аноним 24/11/23 Птн 00:57:17 #536 №2934671 
image.png
>>2934668
Ладно, проебался. Сделал 2 чтения.
Аноним 24/11/23 Птн 01:02:02 #537 №2934673 
>>2934671
Ну здесь же не статик метод, в конструкторе передаем 1 и всегда в многопотоке будет 1
Аноним 24/11/23 Птн 01:04:22 #538 №2934674 
>>2934673
В чем проблема экземпляр разнести по нескольким потокам. Че вы так к этому стейтик прицепились? Буквально практически нихуя не значит для многопоточки.
Аноним 24/11/23 Птн 01:06:16 #539 №2934676 
>>2934674
В душе не ебу что такое стейтик.
Я пишу код по наитию.
Наитие мне подсказывает что на 1 экземпляре запустить 10000 раз метод в многопотоке результат будет один и тот же.
Аноним 24/11/23 Птн 07:42:50 #540 №2934722 
image.png
image.png
Нахуя придумали Random.GetItems ?
Или я его неправильно использую?
Вообще есть список этой всей сладкой ебалы которая медленнее простыхне простых решений ? Я бы прочитал и никогда их не использовал.
Аноним 24/11/23 Птн 08:50:56 #541 №2934732 
>>2934722

> Или я его неправильно использую?
Это.
Аллоцируй массив в setup, а не в теле бенчмарка.
Аноним 24/11/23 Птн 09:08:27 #542 №2934736 
>>2934732
>>2934732
В чем профит ? И там и там создаётся лист
Аноним 24/11/23 Птн 09:13:22 #543 №2934738 
>>2934736

Сейчас ты тестируешь не рандом, а создание массива
Аноним 24/11/23 Птн 09:35:41 #544 №2934755 
image.png
>>2934738
>>2934738
>>2934738
Да один хуй получается новая приблуда гораздо медленнее
Аноним 24/11/23 Птн 10:46:03 #545 №2934815 
>>2934722
Вообще общпя реализация рэндом гетитемс должна выдавать элементы без повторений. Вот реализуй такой "олд стиль" в нативе и сравнивай.
Аноним 24/11/23 Птн 11:05:37 #546 №2934835 
>>2934615
>На пикрилейтед - полная хуита? Или что?
Все эти нейросети-помощники тренируются на ПРИМЕРАХ, и чем их больше, тем точнее ответ.

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

Но если тебя интересует какой-то редкий случай и не хочется перелопачивать весь интернет ради одной статьи, то тебе не по адресу т.к. нейросеть в таких случаях будет нести хуйню, либо что-то обобщенное.
Аноним 24/11/23 Птн 11:11:44 #547 №2934843 
>>2934676
>В душе не ебу что такое стейтик.
>Я пишу код по наитию.
Бля эти люди среди нас.
Аноним 24/11/23 Птн 11:39:38 #548 №2934884 
>>2934574
всегда
локальные переменные всегда локальные для потока
так что хоть триллион потоков - результат будет один
Аноним 24/11/23 Птн 12:46:03 #549 №2934925 
Как в студии автоматом закомментить вот так

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

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

Зачем студия ведет себя, словно c# это бейсик, не поддерживающий комментирование блоком?
Аноним 24/11/23 Птн 12:47:41 #550 №2934927 
2023-11-2412-47-15.png
>>2934925
Звездочки проебались
Аноним 24/11/23 Птн 12:57:59 #551 №2934935 
>>2934925
потому что комментированние блоком фуфло
хочешь - делай вручную
Аноним 24/11/23 Птн 15:35:45 #552 №2935148 
>>2934925
Ctrl+Shift+/
Аноним 25/11/23 Суб 08:18:43 #553 №2936087 
Когда посетителям этого треда завезут многопоточность без оверхеда на вызов системных потоков, чтобы они перестали брызгать желчью от злости и забегать в бессильной злобе в джаватред?
Аноним 25/11/23 Суб 09:22:28 #554 №2936115 
>>2936087
Нахуй не нужо. Джава мертвый язык, я не знаю проектов где кто-то начал его с 0 на ней, кроме двух говно компаний где после ебли заказчик пришёл к нам с просьбой переписать проект.
Аноним 25/11/23 Суб 09:44:27 #555 №2936130 
>>2936115
Да мы все и так давно знали что шарпомухам подходы к разработке белых людей нинужны. Ты на вопрос ответь.
Аноним 25/11/23 Суб 10:23:01 #556 №2936154 
>>2936115
Нафиг ты ему отвечаешь
У жавадебила обострение и галлюцинации что кто к нему в тред забегает
Ни одного шарписта в мире не волнует оверхед асинка
Аноним 25/11/23 Суб 22:24:25 #557 №2937226 
.png
Чет мне вот эта структура проекта не нравится.
Начинал полгода назад. Казалось - так и надо.
Сейчас решил вернуться, ведь скоро отпуск - надо чего-нибудь намутить. И смотрю и кажется говном каким-то.
Аноним 26/11/23 Вск 04:12:38 #558 №2937496 
>>2937226
Хранить имплементации в одной куче с интерфейсами как-то по гейски. Ну а пихать туда же контракты, вообще по пидорски.
Аноним 26/11/23 Вск 13:24:36 #559 №2937734 
>>2937226
ну все. очередная стадия. спасет только завод.
Аноним 27/11/23 Пнд 08:05:40 #560 №2938755 
image.png
>>2937226
А как вам моя структура?
Делал по наитию, пытался максимально все по файлам разбить, но как обычно, в конце понял что есть вещи которые можно было сделать лучше.
3 раз переписывать не буду.
Аноним 27/11/23 Пнд 18:55:28 #561 №2939842 
>>2938755
Нууууу.
Я вот со своей расстроился потому что у меня возникла какая фигня в голове: А зачем я собственно разбиваю по: Сервис, модель вот это вот. Почему не разбивать по фичам? Типа: Уаправление пользователями - все что с ними связано - там. Авторизация - все эти JWT и прочее - там. Ну и в таком духе. Чтобы если надо - можно было выдрать кусок и копипастой сразу фичу впихнуть куда надо. Проблема только с "общими" штуками, которые не специфичны для фичи, но фича за них цепляется. Единственное что вижу - делать для фичи "порты", в которые сверху кто-то эти обще вещи будет пробрасывать, а фича на основе вот этой внешней логики - типа расширяться.
Ну а у тебя на вид - классическая структура с разделением по слоям. Только контексты - непонятно чому в модели лежат, их бы в DAL положить.
Аноним 27/11/23 Пнд 21:57:44 #562 №2940114 
На работе заставили пересесть со стека: MS SQL Server, .NET, Angular, gRPC. На PGSql, .NET, Vue3, RabbitMQ, Docker.
Я теряю в своей стоимости на рынке или не?
Просто ангуляр - мне нравился больше чем Vue. MSSQL - тоже больше чем PGSql нравился. Вот реббит - да, прикольная фигня, но я до этого и с gRPC нормально обходился, да и удобнее было с ним, ведь клиент и сервер генерировались по протобафу, а тут приходится как додик - свой велосипед использовать, чтобы контракты сообщений соблюдались.
В общем. Поясните - надо ли мне рыпаться и пытаться в свободное время утраченные знания восстанавливать, или то что сейчас использую - тоже оплачивается нормально на рынку?
Аноним 27/11/23 Пнд 22:13:57 #563 №2940143 
image.png
>>2940114
>Я теряю в своей стоимости на рынке или не?
На каком рынке?
>Просто ангуляр - мне нравился больше чем Vue.
Что то, что это хуйня. Вот если бы ты на реакт перешел, то тогда чуть-чуть бы выйграл. А так, ты уже проиграл в том, что тебе приходится фулстеком быть.
>MSSQL - тоже больше чем PGSql нравился.
см пик. Плюс знание двух СУБД всегда лучше чем одной.
>Поясните - надо ли мне рыпаться и пытаться в свободное время утраченные знания восстанавливать, или то что сейчас использую - тоже оплачивается нормально на рынку?
Нормально, оплачивается. А еще больше оплачивается опыт по переводу сервисов с одного стека на другой.
В РФ, например, сейчас кейсы пересадки "Win -> Linux+Docker", "MSSQL -> PGSql", "Файлы -> Очереди" один из самых распространенных на дотнете.
Аноним 27/11/23 Пнд 22:26:00 #564 №2940178 
>>2940114
Вот только я не понял, какого хуя у вас RabbitMq и GRPC противопоставляются. Они как бы для разных вещей. Rabbit - для асинхронного взаимодействия между сервисами, GRPC для синхронного, и они вполне могут в одном сервисе уживаться.
Аноним 28/11/23 Втр 08:45:12 #565 №2940414 
>>2938755
В проекте не видно экстеншенов для IServiceCollection, соответственно у тебя все сервисы собираются в Program.cs, соответственнно там срач. Нехорошо.
Аноним 28/11/23 Втр 13:10:20 #566 №2940680 
>>2940414
Ну делал как в гайде
builder.Services.AddSingleton<IMyDependency, MyDependency>();
Аноним 28/11/23 Втр 15:28:17 #567 №2940900 
>>2940680
>как в гайде
В "гайдах" обычно показывают сам принцип того как это работает, но не обясняют как сделать хорошо.
Вот эти вот все AddSinglton, AddScoped и всю прочую дребедень с помощью которой ты добавляешь сервисы в контейнер и конфигурируешь приложение, принято выносить в отдельные расширения. Чтобы стартовый класс не был засран, плюс чтобы можно было все это разнести по слоям и/или подпроектам.
Аноним 28/11/23 Втр 15:38:19 #568 №2940918 
Продолжаю писать программу для рисования, и столкнулся с очередной проблемой. У меня есть интерфейс IGraphicObject, который представляет контракт для всех объектов обычные линии, кривые безье, сплайны, геометрические фигуры и тд, рисуемых на холсте, а именно свойства Bounds, Brush, и метод Draw. И встал вопрос как эти объекты грамотно создавать, сейчас у меня километровые методы с кучей свичей тот еще говнокод конечно. Просто передать массив точек и отрисовать его не выйдет, так как при рисовании длинных линий при добавлении точки каждый раз все перерисовывать заново это пиздец полный пробовал уже. То есть объект должен хранить промежуточное состояние на своем внутреннем холсте и при добавлении точки просто его дорисовывать. При это после рисования оно должно (опционально) сбрасываться, чтобы в памяти не хранился миллион битмапов.
Как это красиво сделать? Пока думаю добавить в интерфейс IGraphicObject метод, который будет возвращаться IGraphicObjectFactory, где и будет происходить промежуточная отрисовка. Но это как по мне будет лишнее переусложнение.
Аноним 28/11/23 Втр 22:57:06 #569 №2941638 
>>2940918
Заведи кота же
Аноним 28/11/23 Втр 23:28:52 #570 №2941670 
.png
>>2940918
ХЗ чего тебе надо, но я бы сделал так. Лол.
Аноним 28/11/23 Втр 23:35:43 #571 №2941674 
>>2941670
Ебать, это прям god object.
>>2940918
Помню на жабе подобное делал https://pastebin.com/deGpeBtY
Думаю сможешь на шарп перевести... А мне лееень. Но тут проблемы есть какие-то, но какие тоже не помню, давно делал
Аноним 29/11/23 Срд 00:25:21 #572 №2941708 
>>2941670
ему нужно завести кота
конечно его задаче это не поможет
но котик - святое
Аноним 29/11/23 Срд 14:51:58 #573 №2942256 
>>2941670
Впервые вижу такую инициализацию словаря
Аноним 29/11/23 Срд 20:59:13 #574 №2943043 
изображение.png
изображение.png
Да блять, как с этими ебаными енамами работать то? Есть бд postgres, через scaffold-db сгенерировал сущности для enityframework (database first), но enum'ы делал сам, тк scaffold их игнорирует.
В постгре значения енамов записаны с нижним регистром, но в asp.net указаны по-обычному.

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

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

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

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

Но блять, должно же быть решение, что бы по-человечески связывать енамы из entity framework со значениями из бд. Как это сделать? В чём я проебался?
Аноним 29/11/23 Срд 21:10:09 #575 №2943052 
>>2943043
> В чём я проебался?
В том что решил хранить в БД енамы

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

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

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

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

>>2943052
Все, кто хранят значения enum в виде чисел, должны гореть в аду.
Аноним 29/11/23 Срд 23:36:47 #578 №2943249 
>>2943161
>Все, кто хранят значения enum в виде чисел, должны гореть в аду.
все кто хранят енум как строки, должны гореть в аду
переименуешь енум и все сломается
Аноним 29/11/23 Срд 23:43:08 #579 №2943260 
>>2943161
> Все, кто хранят значения enum в виде чисел, должны гореть в аду.
Это вообще тут при чем?
enum обычно используется там, где в домене определен какой-то набор константных значений.
Ну так вот. Хряня хоть в числе, хоть в строке - ты получаешь ситуацию, что у тебя рассинхрон БД и приложения. Начиная от того что ты опечатку сделал, заканчивая тем, что что-то добавилось в домен, что-то убавилось.
И что ты получишь, даже если ты в строке хранил? Ты получишь ситуацию, когда у тебя в таблице значения, которые теперь приложение обработать не в состоянии, потому что - ты поменял на уровне приложения что-то, миграцию забыл сделать, все, пиздарики, страдай.

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

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

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

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

>>2943249
>переименуешь енум и все сломается
А ты переставишь два значения местами и кирдык, см. выше сценарий.
Аноним 30/11/23 Чтв 07:23:43 #581 №2943407 
>>2943402
> А претензия к числовым значениям в БД у меня в том, что когда ты хочешь посмотреть, что у тебя за данные хранятся, надо либо смотреть в шпаргалку, либо каждый раз писать джойны.
Ты из какого года капчуешь? Даже хейдискуль - умеет отображать что там за внешним ключем лежит, не говоря уже про всякие навикаты и прочие просмотрщики содержимого.
Чи ты как дед - ручками пишешь: Select Zalupa ftom Hui?
Аноним 30/11/23 Чтв 09:14:09 #582 №2943430 
изображение.png
изображение.png
изображение.png
изображение.png
>>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
Аноним 30/11/23 Чтв 14:18:00 #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, но не помогло.

В чем дело?
Аноним 30/11/23 Чтв 14:28:08 #584 №2943788 
>>2943779
вообще то фокус и фокус клавиатуры - разные вещи
Аноним 30/11/23 Чтв 14:56:55 #585 №2943804 
2023-11-3014-56-21.png
>>2943788
Это?
Аноним 30/11/23 Чтв 16:33:48 #586 №2943915 
image.png
>>2940918
Короче захуярил такую архитектуру. Рейт
Аноним 30/11/23 Чтв 17:34:38 #587 №2944050 
>>2940918
Не понял сути проблемы. У тебя объект уже хранит в себе данные о точках. Что мешает добавить методы AddPoints? RemovePoints, InsertPoints, UpdatePoints как это делается во всех остальных рисовальщиках?

Я делал именно так.
Аноним 30/11/23 Чтв 17:51:18 #588 №2944096 
>>2944050
Суть в том, анон, что если хранить только точки, то линию нужно будет перерисовывать при каждом их добавлении. Поэтому объект во время рисования должен хранить внутри себя битмап, на котором будет дорисовывать линию по мере появления точек. И уже этот битмап будет отрисовываться на холсте, видимом пользователям. А после окончания рисования и отрисовки финальной версии на постоянном холсте, он должен этот внутренний битмап очистить, чтобы память не занимал.
Аноним 30/11/23 Чтв 18:39:24 #589 №2944266 
>>2944096
>то линию нужно будет перерисовывать при каждом их добавлении
Нет, ты ДОрисовываешь линию от предыдущего сегмента.

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

А второе — то, что при масштабировании и скроллинге холста тебе полюбасу все видимое добро перерисовывать. В этом собсно вся и загвоздка всех этих редакторов, которые при 30 слоях формата 30 000 пикселей начинают лагать.
Аноним 30/11/23 Чтв 18:49:17 #590 №2944299 
1701359356899.png
1701359356901.png
>>2944266
> Нет, ты ДОрисовываешь линию от предыдущего сегмента.
Нет, анон, если делать так, то линия будет с острыми углами, я рисую используя сплайн, для получения гладкой кривой. С ним я сначала дорисовываю линию, потом как появится новая точка стираю ее и перерисовываю с интерполированной.
Аноним 30/11/23 Чтв 18:52:56 #591 №2944310 
>>2944299
Но это все не суть важно, главное тут то, что в процессе рисования холст будет постоянно изменяться, например если я рисую прямую линию или квадрат, то при каждом движении мыши нужно будет очищать холст и заново отрисовывать фигуру. И чтобы это не прописывать в коде я и хочу всю логику инкапсулировать в IGraphicObjectBuilder
Аноним 30/11/23 Чтв 19:04:24 #592 №2944330 
2023-11-3018-57-54.png
>>2944299
> то линия будет с острыми углами, я рисую используя сплайн
Чел ... ну я подзабыл, что перерисовываются соседние сплайны, но у тебя никогда не будет перерисовываться что-то дальше соседних. Даже в режиме редактирования одной ноды, по факту должно активироваться указанная нода + две соседние.
Аноним 30/11/23 Чтв 19:14:07 #593 №2944347 
>>2944310
А ты смотрел как устроен Canvas в WPF?
Аноним 30/11/23 Чтв 19:14:21 #594 №2944349 
>>2944330
> Чел ... ну я подзабыл, что перерисовываются соседние сплайны, но у тебя никогда не будет перерисовываться что-то дальше соседних
Как я уже сказал, рисование линиями не ограничивается. Сплайны к слову тоже есть разные, для кубического нужно перерисовывать всю линию.
Аноним 30/11/23 Чтв 19:21:14 #595 №2944358 
>>2944349
>для кубического нужно перерисовывать всю линию
Все что изменяется должно перерисовываться.

>всю логику инкапсулировать в IGraphicObjectBuilder
А что если один графический элемент идет поверх другого? Как твой IGraphicObjectBuilder будет знать о других объектах?
Я возможно ошибаюсь, но холст занимается отрисовкой, а не контент холста.
Аноним 30/11/23 Чтв 19:34:27 #596 №2944371 
>>2944358
>Я возможно ошибаюсь, но холст занимается отрисовкой, а не контент холста.

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

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

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

Возможно ты прав. Надо смотреть как устроен Canvas в WPF.
Аноним 30/11/23 Чтв 19:37:10 #597 №2944374 
>>2944371
Я только не понимаю, почему в WPF несколько контролов не могут одновременно держать один и тот же экземпляр графического элемента.
Аноним 30/11/23 Чтв 19:49:39 #598 №2944391 
>>2944358
А зачем ему об этом знать? Объектами управляет сам холст, и он отрисовывает IGraphicObjectBuilder поверх предыдущего рисунка. Единственное, если нужно будет реализовать размытие или пиксилизацию или штамп, или ещё что-то, пиздец, то да, что-то нужно будет придумывать. Но это, имхо, уже больше к кистям относится, нежели к графическим объектам. Можно при начале рисования передавать контекст холста кистям, но если кисти он не нужен, то получается избыточность, да и откровенно сложно будет управляться с таким количеством перекрестных ссылок
Аноним 01/12/23 Птн 13:49:21 #599 №2945020 
image.png
помогите ньюкеку
как работает порядок исполнения кода в сишарпе? если я сначала опишу функцию, а только потом её инициализирую, компилер пошлёт меня нахуй, отделается варнингом или скажет малаца?
Аноним 01/12/23 Птн 15:27:34 #600 №2945167 
>>2920885 (OP)
Привет, анончики.
Кто-нибудь использует мак для программирования на дотнете? Поделитесь опытом
Аноним 01/12/23 Птн 20:24:47 #601 №2945754 
>>2945020
Объясни толком, что конкретно ты хочешь сделать. В шарпе нельзя ни объявить функцию, ни инициализировать. Да и функций в привычном понимании в шарпе нет.
Аноним 01/12/23 Птн 20:25:40 #602 №2945756 
>>2945020
"Ты пытаешься втереть мне какую-то дичь"
Аноним 01/12/23 Птн 20:30:46 #603 №2945767 
>>2945754
>Да и функций в привычном понимании в шарпе нет
Тащем-та есть. Локальные.
Но инициализации и у них нет.
Аноним 01/12/23 Птн 20:32:14 #604 №2945772 
>>2945167
Знакомые используют. Кто-то райдер ставит, кто-то VSCode.
Аноним 01/12/23 Птн 21:22:46 #605 №2945890 
>>2945772
а они знают что в рф лгбт запретили?
Аноним 01/12/23 Птн 21:37:32 #606 №2945910 
>>2945890
Запретили токо пропаганду. А они тихо-мирно, в своем узком кругу наяривают.
Аноним 01/12/23 Птн 21:51:17 #607 №2945937 
>>2945910
пропаганду запретили давно уже. а теперь и движение
а значит его членам не стоит говорить о том, что они члены этого движения

а разработка шарпа на маке - именно такое.
Аноним 02/12/23 Суб 01:03:51 #608 №2946220 
>>2945767
В локальные методы тоже this передается, чел...
Аноним 02/12/23 Суб 01:08:31 #609 №2946221 
>>2946220
Ну ты конечно пчел.
Аноним 02/12/23 Суб 17:34:20 #610 №2946863 
Пацаны. Не хотите устроить ревью?
https://github.com/BakaVaka/SampleClietnServer
Аноним 02/12/23 Суб 17:58:47 #611 №2946900 
>>2946863
Ты уже третий итт, кто пишет свой сервер с клиентом. Это на каких-то курсах нынче изучают?
Аноним 02/12/23 Суб 18:03:20 #612 №2946912 
>>2946900
Всмысле третий? Это все был я скорее всего. Мне почему-то прям нравится эта фигня с тем что приходят байтики, они парсятся, потом еще диспечеризацию какую-нибудь динамическую на основе аттрибутов навесить.

Единственное. Я не могу вот что придумать. Как эффективно сделать хуйню которую я в свое время видел в мине. Типа что на одном порту - несколько протоколов могут висеть, и типа логика такая, что ты можешь с одной стороны - миддлварь и по нему гонять байтики для парсинга, а потом - добавить отдельный обработчик - и к нему приходит копия того что натекло с сокета, и он уже может по своему пайплайну погонять.
Типа да. Можно просто копировать перед тем как отправить в какой-то пайплайн и каждому пайплайну копию. Но в моей голове - это какая-то фигня получается неэффективная. Вот.
Аноним 02/12/23 Суб 18:11:14 #613 №2946928 
>>2941670
Шарпоговнокод момент. Зато за геттеромакакинг покопротивляться успели, видите ли, то, что копрософт им с лопаты не скормил это всё нинужно и только код портит. Лол.
Аноним 02/12/23 Суб 18:25:05 #614 №2946938 
>>2946863
Ты реально это говно 50-строчное сюда притащил? У тебя проблемы с самооценкой? Почему ты просишь это оценивать? Я бы понял ты бы какой-нибудь мессенджер написал, или ещё что-то клиент-серверное, но это даже кидать стыдно.
Аноним 02/12/23 Суб 18:35:59 #615 №2946944 
>>2946912
>Я не могу вот что придумать.
А не проще тебе в исходники Asp.Net посмотреть?
Аноним 02/12/23 Суб 18:59:41 #616 №2946975 
>>2946944
У них там контекст контекстом погоняет и фичи туда-сюда сует. Сложно для восприятия.
Аноним 02/12/23 Суб 19:47:57 #617 №2947054 
>>2946938
Потому что по моему опыту реальных ревью, никто даже 1000 строк кода не будет смотреть. А если что-то среднее, тысяч на 60 строк кода, так вообще - будет два вопроса: 1) Где тесты? 2) Оно работает?
А я ревьюшечку хотел. Потому что меня уже задолбало, что на работе - никто мой код не ревьюит, всегда пишут: LGTM... А ревью хочу!
Аноним 02/12/23 Суб 20:09:29 #618 №2947112 
>>2947054
>Потому что по моему опыту реальных ревью, никто даже 1000 строк кода не будет смотреть.
Потому код-ревью в виде "проверять и искать ошбики в коде" - это хуйня из под коня и придумана инфоцыганами для вкатышей с курсов. Чтобы у них было ложное ощущение, что их никто не бросит и всегда будет им попку подтирать. Никто на реальной работе (кроме самых упоротых) этим не занимается. Аппрув на код-ревью в большинстве случаев означает, что ты не хуй с горы и мерджишь свой код легитимно, согласно какой-то запланированной задаче, а не по желанию левой пятки.
Т.к. подразумевается, что все профессионалы и умеют рабоать свою работу (это не считая всяких анализаторов в IDE, стайлкопов и т.д.)
Аноним 02/12/23 Суб 20:26:29 #619 №2947140 
>>2947112
Ну. Блин.
Я вот когда ревью провожу - как минимум пытаюсь вникнуть, что код должен был делать в контексте задачи. И доебываюсь, если вижу что-то в духе:

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

Или когда код совсем какой-то непонятный - прошу либо комментарии написать, либо порефакторить, чтобы было понятно без необходимости лезть в таску или идти к разработчику, чтобы узнать, что это вообще такое и зачем оно так сделано.
Аноним 03/12/23 Вск 00:29:04 #620 №2947554 
>>2946938
Какие же шарподебилы токсики, пиздец просто.
Аноним 03/12/23 Вск 06:50:03 #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 же блять есть
Аноним 03/12/23 Вск 06:55:18 #622 №2947693 
>>2946863
https://github.com/BakaVaka/SampleClientServer/blob/master/src/Shared/Connection.cs
> Func<Stream, CancellationToken, Task<T>> decoder
Функция должна глаголом называться. decode.
Аноним 03/12/23 Вск 07:12:23 #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.
Алсо, преждевременная генерализация это примерно так же плохо, как преждевременная оптимизация. Обычно, если у тебя есть сервер, обрабатывающий запросы, он одним и тем же способом их обрабатывает до посинения.
Аноним 03/12/23 Вск 10:16:53 #624 №2947774 
image.png
Жабёнок ты тут? Когда на работе попробуем потоки?
Аноним 03/12/23 Вск 10:56:49 #625 №2947797 
RUr8Mp61l4g.jpg
>>2947774
Это вот на таких картинках основано убеждение шарподебилов в том, что макакить гетсеты не так уж и плохо? По теме — больше года назад попробую, когда вышла 19 джава.
Аноним 03/12/23 Вск 12:58:01 #626 №2947912 
>>2947697
> Это какая-то хуйня. Корректное поведение не должно вызывать исключения. Попробуй остановку не через CancellationToken делать. Сделай просто метод Stop().
Я с этим полностью согласен, но майки это считают единственно верным способом остановки чего-нибудь в контексте асинхронщины.
>>2947692
Если я задиспозю сокет через юзинг в этом методе, то коннекшн при попытке что-то делать с ним - будет кидать ObjectDisposedException каждый раз, когда чет пытаюсь читать-писать в сокет. Потому сокет диспозится только если не удалось соединиться с удаленным хостом.
Аноним 03/12/23 Вск 18:03:48 #627 №2948282 
>>2947697
Метод стоп, который вызовет свой внутренний CancellationToken
То есть код цикла не изменится
Изменится лишь семантика остановки

Хотя в данном случае семантика стоп получше будет
Аноним 05/12/23 Втр 17:06:43 #628 №2951193 
Я залетный джавадибил перекатчик из другой технологии, который рассматривает для себя варианты куда собственно перекатиться.
Я правильно понимаю, что изучив C# я могу писать и бэкенд, и под андроид, и под айос, и даже игры? И всё это тут хорошо работает и за это даже можно получать кровавые доллары?
Аноним 05/12/23 Втр 17:55:43 #629 №2951262 
>>2951193
В целом - да.
Но как всегда с оговорками.
MAUI - для андроида и иос - говнина.
Бекенд - отлично.
Десктоп - для винды - отлично, кроссплатформенный - с оговорками.
Игры - если про юнити, я бы после всей хуйни- не стал. Плюс - везде где шарп для игр используется, там оч много отличается на самом деле и знание большого шарпа не совсем кладутся туда и наоборот.
Аноним 06/12/23 Срд 14:39:26 #630 №2952309 
>>2951193
Нет, здесь ты будешь ебаться с убогим сборщиком и шлёпать гетсеты.
Аноним 06/12/23 Срд 15:02:52 #631 №2952340 
>>2952309
Ну хотя бы доки можно без впна увидеть.
Аноним 06/12/23 Срд 15:23:35 #632 №2952412 
>>2952309
>шлёпать гетсеты
ты так говоришь, как будто что-то плохое
Аноним 06/12/23 Срд 15:28:46 #633 №2952437 
>>2952412
Я бы по попе шлепал лучше...
Аноним 06/12/23 Срд 15:44:57 #634 №2952484 
>>2952340
Доки по спидгетсетингу?
Аноним 06/12/23 Срд 15:46:16 #635 №2952488 
>>2952412
За исключением бойлерплейта ничего.
Аноним 06/12/23 Срд 15:48:16 #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

Ну ничего, барену-то виднее!
Аноним 06/12/23 Срд 16:09:24 #637 №2952540 
>>2952493
Так если это не доки по спидгетсетингу и не гайд по пвп со сборщиком, какое это отношение к теме имеет?
Аноним 06/12/23 Срд 16:11:11 #638 №2952549 
>>2952540
Откуда я знаю? Сам какую-то поеботу выдумал, сам же возмутился. Мелкомягкие-то свои доки не блочили, все еще можно свободно взять и посмотреть, хотя из рф они якобы ушли. Думаем.
Аноним 06/12/23 Срд 16:13:08 #639 №2952558 
>>2952549
Я? Это же ты доки какие-то вкинул.
Аноним 06/12/23 Срд 18:17:42 #640 №2952848 
image.png
image.png
image.png
image.png
Работяги, почему в VS в дебаг режиме приложение работает нормально и потребление памяти на растёт, держится в районе 400мб но когда я делаю релиз и в релизе начинаются качели. Сразу в 2гига памяти занимает приложение, потом начинаются качели то 2.5-1г, а потом через часа 3 вообще закрывается приложение без ошибок.
У меня в приложении есть 2 List<string> в которых может быть в общем 200к url адресов. Но бля это же не 2 гига же?
Собственно метод который я запускаю на скрине и то как я его запускаю семафор на 140 потоков.
Аноним 06/12/23 Срд 18:21:43 #641 №2952861 
>>2952848
Хотя в дебаге тоже есть утечка памяти но происходит она медленнее релиза
Аноним 06/12/23 Срд 18:44:37 #642 №2952928 
image.png
image.png
>>2952848
Вот думаю что это всё объекты HtmlAgilityPack, почему они не удаляются? Метод отработал, экземпляр класса уже нигде не используется же.
Аноним 06/12/23 Срд 19:02:40 #643 №2952969 
>>2952848
А тебе прям обязательно эти 200к строк держать в памяти разом? Что мешает выгрузить их в файл/бд, а потом по необходимости доставать?
Плюс. Про свой агилити-пак. Посмотри, мож там что-то диспосабл, а ты не диспозишь.
Про утечку. В классическом смысле она в шарпе - сложно реализуема. Ищи объекты, которые долго живут и при этом держат ссылки на что-то.
Аноним 06/12/23 Срд 19:09:07 #644 №2952978 
>>2952848
Да. Нахрен убери тредпул.
Делай как человек:

var tasks = Enumerable.Range(0, conceurrentWorkersAmount)
.Select( async x=> {
while(!cancellation.IsCancellationRequested){
await MyTask();
}
})
Аноним 06/12/23 Срд 19:10:35 #645 №2952983 
>>2952969
В памяти их держу для проверки ходил ли я по этой ссылке или нет.
Захожу на страницу, добавляю её в список пройденных ссылок, паршу все ссылки которые есть на странице, далее проверяю их в списке ходил ли я по ними или нет, если не ходил то в очередь на парсинг их добавляю. Если держать ссылки в бд то будет очень долго проверку делать. Ведь на странице может быть 20 ссылок, 140 потоков это дохуя запросов к бд.
У HtmlDocument нет Dispose.
Если я правильно понимаю то в памяти хранятся всё что спарсил HtmlAgilityPack и не удаляются.
Аноним 06/12/23 Срд 19:11:27 #646 №2952986 
>>2952848
Хм. ХММММ.
Смотрю И вижу что зеленым подчеркнуто в методе что ты в тредпуле вызываешь.
Предполагаю - это асинхронный метод.
Ты его не ждешь и сразу отжимаешь семафор.
Вангую, что падает из-за этого.
Аноним 06/12/23 Срд 19:16:17 #647 №2952992 
>>2952978
> Делай как человек:
> linq
Аноним 06/12/23 Срд 19:23:55 #648 №2953007 
image.png
>>2952986
Вот так надо было?
Я просто думал что после await год не пойдет дальше и будет запуск по 1 задаче.
Аноним 06/12/23 Срд 19:25:46 #649 №2953011 
>>2953007
Вообще все эти авейт асинки магия для меня, пишу по наитию.
Аноним 06/12/23 Срд 19:28:09 #650 №2953016 
>>2953007
Надо было либо как в примере с линку.
Либо, если так уж хочется тредпула -

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

})
Аноним 06/12/23 Срд 19:34:01 #651 №2953033 
>>2953016
Я просто хочу в бесконечном цикле что бы запускались
var crawl = new Crawl();
await crawl.GoAsync();
И одновременно работало 140 копий, по завершению работы какой либо копии что бы подгружалась еще одна но максимум 140)
А трейд пул это жпт чат мне посоветывал)
Аноним 06/12/23 Срд 19:38:01 #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)
Аноним 06/12/23 Срд 19:39:09 #653 №2953050 
>>2953048
Это будет работать как раз через тредпул. И парралельно сколько надо твоих задач запускать.
Аноним 06/12/23 Срд 19:50:27 #654 №2953078 
>>2953048
Спасибо, так вроде работает
Аноним 06/12/23 Срд 19:51:44 #655 №2953082 
>>2952488
дурачку пояснили уже что свойства в шарпе ОТДЕЛЬНАЯ ОСОБАЯ ШТУКА, а не тупо указание компилятору "сгенерь за меня геттеры и сеттеры"
но дурачок не понимает
Аноним 06/12/23 Срд 20:07:00 #656 №2953108 
>>2953078
>>2953048
Но всё равно куда то память утекает.
900мб, а начиналось все с 140, 70к урлов не могут же занимать 750мб
Аноним 06/12/23 Срд 20:14:34 #657 №2953114 
>>2953108
Если ты по профиллировщику смотришь - то он не реальный размер памяти показывает.
Смотри в диспечере задач.
Аноним 06/12/23 Срд 20:23:35 #658 №2953119 
>>2953114
Ну да там и смотрю.
уже 1.6гб(

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

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

catch(Exception){}

}
После выполнения объект crawl и всё что с ним связанно остается в памяти?
Аноним 06/12/23 Срд 20:24:48 #659 №2953120 
>>2953119
остается пока не будет скушано сборкой мусора.
Аноним 07/12/23 Чтв 07:12:33 #660 №2953407 
>>2953082
И чё? Это как-то оправдывает гетсетошлёпанье?
Аноним 07/12/23 Чтв 07:40:39 #661 №2953413 
>>2953407
Очередное напоминание, что в джаве нет свойств, и надо писать ажно по методу на каждый гет и сет, да ещё и поле заводить. Это куда больше бойлерплейта, чем в свойствах шарпа.
И да, есть ломбок, который может это сгенерировать, но
а) при добавлении логики придётся писать всё ручками
б) в джаве это было насколько убого, что аж пришлось делать целый тул кодогенерации

Для шарпа тоже мог бы существовать такой тул, который сам гет-сеты везде пропишет, но его никто не сделал. Знаешь почему? Потому что написать {get; set;} гораздо проще, чем
string m_fuckingField;
string getFuckingField(){return m_fuckingField;}
void setFuckingField(string value){m_fuckingField = value;},
и это никого не напрягает.
Аноним 07/12/23 Чтв 07:46:31 #662 №2953415 
>>2953413
Я тут мимо пробегал.
По мне - свойства было лишним. Решил на днях на плюсах пописать ради восстановления знаний. И в принципе не возникло ситуации, в которой я по свойствам скучал особо.
Как и события и делегаты в том виде в котором их сделали(когда кто угодно откуда угодно может добавить свой обработчик, а ты ебись потом ищи, еще и по какой-то причине ссылку студия где добавляют обработчик не показывает, такой-то треш)
А вот рекорды - оч поздно завезли. Их надо было чуть ли не с самого начала вводить.
Аноним 07/12/23 Чтв 20:54:14 #663 №2954489 
rtti.JPG
шарпач, есть ли способ объединить в свиче case A и case B, не трогая сами классы?
Аноним 07/12/23 Чтв 21:17:20 #664 №2954511 
>>2920885 (OP)
Где-то видел инфу, что в дотнете запилили что-то вроде контейнеров, как я понял заменяющих докер. Сразу не прочитал, а теперь не могу найти. Кто-нибудь в курсе?
Аноним 07/12/23 Чтв 21:20:26 #665 №2954517 
>>2954511
Нагуглил. Если кому интересно - https://devblogs.microsoft.com/dotnet/announcing-builtin-container-support-for-the-dotnet-sdk/
Аноним 07/12/23 Чтв 22:52:38 #666 №2954652 
.png
.png
>>2954489
Выбирай что больше нравится
Аноним 07/12/23 Чтв 23:17:02 #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 первых двух полях структуры

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

В общем. Кто тут шаристый. Поделитесь знаниями.
Аноним 08/12/23 Птн 00:10:01 #668 №2954718 
>>2954682
>А как в памяти-то объекты хранятся?
В куче (heap)
https://endjin.com/blog/2022/07/understanding-the-stack-and-heap-in-csharp-dotnet
Аноним 08/12/23 Птн 01:33:52 #669 №2954765 
>>2954682
Просвещайся

https://devblogs.microsoft.com/premier-developer/managed-object-internals-part-1-layout/
https://devblogs.microsoft.com/premier-developer/managed-object-internals-part-2-object-header-layout-and-the-cost-of-locking/
https://devblogs.microsoft.com/premier-developer/managed-object-internals-part-3-the-layout-of-a-managed-array-3/
https://devblogs.microsoft.com/premier-developer/managed-object-internals-part-4-fields-layout/
Аноним 08/12/23 Птн 11:31:03 #670 №2955061 
image.png
image.png
Аноны помогите пожалуйста. Сутки сижу не могу замапить эту хуйню. Есть вот такие 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
Аноним 08/12/23 Птн 22:25:33 #671 №2956118 
>>2954652
спасибо я совсем забыл про dynamic
Аноним 09/12/23 Суб 10:54:05 #672 №2956431 
>>2955061
Зачем у тебя связи один к одному на этапе прототипа?
Типа если у тебя что-то привязано к какой-то там таблице, один к одному, то нихай и будет частью этой таблицы.
Аноним 09/12/23 Суб 13:31:51 #673 №2956514 
Приветы!
Я только начинаю. Пробую решать задачки (например на LeetCode). Завёл себе отдельный проект в Visual Studio для задачек. Посоветуйте, как правильно его организовать, чтобы каждая задачка была обособлена (в папке там или в файле). И когда наживаешь F5 - то запускается именно та задача, над которой сейчас работаю.

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


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

LeetCodeSolutions

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

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

Наверняка такой велосипед уже сто раз изобретали. Помогите плес
Аноним 09/12/23 Суб 13:38:40 #674 №2956520 
>>2956514
Пкм по решению, добавить проект, консольное приложение. Пкм по проекту, назначить запускаемым или как-то так. Новая задачка - новый проект.
Аноним 09/12/23 Суб 13:46:56 #675 №2956528 
image.png
>>2956514
Нахуй этим заниматься, если литкод все задачки сохраняет?

Кстати, шарпаны, а ваша студия умеет историю файлов сохранять? Вот пик. Или нинужна ибо гит?
Аноним 09/12/23 Суб 15:57:55 #676 №2956767 
На шарпе не принято использовать абстрактные классы? Везде вижу только интерфейсы, хотя, казалось бы, описываются сущности (взгляните, например, на библиотеку Discord.NET - там интерфейсы IMessage, IDiscordClient)
Аноним 09/12/23 Суб 16:57:47 #677 №2956821 
>>2956767
при отсутствии множественного наследования (и слава богу) использование абстрактного класса должно иметь обоснование.
Аноним 09/12/23 Суб 17:34:54 #678 №2956914 
>>2956821
> при отсутствии множественного наследования
> (и слава богу)
Стокгольмский синдром как он есть
Аноним 09/12/23 Суб 17:39:28 #679 №2956922 
>>2956914
И нахуя нужно вводить проблему ромба? Какие плюсы-то?
Аноним 09/12/23 Суб 17:51:14 #680 №2956942 
>>2956922
Плюс в возможности унаследоваться от двух классов, очевидно. Например от базовой вью модели и модели какой-либо сущности.
Аноним 09/12/23 Суб 18:14:55 #681 №2956990 
>>2956767
>На шарпе не принято использовать абстрактные классы?
Принято. Постоянно используются.
Аноним 09/12/23 Суб 18:15:41 #682 №2956992 
>>2956821
>>2956942
Тогда где применять абстрактные классы вместо интерфейсов?
Аноним 09/12/23 Суб 18:17:17 #683 №2956996 
>>2956942
>Например от базовой вью модели и модели какой-либо сущности.
Какое же говно. Пиздец, надеюсь никогда в жизни не столкнусь с подобным кодом.
Аноним 09/12/23 Суб 18:28:35 #684 №2957021 
>>2956996
Почему же? Мне вот сейчас приходится передавать модель в конструктор вью модели которая унаследована в свою очередь от абстрактной вью модели с параметром - UserViewMode: AbstractEntityViewModel<User>, где абстрактная модель в качестве аргумента конструктора принимает модель заданного типа. При множественном наследовании я бы просто создавал сразу вьюшки и использовал в том числе как модели
Аноним 09/12/23 Суб 18:53:10 #685 №2957049 
>>2956767
Абстракный класс используется, если есть логика которую надо наследникам дать.
Если нужен только контракт - используется интерфейс.
Сущность это, хующность или еще что-то не важно.
Аноним 09/12/23 Суб 19:01:25 #686 №2957060 
>>2956992
когда в этом классе полно собственной логики что делает невыгодным имплементировать ее в каждом классе.

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

>>2957021
проблемы весомее пользы, поэтому такого наследования много где нет.
любители наху...ить пусть идут в языки со множественным наследованием и там отрываются от души. чего они в шарп то пришли.
Аноним 10/12/23 Вск 04:34:06 #687 №2957419 
шарпаны, а насколько уже заматерел блазор? хочу PWA себе сделать
Аноним 10/12/23 Вск 09:28:51 #688 №2957480 
>>2957419
Вакансий на нём мало, но всё же они уже есть, значит, достаточно заматерел.
> себе сделать
В проектах для себя можно юзать хоть ноунейм васянские поделки.
Аноним 10/12/23 Вск 09:59:32 #689 №2957487 
>>2957419
Блазор заебись сделали. При серверной модели хостинга он теперь умеет комбинировать подходы к отрисовке страничек. Хочешь полный интерактив, хочешь mvc вьюху отравляй, хочешь сборочку с васм клиентом.
Аноним 10/12/23 Вск 18:55:33 #690 №2958160 
Господа, я сидел в криокамере последние 7 лет и помню, что winforms больше не модно и всех заставляют писать на wpf. Какие тренды в 2к23? Wpf всё ещё №1 или есть еще другие шаблоны?
Аноним 10/12/23 Вск 19:01:28 #691 №2958167 
>>2958160
WTF успел выйти из моды, всех пытались заставить писать на UWP. Он мало кому понравился, все остались на WTF, а UWP типа легаси. Потом взяли Xamarin, выкинули оттуда поддержку линукса, назвали это MAUI и теперь заставляют писать на нём. Ещё есть сторонние Avalonia, Uno platform и Eto.Forms, они хотя бы поддерживают линупс. Как будто всё это говнище может сравниться с божественными винформами.
Веб
Аноним 10/12/23 Вск 19:03:16 #692 №2958171 
>>2958160
А вообще, MS такого высокого мнения о своих либах для гуя, что Visual Studio Code написали на электроне.
Аноним 10/12/23 Вск 19:10:40 #693 №2958178 
>>2958160
Впф сдох, а формочки на коне. А вообще встраиваешь в окно, которое тебе нравиться, webview2 и верстаешь на разоре.
Аноним 10/12/23 Вск 19:36:27 #694 №2958193 
>>2956520
Спасибо! То, что надо!

>>2956528
если литкод все задачки сохраняет?

Ну для себя же. Чтобы когда-нибудь вернуться к решению, может отрефакторить его.

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

Можете пояснить, что это значит? Как у вас поворачивались мозги? Что лучше делать для этого?

Вот смотрю туторы всякие, пошагово переписываю их в IDE, вроде бы всё понятно и не суперсложно. Но как самому такое написать, сидишь тупишь, как обезьяна в мозгу Гомера.
Аноним 10/12/23 Вск 19:51:19 #695 №2958202 
>>2958160
В моде сейчас CLI
Аноним 10/12/23 Вск 19:52:47 #696 №2958205 
>>2958193
Писать код в блокнотах и онлайн редакторах удел челов без нормальной ide, у которой есть нативная поддержка твоего ЯП.
Аноним 10/12/23 Вск 20:07:26 #697 №2958219 
>>2958193
>Что лучше делать для этого?
Впусти в себя Иисуса.
Аноним 10/12/23 Вск 20:17:14 #698 №2958243 
Меня оч сильно задолбало, что после сборки - в папке с собранным проектом - каша.

Допустим. Я бы хотел чтобы после сборки было что-то в духе

-app.exe
-appsettings.json
--packages
----Newtonsoft.Json.dll
----Npgsql.dll

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

Вот как мне такое сделать?
Аноним 10/12/23 Вск 21:25:58 #699 №2958384 
>>2958243
Делаешь post build event в котором перемещаешь, все dll-ки в нужный тебе каталог. Добавляешь в app.config приложения путь где оно должно их искать. Вроде как-то так. Раньше это работало, но не знаю будет ли работать в современном .Net-е
Только я бы не советовал так делать, т.к. можно поиметь кучу непредвиденных сайдэффектов.
Просто привыкни, что тебе должно быть насрать, что там в выходном каталоге находится. Учись работать с CI/CD механизмами.
Аноним 10/12/23 Вск 21:35:56 #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

Я им говорю, что нахуй оно надо-то? Типа это же серверное приложение. Запустили, оно работает. Нех лазить в папки.
Мне говорят, что А ВДРУГ НАДО БУДЕТ, А НИХУЯ НЕПОНЯТНО.
Аноним 10/12/23 Вск 22:18:50 #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
>Мне говорят, что А ВДРУГ НАДО БУДЕТ, А НИХУЯ НЕПОНЯТНО.
А ты им скажи, что нехуй лазить туда тем кому НЕПОНЯТНО, пусть квалифицированные люди это делают.
Аноним 11/12/23 Пнд 21:33:48 #702 №2959784 
2.png
1.png
Есть тестовое задание написать сервис по конвертированию 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 коллекцию? Ведь может случиться так что два разных файла сконвертируются одновременно и возможно появится проблема с добавлением их в обычную коллекцию
Аноним 12/12/23 Втр 00:28:03 #703 №2960012 
>>2959784
Цитата говорит что не нужно планировать работу в потоке пула из запроса ведь ты и так находишься в потоке пула и можно работу просто выполнить.

А конвертить у тебя должен фоновый сервис который будет делать это в потоках вне пула (а то и в отдельных процессах)

Про хранение в памяти бред. Там должно быть про устойчивую к ребуту очередь конвертации.
Аноним 12/12/23 Втр 04:25:51 #704 №2960043 
>>2959784
>Есть тестовое задание написать сервис по конвертированию html в pdf
Это на какой грейд? И сколько времени дается?
Аноним 12/12/23 Втр 07:08:12 #705 №2960062 
>>2959784
> если после того как клиент отправил файл на конвертацию на сервер и сервер был перезагружен, то он должен иметь возможность вернуть сконвертированный файл обратно клиенту
Если прям так и написано, значит ты должен результат хранить где-то еще. Либо в базе, либо на диске, либо в редисе, либо еще где-то.

> в условии сказано что html файлы могут быть большими и конвертация одного файла может занять 3-4 минуты
Значит, что ты не должен как целиком загружать все это себе, а конвертировать "на лету" не дожидаясь полной загрузки.

Асинхронность - это не про оптимизацию, а про эффективное использование ресурсов железяки.

> добавить/улучшить больше нечего
Если спеки PDF ные знаешь, то скорее всего - есть че. Если берешь готовую либу и просто дергаешь оттуда метод - да, ниче уже не придумаешь.

> И еще вопрос, есть ли необходимость использовать Concurrent коллекцию? Ведь может случиться так что два разных файла сконвертируются одновременно и возможно появится проблема с добавлением их в обычную коллекцию
В базу пиши. Не выебывайся.
Аноним 12/12/23 Втр 07:21:07 #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. Зачем тебе копировать стрим? Достал из запроса - передал этот же стрим дальше.
Аноним 12/12/23 Втр 16:28:26 #707 №2960577 
>>2960071
>3. using - убери скобки, отвратительно смотрится.
ФЛОМАСТЕРЫ.
не каждый сахар шарпа удобен
и вот это одно из них.
Аноним 12/12/23 Втр 17:10:15 #708 №2960626 
>>2960071
> Зачем тебе копировать стрим? Достал из запроса - передал этот же стрим дальше.
Копирование стрима это база базовая, ведь никогда не знаешь, что с этим стримом может сделаться, пока ты его сношаешь.поэтому бывает один и тот же стрим копируется чуть ли не десяток раз, хотя в действительности не изменяется
Аноним 12/12/23 Втр 17:23:51 #709 №2960651 
>>2960626
но ты ЗНАЕШЬ
ты знаешь что стрим тебе не нужен, а значит можешь его дальше передать. И если там кому то нужно сто раз его читать - то это его уже забота.
Аноним 12/12/23 Втр 17:41:02 #710 №2960680 
>>2960071
>4. Убери уродство с Request.Form.Files, по взгляду на сигнатуру контроллера - нихуя не понятно, чего апи ждет, сваггером не подергаешь и вообще хуйня какая-то
Разве можно получать сразу стрим с клиента? Или ты иммешь ввиду получить файл через скажем List<IFormFile> files и уже в репозитории его в стрим?
>>2960071
>6. IActionResult - сразу нахуй.
Почему? И какая альтернатива?
Аноним 12/12/23 Втр 18:30:05 #711 №2960756 
>>2960680
> Или ты иммешь ввиду получить файл через скажем List<IFormFile> files и уже в репозитории его в стрим?
Можно и просто через IFormFile. Без листа. Но да.
Почему? Потому что тогда сваггер - тебе красивенько нарисует кнопку с выбором файла и ты сможешь проверить свое апи без лишних телодвижений.
А сверху - тебе ASP провалидирует это дело и до обработчика даже дело не дойдет, если пришла какая-то лажа.

> Почему? И какая альтернатива?
Потому что непонятно что в результате вернется в случае успеха. Допустим, если у тебя какая-то легкая операция, которая ничего не мутирует - ты нормально можешь дернуть это апи, чтобы проверить. А если это вот такая тажелая фигня, или что-то мутирующее(например удаление/изменение), это просто неудобно(взял, нафиг, и удалил всю тестовую базу, теперь иди и заново засеивай ее)
Альтернатива:
ActionResult<Что ты там возвращаешь>
Или просто Что ты там возвращаешь.

Исключения, когда это что-то прям низкоуровневое что приходится прямо в Response писать. Но это редкость и не этот случай.
Аноним 12/12/23 Втр 18:56:14 #712 №2960777 
>>2960756
>>2960756
>Без листа
А что если юзеру лень будет по одному файлики на форме клиента заливать? Мне то лично не сложно, но работодатель думаю вполне может и спросить про этот момент
Аноним 12/12/23 Втр 19:00:46 #713 №2960780 
>>2960777
В коде что изначально был - только один файл берется. Предполагал, что это обговорено в описании задачи.
А так - да. Согласен, что в реальном использовании - лучше коллекцию использовать.
Аноним 13/12/23 Срд 05:21:11 #714 №2961348 
изображение.png
Ребят, чота решил сделать бота для fc 24, но столкнулся с такой проблемой, что на сайте игры, чтобы нажать кнопку, нужно выполнить event mousedown на кнопку, а не обычный click.
Пользуюсь cefsharp, голову уже сломал, но отправить этот mousedown на кнопку я не знаю.

Никто не подскажет ?
Аноним 13/12/23 Срд 07:42:22 #715 №2961366 
>>2961348
Вроде как додумался, брать относительные позиции xy и посылать евент туда
Аноним 13/12/23 Срд 09:43:01 #716 №2961407 
Насколько хорошая идея вкатываться в юнити в 20234? Есть опыт написания говна на шарпе почти 5 лет.
Аноним 13/12/23 Срд 09:54:05 #717 №2961423 
>>2961407
Не знаю насчет конкретно юнити, но вкатывание в геймдев в принципе такое себе.
Аноним 13/12/23 Срд 22:44:17 #718 №2962521 
Я сделал страшное. Класс на 1800 строк.
Как мне с этим жить?
А главное, как мне его рефакторить?
Суть класса-то операция импорта данных из файла в приложение. Разбить на более-мелкие - можно, но это же бред, сам класс нужен ровно для одной фичи, и вот эти микроклассы которые получатся - будут просто фигней, которая расфосована по файликам, но нужна все для той же одной фичи.

Пожалейте меня. Пожалуйста.
Аноним 13/12/23 Срд 23:26:18 #719 №2962557 
>>2962521
Нам тебя жаль
Ты ж бестолочь
Аноним 14/12/23 Чтв 11:44:03 #720 №2962823 
>>2962521
>Разбить на более-мелкие - можно, но это же бред, сам класс нужен ровно для одной фичи, и вот эти микроклассы которые получатся - будут просто фигней, которая расфосована по файликам, но нужна все для той же одной фичи.
Можешь не разбивать, а оставить как есть. Подождать месяца 2 и потом вернуться к классу с целью что-нибудь там изменить/исправить/добавить.
Вот тогда ты себя уже не жалеть будешь, а материть и проклинать.
>>2962521
>А главное, как мне его рефакторить?
Начни сначала с выноса всякой повторяющейся мелочи в экстеншены и обертки/дто
Аноним 14/12/23 Чтв 16:25:47 #721 №2963227 
varvar.JPG
допустимо ли так делать и если нет, то есть ли лучше способы?
Аноним 14/12/23 Чтв 16:50:34 #722 №2963261 
я хотел бы визуализировать типовой Excel файл в WinForms, может кто подсказать хорошую альтернативу DataGridView что бы она поддерживала слияние ячеек из коробки?
Аноним 14/12/23 Чтв 18:09:09 #723 №2963381 
>>2963227
>ли так делать
Так - это как? Что сделать то хотел?
Аноним 14/12/23 Чтв 20:29:45 #724 №2963598 
>>2962521
Операция импорта из файла обычно делится на несколько этапов, которые достаточно независимы. Ну типа, парсинг файла, валидация спаршенных сущностей, мапинги, сохранение загруженных данных куда бы то ни было и т.д. Всё это можно в отдельные классы выделить. Смысл - меньше когнитивная нагрузка на читающего.
Аноним 15/12/23 Птн 12:03:34 #725 №2964101 
>>2920885 (OP)
Шарпаны, какие неймспейсы предпочитаете: block_scoped или file_scoped ?
Аноним 15/12/23 Птн 14:49:38 #726 №2964358 
Почему на шарпах так мало вакансий в крупные рф компании?
Везде го жаба и так далее, я понимаю что нг скоро и найма мало но все таки

Уже впечатление что надо в го перекат делать

мимо 2 года шарпов
Аноним 15/12/23 Птн 14:50:15 #727 №2964360 
>>2964101

Если у тебя один неймспейс на файл, то file scoped топ.
Аноним 15/12/23 Птн 14:52:33 #728 №2964365 
>>2964358
или шарпы в рф нужны чтобы получить опыт и пиздовать горбатиться на западного барина?
Аноним 15/12/23 Птн 15:06:51 #729 №2964388 
>>2964358
> в го перекат
После шарпа - боль и унижение на каждом шагу.
Аноним 16/12/23 Суб 08:16:54 #730 №2965871 
>>2964101
Те что без скобочек.

Моя коричневая мечта - что и для классов сделают как для неймспейсов, учитывая, что 99% времени у тебя один файл - один класс. Так на кой хуй тратить место под эти отсутпы?
Аноним 16/12/23 Суб 14:22:17 #731 №2966103 
>>2964358
Почитал про go в очередной раз. Минусы, которые вынес для себя:
ждуну будут платить 50-80k (не больше, чем на любом другом языке)
вакансий столько же, сколько на C#
не получится устроиться чистым go-разрабом. Даже у Яндекс.Практикума на курсах в дополнение идёт второй "неочаровательный" язык (питон, php, js)
вывод - в 90% случаев будешь не гофером, а переводчиком с php на go
ещё один знакомый (ждун на go) моего знакомого поделился болью, что вынужден писать на Go монолит, вместо божественных микросервисов. Он привёл аналогию - это как на феррари ездить по московским 9-ти балльным пробкам.

энивэй, я всего лишь вкатывальщик на C#
Аноним 16/12/23 Суб 15:14:29 #732 №2966155 
>>2966103
> не получится устроиться чистым go-разрабом. Даже у Яндекс.Практикума на курсах в дополнение идёт второй "неочаровательный" язык (питон, php, js)
То же самое относится к шарпу
Аноним 16/12/23 Суб 18:31:09 #733 №2966466 
>>2966155
>То же самое относится к шарпу
Да нихуя. С приходом б-жественного .Core/.Net, как раз таки намного легче получается быть чистым бекендером. Я уже полтора года как никакого фронта не касался и реакт уже забывать начал.
Аноним 17/12/23 Вск 19:25:28 #734 №2967690 
Что происходит когда я создаю структуру Span<T> | Memory<T> в одном методе и посылаю его другому методу? Что происходит в стэке и со структурой?
Получается что стэк метода-обработчика структуры как бы внутри стэка метода-создателя и поэтому ничего не копируется и оба могут адресовать структуру пока исполнение не вышло за пределы метода-создателя?
Я правильно понял?
Аноним 17/12/23 Вск 19:32:54 #735 №2967695 
image.png
>>2967690
*само-апд
Вот пикча. за джс извени
Получается что пока с методом one() не распрощались, то его локальные переменные всё ещё висят в стэке?
(И теоретически доступны для two() и three(), ну и объясните если локальные переменные в one() изолируются two() и three() то примерно каким образом?)
Аноним 17/12/23 Вск 20:23:40 #736 №2967755 
>>2967695
Все так. С хвостовыми вызовами не совсем так. Параметры передаются в метод, их значения копируются ниже по стеку. Это могут быть значения, а могут быть ссылки-знаения. Например если ты вызовешь несколько методов, один из другого, углубляя стек, и будет передавать одно и тоже int значение (структуру) (например 5), то это значение скопируется в стеке столько же раз.
Аноним 18/12/23 Пнд 13:59:11 #737 №2968199 
>>2958160
>Как будто всё это говнище может сравниться с божественными винформами.
Твое отношение поменяется, когда задача будет чуть сложнее создания кнопочки и текстбоксика. А если смотреть с позиции "оно и нафиг нам нинужно", то можно сидеть на vba 7.

Но перечисленные новиночки и в правду говно. Возможно только у авалонии есть шанс.
Аноним 18/12/23 Пнд 15:58:24 #738 №2968305 
Всем привет! Начал изучать C# для интереса, давно хотел попробовать. Скачал книжку для изучения, и все бы ничего, но нет возможности установить Visual Studio (под рукой только запароленный ноутбук рабочий, на который без админки ничего не поставить). Подскажите, пожалуйста, есть ли какой-нибудь онлайн компилятор или можно что-то в этом случае придумать? Заранее большое спасибо
Аноним 18/12/23 Пнд 16:02:46 #739 №2968308 
Как обновить ObservableCollection из другого потока? Я просто ебал в рот, что только я не перепробовал уже. Уже тысячу раз делал переключение потоков и всё работало всегда адекватно, но ObservableCollection это пиздец. Вроде в итоге сделал что-то типа такого
Application.Current.Dispatcher.Invoke(new Action(() => AddToColletion(item);
и оно работает, НО ТОЛЬКО НЕСКОЛЬКО РАЗ. Несколько раз отрабатывает и падает с
>Данный тип CollectionView не поддерживает изменения в своем SourceCollection из потока, отличного от потока Dispatcher
Как-будто поток просто перестаёт переключаться на главный
Аноним 18/12/23 Пнд 16:14:02 #740 №2968326 
>>2968308
Пофиксил. Рефрешил коллекцию вручную вот таким способом раньше и забыл убрать, когда уже не нужно стало.
CollectionViewSource.GetDefaultView(MainCollection).Refresh();
Когда убрал, то почему-то начало работать нормально. Почему - хуй знает.
Аноним 18/12/23 Пнд 16:23:14 #741 №2968335 
>>2968308
Так ты задачу-то не решил. Обновление все равно идет из диспатчера. Давай думай дальше.
Аноним 18/12/23 Пнд 16:26:17 #742 №2968340 
>>2968335
>Обновление все равно идет из диспатчера
И что?
Аноним 18/12/23 Пнд 17:01:17 #743 №2968377 
>>2968305
>есть ли какой-нибудь онлайн компилятор
Дохуя их по запросу "C# online"
>или можно что-то в этом случае придумать
Скачай portable версию Visual Studio Code.
Аноним 18/12/23 Пнд 19:58:24 #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
Аноним 18/12/23 Пнд 20:29:23 #745 №2968607 
F0SgRrIXgBk7q6g.jpg
>>2959784
Kjk, это же самое тестовое только вчера закончил делать и отправил, а сегодня зашел в тред и тут такое
Аноним 18/12/23 Пнд 21:04:58 #746 №2968640 
>>2968377
А какой конкретно компилятор посоветуешь? Может есть список годноты
>>2968576
Я даже портабл скачать не могу. Ноутбук прям сильно огорожен паролем
Аноним 18/12/23 Пнд 21:42:24 #747 №2968673 
>>2968576
Нет, там речь шла про обычные вызовы, при которых стек углубляется. При неосторожной рекурсии можно получить переполнение стека.

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

Почитай Сидиристого dotnet book.

Про лямбды вот есть пост >>2729162
Аноним 18/12/23 Пнд 21:43:37 #748 №2968675 
>>2968673
https://2ch.hk/pr/arch/2023-07-31/res/2697488.html#2729162
Аноним 18/12/23 Пнд 22:46:29 #749 №2968704 
>>2964358
Крупные это яндекс-мыло-банки-озон-авито?
Чем тебе тот же додо не угодил? 2гис? Да много на самом деле вакансий.
А если взять то же производство - то на крупных просто дохуища вакансий(другое дело, что там опыт специфичный).
Просто многие крупные компании, которые шарпы используют - не айтишные, а это накладывает некоторые особенности. Это да.
Аноним 18/12/23 Пнд 23:33:18 #750 №2968730 
изображение.png
изображение.png
Здравствуйте. Можно ли оставить логику авторизации и регистрации в контроллере? Или лучше вынести их в отдельные сервисы?
Аноним 18/12/23 Пнд 23:48:44 #751 №2968735 
>>2968730
Можно хоть в Program.cs все приложение сейчас писать.

А про лучше. Ну, вот тебе понадобится эта логика еще в каком-нибудь месте. Простой пример - в твоем приложении нужен будет шлюз чтобы через JSONRPC авторизоваться. Так сто лучше - вынести. Не понадобится, ну, и хорошо. А понадобится - потом может не быть время на рефакторинг.
Аноним 19/12/23 Втр 00:24:07 #752 №2968757 
>>2968730
Регистрация обычно делается через контроллеры, слишком уж она специфичная. Но аутентификация/авторизация предполагает некую миддлварь, которая пишется отдельно от контроллеров и срабатывает до передачи им управления.
Аноним 19/12/23 Втр 00:27:37 #753 №2968759 
>>2968735
>>2968757
Это я пытаюсь аналог Identity server сделать. Тут всего две задачи: авторизации и регистрация. Приложение, которое будет выполнять круды - отдельное там, собственно, мидлваре и т.д. Спачибо за ответы. Оставлю пока так.
Аноним 19/12/23 Втр 00:29:20 #754 №2968761 
>>2968759
Ну и клиент будет только веб.
Аноним 19/12/23 Втр 00:32:56 #755 №2968764 
>>2968757
Щито там специфичного, что в контроллерх делать надо и нельзя сделать какой-нибудь IIdentityService?
>>2968759
Ну. Как хочешь.
Просто кейс, когда надо будет потом делать какую-нибудь точку входя для OAuth, или наоборот для регистрации OpenID или еще чего-нибудь, не гори, что придется кучу копипасты хреначить и страдать.
Аноним 19/12/23 Втр 00:36:42 #756 №2968766 
>>2968704
Мы как раз уже месяц C#-backend-мидло-петушка ищем в команду. Только вот беда, что одни нихуя не знающие вкатунцы на собесы приходят. На столько вкатунцы, что я аж выхуеть не могу (типо девочки-тимлида, которая как aaync-await работает не знает, не говоря же об архитектуре). Хз чем анон ноет, если действительно шарит.
Мимо-озоноблядь
Аноним 19/12/23 Втр 00:43:15 #757 №2968773 
>>2968764
Ну это вряд ли придётся делать. Задача просто наваять сайт, куда наша компания будет загружать запрос на логистику и на него другие компании будут отвечать. Можно вообще не заморачиваться и ебануть два поля в бд: email, password и всё, но я хочу чтобы было хоть как-то по правильному. Вот решил asp.net Identity использовать и jwt токены, чтобы в react прокидывать
Аноним 19/12/23 Втр 00:47:30 #758 №2968776 
>>2968773
А почему не хочу в сервис выделять - лень + проект разрастётся. Щас у меня компакный проект, где минимум папок и т.д. Папка с сервисами всю малину попортит.
Аноним 19/12/23 Втр 00:48:49 #759 №2968777 
>>2968766
Хрюшу меняйте на мужика, желательно не пидора.
У нас такая же шляпа началась, как кун ХР съебал. Как только пизду выкинули на мороз и снова куна поставили - сразу нашли несколько нормальных человек.
Аноним 19/12/23 Втр 00:58:16 #760 №2968786 
>>2968766
Какая ставка? Интересно.
Аноним 19/12/23 Втр 01:03:04 #761 №2968789 
>>2968786
Если честно, то хз. Я обычный разраб, мне такая инфа не доступна. У нас инфу по вилке только лид и вышестоящее начальство видят.
Аноним 19/12/23 Втр 08:12:45 #762 №2968880 
>>2968730
Че это за говно? OAuth2 делай, епт.
Аноним 19/12/23 Втр 11:34:36 #763 №2969010 
>>2968880
Почитал я про OAuth2, но так и не понял зачем мне он нужен. Мне же нужна простенькая авторизация по email/password. К тому же я уже использую jwt токены. Мб я что-то не понял, опыта то в этом вообще нуль
Аноним 19/12/23 Втр 11:36:04 #764 №2969013 
изображение.png
изображение.png
>>2969010
Вот токен
Аноним 19/12/23 Втр 14:17:16 #765 №2969138 
Пацаны.
В общем.
Какая ситуевина.
Работал я над программулиной. На шарпе. Программулина - сервер.
Собственно. Разработал.
Все вроде как заебись.
НО. Возникла проблема.
1. Клиенты не хотят докер ставить(типа сервера на которые ставится моя хрень - не подключены к внешнему интернету, так что просто стянуть контейнер не получится)
2. Есть клиенты и с линуксом и с виндой.

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

В общем. Я, наверное тупой. Но разве нет какого-то инструмента, чтобы просто наклацал: дотнет, постгрес, нгинкс и вот этот вот архивчик поставь, из архивчика переложи в ~/server/www то что лежит в папке www, остальное - переложи в папку ~/server/back, создай демонов для постгреса и нгинкса.

Да. Проблема же еще в том, что программулина доступна на сайте, ее по идее кто хош должен иметь возможность скачать и поставить. Опять же с виндой - все ок. А как делать правильно в линуксе, чтобы не ебаться с зоопарком этих всех дистрибутивов - я так и не понял.
Аноним 19/12/23 Втр 17:48:34 #766 №2969382 
>>2969138
doker save и docker load
Аноним 19/12/23 Втр 18:01:50 #767 №2969399 
>>2969382
Докер сам никто ставить не хочет, няш.
maui + syncfusion Аноним 19/12/23 Втр 23:45:09 #768 №2969705 
Всем здрасте, пишу курсач частью которого является мобильное приложение, выбор пал на maui, до этого пробовал работать с android studio – не понравилось. Так вот: начал использовать syncfusion listview, чтобы кайфово работать с фильтрацией данных(поиск и еще всякие параметры), т.к. не нашел в интернетах как можно сделать те же функции с использованием стандартного listview. Накидал логику с дизайном, запустил и... узнал что syncfusion, оказывается, платный, конечно есть бесплатный пробный период, но ныне доступ к сайту забугорных чуваков закрыт для российского пользователя, так что не знаю есть ли смысл его получать. Так вот, можно ли как-нибудь кинуть sf на подписку и дать проекту поработать чуть дольше, чем две минуты? Либо же есть способ реализовать необходимые мне функции через стандартный инструмент?
Аноним 20/12/23 Срд 02:48:00 #769 №2969819 
>>2969705
Ну. Хм.
Вот давай подумаем. Можно ли это сделать с помощью стандартных инструментов.
Представим, что мы - синфьюжн и у нас еще нет этого навороченного листвью. Учитывая, что мы знаем, что в будущем сделаем - наверное способы есть.
Допустим, тебе нужна фильтрация. Ее нет из коробки.
Что бы мы могли сделать, имея некоторый опыт работы с интерфейсом других программ?
Ну. Например - сделать кнопку: фильтр, при клике на которую - будет попап, в котором бы можно было настроить фильтры. Настраиваем фильтры, жмакаем применить, фильтр применяется на вью-модельевскую коллекцию.
Далее - мы хотим еще поиск какой-то. Как это можно реализовать? Берем инпут в который можно вводить текст. Делаем кнопку с лупой. Если нажали кнопку с лупой и текст инпута не пустой - применяем какое-нибудь contains на коллекцию вью модели.
Для курсача - этого более чем достаточно.
Аноним 20/12/23 Срд 11:03:00 #770 №2970124 
Фарпаны, а есть кто учился с ментором?
Бывает ли такое, что за условные 5тыр в месяц человек доводит тебя с нуля (ну или с хеллоуворлдщика) до скиллов, позволяющих начать искать работу?
Имею ввиду, конечно, реальные скиллы программирования, а не как жёстко наябывать в резюме

Гугл выдает сайты getmentor, solvery и т.д. Интересует, есть ли итт люди, которые этим пользовались и пришли к успеху? Или успешные ASP.NET господа, практикующие менторство?
Аноним 20/12/23 Срд 11:43:58 #771 №2970164 
>>2970124
Не учился и не верю что кто-то с нормальными скиллами будет тратить свое время, чтобы реальные скиллы дать, если это не вуз.

По своему опыту - теория + много практики дают самый ощутимый буст.

Могу краткий гайд для фуллстека дать.

Теория
- Основы(системы счисления, структуры данных, алгоритмы, терминология, сети, и т.д.)
- SQL на уровне - создать БД с таблицами, базовые операции чтения-записи-удаления-изменения, разные виды JOIN'ов, нормальные формы(хотя бы до 3й), базовое администрирование(создать пользователя, настроить ему разрешения для ограниченного списка операций)
- Сам шарп + .NET(понимать, что это вообще за зверь, что такое CLR, общие вещи для .NET'а типа модулей, сборок и вот этого всего)
- ASP.NET Core - что такое, зачем
- Любой фреймворк для фронта из тройки(Angular, React, Vue), на уровне того, что ты можешь туду лист сделать и отправить запросики на сервер, получить жсончики в ответ и отрисовать этот самый ТуДу лист
- Докер
- Линукс на уровне - можешь подключиться по SSH, посмотреть логи grep'ом, посмотреть сколько там места на сервере, поправить конфиги через vim, создать сервис, положить куда надо сертификаты, обновить пакеты, настроить сеть
- Архитектура и паттерны(базово, можешь MVC назвать, MVVM, месседж бас)
Очереди(на уровне - можешь в докере подрубить ребит и 2 сервиса через очередь заставить общаться)

Практика - берешь и выбираешь любой проект который тебе интересно, если ниче не интересно - CMS/Интернет магазин/Автоматизация какой-нибудь библиотеки/IOT хуйня для умного дома.
Собственно, делаешь проект. Пока не сделаешь на том уровне, что сам бы пользовался хотя бы иногда. В процессе - набиваешь шишки, понимаешь, нахуя вся хуйня вообще нужна.
Аноним 20/12/23 Срд 12:20:09 #772 №2970220 
>>2970124
>что за условные 5тыр в месяц
За 50К в месяц я был бы готов уделить тебе максимум по 4 часа в неделю (разово или разбитыми на 2 части). Сам подумай сколько нихуя ты получишь за 5К.

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

Мимо, успешный ASP.NET господин.
Аноним 20/12/23 Срд 12:32:21 #773 №2970241 
>>2970220
Чёт слишком дохуя ты свое время оцениваешь. Тебя на работе меньше ценят, уёба. 3к в час блять. Соси хуй и отвечай бесплатно в треде, инцел.
Аноним 20/12/23 Срд 12:39:51 #774 №2970250 
>>2970241
Я не он, но оценка более-менее справедливая. Нормальный разраб с опытом получает около 250к в месяц. Это, при 23 рабочих днях в месяц и 8 часовом рабочем дне даёт где-то 1.35к в час. Учитывая, что менторить вкатунца придется после работы, то это должно идти по сверхурочной ставке, тобишь x2. Вот и выходит 2.7к ч в час.
Но будем честны, вкатунец даже косарь в час скорее всего не потянет.
Аноним 20/12/23 Срд 12:49:58 #775 №2970257 
>>2970241
Чел. Время после работы - это личное время, и задешево его проебывать - никто, имеющий нормальные скиллы - не будет.
Тем более, что для нормального менторинга надо:
Оценить уровень
Составить программу в зависимости от уровня долбоеба
Составить задания
Следить за выполнением
Выяснять че долбоебу не понятно
Подсказывать
Разбираться в его говнокоде

Плюс - это требует от того кто менторит - желание именно учить.
Лично я бы дешевле чем 100к в месяц, по 5 часов в неделю(по часу в день, либо 2.5 в выходные вечером). И то, только если бы увидел, что чел реально мотивированный и будет то что я ему даю - делать по 6-8 часов в день сам, а я - только проверять и корректировать, отвечать на вопросы.

Ну а если бы я просто хотел заработать - мне проще связаться со знакомыми и взять на выходные халтурку. Там не нужно объяснять, готовить что-то, просто взял, сел и сделал, получил денежки и пошел по делам.
Аноним 20/12/23 Срд 12:57:17 #776 №2970260 
>>2970257
>Там не нужно объяснять, готовить что-то, просто взял, сел и сделал, получил денежки и пошел по делам.
У меня проще взять дежурство на выходной во время накатки релиза. Из обязанностей только быть на связи (я на удаленке) и отвечать ребятам с прода на вопросы по установке сервисов. Иногда подкинуть им пару конфигов или скриптов для базы если они забыли. Все остальное время сидишь и занимаешься своими делами, хоть в игры играй, хоть сериалы смотри. Можно вообще куда-нибудь из дома свалить, главное ноут с собой взять.
8 часов практически нихуя не деланья = +20К
Аноним 20/12/23 Срд 12:57:28 #777 №2970261 
>>2970257
>>2970250
Да мне похуй, когда он там будет жопу свою поднимать. Че блять если вы на подработку устраивайтесь в такую же позу встаете, хуе мое, личное время, давай х2. Нахуй вас пошлют.
Тут тоже работа, пошел бы он нахуй с такими расценками, проще стажером пойти, и вообще нихуя не платить, а этот уеба будет забесплатно слушать мое нытье и терпеть.
Аноним 20/12/23 Срд 13:05:49 #778 №2970273 
>>2970261
> если вы на подработку устраивайтесь в такую же позу встаете, хуе мое, личное время, давай х2
Ну как бы да. Обычно, когда всякие халтурки беру, то делаю по более высокой ставке, чем если бы просто работал. В большинстве случаев люди это понимают и относятся нормально.

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

Если хочется дешевле, то welcom на всякие курсы от всяких скиллбоксов и гикбрейнсов. Там тебя поменторят.
Аноним 20/12/23 Срд 13:08:46 #779 №2970281 
>>2970261
>Да мне похуй, когда он там будет жопу свою поднимать.
Тебе похуй, ему тоже похуй. Все при своих остаются.
>Че блять если вы на подработку устраивайтесь в такую же позу встаете, хуе мое, личное время, давай х2.
Так а смысл брать вторую работу за такие же или меньшие бабки, если их можно и на основной работе получить, просто за переработки или доп. задачи? Подработку как раз и берут, когда нужно срубить денег побольше и побыстрее.
>проще стажером пойти
В 2023-м? Ну удачи, чо. Расскажешь потом.
Аноним 20/12/23 Срд 13:13:14 #780 №2970287 
>>2970273
>если он самых базовых вещей не умеет
Ну это-то можно и без ментора поправить, имхо.
>>2970281
>Так а смысл брать вторую работу
Семью там создать. Это жи тет а тет. Что ты понимаешь!
>В 2023-м? Ну удачи, чо.
А зачем тогда ментор?
>Расскажешь потом
Ну мне стажерство предложили, хотя я жабист...
Аноним 20/12/23 Срд 17:19:34 #781 №2970667 
>>2970164
О, спасибо, няш!

А что из этого можно опустить или наоборот, минимум, который нужно оставить, если только на БЭКА учиться?
Аноним 20/12/23 Срд 17:24:10 #782 №2970678 
>>2970667
>если только на БЭКА учиться?
Лол, это по сути и есть минимальны стек на бэкендера. Из того, что я вижу можно выкинуть разве что MVVM, ну и из js фреймворков оставить только один, реакт например.
Аноним 20/12/23 Срд 23:10:12 #783 №2971025 
Ребят, а вот у ITVDN в курсах
.NET Developer
ASP.NET MVC Developer,
ASP.NET Core Developer
чем они, блять, отличаются? Особенно последние два

встречается ADO.NET. Это что-то устаревшее?
Аноним 21/12/23 Чтв 00:47:34 #784 №2971070 
>>2971025
>встречается ADO.NET. Это что-то устаревшее?
Это база на которой по сути работают и EF и даппер и прочие ормки.
Знать хотя бы поверхностно её лишним не будет, просто хотя бы для понимания, что там под капотом происходит. Но если тебя на собесе будут на полном серьезе про то как она работает спрашивать, с прицелом на то, что "у нас все на чистом ADO.NET работает", то съебывай оттуда нахуй, без оглядки.
Аноним 21/12/23 Чтв 09:40:59 #785 №2971222 
Это снова я >>2968305. Попытался на блокноте писать. Но из-за отсутствия библиотек (поправьте если ошибаюсь) условные диалоговые окна по другому пишутся как в книге указано. Да и каждый раз в командной строке писать немного душно. Поэтому ещё раз прошу посоветовать выход из указанной в посте ситуации. Большое спасибо и с наступающим новым годом.
Аноним 21/12/23 Чтв 09:53:40 #786 №2971228 
изображение.png
Здравствуйте. Это схема из спецификации OAth2.0. Вопрос такой: где мне реализовывать регистрацию, восстановление пароля, смену почты? Насколько я понял, то Authorization Server нужен для того, чтобы выдавать access токены, а это значит, что делать контроллеры и сервисы для регистрации на нём нельзя? Где тогда всё это располагать? На ресур сервере? - вряд ли. Решил использовать OpenIddict библиотеку. У них там есть примеры с кодом, но нигде нет примера с регистрациеймб я плохо искал, у них пользователи тупо зашиты в коде. Помогите, пожалуйста. https://github.com/openiddict/openiddict-core - сыллка на OpenIddict
Аноним 21/12/23 Чтв 10:01:49 #787 №2971233 
>>2971228
Почему нельзя? В кейклок условно это все делается установкой пары галочек. Кстати, а нахуя вы сами велосипедите сервера авторизации?
Аноним 21/12/23 Чтв 10:05:13 #788 №2971234 
>>2971233
А есть готовые? Я просто хз, впервые делаю проект коммерческий, поэтому не хочется проблем с оплатой лицензий и т.д. Знаю, что есть IdentityServer4, но по-моему он больше не поддерживается, а последующие версии платные.
Аноним 21/12/23 Чтв 10:06:52 #789 №2971235 
>>2971234
https://www.keycloak.org/
Попенсорцовый, на жабе.
Аноним 21/12/23 Чтв 10:11:44 #790 №2971238 
>>2971235
Э. А я хочу на шарпе всё. Тем более я уже сделал регистрацию/авторизацию/смену пароля/аллаха на Identity ASP.NET Core. Просто хочу прикрутить OAuth2. Там мне выше кто-то написал, что это всё (Identity ASP.NET Core) хуйня и надо OAuth заделать. Вот сижу и думаю, как это правильно сделать
Аноним 21/12/23 Чтв 10:12:49 #791 №2971239 
>>2971238
>А я хочу на шарпе всё.
Ну сделают на шарпе сервер авторизации такого уровня, тогда и приходи. А так, вроде он не сложно интегрируется https://nikiforovall.github.io/aspnetcore/dotnet/2022/08/24/dotnet-keycloak-auth.html
Аноним 21/12/23 Чтв 10:16:02 #792 №2971241 
Тем более, когда буду с завода увольняться я сис админ, скажу что сам реализовывал аутентификацию. Думаю, что это будет плюсом для меня
Аноним 21/12/23 Чтв 11:25:32 #793 №2971292 
image.png
>>2971241
>скажу что сам реализовывал аутентификацию
Ты не понимаешь ddd.
Аноним 21/12/23 Чтв 11:51:22 #794 №2971318 
>>2971292
Но я хочу сам сделать. Я уже в курсе, что есть готовое решение в виде кейклока
Аноним 21/12/23 Чтв 12:53:22 #795 №2971392 
image.png
Допустим, у меня есть прикриплейд.
Собственно. Проект с Api - нужен чтобы внешнему консьюмеру давать данные. Проект QueueWorker - нужен чтобы отделить запись и чтобы если сервис не лег если много кто-то и часто писать будет.
Стоит ли делать третий проект для внутренних апишек, типа это могут быть и запись и чтение, но в специальном формате, который не идет наружу, а нужен для какой-то специальной логики внутренним сервисам?
Или это все я хуйней страдаю и переусложняю, а достаточно было один проект сделать и в нем все хуярить?
Аноним 21/12/23 Чтв 13:56:51 #796 №2971486 
>>2971222
Чел, ну ёмана. Из тех кто здесь сидит (да и вообще тех кого я знаю) онлайн компиляторы нужны примерно никому, поэтому для того чтобы дать тебе совет, это нужно лезть в интернет, пробовать каждый, изучать и т.д. Кому это нахрен нужно.
Ты сам давно уже мог ввести в поиске "C# online compiler" и пробовать их изучать и работать.

Со своей стороны могу посоветовать, если есть планшет на андроиде, то можешь попробовать вот это:
https://4pda.to/forum/index.php?showtopic=1009215
Там нормальная IDE с автодополнением. Можно ставить нюгеты, поддерживает даже ASP.NET и можно там же компилить и собирать, есть куча примеров и уроков.
Аноним 21/12/23 Чтв 13:58:52 #797 №2971487 
image.png
>>2971233
>кейклок
Говнина ебаная.
Аноним 21/12/23 Чтв 15:09:36 #798 №2971614 
почему в таком прекрасном языке нет горутин и виртуальных тредов? В го и джаве есть, а в божественном шарпе нет.
Аноним 21/12/23 Чтв 15:46:20 #799 №2971662 
>>2971614
Сможешь внятно объяснить, чем эти горутины/виртуальные треды лучше TPL?
Аноним 21/12/23 Чтв 15:55:44 #800 №2971669 
>>2971487
Аргументы?
Аноним 21/12/23 Чтв 17:58:36 #801 №2971763 
>>2971486
Извините, я только учусь и очень туго соображаю. Я вот прочитал и вроде как можно сделать портабл вариант Visual Studio (флешку к ноуту подрубить можно). Это рабочий вариант?
Аноним 22/12/23 Птн 00:11:55 #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);
}
}
Аноним 22/12/23 Птн 00:22:41 #803 №2972095 
>>2972090
Потому что a ссылается на объект типа A, а не B, и as не может привести тип к B, поэтому возвращает null.
Привести что угодно к какому угодно типу нельзя, здесь не джаваскрипт и не питон. Можно привести к реальному типу объекта или его предку, но не к потомку, и не важно, что в потомке нет новых полей.
Аноним 22/12/23 Птн 00:23:17 #804 №2972097 
>>2972090
>B b = a as B;

Рискну предположить, что b == null, т.к. ты создал переменную b, но не проинициализировал её. Т.е. наверн надо написать B b = new a as B
Аноним 22/12/23 Птн 00:33:40 #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? Никак не догадается в обычном случае, если мы хитрые колдунства совершать не будем.
Аноним 22/12/23 Птн 02:56:55 #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;
Тут как минимум нужна машина времени или хз что.
Аноним 22/12/23 Птн 09:28:23 #807 №2972327 
>>2971392
Э. Стой. сервак авторизации, который я пытаюсь запилить - это вообще отдельное приложение, которое запускается отдельно. Основное приложение, где планируются круды по слоистой архитектуре сделано и на него будет переадресация после авторизации на сервере авторизации. А вообще всё можно в одном проекте захуярить, меня никто не контролирует в этом плане да и некому, я тут единственный (на работе), кто может хоть что-то написать, помимо 1C программистов
Аноним 22/12/23 Птн 09:30:22 #808 №2972329 
>>2972327
Вернее переадресация будет на фронт, который планирую на реакте написать. А вот уже с фронта круд запросы будут на бекенд поступать
Аноним 22/12/23 Птн 10:26:57 #809 №2972367 
Помогите плиз с програмой - написал консольное приложение C# обработки PDF файлов (конвертация в PNG файлы с использованием Ghostscript.NET.Processor). Как в нее добавить многопоточность/асинхрон обработки данных, чтобы обработка данных была быстрее?
Аноним 22/12/23 Птн 10:32:32 #810 №2972374 
>>2972367
async/await бахни. Авось заработает.
Аноним 22/12/23 Птн 11:22:30 #811 №2972426 
>>2972374
> async/await бахни. Авось заработает.
> конец 2к23
> программач.итоги
Аноним 22/12/23 Птн 11:42:49 #812 №2972445 
>>2972374
>>2972426
Бахнул async/await по канонам - не заработало)
Аноним 22/12/23 Птн 11:57:07 #813 №2972472 
image.png
Продолжаю начинать смотреть купленные на торрентах видосы от ITVDN.
Курс называется "ASP.NET Базовый".
И, что-то чувствую, подвох. Скажите, пожалуйста, вот эти все aspx на скрине - это тоже всё устаревшее?
Аноним 22/12/23 Птн 12:13:17 #814 №2972504 
>>2972445
Ясен хуй не заработает, если методы библиотеки не являются асинхронными. Да и в целом асинхронность существует для того, чтобы не стопорить параллельные задачи, типа работы UI.

Нужна многопоточность, но я ни разу не работал с Ghostscript.NET.Processor, так что не помогу.
Аноним 22/12/23 Птн 12:24:05 #815 №2972517 
>>2972504
>Ясен хуй не заработает, если методы библиотеки не являются асинхронными
Как же хороша многопоточка в сишорпе. Не то что в джаве. Виртуальные треды не нужны, кстати) Асинк/эвейты - интуитивно понятное решение)
Аноним 22/12/23 Птн 12:34:44 #816 №2972538 
>>2972472
Судя по виду это скорее всего ASP.NET WebForms, которое только на .NetFramework и это древнее говно мамонта. Бросай нахуй смело, если только не рассчитываешь работать с какой-нибудь совсем легаси парашей.
Аноним 22/12/23 Птн 12:36:58 #817 №2972543 
>>2972517
Не, ну ты можешь создать таску и выполнить асинхронно неасинхронный метод, но в целом данное решение не всегда может дать положительный эффект.
Аноним 22/12/23 Птн 13:14:55 #818 №2972603 
>>2972543
Если ты имеешь ввиду просто сделать

Task DoAsync(){
DoSync();
return Task.CompletedTask;
}

То этот код выполнится синхронно.

Если

await Task.Run(DoSync);

То это тоже выполнится синхронно, но в тредпуле.

Если хочется параллельности без лишних изъебств, то надо использовать ParallelQuery. Ну или через тредпул как деды, а тасками или прямо дергать тредпул - уже самому решать.
Аноним 22/12/23 Птн 14:09:26 #819 №2972731 
image.png
>>2972327
Я не знаю зачем ты мне ответил. Но раз никто не ответил, давай я к тебе долюблюсь, потому что ты либо странно выражаешься, либо что-то не так делаешь. А мне - скучно.

Так вот. В чем проблема того механизма авторизации, который ты указал. Проблема простая. Твой сервер авторизации с какого-то фига знает либо про основное приложение, либо про веб-сервер с фронтом, который у тебя ХЗ на чем будет, не суть.
Как по хорошему должно быть?
У тебя должен быть гейтвей, который проверяет, какую апишку хотят дергать. Это такая-то единая точка доступа ко всем апишкам. Так вот, этот гейтвей - таки знает, что если апишка требует авторизации, а никакого токен валидного не передано - он должен либо 401 отдать, либо редеректнуть на сервер авторизации(зависит от того какая у тебя там схема, с токенами, куками или еще что-то ты там придумал).
Дальше.
Получили токен авторизации. Все, теперь гейтвей пропустит запрос к нужной апишке.

Это максимально простой и понятный флоу, который подходит для маленьких и средних проектов.

Для гейтвея - можешь использовать что удобно. Можешь еще один Nginx настроить, можешь - взять Traefik, можешь - Ocelot. Самописное - лучше не брать, потому что заебешься, хотя иногда - и это норм.

Теперь. На всякий случай уточняем. Данные пользователя - ты не хранишь в открытом виде. Никакие. Потому что если это РФ, твое ПО завернут на ФЗ о персональных данных, и тогда придется плясать вокруг пидорасов, которые 100500 денег за услуги по безопасности вокруг требуют. Оно тебе надо? Не надо. Все шифруем-хешируем. Пароли - солим и тоже хешируем.
Далее. Через пару месяцев после ввода в эксплуатацию, тебе скажут: У нас есть корпоративные учетки/гугловские учетки/учетки госуслуг, потому - сразу надо продумать механизм авторизации-регистрации через других поставщиков. Как минимум - на бумаге и в модели заложить, чтобы было куда потом расти.
Далее. С вероятностью 99% двухфакторная аутентификация потребуется. Сейчас в принципе уже почти везде ее требуют, если себя уважают. Потому - хотя бы СМС придется уметь отправлять.
Далее. РФ, а значит ЭЦП. Вход по ЭЦП наше все. Особенно если это завод, как ты сказал, ведь через полгодика-год, вашу приблуду захотят сертифицировать в ФСБ, а там без ЭЦП - тебя сразу нахуй пошлют.
То что забывают чаще всего при первой версии ПО для авторизации-аутентификации. Восстановление пароля. Даже если одмен руками пользователей заводит - механизм сброса пароля /восстановления доступа должен присутствовать.

В общем. Вроде ниче не забыл.

Как же пиздец мне скучно. Вы бы знали. Еще и прямо в отпуске - компуктер сдох с игрульками, которые собирался пройти. Жду, когда привезут новый. Обидно - пиздец.
Аноним 22/12/23 Птн 14:33:09 #820 №2972798 
>>2972731
Ничёсе ты выдал. Спасибо большое. Восстановление пароля уже есть, двухфакторку щас делаю, но пока только по email'у. Данные само собой в открытом виде не хранятся. А вот авторизация через другие учётки - это как раз OAuth 2, который я пытаюсь реализовать. А вот про гетвей вообще не знал, буду делать
Аноним 22/12/23 Птн 14:42:17 #821 №2972808 
>>2972731
А ещё такой вопрос. Во у меня есть таблицы от Identity ASP.NET Core с ролями, пользователями и т.д. Как мне связывать, допустим, написанные пользователем новости в бд? Правильно понимаю, что нужно сделать две бд: identity и news. А связывать это всё, допустим, Guid айдишником пользователя. Или можно вообще всё в одну бд спихнуть и сделать связи от identity user -> news
Аноним 22/12/23 Птн 15:06:37 #822 №2972838 
>>2972808
Все от архитектуры зависит.
Если разные приложения с отдельными базами, то ты в приложении где news - делаешь таблицу
Условно.
Subscribers(TopicId, UserId).
Для реализации фичи - этого обычно достаточно.

Минус - консистентность системы. Если пользователя удаляют из Identity - тебе нужно либо забить в остальных частях системы, либо придумывать механизм как чистить(через очередь, каким-то воркером по крону и т.д.).

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

Короче. Ответ на вопрос - зависит.

Я бы делал во втором приложении явную таблицу ПользователиПриложения(условно), в которой столбец - IdentityUserId. Вот на основе этой таблицы бы уже вся хурма с подписками и прочим в этом приложении. Чтобы не придумывать всякое разное, когда окажется, что надо всякие настройки хранить помимо подписок. Типа реально же - потом надо будет по регионам разбить твои новости, языкам, заблоченым/пользователям. Все это в Identity - не хочется пихать все. Опять же - это дает возможность, если надо, войти, попользоваться приложением в каком-то ознакомительном режиме, потом сохраниться и привязать IdentityUserId и не потерять что ты там настроил.
Аноним 22/12/23 Птн 15:24:05 #823 №2972882 
>>2972838
Понял, пасиб
Аноним 22/12/23 Птн 21:21:12 #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) абсолютно пуст.
Аноним 22/12/23 Птн 21:27:37 #825 №2973236 
image.png
>>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: Публикация приложения. Доступные сервера
Аноним 22/12/23 Птн 22:11:54 #826 №2973270 
>>2973236
>Смущает Web API. Razor-страницы
Web API норм. Насчет razor pages я х.з. вроде старый, но говорят, что зная их, можно легко въехать в тот же Blazor.

Я бы тебе советовал вот это для начала прочесть:
https://metanit.com/sharp/aspnet6/
Разобрать каждую тему, тогда уже хоть какое-то понимание появится.
А потом уже лезть во всякие MVC и т.д.
Аноним 22/12/23 Птн 23:09:27 #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/
Аноним 22/12/23 Птн 23:58:38 #828 №2973335 
насколько бредово пилить экстеншен на сеттер интерфейса?
что-то типа:
public int Hueta
{
get => hueta;
set => hueta = this.SetHueta(value);
}
Аноним 23/12/23 Суб 14:21:36 #829 №2973690 
KDT7-i8-gyDuHxdSeVqJx7kKYk-960.jpg
>>2973335
Интерфейса? Он же абстрактный, там нет сеттеров.
И зачем тебе пилить дополнительный статический класс, чтобы работать с другим экземпляром?

Какова конечная цель?
Аноним 23/12/23 Суб 14:46:13 #830 №2973706 
Как комбинировать partial static классы?

Допустим в одной библиотеке у меня есть класс partial static MyLibrary.Math
И в другой библиотеке partial static MyLibrary.Math

Вторая библиотека импортирует первую и я ожидаю, что в классе Math мне будут доступны методы из первой библиотеки. Но я получаю конфликт имен. Разве partial не для этого создан?
Аноним 23/12/23 Суб 16:00:13 #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'шный обработчик ошибок как-то таки это все ловит, лул.

Чего делать - я не знаю. И что происходит - тоже не понимаю. Типа я ожидаю что исключение обработается. Оно не обрабатывается. Ну ок. Не обрабатывается, я ожидаю что тогда программа упадет. Но она тоже не падает.
Как искать-то причину и что вообще происходит - я хз.
Какие-нибудь зацепки?
Аноним 23/12/23 Суб 16:19:00 #832 №2973761 
>>2973743
async void?
Аноним 23/12/23 Суб 16:22:53 #833 №2973766 
>>2973690
у меня иерархия наследования вышла такой ебанутой и базовый класс вышел настолько толстым, что я решил лучше все переписать. пытаюсь обобщить и убрать из базового класса как можно больше функционала, но понял уже что так насиловать интерфейсы нельзя
Аноним 23/12/23 Суб 16:43:52 #834 №2973788 
>>2973335
В reactive ui так сделано
Аноним 23/12/23 Суб 18:40:04 #835 №2973886 
Блядь, открыл первую главу учебника, и охуел с того, как тут много рассказывается про фреймворки .NET, .NET Core, ASP.NET Core и т д.

Есть у кого-то инфографика того, что придется изучать?

Правильно ли я понимаю, что есть несколько языков - C#, F#, VB. Всем им доступна среда исполнения .NET Core, которая упаковывает и запускает программы, конфигурирует библиотеки? Слово Core вроде бы убрали? Все верно?
Аноним 23/12/23 Суб 18:44:09 #836 №2973893 
>>2973886
Достаточно ли для понимания того, что как и у Java, у сисярпа есть виртуальная машина, которая исходный код на нем превращает в CIL (или IL), и потом исполняет, + кроссплатформенно?
Аноним 23/12/23 Суб 18:57:08 #837 №2973910 
>>2973886
>>2973893
В принципе понимание верное, только
>Всем им доступна среда исполнения .NET Core,
сама среда называется CLR (Common Language Runtime).
Аноним 23/12/23 Суб 18:59:36 #838 №2973914 
>>2973910
Спасибо!
Аноним 23/12/23 Суб 19:03:58 #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# и оба проекта будут прекрасно взаимодействовать (за исключением пары нюансов).
Аноним 23/12/23 Суб 19:11:17 #840 №2973930 
>>2973706
Так как ты хочешь - никак.

Partial - это сахар, который позволяет разделить исходный код по разным файлам в пределах одного проекта.
Под капотом, после компиляции, это все равно будет один класс в пределах одной сборки.
Аноним 23/12/23 Суб 19:18:25 #841 №2973946 
>>2973921
>Ты даже можешь создать один проект на VB, а другой на C# и оба проекта будут прекрасно взаимодействовать (за исключением пары нюансов).
Для любителей извращенного, при желании можно даже код на Java выполнять в среде .Net.
Для особых ценителей, обратное (С# на JVM), вроде как, тоже возможно.
Аноним 23/12/23 Суб 22:19:40 #842 №2974262 
>>2973946
>Для любителей извращенного
Ну мне эта возможность очень помогла с переходом с VB на C#. Я не стал доделывать программу до конца на VB, а просто добавил новый проект на C# и продолжил писать программу. До сих пор использую либы на бейсике.
Аноним 24/12/23 Вск 00:26:38 #843 №2974512 
Еще такой вопрос. Я с плюсов потихоньку перекатываюсь, знаю что такое абстрактный класс. В C# все тоже самое?

И еще, интерфейс это штука, которая по сути может объединить несколько классов ,которые реализуют этот интерфейс? Типо говорю функция void sheet(inter a, inter b), где а и б - разные классы, реализующие один интерфейс?

Плюс еще вопрос, нахуй нужны свойства? Понимаю про методы и поля, а свойства где используются и зачем?
Аноним 24/12/23 Вск 01:31:07 #844 №2974620 
>>2974512
>интерфейс это штука, которая по сути может объединить несколько классов
Интерфейс не может объединять классы. А вот класс может реализовать несколько интерфейсов.

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

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

Ну это один из вариантов применения интерфейса.

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

А вот где применять абстрактный класс - надо еще понять. Интерфейс на мой взгляд более универсален, к тому же в современных версиях шарпа он может так же иметь внутри себя какую-то логику, а не просто шаблоны, чем обесценивает все качества абстрактного класса. Хотя пихать логику в интерфейсы на мой взгляд - пиздец. Это развращает.
Аноним 24/12/23 Вск 02:07:59 #845 №2974649 
>>2974620
Спасибо!
Аноним 24/12/23 Вск 02:09:43 #846 №2974650 
>>2974512
>Плюс еще вопрос, нахуй нужны свойства? Понимаю про методы и поля, а свойства где используются и зачем?

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

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

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

Единственная рекомендация - не использовать по возможности тяжелую логику в свойствах. Для этого все же нужно использовать обычные методы. Ну и самому быть начеку при работе с неизвестными тебе классами и не дрочить одно свойство несколько раз в пределах одного метода. А то бывает в цикле обращаешься к свойству Width, а оно на самом деле запускает тяжелые расчеты в геттере. Ну я имею ввиду, что на будущее (пока это тебе наверно не надо) неплохо бы чекать исходники и понимать как это свойство там работает. Мне вот лично с этой неопределенности пригорает и похоже эта проблема мало кого волнует.
Аноним 24/12/23 Вск 04:01:04 #847 №2974698 
>>2974650
Мил человек, спасибо большое за развернутые ответы.

В плюсах возможно тоже есть, но просто энивей можно обойтись обычными методами же. Поэтому и я задал этот вопрос.
Аноним 24/12/23 Вск 04:28:17 #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;
}
Аноним 24/12/23 Вск 04:30:18 #849 №2974707 
>>2974705
там строчка y1 = y y y
и y1 *= y
Аноним 24/12/23 Вск 04:30:54 #850 №2974708 
>>2974707
умножить в общем y на y на y, почему то не отображается
Аноним 24/12/23 Вск 11:54:48 #851 №2974864 
>>2974698
>В плюсах возможно тоже есть, но просто энивей можно обойтись обычными методами же.
Ну в шарпе ты тоже можешь обойтись обычными методами. Ты можешь даже поле сделать публичным. Но вопрос не в том, что ты можешь, а в том чтобы дать понять другим, что ты имеешь ввиду. Нужен определенный стандарт. Даже ItelliSence зная, что у тебя есть свойство, выдаст немного больше информации.

Ну представь себя на месте обычного пользователя каким-то там классом. Как обычный метод этого класса даст понимание, что он не просто что-то там делает, но еще меняет внутренние поля класса? Ну да, ты должен назвать что-то вроде SetValue и GetValue, что это не просто какие-то там методы, а специальные методы с которыми надо быть аккуратнее, что приблизит тебя к концепции свойств.

К тому же есть куча автоматических взаимодействий кода со свойствами. К примеру привязки. Если ты будешь изучать MVVM-паттерн, то познакомишься с тем, как условный GUI-текстбокс привязывается к свойству и автоматически обновляется или обновляет данные этого свойства. Это возможно благодаря стандартизации таких вещей, как геттер и сеттер.
Аноним 24/12/23 Вск 12:03:09 #852 №2974878 
>>2974708
Ньюфаг штоле? Разметка макабы пидорасит. Звездочка это аналог открывающего тэга <i/>, который делает текст наклонным.

Поэтому код либо кидай скриншотом, если он короткий, либо оформляй через pastebin, а сюда кидай ссылку. Подсветку синтаксиса не забудь врубить.
Аноним 24/12/23 Вск 12:04:16 #853 №2974879 
2023-12-2412-04-05.png
>>2974878
хуй пизда джигурда
Аноним 24/12/23 Вск 12:08:56 #854 №2974888 
>>2974878
> открывающего тэга <i>
фикс
Аноним 24/12/23 Вск 12:31:53 #855 №2974944 
>>2974705
> почему он в выводе выводит от 1.20 до 1.42
Может быть потому, что проверка while происходит в начале блока, соответственно блок выполняется до конца, значение y инкрементируется до 1.42 (а что ему мешает?), затем начинается новая итерация, вайл видит, что значение y не удовлетворяет условию и выходит из цикла.

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

Т.е. тебе надо сделать бесконечный цикл, что-то вроде while (true)
А саму проверку (y < 1.41) делать в конце блока до того как начнется изменение y
И если условие не удовлетворяет, то делать break; из цикла
Аноним 24/12/23 Вск 13:13:44 #856 №2974990 
>>2974944
>Т.е. тебе надо сделать бесконечный цикл, что-то вроде while (true)
В шарпе есть do...while цикл для этих целей.
Аноним 24/12/23 Вск 15:05:40 #857 №2975158 
>>2974990
Один хрен у него переменная y уже присвоит значение.
Это не поможет.

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

Ну или присваивать значение y в начале блока.
Аноним 24/12/23 Вск 15:15:37 #858 №2975167 
image.png
>>2974705
Как-то так
Аноним 24/12/23 Вск 18:53:25 #859 №2975618 
Всем привет. Я так понимаю компилятор никак нельзя поставить на условную флешку? VS Code на флешку ставится и работает. Но вот в дебаг режим не заходит. В интернете говорят из-за того что .NET нельзя поставить на флешку. Так ли это и можно ли как-то сделать полноценный портативный вариант? Спасибо
Аноним 24/12/23 Вск 22:04:01 #860 №2976023 
>>2975618
Пока
Аноним 24/12/23 Вск 23:46:13 #861 №2976214 
>>2975618
https://github.com/dotnet/core/issues/2183#issuecomment-1601275622
Аноним 26/12/23 Втр 01:11:52 #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
Аноним 26/12/23 Втр 01:19:05 #863 №2977766 
>>2977764
https://learn.microsoft.com/ru-ru/dotnet/standard/base-types/custom-date-and-time-format-strings
Аноним 26/12/23 Втр 01:50:54 #864 №2977780 
image.png
>>2977764
>Вот как посмотреть методы, которые можно у даты вызвать?
Для этого и существуют нормальные IDE и IntelliSence
Аноним 26/12/23 Втр 10:42:50 #865 №2977986 
>>2977780
Как ты это сделал, шайтан?
Аноним 26/12/23 Втр 10:45:04 #866 №2977991 
>>2977986
Щас скажет что это решарпер. В 99% случаев, когда происходит какая-то магия, то это решарпер.
Аноним 26/12/23 Втр 10:52:41 #867 №2978004 
>>2977991
Или вообще Rider.
Аноним 26/12/23 Втр 13:30:12 #868 №2978220 
2023-12-2613-20-10.png
2023-12-2613-20-52.png
Пикрил 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 - вывод каждой итерации из цикла)
Аноним 26/12/23 Втр 13:40:51 #869 №2978236 
>>2978220
Ссылки разные?
Аноним 26/12/23 Втр 13:54:46 #870 №2978265 
>>2978220
хз че ты там мутишь, но не забываем про боксинг, где для равных по значению значимых типов создаются обертки с разными ссылками
byte a = 1;
byte b = 1;
Console.WriteLine(a==b);
Console.WriteLine((object)a==(object)b);

True
False
Аноним 26/12/23 Втр 14:12:47 #871 №2978315 
>>2978265
Разве при сравнении на втором пике не должен использоваться оператор, определенный в bool? Переопределение же
Аноним 26/12/23 Втр 14:23:16 #872 №2978365 
>>2978315
Хуйню выдал.
Аноним 26/12/23 Втр 14:32:18 #873 №2978394 
>>2978236
Какие ссылки? Это ж структуры, я ожидал передачу значения.

>>2978265
>не забываем про боксинг, где для равных по значению значимых типов создаются обертки с разными ссылками
Ах вот оно что

>хз че ты там мутишь
Вообще, изначально была проблема в том, что мне надо в лист боксе отобразить итемы, у которых нет свойства Name или ID.
Поэтому создал конвертер, который выводит тип объекта и его индекс в списке. А так как хочу сделать универсальный конвертер, то сравниваю обджекты. В общем, использую "object.Equals(a, b)" вместо "a == b".
Аноним 26/12/23 Втр 14:40:48 #874 №2978414 
>>2977986
>>2977991
>>2978004
Вы, бПоздравилПоздравилПоздравил, Поздравилб пПоздравилПоздравиль удаПоздравилПоздравилПоздравилПоздравилыПоздравил чтПоздравил ПоздравилПоздравил? СтаПоздравилдаПоздравилтПоздравилая Visual Studio 2022. Community Edition.
Аноним 26/12/23 Втр 14:47:29 #875 №2978439 
>>2977986
>>2977991
>>2978004
Visual Studio 2022. Community Edition.
Аноним 26/12/23 Втр 14:48:39 #876 №2978445 
>>2978414
лол
Аноним 26/12/23 Втр 14:50:00 #877 №2978450 
>>2978445
Угу. Там даже ни одного мата не было. Х.з. чего доска так возбудилась.
Аноним 26/12/23 Втр 16:09:30 #878 №2978722 
2023-12-2616-08-24.png
>>2978439
Хм, действительно. Значит это локальная залупа спецом для дата тайм.
Не интересно.
Аноним 26/12/23 Втр 18:44:04 #879 №2978957 
>>2978722
нет. это StringSyntaxAttribute, который позволяет сделать подсказки по формату для визуал студии. То есть он подсказывает студии что тут строка, но не просто строка, а формат даты или регулярка (вот все допустимые значения https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.stringsyntaxattribute)

вот бы найти еще нормальный мануал как самому создавать. но как обычно все интернал.
Аноним 26/12/23 Втр 18:44:34 #880 №2978958 
>>2978957
фикс ссылки
https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.stringsyntaxattribute?view=net-7.0
Аноним 27/12/23 Срд 22:42:55 #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);

это хуйню как вообще понимать, 🥗ач?
Аноним 27/12/23 Срд 23:15:03 #882 №2980532 
>>2980506
Видимо ILSpy хреново IL назад в 🥗овый код переводит. В IL лишних локальных переменных нет, null сразу на Новогодний Репертуар грузится. Если в релизной конфигурации собрать, то вообще даже локальная переменная под bar заводится не будет, все операции чисто на Новогодний Репертуаре будут.

https://sharplab.io/#v2:C4LglgNgPgAgTARgLAChXwMyoN6oAQF7xz6G4qGV4BuAhgE54BGDeAvHgHYCmA7ngCEGACgQAGMQEoA3KSp45VACIB7ACoALMJwDmwlvRnyCiyqs3a9BmYoC+ixQAd6YOsG5EEANiIAWPOZausJCjAYANHgAYioqeABmsexcAK4QEJKK5MaeAJz6DDYUxjAI+YkqRZT2KDXoGHj03ADGKvQAJtGxwtrAeABqtBAp3EUwDU2tHYIivQNDIzJAA===
Аноним 27/12/23 Срд 23:20:40 #883 №2980542 
>>2980532
лол
Аноним 27/12/23 Срд 23:20:55 #884 №2980544 
Новогодний Репертуар?
Аноним 28/12/23 Чтв 01:43:09 #885 №2980732 
image.png
>>2920885 (OP)
Мне нравится, как в библиотеке Bukkit для 🍊 работает система событий. Для прослушивания событий есть интерфейс Listener, с которым можно создать метод, который будет вызываться при инициализации события. Тип события указывается в параметрах метода.
Как такое можно реализовать в 🥗? Мне совсем не нравится, что события здесь функционально-ориентированные.
Аноним 28/12/23 Чтв 02:03:47 #886 №2980737 
🥗?
Аноним 28/12/23 Чтв 02:05:00 #887 №2980738 
Новогодний Репертуар 🥗
Аноним 28/12/23 Чтв 06:03:09 #888 №2980793 
>>2980732
Да просто реализуй. Какая проблема то
Чем класс листенер отличается от любого другого класса с методами кроме семантики (ну и она же в названии)?
Ничем не отличается

Никто не заставляет юзать нативные события.
Если у тебя в хендлере нужно 2+ метода - ну и делай листенеры
Просто они по семантике будут не универсальные подптсчики, а "конекретно тутовые хендлеры"
Но все это метафоры. Реализация то одинаковая
Аноним 28/12/23 Чтв 10:40:25 #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
Аноним 28/12/23 Чтв 17:18:08 #890 №2981416 
Сап, а кто какой api gateway использует и почему?
Аноним 28/12/23 Чтв 17:49:38 #891 №2981461 
>>2981416
Nginx
> почему
По умолчанию.
Аноним 29/12/23 Птн 18:21:13 #892 №2982764 
2023-12-2918-13-35.png
Слушайте, а что выводится по умолчанию в качестве разделителя вещественного числа: точка или запятая?

Я создаю новое WPF-приложение, Net7.0, пытаюсь забиндить double в текстбокс, и в качестве разделителя у меня стоит точка. При этом у меня нет никаких кастомных конвертеров и валидаторов. Смотрю в настройках винды формат числа — там стоит запятая (пикрил).

У меня переклин. Я недавно переустанавливал винду и мне кажется, что должна по дефолту быть запятая. А если нет, то почему Застолье игнорирует настройки винды?
Аноним 29/12/23 Птн 18:40:17 #893 №2982800 
>>2982764
вижуал Застолье
Аноним 29/12/23 Птн 19:14:59 #894 №2982833 
2023-12-2919-13-01.png
2023-12-2919-13-19.png
2023-12-2919-13-26.png
>>2982764
При этом если через конвертер тупо конвертировать занчение в стринг, то выводится запятая. Че за нах?
Аноним 29/12/23 Птн 19:30:49 #895 №2982842 
2023-12-2919-24-10.png
2023-12-2919-29-22.png
>>2982833
Попробовал в конвертере проверить, что приходит в параметр culture и почему-то там указано "en-US". Почему? В настройках российский регион.
Аноним 29/12/23 Птн 19:37:50 #896 №2982851 
>>2982842
Ну типа при инициализации App могу написать
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));


Но вопрос, какого хуя я этого никогда не делал раньше? Может есть где-то глобальная настройка в Застолье? Может какой-то плагин поменял?
Аноним 29/12/23 Птн 22:33:21 #897 №2983126 
Вопрос по Avalonia: есть ли виджеты таблицы с переключением режима edit/read-only, с возможностью выделить отдельную ячейку в строке и возможностью сделать контекстное меню?

Дефолтный DataGrid и не дефолтный TreeDataGrid не умеют в выделение отдельной ячейки по дефолту. Неужели надо самому SelectionModel писать? Или есть готовые решения которые я не нашел? Так влом самому писать просто
Аноним 30/12/23 Суб 00:00:21 #898 №2983238 
>>2983126
Я могу судить по впф. Для этих целей пришлось бы перелопачивать весь стиль.

Дата грид это такая залупень, шо я ебал ее в рот. Я все делал через ListView из которого можно при помощи стилей сделать что угодно. Окно свойств вижуал cтудии — это все ListView на самом деле.
Аноним 30/12/23 Суб 01:04:12 #899 №2983359 
Застолье?
Аноним 30/12/23 Суб 01:04:31 #900 №2983361 
Новогодний Репертуар 🥗 Застолье
Аноним 30/12/23 Суб 05:28:04 #901 №2983428 
>>2982851
Это делается так - CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCultute("ru-Ru");
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCultute("ru-Ru");
Аноним 30/12/23 Суб 11:51:43 #902 №2983494 
>>2983428
1. Где делается?
2. А жесткое указание ру-региона вместо той, что задана в операционной системе
3. Почему я не делал так раньше и все работало
Аноним 30/12/23 Суб 11:55:10 #903 №2983495 
>>2983494
>А почему там жесткое
фикс
Аноним 30/12/23 Суб 18:35:18 #904 №2983932 
image.png
Только что заметил лютый пиздец но он работает.
Поток заходит в Первый лов в ToCheck(string ip) а потом срабатывает метод Update() а там тоже лок с тем же объектом. Вот смотрю на код и как бы по смыслу он не должен работать, даже в 1 поток, но он отрабатывает нормально.
Почему так?
Смысл зайти и проверить дату редактирования файла, если файл младше то перезагрузить его, лок нужен что бы в файл не вцепились сразу 2 потока.
Аноним 30/12/23 Суб 19:00:27 #905 №2983999 
>>2983932
>Почему так?
Так совпало. Можешь 100 проверок локов сделать да еще с каким нибудь таймером ожидания и тогда шансы будут еще выше. Но рано или поздно два потока под таким таймингом зайдут, что не спасет.

Вроде же есть всякие очереди, которые и решают эту проблему. Разве не?
https://metanit.com/sharp/tutorial/4.7.🎄
Поток создает запрос в очередь и этот запрос будет обработан только после того как будут обработаны запросы от других потоков. Тогда у тебя будет гарантия, что несколько потоков не сядут жопой на один сральник.
Аноним 30/12/23 Суб 19:02:24 #906 №2984003 
>>2983999
>>🎄
Рака яиц тому, что для программача настроил Новогоднее Настроение.
Гугли "Очередь Queue".
Аноним 30/12/23 Суб 19:13:54 #907 №2984031 
image.png
>>2984003
блять я испугался
А зачем мне очередь?
Я просто сделаю 2 lockObject и когда поток зайдет ToCheck(string ip) он залочит первый лок и другие уже не войдут в него, а потом залочит в Update().
Хотя я сейчас непонимаю я нахуя я делал lock в Update() так как в него по идее не может ни кто попасть так как вызов этого метода есть только в ToCheck(string ip) и он под локом.
Наверное ночью писал и не понимал что пишу, бывает такая хуйня что находит вдохновение и 15 часов могу писать код, только вот последние часы не помню что и нахуя писал.
Аноним 30/12/23 Суб 19:27:50 #908 №2984066 
А вот еще вопрос, я запускаю сайт на ubuntu как службу, а можно еще через докер.
Какие профиты я получу используя докер? Ну или какие не получу?
Аноним 30/12/23 Суб 19:47:33 #909 №2984109 
>>2984066
через докер ты получишь "оно просто работает но докер"
без него тебе ВОЗМОЖНО придется ставить рантайм и прочее чтобы у тебя это работало, а это не так просто

у меня были траблы opencv + ffmpeg + vip для имаджей
не Прочиталось никак. вошло в конфликт на реальной системе
впрочем не Прочиталось из за випа что стала память утекать
Аноним 30/12/23 Суб 19:48:43 #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.
Аноним 30/12/23 Суб 19:49:32 #911 №2984113 
>>2984031
>блять я испугался
Я бы тоже, потому предупредил.

>А зачем мне очередь?
При многопоточности, обращения потоков к свойству не происходят последовательно. Один поток меняет статус lock на true, а второй в это время его уже проверил и думает что там false и лезет читать файл. Они могут полезть одновременно.
С булевыми переменными это уловить сложно, но вот с другими более сложными типами переменных получить конфликт легко.
Аноним 30/12/23 Суб 19:54:30 #912 №2984125 
>>2984113
Но я не совсем понимаю есть ли у меня многопоточность)
Метод контролера public IActionResult Index() работает ли он сразу в многопотоке? Пока 1 выполнение идет, а второй юзер зашёл на страницу его в очередь поставит или будет создал второй HomeController и в нем сработает метод?*
Аноним 30/12/23 Суб 19:56:07 #913 №2984130 
>>2984125
займет поток из пула, а значит пул исчерпается и остальные буду ждать.
Аноним 31/12/23 Вск 00:43:23 #914 №2984400 
На сколько адекватна идея хранить данные о подключении к бд в другой бд?
К примеру мне нужно много бд, каждая бд для своего сайта.
Я делаю как то так
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=db.Where(d => d.Domain ==Request.Host.Host).First()"); //ну типо по какому домены пришёл запрос ту бд и берем
}
Не будет ли конфликтов каких кто?
Идея в том что сайты разные и контент совершенно разный. Выиграю ли я в скорости запросов?
Аноним 31/12/23 Вск 02:27:25 #915 №2984450 
>>2984066
С докером ты получишь удобство разворачивания, обновления всего этого дела.
Без докера, тебе надо обновить свой сайт - ты ручками по ССШ заливаешь новую версию. Ты обновил .NET - ручками иди обновляй на хосте зависимости. Да, удаляешь - иди руками чисть что там насрал.
Если что-то упадет - ты можешь в докере изи настроить автоподнятие.
Сверху - нахуевертить всяких писек, чтобы если что-то идет странно(память резко потреблять больше стало, место скоро кончится и т.д) - тебе прилетели уведомления, метрики куда надо.
Короче. Минимально - удобство.

Дальше, если у тебя какая-то микросервисная шляпа начнется - ты просто берешь и делаешь нужное кол-во инстансов, сколько хост потянет - и все, так тебе придется искать как твою службу размножить, настраивать это все и т.д.
Аноним 31/12/23 Вск 02:29:36 #916 №2984451 
>>2984400
В таком виде - хуевая.
А вцелом - норм. Что такого?
Аноним 31/12/23 Вск 13:37:01 #917 №2984592 
Когда я в цикле запрашивается длина коллекции, она запрашивается при каждой итерации, или только один раз? Особенно этот вопрос касается IEnumerable и его метода Count()

for (int i = 0; i < MyCollection.Count(); i++)
{ }
Аноним 31/12/23 Вск 17:53:58 #918 №2984774 
>>2983238
Отвечу с опозданием: выяснил что TreeDataGrid все таки позволяет одиночное выделение ячейки, но документации к нему по многим другим моментам не хватает.

Норм аналогов для WPF-ного ListView в Avalonia нет(

Теперь мучаюсь с тем как сделать переключение режимов в контроле TreeDataGrid между "только чтение" и "изменение", тупо документации не хватает. Придется смотреть код
Аноним 31/12/23 Вск 19:05:16 #919 №2984833 
>>2984592
Каждый раз.
Аноним 01/01/24 Пнд 20:19:55 #920 №2985523 
>>2984592
Так нельзя делать. У тебя каждый раз IEnumerable будет перевычисляться. В лучшем случае это потеря производительности, в худшем это может всё распидорасить, если у тебя хтонь в конструкции.
Аноним 01/01/24 Пнд 20:53:24 #921 №2985553 
>>2985523
И ElementAt нельзя использовать в цикле For? Нужно foreach?
Где-то я видел, что ElementAt это что-то вроде foreach который обходит коллекцию до нужного индекса.

А как тогда к примеру сравнивать итемы двух IEnumerable? С For все просто:
for (int i = 0; i < 100; i++)
{
If (MyCollectionA.ElementAt(i) == MyCollectionB.ElementAt(i)){ }
}
Аноним 01/01/24 Пнд 20:57:07 #922 №2985556 
>>2985553
> Где-то я видел, что ElementAt это что-то вроде foreach который обходит коллекцию до нужного индекса.
Как хуево, что сорсы либ закрыты, и нельзя самому посмотреть, как оно реализовано...
Аноним 01/01/24 Пнд 21:13:02 #923 №2985574 
2024-01-0121-08-21.png
2024-01-0121-07-14.png
>>2985553
Сначала идет попытка проверить что за зверь, и если он не IList, то тогда действительно будет в цикле перебираться.
Аноним 01/01/24 Пнд 21:20:49 #924 №2985590 
>>2985553
>>2985574
Так что лучше запрашивать IList вместо IEnumerable, если это возможно, но IList можно редактировать, а IEnumerable запрещает вносить изменения в список.
Аноним 01/01/24 Пнд 21:23:54 #925 №2985591 
2024-01-0121-22-21.png
>>2985590
А зачем тогда нужен IEnumerable? На пикрил пишут, что он подходит для перебора итемов, но он не очень-то хорош в этом.
Аноним 01/01/24 Пнд 21:47:28 #926 №2985617 
>>2985591
Для перечисления.
Аноним 01/01/24 Пнд 22:41:57 #927 №2985644 
>>2985591
как он может не быть хорошо в том для чего он исключительно и предназначен....
Аноним 01/01/24 Пнд 23:06:07 #928 №2985657 
>>2985644
>как он может не быть хорошо в том для чего он исключительно и предназначен....

Ну потому что вот это пример >>2985553 не очень эффективен по сравнению с аналогичной реализацией над IList.
Аноним 01/01/24 Пнд 23:08:25 #929 №2985662 
>>2985617
А что такое перечисления? foreach?
Аноним 01/01/24 Пнд 23:36:17 #930 №2985679 
>>2985591
Для перебора. А не для определения размера.
Аноним 02/01/24 Втр 00:07:42 #931 №2985728 
>>2985590
>Так что лучше запрашивать IList вместо IEnumerable, если это возможно,
Зачем. Если тебе под IEnumerable придет List (или даже Array) то они вполне себе определятся как IList и все отработает как надо.
Аноним 02/01/24 Втр 00:09:30 #932 №2985732 
>>2985657
>Ну потому что вот это пример >>2985553 не очень эффективен по сравнению с аналогичной реализацией над IList.
Ну так ты тут нихрена не перебором занимаешься, а элементы по индексу достаешь, что как бы выходит за область применения IEnumerable
Аноним 02/01/24 Втр 01:01:19 #933 №2985806 
>>2985662
Все, что вызывает энумератор для перечисления. Например, foreach, да.
Аноним 02/01/24 Втр 01:59:42 #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(), и читать уже из них, иначе оно будет пересчитываться несколько раз (ещё и разные результаты могут получиться, если у тебя исходные данные изменятся, например).
Аноним 02/01/24 Втр 02:40:25 #935 №2985872 
Где перекат? Срачей не будет больше, тред не улетит в лимит.
Аноним 02/01/24 Втр 02:44:09 #936 №2985874 
>>2985872
Перeкат будет через 65 поcтов.
Аноним 02/01/24 Втр 12:33:43 #937 №2985988 
>>2985872
Срач устроить легко
ЖАВА ГОВНО

щас прибегать жавист и начнет обсираться
Аноним OP 03/01/24 Срд 21:49:14 #938 №2988001 
>>2985872
Джавадебил, тебе невтерпеж?
Аноним 04/01/24 Чтв 18:31:12 #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#?
Аноним 04/01/24 Чтв 18:38:56 #940 №2988881 
>>2988872
Блазор покури. Там верстать еще приятнее. Особенно если использовать интерактив сервер, с кодбихайнд блоком.
Аноним 04/01/24 Чтв 18:48:04 #941 №2988902 
>>2988872
metanit.com
Раздел про шарп.
Аноним 04/01/24 Чтв 18:55:01 #942 №2988922 
>>2988881
>>2988902
Спасибо за наводку.
Аноним 04/01/24 Чтв 19:43:21 #943 №2988995 
>>2920885 (OP)
Парни, там это, Никлаус Вирт умер 1-го января.
Почтим память.
Без него (хоть и опосредованно), вряд ли бы наш любимый C# был бы таким крутым и замечательным.
Press F5 to respect.
Аноним 04/01/24 Чтв 19:55:59 #944 №2989027 
>>2988995
Деды уходят... F5
Аноним 05/01/24 Птн 00:39:49 #945 №2989355 
Таак, блять. Есть слой Domain, мне там надо сделать сущность Request. Этот реквест может быть двух типов RequestFOB и RequestFCA. Отличие буквально в трёх полях. Мне в домене лучше сделать сущность BaseRequest и потом просто её наследовать этими RequestFOB и RequestFCA? Или всё запихнуть в один класс Request и там уже null фигачить, если запрос FOB или FCA. Или как лучше сделать? Подскажите, пожалуйста.
Аноним 05/01/24 Птн 01:29:31 #946 №2989411 
>>2989355
Ты правильно придумал
Аноним 05/01/24 Птн 01:30:59 #947 №2989412 
>>2989411
Я в итоге всё в интерфейс засунул
Аноним 05/01/24 Птн 01:31:32 #948 №2989414 
>>2989412
А должен был перекатить тред
Аноним 05/01/24 Птн 01:33:42 #949 №2989419 
>>2989414
Я скорее его на хуй перекачу ибо не умею
Аноним 05/01/24 Птн 01:39:27 #950 №2989425 
>>2989355
>Или как лучше сделать?
Любой вариант, который подходит под твои требования и бизнес-логику.
Плюс можешь еще сделать Request как свойство каждой из отдельных сучностей, тогда проще нормализовать будет.
Аноним 05/01/24 Птн 01:43:24 #951 №2989427 
>>2989425
У меня опыта разработки 0. Поэтому и спрашиваю. Сейчас я запихнул всё в интерфейс.
>Плюс можешь еще сделать Request как свойство каждой из отдельных сучностей
Наверное так лучше...Я щас на гитхабе посидел, там челы также делают
Аноним 05/01/24 Птн 02:06:29 #952 №2989437 
>>2989355
>RequestFOB и RequestFCA.
В соответствии с гайдланами стоит использовать только очень известные сокращения типа URL, HTTP, TCP. Всё остальное стоит писать полностью.
Плюс к этому даже сокращения надо писать паскаль/кэмел кейсом: RequestFob, RequestFca.
Аноним 05/01/24 Птн 02:16:28 #953 №2989439 
>>2989437
Я сам не знаю что такое FOB и FCA это в отделе логистики какие-то термины. В понедельник на работу пойду спрошу. А про соглашение как писать сокращение спасибо
Аноним 05/01/24 Птн 02:22:37 #954 №2989442 
>>2989414
Нет, жабадебил, не будет переката до 1000постов.
Аноним 05/01/24 Птн 08:25:01 #955 №2989558 
https://habr.com/ru/articles/701352/
Шарперы слушаю ваши оправдания.
Аноним 05/01/24 Птн 08:26:53 #956 №2989559 
Глупый вопрос. Но ответ нужен.
Сколько при запуске занимает памяти нет.кор фреймворк?
Аноним 05/01/24 Птн 08:53:12 #957 №2989571 
>>2989442
Сам ты жавадебил. Или без жава.
На мобильном девайсе тяжко грузить столько прстов
Аноним 05/01/24 Птн 08:55:34 #958 №2989573 
>>2989558
Что быстрее? Кот или кит?
Аноним 05/01/24 Птн 09:31:38 #959 №2989586 
>>2989573
Что логичнее, объяснить содержание или скатиться в неясные вопросы?
Аноним 05/01/24 Птн 09:33:02 #960 №2989587 
>>2989571
>тяжко грузить столько прстов
У тебя ондроед второй? Или ты из подвала? У меня все нормально грузит.

мимо джавабоярин
Аноним 05/01/24 Птн 09:53:57 #961 №2989592 
>>2989586
А ты попробуй ответь и все поймешь

>>2989587
Ну и иди нах. Сиди один в этом треде. А я зайду через месяц
Аноним 05/01/24 Птн 11:19:13 #962 №2989615 
>>2989592
Самослив?
Аноним 05/01/24 Птн 15:41:31 #963 №2989953 
>>2989558
Ты на дату статьи посмотри, год назад это уже все обсосали иди в архивач и там ищи.
Аноним 05/01/24 Птн 20:37:09 #964 №2990438 
>>2989953
Новые данные подкатили? Есть ссылки?
Аноним 05/01/24 Птн 22:49:43 #965 №2990574 
>>2990438
Сравнимать несравнимое
Ну-ну
Аноним 07/01/24 Вск 17:39:59 #966 №2992268 
изображение.png
изображение.png
изображение.png
изображение.png
Блять, я не понимаю. Посмотрел гайд как сделать глобальную обработку исключений. Решил прикрутить в свой проект, начал тестить ии... Почему-то он отлавливает не все ошибки. Ошибки валидации некоторые отлавливает, а некоторые нет (я использую FluentValidation). Например, если устроить переполнение переменной он выдаст свой "дефолтный" ексепшн (рис.1), а если надо проверить, чтобы значение было не ноль, то он выдаст то, что надо(рис.2). Код флюент валидации(рис.3) и код глобал-хуёбал ексепшен хендлера(рис.4). Объясните, пожалуйста, чему так.
Аноним 07/01/24 Вск 17:44:26 #967 №2992273 
изображение.png
>>2992268
Хуйню написал про переполнение. Переполнение - это "общий" ексепшн, который обрабатывает, по идее, на рис.1. Fluent Validation его никак не должна обрабатывать
Аноним 07/01/24 Вск 17:47:03 #968 №2992279 
17046384003840.png
А проблема вся в том, что я хочу изменить сообщение вывода вот этого (рис.1), но т.к это не попадает в глобальную обработку исключений, то я не знаю где это править
Аноним 07/01/24 Вск 18:03:20 #969 №2992303 
изображение.png
Щас залез в коменты к гайду, а там вот такое написали. Это так? Тогда как надо организовывать обработку исключений...
Аноним 07/01/24 Вск 20:24:53 #970 №2992572 
>>2992303
Это шизик.
Но по хорошему:

try{
...
}catch(SocketException sex){
Log(sex)
FreeSocketAndCompleteConnection(connection);
}
catch(DbUpdateException due){
Log(db);
RetryAfterDelay(1000);
}
Аноним 07/01/24 Вск 22:27:06 #971 №2992756 
17046384003840.png
>>2992572
То есть от более частного исключения к более общему, я правильно понял? Это хорошо, а вот как согнать все исключения в один обработчик я не понимаю. Вот например: я делаю запрос через postman и специально не задаю одному полю значения. Я ожидаю, что исключение попадёт в мой глобальный обработчик и я смогу там подкорректировать вывод ошибки, чтобы не было в какой строке ошибка произошла и т.д. Но получается так, что это исключения даже не доходит до глобального обработчика, оно ещё раньше где-то обрабатывается...Или я чего-то не понимаю
Аноним 08/01/24 Пнд 19:15:55 #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;

Но это не даст мне никакой информации о центре вращения.
Аноним 08/01/24 Пнд 20:04:41 #973 №2993737 
>>2993657
Никак не можешь
Аноним 08/01/24 Пнд 20:42:58 #974 №2993790 
2024-01-0820-21-52.png
>>2993737
Все оказалось банальным. Можно же применять трансформации к точке. Главное знать изначальные габариты трансформируемого объекта.
Аноним 08/01/24 Пнд 20:45:43 #975 №2993793 
>>2993790
Если в TransformGroup будет куча трансформаций, то уже никак не узнать.
Аноним 08/01/24 Пнд 21:01:26 #976 №2993809 
Как работает явное приведение?
Почему
byte b = 1 + 1;
работает, а
int a = 1;
byte b = a + 1;

нет?
Типа компилятор видит угрозу в математическом выражении, результат которого может не поместиться в byte?
Аноним 08/01/24 Пнд 21:15:40 #977 №2993823 
>>2993809
Ты присваиваешь не константу в виде единицы, а переменную, в которой может в теории содержаться число выше 255 или ниже 0, потому что эта переменная типа int.

Компилятор не смотрит на фактическое значение int, ведь в рамках работы программы оно может поменяться на что угодно. Как итог, ты можешь получишь StackOverflowException, и компилятор на это обращает твое внимание.

Если ты уверен, что в "a" никогда не будет нежелательных чисел, то ты приводишь явно к байту, либо изначально объявляешь переменную как байт. Если ты не уверен, то либо проверяй значение, либо сразу обрезай: byte.Clamp(a, 0, 255);
Аноним 08/01/24 Пнд 21:21:28 #978 №2993825 
>>2993823
>byte.Clamp(a, 0, 255);
byte b = (byte)int.Clamp(a + 1, 0, 255);
Аноним 08/01/24 Пнд 21:21:44 #979 №2993826 
>>2993823
>получишь StackOverflowException
Уверен?
Аноним 08/01/24 Пнд 21:30:02 #980 №2993832 
>>2993826
Казалось, что выдавал исключение. На деле просто возвращается к началу и прибавляет остаток
int a = 257;
byte b = (byte)a;

Выдаст результат b: 1
Аноним 08/01/24 Пнд 21:40:37 #981 №2993845 
>>2993832
Он просто урезает биты. И да, стековерфлоу это другое, про переполнение стека вызовов функций.
Аноним 08/01/24 Пнд 21:41:31 #982 №2993850 
>>2993809
Потому что засунуть byte в int это как если бы осел выебал дракониху. Странно, но никому не повредит.
А вот попытка запихнуть int в byte - это уже как дракону выебать ослицу. Компилятор это видит и предупреждает тебя, что что-то тут не так. Поэтому в твоем случае ты должен явно приводить переменную: byte(a) + 1, как бы говоря компилятору: "Да, да я полностью уверен, пусть бедную ослицу разорвет нахрен."
Как бы не относится к экстримцоде, но это объяснение у них годно получилось.
Аноним 08/01/24 Пнд 21:43:46 #983 №2993859 
>>2993850
>byte(a)
Не скомпилится.
Аноним 08/01/24 Пнд 21:46:45 #984 №2993867 
>>2993859
Да похуй, я просто пъяный. (byte)a + 1 естественно.
Но мысль ясна.
Аноним 08/01/24 Пнд 21:49:59 #985 №2993873 
>>2993867
>(byte)a + 1
Тоже не скомпилится, алкаш
Аноним 08/01/24 Пнд 23:24:38 #986 №2994040 
>>2993809
Чем тебя спека не устраивает? https://docs.oracle.com/javase/specs/jls/se21/html/jls-5.html#jls-5.5
Аноним 09/01/24 Втр 00:03:09 #987 №2994084 
>>2993867
> (byte)a + 1 естественно.
(byte)(a + 1)
sage[mailto:sage] Аноним 09/01/24 Втр 00:22:16 #988 №2994114 
(byte)((byte)(a))((byte)(+))((byte)(1))
Аноним 09/01/24 Втр 00:23:39 #989 №2994118 
>>2994040
Пошëл нахуй.
Аноним 09/01/24 Втр 02:16:36 #990 №2994247 
>>2994114
Учиться тебе еще и учиться
(byte) 0x01
Аноним 09/01/24 Втр 20:00:29 #991 №2995114 
Решеточники, такой вопрос. Есть условный класс A и B. В классе A создается множество экземпляров класса B. Они помещаются в List. После этого каждого экземпляра класса B вызывается Task X, этот Task у каждого экземпляра выполняется с разной скоростью. После того, как последний экземпляр класса В завершит выполнение Таска X, нужно вызвать функцию Y в классе A. Есть какое-то изящное решение этой задачи?

Были мысли насчет какого-то флага в классе B, который становится true после выполнения функции, а потом вызов TrueForAll с предикатом. Может есть что-то получше?
Аноним 10/01/24 Срд 00:13:52 #992 №2995478 
>>2995114
А Task.WhenAll чем тебя не устраивает?
Аноним 10/01/24 Срд 02:13:46 #993 №2995537 
Это пиздец, сколько синтаксического сахара в шарпе. Реально вообще это все запомнить?
Аноним 10/01/24 Срд 03:14:42 #994 №2995553 
>>2995537
Тебе нет
Аноним 10/01/24 Срд 03:41:23 #995 №2995577 
>>2995553
Почему?
Аноним 10/01/24 Срд 07:04:44 #996 №2995627 
>>2995537
Чего бы и нет. Просто берешь и используешь.
В какой-то момент ты сам себе начнешь его создавать в виде всяких экстеншенов, перегрузок и т.д.
Аноним 10/01/24 Срд 10:00:39 #997 №2995695 
>>2995478
Устраивает, но хотелось именно через события. В задании есть требование, чтобы я где-то события впихнул.
Аноним 10/01/24 Срд 15:54:58 #998 №2996069 
>>2995577
потому что это ты
Аноним 10/01/24 Срд 17:25:11 #999 №2996213 
>>2996069
Но я охуенный.
Аноним 10/01/24 Срд 17:28:38 #1000 №2996221 
>>2996213
Ты пидор.
Аноним 10/01/24 Срд 17:30:40 #1001 №2996227 
>>2996221
Я охуенный пидор.
Аноним 10/01/24 Срд 17:47:59 #1002 №2996255 
>>2996227
Но головушка слабовата

Впрочем, если оформишь перекат - проклятие спадет
Аноним 10/01/24 Срд 18:01:53 #1003 №2996274 
>>2995695
ну впихни после Task.WhenAll событие ЧтоТоТамКомплетед.
Аноним 10/01/24 Срд 23:34:15 #1004 №2996913 
изображение.png
изображение.png
Всем ку. Кто-нибудь шарит за AutoMapper? Пытаюсь смапить модель из домена с ViewModel, но нихуя не получается. Во ViewModel отсутствуют два поля: UserId и Responses. Если вручную переделать доменную модель во ViewModel, то всё работает, но по идее AutoMapper сам должен с этой хуйнёй справится. Пробовал Ignore(), но не сработало.
Аноним 11/01/24 Чтв 00:31:58 #1005 №2996938 
>>2996913
Автомаппер - наебка для гоев. Из коробки он только с простейшими круд-моделями работает. А в большинстве случаев там явно все правила прописывать нужно и по хорошему еще и тестами посильно этот мапинг покрывать.
Аноним 11/01/24 Чтв 16:27:33 #1006 №2997709 
В пизду этот автомаппер. Нихуя так и не заработал. Удалил его нахуй и поставиил мапстер. Все заработало. Плюс вычитал в инете, что он почти во всём лучше, чем автомаппер
Аноним 11/01/24 Чтв 17:38:15 #1007 №2997823 
>>2997709
> Удалил его нахуй и поставиил мапстер.
Ну ты и додстер)
Аноним 11/01/24 Чтв 18:17:21 #1008 №2997913 
Аноны, есть что-то вроде ссылки на свойство? Я знаю что звучит тупо, но меня интересует средство, которое сможет побороть проблему.

Предположим у меня есть список разношерстных элементов, у которых нужно отредактировать свойство цвета, но имена этих свойств не являются едиными. К примеру:
- Path.Fill
- Button.Background
или
- Path.Stroke
- Button.BorderBrush

У элементов нет общего предка:
Shape -> Path
Control -> ... -> Button
Panel -> Grid

Я не могу использовать рефлексию, обращаясь грубо говоря по имени, да и затратно это.
Предположим, что я создам какой-то метод, который пройдется по списку элементов и извлечет из нужного свойства кисть, а потом составит новый список IList<Brush>.
Но на этапе редактирования может случиться например то, что какие-то кисти имеют статус Frozen == true, и такие кисти редактировать нельзя, их нужно клонировать в новый экземпляр. Но что я смогу сделать с этим экземпляром? Заменив итем IList<Brush> новым экземпляром, я не отредактирую свойство элемента, который содержит экземпляр старой кисти.

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

Или может есть хитрые биндинги по шаблону?
Аноним 11/01/24 Чтв 18:53:10 #1009 №2997972 
изображение.png
>>2997823
Да я
Аноним 11/01/24 Чтв 19:54:24 #1010 №2998085 
>>2997913
Ъ-путь это не изобретать велосипедов, а реализовать интерфейс с методом SetColor.
Если это не совсем твои классы, ты можешь нахерачить им extention methods, то есть добавить каждому SetColor как расширение.
А то, что ты хочешь - это чистое и незамутнённое зло, не надо этого хотеть.
Это по первой части.
По второй - я вообще не понял, чего ты хочешь и как она связана с первой. Ты хочешь изменить цвет кисти, если она заблокирована? Зачем? В чём смысл этого действия?
Аноним 11/01/24 Чтв 20:42:25 #1011 №2998152 
>>2998085
Давай поясню. Я хочу сделать редактор кистей, подобный тому, что есть в окне свойств вижуал студии. Универсальный. Но у майкрософт целый зоопарк элементов, опять же:
Shape -> Path
Control -> ... -> Button
Panel -> Grid

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

Сейчас я склоняюсь к ObservableCollection<Brush> с подпиской на изменение итемов. Просто я этот вариант оставил как запасной.

>реализовать интерфейс с методом SetColor
Во-первых, классы не мои, а некоторые запечатаны.
Во-вторых, какое именно свойство будет менять SetColor? Потому что часто есть несколько свойств, которые в какой-то момент нужно задействовать, а какой именно — зависит от внешних факторов о которых редактор кистей знать не обязан. Менять ли фон или контур, редактору цвета должно быть наплевать.

>SetColor как расширение
Та же проблема. Расширение не должно решать что делать.

>А то, что ты хочешь - это чистое и незамутнённое зло, не надо этого хотеть.
Таковы обстоятельства. Есть условный канвас, в котором могут находиться как производные от Panel, так производные от Shape, так и от Control. Я не виноват, что майкрософт родили такой зоопарк. Они может тоже не виноваты, но раз никто не виноват, то должно быть популярное решение данной проблемы.

>Ты хочешь изменить цвет кисти, если она заблокирована? Зачем?
Согласен, спорно. Но если тебя смущает такой пример, вот еще один: в свойстве может быть SolidColorBrush, а пользователь в окне редактора кистей выберет RadialGradientBrush. Это так же потребует создания нового экземпляра.
Аноним 11/01/24 Чтв 21:53:35 #1012 №2998372 
>>2998152
Как же хорошо, что я не занимаюсь десктопом или фронтом и мне не приходится решать проблемы вроде "как надевать штаны через голову"
Аноним 11/01/24 Чтв 22:36:54 #1013 №2998448 
>>2998152
> какое именно свойство будет менять SetColor?
Вот у каждого элемента будет свой сетколор, и он будет знать, что делать. И ты всегда будешь знать, что ты делаешь - ты устанавливаешь цвет. Твой код не вызывает Ктулху, не превращает тебя в гибрид Синдзи и Харухи, а устанавливает цвет у элементов.
Ты пишешь каждому классу extension method, который знает, что делать в конкретном классе. Если там нет чёрной магии, и всё что надо сделать, доступно публично. Запечатан он, не запечатан - тебя не волнует.

А про новые экземпляры я всё равно не понял. Ты пытаешься сделать что-то, чего сделать нельзя? А зачем ты пытаешься это сделать, если этого нельзя?
Аноним 11/01/24 Чтв 22:42:37 #1014 №2998455 
>>2998152
Алсо, я в графике ничего не понимаю, не мог бы ты объяснить свою задачу простыми словами? Ну там панели, кнопки, это понятно. Это такие визуальные элементы на форме, я когда-то очень давно писал на дельфях Button1Click(), я что-то помню. Так. А зачем их одновременно красить? А кисти тут при чём? Кисть, как я помню, это способ нанесения рисунка на канву. Какое отношение они имеют к элементам формы?

Потому что сегодня ты захотел поменять цвет у десятка несвязанных друг с другом элементов (и что такое "поменять цвет" у них ты придумал сам). А завтра ты захочешь поменять у них запах, текстуру, вкус, гендер - и на каждый чих тебе придётся писать набор расширений. Ты делаешь что-то странное, кмк.
Аноним 12/01/24 Птн 00:49:53 #1015 №2998609 
>>2998448
>Вот у каждого элемента будет свой сетколор, и он будет знать, что делать.
Это как? В одном случае пользователь хочет поменять цвет фона — это одно свойство, а в другом случае он меняет цвет контура — это другое свойство. Вот запустил я метод SetColor и че? Куда он полезет? В первое или второе?
Экстеншен не поможет, либо у него будет слишком много полномочий, либо дальнейшая поддержка подобной системы будет деструктивной, потому что вариаций откуда брать данные — масса.

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

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

Вот тебе кнопочка со сплошным однородным цветом
MyButton.Background = new SolidColorBrush();

А вот кнопочка с градиентом
MyButton.Background = new LinearGradientBrush();

Вот так и создается новый экземпляр, совершенно легально.
А если ты по поводу freezable-классов, так frozen state активируется в случаях, когда кисть инициализируется в xaml, и такой подход нужен, чтобы биндиться прямо из ресурсов (к примеру). В моем случае это не нужно, поэтому мне нужна возможность перезаписать кисть. Вот и всё.
Аноним 12/01/24 Птн 01:28:40 #1016 №2998629 
2024-01-1200-59-49.png
2024-01-1201-23-50.png
>>2998455
>Это такие визуальные элементы на форме
Аааа, ясно. Это WPF, не знаю насколько он похож на подход в делфи. Но от винформсов отличается достаточно сильно.

>А кисти тут при чём? Кисть, как я помню, это способ нанесения рисунка на канву.
Алгоритм отрисовки. Одна кисть заливает сплошным однородным цветом, другая рисует линейный градиент, третья рисует радиальный градиент, четвертая рисует битмап. Пикрил - вариации.

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

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

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

Я как раз занимаюсь универсальной системой скинов и тем для своих приложений. Она есть дефолтная, но это говнище куцее.
Аноним 12/01/24 Птн 02:10:07 #1017 №2998654 
bandicam 2024-01-12 01-46-07-040.mp4
bandicam 2024-01-12 02-04-40-233.mp4
>>2998455
>Кисть, как я помню, это способ нанесения рисунка на канву. Какое отношение они имеют к элементам формы?
В WPF суть контрола в том, что это конструктор.

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

Вот к примеру на видеорил мой собственный контрол, который редактирует свойства радиальной кисти, а на втором показан контрол для изменения линейного градиента. Это такие же UI-элементы как кнопка или комбобокс. В дальнейшем им можно изменить стили, и например сделать стиль аля windows 11 или mac, чтобы ползунки были другой формы или цвета. При этом внутрь контрла лезть уже не надо.
Аноним 12/01/24 Птн 02:11:50 #1018 №2998655 
>>2998654
Алсо, на видосах эффект двойного курсора — это проблемы с записью. Видимо фэпасов мало поставил.
Аноним 12/01/24 Птн 03:15:28 #1019 №2998672 
image.png
Что этой хуите нужно?

как тут может быть разыменование если есть проверка на null?
Аноним 12/01/24 Птн 04:57:45 #1020 №2998686 
>>2998672
мамой поклянись что ToString() не вернет null
Аноним 12/01/24 Птн 05:36:56 #1021 №2998693 
.png
>>2997913
Что мешает как-то так сделать?
Аноним 12/01/24 Птн 11:10:26 #1022 №2998854 
>>2998693
Интересная идея. Тоже была мысль через экшоны попытаться сделать.
Аноним 12/01/24 Птн 17:26:15 #1023 №2999410 
>>2998654
Анон, это ты что такое пилишь? Для себя или работа? Выглядит интересно.
Аноним 12/01/24 Птн 17:37:21 #1024 №2999427 
>>2998654
> 1 вебм
Сам придумал или подсмотрел где идею? Выглядит здорово, я бы до такого не додумался.
Аноним 12/01/24 Птн 20:57:00 #1025 №2999709 
>>2999427
Просто представил, что это обычная фигура в графическом редакторе, к тому же система трансформаций такая же. Я в свое время задрался настраивать градиенты что в иллюстраторе, что в кореле.
Аноним 13/01/24 Суб 00:44:16 #1026 №2999969 
Шарпаны, я ньюфаг и хочу начать писать сетевой код на шарпе. Для начала простенький чат ну и так далее.
Только я начал гуглить и выдает какието уебищные видосы на ютубе с нерабочим кодом и какието странные книги за 2014й год.
Наверное я чтото не то ищу.
Подскажите что курить и куда двигаться? хочу научиться писать сетевые предложения.
Аноним 13/01/24 Суб 06:14:59 #1027 №3000112 
>>2999969
Для чата в реальном времени используй SignalR
https://metanit.com/sharp/signalr/1.1.php
Аноним 13/01/24 Суб 06:21:57 #1028 №3000113 
А так же вопрос по SignalR
Как мне в нём в Хабе перехватить параметр http://example.com/?userId=123
А именно в телеге хочу сделать небольшое web apps с передачей параметра в виде User ID и так определять какой ТГ юзер зашёл в приложение. Да не безопасно, но это потом, я так демку делаю.
ГПТ сказал типо так
var userId = Context.GetHttpContext().Request.Query["userId"];
Но там пусто.
Как сделать так как мне надо?
Аноним 13/01/24 Суб 06:33:08 #1029 №3000115 
>>3000113
Даже получить 1 раз это значение пока в хабе открыто соединение
Аноним 13/01/24 Суб 06:33:43 #1030 №3000116 
Обещали перекат. Где?
Аноним 13/01/24 Суб 12:02:31 #1031 №3000306 
>>2999969
>хочу начать писать сетевой код на шарп
Цель?

>чат ну и так далее
Blazor - лучший выбор. Ну или Bolero (Blazor под капотом), если хочешь писать на F#.
Аноним 13/01/24 Суб 13:17:32 #1032 №3000385 
>>3000116
Делай. Тебя ждали.
Аноним 13/01/24 Суб 14:55:42 #1033 №3000456 
.png
>>2999969
Начни с чего-то такого,
Гуглится - ТЭЦЭПЭ СЕРВЕР СИ ШАРП
Аноним 13/01/24 Суб 15:40:49 #1034 №3000513 
>>3000456
>>3000306
>>3000112
Благодарю.
Аноним 13/01/24 Суб 19:46:40 #1035 №3001004 
изображение.png
изображение.png
Всем привет. Кто-нибудь в курсе как настроить путь в csproj, чтобы папка создавалась не в корне, а,например, в папке Common. На скрине отметил, где создаётся папка Mappers, создаётся она командами из <Target Name="Mapster">.
Аноним 13/01/24 Суб 21:07:43 #1036 №3001157 
>>3001004
Не совсем понимаю, что тебе нужно. Но скорее всего и не пойму, т.к. если какая-то библиотека требует какого-то хитрого пердолинга в csproj, то очень вряд ли стоит ей пользоваться.
Аноним 13/01/24 Суб 21:28:31 #1037 №3001187 
>>3001157
Это mapster для маппинга моделей. А нужно изменить место создания папки Mappers. Я предполагаю, что создаётся она командами, что заключены в <Target Name="Mapster">. А вот что там менять надо - я не очень понимаю.
Аноним 13/01/24 Суб 23:26:00 #1038 №3001355 
image.png
>>3001187
https://github.com/MapsterMapper/Mapster/wiki/Mapster.Tool/_edit#dynamic-outputs--namespaces
Аноним 14/01/24 Вск 00:56:51 #1039 №3001596 
MAUI норм тема чтоб для андроида на сисярпе писать? Не хочу учить ебучий котлин и реакт тоже блевотный нахуй.
Аноним 14/01/24 Вск 02:24:52 #1040 №3001731 
>>3001596
>норм тема
Там XAML, если от него не тошнит, то норм.
Аноним OP 14/01/24 Вск 16:43:07 #1041 №3002295 
ВЫШЕЛ ИЗ ЗАПОЯ, ПЕРЕКАТ

>>3002293 (OP)
Аноним 12/02/24 Пнд 14:31:39 #1042 №3045140 
Посоветуйте книжек или уроков С# через разработку игорей
comments powered by Disqus

Отзывы и предложения