Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 897 130 172
C# 8 дотнета тред #55 /csharp/ Аноним 24/03/24 Вск 12:21:56 3097760 1
Untitled.png 350Кб, 750x422
750x422
1.png 78Кб, 250x250
250x250
1b029ed5a09db2c[...].jpg 646Кб, 844x1200
844x1200
Тред лучшего языка на планете.

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

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

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

4. С# для игр
https://ru.stackoverflow.com/a/609901/422180

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

6. Годные ютуб-каналы
https://www.youtube.com/c/CODEBLOG
https://www.youtube.com/c/AndreyShyrokoriadov
https://www.youtube.com/c/DevJungles
https://www.youtube.com/user/Shmachilin

Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: >>3002293 (OP)
Аноним 24/03/24 Вск 12:42:32 3097774 2
17112255797110.png 37Кб, 1000x1000
1000x1000
Теперь это тоже Blazor тред.
Аноним 24/03/24 Вск 15:18:41 3097859 3
>>3097774
Кто такой, чем известен?
Аноним 24/03/24 Вск 15:29:16 3097884 4
>>3097760 (OP)
Ох, ебать. Дождались таки нормального переката, слава Биллу.
Аноним 24/03/24 Вск 16:45:01 3098049 5
9011267.jpg 48Кб, 460x460
460x460
Положняк по пикрилу?
Аноним 24/03/24 Вск 16:56:39 3098088 6
>>3097884
На самом деле - я помню времена, когда первым постом была еще доп лит-ра. Но я не могу списочек найти. Воооот. Так что да.
ПОЛОЖНЯК ПО UI Аноним 24/03/24 Вск 17:37:04 3098140 7
1711291018617.png 3236Кб, 2256x1358
2256x1358
1711291018641.png 89Кб, 902x727
902x727
Авалония - говно мокрописечное, зумерское, с прибитыми гвоздями темами.
Eto.Forms - годный нативный гуй-фреймворк для взрослых сеньоров.
Аноним 24/03/24 Вск 17:44:43 3098146 8
>>3098140
Хороши твои ето формс но порой хочется просто поредачить ксамлы. Не надо свое фанбойство несколько перекатов продвигать
Аноним 24/03/24 Вск 18:15:26 3098187 9
Кто-нибудь реально нашел применения для MinimalAPI?

Просто я вот как не пытался. В результате - я вместо Startup - делаю класс ConfigApp.cs в котором делаю литерли то же самое, что было в Startup. Плюс, если отхожу от контроллеров - просто делаю классы, которые называю хендлерами-сервисами, и они те же контрллеры, просто без ASP'шной фигни, а в остальном - так же - в минимал апи стиле описал роутинг, а работа в этих хендлерах-сервисах.
В общем. Я не понимаю, чи я тупой и не знаю как готовить, чи годится это только для совсем узкого круга задач. Поясните, кто реально в проде использует, как вы их готовите?
Аноним 24/03/24 Вск 18:22:11 3098193 10
>>3098187
Я думаю это чисто для микросервисов фича. Типо описать всю приложуху в одном Program.cs файле в меньше чем 500-600 строчек. Удобно жеж
Аноним 24/03/24 Вск 18:32:23 3098205 11
Шарпаны, есть кто в вскоде сидит?
Что хочу: сделать новый конфиг dotnet new для вскода, в котором будет лежать сопутствующий launch.json при создании.
Читал https://learn.microsoft.com/en-us/dotnet/core/tools/custom-templates
Но чёт не понял что там именно в template.json надо написать чтобы в итоге получался файл с кастомной инфой.


1. Как после dotnet build получить путь собранного бинарника? Verbosity выставить и парсить ответочку чтобы путь оттуда выковырнуть, а-ля dotnet build --verbosity n и оттуда брать CopyFilesToOutputDirectory? Есть что-то лаконичнее (кроме явного указания самому билдеру куды пихать output)?

2. Можно ли потом в вскодовской launch.json конфигурации как-то автоматически вписывать путь к бинарнику сразу в "program":?
Аноним 24/03/24 Вск 18:34:57 3098212 12
>>3098193
Ну, это какие-то совсем микро-микро-сервисы.
Обычно у тебя все же там надо к БД подключаться, надо какие-то обработчики сообщений из очереди и это в рамках одного микросервиса, плюс всякие модельки и прочее. Да даже взгляни на то что майки как пример микросервисной архитектуры(eshop) показывают, если все делать это в одном файле - будет лютая каша.
Аноним 24/03/24 Вск 18:54:41 3098237 13
>>3098187
>Поясните, кто реально в проде использует, как вы их готовите?
В проде нет. Только для тестовых стендах для каких-то совсем микрописечных моков или прототипов. И то, если это используется более чем одного раза, то проще свой нормальный шаблон взять и там сделать норамльно.
Аноним 24/03/24 Вск 18:58:04 3098242 14
Где в editorconfig убрать перенос на новую строку в конце файла?
Аноним 24/03/24 Вск 18:59:16 3098243 15
>>3098193
>Я думаю это чисто для микросервисов фича.
Суть микросервисов, совсем не в том, что они маленькие.
Аноним 24/03/24 Вск 19:03:53 3098249 16
>>3098146
> порой хочется просто поредачить ксамлы
В формсах есть хамл.
> Не надо свое фанбойство несколько перекатов продвигать
Это не моё фанбойство. Это - баланс. Как только прибегает авалония-фанбой и заявляет, что авалония - единственный UI-фреймворк, мне приходится восставать из мёртвых и показывать мимокрокам, что есть альтернативы.
Аноним 24/03/24 Вск 19:42:58 3098292 17
>>3098243
Это точно, их смысл в том, что они оверблоу.
Аноним 24/03/24 Вск 20:47:36 3098362 18
>>3098242
Не надо его убирать.
Аноним 24/03/24 Вск 20:51:29 3098375 19
>>3098292
Не придуривайся.
Суть микросервисов, в том что они являются минимальной денницей деплоя, и в случае, если какой-то из них сломается, упадет и прочее - вся остальная система продолжает работать и большая часть пользователей даже не заметит, если какой-то сервис лег. В идеале, они еще горизонтально масштабироваться могут, но так не всегда выходит из-за бизнес-требований и требований к надежности.
А размер - у них может быть и вполне жирненький. Средний микросервис - это где-то 3-4к строк кода, если мы что-то реально полезное делаем.
Аноним 24/03/24 Вск 21:17:29 3098417 20
>>3098249
>В формсах есть хамл.
ну а чем бы ему не быть. это ж просто описание кода в виде хмл

другой вопрос - а чего можно добиться этим описанием? а ровно столько же сколько и кодом.
А чего можно добиться кодом? являются ли контролы ето.формса lookless по природе как оно в WPF?
в авалонии да, а в формсах? а в формсах я должен все вручную.
Аноним 24/03/24 Вск 21:22:08 3098426 21
>>3098362
Почему? Он меня нервирует.
Аноним 24/03/24 Вск 21:22:49 3098429 22
>>3098417
В 90% случаев на шарпе пишется стандартный КРУД со стандартными гридами, и вся мощь луклеса нахуй не нужна. Нормальным, адекватным людям нахуй не нужны в быту круглые кнопки со встроенным калёндарём.
Аноним 24/03/24 Вск 21:49:19 3098455 23
>>3098429
>Нормальным, адекватным людям нахуй не нужны в быту круглые кнопки со встроенным калёндарём.
Ой как же ты не прав. В текущей конторе - тоже так думали долго, пока конкуренты не сделали красивенько и более удобно, в результате - отжали дохуя клиентов, а эта контора потеряла просто дохуя денег.
Аноним 24/03/24 Вск 21:54:20 3098461 24
>>3098455
А, ну... Тогда знаешь... Походу действительно, наверное... Ты прав...
Аноним 24/03/24 Вск 22:00:25 3098471 25
>>3098461
Ну, рил. Миллионы долларов убытков, потому что сделали в 2001м приложуху, и просто добавляли в нее вичи по клиентам, когда приходили и говорили бизнесу, что ну, типа, надо ОСВЕЖИТЬ, люди говорят что уже в монстра превратилось и сложно даже простые вещи делать, а интерфейс времен XP вызывает отторжение у новых пользователей, че бизнес говорил: Да-да, это все конечно важно, но куда они денутся.
И появляется конкурент, который сделал то же самое, но красиво и выпилив тот функционал, который залетал и нужен был одному клиенту из 1000, и все - теперь конкурент получает эти миллионы денег, а бизнес кричит, что вы долбоебы, все просрали, вообще, надо было вчера сделать красиво и удобно, а вы такие растакие ебаньтяи.
Аноним 24/03/24 Вск 22:02:43 3098477 26
Аноним 24/03/24 Вск 22:09:48 3098485 27
>>3098477
Меня уволят, если я про нее напишу, няша. Но с вероятностью 95% у тебя в доме их прибор имеется.
Аноним 24/03/24 Вск 22:39:28 3098509 28
>>3098471
> бизнес говорил: Да-да, это все конечно важно, но куда они денутся.
> риходили и говорили бизнесу, что ну, типа, надо ОСВЕЖИТЬ
> бизнес говорил: Да-да, это все конечно важно, но куда они денутся.
> теперь конкурент получает эти миллионы денег, а бизнес кричит, что вы долбоебы, все просрали
Охуительно кабан нашёл виноватых.
Вот именно поэтому я - индюк.
Аноним 24/03/24 Вск 23:02:19 3098533 29
>>3098485
Какиони узнают что это ты написал?
Аноним 25/03/24 Пнд 00:05:13 3098565 30
>>3098187
Когда надо сделать простенький Api с минимумом логики. Например вернуть простую строку.
Аноним 25/03/24 Пнд 09:30:43 3098865 31
>>3098509
>Вот именно поэтому я - индюк.
Ну т.е. ты и кабан и исполнитель в одном лице. Т.е. в любом случае за свой проеб "кабан" будет винить "исполнителя"
Аноним 25/03/24 Пнд 12:15:02 3099010 32
>>3097760 (OP)
Пасаны. Thread или Task ? И почему?

Бонусный раунд: когда вы вообще последний раз использовали Thread ? (Подразумевается не копание в каком-то легаси, а написание чего-то нового.)
Аноним 25/03/24 Пнд 12:31:03 3099049 33
>>3099010
Thread когда точно знаешь что тебе нужен Thread, Task когда ты задаёшься вопросом что выбрать Thread или Task.
Аноним 25/03/24 Пнд 13:03:28 3099081 34
1711361008325.png 268Кб, 1250x1199
1250x1199
Кто-нибудь знает рабочие способы нормально спиратить лицензию на ReSharper/Rider, без нужды жонглировать ключами всяких университетов, которые банят каждые два-три дня? JetBrains слишком серьёзно за это дело взялись в последнее время.
Аноним 26/03/24 Втр 12:35:02 3100146 35
>>3099081
Нахуя тебе райдер? Что конкретно в нём ты используешь в своей работе постоянно такое, что тебе не хватает бесплатной студии / бесплатного коде?
Аноним 26/03/24 Втр 12:52:00 3100176 36
>>3100146
Он мне нахуй не нужен, мне нужен ReSharper, но это всё один пакет dotUltimate. Без решарпера студией пользоваться просто менее удобно, в нём куча всяких удобных гибких штук для кастомизации правил выравниваний, переносов, отступов и т.д. на каждый тип структур кода. Ну и человеческий Solution Wide Analysis, конечно же, без него в целом жить больно очень, как и без решарповского запускатора юнит-тестов.
В общем, это буквально база для работы над любым крупным проектом.
Аноним 26/03/24 Втр 12:56:35 3100181 37
>>3100176
> база для работы над любым крупным проектом
Ну раз у тебя крупный проект, то пусть руководство и закупает.
Аноним 26/03/24 Втр 12:57:32 3100184 38
>>3100176
> куча всяких удобных гибких штук для кастомизации
НЕНУЖОН
> Solution Wide Analysis
НАХУЙ
> запускатора юнит-тестов
ПЕРЕБЬЁШЬСЯ
Аноним 26/03/24 Втр 12:58:41 3100189 39
>>3100181
Закупает где? Вот он и спрашивает про покупку
Аноним 26/03/24 Втр 13:12:43 3100208 40
20240109040934.png 156Кб, 294x430
294x430
>>3100181
Где купить-то, ебалай? Напомнить, где живём? Нахуя ты вообще написал мне всё это, как это относится к изначальному вопросу? Ты долбаёб? Отвечай!

>>3100184
А всё, а я уже разобрался, я просто на бесплатную лицензию EAP перешёл, которую постоянно сбрасывать можно и по новой активировать.
Аноним 26/03/24 Втр 14:30:39 3100360 41
perfomance2.png 32Кб, 836x151
836x151
perfomance.png 13Кб, 406x294
406x294
Платиновый вопрос по асп - где перфоманс?
Проект на 7 дотнете, простой get который возвращает json в котором по сути самое жирное это картинки в base64 строках.
Сначала была ебическая просадка когда я доставал из базы EF'ом async'ами, в стековерфлоу сказали что это кривизна особенность реализации EF'а и потому нужно просто забить хуй и лучше доставать данные синхронно.
Сейчас в данном примере находится 4 картинки общим весом под 7МБ.
Само доставание из базы через EF и формирование json'а отрабатывает около секунды (область в stopwatch'е) (что вообщем-то тоже мне кажется дохуя, хотя я могу быть не прав). Это не первый запрос, потому все инициализировано, база ms-sql в локалхосте.
Вопрос следующий - почему у меня в локалхосте идет загрузка 7МБ - 10-13 секунд? То есть в дебагере сам метод в контролере какбэ отработал и дальше 10-13 секунд идет передача данных.
Что я делаю не так и как с этим совладать?
Или обязательно нужно делать отдельное апи которое будет возвращать Content-Type: Image? Но с загрузкой все равно какая-то нездоровая ебала.
Аноним 26/03/24 Втр 14:33:53 3100371 42
>>3100360
Можешь скинуть пример запроса к БД?
Аноним 26/03/24 Втр 15:08:05 3100446 43
image.png 92Кб, 996x216
996x216
image.png 41Кб, 460x200
460x200
>>3100371
Вообще меня сейчас волнует именно загрузка, а не запрос к бд.
Аноним 26/03/24 Втр 15:26:58 3100461 44
>>3100208
> я просто на бесплатную лицензию EAP перешёл, которую постоянно сбрасывать можно и по новой активировать
Что и требовалось доказать. Жетбренсовский пиарщик бегает по российским форумам (и бордам) и прогревает гоев, что можно пока что бесплатно пользоваться.
> Главное, не забывайте нас
Как бы говорит нам жетбрейнсовский пиврщик.

Нахуй иди, нам и на вскоде норм.
Аноним 26/03/24 Втр 15:38:32 3100467 45
>>3100461
> и на вскоде норм
Как сказать, что ты никогда в жизни не писал код на шарпе за деньги, не говоря о том, что ты никогда в жизни не писал код на шарпе за деньги.
Аноним 26/03/24 Втр 16:38:29 3100531 46
>>3100360
Просто не пользуйся говном под названием EF. Эта хуйня как интернет эксплорер: никому нахуй не нужен, но майкрософт продолжает его везде проталкивать. Пиши sql руками, смотри план запроса, для маппинга используй dapper, а не это индусское говнецо.
Аноним 26/03/24 Втр 16:45:09 3100539 47
>>3100467
У тебя одни деньги на уме. Капитализм совсем тебе моск съел. В жизни столько прекрасного, а ты думаешь о том как бы заработать еще больше денег. Выгляни в окно, посмотри какая погода, почки набухают, пчёлки жужжат.

Деньги, блять.
Аноним 26/03/24 Втр 16:46:47 3100545 48
>>3100531
> Пиши sql руками
Надо же, как маятник истории покачнулся. 20 лет назад писали запросы руками, 10 лет назад конструировали конструкторами, а щас опять руками.
Аноним 26/03/24 Втр 16:46:55 3100546 49
>>3100446
Ты же в курсе, как работает Skip и Take? Оно вытягивает на клиента все записи, а потом часть выбрасывает. Если у тебя 1000 строк и надо показать последние 20, из базы уедут все 1000. Пейджинг в бд делается через row_number over partition.
Аноним 26/03/24 Втр 16:51:23 3100548 50
>>3100545
Запросы всегда писали и оптимизировали руками, это база. Не изобрели еще фреймворк, который умеет в запросы. Хибернейт в джаве появился еще до твоего рождения, но очему-то опытные разработчики по-прежнему пишут sql руками, угадай, почему.
Аноним 26/03/24 Втр 16:53:13 3100551 51
>>3100531
Блять, еще один.
Повторяю еще раз -
>>3100546
Во первых у меня буквально пока что буквально одна строка.
Во вторых (поправь меня если я несу хуйню) там IQueryable, и в конце идет ToList и запрос делается уже именно на нем насколько мне известно.

Повторяю еще раз, моя основная проблема сейчас это очень длинная загрузка небольшого json'а с апи (Content-Type: application/json; charset=utf-8), а не EF.
Посмотрите этот ебанутый 2 пик еще раз >>3100360.
Аноним 26/03/24 Втр 16:55:02 3100552 52
Алсо, клиент на блейзоре получает приблизительно с такой же ебанутой задержкой (я там тоже мерял стопвотчами), так что это тоже не проблема самого Postman'а из которого взят скрин.
Аноним 26/03/24 Втр 16:56:50 3100556 53
>>3100551
Так у тебя тормозит вытягивание из бд или сериализация?
Аноним 26/03/24 Втр 16:57:01 3100557 54
Сам проект запускается в дебаге http (Kestrel?)
Аноним 26/03/24 Втр 16:58:08 3100560 55
>>3100556
Ни то и ни другое, у меня тормозит сам return с апи.
Сама сущность уже готовая (list<T>).
Аноним 26/03/24 Втр 17:01:04 3100564 56
>>3100560
То есть, тормозит даже если ты просто возвращаешь фейковые данные, без запроса в бд?
Аноним 26/03/24 Втр 17:03:00 3100568 57
>>3100564
Тормозит на моменте загрузки 7MB json'а.
Решает именно объем возвращаемых данных.
Аноним 26/03/24 Втр 17:04:10 3100570 58
>>3100568
Зачем ты передаешь картинку в джейсоне? Чтобы что?
Аноним 26/03/24 Втр 17:09:59 3100574 59
>>3100570
Потому что удобно все сложить в единую логическую кучу, у меня связь в бд 1 к 1 + не нужно писать отдельное апи для пикч.
Аноним 26/03/24 Втр 17:12:27 3100580 60
>>3100574
Тебе знакомо понятие "статический контент"? Про CDN слышал?
Аноним 26/03/24 Втр 17:13:44 3100584 61
+ У меня пикча это объект с метаданными вроде ContentType и FileName. Как мне передать это одним запросом который будет Image? Только не надо про двойные файлы и т.д.
Аноним 26/03/24 Втр 17:15:44 3100588 62
>>3100360
Для начала - почему ты думаешь, что проблема на стороне твоего кода?
Аноним 26/03/24 Втр 17:18:51 3100592 63
>>3100588
Он сериализует картинки в базе64 и передает их в джейсоне. Где же тут проблема?
Аноним 26/03/24 Втр 17:20:09 3100593 64
>>3100588
Я и не думаю что проблема на стороне моего кода, возможно я просто делаю это не таким образом как принято это делать.
Я понимаю что проблема на стороне асп, как и в случае с асинками в EF, вопрос - что мне делать и как это фиксить?
Аноним 26/03/24 Втр 17:22:15 3100596 65
>>3100592
Да, и?
Что ты будешь делать если тебе нужно будет получить с апи другой контент или просто много текста? Будешь ждать 15 секунд для получения 7МБ?
Аноним 26/03/24 Втр 17:24:51 3100597 66
>>3100593
Локализуй проблему.
Аноним 26/03/24 Втр 17:25:54 3100598 67
>>3100176
Двачую этого. Решарпер умеет в адекватное форматирование кода, а именно: форматирование блоков инициализации массивов/списков.
Если бы студия умела, то решарпер был бы не нужен. А так... имеем, что имеем.
Аноним 26/03/24 Втр 19:31:15 3100770 68
>>3100598
>в адекватное форматирование кода, а именно: форматирование блоков инициализации массивов/списков.
Покажи пример.
Аноним 26/03/24 Втр 21:15:18 3100981 69
Аноним 26/03/24 Втр 21:26:14 3100999 70
WEBAPI. Как вы делегируете модельку (вью модель/дто/реквест) из контроллера в сервис, когда у вас один параметр, например Id приходит из роута, а остальные свойства (модель) из тела?
1. Сервис принимает два аргумнента: Id и дто
2. Сервис принимает один аккумулированный объект (переложить в другую модельку)
3. Сервис принимает один объект, содержащий Id, который присвоим в контроллере

https://pastebin.com/MJyTNeaM
Аноним 26/03/24 Втр 21:33:08 3101008 71
>>3100999
Честно? От настроения)

Сейчас стараюсь делать вот так:
Сервис - принимает в себя Request<T1> и отдает Result<T2>
Result - это тип, который содержит либо ответ, либо ошибку с описанием ошибки.
Проблема такого подхода, что пришлось вводить Success если что-то в сервисе не возвращает какого-то объекат.
Обычно T1 - это та же DTO или расширенный объект, который содержит в себе DTO + что-то что там надо(id, токен авторизации, имя пользователя и прочая хуйня, которую можно извлечь из запроса)
Аноним 26/03/24 Втр 21:33:21 3101009 72
>>3100999
Второй вариант. Задача контроллера - это принять данные, провалидировать их, проверить все пермишены, если все ок - вызвать сервис. У сервиса свои модели, его не должно ебать, как к тебе в апишку приходят данные.
Аноним 26/03/24 Втр 21:40:56 3101017 73
>>3101009
> провалидировать их
Не задача контроллера.
Задача контроллера - принять запрос и передать его дальше.
Валидация - это часть бизнес-правил. Вот прилетел тебе запрос на пополнения баланса. Пополняют с несуществующего кошелька. Запрос, в плане бизнеса - невалидный. Если контроллер будет это валидировать, у тебя бизнес протек в контроллер. Если не будет - то у тебя размазана валидация по разным слоям. Тут мы провалидировали, а там - нет, не бред же, потом ищи-свищи, как хуйня попала сюда.
Так что если запрос уж дошел до контроллера, т.е. на его уровне - моделька валидна - он ниче не должен больше валидировать, а просто передать тому кто будет исполнять.
Аноним 26/03/24 Втр 21:52:26 3101034 74
>>3101017
Валидация делается на всех уровнях. В контроллере проверяется, что у юзера есть пермишен вызывать этот эндпоинт. Посмотри, как сделано в амазоне, там 100500 ролей на каждую ручку и хуй ты что сделаешь без явного разрешения.
Правила бизнес-логики проверяются дальше, в самой логике, это очевидно. Речь о том, что контроллер принимает просто какие-то данные от пользователя, вообще любые данные, и должен их проверить прежде, чем отдавать дальше. Не должен пропустить всякие хитровыебаные инъекции. Должен обмазать все логами. Должен поймать и обрезать эксепшены, чтобы вместо полного колстека наружу уехала ошибка 500. Этим занимается слой контроллеров.
Аноним 26/03/24 Втр 22:01:13 3101045 75
>>3101034
Так пермишины ты еще на уровне аутентификации до того как к контроллеру дело дойдет должен был проверить...
Как и валидность модельки - в ASP.NET - еще на уровне роутинга.
Так что остается валидировать-то в контроллере?

Плюс, эксепшны - это зло. Понимаю, почему люди их используют, но у нас на ревью - тебе бы долго пришлось доказывать реальную необходимость, вместо возвращения Error'а
Аноним 26/03/24 Втр 22:02:40 3101047 76
>>3101045
> аутентификации
Авторизации

Всегда их путаю(
Аноним 26/03/24 Втр 22:08:07 3101058 77
>>3101045
Ты неироничто предлагаешь возвращать код ошибки вместо эксепшенов? 2024 год на дворе, не 1964.
Аноним 26/03/24 Втр 22:11:25 3101067 78
>>3101047
На каком уровне находится проверка ролей. К тебе приехал токен, он валидный, nginx пропустил запрос на твой сервер, сервер вызвал контроллер. Где будет проверка?
Аноним 26/03/24 Втр 22:16:35 3101082 79
Аноним 26/03/24 Втр 22:23:07 3101087 80
>>3101082
Правильно, проверку делает фреймворк, тебе надо лишь расставить аттрибуты. Но проверка происходит все равно на уровне контроллеров. Если ты захочешь написать сервис скажем на ноде или на го, ты должен понимать, как все это работает под капотом.
Аноним 26/03/24 Втр 23:33:31 3101182 81
>>3100560
> тормозит сам return с апи
Так там сериализация в джейсон под капотом, она и тормозит.
Аноним 26/03/24 Втр 23:39:32 3101194 82
Привет, Двач, как забилдить исходники этой утилиты?
https://github.com/josuelopezv/aDrums
(проект WebApp.ADrums)
На современной VS получилось только с помощью SDK 2.1 мигрировать проект в csproj (после миграции целевая платформа была заново обновлена до dotnet framework 4.8), но судя по всему забилдилось/мигрировалось криво, и при запуске оно не видит исходники страниц (.cshtml). При открытии страницы браузер писал, что нет доступа именно в странице, а в консоли выдавалось исключение об отсутствии исходных файлов (index.cshtml, но были и другие файлы). Помогите, аноны
Аноним 26/03/24 Втр 23:39:53 3101195 83
Привет, Двач, как забилдить исходники этой утилиты?
https://github.com/josuelopezv/aDrums
(проект WebApp.ADrums)
На современной VS получилось только с помощью SDK 2.1 мигрировать проект в csproj (после миграции целевая платформа была заново обновлена до dotnet framework 4.8), но судя по всему забилдилось/мигрировалось криво, и при запуске оно не видит исходники страниц (.cshtml). При открытии страницы браузер писал, что нет доступа именно в странице, а в консоли выдавалось исключение об отсутствии исходных файлов (index.cshtml, но были и другие файлы). Помогите, аноны
Аноним 27/03/24 Срд 02:30:59 3101276 84
>>3099010
>>3099049
И почти всегда когда ты думаешь что тебе нужен тред на самом деле нужно юзать таск

Боже, храни tpl. Аминь
Аноним 27/03/24 Срд 02:45:57 3101284 85
171149659092058[...].webp 97Кб, 1272x1272
1272x1272
Аноним 27/03/24 Срд 06:04:25 3101314 86
>>3099010
Зависит.
Если надо быть уверенным, что какой-то кусок кода будет выполняться в фоне, и не хочется ебаться с планировщиками и контекстами синхронизации - то проще явно тред создать.
Допустим, какой-то watchdog программный, который должен ебнуть что-то, если что-то "зависло". С тасками такой вочдог - при скакнувшей нагрузке и дохуищах тяжелых операций - твой вочдог может вообще никогда не выполниться, или выполниться с таким опазданием, что ну его нахуй.

> Бонусный раунд: когда вы вообще последний раз использовали Thread ?
Буквально вчера.
Аноним 27/03/24 Срд 09:03:30 3101412 87
>>3101284
Многие (большинство) пункты очень спорные.
Такой код может быть только в "идеальном" мире с "идеальной" предметной областью.
Аноним 27/03/24 Срд 09:51:58 3101459 88
>>3101058
Как раз таки 2024-й год. Эксепшен - в лог, пользователю - читаемая ошибка. Эксепшены вообще не должны наружу просачиваться, с ними либо поддержка разбирается, либо юзер (если он продвинутый) идет в мониторинг/логи и разбирается.
Аноним 27/03/24 Срд 10:05:56 3101471 89
>>3101284
А так обычная байда в стиле дяди Боба. Новичок в любом случае не поймет и только с километрами написанного своего и что важнее прочитанного/разобранного чужого кода научится это применять с толком. Опытный же будет до усеру доказывать, что тут все спорно и вот есть кейсы, когда "эти правила неудобны, поэтому они говно".
Аноним 27/03/24 Срд 10:30:50 3101490 90
>>3101182
Вообще мимо ванга, сериализация идет меньше секунды.
Аноним 27/03/24 Срд 10:52:38 3101516 91
image.png 21Кб, 398x286
398x286
image.png 66Кб, 840x194
840x194
Аноны, я кажется частично пофиксил этот аспнетовский пиздец.
Если поменять тип возвращаемых данных с контроллера с application/json к application/octet-stream время загрузки падает с 13 секунд до 33мс, как оно вообщем-то и должно быть.
Прикладываю нотариально заверенные фотокарточки.
Спасибо разработчикам асп!
Аноним 27/03/24 Срд 10:56:49 3101519 92
>>3101516
Я хотел тебе предложить File вместо Ok, только использовать stream вместо byte[], но почему-то подумал, что тебе нужен json отправлять по факту и решил ничего не писать.
Аноним 27/03/24 Срд 11:03:19 3101526 93
>>3101519
Мне какбэ и нужен json, но клиент по прежнему хавает и десериализирует без изменений кода, правда время десериализации увеличилось в несколько раз вероятно из-за того что там проебалсь разметка в виде отступов и переносов и весь текст идет одной кашей.
Сейчас погуглю как это пофиксить и буду дальше держать вас в курсе.
Аноним 27/03/24 Срд 11:42:02 3101561 94
Аноним 27/03/24 Срд 12:01:29 3101596 95
>>3101526
Попробуй хранить изображение как byte[] в БД.
Аноним 27/03/24 Срд 12:19:07 3101623 96
Продолжаю держать вкурсе дальше - сейчас как оказалось что основной ботлнек это десериализация на клиенте (4 секунды / 7мб / 4 пикчи). Сериализация если что ~0.66 сек. Форматирование джейсона как оказалось никак не влияет на время.
>>3101596
Вероятно я таки буду делать отдельную таблицу+апи для изображений в который я буду складывать все изображения из всех таблиц и кидать на клиент гуид id изображений из которых затем клиент будет доставать отдельными запросами все пикчи. Я бы
Аноним 27/03/24 Срд 12:21:27 3101630 97
Блять, в треде снайпер, хотел перенести строку и отправил:
Я бы хотел возможно даже сделать байт поля для пикч в этой же таблице, только я хз как это передать на клиент одним запросом при условии что у меня ботлнек в десериализации.
Аноним 27/03/24 Срд 12:47:05 3101683 98
>>3101623
Или ещё проще храни в БД путь к файлу, а дальше
byte[] bytes = File.ReadAllBytes(path).

В теории можно использовать FileStream и сразу же его вернуть в контроллере.
Аноним 27/03/24 Срд 13:48:40 3101776 99
>>3101623
>и кидать на клиент гуид id изображений из которых затем клиент будет доставать отдельными запросами все пикчи.
Почему ты так сразу не сделал? В том смысле, что метаданные отдаются отдельно, тело файла отдельно? Вроде бы всегда так делается.
Аноним 27/03/24 Срд 14:45:24 3101876 100
>>3101776
Пушо я лох самоучка и у меня в принципе нету инструкций как правильнотм делать.
И да, до меня уже внезапно дошло что метаданные можно отправлять через кастомные хедеры.
>>3101683
Что-то у меня нет желания срать в файловую систему + мне кажется что так на продах не делают лучше насру в базу
Аноним 27/03/24 Срд 15:33:01 3101996 101
>>3101412
>>3101471
Я ж написал, что покушать принёс. Надо было вас братишками назвать, чтобы понятней было?

Там буквально пара советов иногда полезны, остальные вообще всегда вредны. Ну какие два свойства на класс? Обёртка для коллекций? Вообще поехали.
Аноним 27/03/24 Срд 15:35:24 3102001 102
>>3101516
Так я тебе писал, что дело в сериализации.
Напиши свою сериализацию под эту конкретную задачу, будет быстрее работать.
Аноним 27/03/24 Срд 15:40:13 3102014 103
>>3102001
Disregard that.
Прочитал дальнейшее сообщение.

Ну и чё ты на асп.нет наезжал, если ботлнек на клиенте? Ну и да, бинарные данные не шлют в джейсонах, только если они совсем маленькие.
Вот этот прав: >>3101776
Аноним 27/03/24 Срд 15:57:25 3102052 104
>>3101876
>через кастомные хедеры
А потом у тебя прокся их порежет или подменит и ты долго будешь искать "а где-же мои данные?..."
Аноним 27/03/24 Срд 15:58:47 3102060 105
>>3102001
>>3102014
Пытаешся тролить тупостю ньюфага?
Ботлнек сейчас на клиенте уже после того как я "разобрался" с асп. Перечитай ветку сообщений в которой указана проблема именно с асп.
Аноним 27/03/24 Срд 16:03:57 3102067 106
>>3101996
>Обёртка для коллекций?
Почему нет. Большинство коллекций итак по факту уже обертки над чем-то базовым вроде массива. Если у тебя над коллекцией постоянно применима какая-то доменная логика, либо тебе не нужен дохулион методов которые в ней есть, то вполне логично убрать её за какой-нибудь фасад.
Аноним 27/03/24 Срд 17:19:16 3102175 107
>>3102060
верни все назад и дерни курлом и всего делов.
Аноним 27/03/24 Срд 17:58:15 3102223 108
>>3102175
Я дергал постманом. Нету разницы чем дергать.
Аноним 27/03/24 Срд 18:16:04 3102241 109
>>3101284
Я согласен только с первыми двумя пунктами, остальное хуита уровня старая джава. Напишите охулиард классов по 10 строчек в каждом чтобы что? Прочитать два экрана кода это сложна нипанятна, а разобраться в 100500 одинаковых классов в 100500 файлах - это легко и просто.
Аноним 27/03/24 Срд 18:20:57 3102250 110
>>3101516
Добро пожаловать в волшебный мир майкрософт, где каждая домохозяйка может написать свой сервер.
Следующий шаг - использовать dapper, а EF выбросить нахуй.
Аноним 27/03/24 Срд 18:50:26 3102291 111
камон контролс [...] 42Кб, 755x529
755x529
Ну ладно, уговорили. Похоже, что у Авалонии действительно нет достойных альтернатив.

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

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

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

Единственное, что огорчает, отсутствие нативной темы. Я понимаю, что отстал от моды и в моде опять разноцветные свистоперделки с фирменным стилем. Хорошо, я знаю, что можно сделать свистоперделочный флюент, выглядящий пиксель в пиксель одинаково на винде и в линуксе, но мне пох, дайте мне нативную тему. Кекекс, ты меня слышишь? Как на пикрелейтеде тему хочу.
Аноним 27/03/24 Срд 19:38:16 3102368 112
>>3102291
если бы только не шрифты и мыло мыыыло
Аноним 27/03/24 Срд 21:33:04 3102506 113
>>3101284
Ок. Давай разбирать.
> Use Only One Level of Indentation per Method
Хуета.
Во-первых, таким хуем у тебя просто появляются методы/функции, которые нахуй не упали, кроме как исполнить это правило.
Во-вторых, на ревью, когда правится будет в вынесеном методе - ты заебешься искать, а че же и нахуя поменялось.
В-третьих, по опыту - такой код труднее поддерживать и сопровождать.

> Don’t Use the ELSE Keyword
Хуета.
Во-первых. Очень часто - оно реально надо, без него - получаются монструозные конструкции, просто чтобы избежать.
Во-вторых. Не просто так его придумали. Было бы не нужно - выпилили бы.

> Wrap All Primitives and Strings
МЕГАХУЙНЯ.
Просто ПИЗДЕЦ КАКАЯ ХУЙНЯ.
Во-первых. Ты из-за этого чтобы ОРМ какую-нибудь подружить с этой хуйней - должен высрать киллотоны бойлерплейта, чтобы потом оказалось, что надо чет поменять - и ты высрал еще больше бойлерплейта.
Во-вторых. Тебе такое спасибо скажут те кто будут это сопровождать, что никаких денег не хватит чтобы всего зашить.
В-третьих, абстракция ради абстракции.

> Use First-Class Collections
Аналогично предыдущему пункту.

> Use Only One Dot per Line
Хороший совет, в контексте - когда не обойтись иначе.

> Don’t Abbreviate
Спорно. Во многих случаях есть аббривиатуры, типа temp, ctx и прочее, которые все понимают. Опять же, если делаете в контексте предметной области - там бывают свои сокращения, которые удобны бизнесу, и никто не помнит как оно полностью произносится.
Но в общем случае - согласен.

> Keep All Entities Small
Хуета. Особенно как там показано.
Ты потом заебешься разбираться в этой груде файликов.

> Don’t Use Classes with More Than Two Instance Variables
МАГАХУЙНЯ
Просто пиздец какая.
Даже объяснять лень.

> Don’t Use Getters or Setters
МЕГАХУЙНЯ
Просто пиздец какая.
Но тут я объясню.
Во-первых, их не просто так придумали. Миллилард случаев, когда это надо и удобно.
Во-вторых, то что предлагается взамен - это тот же геттер-сеттер, просто названый иначе. Чтобы что? Чтобы потенциального противника запутать? Чи шо? Чи зачем?

> Don’t Use Comments to Justify Bad Code
ДА! Охуенно будет посмотреть, как эта хуйня будет разбираться в коде джуна, который почитал этих советов и пошел хуярить. Посмотрю, как оно будет чет там делать в проекте, который писали деды, у которых первым языком были плюсы и они до сих пор пишут как на си. Посмотрю, как оно будет в предметной области разбираться, про которую нихуя не знает.


Короче. По большей части - какой-то сборник вредных советов. Ну или гайд, как писать много нахуй никому не всравшегося кода, который никто не сможет поддерживать.
Аноним 27/03/24 Срд 21:52:43 3102520 114
image.png 793Кб, 770x525
770x525
Аноним 27/03/24 Срд 22:07:55 3102544 115
Аноним 27/03/24 Срд 22:29:44 3102580 116
28/03/24 Чтв 00:11:37 3102697 117
Аноним 28/03/24 Чтв 01:40:03 3102735 118
>>3102520
Одновременно ностальгические и вьетнамские флешбеки.
Аноним 28/03/24 Чтв 06:55:39 3102812 119
Как проверить инициализирован ли элемент двумерного массива?
Хочу простым и элегантным методом узнать не выхожу ли я за рамки.

Так что б в одну строчку, как если бы IndexOf работал с многомерным массивом.

Вот например
int[,] mass = new int [2,2];
и я пикаю позицию 10,10 через какой-ниубдь встроенный метод и получаю сообщение пошёл нахуй ты куда лезешь.

что б никаких обработок исключений, или подобной хуеты.
Аноним 28/03/24 Чтв 07:03:28 3102815 120
>>3102812
хотя тут две задачи, узнать нициализирован ли и не выхожу ли я за рамки размера массива.
Аноним 28/03/24 Чтв 07:34:16 3102827 121
Аноним 28/03/24 Чтв 07:48:59 3102838 122
image 280Кб, 512x512
512x512
Аноним 28/03/24 Чтв 16:03:22 3103704 123
image.png 3Кб, 109x261
109x261
Поцоны, почему Даппер проскипал ID во время вставки?
Делаю BulkInsert по 1к записей List Но почему то скипаются ид и не идут по порядку. Почему так? Записей столько же сколько и в файле, 9500. Тоесть записи сами не теряются, теряется порядок в присвоении ID/
Аноним 28/03/24 Чтв 16:22:09 3103756 124
>>3103704
И так оно скипает примерно 3к, тоесть записей в бд 9500 а последний ид 12500
Аноним 28/03/24 Чтв 16:37:46 3103820 125
>>3103756
>>3103704
Или это не даппер, хуй пойми, даже если назначить ид руками и потом сделать connection.BulkInsert 1к записей, вставляет 1к записей но скипает ИД и получается последний ид 1220
Аноним 28/03/24 Чтв 16:47:16 3103844 126
>>3103820
Может у тебя в сиквенсах какая-нибудь логика или их еще кто-нибудь дергает.
А так-то вообще обычно похуй на их порядок совершенно.
Аноним 28/03/24 Чтв 16:59:15 3103872 127
>>3103844
Да ничего вроде нету, топу добавляю список, и скипает каждый раз в одном месте, в EF всё норм.
Аноним 28/03/24 Чтв 20:39:59 3104228 128
>>3103704
Может код покажешь?
Аноним 28/03/24 Чтв 20:47:59 3104249 129
image.png 8Кб, 389x90
389x90
>>3104228
Да там и кода то нет
Просто заполнение List элементами, когда их 10к добавляем в бд и очищаем список. EF вставляет нормально через AddRange.
Причём проебываеться всегда в том месте где на скрине, и если у всех записей id = 0 и если я сам делаю id +1 по порядку.
Аноним 28/03/24 Чтв 20:49:12 3104256 130
>>3104249
Фикс, это я просто переименовал в MasterDataList, просто в закоменченой строке старое название осталось.
Аноним 28/03/24 Чтв 20:52:30 3104266 131
>>3104249
То есть в твоем коде Dapper не знает про ключи при вставке?
Аноним 28/03/24 Чтв 20:57:06 3104283 132
>>3104266
Ну как не знает если он нормально вставляет но проебываеться почему то в одном месте? Пребывает именно порядок присвоения ID, сущности не проебывает.
Аноним 28/03/24 Чтв 21:03:38 3104301 133
>>3104283
Ид заполняется в бд и возращается после вставки. Кури как работает инкремент в колонке.

А вообще включи просто логи запросов
Аноним 28/03/24 Чтв 21:11:30 3104306 134
>>3104301
Я рад за него пусть заполняется.
Вопрос почему даппер херит заполнение ид а еф не херит
Аноним 28/03/24 Чтв 21:20:08 3104316 135
qes.png 10Кб, 346x297
346x297
>>3097760 (OP)
Парни такой вопрос.
Эксперементировал с инструкцией goto и у меня возник затуп.
На пикриле мой код который считает до ста тыщ и когда закладка Ass была после строки int a = 5, то всё было норм.
Но я сейчас переставил закладку до инициации переменной и НИХУЯ НЕ ИЗМЕНИЛОСЬ. Код всё ещё работает каким то хуем и считает до ста тыщ, хотя не должен, ибо каждый цыкл, переменная а = 5, в конце увеличивается до 6, но после goto она заново инициируется как 5. И так снова и снова. 5656565656 как блядь она до ста тыщ считает? Чё за параша?
Как это говно работает? Почему значение переменной сохраняется?
Аноним 28/03/24 Чтв 21:22:37 3104318 136
>>3104316
Я дебил, забираю свой вопрос назад, как только запостил свой высер так сразу просёк в чём суть.
Не стать мне программистом походу, я слишком дэбилен.
Аноним 28/03/24 Чтв 21:23:04 3104321 137
>>3104306
Ты дальше абзаца прочитать не можешь? Повторю тогда
> А вообще включи просто логи запросов
Аноним 28/03/24 Чтв 21:33:18 3104331 138
>>3104316
Бля, сидел минут 5 пырил в твой код не мог понять что там вообще происходит.
Дийкстра был прав про goto.
Аноним 28/03/24 Чтв 21:35:30 3104333 139
>>3104318
Ну если сам дтшёл, то в чём проблема? Ты уже программист. Только не используй goto пока не постигнешь Дао. Его можно использовать только опытным программистам, которые понимают когда он нужен.
Аноним 28/03/24 Чтв 21:36:33 3104335 140
>>3104283
>Ну как не знает если он нормально вставляет но проебываеться почему то в одном месте? Пребывает именно порядок присвоения ID, сущности не проебывает.

Ещё раз. Почему ты решил, что порядок столбцов для Dapper'а неверный?


>>3104306
Может потому что EF умеет автоматом метить поля с Id как ключи?
Аноним 28/03/24 Чтв 22:02:02 3104381 141
>Ещё раз. Почему ты решил, что порядок столбцов для Dapper'а неверный?
Потому что не нормально когда добавляешь 1к записей в пустую бд и ID пишется с пропусками 1 2 3....200 ХУЯК 250 251 252. В EF так не происходит, 1к записей добавляется все ID пишутся от 1 до 1000
Аноним 28/03/24 Чтв 22:14:05 3104394 142
2024-03-2822-08[...].png 37Кб, 804x353
804x353
Пытаюсь запустить эдж браузер и дождаться его загрузки.

- По какой-то причине дескритор окна возвращает Zero, хотя окно браузера визуально загрузилось.
- Еще process.HasExited == True
- Попытка получить новый экземпляр процесса по айди текущего Process.GetProcessById(process.Id) вызывает исключение, мол процесс не загружен.

Что не так?
Аноним 28/03/24 Чтв 22:23:23 3104402 143
>>3104381
Ты не поверишь, но всем везде абсолютно похуй, в каком порядке вставит записи в бд. Тем более через какой-то булк инсерт, что это за хуйня вообще?
Аноним 28/03/24 Чтв 22:36:32 3104417 144
>>3104394
Потому что стартап процесс уничтожается сразу. Хромиум ёпта
Аноним 28/03/24 Чтв 22:56:56 3104434 145
>>3104402
Ну клиенту не похуй. Мне так то тоже похуй в каком там порядке, хоть с прыжками в 1к
Аноним 28/03/24 Чтв 23:02:03 3104439 146
>>3101008
>>3101009

> Сервис - принимает в себя Request<T1> и отдает Result<T2>
> Result - это тип, который содержит либо ответ, либо ошибку с описанием ошибки.
> Обычно T1 - это та же DTO или расширенный объект, который содержит в себе DTO + что-то что там надо(id, токен авторизации, имя пользователя и прочая хуйня, которую можно извлечь из запроса)
Получается, что это второй вариант.

Как я понимаю, при втором варианте придётся отказываться от автоматической валидации и валидировать модельку в ручную?
builder.Services.Configure<ApiBehaviorOptions>(x => x.SuppressModelStateInvalidFilter = true);

Что используешь в качестве валидации: прокидываешь ModelState или FluentValidation?
Можешь показать пример с монадой и централизованной обработкой ошибок (формирование ответа клиенту)?

> Второй вариант.

Получается как-то так:
https://pastebin.com/hiMPRSGu

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

>>3101045
> Плюс, эксепшны - это зло. Понимаю, почему люди их используют, но у нас на ревью - тебе бы долго пришлось доказывать реальную необходимость, вместо возвращения Error'а
Что не так с исключениями? Их всё равно надо ловить и формировать ответ клиенту.
Аноним 29/03/24 Птн 01:07:27 3104516 147
>>3104439
>Можешь показать пример с монадой и централизованной обработкой ошибок (формирование ответа клиенту)?

У меня это что-то в духе:

Task<Response> Foo(SomeDTO requestData) {

// упрощенно, в реальности, там екстеншн, который все мапит как надо
return service.Handle(new Request(requestData, User.GetUserData()))
.Match(
success => Ok(success.Payload),
error => CreateFancyErrorResponse(error);
)};

Эксепшины, как я сказал - я не кидаю. Иногда - ловлю. Сам я возвращаю Error.

В коде сервиса это выглядит так:

// упрощенно
public Result<Some> Handle(Request<Some> request){

try{
var result = DoSomeBuisnesLogic(request);
return result;
}
catch{}
return new Error();
}

Почему так? Потому что так удобнее.

Про валидацию - та что нужна в качестве проверки валидности JSON'чика/XML'ки - происходит на уровне мидлварей. Ну, там, что не null, что вместо числа не прислали строку.
Та что нужна на уровне бизнеса - с помощью валидатора вида:

Rulleset<User>
.For(x=>x.Name)
.Min(2)
.Max(128)
,For(x=>x.Email)
.IsEmail()
.For(x=>x.Age)
.Min(21)
.Create();

"Эта хуйня биндится либо к модели вцелом, либо к эндпоинту и так же при валидации возвращает ошибку валидации.
Аноним 29/03/24 Птн 01:25:53 3104527 148
>>3104516
У тебя фп головного мозга.
Аноним 29/03/24 Птн 05:20:39 3104561 149
пердиславы, ответьте чо думаете плс

Я раньше думал, что операторы типа && работают так:
если выражение слева неверное, то выражение справа даже проверять не будет.

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

например
if( 2 < 1 && 2 < 3)

разве после проверки выражения слева не должно пойти выполнение в элсе?
Аноним 29/03/24 Птн 05:46:48 3104570 150
код на самом деле другой

if( x < massive.GetLength && massive.GetLength[x] !=0 )

и я получаю мессагу, что вышел за пределы, хотя выражение слева и должно было бы проверить это сука. Схуяли выражение справа всё равно выполняется?
Аноним 29/03/24 Птн 08:59:21 3104640 151
>>3104570
>massive.GetLength[x]
GetLength[x] шо это лол?
Аноним 29/03/24 Птн 09:18:16 3104658 152
>>3104434
Так сделай Id - ключом. В чём проблема?
Аноним 29/03/24 Птн 09:30:48 3104667 153
>>3104561
Как я понял, такие выражения рассчитываются при компиляции.
Аноним 29/03/24 Птн 10:30:30 3104742 154
>>3104570
Братиш у тебя слева метод не вызывается. Он без скобочек.
Аноним 29/03/24 Птн 10:32:07 3104747 155
Аноним 29/03/24 Птн 10:42:09 3104762 156
Почему шарподегенераты такие тупые? Насрали нам в тред про то, что у нас нет библиотек для ссш, а оказалось что на самом деле на джаве в 8 раз больше чем на шарпокале. Это же классика уже, теорема шарпана, но заёбывающая правда.
Аноним 29/03/24 Птн 10:50:07 3104776 157
>>3104762
нахуй ты сюда ныть пришёл?
Аноним 29/03/24 Птн 12:21:58 3104909 158
Аноним 29/03/24 Птн 12:35:20 3104926 159
>>3104909
Где ты это указал, когда делаешь BulkInsert?
Аноним 29/03/24 Птн 12:48:37 3104947 160
>>3104926
Нигде не указывал, думал что как и EF даппер сам поймёт по имени Id
Аноним 29/03/24 Птн 14:03:45 3105085 161
>>3104570
Если допустить, что ты не троллишь тупостью и сам себя не объебываешь (например у тебя в реале там просто &, а не &&),
то чтобы понять где косяк, раздели для отладки выражение на два (через два if-а например) и посмотри реально ли они там у тебя выполняются так как ты хочешь. Судя по виду у тебя там какие-то кастомные методы и вполне может быть что выражение x < massive.GetLength выдает тебе true, когда ты ожидаешь false, просто потому что ты где-то в .GetLength объебался.
Аноним 29/03/24 Птн 14:20:01 3105126 162
>>3104947
Надо просто id не интами делать, а гуидами.
Аноним 29/03/24 Птн 15:03:07 3105209 163
>>3105126
>гуидами
>bulk insert
Тонко.
Аноним 29/03/24 Птн 20:52:43 3105836 164
>>3104762
Нахуя тебе 8 разных либ под одну задачу?
Аноним 30/03/24 Суб 10:34:30 3106282 165
image.png 256Кб, 637x476
637x476
image.png 177Кб, 1299x1801
1299x1801
Кто-нибудь может нормальным человеческим русским языком объяснить, зачем нужен SearchValues<T> (который может только узнать bool Contains(T)), когда есть зрелый надежный через многое прошедший HashSet<T>, и который может всё то же самое, и даже больше?
Аноним 30/03/24 Суб 11:36:32 3106333 166
>>3106282
Зачем нужен интернет эксплорер вместо браузера? Зачем нужен team foundaton вместо гита? Индусы имитируют бурную деятельность you know, чтобы их не разогнали к хуям.
Ни один человек в мире не пишет хай перфоманс вычисления на дотнете, это база. Можно сколько угодно выебываться экономией в 20 наносекунд на манятестах, но в реальности приходит сборщик мусора и наступает пиздец. В реальном коде на сишарпе даже Dictionary используется примерно никогда, в 99.99999% случаев достаточно обычного List.
Аноним 30/03/24 Суб 11:38:55 3106335 167
>>3106333
>В реальном коде на сишарпе даже Dictionary используется примерно никогда
Ты скозал.
Аноним 30/03/24 Суб 11:43:18 3106345 168
>>3106335
Когда ты найдешь свою первую работу, убедишься сам. Задачки с литкода - это не программирование за деньги.
Аноним 30/03/24 Суб 12:16:25 3106380 169
Аноним 30/03/24 Суб 14:08:14 3106476 170
>>3106380
Джуник, спок. Чем эта новая хуита отличается от хэшсета? В каких задачах ты будешь использовать эту хуиту? Кто вообще, блять, пишет числодробилки на дотнете, покажите этого ебанутого.

Алсо
>ссылки на официальную пропаганду от микрософт
Дурачок ты у мамы.
Аноним 30/03/24 Суб 14:17:21 3106485 171
>>3106476
>пишет числодробилки на дотнете
во первых, это поиск в строке
во вторых ты, дурачок мамковый, часто САМ пишешь реализацию поиска в строке руками? Иначе куда твой хешсет присунуть?
ну если да, то жаль тебя, очень жаль.
Аноним 30/03/24 Суб 14:25:31 3106494 172
>>3106485
Поридж, поиск в строке в дотнете написан еще до твоего рождения. Речь о том, что вся эта тема со спанами и SearchValues нахуй не нужна на практике. Это классическая имитация бурной деятельности.
Аноним 30/03/24 Суб 14:35:15 3106500 173
>>3106494
ТЕБЕ не нужна, ОХОТНО ВЕРЮ
по тебе прямо видно.
нормальным людям вполне себе нужна
И поиск конечно написан, что его там искать. Например твой тупой поиск через HashSet. Но если бы ты немного бы был умнее, то знал, что часто можно улучшить и то что "вроде бы быстрое"

Для НЕУЧЕЙ поясню что вот есть утебя допустим база данных. Она быстрая конечно, но все равно весьма долгая. И УМНЫЕ люди (но не ты конечно) могут влепить перед ней фильтр блума, который в сотни раз быстрее

Так вот даже твой быстрый HashSet все равно медленнее битового фильтра блума - раз. Более того, можно посмотреть что все значения они ASCII и тогда переключиться на другой алгоритм сравнения.

Но тебе не нужно, ты и не юзай. Оставайся формошлепом. А эти вещи для тех, кто знает зачем оно им.
Аноним 30/03/24 Суб 14:43:58 3106512 174
Аноним 30/03/24 Суб 14:51:39 3106517 175
>>3106345
Та хуй знает. Конкретно с дикшинари - он же просто удобнее в куче случаев.
Ну, допустим, у тебя есть список сессий активных. У сессий - айди.
Тебе удобнее будет просто _sessions[id] и чет сделать, чем каждый раз как дебил искать ее в листе.
Вопрос не в перформансе а тупо в удобстве.
Аноним 30/03/24 Суб 14:53:31 3106520 176
>>3106494
>>3106476
>>3106333
>Ни один человек в мире не пишет хай перфоманс
>Кто вообще, блять, пишет числодробилки на дотнете
>имитация бурной деятельности
Что за форс обиженного на шарпы? Нормальный код на шарпе насколько медленнее с++? На 2-15% в зависимости от задачи.
В нормальном перформансном коде на шарпе GC вызывается от 0 до 2 раз за всё время выполнения. А у криворуких конечно GC будет запотевшим и замотанным.
Спаны, натив мемори, интринсики, мемори-буферы, векторые операции, ансейф касты и прочие красоты позволяют эффективно писать быстрый красивый код на шарпе, а не код-урод на мерзких плюсах.
Аноним 30/03/24 Суб 14:57:06 3106523 177
>>3106520
По моему в бафферс пакете ещё и avx прямо юзают
Аноним 30/03/24 Суб 14:59:14 3106525 178
>>3106520
> В нормальном перформансном коде на шарпе GC вызывается от 0 до 2 раз за всё время выполнения
Кестрел, я так понимаю - не нормальный и не перформанс?
Потому что если попробовать на нем стресстест с эхо-хенделром 10к+ соединений и мгновенных отключений - ГЦ нехерово так ебется.
Или шо?
Аноним 30/03/24 Суб 15:05:26 3106530 179
>>3106525
>Кестрел на 10к+ соединений
Какая связь с числодробилками?
Аноним 30/03/24 Суб 15:14:51 3106538 180
Как в C# работать с указателями?
Вот на C объявляем указатель, выделяем память, присваиваем зачение, инкрементируем на + 1, выделяем память, присваиваем значение, и вот у нас уже массив динамический получился, с помощью free можем его освободить.

Может кто пример на C# такой же привести?
Аноним 30/03/24 Суб 15:22:57 3106542 181
>>3106538
Дрочи указатели и память в unsafe секциях вот только за такое обоссать могут
Аноним 30/03/24 Суб 15:24:14 3106544 182
>>3106538
C# под unsafe является надмножеством языка С.
Аноним 30/03/24 Суб 15:24:49 3106545 183
>>3106538
Ну и где ты тут увидел динамический массив при аллокации определённого размера памяти я не понял
Аноним 30/03/24 Суб 15:28:03 3106548 184
>>3106517
Во-первых, сессии лежат в редисе.
Во-вторых, пишешь FirstOrDefault и все работает.
В-третьих, enjoy your KeyNotFoundException.
Аноним 30/03/24 Суб 15:30:37 3106551 185
>>3106538
var x = new List<int>();
С указателями в шарпе не работают.
Аноним 30/03/24 Суб 15:31:31 3106552 186
>>3106538
Если уж нужно опускаться до заката солнца вручную, то в шарпе основная рыба обитает в районе классов MemoryMarshal, Native, Unsafe
прежде чем переходить к реальному unsafe
Аноним 30/03/24 Суб 15:33:22 3106556 187
>>3106545
Под динамическим массивом имел ввиду динамическое выделение памяти. То есть массив с нефиксированной длинной.
Аноним 30/03/24 Суб 15:35:06 3106560 188
>>3106525
У тебя неправильные тесты. Надо писать правильные, где раньше какой-то абстранктый кусочек кода выполнялся за 20 наносекунд, а с новой фичей за 10 наносекунд, двухкратный прирост прозводительности!!!11
Аноним 30/03/24 Суб 15:35:39 3106561 189
>>3106556
И всё равно ты выделяешь сразу кусок памяти который уже потом заполняешь или нет. Это сорт оф лист только лист ещё и имеет функциональность на случай если выделенный размер кончился
Аноним 30/03/24 Суб 15:35:45 3106562 190
Аноним 30/03/24 Суб 15:40:08 3106573 191
>>3106562
ему видимо нужен буфер динамической длины без копирования при расширении

>>3106556
типа создали мы буфер 100 байт и работаем с ним через Memory/Span потом выделили еще 100 байт (причем сразу после первых 100) и создали новый Memory/Span на эти 200 байт?
Аноним 30/03/24 Суб 15:45:18 3106582 192
>>3106562
>>3106561
Да, указателями пользоваться в C# смысла нет. Но по заданию нужно. Не получается такое же поведение сделать как в C/C++, или, скорее всего, я просто не догоняю.

>>3106573
Получается да. Мне нужна возможность иметь массив с неограниченной длиной с помощью указателей.
Аноним 30/03/24 Суб 15:45:34 3106585 193
>>3106573
Таких буферов не существует. Ты никак не сможешь гарантировать, что после первых 100 байт будет место для следующих 100 байт. У или все данные лежат рядом, но требуют копирования при увеличении размера контейнера как в листе, или данные лежат в блоках, как в хештаблице.
Аноним 30/03/24 Суб 15:47:06 3106588 194
>>3106585
Как вариант можно хранить в начале блока его размер и ссылку на следующий, но это уже будет нихуя не массив с константным доступом
Аноним 30/03/24 Суб 15:51:18 3106593 195
>>3106588
Будет О(1): ты сначал берешь остаток от деления индекса на размер блока, а потом этот остаток используешь как индекс в блоке. Задачка уровня easy на литкоде. Другой вопрос - зачем тебе такой контейнер?
Аноним 30/03/24 Суб 15:52:39 3106596 196
>>3106593
1. Мне не нужен
2. Предполагал что блоки могут быть разной длинны
Аноним 30/03/24 Суб 15:57:53 3106600 197
>>3106596
Для таких хитровыебаных контейнеров надо открывать справочник по алгоритмам и смотреть варианты.
Аноним 30/03/24 Суб 15:58:29 3106602 198
>>3106582
почему с помощью указателей? я бы понял если бы хотелось иметь унифицированный доступ к буфферу или chunkedbuffer

типа есть вот как MemoryStream, а есть ChunkedMemoryStream с тем же апи (который конечно же мелкие сделали internal, а наружу выдали другую реализацию брр)
или вот для спанов есть ReadOnlySequence, но это же просто враппер.

передать куда то где ждут указатель? но тут извините.
Аноним 30/03/24 Суб 17:04:12 3106684 199
>>3106552
>MemoryMarshal, Native, Unsafe
>прежде чем переходить к реальному unsafe
А что ты подразумеваешь под "реальным unsafe"? Keyword (указатели и другая мелочёвка)? Просто перечисленные API также небезопасны.
Аноним 30/03/24 Суб 17:06:29 3106691 200
Аноны, я ошибся в представлении памяти и указателей когда попросил помощи, сорри. Задачу по-другому реализую.
Аноним 30/03/24 Суб 17:08:16 3106696 201
>>3106684
небезопасен только Unsafe.
А реальный ансейф это когда ты *void во все поля без оберток более высокого уровня типа того же Unsafe
Аноним 30/03/24 Суб 17:45:50 3106751 202
>>3106696
>А реальный ансейф это когда ты *void во все поля без оберток более высокого уровня типа того же Unsafe
Понял
>небезопасен только Unsafe.
Ну например, MemoryMarshal.CreateSpan() позволяет создать спан с отрицательной длинной, что может привести к неожиданным результатам, т.к. JIT считает что Length неотрицателен (у спанов, строк и массивов):
https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEUCuA7AHwAEAmARgFgAoIgBgAIiyA6AJXwwEsBbGZgSTwYYUCAAcAyiIBunMDADOAbmrUiKegFkAFKxgBDACYB5PABsAnhLH68AHk5CAfPX0BKagG9q9X4zIAnNoAJABEnvrMADIweADmGAAWAL4A9BoAvPQR0bEJifSp9CjJoW4qVMnUekamlta2Ds6u9FkA2vRkaPQk3QDM3RoAuhU67qPamjDc0Baa+lAKifpmzADCsPrCDXjasABmWtOz84vLqwDiMBh6+yKx8tru3XAobuVAA==

Ну и что сами разрабы дотнета думают:
https://github.com/dotnet/csharplang/discussions/6304
>Expose a concept of "unsafe callers only"
>The .NET Libraries would then be able to utilize this functionality on APIs such as System.Runtime.CompilerServices.Unsafe, System.Runtime.InteropServices.CollectionsMarshal, System.Runtime.InteropServices.MemoryMarshal, and System.Runtime.InteropServices.Marshal (subject to API review and approval).
И другие ссылки:
Enumerating type safety guarantees in MemoryMarshal and friends
https://github.com/dotnet/runtime/issues/41418
Add [CallerMustBeUnsafe] attribute to denote APIs which should be called in an unsafe block
https://github.com/dotnet/runtime/issues/31354
Аноним 30/03/24 Суб 17:56:07 3106760 203
>>3106751
и ещё (один из разрабов):
https://www.reddit.com/r/csharp/comments/tqit91/comment/i2i8utl/

>Likewise, you don't always have to use the unsafe keyword to be doing something unsafe.
>Many of the APIs under System.Runtime.CompilerServices and System.Runtime.InteropServices are likewise "unsafe" and can easily cause undefined behavior, crashes, etc.
>The same goes for various other APIs scattered throughout the BCL, although we generally try to put Unsafe or another common "unsafe" related word (like Marshal) in the name.
Аноним 30/03/24 Суб 19:57:35 3106929 204
Учу сейчас дотнет для работы, и вот не могу понять. Под какой осью лучше работать? Вроде всё есть и на линуксе, на котором щас сижу, но а вдруг в винде есть особенные фичи, которые я упускаю и не буду знать об этом? Что скажете? Кто под какой системой работает?
Аноним 30/03/24 Суб 20:05:53 3106943 205
>>3106929
Под линью нет студии и wpf
Аноним 30/03/24 Суб 20:07:06 3106945 206
>>3106943
О кстати ещё один вопрос, райдер или студия?
Аноним 30/03/24 Суб 20:07:50 3106947 207
>>3106945
Если студия без решарпера то райдер, если с решарпером то студия.
Имхо естественно
Аноним 30/03/24 Суб 20:21:20 3106964 208
>>3106929
Я кодирую в вс-коде на венде, но периодически сношу венду и перехожу на линукс и там продолжаю в том же коде, он в линуксе называется oss-code.
> дотнет для работы
Где на галере скажут кодить - там и будешь кодить.
Аноним 30/03/24 Суб 20:22:58 3106968 209
>>3106964
>Где на галере скажут кодить - там и будешь кодить.
Говорят где хочешь. Да и не в том положении чтобы диктовать мне где кодить.
Аноним 30/03/24 Суб 20:25:39 3106970 210
>>3106968
Не знаю, тут выше фанат решарпера неоднократно говорил, что без решарпееровского функционала невозможно успешно грести на галере. Я-то индюк, я не знаю.
Аноним 30/03/24 Суб 20:29:18 3106976 211
>>3106970
Я не тот адепт но в студии без него реально душно
Аноним 30/03/24 Суб 20:33:55 3106984 212
>>3106970
>>3106976
Решарпер не проблема, барин уплотит. Значит всё таки шинда говорите. Ну, вроде докер есть, а чё ещё надо...
Аноним 30/03/24 Суб 20:39:05 3106989 213
>>3106976
> в студии без него реально душно
На примерах можешь показать?
Аноним 30/03/24 Суб 20:45:29 3106998 214
>>3106984
До прихода всл я миксовал дебиан и винду, когда добавился сабж (а далее всл2) то на рабочей станции только винда стоит. С линью всё прекрасно пока её не пытаешься использовать как ос для пк.

>>3106989
С ходу бросается в глазах расширенный рефакторинг и анализ всего солюшена, из не самого очевидного это тест раннер, оптимизация сборки, снипеты, интелисенс, дебаг тайм плюшки.
Если бы в идее был интерфейс студии то я бы не мучая себя пересел
Аноним 30/03/24 Суб 22:06:09 3107168 215
>>3106945
Похуй, только учитывай, что VS по факту стандарт (просто потому, что чисто статистически он у большего числа разрабов) и твой код должен собираться именно в студии без всяких плясок с бубуном. Я не раз попадал в ситуацию, когда мне скидывали код который "Бля буду - у меня в райдере все билдится и запускается", в VS при открытии расцветал красным из-за того, что там что-то не так слинковано было или какие-либо анализаторы не подключены или еще из-за какой-то хрени.
Аноним 30/03/24 Суб 22:17:55 3107195 216
1711826274759.png 44Кб, 891x463
891x463
Сап шарпач!
Как же я ненавижу вереницы if - else if!
Как же хорошо, что в шарпе завезли свич-выражения с паттерн-матчингом. Вот, взгляните. Можно ли сделать ещё короче?
Аноним 30/03/24 Суб 23:57:12 3107318 217
>>3107195
Да. Можно сделать факторию и в одну строчку написать.
Аноним 31/03/24 Вск 00:14:51 3107331 218
>>3105836
Возможность выбора. Но суть не в этом. Суть в том, что вы сами насрали в наш тред про то, что либ мало, а оказалось, что в 8 раз больше.
Аноним 31/03/24 Вск 00:34:12 3107343 219
Как на шарпе намутить отмену задачи, но не по таймауту, а по долгой неактивности?
Допустим, у меня какая-то долгая таска. Она состоит из подтасок.
И я хочу иметь возможность отменить все это дело целиком, если что-то в течении какого-то времени не дергалось.

На текущий момент, я делаю во всех подтасках дерганье метода специального, типа: сказать, что я еще живой. И в отдельном треде - в цикле проверяю, когда дергалось последний раз, если больше нужного мне таймаута - клацаю CancellationTokenSource.
Но это же выглядит как хуйня страшная. А как нормально сделать - я чет не придумал.
Аноним 31/03/24 Вск 00:41:30 3107345 220
>>3107343
Задача в принципе звучит как залупа. Таска запустилась, выполнила свою часть работы, вернула результат
Аноним 31/03/24 Вск 00:49:35 3107353 221
>>3107345

И че мне делать, если таска "зависла"? Ждать вечно? Хуйня. Если по таймауту просто грохать - тоже хуйня, потому что это может быть таска, которая просто ДОЛГО выполняется, но если таки ДОЛГО подождать - она выполнится.
Нужен механизм, который наверх подаст сигнал: я еще живой, не убивай меня. А если не подаст - сверху грохнуть.
Аноним 31/03/24 Вск 01:01:38 3107364 222
>>3107353
Ну вот пускай она сама и менеджит что делает и выжидает таймауты. Ты же когда делаешь условный запрос на апиху не дежуришь рядом поглядывая "а не висит ли запрос N секунд. О, не поставлен флажок уже 5 сек, пора прибивать", а просто пишешь эвэйт и ждёшь результат или исключение (в т.ч. таймаут)
Аноним 31/03/24 Вск 01:37:07 3107380 223
>>3107353
У Task есть поле Status. Просто запрашивай его.
Аноним 31/03/24 Вск 01:48:21 3107386 224
>>3107364
>>3107380

Смотри.
У меня есть устройства, доступные по УДП.
Есть задачи их опросить.
Бывает, иногда, что запрос - теряется. Но сверху - я не могу это понять. Со стороны таски - все нормально, она послала запрос - ждет ответ. Ответ может прилететь, а может не прилететь, а может прилетать частями. Код который обрабатывает ожидание ответа - я не контролирую, я только могу сверху передать CancellationToken, чтобы отменить все разом. Но когда что-то прилетает - триггерится эвент: received.
Так вот. Если запрос теряется - задача - будет висеть вечно. Если запрос - прилетает частями - а я буду убивать по таймауту, я потеряю то, что возможно таки собралось бы в нормальный ответ.

Меня просто смущает, что решение нихуя не элегантное и красивое. Я хотел бы что-то типа совмещения CancellationTokenSource с таймаутом и автоматического сброса таймаута по событию. Типа другой тип токена, который так же как обычный CancellationTokenSource но можно было бы подписаться на событие и сбрасывать таймер ожидания.
Аноним 31/03/24 Вск 02:01:02 3107390 225
>>3107386
Не тупи. Ты в MainTask() вызываешь MakeUdpRequest(ct) внутри которого
var timeout = 30sec;
var rCt = creating linked cts with ct+timeout
await SendRequest(rCt);
await GetResponse(rCt);

Если почему то методы отправки и получения не могут в отмену то просто кастуешь await WhenAny(ReceiveTask, TimeoutTask)
Аноним 31/03/24 Вск 02:14:00 3107393 226
>>3107390
Срсли. Если бы все было так просто - то я бы не спрашивал.

У меня есть сторонняя библиотека.
Дальше, дергается вот так:
device.Init();
device.Receive += onRecieve;
device.Send += onSend;
await device.Start(ct);
await device.ReadData(dataArray, ct);

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

Вот идеальным было бы решение в духе:
device.Receive += (s, e) => ct.ResetTimout();
device.Send += (s,e) => ct.ResetTimout();

Но как так сделать - я не знаю. CancellationTokenSource только либо отменяться умеет, либо принять таймаут и отмениться по нему.

Потому - я и нагородил вот эту вот фигню с циклом и если долго ни пришло и не отправилось - отменяю в этом цикле. А хотелось бы как-то красивше.
Аноним 31/03/24 Вск 02:19:30 3107398 227
>>3107393
Почему ты не хочешь отменять ReadData по таймауту? Если метод не выполнился за 30 значит завис и отменится по комбиненому токену.

While not cancelled
Await ReadData(ct with 30sec timeout)
Done
Аноним 31/03/24 Вск 02:28:29 3107401 228
>>3107393
> device.Receive += (s, e) => ct.ResetTimout();
> device.Send += (s,e) => ct.ResetTimout();
Не разделяю метод но под него можно написать класс внутри которого в цикле будет task.delay после завершения делея без cancelledEx будет отменён токен который ты везде передаешь и выход из цикла, а ResetWatchdog будет дёргать отмену task.delay тем самым не давая дойти до шага отмены твоего основного токена
Аноним 31/03/24 Вск 05:05:35 3107417 229
>>3107393
таймеры никто не запрещал. Все просто же.
Аноним 31/03/24 Вск 08:54:55 3107452 230
Аноним 31/03/24 Вск 12:11:38 3107567 231
>>3107386
Проблема твоего кода, то что ты из таски пытаешься сделать что-то другое.
Task просто выполняет метод до конца. Всё. Логика работы метода - это не задача тасок.
Аноним 31/03/24 Вск 13:37:17 3107667 232
image.png 167Кб, 1776x726
1776x726
Кто-нибудь пользовался UnsafeAccessorAttribute для быстрого доступа к приватным данным без рефлексии?
Пытаюсь получить приватное поле у класса с дженериком, но даже просто копипаста кода из примера с learn.microsoft.com не работает.
Притом что без дженериков все примеры работают.
А вот вызов метода выделенного на пикриле всегда вызывает BadImageFormatException. Даже полная копипаста примера майков вызывает исключение.
Версия дот.нет - 8, студия последняя.
Аноним 31/03/24 Вск 14:14:15 3107694 233
Аноним 31/03/24 Вск 23:49:59 3108191 234
>>3107318
можно: все имена переменных однобуквенными сделай и удали все пробелы и отступы, чтоб все увидели, что ты сеньор девелопер
Аноним 01/04/24 Пнд 11:31:24 3108460 235
Есть ресурсы где можно надрочить асинхронность и многопоточность?
Работа такая донная что там это не используется от слова совсем, но на собесах постоянно спрашивают
Аноним 01/04/24 Пнд 11:56:39 3108476 236
Аноним 01/04/24 Пнд 15:15:51 3108689 237
>>3108191
Воу-воу, сеньоры наоборот пишут многобуквенные имена, чтобы все вокруг видели, как они высоки:
> ISeniorDeveloperDerivedInterface<IWeryMuchSmart> SeniorDeveloperFactoryObjectInstance
И комменты, тысячи их, а то ж юзеры тупые, не поймут, что до инициализации фреймворка, ничего не заработает.
И непременно лямбдами изъебнись. А то не примут в сеньоры.
Аноним 01/04/24 Пнд 15:31:02 3108715 238
>>3108689
>И непременно лямбдами изъебнись.
Ты смеешься но после "изъебывания лямбдами" смотреть на обычный мартышечный код неприятно, не то что работать с ним.
Аноним 01/04/24 Пнд 15:40:39 3108731 239
>>3108715
Двачую, я вот на ревью как престарелый дев думал зачем создавать лямбду прямо по среди функции и тут же вызывать ее в этом же скоупе, это ведь то что обычные функции делают? А оказалось это не модно уже.
Аноним 01/04/24 Пнд 19:10:46 3109060 240
>.NET Plus
>Компания сообщила, что запустит подписку .NET Plus для поддержки контрибьюторов и экосистемы .NET.

>Отключение текстовой рекламы в output при сборке проекта компилятором (без подписки возможен показ при сборке в режиме Debug)

>NFT - каждому подписчику будет доступна для минта SouldBound NFT в сети Ethereum. Коллекция будет посвящена новой вехе развития .NET и будет выпущена в ограниченном количестве. Известно, что владельцам NFT будут доступны некоторые привилегии, например, пожизненная скидка на подписку на продукты экосистемы .NET.



.NET - скам, теперь официально
Аноним 01/04/24 Пнд 19:13:36 3109064 241
>>3109060
Чулочки в комплекте?
Аноним 01/04/24 Пнд 19:16:50 3109070 242
Аноним 01/04/24 Пнд 19:57:56 3109107 243
>>3108731
> зачем создавать лямбду прямо по среди функции и тут же вызывать ее в этом же скоупе
Я надеюсь, мне только показалось, или ты действительно считаешь лямбдой всё, что содержит в себе символы => ?
Так вот, если мне не показалось, то нет, не всё со стрелочкой это лямбда в шарпе. Иногда это просто элемент синтаксиса, как в паттерн-матчинге на пикче выше.
Аноним 01/04/24 Пнд 20:50:13 3109156 244
>>3109107
Не, код на пикче страшнее смерти конечно, но речь не о нем, я говорил об абстракном изъебывании лямбдами
Аноним 01/04/24 Пнд 21:27:16 3109200 245
>>3104516

Чуток с опозданием, но всё же.

> Эксепшины, как я сказал - я не кидаю. Иногда - ловлю. Сам я возвращаю Error.
А какой смысл кидать "чистые" эксепшены?
У меня сейчас домен/сервис кидает эксепшен, но в фильтре его ловлю и возвращаю ErrorViewModel.
Какую библиотеку для фп используешь?
Аноним 01/04/24 Пнд 22:07:19 3109215 246
image.png 22Кб, 865x349
865x349
>>3109070
>>3109060
В том году вот на эту хуйню повёлся.
Думал мол Епта че за хуйня бля, как так то нахуй? Вы еще вот так просто сделайте ("Mike", 32) что бы вообще хуй разобрать было что это и зачем
Аноним 01/04/24 Пнд 22:39:39 3109239 247
Аноним 01/04/24 Пнд 22:50:39 3109263 248
>>3109239
А разве не анонимный класс?
Аноним 01/04/24 Пнд 22:54:32 3109266 249
Аноним 01/04/24 Пнд 22:55:09 3109267 250
>>3109266
Точно. Но и кортеж не получается. Выдаёт ошибку.
Аноним 02/04/24 Втр 12:54:13 3109754 251
У меня есть лист с объектами. Эти объекты я засовываю в несколько таблиц по разным параметрам объекта. По факту, один объект может быть одновременно лежать в нескольких таблицах. При всём при этом, я хочу, например, чтобы какое-то поле объекта в разных таблицах имело разные значение. Скажем, в одной таблице поле age у этого объекта равно 21, а в другой 25, но если я изменяю значение в поле объекта, то оно меняется во всех таблицах, так как по-сути ссылки указывают на один объект. Я правильно понимаю, что единственный способ это создать копии объектов для каждой отдельной таблицы и изменять их поля отдельной для каждой таблицы? Других вариантов нет?
Аноним 02/04/24 Втр 13:20:31 3109790 252
>>3109754
> Других вариантов нет?
Есть.
Изменения в таблицу вносишь специальным методом базы данных (коммит). Пока изменения не внесены, в таблице данные измененные. Но когда коммитишь, они обновляются. Везде. Кроте тех таблиц, которые сами в состоянии редактирования.

Если же ты хочешь хранить две версии данных, то да, ты всё правильно понял. Одна тадлица - один набор данных. Хочешь другой? Делай другую таблицу.
Аноним 02/04/24 Втр 15:27:31 3109950 253
>>3109754
>По факту, один объект может быть одновременно лежать в нескольких таблицах. При всём при этом, я хочу, например, чтобы какое-то поле объекта в разных таблицах имело разные значение. Скажем, в одной таблице поле age у этого объекта равно 21, а в другой 25
Звучит как какой-то архитектурный пиздец.
Аноним 02/04/24 Втр 19:58:48 3110218 254
234234234.png 113Кб, 935x753
935x753
Здарова, у меня вопрос к знатокам.
На пикриле код моей слот-машины и при написании этой параши у меня возникли два вопроса:

Первый вопрос. Я хотел использовать try - catch обработку исключений при вводе ставки, дабы пользователь не мог ввести текст, отрицательное число или ещё какое говно, но в таком случае переменная ставки становится локальной для этого {трайкэтч блока ебанного} и я не могу использовать её дальше.
Как ещё можно запретить пользователю вводить всякую хуйню которая не должна быть введена?
Я там чуть дальше проверил введено ли GO, но там текст который должен быть введён заранее известен, так что там это можно было перехватить вручную.

Второй вопрос.
Как теоретически можно было написать эту программу без goto?
Мне аноны выше уже пояснили и я в интернете посмотрел, что если goto используешь то ты лох ебанный. А по мне так охуенная команда, чем её заменить в данном случае вообще не ебу. Видимо я лох ебанный.
Сорян за тупизм если чё.
Аноним 02/04/24 Втр 20:10:16 3110227 255
>>3110218
Какие забавные деды из замшелого прошлого к нам в тред залетают.
> Первый вопрос.
Иди нахуй.
> Второй вопрос.
Иди иди, не оглядывайся.
Аноним 02/04/24 Втр 20:11:46 3110231 256
>>3110218
try - catch только для непредвиденных исключений.
Проверка ввода делается в if если ввёл хуйню пишем что ввёл хуйню и просим ввести еще раз.
Если у тебя конструкция if else превращается в if else else if то нужно использовать switch

ну и goto у тебя тут для возврата к началу игру, это делается через while
Аноним 02/04/24 Втр 20:12:30 3110232 257
>>3110218
Ах да, ещё вопрос.
Почему мне не позволяют написать if (slot0 & slot1 == slot2)? Всё же логично: если А и Б равны В, то делается то то. В чём проблема?
Ошибочник говорит int в bool не удаётся ему преобразовать, схуяли ёпта? Чё он вообще имеет ввиду?
Аноним 02/04/24 Втр 20:29:34 3110243 258
>>3110232
> если А и Б равны В
> if (slot0 & slot1 == slot2)
Удивительно, что у тебя с таким подходом вобще не всё красное.
& - это оператор побитового умножения
С учётом приоритета операций получается
if (slot0 & (slot1 == slot2))
slot0 - int
slot1 == slot2 - bool
Получается хуйня.
То, что тебе надо, это if (slot0 == slot2 && slot1 == slot2)
Аноним 02/04/24 Втр 20:39:01 3110246 259
image.png 118Кб, 693x746
693x746
0b27d63a9ce8cbd[...].png 492Кб, 700x617
700x617
>>3110218
>Как ещё можно запретить пользователю вводить всякую хуйню которая не должна быть введена?
Можно использовать TryParse и сделать ставку uint
Можно читать посимвольно и не давать вводить ничего кроме циферок
Можно вынести в метод, и внутри метода try-catch, а результат уже возвращать из него
Вариантов много.

> Как теоретически можно было написать эту программу без goto?
Ну, я бы как на прикриплейд...
Но мне и твой вариант норм на самом деле.
Аноним 02/04/24 Втр 20:41:49 3110247 260
>>3110246
Да, проверку что деняк на ставку не хватает - забыл.
Аноним 02/04/24 Втр 21:43:11 3110271 261
>>3110231
Пасиба за пояснения.

>>3110243
Пасиба за пояснения, я на удивление понял что ты написал. В учебнике по которому я эту парашу изучаю был приведён список приоритета операторов, но я подумал что автор в залупу лезет и это не особо важно. Мол, как в математике 4 класса, сначала всё что в скобках, потом умножение/деление, потом +-, мне этого хватит, чё там сложного, а хуй там.
Написал себе на листочек приоритеты и наклеил на стол чтобы всегда были перед глазами.

>>3110246
Пасиба за пояснения. Проверку денег на ставку я и в своей проге забыл, так что всё норм.
Аноним 02/04/24 Втр 22:09:43 3110282 262
234234234.png 100Кб, 966x709
966x709
>>3110271
Всё пофиксил по вашим советам, дружба с goto всё, теперь while мой лучший друг.
Аноним 02/04/24 Втр 22:12:51 3110284 263
Аноним 02/04/24 Втр 22:32:14 3110295 264
>>3110282
Запомни как ты сделал.
Когда дойдёшь до изучения классов то переделай это всё на классах.
Аноним 02/04/24 Втр 23:05:32 3110314 265
image.png 27Кб, 558x211
558x211
>>3110218
>Как ещё можно запретить пользователю вводить всякую хуйню которая не должна быть введена?
Аноним 02/04/24 Втр 23:10:21 3110317 266
>>3110271
>Пасиба за пояснения, я на удивление понял что ты написал. В учебнике по которому я эту парашу изучаю был приведён список приоритета операторов, но я подумал что автор в залупу лезет и это не особо важно. Мол, как в математике 4 класса, сначала всё что в скобках, потом умножение/деление, потом +-, мне этого хватит, чё там сложного, а хуй там.
>Написал себе на листочек приоритеты и наклеил на стол чтобы всегда были перед глазами.
Вот это правильный подход. Люблю таких ребят которые не ноют в стиле "анон посоветуй гайдов как изучить язык", а с ноги влетают, начинают делать что-то сами и разбираются по ходу.
Аноним 03/04/24 Срд 03:48:40 3110401 267
>>3110271
нормальные люди ставят скобки, а не выделываются.
Аноним 03/04/24 Срд 06:31:55 3110442 268
Аноним 03/04/24 Срд 07:01:54 3110453 269
>>3110442
Забыл его убрать (хотя и с ним работать будет)
Аноним 03/04/24 Срд 09:19:26 3110519 270
Аноним 03/04/24 Срд 09:27:47 3110527 271
>>3110314
На первый взгляд выглядит нормально, но когда попытаешься сделать сделать что-то более крутое, у тебя будет цикл, вложенный 10 раз.
По хорошему оно делается через state machine.
Аноним 03/04/24 Срд 10:10:20 3110560 272
>>3110527
Ты че такой душный. Чел только учится, ему хотя бы понять как TryParse работает, а ты уже про стейт машину задвигаешь.
Аноним 03/04/24 Срд 12:39:58 3110648 273
>>3106517
>Конкретно с дикшинари - он же просто удобнее в куче случаев.
У него KeyValuePair ридонли, что вечно ставит палки в колеса.
Аноним 03/04/24 Срд 21:24:36 3111088 274
>>3106345
Нет никакой связи. Про словарь ты пишешь чушь. Это один из базовых элементов и используется немногим реже чеиюм лист
Аноним 03/04/24 Срд 23:05:00 3111159 275
Двачую всех, кто высказался выше против словаря. ИМХО гораздо выгоднее описать свою структуру с нужными полями и завести
> new List<MyStruct>()
Чем ебаться со словарём. Это какой-то пережиток прошлого. Да, когда-то словари были крутой инновационной идеей
> сматрити, у меня есть ассоциативный массив, в котором вместо индексов свой тип данных!
> > охуеть! крута!
Но время их прошло.
Аноним 03/04/24 Срд 23:19:28 3111163 276
1712175568268.png 66Кб, 1014x772
1014x772
Сап, шарпач!
Посоветуй хороший годный редактор ХМЛ файлов?
А я пока что посоветую пикрелейтед. Недавно нашёл и доволен.
Аноним 04/04/24 Чтв 02:34:09 3111274 277
Объясните концепцию ActualWidth в WPF.

Этот параметр ридонли, но кто имеет право его менять и как меняет? Я хочу себе подобное реализовать, чтобы пользователь имел доступ к Width, а если значение double.NaN, то родительский элемент меняет ActualWidth.

Или может быть дочерний элемент подписывается на события родителя и сам меняет ActualWidth? Непонятно. По идее ридонли нельзя менять снаружи или есть какие-то трюки?
Аноним 04/04/24 Чтв 02:41:13 3111281 278
>>3111163
это что такое?
>microsoft.github.io
есть
>github.com/microsoft
Аноним 04/04/24 Чтв 03:02:01 3111293 279
2024-04-0402-51[...].png 20Кб, 645x423
645x423
>>3111163
Тут нет подсказок, никакой новой информации. Мне кажется, что стандартный редактор вижуал студии куда интереснее.
Как вообще с этим работать когда у тебя есть биндинги? Не показывает какой цвет указан и не дает его отредактировать в колорпикере. Не показывает какие вообще есть доступные свойства и значения у класса. Нет подсветки ключевых слов.

Я так понял ты его установил потому что сложно читать в обычном виде? На самом деле быстро привыкаешь. И не стоит обращать на форматирование в том же MDSN - оно уебанское и нечитаемое.

Знаю что есть дополнение, которое позволяет сортировать порядок свойств в xaml. К примеру, чтобы свойство Name всегда шло первым. Это позволяет не рыскать каждый раз глазами в поисках нужного свойства. Можно вроде настраивать какие свойства переводить на следующую строку.
Аноним 04/04/24 Чтв 06:06:52 3111322 280
>>3111159
Ты совсем тупой что ли?
Словарь - это когда тебе элемент надо находить за O(1), а не O(n).
Пишут блять свои листы, а потом запрос несколько минут обрабатывается вместо 500 мс.
Аноним 04/04/24 Чтв 08:43:42 3111340 281
>>3111159
А потом у таких как ты программы жрут ресурсы и работают медленно.

Когда ты вызываешь list.FirstOrDefault(x=> myStruct.Id == id), то программа тупо проходит по всему списку, пока условие не совпадет, хоть до конца списка. А если список огромный?
Аноним 04/04/24 Чтв 10:20:26 3111405 282
>>3111159
Словари индексируются и его использование это требование по оптимизации к конкретной задаче.
Аноним 04/04/24 Чтв 10:48:13 3111439 283
>>3111340
И поэтому, кстати есть FirstOrDefaultAsync()
Аноним 04/04/24 Чтв 10:53:03 3111447 284
>>3111439
Это вообще из мира iqueryable
Аноним 04/04/24 Чтв 12:55:29 3111602 285
Аноним 04/04/24 Чтв 13:14:51 3111622 286
>>3111602
Бенчмарк спорный. Т.к. там по факту используется статика ничего относящегося к конкретной таске не создается. Компилятор может их как угодно наоптимизировать. Я бы еще внутрь какую-нибудь реальную работу запихнул.
Аноним 04/04/24 Чтв 13:18:01 3111627 287
big boy.png 236Кб, 1456x782
1456x782
Аноним 04/04/24 Чтв 13:40:02 3111642 288
>>3111627
Это хорошо или плохо...
Аноним 04/04/24 Чтв 13:48:15 3111651 289
Аноним 04/04/24 Чтв 14:10:21 3111675 290
>>3111602
ему там пояснили в первом коменте.
Аноним 04/04/24 Чтв 14:18:15 3111683 291
нраица.png 112Кб, 358x395
358x395
>>3111293
У меня пекарня дедушкина не тянет студию. Только вс-код, в котором нихуя нет. Только дополнение на автозакрытие тегов, которое помогает, но не сильно. Такшта вотета в древовидном виде выглядит вполне сносно, жаль что автодополнения нет, но названия элементов можно чекать по схеме, если она есть и если её подключить. (А её тоже нет, лолкек).

Алсо в этом редакторе любой хмл формат можно открывать. Например, я для прикола файл манифеста открыл и он мне показал ошибки, которые я исправил (один копипащеный тег был скопипащен без объявленного неймспейса).

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

И что самое главное - это оффлайн-приложение. С онлайн-редакторами на дедушкиной пекарне тоже не уедешь далеко.
Аноним 05/04/24 Птн 09:26:33 3112492 292
>>3110231
>Если у тебя конструкция if else превращается в if else else if то нужно использовать switch

А нужно ли?
Аноним 05/04/24 Птн 10:36:37 3112532 293
>>3112492
Не нужно. Switch - антипаттерн.
Аноним 05/04/24 Птн 14:50:45 3112772 294
Аноним 05/04/24 Птн 16:13:34 3112875 295
Как узнать настоящее, окончательное, фактическое имя шрифта в wpf? Пиздят все, и программа ддя просмотра шрифтов винды, и классы шрифтов из wpf и винформ. В основном проблема в том, что логика по которой толщина шрифта является частью его имени не поддается объяснению. При открытии шрифта в винде толщина может писаться рядом с названием, но в впф шрифт не применится пока не укажешь имя без нее, а бывает наоборот - имя без толщины, но работает только с ее указанием
Аноним 05/04/24 Птн 16:37:27 3112913 296
Аноны, подскажите, никак не могу сообразить. Вот у меня вьюмодель окна, и есть еще вьюмодель приложения с общими для всего приложения командами. Как бы мне пробросить команды из общей модели во вьюшку? Использую реактивюи. Пока что делаю втупую вот так:
> ICommand ExitCommand = ReactiveCommand.Create( () => AppVM.ExitCommand.Execute(null) );
Но это же форменное безобразие так делать. Так мне не дадут.
Аноним 05/04/24 Птн 16:47:43 3112921 297
>>3112913
Передавай в конструкторе, всегда так делаю
Аноним 05/04/24 Птн 16:50:06 3112924 298
>>3112921
Я уже пробовал передавать в конструкторе. Кнопка тупо выключена оказывается.
Аноним 05/04/24 Птн 16:53:58 3112928 299
>>3112924
Ты делаешь что-то не так
Аноним 05/04/24 Птн 18:08:04 3113016 300
>>3112921
Таскать по конструкторам по всей программе тот еще гемор
Аноним 05/04/24 Птн 18:16:14 3113025 301
>>3113016
>>3112928
Тем более проблема в чём-то другом. Кнопка прибинженная к этой команде остаётся выключенной, стало быть, там каким-то мистическим образом срабатывает кэн экзекют, но его нет! Команда создана как <юнит, юнит>
Аноним 05/04/24 Птн 18:40:59 3113057 302
>>3113016
Зато надежно, ничего вдруг не сломается. Да и лично я не видел больше десятка вложенностей вью моделей
Аноним 05/04/24 Птн 18:45:56 3113065 303
>>3113057
и в итоге по конструкторам ходит 100500 вот таких вот параметров.
и это еще если не используется вьюмодельлокатор какой нибудь
Аноним 05/04/24 Птн 18:55:16 3113075 304
>>3113065
Альтернатив, увы, нет
Аноним 05/04/24 Птн 18:58:15 3113079 305
>>3113075
нет с точки зрения чистого кода. А не совсем нет
Аноним 05/04/24 Птн 20:12:59 3113169 306
>>3113079
Карочи, послушав ваши ответы, я нихуя нипонил. Делать предлагается так:
модель - содержит метод Exit()
главная вьюмодель - содержит метод модели в который загружает инстанс модели и работает с ним, в том числе создает у себя команду, ExitCommand(model.Exit) для своего вью.
дочерняя вьюмодель - в конструкторе получает модель как обязательный параметр и работает с ней, в том числе создаёт у себя аналогичую команду.

То есть, мне не нужно вообще вьюмодели друг на друга ссылать. Достаточно ссылать им модель.
Аноним 05/04/24 Птн 20:15:31 3113170 307
>>3113169
он к тому что ты должен таскать инстанс команды куда тебе надо и там присваивать команде во вьюмодели. Тогда вид будет видеть именно правильный инстанс и реагировать на него

так что НЕ создает аналогичную команду, а использует ту из конструктора.

другой путь - глобальный контекст, ты им не ходи.
Аноним 05/04/24 Птн 20:30:19 3113180 308
>>3113170
> так что НЕ создает аналогичную команду, а использует ту из конструктора
Блять. Я с этого и начал. >>3112913 >>3112924
> Я уже пробовал передавать в конструкторе. Кнопка тупо выключена оказывается.

Я тут ещё загуглил. Может проще во вьюшке в хамле дополнительно датасорс указать другую вьюмодель для конкретного элемента?
Аноним 05/04/24 Птн 20:31:37 3113182 309
>>3113170
> другой путь - глобальный контекст, ты им не ходи.
Это понятно. Глобальная вьюмодель выглядит удобной, но это же год обджект форменный.
Аноним 05/04/24 Птн 20:41:37 3113185 310
>>3113180
Ну смотри. Обычно нет магии - если вьюха(и) видит один инстанс команды, то она за ним и следит.
Но что такое эта реактивная команда под капотом? я лично не знаю - я для авалонии использовал подход, что и для WPF. Я уважаю реактивный подход...но на андроиде или подобном, а в десктоп приложухах только мешает.

По идее авалония знает про реактивность и может кастовать ICommand до реактивной команды и подписываться на нее. А что если подписки 2 то как это? а хз. Может ты на это наткнулся, а может где то в другом у тебя проблема и вьюха видит не тот инстанс что ты думаешь. Влепи конвертер и увидишь

>>3113182
Это не совсем про это. Типичные проблемы - нужно таскать обязательные параметры (вот эта команда тому пример), потом лайфтайм, потом мессенджер (ну да можно общий и токеном рулить, а вот мелкие сделали что ты указываешь ИНСТАНС мессенджера), потом диалогсервис (самая гадская штука кстати).
В итоге все это объединяешь в какой нибудь Context и вот у тебя как в андроиде - везде ходит Context. и все на тебя смотрят и ругают что у тебя вьюмодели прибиты гвоздями в иерархии (а ты смеешься с их потуг управлять временем жизни подписок и работы с диалогами)
но безумие не остановить.
И раз ты передаешь везде контекст, то... а ведь можно сделать общие вьюмодели для раздела....и вообще в них логику вытащить (это ж болезнь вьюмоделей).... и вообще разве нельзя на них прямо биндиться из вьюхи без всяких FindAncestor? да можно конечно...и вообще это не рутовые модели, а этакие....ммм...presenter-ы.

не не не, передавай в конструкторы
Аноним 05/04/24 Птн 21:18:03 3113217 311
1712341083714.png 37Кб, 734x296
734x296
1712341083738.png 75Кб, 1021x575
1021x575
1712341083744.png 17Кб, 979x120
979x120
>>3113185
> передавай в конструкторы
Вот я сделял как сам написал выше. Этот пикрелейтед 1 - это тот контекст как ты пишешь?
Аноним 05/04/24 Птн 21:23:54 3113221 312
>>3113217
Не вижу у тебя на скринах никакой передачи чего либо в конструкторы.

А мой контекст - у меня все вьюмодели принимают контекст в котором они существуют. (ну кроме простых вьюмоделей которым ничего из контекста не нужно)
Туда я прячу лайфтайм и это дает удобный запуск диалогового окна без мороки поиска родителя (что особенно жопа если у тебя вьюха)
Аноним 05/04/24 Птн 21:40:52 3113243 313
1712342452468.png 82Кб, 929x569
929x569
1712342452499.png 10Кб, 466x84
466x84
1712342452503.png 10Кб, 459x109
459x109
>>3113221
> Не вижу у тебя на скринах никакой передачи чего либо в конструкторы.
А вот так? Теперь это контекст?
Аноним 05/04/24 Птн 21:50:41 3113252 314
Если модель это контекст, то тогда MVVM это CVVM! Context - View - ViewModel! Мы придумали новый паттерн!
Аноним 05/04/24 Птн 21:56:05 3113258 315
>>3113243
нет конечно. это просто ты передал нужное вьюмодели через параметр. Каждой вьюмодели что то нужно или не нужно.

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

я не одобряю это, но в обычном подходе жить сильно сложнее
но тебе это не надо.
Аноним 05/04/24 Птн 21:56:51 3113259 316
>>3113258
А для общего развития?
Можно примерчик?
Аноним 05/04/24 Птн 22:06:33 3113262 317
>>3113259
Какое уж тут развитие, это деградация. Тесты мне не нужны, а вот скорость рождения фич крайне важна.

но идея банальная же - заводишь класс Context, куда складируешь все нужно и таскаешь везде
каждая вьюмодель у меня так
public class MyVm(Context parent) : ViewModelBase(parent)

если рождаю вложенные то так
new ChildVm(Context())
а если нужно переопределить что то то переопределяю
new ChildVm(Context(childLifetime))

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

туда же в контекст можешь впихнуть и AppModel/State и достать его в любом месте. Добавить где то на уровне что то еще, что будет видно только во вложенном.

В основе всего у меня лайфтаймы - я их обожаю. С них все началось. Ну и гемор с окнами добавил - вот я плюнул и теперь контекст везде
Такой же подход без контекста слишком геморный и в итоге "остался только один (подход)"

но это не по канонам вовсе, а "мне за тесты не платят, а за фичи платят, в жопу чистоту кода"
ну почти - если он не нужен, то он и и не нужен.
Аноним 05/04/24 Птн 22:09:15 3113267 318
>>3113252
MVVM - это высер менеджеров из микрофофта, им надо было впарить новую версию вижуал студии, вот и навалили с подливой. По сути же это обычный MVC, где модель объединили с контроллером, а вью написали на уебанском xml. В ангуляре компоненты работают точно так же, но никто не называет это новым паттерном Component-Model-Typescript.
Аноним 05/04/24 Птн 22:12:44 3113268 319
>>3113267
ничего подобного. это не MVC, потому что в MVC никто не держит в себе состояние визуальной части, а "рисует само себя" в итоге логику состояния вида нужно дублировать если кросс
Аноним 05/04/24 Птн 22:28:17 3113282 320
>>3113268
Дай угадаю: ты учился по методичкам от микрософт?
Суть mvc очень простая: декларативно описывать интерфейс, чтобы можно было просто написать юнит тесты. Все. Если тебе при нажатии на чекбокс надо показать панель и ты хочешь протестить эту логику, ты вместо вызова panel.Show() возващаешь дтошку с полем IsPanelVisible и биндишь его на свойство Visible у контрола. В тестах ты пишешь Assert.True(vm.IsPanelVisible) и все. Ни о каком хранении состояния в паттерне mvc речи нет.
Аноним 05/04/24 Птн 22:33:16 3113288 321
>>3113268
> в итоге логику состояния вида нужно дублировать
Двачую.
>>3113262
Ну примерно понял. Я днём что-то похожее начал ваять, но ничего не заработало. А раз это деградация, то и ладно, оставим. Я прямо сейчас выработал для себя будущую архитектуру, как видно из скринов, будет общая модель всего приложения. Максимально совместимая с юнит-тестами и всё такое. Она ничего не знает о вью/вьюмоделях, она просто делает свою работу: поднимает данные с диска, считает их, кладёт новые данные по пропертям. И всё. Она знает о существовании приложения и имеет методы сохранения данных перед шатдауном приложения.
С другой стороны есть несколько вьюмоделей, которые знаюо о модели, получая её в конструкторе. Кроме стартовой вьюмодели самого приложения, она поскольку стартовая, то она и создаёт модель, и распихивает её по всем остальным. И тут возникает вопрос... Так, блять... Падажжи...
Аноним 05/04/24 Птн 22:37:26 3113291 322
>>3113288
У меня получается два год-объекта, которые знают обо всех окнах, и при этом дублируются: модель и кодбихайнд приложения. И как тогда быть?
Аноним 05/04/24 Птн 22:38:49 3113293 323
>>3113288
Вместо того, чтобы писать контроллеры в простом анемик стиле, как в микросервисах, ты нагородил архитектуру ради архитектуры и уже сам запутался.
Аноним 05/04/24 Птн 22:40:13 3113294 324
>>3113259
также биндинги это своеобразные подписки на состояние
а значит всякие там реактивные штуки профита не несут.
это понятно что реактивное свойство оно как событие и на него можно подписаться, фильтровать и там того этого...и что? часто ли это нужно? нет. обычно INPC и "вид сам разберется" достаточно.

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

>>3113282
Ты чет путаешь. Биндинги это про MVVM. И потому что именно нужно хранить состояние. Точно так же как и храним его в MVU(I)
в этом сама суть этих паттернов
и MVC так хреново подходит для десктопа, что там юзается MVP

>>3113288
ну как деградация. Просто это не по канону для некоторых типа "как я могу эту вьюмодель передать куда то еще ведь она привязана к контексту, типа расшарить". На что можно спросить - "а зачем ее передавать, это как с оператором goto - хз где вы его используете"
Просто для тестирования же нужно этот контекст заполнить, типа он как "сервис локатор" (на самом деле нет)
Так что все это спорно очень.
То есть мввм фреймворки так не делают. Ну так они и лайфтаймы не делают как бы. У МВВМ фреймворков обычно weak путь, а у меня исключительно стронг - строг подписки, все стронг. Нет проблем с "а кто вызовет Dispose" - окно или воркспейс закрылся и все вьюмодели сдохли и сразу же прекратили работу. Без лайфтайма удачи тебе кенселить операции.
Аноним 05/04/24 Птн 22:45:26 3113298 325
>>3113288
поясню на примере
ты открыл немодальное окно. там у тебя само собой рут модель и далее целый граф дочерних вьюмодей. В каком то уровне вложенности ты начинаешь операцию...и закрываешь окно. Как ты прервешь эту операцию? Как ты свяжешь CancellationToken с закрытием окна?

Каскадно пропишешь Dispose? Но в MVVM в WPF так не принято, потому что можно забыть вызвать поэтому обычно полагаются на weak во вьюмоделях.

Привяжешься к закрытию окна, создаешь CancellationToken - и этот токен протащишь по всем уровням как своеобразный лайфайтам - ну вот тебе лайфтайм ака контекст ( и ты пришел к тому же что и я)
Аноним 05/04/24 Птн 22:59:48 3113310 326
>>3113293
> в простом анемик стиле, как в микросервисах
Любопытная инфа. Почитал. (Нихуя не понел, правда).
> ты нагородил архитектуру ради архитектуры и уже сам запутался
Никакой путаницы, щас просто надо подумать, где прописать хранение окон.
>>3113294
> Без лайфтайма удачи тебе кенселить операции.
Лайфтаймы еще предстоит понять, а тут вон уже анемик подкинули выше.
>>3113298
> В каком то уровне вложенности ты начинаешь операцию...и закрываешь окно. Как ты прервешь эту операцию? Как ты свяжешь CancellationToken с закрытием окна?
> немодальное окно
Нуууу, например: Все окна привязаны к БД (необязательно настоящая база данных, просто датасет, умеющий данные СоздаватьЧитатьОбновлятьУдалять), а значит, закрытое где-то окно послало в базу команду отмены. А БД эта, опять же лежит в модели, например как обсервабле коллекшон.
Аноним 05/04/24 Птн 23:09:58 3113318 327
>>3113310
>Лайфтаймы еще предстоит понять
а понять их просто. тот же CancellationToken суть лайфтайм просто немного с другой семантикой. Типа "токен отмены". Но взгляни на него как на "токен отмены существования компонента" и таскай его по конструкторам и вот тебе лайфтайм. Каждый кто хочет завязаться на время жизни этого токена должен добавить себя к нему через Register и когда токен протухнет - все они помрут.

Настоящие лайфаймы просто сразу удобнее - знают про Dispose, позволяют правильно терминироваться (нужно в обратном порядке диспозить, а не абы каком), SequentialLifetime (вызови просто Next и старый умрет, новый родится) - из за чего родился класс и SequentialCancellationSource и удобно же блин, ну и прочий разный сахар с Try позволяющий не выполнять что то если лайфтайм уже умер, запускать таски не позволяя сдохнуть лайфтайму и так далее.

В разрезе вьюмоделей достаточно что вьюмодель живет в каком то лайфтайме (нет отличий от CancellationToken) и передает свой лайфтайм во все подписки и детям. Если лайфтайм того, то все подписки автоматически отпишутся и весь граф диспознется

>Нуууу, например: Все окна привязаны к БД
жуть какая то. но опять же - вьюмодель что заинтересована в этом знании должна как то об этом узнавать. А значит ты притащишь или датасет этот через все вьюмодели или обертку над этим датасетом....ба. а это тот же лайфтайм просто под капотом дико реализованный.
Аноним 05/04/24 Птн 23:22:09 3113323 328
1712348529544.png 30Кб, 802x152
802x152
1712348529558.png 51Кб, 809x346
809x346
>>3113318
Ладно, подумаем над этим завтра. Всем спокойной ночи. Зацените ещё вот:
>>3107195
> Можно ли сделать ещё короче?
Не то чтобы короче, но в стиле WhenAny
Аноним 06/04/24 Суб 06:08:15 3113427 329
А что будет, если я буду ожидать результата через await метода, возвращающего taskCompletionSource.Task, и во время ожидания задача будет отменена?
ASP NET Аноним 06/04/24 Суб 09:06:50 3113458 330
Двач 11.png 25Кб, 1639x386
1639x386
Двач 12.png 68Кб, 660x411
660x411
Двач 13.png 45Кб, 840x384
840x384
Сап двач. Изучаю ASP. NET и столкнулся с проблемой: добавляю NuGet пакет для расширения Entity Framework для подключения к базе данных, мне выдаёт ошибку из-за того, что VS не видит "UseSqlServer", удаляю конкретно этот пакет - скачиваю другой, в итоге "UseSqlServer" видит, но теперь выдаёт ошибку в других местах, если скачать оба пакета, то всё равно не работает. Как мне быть?

https://metanit.com/sharp/aspnet6/12.1.php пытаюсь по этой статье сделать
ASP NET Аноним 06/04/24 Суб 09:07:27 3113460 331
Двач 21.png 51Кб, 1609x415
1609x415
Двач 22.png 58Кб, 1511x287
1511x287
>>3113458
Продолжение, это со вторым пакетом
Аноним 06/04/24 Суб 09:12:48 3113462 332
Двач 3.png 19Кб, 1632x342
1632x342
Двач 31.png 25Кб, 637x82
637x82
>>3113458
>>3113460
Как в статье пакет тоже не видит "UseSqlServer"
Аноним 06/04/24 Суб 10:56:58 3113566 333
image.png 44Кб, 754x319
754x319
image.png 23Кб, 798x93
798x93
Аноним 06/04/24 Суб 14:16:51 3113809 334
>>3111683
>У меня пекарня дедушкина не тянет студию.
Прими мои соболезнования. Но на самом деле это штука слабо лучше текстового редактора. Делать что-то сложное на нем я себе не представляю, особенно когда у тебя ресурсы в разных документах.

Все остальное в студии тоже есть.
Аноним 06/04/24 Суб 14:21:05 3113812 335
>>3112875
Мне тоже интересен этот вопрос. Скоро коснется и меня.
Возможно нужно почитать доки, может есть какие-то стандарты.

Подозреваю, что есть шрифты, где толщина является частью названия. Это буквально их название, например ArialBlack.
Аноним 06/04/24 Суб 14:27:52 3113818 336
>>3097760 (OP)
А на C# что-то пишут кроме десктопа (в России)?
Аноним 06/04/24 Суб 14:28:32 3113820 337
>>3113025
Кен экзекьют параша полная. Она выполняется один раз при загрузке и больше никогда. Я ее всегда возвращаю True, либо делаю метод, который принудительно дергает кен экзекют.

Еще была мерзотная ситуация, когда то ли фокус не пришел на кнопку толи еще что, но кнопка или меню тупо становились серыми даже с кен экзекьют = true. Каждый раз с этим борюсь и каждый раз забываю сделать себе пометку о причинах. Возможно что-то связанное с порядком загрузки.
Аноним 06/04/24 Суб 14:33:22 3113827 338
Аноним 06/04/24 Суб 14:42:00 3113833 339
>>3113820
Авторы ReactiveUI исправили это недоразумение (уж не сочтите за рекламу, можете пользоваться комюнити тулкитом, всё нормально, или даже своим велосипедом, никто не настаивает).
Они подают на вход своих команд Observable<bool> вместо bool и он внутри тулкита хитро подписывается где надо на обновления, и тебе ничего дёргать не нужно. Это я вычитал напрямую в их документации. И по первоначальным тестам всё действительно работает.
Правда у них там висит предупреждение, что работает это всё только в рамках одного потока, или контекста или ХЗ чего, и там сказано, что если вам надо вы можете дополнительно что-то там сделать.
>Warning For performance reasons, ReactiveCommand does not marshal your canExecute observable to the main scheduler. You almost certainly want your canExecute observable to be ticking on the main thread, so be sure to add a call to ObserveOn if necessary.
Аноним 06/04/24 Суб 14:46:20 3113838 340
Как реализовать IClonable для наследников класса?

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

Это что же, мне копипастить метод с клонирваонием всех свойств в кадом наследнике?

Если же я создаю реализую IClonable в базовом классе, то он возвратит мне экземпляр не того класса, который я ожидаю.

Тут должно быть что-то вреде дженерик Clone<T>() или Clone(BaseClass target).
Аноним 06/04/24 Суб 14:48:08 3113840 341
>>3113820
>Кен экзекьют параша полная
смотря где. Если WPF, то выполняется при потере фокуса или ручном вызове "инвалидируй все команды"

В авалонии я сам писал этот CommandManager вроде. Конечно правильнее когда инвалидируются только зависимые команды, но это уже геморно и подходит только для реактивной модели.
Аноним 06/04/24 Суб 14:52:54 3113845 342
Шарпачи, поясните за .NET MAUI, стоит ли его изучать хорошо или почитать для общего развития?
В чём плюсы по сравнению с веб приложением? Сейчас если что то надо с интерфейсом я делаю asp net core приложение с мордой в вебе.
Аноним 06/04/24 Суб 14:54:14 3113849 343
>>3113845
если ты пишешь под андроид и тебе хочется писать и под десктоп - то, возможно, да
иначе нафиг
Аноним 06/04/24 Суб 14:58:23 3113852 344
>>3113818
Я бы сказал что гуй на нём редко пишут относительно сервисов просто с гуём больше проблем и вопросов.
А вообще всё что может джава то может и шарп и даже больше
Аноним 06/04/24 Суб 15:01:37 3113857 345
>>3113840
> В авалонии я
Напоминаю, что реактивностью там занимается Reactive UI и говорить следует о нём. Так-то его можно подключить к любому проекту и юзать. Хоть в консольной утилите с консольным интерфейсом.
Аноним 06/04/24 Суб 15:04:11 3113859 346
>>3113857
нет не так. вон обновил авалонию и отвалился Subscribe(Action)
тык мык - оказывается исчезла зависимость от пакета реактиве

так что Reactive UI это просто типа рекомендуемый дефолтный и (ну авалония его понимает), а не единственный. На авалонии можно писать с любым MVVM фреймворком, а не упарываться в любом к Reactive UI (и его особенности)
Аноним 06/04/24 Суб 15:11:46 3113873 347
>>3113859
> На авалонии можно писать с любым MVVM фреймворком, а не упарываться в любом к Reactive UI (и его особенности)
Верно и обратное
> На Reactive UI можно писать с любым MVVM фреймворком, а не упарываться в любом к авалонии (и её особенности)

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

Если кому интересно, вот: https://www.youtube.com/watch?v=bCryIp9HqIM
Аноним 06/04/24 Суб 15:25:08 3113894 348
image.png 30Кб, 540x430
540x430
Поясните за Task.Delay и Thread.Sleep.
Правильно ли я понимаю что Thread.Sleep блокирует поток и в случае если в этом потоке работает что то еще то это тоже остановится? А Task.Delay делает паузу только в текущей таске?
И стоит ли вобще делать паузы при ожидании чего то в while ?
Аноним 06/04/24 Суб 15:30:15 3113901 349
>>3113894
await Task.Delay это просто эквивалент любоего другого асинхронного метода типа await DoSomethingAsync()
если в DoSomethingAsync() влепить таймер и TaskCompletionSource то это и будет Task.Delay

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

в коде на скрине с await Task.Delay ты отпустишь поток и запланируешь продолжение в тредпуле
Аноним 06/04/24 Суб 15:44:05 3113927 350
>>3113894
Если у тебя метод асихронный, то делай сразу Task.Delay
Зачем тебе Thread.Sleep? Если в твоей асихронной функции не будет await, то она будет работать как обычная синхронная с блокировкой потока пока она не завершится.

>И стоит ли вообще делать паузы при ожидании чего то в while ?
Если это Delay, то почему бы и нет? Только вайл у тебя должен быть в асинхронном методе, который ты ожидаешь.
К примеру у меня была асинхронная функция цветовой пипетки, которая брала цвет пикселя с экрана через определенный период времени. Внутри был цикл while c Delay, который работал до тех пор пока пользователь на нажимал ЛКМ.

А еще вайл используют при ожидании завершения таска. Так я, например, делал асинхронное диалоговое окно.
Аноним 06/04/24 Суб 16:03:09 3113946 351
image.png 34Кб, 613x567
613x567
>>3113927
>>3113901
Сложна все эти таски хуяски. Я когда пишу то как то по наитию делаю(
Вот например, таска в while появится значение, это может быть что угодно. Стоит ли туда добавить паузу что бы while не прыгал и не проверял в if? Ведь значение хз когда появится и можно было бы сделать Thread.Sleep(1000);
Будет ли профит в виде свободного процессорного времени?
Аноним 06/04/24 Суб 16:10:28 3113954 352
Поясните где проходит граница между моделью и вьюмоделью? И то и другое требует реализации INPC, и к тому и другому может обращаться вью. И то и другое может внутри содержать команды, какую-то логику и кучу вложений.

Для примера, параметры приложения это модель или суб-вьюмодель основной модели? По своему объему похожа на отдельную вьюмодель, к которой обращается отдельное окно.
Но в то же время что мешает ей быть моделью? Все равно доступ к параметрам идеть через основную вьюмодель.
Аноним 06/04/24 Суб 16:11:42 3113956 353
>>3113946
нет ничего сложного в тасках
таска просто объект который показывает статус какой то работы и позволяет дождаться (читай подписаться и запланировать продолжение) окончания таски

и ты снова делаешь фундаментальную ошибку - не нужно проверять "появилось ли значение". Нужно сделать какой то вариант уведомления типа AsyncManualResentEvent и тогда после установки значения дернуть его. работает как обычные не-асинк вейтхендлы - принцип одинаковый.
Аноним 06/04/24 Суб 16:15:15 3113959 354
>>3113954
вьюмодель содержит состояние "нам нужно отобразить это". На INPC не смотри - это не исключительно видовое, о чем даже неймспейс интерфейса INPC говорит.

И да, ты не обязан создавать вьюмодель чтобы обернуть/перенести_данные с модели
Тут просто главное не забывать про мемори лики (знать подводные камни)

параметры приложения - модель.
Аноним 06/04/24 Суб 16:18:32 3113965 355
Двач 4.png 292Кб, 1319x319
1319x319
Двач 42.png 25Кб, 1102x294
1102x294
>>3113566
Спасибо

Помогите кто-нибудь перевести код с Первой пикчи на новую версию ASP, где нет класса Startup, а есть только класс Program. Я пытался сделать с помощью метанита, но нихрена не работает, а у меня уже мозги кипят. Вот сам код:

string path = Environment.CurrentDirectory;
var _confstring = new ConfigurationBuilder().SetBasePath(path).AddJsonFile("DbSettings").Build();
builder.Services.AddDbContext<AppDBContent>(options => options.UseSqlServer(_confstring.GetConnectionString("DefaultConnection")));

Мне нужно подключится к файлу "DbSettings.json" и к строчке "DefaultConnection", который находится в самом пространстве имён проекта
Аноним 06/04/24 Суб 16:19:29 3113966 356
>>3113965
На метаните подключаются к appsettings.json, а мне нужен другой файл
Аноним 06/04/24 Суб 16:23:43 3113968 357
>>3113820
> Кен экзекьют параша полная. Она выполняется один раз при загрузке и больше никогда. Я ее всегда возвращаю True, либо делаю метод, который принудительно дергает кен экзекют.
Вообще-то все правильно. Как и у любого observable свойства ты должен сам вызывать обновление состояния команды, добавив метод NotifyCanExecuteChanged, который внутри будет вызывать событие CanExecuteChanged. А вариант с CommandManager в wpf это, простите меня, полная залупа, которая вызывает метод canexecute когда надо и не надо, забивая на производительность.
Аноним 06/04/24 Суб 16:32:40 3113977 358
>>3113946
>Ведь значение хз когда появится
Ознакомься с токенами завершения. Есть возможность сделать событие когда таска завершится.

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

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

А есть еще токен завершения. Я его использовал в асинхронном диалоговом окне. В чем суть проблемы: пока окно не закрылось, не должен выполняться дальнейший код, но при этом я не должен был блокировать работу в первом окне. Что я делал? Я в асинхронном методе Show запускал окно и асинхронно ждал, когда окно установит статус что оно завершается, и только тогда мой метод Show завершался.
А чтобы я узнал что окно завершилось, я использовал токен, это такой экземпляр класса, который работает как Task.Delay, только у него есть свойство Cancel или Result, после установки которых ожидание прекращается.

Короче, описывай задачу и тебе подскажут решение.
Аноним 06/04/24 Суб 16:36:55 3113978 359
>>3113968
Ну вот у меня довольно банальная задача — обновлять кен экзекьют каждый раз, когда вызывается контекстное меню. Вот как такое сделать?
Ситуация возникает чуть ли не в 96% случаев.
Аноним 06/04/24 Суб 16:44:03 3113983 360
>>3113818
Наоборот. Пишут почти все кроме десктопа.
Аноним 06/04/24 Суб 16:47:11 3113984 361
>>3113978
либо все команды регают себя в коммандмэнеджере ВПФ и он их всех заставляет инвалидироваться

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

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

>>3113983
кроме десктопа на публику. Иначе же десктопа выше крыши.
Аноним 06/04/24 Суб 16:50:15 3113986 362
>>3113978
> Ну вот у меня довольно банальная задача — обновлять кен экзекьют каждый раз, когда вызывается контекстное меню. Вот как такое сделать?
Даже не представляю зачем такая логика вообще нужна. Расскажи пожалуйста а я скажу, почему это говнокод
Аноним 06/04/24 Суб 16:54:44 3113989 363
>>3113986
Ну и да, делается это через бехавиор. Подписываешься на событие Showed контекстного окна и устанавливаешь свойство IsContextFlyoutShowed в true, в сеттере также вызываешь метод MyCommand.NotifyCanExecuteChanged().
Аноним 06/04/24 Суб 16:56:33 3113991 364
>>3113984
>Даже не представляю зачем такая логика вообще нужна. Расскажи пожалуйста а я скажу, почему это говнокод

Например в контекстном меню есть команда слияния несколько папок, но активна она при условии, что выделено больше одной папки.
Аноним 06/04/24 Суб 16:58:19 3113995 365
>>3113991
> Например в контекстном меню есть команда слияния несколько папок, но активна она при условии, что выделено больше одной папки.
В таком случае ты должен обновлять CanExecute при изменении выделенных папок, а не тогда, когда вызываешь контекстное меню.
Аноним 06/04/24 Суб 17:02:24 3113998 366
>>3113995
Зачем? Контекстное меню не всегда вызывается.
Хотя я понимаю о чем ты, эта кнопка может просто висеть в каком нибудь тулбаре. А привязка к поведению контекстного меню ограничивает возможности команды.

Просто иногда частота изменения состояния происходит в тысячи раз чаще, чем частота использования команды.
Аноним 06/04/24 Суб 17:06:33 3114001 367
>>3113998
> Зачем? Контекстное меню не всегда вызывается.
Затем, что логика зависит именно от этого. Но если беспокоит производительность, то делай через бехавиоры как я писал выше или код бехайнд, бехавиоры же на рефлексии Но вообще в контекстном меню кнопка создается при каждом вызове и должна получать актуальное состояние CanExecute.
Аноним 06/04/24 Суб 17:20:34 3114015 368
>>3113998
Затем что реактивный подход ПУШИТ изменение. Никто может не слушать но пушнуть ты обязан даже если это просто флаг выставить который команда ПОТОМ ПОТОМ прочитает
Аноним 06/04/24 Суб 18:23:40 3114104 369
image.png 61Кб, 978x202
978x202
image.png 32Кб, 1659x226
1659x226
image.png 6Кб, 351x140
351x140
>>3113965
Не пойму что ты хочешь.
Аноним 06/04/24 Суб 22:01:37 3114483 370
>>3114104
В большей степени проблема была как прописать путь до самого файла, но я сделал в итоге Directory.GetCurrentDirectory() внутри SetBasePath
Аноним 07/04/24 Вск 14:55:03 3115285 371
>>3111274
Бамп вопросом.
Каим образом обновляется ActualWidth, если он ридонли?
Аноним 07/04/24 Вск 14:56:02 3115287 372
Аноним 07/04/24 Вск 16:05:59 3115396 373
>>3115285
> Каим образом обновляется ActualWidth, если он ридонли?
В геттере производятся вычисления и возвращаются тебе. Тебе кажется, что это переменная, и она как-то обновляется, а это не переменная и она вообще не обновляется. Просто каждый раз, когда ты к ней обращается, срабатывает геттер, производит вычисления и возвращает результат.
Аноним 07/04/24 Вск 16:56:40 3115464 374
>>3097760 (OP)
Шарпаны, а что вы в качестве якорей используете?
struct, class, record?
readonly, abstract?

Я, в принципе, понимаю, что так-то похуй, т.к. по сути из него нужно неймспейс достать и все, но вдруг есть какие-то общепринятые кодстайлы, а я не в курсе.
Аноним 07/04/24 Вск 16:59:51 3115468 375
>>3115464
> Шарпаны, а что вы в качестве якорей используете?
Что блять, какие якори?
Аноним 07/04/24 Вск 17:10:24 3115477 376
>>3115396
Допустим. А как тогда экземпляр знает какая у него актуальная ширина, находясь, например, третьим итемом в стек панели? Как он производит расчеты?

Понятно когда элемент находится в каком нибудь гриде, тогда он обращается к родителю и получает его актуальную ширину + марджин + паддинг. Но как быть с чем-то более сложным, где присутствует дополнительная организация чилдренов?
Аноним 07/04/24 Вск 17:15:35 3115482 377
>>3115468
Ну например тебе нужно добавить в DI-контейнер кучу классов реализаций/наследников одного класса, создаешь класс пустышку (якорь) там где они все лежат и подкидываешь его в метод добавления, а он добавляет все нужные реализации из неймспейса этого якоря.
Ну или более каноническое в EFCore, добавление в modelBuilder конфигураций через
.ApplyConfigurationsFromAssembly(typeof(ConfigurationsAnchor).Assembly)
Аноним 07/04/24 Вск 17:18:39 3115487 378
>>3115477
Открой исходный код и посмотри сам.
Аноним 07/04/24 Вск 17:26:58 3115498 379
>>3115487
Ты знаешь какая там каша? Я потому и спросил, что может кто-то знает принцип.
Аноним 07/04/24 Вск 17:45:48 3115519 380
>>3115487
>>3115498
Короче, есть свойство RenderSize, которое доступно и на чтение и на запись. АctualWidth получает информацию из этого свойства.

Пытался поменять рендер сайз.
До изменений:
>TestBorder.Width: нечисло
>TestBorder.ActualWidth: 0
>TestBorder.RenderSize: 0;0

Вношу изменения
TestBorder.RenderSize = new Size(100, TestBorder.RenderSize.Height)
TestBorder.UpdateLayout();

Результаты:
>TestBorder.Width: нечисло
>TestBorder.ActualWidth: 100
>TestBorder.RenderSize: 100;0

Только визуально никаких изменений не произошло. Рамка не поменяла своих размеров.
Аноним 07/04/24 Вск 17:47:56 3115523 381
>>3115477
никто к родителю не обращается
есть 2 прохода Measure и Arrange
measure проходит по всем детям и говорит им "вот я могу тебе дать такой размер, ты там посчитай желаемый размер который ты хочешь"
в Arrange же "вот тебе финальный размер -вписывайся и детей своих вписывай"

как то так
Аноним 07/04/24 Вск 17:59:24 3115535 382
>>3115482
Это делается через экстеншеены для di.
Аноним 07/04/24 Вск 18:02:03 3115542 383
>>3115535
Я знаю как это делается, вопрос (>>3115464) был про кодстайл.
Аноним 07/04/24 Вск 18:08:31 3115551 384
>>3115523
Спасибо, анон. Действительно.
Тоже подумывал сделать какой-то метод, в котором указывается допустимая область, а чилдрены сами рассчитывают марджин и свой размер.
Аноним 07/04/24 Вск 18:29:52 3115570 385
У меня есть объект, к которому обращаются множество других объектов. Но первому объекту нужна инициализация, которая занимает какое-то время.

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

У меня решение такое:
1. Создать свойство IsInitialized
2. Создать nullable поле с TaskCompletionSource?
3. Создать асинхронный метод, который сперва проверяет IsInitialized и если false, то проверить наличие экземпляра TaskCompletionSource и авейтом дождаться завершения таски.

Какие подводные? Объектов не много, не больше сотни.
Аноним 07/04/24 Вск 18:34:24 3115578 386
Аноним 07/04/24 Вск 18:41:09 3115588 387
>>3115570
Почему не инициализировать объект при создании?
Аноним 07/04/24 Вск 18:52:06 3115603 388
>>3115578
Спасибо, интересно.

>>3115588
Думаю над этим. К объекту могут и не обратиться вовсе, а он тяжелый.
Аноним 07/04/24 Вск 19:38:51 3115658 389
>>3115570
Без мемори барьера такое небезопасно делать. В конвейере процессора инструкции вызова конструктора и поднятие флага IsInitialized могут поменяться местами. Поток проверит что IsInitialized == true, и попытается обратиться к переменной, в которую еще не записана ссылка на "инициализированный" объект.

Вероятность словить такое в рантайме конечно же милипиздрическая, но детерменизм проебан. На ютубчике есть куча докладов на эту тему, даже на русском.
Аноним 07/04/24 Вск 19:58:04 3115680 390
Граждане, вот такая конструкция будет проверена только один раз на релизе? Либо в релизную сборку она не попадёт ?
#if DEBUG

Console.WriteLine("Этот код выполняется только в режиме отладки.");
#endif

Это вопрос как выполнять определенную часть кода в Дебаге но не выполнять на релизе и что бы не дрочить проверками в релизе выполняется код или нет.
Аноним 07/04/24 Вск 20:01:26 3115683 391
Аноним 07/04/24 Вск 20:01:37 3115684 392
>>3115680
>Либо в релизную сборку она не попадёт ?
это
Аноним 07/04/24 Вск 20:04:37 3115689 393
>>3115285
> Каим образом обновляется ActualWidth, если он ридонли?
>>3115396
> срабатывает геттер, производит вычисления и возвращает результат
>>3115477
> Допустим. А как тогда
>>3115487
> Открой исходный код и посмотри сам.
>>3115498
> Ты знаешь какая там каша?
>>3115519
> Короче
> Пытался
> никаких изменений не произошло

Так вот как выглядит синдром Данинга-Крюгера!
Аноним 07/04/24 Вск 20:07:24 3115692 394
>>3115658
И ничего страшного не случится ведь await обвешан барьерами
Аноним 07/04/24 Вск 20:33:05 3115735 395
>>3115680
При компиляции релиза все #if debug ... #endif тупо вырезаются.
Аноним 07/04/24 Вск 20:33:29 3115737 396
>>3115689
Слишком много гринтекста.
Аноним 07/04/24 Вск 20:44:31 3115752 397
Аноним 07/04/24 Вск 21:32:53 3115818 398
Аноним 07/04/24 Вск 21:49:56 3115843 399
>>3115818
И он нисколько не async
Аноним 07/04/24 Вск 23:30:55 3115903 400
>>3115843
Если прям нужна true-асинхронность, то возьми SemaphoreSlim и намути с помощью него и double check locking свой AsyncLazy.
Аноним 07/04/24 Вск 23:52:07 3115913 401
>>3115680
Уже ответили но если это бизнесовая логика то не делай так. Остальные на говно изойдут и по делу
Аноним 08/04/24 Пнд 00:09:07 3115931 402
>>3115913
А почему не делать?
А как надо?
Вот например я в консоль вывожу логи. Или работа с файлами? Вообщем вся работа с тестовыми данными. Как правильно сделать?
Аноним 08/04/24 Пнд 00:13:38 3115936 403
>>3115931
Логи управляются через конфиг логгера, вырезав дебаг месседжи с мясом в проде ты себе же подлянку делаешь.
Тестирование делается банально мокнув нужный сервис, интерфейсы ёпта
Аноним 08/04/24 Пнд 00:18:27 3115943 404
>>3115936
Единственно где считаю уместным флаги компилятора это вырезать/заменять код дабы конечный юзер не увидел каких то секретиков. К примеру в дебаг сборке отключена проверка лицензий по коду и какие нибудь шифрования промежуточных данных
Аноним 08/04/24 Пнд 04:08:28 3115994 405
>>3115689
> человек, имеющий низкий уровень компетенции в какой-либо теме, начинает мнить себя знатоком этой темы

Где в перечисленном тобою гринтексте мнят себя знатоками?
Аноним 08/04/24 Пнд 11:13:11 3116219 406
Что-то я запутался. Асинхронность - это когда процессор быстро прыгает с одной задачи на другую, а параллелизм - это когда есть два процессора и, скажем, задача, которую мы выносим во вторичный поток выполняется на втором процессоре. Если так, то что тогда делается с ядрами процессора? По идее параллелизм - это когда вторичный поток работает на другом ядре процессора?
Аноним 08/04/24 Пнд 11:29:36 3116225 407
>>3116219
Процессоры == ядра в твоём случае
Аноним 08/04/24 Пнд 11:33:48 3116230 408
>>3116225
То есть если в процессоре больше одного ядра, то вызов чего-то асинхронного может выполняться параллельно основному потоку. Правильно?
Аноним 08/04/24 Пнд 11:36:11 3116233 409
>>3116230
Нет. Асинхронный код может быть не готов к параллельному выполнению.
Асинхронный код не может в один такт пытаться делать две вещи, а параллельный может оттуда и ебля с синхронизацией/блокировками
Аноним 08/04/24 Пнд 11:37:54 3116234 410
>>3116230
Почитай как работает ивент луп в жс в качестве примера асинхронности или как фриртос распределяет кванты времени задачам
Аноним 08/04/24 Пнд 11:38:47 3116236 411
>>3116219
Асинхронность в первую очередь это когда у тебя есть какая-то операция, которая выполняется асинхронно относительно кода программы (сетевой запрос, запись на диск, ожидание какого-то события через аппаратный интерфейс и т.д.) и ты просто приостанавливаешь выполнение кода до того момента, пока внешняя асинхронная операция не завершится.
Ты можешь ждать завершения этой операции либо синхронно, в цикле, занимая поток ОС, либо, если ОС поддерживает работу с асинхронным IO, подписаться на событие завершения операции и освободить поток, чтобы не тратить лишние ресурсы. Как внешняя асинхронная операция завершится, ОС вызовет твой коллбэк и ты сможешь продолжить выполнение своего кода. В винде, к примеру, этот механизм называется I/O Completion ports.
Аноним 08/04/24 Пнд 11:52:49 3116243 412
Можно ли в новых шарпах как-то объявить лист определенного размера с уже инициализированными значениями типа Т или только массив юзать в таком случае? Я понимаю конечно что Т может быть интерфейсом и т.д.
Я заебался васянить:
stroki.Add("");
stroki.Add("");
stroki.Add("");
stroki.Add("");
stroki.Add("");
stroki.Add("");
stroki.Add("");
Аноним 08/04/24 Пнд 12:07:12 3116250 413
Аноним 08/04/24 Пнд 12:10:59 3116253 414
>>3116243
>>3116250

А сорян, не так понял.
Я в таких случаях сделал бы
Enumrable.Range(1, n).Select(_ => string.Empty).ToList();
Аноним 08/04/24 Пнд 12:40:19 3116273 415
image.png 225Кб, 1154x1579
1154x1579
>>3116243

Если надо много и часто заполнять листы дефолтными значениями, то сделай себе Extension-метод/хэлпер и не страдай больше
Аноним 08/04/24 Пнд 12:55:15 3116288 416
image.png 72Кб, 905x457
905x457
>>3116273
Хотя вот так ещё лучше будет. Метод Span.Fill дико оптимизирован и активно юзает SIMD-инструкции.
Аноним 08/04/24 Пнд 14:42:53 3116360 417
>>3116288
а как List узнает сколько в нем элементов после прямого влезания в его хранилище?
Аноним 08/04/24 Пнд 14:43:36 3116362 418
>>3116288
упс. туплю. не заметил SetCount
Аноним 08/04/24 Пнд 14:46:52 3116367 419
Кто как использует RabbitMQ в своих проектю? Зачем он вообще нужен?
Аноним 08/04/24 Пнд 15:19:02 3116385 420
>>3116367
Нужен чтобы не опрашивать какую-то программную сущность раз в n промежуток времени как долбаеб чтобы получить сообщение/новый стейт, а нормально тригерить у себя ивент только когда сообщение действительно придет.
Если ты спрашиваешь нахуя он нужен, то тебе он в проекте скорее всего не нужен. А если вкатун, то знать нужно.
мимокрокодил, никогда его не юзал, поправьте меня если написал хуйню
Аноним 08/04/24 Пнд 15:21:31 3116388 421
Аноним 08/04/24 Пнд 15:35:33 3116402 422
>>3116385
>>3116367
Горизонтальное масштабирование + в неком роде стейт машина
Аноним 08/04/24 Пнд 15:38:32 3116405 423
>>3116388
> и просто заюзал массив
А потом кстати, его можно легко переделать в список: .ToList();
Даже объявлять можно так:
> var stroki = ["","","","","","","",""].ToList();
Аноним 08/04/24 Пнд 15:43:36 3116408 424
>>3116405
Вообще, можно ещё проще:
>List<string> stroki = ["","","","","","","",""];
Аноним 08/04/24 Пнд 15:48:32 3116410 425
>>3116367
>>3116385
Бля ну для чего может быть нужен брокер сообщений? Чтобы делать event-driven architecture очевидно же! Чтобы микросервисы могли общаться. Я могу просто опубликовать событие - "товар куплен", а все кому надо, его получат. Это может быть склад, это может быть чат-бот, это может быть crm, это может быть email-оповещения, да что угодно. Тоже самое с ачиридями. Мне нужно обойти 500 сайтов например. Я могу создать очередь и обходить по 5 сайтов за раз в параллели. Ну и так далее.
Аноним 08/04/24 Пнд 15:50:57 3116415 426
>>3116243
> Я заебался васянить:
> stroki.Add("");
Так юзай for кста:
> List<string> stroki = [];
> for (int i = 0; i < 10; i++) stroki.Add("");
Аноним 08/04/24 Пнд 15:53:51 3116417 427
>>3116243
> Я заебался васянить:
Будь мужиком! Юзай Цикл While C ПостУсловием:
> List<string> stroki = [];
> do {
> stroki.Add("");
> } while (stroki.Count < 10);
Вопрос по MVVM Аноним 08/04/24 Пнд 15:56:02 3116418 428
Вызывать модальные диалоги это чья ответственность? Модели или Представления?
Аноним 08/04/24 Пнд 17:04:20 3116440 429
>>3116418
А сам как думаешь? Что по твоему вообще диалог
Аноним 08/04/24 Пнд 17:58:24 3116469 430
Аноним 08/04/24 Пнд 18:45:03 3116498 431
Во>>3116243
Enumerable.Range(0, size).Select(_ => "").ToList()
Аноним 08/04/24 Пнд 19:15:26 3116527 432
>>3116440
> Что по твоему вообще диалог
Потомок класса окна.
У него есть статический метод ShowDialog(Window owner).
Меня учили, что вызывать этот метод должно окно-овнер, передавая туда экземпляр себя. Получается, если вместо окон у нас представления, то вызывать диалоги должны представления на уровне представлений?
Аноним 08/04/24 Пнд 21:12:25 3116579 433
>>3116527
ну у тебя был вопрос по MVVM
с MVVM все просто
модель - вообще логика приложения и она знать не знает про то что вообще где чего то отображается. она - все, что не относится к представлению
вьюмодели - отвечают на вопрос "что отображать". содержат визуальный стейт
вид - отвечает на вопрос "как рисовать"

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

И тут возникает вопрос. А как же вон народ плодит всякие IDialogService?
А вот так - это так то нарушает MVVM. Просто вопрос такой встает и его нужно как то решать, то есть вносить какую то степень знания интерактивности на уровень вьюмодели. То есть все равно идет разрыв в логике вьюмодели, что ей где то нужно работать интерактивно. И тут кто на что согласен. Кто то выставит Func<> который обработает вид, кто то запилит медиатор и "эй кто то там выдайте результат", а остальные мудрят DialogSerivce, ведь инициировать что то на уровне вьюмоделей = обрабатывать это на уровне вида, а там всякий code-behind (а как там гласит - code-behind должен быть пуст). Ну да можно атачед пропертю или бехавиор...но тогда логика рвется. Ведь это может следить за каким то свойством и совсем не видно без 0.5 что присвоение этого поля оказывается что то там вызовет новое окно...да и где результат получать?
Так что абстракция диалога протекает и с этим ничего не поделать. Каждый выбирает свою степень протечки и удобства
Аноним 09/04/24 Втр 07:39:35 3116800 434
>>3116579
Тут понятно. Будем думать.
> а как там гласит - code-behind должен быть пуст
А тут вообще непонятно, зачем до сих пор держат кодбихайнд, если хамл уже умеет буквально всё. Неймспейсы объявляет, биндинги биндит, стили перечисляет, взаимосвязи между элементами объявляет.
Просто вынести загрузку класса-представления в вызывающий компонент. Пусть условный
> xamlLoader(this) # из кодбихайнда
будет
> xamlLoader(ViewName) # из вызывающего компонента
И всё.
Аноним 09/04/24 Втр 21:49:48 3117609 435
4234234234.png 10Кб, 406x191
406x191
>>3097760 (OP)
Двощеры, нужна ваша помощь.
Задача такая: создать массив из 56 элементов, который представляет собой по сути колоду игральных карт. А это значит что каждой карты должно быть по 4 штуки. Тоесть первые 4 элемента массива, с 0 по 3, должны иметь значение 2.

Я написал код, который должен вроде работать, но он не работает и я слишком тупой чтобы понять почему. Он забивает в массив только первые 14 элементов, а не все 56. Помогите нахуй, у меня мозги плавятся.
Аноним 09/04/24 Втр 22:00:17 3117621 436
>>3117609
У тебя ОДИН цикл от 0 до 13. Нужен еще второй по всем мастям.
Какие же шарпомухи тупые...
Аноним 09/04/24 Втр 22:09:12 3117626 437
Шарпомухи...
Аноним 09/04/24 Втр 22:35:53 3117631 438
>>3117609
ты не записываешь увеличенный i во внутреннем цикле
должно быть так:

deck[i++] = 0;
deck[i++] = 1;
deck[i++] = 2;
deck[i++] = 3;
вместо while, хотя не уверен что ты именно эти значения хочешь записать, твоя ass болтается в воздухе
Аноним 09/04/24 Втр 22:37:09 3117632 439
>>3117631
>deck[i++] = 0;
>deck[i++] = 1;
>deck[i++] = 2;
>deck[i++] = 3;
даже не так:

deck[i++] = 0;
deck[i++] = 1;
deck[i++] = 2;
deck = 3;
последнюю не нужно увеличивать
Аноним 09/04/24 Втр 23:18:25 3117643 440
>>3117609
Можно в одном цикле просто отбором целой части и остатка от деления индекса на 4
Аноним 10/04/24 Срд 02:49:42 3117694 441
>>3097760 (OP)
Чувствую себя вернувшимся в 2021-й год. Когда уже вышел .Net6, но ты вынужден был сидеть на Core3.1 (а местами еще и на Core2.1) и облизываться на новые фичи.
Сейчас то же самое. Уже вышел 8-й, на подходе 9-й, с кучей новых вкусных плюшек и оптимизаций, но ты вынужден будешь использовать 6-й еще года два.
Аноним 10/04/24 Срд 06:49:47 3117723 442
>>3117694
Ну тыпросто мазохист
Так то 8 lts как и 6
Аноним 10/04/24 Срд 07:21:10 3117728 443
image.png 96Кб, 439x796
439x796
>>3117609
Почему не сделать примерно вот так?
Аноним 10/04/24 Срд 07:22:22 3117729 444
>>3117728
Ну, а потом - отсортировать как надо, если надо, если не надо - не сортировать.
Аноним 10/04/24 Срд 08:56:37 3117757 445
>>3117723
Чел, я бы с радостью хотя бы на 8 перешел. Но то говно (вроде Альта или Астры), на которое приходится сейчас импортозамещаться максимум 7 поддерживает и то так себе. А те лицензии которые они корпоратам продают только 6-ю версию гарантируют. И когда они доползут до нормальной поддержки новых версий - хуй его знает.
С версиями софта, там вообще боль. Тот же постгрес только 11-й версии в Астре (при том, что его поддержка закончилась осенью) и летом обещают 12-ю (которая тоже протухнет в ближайшую осень).
Аноним 10/04/24 Срд 09:37:38 3117785 446
image.png 21Кб, 579x182
579x182
Аноним 10/04/24 Срд 10:59:18 3117832 447
Блейзоро-мазхоисты, у вас была такая хуита что клиент на блейзоре не может по какой-то неведомой причине достучаться до контроллера и получает http страницу как будто контроллера нету?
Делаю запрос через HttpClient:
var response = await _client.GetAsync("api/huinya");
Лезу через дебагер к reponse->RequestMessage->RequestUri->AbsoluteUri
копирую урл в постман, через постман все заебись - я попадаю в контроллер, через HttpClient в блейзоре - хуй.
Это при том что я пишу третий круд по бойлерплейту - код идентичен, уже раз 10 все перепроверил.
Все мои годы разработки сейчас тупо остановились на этой неведомой хуйне.
Аноним 10/04/24 Срд 11:14:59 3117844 448
>>3117832
1. В браузере copy as curl и выполни
2. Загони под митм (чарлис, фиддлер, етц...)
3. Проверь что с методами
4. Смотри логи сервера
Аноним 10/04/24 Срд 11:24:05 3117856 449
>>3117844
1. Все заебись, браузер/постман заходят в контроллер.
2. Проблема на стороне клиента 100%, это все на локалхосте.
3. С какими методами?
4. В логах ничего, и ничего в принципе и не должно быть если оно не находит контроллер - возвращает хтмл блейзор страницу.

Версия .net 7. Под третьим крудом я имел ввиду 3 таблицу.
Убрал с Program.cs на сервере кеширование/сжатие, авторизацию/аутентификацию и рейт лимитер, пока нихуя не дало.
Аноним 10/04/24 Срд 12:22:43 3117904 450
Аноним 10/04/24 Срд 12:46:48 3117930 451
>>3117904
Включен, но его отключение ничего не дало.
Аноним 10/04/24 Срд 13:03:56 3117945 452
>>3117832
Очевидно есть зависимость от неких заголовков запроса. Попробуй в браузере сделать запрос аналогичный постмановскому
Аноним 10/04/24 Срд 13:06:11 3117949 453
>>3117832
А можешь весь метод скинуть?
Аноним 10/04/24 Срд 13:10:45 3117956 454
>>3117856
2. Ты пробовал или просто гнешь линию?
4. Поставь трейс на всё и там будет подробно расписано кто и куда идёт и как матчит
Аноним 10/04/24 Срд 13:23:31 3117972 455
>>3117832
Если минимал апи, то с синтаксисом что-то.
Аноним 10/04/24 Срд 14:48:37 3118044 456
>>3117945
>>3117949
>>3117956
>>3117972
Все отбой, я отправил запрос на апи когда он был еще не доделан, мне отправилась блейзор страница. Когда я написал апи она видимо каким-то образом доставалась из локального кэша, даже спустя несколько часов и ребилды. Нашел уже после того как начал менять имя апи на любое другое и оно работало.
Надо будет еще покурить как оно работает.
Аноним 10/04/24 Срд 14:49:30 3118045 457
Энивей, спасибо за помощь
Аноним 10/04/24 Срд 15:16:42 3118080 458
1712751403539.png 14Кб, 355x227
355x227
1712751403554.png 4Кб, 632x41
632x41
Аноним 10/04/24 Срд 15:40:54 3118112 459
1712752855673.png 24Кб, 389x377
389x377
1712752855701.png 6Кб, 420x60
420x60
>>3118080
И вот так тоже работает.
Аноним 10/04/24 Срд 15:53:32 3118126 460
1712753612374.png 47Кб, 391x527
391x527
1712753612398.png 10Кб, 496x102
496x102
>>3118112
И финальный вариант. И в продакшон.
ASP NET как сделать базу данных Аноним 10/04/24 Срд 18:22:33 3118291 461
image.png 50Кб, 784x346
784x346
image.png 47Кб, 840x197
840x197
Сап двач, изучаю ASP NET по этим видео: https://www.youtube.com/watch?v=-ylIctDOxgU&list=PL0lO_mIqDDFWltIe7D6aUS5f4k1y2-rgn&index=7&ab_channel=%D0%93%D0%BE%D1%88%D0%B0%D0%94%D1%83%D0%B4%D0%B0%D1%80%D1%8C
Вопрос: есть файл Json для базы данных, со строками:

ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\\\MSSQLLocalDB;Database=??????;Trusted_Connection=True;MultipleActiveResultSets=true"
}

Что поставить вместо вопросов после Database = ?
Код с инициализацией базы данных находится в DBObjects.cs. Если я прописываю её в вместо вопросов в json, у меня выдаёт ошибку как на пике 2
Аноним 10/04/24 Срд 18:47:37 3118310 462
>>3118126
>>3118112
>>3118080
Отдуши братуха. Ебать вы тут все лютые программистеры, я хуею. Как у вас голова работает так? Я блядь постоянно путаю всё, этот цикл for ебанный мой самый нелюбимый, переменные ебучие, массивы так ваще анал карнавал.
Аноним 10/04/24 Срд 19:21:53 3118359 463
>>3118291
Название экземпляра бдшки. Зайди в субд через SSMS и посмотри как называется бдшка в которой хранятся твои сущности.
Аноним 10/04/24 Срд 19:36:41 3118382 464
>>3118291
>Сап двач, изучаю ASP NET по этим видео:
Блин, чел. Не делай так. Хрен с ним, что это Гоша Дударь, но курс 4-х летней давности и по Core2.2
В реалиях .Net - он устарел еще года 2 назад, а сейчас его можно засохшим говном мамонта считать.
Заюзай хотя бы Метанит, там хотя бы информация достаточно свежая.
Аноним 10/04/24 Срд 20:18:48 3118425 465
image.png 23Кб, 748x215
748x215
image.png 46Кб, 707x342
707x342
Что я не так делаю? Почему не могу подключить проксю? Ебашит ошибка
Microsoft.Playwright.PlaywrightException: "Browser does not support socks5 proxy authentication"

Прокся точно рабочая, так как я перед этим делаю гет запрос с ней.
Аноним 10/04/24 Срд 20:41:22 3118455 466
>>3118310
> Как у вас голова работает так?
Свою первую переменную я объявил в 14 лет. В далёком 1997 году.
Аноним 10/04/24 Срд 20:44:21 3118462 467
Анончик-анончик, не хочешь поревьюить чутка?
Я чет думаю, что что-то не так с моей кодой.
Вот.
https://pastebin.com/PYnXwZGf
Аноним 10/04/24 Срд 20:54:13 3118479 468
>>3118425
Тебе же прямо написали что хром не умеет в сокс5
Аноним 10/04/24 Срд 21:01:40 3118490 469
image.png 26Кб, 1009x304
1009x304
Аноним 10/04/24 Срд 21:38:30 3118547 470
>>3118455
Ох уж эти ньюфажины.
Аноним 10/04/24 Срд 21:42:33 3118552 471
>>3118490
Это не значит что браузер это умеет
Хотя не уметь сокс5 это гм в наше время
С другой стороны разве в браузерах указываешь тип сокса?
Может и тут так
Аноним 10/04/24 Срд 21:50:45 3118564 472
>>3118382
Я просто видеокурсы на ютубе искал, чтобы с нуля делать шаг за шагом. Там какие-то вещи потом брал из других источников
>>3118359
Щас попробую, спс. А через Visual Studio это никак не сделать?
Аноним 10/04/24 Срд 22:01:50 3118580 473
>>3118490
у тебя sock5://
в пример http://
Схожесть прямо 100%
Аноним 10/04/24 Срд 22:08:38 3118589 474
>>3118580
>You can configure pages to load over the HTTP(S) proxy or SOCKSv5. Proxy can be either set globally for the entire browser, or for each browser context individually.
Да я по всякому пробовал, нихуя не работает
Аноним 10/04/24 Срд 22:41:56 3118635 475
>>3118589
Значит тебе только на завод
Аноним 10/04/24 Срд 22:51:49 3118643 476
>>3118564
Загугли лучше какие-нибудь уроки по EF. Желательно посвежее. Там будет все тоже самое, как работать с бд, но понятнее.
Аноним 10/04/24 Срд 23:02:23 3118658 477
>>3118564
Вообще, лучший совет для вкатунов это все гуглить. Загули то, загули се. Сделай себе акканут с гпт 3.5. Загугли как. И задавай сетке любые, самые тупые вопросы. Вот кто тебе с удовольствием все разжует. Только не бери на веру прямо вообще все, что он тебе говорит. Этот лоботомит любит бессовестно напиздеть...
Аноним 10/04/24 Срд 23:26:39 3118682 478
1712780799888.png 33Кб, 549x543
549x543
>>3118310
На вот еще, братишька, полакомься перед сном.
Аноним 10/04/24 Срд 23:40:10 3118694 479
17082901053100.mp4 761Кб, 576x312, 00:00:08
576x312
Аноним 11/04/24 Чтв 01:25:12 3118751 480
>>3118490
Ты понимаешь что дока для либы которая поддерживает несколько браузеров, а не для хрома который может что не уметь?
Аноним 11/04/24 Чтв 01:33:56 3118759 481
Аноним 11/04/24 Чтв 01:38:14 3118761 482
>>3118759
Потому что хром точно не поддерживает аутентификацию у проксей. Об этом к слову тоже написано в ошибке
Аноним 11/04/24 Чтв 13:28:29 3119050 483
Можно при помощи winApi узнать минимальный размер окна стороннего приложения? Гугл игнорирует слово GET и выдает результаты по запросам SET.
Аноним 11/04/24 Чтв 13:32:35 3119056 484
>>3119050
а что такое минимальный размер? любому окну можно задать любой размер
Аноним 11/04/24 Чтв 17:22:09 3119348 485
image.png 44Кб, 170x124
170x124
Аноним 11/04/24 Чтв 17:59:39 3119428 486
>>3119348
Да уже не похрюкаешь, после февраля 22 рынок накрылся пиздой... За кабана держишься как за спасательный круг. Вокруг осталась одна Ява и голанг или православная жопа одина.
Аноним 11/04/24 Чтв 18:22:20 3119464 487
image.png 11Кб, 902x198
902x198
image.png 15Кб, 908x257
908x257
>>3119428
Тоже так думаю но по факту немного иначе.
Критерии поиска: от 200к, удаленно, без вышки, галочка зп указана выкл

Но есть одно НО, больно много проектов на шарпах это старое унылое говно времен 2016 года. А на го много новых проектов делается и вакух 300+ на го больше чем на шарпах.

Последний собес был в контору где было 2 тимы и внимание, в двух этих тимах было по 1 человеку и называли они себя лидами
Аноним 11/04/24 Чтв 19:25:16 3119598 488
>>3118643
Это сильно поможет для ASP NET?
Аноним 11/04/24 Чтв 21:43:58 3119743 489
image.png 43Кб, 340x708
340x708
image.png 50Кб, 329x852
329x852
>>3119464
Сейчас бы искать по тегу C# вакансии на .Net. Во многих его даже не указывают как требование.
Аноним 11/04/24 Чтв 21:55:59 3119761 490
Залез я чет в ПРы на гите майков.
Че эт за фигня, когда коммент к ПРу больше самого ПРа?
Чет у нас обычно:
Имплементировал фичу из беклога. Фича #123456


И в ПРе 10000 аддининов, 2500 удаления

Кто делает неправильно?
Аноним 11/04/24 Чтв 21:59:25 3119763 491
image.png 4Кб, 240x63
240x63
image.png 3Кб, 253x42
253x42
>>3119743
Галочки такие же, но от 200к поставил
Аноним 11/04/24 Чтв 22:01:11 3119765 492
>>3119763
а еще указал специализацию программист, без нее результаты 800+ и разброс 10+- вакух
Аноним 11/04/24 Чтв 22:01:53 3119766 493
>>3119761
>Кто делает неправильно?
Вы. Хороший комментарий никогда не помешает.
Аноним 11/04/24 Чтв 22:05:48 3119768 494
>>3119761
Сравнил опенсорс с энтерпрайзом, лол.
Аноним 12/04/24 Птн 01:32:44 3119845 495
>>3119761
>Че эт за фигня, когда коммент к ПРу больше самого ПРа?
Побочка попенсорца. Там часто бывает, что обсуждение ПР может вылезти в большую дискуссию с кучей правок по ходу и откатами. Поэтому лучше когда вся информация собрана тут же и она максимально подробная, чтобы было меньше тупых вопросов и всегда можно было процитировать нужное. Плюс часто сылки на ПР используются в других статьях, поэтому тут их полнота тоже играет на руку.

В энтерпрайзе же ПР - это часто просто констатация факта: "Пацаны, я таску закончил, апрувните пулреквест кому не впадлу" там нахуй никому не уперлось не то что ревьюить твой код, но и даже описание к реквесту читать.

>Чет у нас обычно:
>Имплементировал фичу из беклога. Фича #123456
>И в ПРе 10000 аддининов, 2500 удаления
Если у вас внутренний проект с нормально настроенной интеграцией и по тегу Фича ###### автоматом формируется ссылка на нужную таску или страницу где-нибудь в конфлюенсе или редмайне, то вполне норм.

Есть только пара ньюансов.
1) Краткое summary на одну строку в коменте к ПР/коммиту и т.д. лучше все-таки писать. Просто чтобы когда ты список/дерево коммитов открываешь, сразу было видно что и когда было сделано, чтобы каждый раз не лазить по ссылкам выясняя что за херня тут твориться.
2) В голову начальства иногда приходит мысль "а давайте мы наш трекер задач заменим на другой он дешевле/лучше и т.д.". И вот на таких переходах имеют свойство проебываться все данные по таскам и прочая информация.

Я поэтому всегда пишу в заголовке коммита имя таски, и краткое summary на английском, потом в сообщении уже более подробно излагаю на русском, что там было сделано. При таком подходе в большинстве случаев для работы достаточно самого репозитория и в трекер приходится лезть, только за подробностями.
Аноним 12/04/24 Птн 11:50:24 3120083 496
людмурик серьез[...].mp4 78Кб, 308x320, 00:00:02
308x320
Всем привет.
Я уже много лет пишу на C#, но не участвовал в high load проектах.
Можете подсказать хорошую литературу, кАналы на ютубе, где можно об этом посмотреть. Спасибо.
Аноним 12/04/24 Птн 13:19:24 3120195 497
Сап, шарпаны! Я хочу себе сделать стейт-машину, чтобы прям кайфовая была. С высоты своего дилетанства я накидал следующий набор сущностей:
>1. IState
- корневой интерфейс, от которого происходит всё остальное. Содержит методы: Enter(), Exit(), Update(), IState Transit(IState next)
>2. IState<T> : IState
- типизированный интерфейс-потомок, содержит типизированные-параметризированные версии методов: Enter(T parameter), Exit(T parameter), Update(T parameter), не содержит транзита.
>3. State : IState
- реализация п.1. в конструктор передаются три Action и назначаются трём соответствующим зануляемым ридонли приват полям. Остальные методы при вызове инвокают, например: void Update() => _update?.Invoke() по такому же принципу Enter и Exit. Метод Transit реализован так, что вызывает Exit у себя, Enter у next и возвращает next. Нулль на next не допускается.
>4. State<T>: IState<T>
- И вот мы подходим к сути вопроса. В этом классе у меня выходят задвоения, от двух родительских интерфейсов приходят требования реализовать по два вида методов Enter(), Exit(), Update() с параметром и без параметра. Я хочу чтобы интерфейс как-то это дело автоматически обернул мне. Такое возможно? Я с самого утра гуглил, ничего толкового не нашёл. Пока что я рассматриваю параметризированные варианты методов как основные и в пустые методы прописываю перенаправление, с заранее сохранённым значением параметра, делаю, например для Update() => Update(storedParameter); Но это решение мне не нравится, ибо смахивает на костыль-код.

Я хочу, чтобы у меня стейт-машина по таймеру делала что-то навроде
> if (CurrentState is IState<float> FloatTyped) FloatTyped.Update(delta); else CurrentState.Update(); # где delta - это float
автоматом вызывая параметризированный апдейт, если текущее состояние типизировано.
Аноним 12/04/24 Птн 13:22:28 3120198 498
>>3120195
Хочется, чтобы как с конструкторами:
> void Update() : base(storedParameter) {...}
Аноним 12/04/24 Птн 16:05:55 3120366 499
Почему при эксепшене мне выдаёт путь с моего пк?
Zalupka.Program.Main(String[] args) in C:\Users\MY_NAME_NAXOI\source\repos\Zalupka\P.......
Само приложение запущено на vps
Аноним 12/04/24 Птн 16:24:30 3120374 500
>>3120366
Потому что инфа о строках на этапе компиляции вставляется. В конечном билде нет никаких строк, только байт-код с пометками что когда то это было строкой Х в файле У
Аноним 12/04/24 Птн 16:29:51 3120379 501
>>3120366
> C:\Users\MY_NAME_NAXOI\
Поэтому все олдовые двачеры, уже один раз обожглись, и теперь все мы - C:\Users\User
Теперь и ты станешь одним из нас. При следующей переустановке шиндовс.
Аноним 12/04/24 Птн 16:36:26 3120385 502
>>3120379
>>3120374
Дак это ни как не исправить?
Я и раньше это замечал, но только сейчас решил спросить.
Аноним 12/04/24 Птн 16:57:16 3120391 503
>>3120385
Никак. Где собрал оттуда и будет инфа для дебага
Аноним 12/04/24 Птн 16:58:15 3120393 504
>>3120391
Пздц.
А какая инфа еще пишется о моём пк?
Аноним 12/04/24 Птн 17:55:23 3120442 505
>>3120393
> А какая инфа еще пишется о моём пк?
Пишется на какие сайты ты заходил. И на какой секунде останавливал воспроизведение видео.
Аноним 12/04/24 Птн 18:49:06 3120475 506
>>3120442
А как тогда компилить свои проги то?
Я не хочу что бы когда фбр вскрывала мой софт там были мои следы.
Аноним 12/04/24 Птн 18:51:31 3120476 507
>>3120475
Собирать на безликом билд-сервере.
Аноним 12/04/24 Птн 18:53:33 3120479 508
>>3120476
А как на счёт VirtualBox ? Пойдёт?
Аноним 12/04/24 Птн 18:53:59 3120480 509
Аноним 12/04/24 Птн 18:54:56 3120482 510
>>3120379
> C:\Users\User
Лол, думал, я один такой.
Аноним 12/04/24 Птн 19:15:42 3120501 511
>>3120195
Убери реализацию интерфейса из одного из классов (базового или наследуемого), и наследуй интерфейсы один от другого (если необходимо)
Аноним 12/04/24 Птн 20:40:12 3120575 512
image.png 108Кб, 648x681
648x681
>>3120195
Обычный типа универсальный подход это типа прикриплейд.

Суть в том, что стейт взаимодействует с контекстом, мутирует его и все это вот делает. Машина, просто содержит контекст и дергает какой-то метод Tick, Update, etc, все что тебе надо - ты в стейтах реализуешь и помещаешь в контекст от задачи.
Аноним 12/04/24 Птн 22:00:27 3120631 513
>>3120575
Можно поподробнее, плиз. Я не понял из пикчи.
Аноним 12/04/24 Птн 22:32:55 3120645 514
>>3120631
А шо подробнее?
Вся информация необходимая для решения о переходе - хранится в контексте.
Стейт - сам принимает решение при апдейте что надо перейти в такое-то состояние в методе Update. Когда надо - изменяет внутренние состояние контекста.
Стейтмашина - просто периодически, по какой-то твоей логике - просто дергает у контекста Tick, Update и т.д.

Если хочется совсем универсальное - ты делаешь просто билдеры стейтов и контекстов, если, допустим, тебе в рантайме надо создавать стейтмашины.
Аноним 12/04/24 Птн 23:46:01 3120682 515
Аноним 13/04/24 Суб 10:59:12 3120850 516
bomzh.jpg 42Кб, 500x500
500x500
Похоже, шарпомухи страдают задержками умственного развития:
https://habr.com/ru/companies/dododev/articles/573470/comments/#comment_23393296

Им говорят - вот на Java написаны Hadoop, Kafka, Elastic Search, а на вашем .NET что?
Они - "пук, среньк, ну это, можно подключаться к кафке из шарпа".
Аноним 13/04/24 Суб 11:05:23 3120854 517
>>3120850
>вот на Java написаны,
На C/C++ целые операционки написаны. Покажи хоть одну написанную на Java.
Аноним 13/04/24 Суб 11:24:57 3120862 518
>>3120854
Ну вот, например: https://ru.wikipedia.org/wiki/JNode
Только Java не предназначена для системного программирования.
А вот говношарп претендует на использование в энтерпрайзе вместо жабы (или сейчас уже нет)?
Аноним 13/04/24 Суб 11:32:14 3120867 519
>>3120645
Всё, кажись понел. Вместо создания двух видов стейта, я создаю один вид контекста, имеющий несколько реализаций, и если мне нужно прокидывать дельту-тайм в апдейт, я делаю контекст для этого. И получаю два уровня: Сначала контекст-машина, с несколькими контекстами, которые уже являются стейт-машинами с несколькими стейтами.

Ммм... Гениально!
Аноним 13/04/24 Суб 12:12:35 3120895 520
>>3120850
Так в том и прикол, что ниче на шарпе не написано. Все проекты - это мистификация.
Мы просто ходим на работу, получаем деньги, и литерли нихуя не делаем. Может быть раз в год самого смелого пошлют на какую-нибудь конференцию, чтобы он зубы заговаривал. А так - сиди-перди, получай бабосики и радуйся.
Аноним 13/04/24 Суб 12:19:47 3120899 521
>>3120895
> ниче на шарпе не написано
Справки БК на шарпе!
Чо? Чо? Уел?
Аноним 13/04/24 Суб 14:25:37 3120962 522
>>3120850
Оооо. Поборник фатального недостатка в треде
Аноним 13/04/24 Суб 16:09:37 3121051 523
image.png 49Кб, 607x654
607x654
image.png 792Кб, 1920x1070
1920x1070
Аноним 13/04/24 Суб 16:36:29 3121080 524
>>3120850
> Им говорят - вот на Java написаны Hadoop, Kafka, Elastic Search, а на вашем .NET что?
Paint.NET, если без гугла. Если с гуглом, то https://en.wikipedia.org/wiki/List_of_C_Sharp_software

Непонятно, что там за пердуны пукнутые на этом вашем хабре сидят? Сдаёца мне, это жависты под шарпанов косят.
Аноним 13/04/24 Суб 16:59:37 3121114 525
>>3121080
Не будь как жавадебилы
Синдромом фатального недостатка болеют не все

Например гитлаб на руби, но почему то жавожабы вполне юзают его, а не орут "а чего он не на жаве"
Аноним 13/04/24 Суб 17:04:22 3121121 526
>>3121114
Да я вроде и не бываю.
Неважно, на чём написан софт, главное, чтобы он делал заявленную задачу и делал хорошо.
Аноним 13/04/24 Суб 19:48:43 3121330 527
У меня у одного docker-compose up не подтягивает сертификат из поля "Kestrel"?
Аноним 13/04/24 Суб 20:02:06 3121345 528
>>3121330
А тебе точно нужен ссл на кестреле? Никогда не видел что бы в релизе кестрел стоял не за каким либо балансером с ссл терминейшеном
Аноним 15/04/24 Пнд 15:24:37 3123575 529
Учусь по курсам uлерна. Как же мне больно, братишки, с практических заданий из темы алгоритмов. Хочется прям пойти и разбить свою голову, дабы не позорить себя дальше существованием такого отсталого мясного компилятора галлюцинаций в своей черепной коробке. Ну да ладно, пост не про нытье, а совет. Нормально ли скипать темы которые с трудом понимаешь или биться до талого? Просто мне кажется я совсем буксую на месте, боюсь что просто дропну, ну или откладывать буду пока само не дропнется. Что вы собственно в таких ситуациях делали, если встречались с такой проблемой в своем обучении, господа программисты?
Аноним 15/04/24 Пнд 15:44:22 3123607 530
Почему css постоянно развивается, а xaml с 2006 топчется на одном месте?
Аноним 15/04/24 Пнд 16:28:15 3123676 531
>>3123575
>Нормально ли скипать темы которые с трудом понимаешь или биться до талого?
Ни то ни другое. В таком случае нормально возвращаться назад прорабатывать базу и набирать опыт.
Аноним 15/04/24 Пнд 16:40:59 3123694 532
>>3123575
>из темы алгоритмов
Не нужны.
Аноним 15/04/24 Пнд 17:31:38 3123797 533
>>3123607
XAML совершенен, а с CSS вебмакаки сами не знают, чего хотят.
Аноним 15/04/24 Пнд 20:33:57 3124020 534
>>3123797
> XAML совершенен
HJSON совершенен, а хамл ентот ваш зумерский - это дрисня угловатая.
Аноним 15/04/24 Пнд 21:42:00 3124090 535
>>3124020
>HJSON

>You can specify strings without quotes
Ну чет пиздец как сомнительно.
Аноним 15/04/24 Пнд 22:03:31 3124110 536
Аноны, кто-нибудь учавстовал в озоновском курсе по шарпу? Если да, поделитесь опытом, как там набор устроен, большая ли нагрузка, сильно ли ебут? Там вроде набор новый скоро будет, хочу залететь.
Аноним 17/04/24 Срд 16:31:59 3126465 537
Проблема записи логов из статических методов.

Если я записываю экземпляр логгера в статическую переменную:
>private static ILogger _log = Log.Logger.ForContext<MyBaseClass>();
То в принципе все методы могут иметь доступ к этой переменной. Но тогда начинается проблема с логгированием в наследниках класса.

Допустим в базовом классе есть метод ToString(), который пишет в лог:
>if (_log.IsDebug()) { _log.Debug("ToString: {0}", result); }

Допустим я создаю наследника базового класса, и скрываю переменную лога при помощи new
>private new static ILogger _log = Log.Logger.ForContext<MyInheritClass>();

Тогда я запускаю метод ToString() из наследника, но лог записывается применительно к базовому классу MyBaseClass, а не MyInheritClass. Проблема усугубляется, когда куча наследников юзает один и тот же метод, тогда хрен поймешь кто это сделал и когда.

Если же переменная с логом будет не статической, то я могу использовать virtual для переопределения, не понимаю как в статический класс передавать в экземпляр логера. Через параметры? Это же тупо. Нигде я не видел запрос логгера через параметры. Хоть вообще отказывайся от статических методов.
Аноним 17/04/24 Срд 16:36:21 3126471 538
>>3126465
1. Наследование чаще залупа
2. DI > static
3. Logging context
Аноним 17/04/24 Срд 16:42:18 3126480 539
>>3119056
В любом приложении указан минимальный размер окна.

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

Конечно можно наговнокодить, например попытаться сжать окно до 1х1 пикселя, а потом замерить фактический размер, но это хрень — это вызывает лишнюю перерисовку окна.
Аноним 17/04/24 Срд 16:46:07 3126492 540
>>3126471
> DI > static
Разве это делается для методов? Это делается для инициализации класса.

>Logging context
Не понял. У меня же и так
>Log.Logger.ForContext<MyBaseClass>()
Аноним 17/04/24 Срд 16:47:18 3126496 541
Аноним 17/04/24 Срд 16:51:35 3126502 542
>>3126492
Зачем тебе вообще статик? Все статики которые обычно юзаются можно подогнать под XxxUtils и экстеншены, то есть логирование там не нужно.
И под контекстом я имел ввиду скоупы которые дополняют контекст для уточнения что и где происходит.
Аноним 17/04/24 Срд 17:39:13 3126562 543
>>3126502
>Зачем тебе вообще статик?
Метод вообще не использует данные экземпляра. Да, это по сути утилита или экстеншн, но ей пользуется экземпляр и там есть полезная информация.

>то есть логирование там не нужно
Почему? Есть какие-то правила логгирования?
Предположим у меня задача при помощи API изменить размер окна стороннего приложения. Метод по сути своей статический, но как мне узнать не спамят ли его и какой размер окна требуется?

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

>И под контекстом я имел ввиду скоупы которые дополняют контекст для уточнения что и где происходит.
А можно подробнее?
Аноним 17/04/24 Срд 17:45:46 3126568 544
>>3126465
Суммарно все звучит как XY-problem. Есть подозрение, что тебе надо максимально уйти от статики.
Аноним 17/04/24 Срд 17:57:13 3126582 545
>>3126562
Самое очевидное и простое не юзай статики, регай класс в di и инжекти в него всё что тебе нужно в т.ч. и логгер.
Из-за того что у тебя хитровыебанные статик методы код который их юзает толком даже не обложить тестами, только кучу всего и разом тестить.
Моё представление что статики должны быть максимально простыми что бы там банально нечему было ломаться

Так и гугли dotnet logger context scope. Без структурного логирования имеет мало пользы
Аноним 17/04/24 Срд 18:14:05 3126608 546
А что, майки решили вновь вернуться к впф? В net 9 обещают стилизовать все контролы под 11 винду, улучшить производительность, потенциально даже версию directx обновить. Также все новые issue обязуются рассматривать в течении 3 дней.
Аноним 17/04/24 Срд 18:16:42 3126612 547
>>3126608
>В net 9 обещают стилизовать все контролы под 11 винду
господи, наконец-то ...
Аноним 17/04/24 Срд 19:16:35 3126706 548
>>3126608
> стилизовать все контролы под 11 винду
Но зачем?
90% кодеров всё равно будут свои стили накатывать.
Аноним 17/04/24 Срд 19:17:59 3126707 549
Аноним 17/04/24 Срд 19:52:45 3126769 550
>>3126465
Ну если тебе нужно чтобы в наследнике тустринг писал иначе - то тебе ОЧЕВИДНО нужно этот метод переопределять независимо от причин "иначе". И логгер вообще не причем.

>>3126612
опять все сломают. они это могут. в итоге простое "переопределить цвет выделения" что раньше легко решалось добавлением цвета в ресурсы с нужным кеем - теперь решается полным переопределением шаблона на 10000000500000 строк
Аноним 17/04/24 Срд 20:41:13 3126815 551
>>3126707
Как раз 90% будут. Умник, блять, выискался тут.
Аноним 17/04/24 Срд 21:24:27 3126846 552
>>3123575
Просто посмотри решения других людей и проанализируй. Прокручивай код в голове, изменяй и запускай код. В общем думай. Чтобы что-то понять нужно думать. А чтобы уметь думать, нужно учиться думать. Это не происходит автоматически. Смотреть на код не означает обдумывать его.

>>3123694
Дурак.
Аноним 18/04/24 Чтв 00:54:49 3126983 553
На пердоликс не существует бесплатной среды кроме vs code? В нём вообще реально сидеть на полной основе? или проще спиздить ездуна
Аноним 18/04/24 Чтв 01:16:42 3126989 554
>>3126983
>vs code
Чего тебе в нем не хватает?
Аноним 18/04/24 Чтв 21:40:56 3127989 555
image.png 45Кб, 766x490
766x490
>>3097760 (OP)
Шарпаны, а что вы будете делать если вам кабан LINQ запретит использовать?
Аноним 18/04/24 Чтв 21:59:04 3127999 556
Аноним 18/04/24 Чтв 22:23:43 3128018 557
>>3127989
Вспомню, что в шарпе есть синтаксис циклов.
Аноним 19/04/24 Птн 09:38:34 3128203 558
Аноним 19/04/24 Птн 12:49:28 3128465 559
>>3127989
Пердёж затроллил пориджей.
Аноним 20/04/24 Суб 00:22:47 3129219 560
Пацаны. Чет я сегодня дикий стыд испытал на работе.
В общем. Позвал чел помочь с кодом.
Код - мой.
2 года назад писал. Я в душе не помню как он работает.
Это был код фронтенда.

Я просто в ужасе.
При этом - коде бекенда - я помню как работает досконально, хотя писал его тоже 2 года назад. Но там - я сразу такой: этот файл, такой-то метод.

Че за срань? Как блин так может быть? Почему я фронтенд пишу на отъебись, а бек - будто преподу буду защищать помню?
Аноним 20/04/24 Суб 10:43:54 3129438 561
>>3129219
Я джсий тоже на пофиг пишу. Не ну а чо, язык сам располагает к этому, не моя вина.
Аноним 20/04/24 Суб 12:20:40 3129501 562
15937867776240.png 1304Кб, 1242x1236
1242x1236
>>3129219
Ты закрытый человек — любишь делать вещи, пока никто не видит.
Аноним 20/04/24 Суб 12:24:25 3129502 563
>>3129219
Будем честны, для фронтенда нужно больше навыков, знаний и смекалки. Фронтенд это как социоблядь - мы их презираем, но повторить успех не можем. Проще сказать что нам просто не хочется.
Аноним 20/04/24 Суб 12:35:23 3129517 564
>>3129502
А я с этим спорить-то не буду на самом деле.
Другое дело, что как фуллстек - я как-то всегда считал, что у меня +- одинаковые навыки и там и там.
А вот как-то так получилось вчера. Спросили по старому коду, который передали другой команде на поддержку. Я смотрю как баран, не понимаю - как я это и зачем писал, и что оно вообще делать должно. 1,5 часа просидел с челом, пытаясь вспомнить свой полет фантазии в тот момент, когда я это высрал.
Аноним 20/04/24 Суб 12:57:30 3129546 565
Кто-нибудь пробовал связку Electron+.net?

Проект просто новый намечается. Кроссплатформенный. Десктопно-мобильный. И надо выбрать на чем UI делать. По результатам исследований три стула: Авалония, Eto.Forms, и как раз электрон.
Почему хочется электрон? Потому что таки в штате есть фронтендеры, которые нормально JS/TS, плюс есть база компонентов для веба, которые можно было бы просто заюзать и радоваться. Но вот про связку с .NET (я так понимаю, что типа надо чтобы .NET приложение было хостом и стартовало всю эту электронофигню) - я не пробовал и опыта не имеется.
С другой стороны - авалония. Выглядит почти как WPF, текущие бекендеры на нем начинали, и опыт как-бы имеется, но тогда всю хуйню визуальную опять придется с нуля хуярить, плюс - фронтендеров если подтягивать - им придется обучаться.
Eto.Forms - из-за этого треда боюсь даже предлагать.
Аноним 20/04/24 Суб 13:06:09 3129552 566
>>3129546
А где четвертый стул не с пиками, то есть maui
Аноним 20/04/24 Суб 13:08:05 3129553 567
>>3129552
MAUI же оффициально не поддерживает линуксы.
Чи что-то изменилось?
Аноним 20/04/24 Суб 13:09:28 3129555 568
>>3129502
Какой ещё успех
Фронтенд это жс
А это как жрать говно
Все эти фреймворки это просто "говно подано в красивой сервировке"
Но это всё равно жрать говно
Аноним 20/04/24 Суб 13:10:07 3129560 569
>>3129553
Поэтому это стул не с плоской поверхностью
Аноним 20/04/24 Суб 14:10:45 3129613 570
Аноним 20/04/24 Суб 15:12:09 3129685 571
>>3129219
> Почему я фронтенд пишу на отъебись, а бек - будто преподу буду защищать помню?
А теперь внимание, правильный ответ: Потому что фронт временен и меняется по велению моды и левой пятки маркетинговых менеджеров. Нет смысла посвящать ему много времени. Быстро загуглил, как биндятся события кнопок к командам вьюмодели, накидал и забыл. А вот бек - пишется на века. Меняется очень редко. Имеет повышенные требования к отказоустойчивости. Над беком приходиться долго думать.
Аноним 20/04/24 Суб 18:10:49 3129830 572
Аноним 20/04/24 Суб 18:33:44 3129856 573
image.png 46Кб, 864x463
864x463
>>3129830
Ткни пальцем где. А то я поиск по странице сделал и слова Linux не увидел.
Аноним 20/04/24 Суб 20:43:10 3129949 574
>>3129546
> По результатам исследований три стула:
> Eto.Forms
На связи бывший форсер ето.формсов! Вставший на путь истинный, авалониевый. Там мобильный бэкэнд в зачаточном состоянии. А ты
> Кроссплатформенный. Десктопно-мобильный.
Таким образом, увы. Сам проект был бы хорош, но сообщество вокруг него собралось мизерное. Сам автор в одиночку не вытягивает одновременно баги фиксить и фичи допиливать. Проект буксует на уровне прошлого поколения интерфейсов.

Так что ето.стул смело вычёркивай.
Аноним 20/04/24 Суб 21:34:53 3129992 575
Решил GUI немножко изучить для общего равития.
Вот что выбрать то? ВПФ или Мауи? Я так понимаю авалония это библиотека для впф?
Аноним 20/04/24 Суб 21:38:00 3129994 576
>>3129992
Склоняюсь к Мауи так как еще и на андройд хотелось б попробовать пописать.
Аноним 20/04/24 Суб 22:10:50 3130017 577
Аноним 20/04/24 Суб 23:26:41 3130067 578
Реактивный MAUI, есть ли оно в природе?
Аноним 20/04/24 Суб 23:52:43 3130094 579
>>3129992
А если мауи, то MAUI app или MAUI Blazor app,?
Аноним 21/04/24 Вск 00:03:04 3130103 580
>>3130094
я сам хуй 3аnaet
если ра3ицb! net 3na4it бла3ор
бля neкоторе кHопки Hа клаве Hе работают(
Аноним 21/04/24 Вск 00:08:43 3130109 581
Аноним 21/04/24 Вск 00:16:03 3130116 582
Аноним 21/04/24 Вск 00:18:35 3130119 583
>>3130116
Гугл говорит, что это какая-то веб-технология. Эм, што?
Аноним 21/04/24 Вск 00:23:26 3130124 584
Аноним 21/04/24 Вск 00:24:57 3130125 585
>>3130094
Очевидно, где меньше замла...
Аноним 21/04/24 Вск 00:35:00 3130136 586
>>3129856
Ой... Кажется действительно нету... >_<
Аноним 21/04/24 Вск 00:37:05 3130139 587
>>3130119
Ват? Зачем тебе какие то реактивные либы, если есть Blazor?
Аноним 21/04/24 Вск 00:38:09 3130141 588
>>3130067
>>3130139
Что такое "реактивность"? Часто слышу это от петухов с JS загона но так и не понял.
Аноним 21/04/24 Вск 00:51:19 3130146 589
>>3130141
Реактивный интерфейс - это свойство элемента управления вызывать изменения связанных данных или элементов управления из-за динамического связывания или дата-биндинга этого элемента.
Аноним 21/04/24 Вск 00:55:36 3130148 590
>>3130141
Реактивность - это то же самое, что асинхронность. Если тебе кто-то говорит, что это не так, шли нахуй этого петуха.
Аноним 21/04/24 Вск 07:56:26 3130232 591
>>3130148
>Реактивность - это то же самое, что асинхронность.
Нет.
Аноним 21/04/24 Вск 08:06:27 3130236 592
>>3130109
А где в community toolkits реактивность? Почитал описание хелперов, про реактивность ни слова.
Аноним 21/04/24 Вск 09:30:30 3130284 593
Аноним 21/04/24 Вск 12:08:02 3130401 594
>>3130236
Ценятся не слова, а дела.
Аноним 21/04/24 Вск 15:07:14 3130640 595
>>3130141
Это пуш модель. Буквально все выставляет точку (ака поток событий) на которую можно подписаться фильтровать и комбинировать с другими потоками событий.
Как LINQ, но линк начинает работать когда кто то хочет получить результат (pull), а тут все начинает работать по событию (push)

В полной упоротости у тебя весь код представляет собой связанные цепочки с минимумом императивного кода.
Аноним 21/04/24 Вск 18:51:09 3130860 596
Аноним 21/04/24 Вск 19:02:21 3130866 597
>>3129992
Авалонию учи, это самый актуальный фреймворк. Maui параша кривая.
Аноним 21/04/24 Вск 21:25:52 3131093 598
>>3130866
авалония прикольная канешн, но она чёт по сравнению с впф раз в 10 больше озу кушает
Аноним 21/04/24 Вск 22:25:01 3131137 599
Аноним 22/04/24 Пнд 00:16:26 3131188 600
>>3131137
Просто такой подход к кодированию. Более похож на фп
А что хорошего, что в впф есть CommandManager который обновляет все команды, а не только те, что нужно, при смене фокуса?
А тут обновляются только те, что зависят от источника.

Я не знаю как в реактиве в шарпе. Не вижу смысла юзать реактиве в десктопе (не заходит мне), не вижу в асп.нете.

Но я балуюсь котлином под андроидом. И вот там как раз предпочитаю эту модуль "все есть flow", а не императивную модель.
Потому что есть богатый набор функций для подписок, комбинирования, фильтрации и так далее. И все это автоматически подписывается и отписывается реагируя на lifecycle приложения. Я просто прописываю "вот это зависит от этого и когда источник изменится, то и это изменится".

Хотя писать в чисто таком стиле сложно. Читать просто, а вот писать....большинство скатывается в "подписался и вызвал метод в котором выставил свойства вьюмодели". А должен был выставить flow, и все зависимые свойства подписываются на этот источник и обновляются.

Даже банальное db.getUsers() возвращает не список юзеров, а Flow<List<User>>, хотя по факту он выплюнет по готовности список юзеров и все - тогда другие смогут подписаться на этот flow (впрочем то ж котлин - там богатейший набор "хочешь так, а хочешь этак" и обычный db.getUsers() превращается во флоу как 2 пальца)

У тебя в итоге вся система в этих цепочках и где то что то выплюнуло событие (хоть мышеклик)...и полетело это по всем зависимым цепочкам. В силу LINQ подобного синтаксиса описание кода прямо декларативное получается.
Аноним 22/04/24 Пнд 00:26:28 3131190 601
>>3131137
Те же биндинги в впф имеют такой же подход когда от источника к контролу. Ты просто прописываешь биндинги что от чего зависит (неудобно конечно ибо синтаксис ограничен) и дальше оно просто работает. ты даже не заботишься об отписке биндинга если контрол выпал из вида.

Ну и такое по всей системе
Аноним 22/04/24 Пнд 12:58:05 3131571 602
>>3131093
Если ты делаешь десктопное приложение для венды, то конечно, нет смысла запариваться со всякими там авалониями. Но анон выше заявил, что хочет сделать кроссплатформу.
Авалония предлагает кроссплатформу искаропки. Все основные десктопы, все основные мобилы и браузерный васм. С единой кодовой базой.

Так что смотрите сами, ребята.
Аноним 22/04/24 Пнд 13:00:40 3131577 603
>>3130640
> связанные цепочки с минимумом императивного кода
А что такое императивный код?
> выставляет точку (ака поток событий)
Что такое "выставить точку"?

Вопросы не праздные и не троллинг. Это скорее майевтика.
Аноним 22/04/24 Пнд 13:47:53 3131634 604
>>3131577
Императивный код выполняется построчно как описан
a=1
b=2
c=a+b
В linq ты описываешь декларативно. Ты же не пишешь вручную циклы и условия. Реактиве тот же linq только push

Точка/источник это просто событие в виде iobservable к которому можно прицепиться и писать в linq стиле (в отличие от обычных событий)

Пример винформс без биндинг и впф с биндинг
В виныормс по какому то событию (например сервер ответил и отдал данные) ты пишешь императивный код в котором меняешь состояние нужных контролах

С биндингами (по факту реактивня модель) все контролы будут следить за данными и обновят себя. Тут декларативный подхлд и в идеале только хамл и хватит
Аноним 22/04/24 Пнд 13:54:11 3131646 605
У maui Blazor есть проблемы с поднятием клиента websocket? Что-то подобное слышал....
Аноним 22/04/24 Пнд 15:33:43 3131808 606
>>3131634
> Императивный код выполняется построчно как описан
> В linq ты описываешь декларативно.

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

Иначе говоря, почему
> делай_раз
> делай_два
> foreach(a in b) делай_три
- это императивность, а
> делай_раз
> .делай_два
> .foreach( a => делай_три)
- это у нас волшебным образом превращается в декларативность?
Аноним 22/04/24 Пнд 17:01:44 3131966 607
>>3131808
потому что так оно и есть

"Императи́вное программи́рование — парадигма программирования, для которой характерно следующее: в исходном коде программы записываются инструкции; инструкции должны выполняться последовательно; данные, получаемые при выполнении предыдущих инструкций, могут читаться из памяти последующими инструкциями"

то есть описание инструкций по факту и есть выполнение этих самых инструкций при их же описании

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

.foreach( a => делай_три) (с точкой) не выполняется прямо в момент когда момент выполнения доходит до
foos.Select(s=>s.Prop).Foreach(a => делай_три)
поскольку это всего лишь определение чего то, что будет выполнено потом и хз как при этом

а напрягает меня капча двача
Аноним 22/04/24 Пнд 17:29:29 3132001 608
>>3131808
>>3131966
Хуйня какая-то.
Императивный — мы описываем КАК мы что-то делаем.
Декларативный — описываем ЧТО мы хотим получить.
мимо
Аноним 22/04/24 Пнд 17:45:23 3132012 609
Мнения разделились...
Аноним 22/04/24 Пнд 19:04:47 3132112 610
image.png 591Кб, 915x566
915x566
Я вот че подумал то
Вот есть у меня тестовое Блазор ВебАссембли приложении. Тупо кнопка которая делает post запрос на сервер, сервер пишет в бд +1 сервер отвечает OK приложение делает +1 в счетчике и кнопка отправки запроса становится снова активной.
Сейчас WA приложение весит 6.3мб. Что дохуя если юзер будут заходить постоянно и нагружать скачиваем клиента сервер.
И вот я подумал мб если приложении будет Сервер то веб сокет соединение будет меньше создавать нагрузки?
Как б мне протестировать 2 приложения и узнать какое меньше нагружает сервер? На сколько открытое ВебСокет соединение будет загружать сервер в сравнении с загрузкой WA клиента и отправкой с его post запроса?
Аноним 22/04/24 Пнд 19:26:34 3132136 611
>>3132112
Бред шизофреника. За ошибками предложений даже суть не улавливается
Аноним 22/04/24 Пнд 19:30:01 3132143 612
>>3132112
Современный блазор хеширует твою ВА приложуху на клиенте, чел.

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

Если тебе нужно нажать единственную кнопку на страничке, то профита нет. Твой сервер без проблем справиться с соединением, нагрузкой на которое, это буквально выполнить один делегат привязанный к кнопочке в рейзор разметке.
Аноним 22/04/24 Пнд 19:40:25 3132152 613
>>3132143
>Современный блазор хеширует твою ВА приложуху на клиенте, чел.
Ну при заходе а страницу юзер каждый же раз загружает клиент.
>Если тебе нужно нажать единственную кнопку на страничке, то профита нет.
Ну по сути да, в приложении нет и не предвидится сложных вычислений. Максимум это сложение чисел и показ строк из БД.
Аноним 22/04/24 Пнд 19:55:26 3132175 614
Причем вычисляется это очень легко. Допустим, у тебя есть серверная виртуальная машина. На ней тебе доступно, скажем, 4 ядра. Это означает, что тред пул твоей приложухи, на твердую, имеет 4 треда, которые могут работать не мешая друг дружке. Если нажатие на кнопочку занимает один квант серверной ОС, что-то в рамках +-50 мс, и, в момент времени, ты имеешь 4 максимум нажатия, то, в рамках задачи, тебе не нужно ВА... Смело добавь к этому задержки сети + 100 мс сверху, которые юзер все равно не заметит, потому что так говорит статистика.

Если ты планируешь все это усложнять и масштабировать, то сразу закладывай все задержки и просчитывай архитектуру заранее. Делай другой сервис, желательно независимый, чтобы невмешиваться в работу остальных. Вот один из таких сервисов, самый прожорливый на задержки сети и процессорное время, имеет смысл вынести в ВА. Пусть юзер единократно потерпит и скачает сборку ВА, зато твой сервер будет оставаться в рамках адекватной латенси, потому что в тред пуле всегда, или почти всегда, будет хотя бы 1 свободный поток.
Аноним 22/04/24 Пнд 19:59:51 3132182 615
>>3132152
Не каждый раз, а однократно. В самый первый раз. Восьмой блазор так работает, позволяя выгрузить пользователю компонент в ВА сборке.
Аноним 22/04/24 Пнд 20:05:02 3132190 616
>>3131966
> не выполняется прямо в момент когда момент выполнения доходит до
> лишь определение чего то, что будет выполнено потом и хз как при этом
> хз как при этом
Вот в этом и проблема. Ты ХЗ как оно там работает, а лезешь умничать.

Надоело в маевтику играть, пишу прямо: линк-код ("реактиве" твое) точно так же императивен, это точно такие же команды. Которые ты командуешь машине сделать. Императивишь, так сказать.

Декларативность в другом, декларативность, когда ты описываешь, что от чего зависит. И что будет для тебя совсем убийственным откровением, декларативный код описывается императивными составляющими. И функциональный тоже. Любой. От императивности в программировании никак не уйти. Всегда будут ключевые слова, команды, говорящие машине "сделай вот это, но не сейчас. а отложенно, в отдельном треде", "посчитай вот эту функцию".
Аноним 22/04/24 Пнд 20:32:25 3132209 617
image.png 6Кб, 691x65
691x65
>>3132175
>ты имеешь 4 максимум нажатия, то, в рамках задачи, тебе не нужно ВА
Ну примерно так и есть. Но подключение то будет всегда держатся открытым.
К примеру если приложение Server 100 юзеров зайдут, будет 100 подключений, юзеры сделают клик, потом так же им передастся какая нибудь инфа к примеру статья и они её будут читать к примеру 10 сек. Всё это время подключение остаётся открытым но не используется. Нагрузка в данном случае будет постоянная.

А если я буду использовать ВА нагрузка будет в момент загрузки приложения и в момент отправки HTTP запросов а сервер.

Собственно если бы у меня были деньги на vds я бы е парился просто подкинул бы монетку и выбрал. \
А с ограничим бюджетом приходится каждую копейку экономить.

А NGINX моё ВА приложение хешиует? Или каждый раз его с диска читает и выдает юзеру?
Мб есть возможность захостить ВА приложение в каком нибудь CDN?


>>3132182
Ну вот старицу закрыл, потом сова захожу а её и сова загружает.
Аноним 22/04/24 Пнд 21:21:24 3132259 618
image.png 26Кб, 200x674
200x674
image.png 138Кб, 1717x462
1717x462
image.png 124Кб, 1794x806
1794x806
photo2024-04-22[...].jpg 17Кб, 517x235
517x235
>>3132209
Вот мое ВА, которое загружается из локального хеша. Нагрузка на сеть пустяковая - геты за датой.

Чтобы показать статью, не обязательно поддерживать СР соединение или выгружать ВА. Можешь отправлять статику в виде компонента. Это можно сделать с помочью минимал апи или с фреймворка восьмого блазора (static SSR). Из минусов статики - 0 интерактивности (она есть, ограниченная, только при инициализации компонента). Можно компенсировать, добавив красоты в верстку с помощью жса. Придется попердолиться с ЖСИнтеропом.

Если идешь по пути ВА, то твой компонент в ВА берет на себя ответственность за интерактивное отображение контентента статьи, делая геты к серверу, когда пользователь нажимает на кнопочки. Например, чтобы перейти к следующей статье. Красоту форнта полностью обрабатывает код на шарпе и css + жс, если ты этого сам хочешь.

Не могу ничего посоветовать с моделью хостинги. В моем случае сервер есть и он всегда живой и оплаченный.
Аноним 22/04/24 Пнд 23:02:04 3132332 619
>>3132112
Релиз будет меньше, это банально выводится в дебаге + уже написали выше что оно кэшируется и загружается некоторое время только первый раз.
Аноним 22/04/24 Пнд 23:11:47 3132334 620
>>3132332
Это и есть релиз в 6мб
Аноним 23/04/24 Втр 00:03:32 3132353 621
>>3132190
поумничал? молодец

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

для особо умных кто не понимает разницы приведу цитату из вики. она вполне понятна

"К примеру, в императивном программировании присваивание a = b + c будет означать, что переменной a будет присвоен результат выполнения операции b + c, используя текущие (на момент вычисления) значения переменных. Позже значения переменных b и c могут быть изменены без какого-либо влияния на значение переменной a.

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

и каждый подход обладает своими особенностями, но это не значит что код состоит только из одного подхода. Однако какой то преобладает и задает стиль.
Аноним 23/04/24 Втр 06:28:36 3132447 622
а можно мл.нет нейронку импортировать из другого проекта? Я уже обучил неплохую, но я переустановил виндовс, поэтому создал новый проект , а в нем мой MLModel2.consumption не работает.
Аноним 23/04/24 Втр 09:57:28 3132543 623
2024-04-2309-29[...].png 4Кб, 582x146
582x146
Аноны, наболевший вопрос по WPF. Мне очень часто требуется выводить свойства класса списком. Каждый итем состоит из двух столбцов "описание : значение".

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

Хочется видеть контрол в виде док-панели или стак-панели, но в котором можно было описание итема указать через прикрепляемое свойство (и в котором можно указать зазор между итемами, но это другой вопрос). Что-то типа этого:

> <local:CustomPanel>
> <TextBox local:CustomPanel.Caption="Width:" Text="{Binding Width}" />
> <TextBox local:CustomPanel.Caption="IsEnabled:" Text="{Binding IsEnabled}" />
> </local:CustomPanel>

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

Еще рассматривал вариант сделать какой-то конвертер значений, который бы при помощи рефлексии переводил свойства класса в словарь, а уже этот словарь при помощи DataTemplateSelector обрабатывал бы ItemsControl. Только тут две проблемы:
1) как автоматически связывать и отвязывать свойства.
2) не все свойства нужно выводить
Аноним 23/04/24 Втр 10:00:36 3132548 624
>>3132543
Обосрался с примером разметки. Вместо двух текстбоксов должен быть один текст бокс и один чекбокс.

> <local:CustomPanel>
> <TextBox local:CustomPanel.Caption="Width:" Text="{Binding Width}" />
> <CheckBox local:CustomPanel.Caption="IsEnabled:" IsChecked="{Binding IsEnabled}" />
> </local:CustomPanel>
Аноним 23/04/24 Втр 12:49:03 3132736 625
1713865743376.png 18Кб, 914x157
914x157
>>3132543
То что ты хочешь называется propertygrid и гуглится. Изучи вопрос.
Аноним 23/04/24 Втр 14:29:56 3132857 626
>>3132736
О, пасиб. Это то что нужно.
Аноним 23/04/24 Втр 20:34:23 3133194 627
image.png 97Кб, 359x500
359x500
Аноним 24/04/24 Срд 09:32:54 3133634 628
image.png 1332Кб, 2263x980
2263x980
Оказывается придумать а потом еще и сделать так как придумал дизайн пиздец какая сложная задача(
Как и где можно просто спиздить дизайн?
Хотя и пизздить у меня е получается(
Сейчас css это пиздец полный
Аноним 24/04/24 Срд 10:27:01 3133667 629
>>3133634
Спроси в треде HTML-программистов.
Аноним 24/04/24 Срд 12:10:12 3133775 630
>>3133634
Забей, CSS проектировали для бездумного макакинга и вникать в него это дело непродуктивное, просто делай потом если чё перепишешь.
Аноним 24/04/24 Срд 14:14:14 3133924 631
1713957254451.gif 12Кб, 220x129
220x129
>>3133194
Ты-то чего триггернулся?
Аноним 24/04/24 Срд 14:15:50 3133928 632
>>3133634
> Оказывается придумать а потом еще и сделать так как придумал дизайн пиздец какая сложная задача(
Теперь ты не будешь кудахтать на Артемия Лебедева, что он получает огромные бабки за рисование двух прямоугольников?
Аноним 24/04/24 Срд 20:06:18 3134258 633
>>3133634
Та не.
Если делаешь один - все вполне нормально.
Вот когда подключается пара других человек, которым ты объясняешь, а они дохуя хотят проявить творческую жилку и хуярят хуй пойми что - вот тогда да. Пизда. И проблема в том что на ревью же не завернешь, если не собирать и смотреть что ж там эти наверстали.
В этом большая сложность. И как спастись от нее - хуй его знает.

CSS - учится за 3 часа, если чо.
Аноним 24/04/24 Срд 22:07:19 3134348 634
>>3134258
>CSS - учится за 3 часа, если чо
И вечность как это потом использовать
Аноним 25/04/24 Чтв 00:45:23 3134472 635
image.png 86Кб, 1102x743
1102x743
Вот смотрите
Есть такие вот фреймворки
https://github.com/ant-design-blazor/ant-design-blazor
https://github.com/radzenhq/radzen-blazor
https://github.com/microsoft/fluentui-blazor?tab=readme-ov-file
https://tabblazor.com/
Объясните зачем это всё нужно?
Там же дефолте кнопочки-таблички. Ну да готовые кнопочки, но бля а если они хуево сделаны?
Я вижу единственный профит в использовании это в интерпрайзе без особой ебни клепать стандартны UI про которое пользователь скажет "норм", и это в случае когда у бекендера просят сделать еще и фронт, а он такой ну ок ебану как могу а могу только так.
В чём я не прав?

На клаве е работают копки так что е обесудьте, печатая в помощью экрраки+ ерабочей клав.
Аноним 25/04/24 Чтв 18:50:36 3135310 636
>>3134472
Затем, что делать нормальную библиотеку своих компонентов - пиздец трудоемкая задача, особенно, если у вас нет отдельного подразделения для вротендеров-десигнеров, либо если это подразделение собрано из вчерашних студентов.
Ну так вот. А показывать сырой ХЭТЭЭМЭЛ/Обвешанный бутстрапом - моветон, ты показываешь это заказчику/менеджерам, они морщатся и решают что вы хуйней страдаете, хотя может быть все остальное охуенно.
Так вот. Такие вот хуевины - позволяют взять 1-2 вротендеров, чтобы они биндили карточки-таблички к тому что бек отдает и это минимально было ок для глаза, а когда настанет час X, и продукт будет достаточно развит, приносить деньги, и будет то самое отдельное подразделение смузихлебов фронтендеров-дизигнеров, которые сидят, хуярят презентации и поясняют как margin: 5px улучшит восприятие пользователями наполнения - тогда это все легко выбрасывается и вы пилите свое.

Эх. Блядь. Как у меня горит что девекспресс - санкционный. Это литерли была серебрянная пуля чтобы хуйнуть быстро все че надо, потом можно чутка обмазаться какими-нибудь чартами красивыми и либой для анимашек - и все текли. А сейчас - всякое попенсорсное, которое больше самому допиливать до вменяемого состояния. Пиздец как горит.
Аноним 26/04/24 Птн 13:49:34 3135968 637
>>3135310
Чё, авалония хуже девэкспресса? Не верю. Поясни на примерах.
Аноним 26/04/24 Птн 16:16:09 3136104 638
>>3135968
Надеюсь когда нибудь ты поймешь, насколько глупый вопрос задал.
Аноним 26/04/24 Птн 16:47:03 3136156 639
>>3136104
> Вместо пояснения на примерах, троллит переходом на личности.
Ну здесь всё предельно ясно.
Аноним 26/04/24 Птн 17:39:03 3136216 640
>>3136156
> троллит
Значение знаешь? Пойми, дурачок, ты буквально спрашиваешь, почему кирпич хуже пентхауса. Осознай всю нелепость вопроса.
Аноним 26/04/24 Птн 18:01:31 3136254 641
>>3113075
А вообще, я тут поресерчил и наткнулся на CommunityToolkit. У них есть классная штука - Мессенджер. Все классы, наследуемые от ObservableRecipient могут как получать так и отправлять сообщения через него под капотом используются слабые ссылки. Таким образом можно в родительской вью модели подписаться на запросы навигации, и в других вьюхах просто слать реквесты, и не нужно писать тонны бойлерплейта. Пожалуй теперь буду проектировать архитектуру на его основе.
Аноним 26/04/24 Птн 18:27:35 3136275 642
>>3136216
Из кирпичей авалонии можно построить пентхаус красивее и эффективнее впф-параши прибитой гвоздями к венде. Осознал. Спасибо.
Аноним 26/04/24 Птн 19:50:56 3136435 643
Пацаны. Бекендеро-макака на связи.
Тут внезапно назревает десктопный проект.
Так вот. Я тут понял, что нихуя не понимаю за архитектуру десктопа. Единственное что хочу, чтобы был модульным, и можно было докинуть dll и новая фича впиндерилась САМА. Ну, типа видел похожее во фрутилупсах, когда игрался и кажется пиздец крутой хуйней.
Вот.
МБ кто-то поделится проектами опенсорсными на дотнете под десктоп, которые, так сказать - ОБРАЗЦОВЫЕ. Чтобы можно было поглядеть, че там да как, чтобы бест практис перенять.
Аноним 26/04/24 Птн 21:10:44 3136492 644
>>3136254
не слабые ссылки, а дефолтный общий мессенджер если не передал ему другой тип мессенджера или конкретный.
Аноним 26/04/24 Птн 21:46:16 3136523 645
>>3136275
ага, как только победишь шрифты
Аноним 27/04/24 Суб 14:06:58 3137075 646
>>3136523
А что не так со шрифтами? Я б с удовольствием победил, только очерти проблему.
Аноним 27/04/24 Суб 14:49:54 3137120 647
>>3137075
мыльные они
и, в отличие от впф, чинятся так себе. Поэтому они в авалонии и крупнее ибо мыло.
Аноним 27/04/24 Суб 15:21:58 3137147 648
1714220518575.png 2Кб, 167x112
167x112
1714220518605.jpg 103Кб, 630x419
630x419
>>3137120
За шрифты там отвечает встроенный пакет harfbuzz, соотвесна, если тебе что-то не нравится - настраиваешь его. Я с шрифтами проблем не вижу.
Аноним 27/04/24 Суб 15:28:56 3137156 649
>>3137147
А ты смешной. Во первых для его настройки придется самому компилять авалонию, а во вторых, сколько не настраивай, а directwrite из него не сделаешт.
Аноним 27/04/24 Суб 15:35:35 3137162 650
>>3137156
Во-первых, повторюсь, я не вижу мыла.
Во-вторых, ничего компилять не нужно. Идёшь в документацию harfbuzz и разбираешься. Я вместо тебя этого делать не буду.
В третьих. Harfbuzz используется отдельно без авалоний всяких, это нугет-пакет, и пользователи не жалуются. У одного тебя мыло. Я делаю вывод, что ты несёшь хуйню.
Аноним 27/04/24 Суб 15:56:14 3137174 651
image.png 6Кб, 327x91
327x91
>>3137162
То, что ты пиздоглазый тупой сектант все уже поняли. Но я все же потрачу время, и покажу наглядный пример всратых шрифтов в авалонии.
Аноним 27/04/24 Суб 15:57:57 3137177 652
>>3137162
>Во-вторых, ничего компилять не нужно. Идёшь в документацию harfbuzz и разбираешься. Я вместо тебя этого делать не буду.
Ты правда какой-то блаженный, если не понимаешь, что для изменения таких вещей как рендеринг необходимо залазить в самые кишочки фреймворка
Аноним 27/04/24 Суб 16:00:32 3137180 653
>>3137162
>В третьих. Harfbuzz используется отдельно без авалоний всяких, это нугет-пакет, и пользователи не жалуются. У одного тебя мыло. Я делаю вывод, что ты несёшь хуйню.
Конечно не жалуются, ведь шрифты рендерит не harfbuzz, тупой ты ебанат. А вот жалоб на хуевые шрифты в Skia в том числе в хроме вагон и маленькая тележка. Но гуглу поебать, на мобилках то норм.
Аноним 27/04/24 Суб 19:02:23 3137300 654
>>3137174
>>3137177
>>3137180
Вот поэтому я и не использую говнолонию, а юзаю православный Eto.Forms, у которого кодовая база с lookless-контролами разворачивается в один из выбранных бэкендов, например на ВПФ для венды.
Аноним 27/04/24 Суб 19:15:31 3137311 655
>>3137300
Твои говноформы уже обоссали несколько тредов назад, за добавкой пришел?
Аноним 27/04/24 Суб 19:17:42 3137314 656
>>3137311
Обсираешь етоформсы = обсираешь ВПФ.
Аноним 27/04/24 Суб 19:25:02 3137323 657
Помогите, у меня сломался впф! Все кнопки как в виндовс 98! даже при создании нового проекта! Я уже что только не делал, манифест подсовывал. Ничего не помогает!
Аноним 27/04/24 Суб 19:47:58 3137335 658
>>3137323
>Помогите, у меня сломался впф! Все кнопки как в виндовс 98!
Так это же охуенно. Я бы на твоем месте пытался выяснить как это специально повторить.
Аноним 27/04/24 Суб 19:59:58 3137343 659
Аноним 27/04/24 Суб 20:14:07 3137350 660
>>3137335
Ну хз, после майских сделаю дамп венды. Чем дампнуть, чтобы ИТТ выложить на анализ?
Аноним 27/04/24 Суб 21:50:35 3137433 661
>>3137335
А что тебя смущает.
Я бы только за MVP цену снизил раза в 2, а за готовый продукт наоборот поднял в 1.5-2 раза.
Аноним 27/04/24 Суб 21:53:39 3137435 662
Аноним 28/04/24 Вск 06:05:19 3137572 663
Я тут с удивлением осознал, что в современных xaml фреймворках uwp, winui, maui нет cleartype, из-за чего шрифты выглядят как говно в сравнении с wpf
Аноним 29/04/24 Пнд 13:29:44 3138684 664
>>3137572
Более того, если ты выставишь у себя на венде DPI выше 100% (от дефолтного, в терминах венды) ты охуеешь от того, что большинство из них превращаются в ещё более лютое мыло.

И только православный винформс, написанный ещё дидами, уверенно держит ровные линии без мыла.
Аноним 29/04/24 Пнд 14:00:29 3138709 665
>>3138684
ну так в формсах другой тип рендера
а вообще зачем выставлять больше дефолтного?
если ты про 4к дисплеи и всякие ретины то WPF имеет средства для настройки рендера

в далекие времена написал заглушку
TextOptions.SetTextFormattingMode(window,
Dpi >= 144 ? TextFormattingMode.Ideal : TextFormattingMode.Display);

TextOptions.SetTextRenderingMode(window, TextRenderingMode.ClearType);

правда не проверял на ретинах ибо нет их у меня, так что делал больше для фуллхдшных, а на ретинах и так хорошо же.
Аноним 30/04/24 Втр 11:32:42 3139530 666
Выбор между вебдевом и разрабом на юнити. Цель - ненапряжно работать, а в свободное время лепить свою игрушку(подтянуть рисование, в 3д потыкать).
Как я понимаю если прямо сейчас вкатываться в юньку у меня в перспективе будет только лепить гиперказуальное говно для галеры, где меня заебут переработками? Стоит ли в таком случае вкатиться в вебразраба и уже оттуда заниматься своей хуйней? Что вообще думаете про геймдев нынче?
Аноним 30/04/24 Втр 11:36:40 3139532 667
>>3139530
Места в вебе больше. Да и в целом у тебя выбор не веб или гейдэв, а бизнес или гейдев
Аноним 30/04/24 Втр 11:37:56 3139533 668
>>3139530
Геймдев говно с низкими зп и переработками. Веб единственное нормальное направление. Но после тяжелой рабочей недели у тебя уже не будет сил сидеть на выходных и ковырять свою игру, имей в виду.
Аноним 30/04/24 Втр 11:45:46 3139535 669
>>3139533
Смотря какая неделя и где работать. У меня порой бывает очелло, а порой даже желание что то на выхах попилить остаётся
Аноним 30/04/24 Втр 13:24:11 3139659 670
>>3139533
>Но после тяжелой рабочей недели
Я не планирую тяжело работать. Планирую найти работку на парттайм или ненапряжный проект. В ущерб своей ЗП и перспективы конечно же.
Аноним 30/04/24 Втр 14:14:10 3139715 671
>>3139659
Было бы всё так просто я бы тоже .5 залетел а не фуллтайм
Аноним 30/04/24 Втр 14:15:48 3139716 672
>>3139659
Единственный адекватный вариант работать парттайм - это устроиться на фуллтайм, делать свою работу за половину времени, а остальное время чилить или заниматься своими делами. Но чтобы такое получалось, надо быть не начинающим, а очень крутым специалистом.
Аноним 30/04/24 Втр 14:19:31 3139719 673
>>3139530
>Цель - ненапряжно работать, а в свободное время лепить свою игрушку(подтянуть рисование, в 3д потыкать).
Есть вариант. Устраиваешься на какой-нибудь завод за 30К, там периодически подкручиваешь для теть срак из бухгалтерии какое-нибудь древнее говно на .NetFramework, остальное время гоняешь чаи и пилишь свою игрушку.
Аноним 01/05/24 Срд 15:14:42 3140938 674
>>3097760 (OP)
а ведет/вел кто план-график задач?
просто хочу составить для обучения и я как то затерялся.
для диплома по С# надо что то сварганить по базе данным (тут бы подошел наверн больше php, но мне в будущем для геймдева не особо нужен будет) и статью написать.
Аноним 01/05/24 Срд 16:24:53 3141036 675
>>3140938
> но мне в будущем для геймдева не особо нужен будет
... опыт кодинга не зависит от языка. Жаль что ты этого не способен этого понять на своём уровне, и вдвойне жаль, что ты не способен поверить в это. Ты 20 лет будешь делать неинтересную тебе хуйню, на нелюбимом тобой языке, чтобы через 20 лет понять, что тот анон был прав 20 лет назад, который написал, что...
Аноним 01/05/24 Срд 16:38:30 3141061 676
Копайлотом для Студии кто-то пользуется? Дадите фидбек?
Аноним 01/05/24 Срд 16:39:50 3141064 677
Аноним 01/05/24 Срд 18:16:34 3141215 678
>>3140938
>а ведет/вел кто план-график задач?
Если ты под 'план-график' подразумеваешь, что-нибудь вроде диаграмм Ганта, то в соло это нахуй не нужно. Когда лидом станешь, тогда и научишься. Для разработки в одного или миникомандой в 2..3 человека достаточно простейшей канбан-доски.
Аноним 01/05/24 Срд 18:23:49 3141226 679
>>3141036
>... опыт кодинга не зависит от языка.
В большинстве случаев зависит. Каждый язык прививает свои привычки, обусловленные либо спецификой, либо особенностями/ошибками дизайна языка. И очень часто те кто пытаются пересесть с одного ЯП на другой перетаскивают все эти особенности за собой и нужно время (иногда достаточно продолжительное), чтобы от них избавиться и переключиться на другие парадигмы.
Говорить о том, что "язык не влияет" можно только в случае хорошей теоретической и практической базы в самих основах информатики.
Аноним 01/05/24 Срд 18:24:44 3141228 680
>>3141226
>Говорить о том, что "язык не влияет" можно только в случае хорошей теоретической и практической базы в самих основах информатики.
Чего у большинства тех кто сейчас изучает программирование нет. (забыл дописать)
Аноним 01/05/24 Срд 20:03:10 3141460 681
>>3141226
> хорошей теоретической и практической базы в самих основах информатики
Спасибо моему учителю. Земля ему пухом.
>>3141228
Всё время забываю, что я уже старая школа и современные зумеры не знают даже половины того что знаю я.
Аноним 02/05/24 Чтв 10:31:31 3141897 682
Если 2 приложения пишут и читают с одной sqlite бд, не будет ли проблем?
Делаю ТГ бота и админку к нему в web. Норм идея сразу из приложений обращаться к бд?
Или делать микросервис который бы писал и читал бд? Что то типо TgBot+WebApi_Bd+WebAdmin
Аноним 02/05/24 Чтв 12:41:02 3142102 683
>>3141897
>Если 2 приложения пишут и читают с одной sqlite бд, не будет ли проблем?
Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT at the same time. But only one process can be making changes to the database at any moment in time, however.
Аноним 02/05/24 Чтв 12:43:33 3142108 684
>>3141897
Вообще, в принципе, плохая идея подключать к одной БД (любой ) более одного приложения.
Максимум какой-нибудь мониторинг поверх навешивать, но и то это только на уровне select-ов будет.
Аноним 02/05/24 Чтв 12:50:33 3142123 685
>>3141897
При частой записи легко поймаешь database locked
Аноним 02/05/24 Чтв 13:01:36 3142144 686
>>3142108
Что для тебя приложение?
Две апихи одна для интеграций и а другая для фронта это разные? А два+ инстанса одного сервиса при горизонтальном масштабировании? Что на счёт коннекшен пулов которые повсеместно?

Где ты вообще услышал такое?
Аноним 02/05/24 Чтв 13:01:57 3142145 687
>>3141897
sqlite плох для активной многопоточной записи.
не знаю как реализация от майков, но стандартная подвержена проблеме

1 первый поток пишет
2 второй поток видит локед и ждет
3 первый поток освободился пришел еще один - база свободна, начинает писать
4 второй поток (из пункта 2) проснулся и снова проверяет можно ли писать - а там локед и он снова ждать
в итоге все влезают впереди второго потока и у того истекает таймаут

если меньше писать, увеличить таймаут, то проблема будет иметь меньшую вероятность встречи, но по хорошему нужно писать в порядке очереди. И если даже для одного приложения это неудобно, то для двух тем более.
Аноним 02/05/24 Чтв 14:59:52 3142291 688
>>3142144
>Две апихи одна для интеграций и а другая для фронта это разные?
Ну я хуй знает, как это у тебя построено, может у тебя это одно приложение, а может и разные.
Если же ты под "API для интеграций" для интеграций, подразумеваешь непосредственный доступ к БД - земля тебе пухом, братишка.

>А два+ инстанса одного сервиса при горизонтальном масштабировании?
Не вижу проблемы. Горизонтальное масштабирование подразумевает, что экземпляры приложений будут идентичными. По сути - то же самое, что запустить несколько потоков в одном приложении.
А там разговор про разные приложения с разным функционалом, когда каждое приложение творит в БД свою собственную хуйню.
Опять же, я не говорил, что этого нельзя делать или запрещено, я сказал, что это плохая идея. Т.к. возможные сайдэффекты в будущем в большинстве случаев перевешивают пользу сейчас.
Аноним 02/05/24 Чтв 18:11:49 3142563 689
>>3141897
В контексте пишут-читают.
Делай третье приложение, которое полностью владеет базой.
Далее. Разбей апи этого приложения на запись-чтение.
Запись - выполняй в одном потоке, через очередь.
Чтение - через WAL можно нормально организовать из пачки потоков, если не критично, что какие-то данные могут устареть, если критично - таки через тот же поток читай.
Далее. С SQLite - неочевидно, но даже если ты там кольцевой буффер намутил - эта хуйня не умеет чистить сама себя, что логично. Потому - тебе периодически надо Vacuum дергать, либо собирать SQLite с автовакуумом, иначе, через полгодика-годик оно тебе все место спокойно сожрет, если в базу активно пишут-удаляют.
Аноним 02/05/24 Чтв 18:15:54 3142570 690
>>3142563
Знал бы ты как я svn ненавидел из-за раздувания sqlite файла до размеров в гигабайты. А ещё и тупейший вакуум с подходом stop the world
Аноним 02/05/24 Чтв 18:17:26 3142571 691
>>3142570
А я знаю. На одном из мест работы - это чудо эксплуатировалось активно.
Аноним 03/05/24 Птн 15:07:46 3143354 692
image.png 38Кб, 601x396
601x396
>>3142102
>>3142108
>>3142123
>>3142145
>>3142563
Всем спасибо.
Решил всё такие MVP делать в одном приложении что бы было быстрее, потом если у бота будет популярность переделаю на 3 приложения.

Вот у меня вопрос по кешу
Есть
IMemoryCache cache;
И еще есть
MemoryCache cache;
В интерфейсе нету Count а в классе есть. Это как так? Что юзать? Нихуя не понятно, я начал чета юзать класс MemoryCache. Там типо делается так Get(key) и получаю object который потом нужно привести к к своему типу, чета я подумал что так будет долго и написал свой "кей" Dictinary<long,MyClass>. В кеше нужно юзать я так понял TryGetValue но его в классе нет он в интерфейсе, корочи нихуя не понятно.

И еще я сцыкнул конструкции
cache.TryGetValue(id, out User? user);
Вот у меня есть класс Storage он Singleton, в нем тот самый кеш. Таски обращаются за инфой в хранилище и хранилище возвращает к примеру User? user, что будет если первый таск выполнит строчку cache.TryGetValue(id, out User? user); далее пойдет дальше, а вэто время второй таск тоже выполнит эту же строчку, не изменится ли значение User? user?
Сейчас у меня пикрил, нужно ли там лок вставлять?
Аноним 03/05/24 Птн 18:00:18 3143621 693
>>3143354
>В интерфейсе нету Count а в классе есть. Это как так?
а вот так. клиенту для работы с кешем нужно читать и класть в него (что и предоставляет интерфейс). Ему знание Count не нужно.

>TryGetValue но его в классе нет он в интерфейсе
такого быть не может. если есть в интерфейсе - есть и в классе. Иначе класс просто не сможет реализовать интерфейс (и не скомпилится)

>Сейчас у меня пикрил, нужно ли там лок вставлять?
угу, будет двойное выполнение и нужно от этого защищаться. Так что нужно либо лок, либо кешировать Lazy<T> (что впрочем тот же лок только в профиль)
Аноним 03/05/24 Птн 18:08:34 3143637 694
>>3143621
> если есть в интерфейсе - есть и в классе
В какой то версии ебанулись и ввели дефолтную реализацию в интерфейсах
Аноним 03/05/24 Птн 18:59:05 3143715 695
>>3143637
которая ограничена тем что публично. Так что формально такие вещи существуют, но написать ты такой метод не можешь - у тебя просто не к чему внутри него обратиться для его работоспособности.
Аноним 04/05/24 Суб 16:51:17 3144649 696
image.png 89Кб, 844x281
844x281
image.png 44Кб, 729x220
729x220
Пацаны.
Чем такой код хуже стандартной фигни с OnPropertyChanged в каждом классе который реализует INotifyPropertyChanged?
Аноним 04/05/24 Суб 17:12:07 3144676 697
>>3144649
Ничем не хуже. Фактически ты повторил реализацию из Reactive UI.
Аноним 04/05/24 Суб 17:16:52 3144687 698
>>3144676
Хм. Я умный получается?
Просто сейчас - начинается проект с десктопом, и я чет курю мануалы, как там в шарпах писать этот десктоп. Меня смутило что в туториалах в каждом классе этот OnPropertyChanged. Десктоп трогал последний раз, когда WinForms были актуальны.
Аноним 04/05/24 Суб 17:20:17 3144693 699
>>3144687
Ну, да, выходит так.
Аноним 04/05/24 Суб 17:23:19 3144698 700
>>3144687
Твой метод требует оптимизации чтобы меньше рефлексировать каждый раз, а также не учитывает что значение не изменилось и нечего шуметь (на деле это должно быть настраиваемое)

А так - вот эту писанину лучше доверить Fody или еще чему нибудь вон как в комьюнититулкит.
Аноним 04/05/24 Суб 17:41:36 3144730 701
>>3144649
Тем, что нужно использовать this, что бред само по себе, когда можно просто реализовать в родительском классе.
Аноним 04/05/24 Суб 17:43:01 3144733 702
>>3144649
Ну и в целом, рефлексия это медленно и еще у тебя нет проверки на равенство
Аноним 05/05/24 Вск 19:32:19 3145793 703
Пачаны, нид хелп.
Я не писал апих на шарпе, ток лабы в унике.
Сейчас хочу перебраться со своих пердей, где есть дноработка на ноде+реакте в дс1/2 и пересесть на асп нет.

Так вот, подскажите, пожалуйста, что наиболее часто юзается в норм местах? В плане брокеры, grpc, и прочие штуки типа yarp.

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

заебало педалить всякую рандомную хуйню в черную, хочу спокойно педалить че-то одно и в команде а не в одно ебало :c
Аноним 05/05/24 Вск 19:53:50 3145815 704
>>3145793
> убергайд в виде видосиков, курсов или еще чего, приближенного к реальному положению дел
Видосы Шмачилина на ютубе.
Аноним 05/05/24 Вск 20:11:42 3145845 705
>>3145815
чет мемное? там ток впф и 2.5 видоса выдало
Аноним 05/05/24 Вск 21:02:35 3145900 706
>>3145845
> чет мемное?
Да.
Легенда треда.
Аноним 05/05/24 Вск 22:40:32 3145950 707
Аноним 06/05/24 Пнд 16:22:43 3146553 708
Ребят, ищу первую работу и выслали тестовое задание, к сожалению, я его сразу не уточнил, т.к. только бегло просмотрел, времени не было. И теперь вообще не вдупляю пункт 2.2 (про xml):

- Создать MVC веб-приложение, которое позволяет пользователям вводить и хранить документы в базе данных PosgreSQL;
- Документ должен представлять собой понятие - Договор на оказание платных услуг, содержащий в себе номер и дату договора, а так же возможность указывать строки (смету) - название и цена.

2. Взаимодействие с базой данных PostgreSQL:
- Настроить Entity Framework для работы с базой данных;
- Настроить обращение к базе данных из приложения на ASP.NET. Документ должен передаваться в хранимую процедуру в форме XML, результатом должна быть сумма цен всех строк документа.

Выглядит так будто нужно просто из БД в UI вернуть сумму строк, но причём тут XML? Прямо в процедуре брать данные из таблиц и превращать их в XML, просчитывать сумму и возвращать в .net приложение её?
Или что, dto документа из UI слоя превращать в XML и передавать в БД? Но причём тут тогда результат...

Может кто мысль подтвердить или новую подкинуть? Сам виноват, что не уточнил, теперь боюсь им писать.
Аноним 06/05/24 Пнд 16:28:13 3146561 709
>>3146553
Ну нахуй. XML это либо госы либо ебанутый легаси на дотнет фреймворке, что из этого хуже стоит ещё подумать
Аноним 06/05/24 Пнд 17:33:57 3146620 710
>>3146553
уточняй. Ничего плохого не случится.
если это так сократили "у нас выгрузка в виде xml туда сюда пук вот и база данных, готово", то нужно уточнять. ТЗ должно быть ясным. Если они считают что тз ясное и вопросы не нужны - неча тебе там делать.
А если в хранимке хмл крутить, то это дичь - неча тебе там делать 2.0
Аноним 06/05/24 Пнд 18:12:21 3146658 711
>>3146553
>теперь боюсь им писать.
Не бойся. Очень часто в тестовых заданиях оставляют непонятки, как раз на тот случай, чтобы посмотреть умеет ли кандидат уточнять требования по ТЗ.
Если спросят, почему сразу не уточнил, можешь сказать, что занят был всем остальным функционалом, который понятен.
>>3146561
>Ну нахуй. XML это либо госы либо ебанутый легаси на дотнет фреймворке, что из этого хуже стоит ещё подумать
Ты удивишься, но до сих пор половина бизнеса и весь банкинг на xml-ках работают. Многие причем просто пересылая их в виде файликов друг-другу через фтп или каталоги на серваках.
Конечно такая дичь, как запихивать xml-непосредственно в sql, встречается крайне редко и это действительно долбоебизм. Но сам формат xml - это база.
Аноним 06/05/24 Пнд 18:13:47 3146660 712
>>3146658
> Ты удивишься
Не удивился. Разве не об этом я и написал?
Аноним 06/05/24 Пнд 18:14:28 3146661 713
16721289485620.gif 4679Кб, 450x278
450x278
>>3146553
>>3146620
Поддвачану, написано так как будто UI должен конвертить документ в xml, xml в бд процедуру, а процедура должна считать в xml'e цену, но делать такие операции на стороне бд это немного шизофрения.
Уточни у них, если это так советую сказать им что ты перезвонишь.
Аноним 06/05/24 Пнд 18:16:50 3146664 714
*под UI я имел ввиду приложение само собой
>>3146661
Аноним 06/05/24 Пнд 19:09:20 3146711 715
>>3146660
> Разве не об этом я и написал?
Ты написал, что xml - это либо госы, либо легаси.
А я написал, что весь бизнес и почти весь банкинг на них работает.
Аноним 06/05/24 Пнд 19:16:15 3146717 716
Ладно, спасибо, ребята. Уточню завтра.

Других вакансий всё равно в моём городе пока нет, либо эта, либо "инженер-программист" на нпп/заводы, выбирать особо не приходится.
Аноним 06/05/24 Пнд 19:32:27 3146742 717
>>3146717
> либо "инженер-программист" на нпп/заводы
А я бы пошёл. Но увы.
Аноним 06/05/24 Пнд 19:44:45 3146764 718
>>3146661
> но делать такие операции на стороне бд это немного шизофрения.
Че эта?
Удобно. Допустим, настроил триггеры, у тебя этот XML сразу в БД формируется. Сверху можно еще вебхуки дергать по завершенюи транзакции, чтобы результирующий XML сразу отдавать куда надо. Одни плюсы короче. Ноль минусов.
Аноним 06/05/24 Пнд 20:57:37 3146822 719
>>3146764
Удобно. Хз только, зачем вообще тогда нужен дотнет, если можно всё делать на хранимках, как деды.
Аноним 06/05/24 Пнд 21:03:22 3146831 720
>>3146822
Так говоришь, как деды, будто что-то плохое.
А дотнет нужен потому что можно бысто круды хуярить, плюс - всякие там идентити, двухфакторные аутентификации, ну, там, ты понял.
Просто если вопрос про интеграцию дохуя всякого с одной базой - ну реально оказывается часто что БД это самый удобный узел системы, через который можно все со всем подружить.
Аноним 06/05/24 Пнд 23:06:00 3146911 721
>>3146717
>Других вакансий всё равно в моём городе пока нет
Советую тогда не гнать лошадей, а сделать все пусть и неторопливо, но качественно, уточняя непонятные моменты (в меру конечно).
У меня в свое время товарищ будучи с нулевым стажем, не зассал и залетел на джун-плюс позицию, просто потому что основательно выполнил тестовое. Даже с учетом того, что он сделал его за две недели вместо одной как просили, но он задавал нормальные вопросы, проявил инициативу, попросил отсрочку с прицелом не на то, что он не успел, а что хочет сделать нормально.
Аноним 06/05/24 Пнд 23:07:51 3146914 722
>>3146764
>Одни плюсы короче.
Есть один минус. Тот кому придется это дорабатывать за тобой - проклянет тебя, выследит и выбьет из тебя все дерьмо.
Аноним 07/05/24 Втр 17:42:52 3147604 723
Надеюсь здесь люди, разбирающиеся в win2d и direct2d. Я столкнулся с одним странным багом - если отрисовать на холсте только текст, то он будет смещен на 1 пиксель вниз, из-за чего появляется мыло. Однако если вместе с текстом нарисовать хоть какую нибудь фигуру, то смещение пропадает. Это очень бросается в глаза, когда пишешь текстовый контрол с мигающей кареткой. При чем проблема только на масштабе не кратном 50 (125%, 175% и тд). Это можно как-то пофиксить?
Аноним 07/05/24 Втр 18:09:18 3147654 724
>>3147604
Помогло включение опции NoPixelSnap при рендеринге текста
Аноним 07/05/24 Втр 18:13:36 3147660 725
>>3147654
Нашел еще решение ещё лучше, вместо использования dips включил пиксели
Аноним 07/05/24 Втр 19:32:32 3147719 726
Сейчас стою перед выбором, куда вкатываться основательно: к вам или к жабапидорам. Пробовал и то, и то - шарп нравится больше, но чет я наслушался про то, что работу тяжело найти и перекатиться в европку/швятые потом тяжело, и вообще работы нормальной нет, одно легаси говно. Это близко к правде, или это завистники слухи распространяют?
Аноним 07/05/24 Втр 20:16:39 3147752 727
>>3147719
Жава и шарп на рынке - занимают +- одинаковое пространство. Жава была сильно популярна на мобилках, пока не появился котлин.
.NET - для серверов считай второй по популярности стек, после LAMP
По кол-ву работы, если в мире - +- одинаково. Если в РФ, тут как обычно - надо распилить осводить бюджет, потому переписываем старое-негодное на ПХП/Жаве на что-то более модное-молодежное, похуй что потеряем половину функционала, зато модное ГОвно или еще что-то.
В РФ шарп активно применяется в проебизнесах, вузах, производствах и как клей чтобы несколько систем друг с другом сдружить.
Плюс. На шарпе есть юнька, которая конечно обосралась, но все еще замены ей внятной нет.
Аноним 07/05/24 Втр 20:42:42 3147785 728
>>3147719
>перекатиться в европку/швятые потом тяжело,
Язык программирования будет одним из твоих последних и незначительных препятствий при переезде.
>и вообще работы нормальной нет, одно легаси говно. Это близко к правде, или это завистники слухи распространяют?
Работы дохуя, но не для новичков.
Насчет легаси его полно и на шарпе и в джаве. Но есть ньюансы (чисто мои наблюдения, не претендую на истину). В джаве легаси размазано ровным слоем по всему рынку и ты с ним столкнешься практически везде куда бы ни пошел. В шарпе же легаси сосредоточено в отдельных отраслях - промышленность (те самые заводы), прикладные области, десктоп, древний internal web и т.д. Если идти куда-нибудь в финтех, B2B, продуктовые галеры, то там большую часть уже переписали на .Net6 и под линукс/контейнеры, есть места где уже в 8-й переходят. В шарпе как раз таки проще чем в джаве относятся к "выкинуть старое - написать новое", т.к. переезд со старых версий относительно не болезненный (опять же по своему опыту), плюс он в принципе без особых проблем ложиться на модное нынче импортозамещение (на те же российские линуксы с винды переходить на раз-два)
Аноним 08/05/24 Срд 07:06:58 3148322 729
Как через апи картинку на клиент передать?
Аноним 08/05/24 Срд 07:14:34 3148323 730
>>3148322
Как в документации к апи написано - так и передавать.
Аноним 08/05/24 Срд 07:16:57 3148324 731
Аноним 08/05/24 Срд 07:41:27 3148328 732
>>3148324
Значит, ты передаешь картинку НЕ через АПИ.
Аноним 08/05/24 Срд 09:30:35 3148365 733
Аноним 08/05/24 Срд 13:10:16 3148527 734
>>3148322
Смотря что ты подразумеваешь под API. Делать GET-запрос и в ответ получать image/png - это API? Или там шизозадание, где картинку надо закодировать в Base64 и передать внутри жсона?
Аноним 08/05/24 Срд 13:22:07 3148539 735
>>3148527
А в чём шиза?
Base64 гарантирует корректную передачу по сети.
Жсон универсальный формат, прочитается в любой среде на стороне получателя.
Шиза-то в чём?
Аноним 08/05/24 Срд 13:50:51 3148557 736
>>3148539
загрузи гигабайтный файл - и десериализуй на стороне получателя чтобы достать файл. И вопросы отпадут
Аноним 08/05/24 Срд 14:06:05 3148565 737
>>3148557
Я што дурак гигабайтный файл целиком грузить? Я его разобъю на фрагменты, и base64 поможет мне их собрать обратно на стороне получателя.
Аноним 08/05/24 Срд 15:36:42 3148658 738
>>3148565
грузить во много запросов вместо одного? ну ты даешь.
Аноним 08/05/24 Срд 15:56:07 3148683 739
>>3148322
>>3148365
Чел, половина учебных проектов в веб-разработке - это буквально аналоги какого-нибудь онлайн маганзина (страничка каталога или экран корзины), или какой-нибудь еще херни с показом картинок (по подиночке или каруселью) и т.д. Если ты этого не знаешь или не можешь нагуглить, то слишком рано ты за поиск работы и тестовые зядания принялся.
Аноним 08/05/24 Срд 19:03:17 3148880 740
Аноны, возникла потребность реализовать простенький текстовый редактор для десктопа. Из функционала печать текста и задание выделенной области различных свойств (жирность, курсив, шрифт, размер, цвет и тд). И я сейчас пытаюсь придумать, как реализовать хранение свойств. Пока есть идея делить текст на отдельные блоки с одинаковым форматированием. Но тогда будет жопа, если я выделю половину одного блока, и половину другого, установлю общую жирность, и мне придется каждый блок делить на два отдельных. Уже предвижу тут миллион возможных багов. Плюс не ясно, как выделять текст с такой логикой. Либо хранить для каждого блока его позицию в строке или параграфе, но тогда после добавления текста в один блок придется пересчитывать координаты последующих, либо хранить только текст и при каждом перемещении каретки вычислять позиции блоков заново.
Аноним 08/05/24 Срд 19:15:36 3148899 741
>>3148880
Кури docx или rtf или ещё какой формат. Уже всё придумано
Аноним 08/05/24 Срд 20:17:26 3148953 742
>>3148899
Ну покурил, там так и есть, весь текст разбит на отрезки текста с одинаковым форматированием. Но из структуры формата не ясно, как все таки реализовать выделение
Аноним 09/05/24 Чтв 08:13:59 3149243 743
>>3148880
В чем проблема просто маркдаун использовать?
Во-первых, сам формат оч простой.
Во-вторых, при желании пользователь может открыть без всей этой ебатории с какими-то там редакторами.

Но если совсем простенький текстовый редактор, то вообще - можешь обойтись простым RichTextBox, тот все что тебе надо умеет. Тебе сверху накидать кнопок и заменять текст в выделенной области на те какие тебе там надо.
Аноним 09/05/24 Чтв 08:46:21 3149246 744
>>3149243
Анон, проблема не в самом формате, тут я уже определился, проблема именно в процессе работы с текстом. То есть как хранить свойства во время работы, чтобы все работало быстро. И желательно логика была как можно проще.
А richtextbox увы, с одной стороны слишком сложен, а с другой в нем много всего прибито гвоздями. Я сейчас для рендера текста использую DirectWrite (IDWriteTextLayout), там куда больше возможностей для кастомизации текста, притом всю сложную работу вроде bidi и переноса строк он делает сам. Мне остается только скармливать ему текст и устанавливать свойства для отдельных промежутков. Плюс мне нужна высота строк для отрисовки линовки.
А markdown насколько мне известно не поддерживает толком форматирование разные шрифты, размер и тд текста.
Аноним 09/05/24 Чтв 10:16:40 3149289 745
>>3149246
> То есть как хранить свойства во время работы, чтобы все работало быстро.

В виде дерева.
Аноним 09/05/24 Чтв 10:25:16 3149297 746
0ac13798e2e9cf0[...].jpg 53Кб, 474x711
474x711
Пацаны. Случилось страшное. Продукт дорос до состояния, когда им пользуются.
Собственно. Встала проблема. А как багрепорты и вообще вот это все получать?
Типа, от пользователя - не дождешься, чтобы он пояснил, че он вообще делал. Если кто-то и обращается, то в духе: ничерта не работает, ну вы и говно сделали, чините. Тестировщики - чуть лучше, но не сильно, типа да, описывает проблему, описывает шаги, но не повторяется проблема.
В общем. Я не хотел, но видимо придется впиндерить телеметрию. Чтобы в случае чего - можно было больше инфы иметь.
Но тут несколько проблем.
1. Я считаю что эт не оч этично. Типа, даже если пользователь дал согласие.
2. Как эту телеметрию делать правильно - я не ебу. Типа, ну, допустим, будет просто собираться какой-то дамп со стейтом и улетать на сервер. Хорошо, но типа это сразу сервер нужен дополнительный, нужно как-то это анализировать удобно, ведь без нормальныйх средств, это все равно что текстовые логи попросить, просто большой кусок данных, который хуй проанализируешь нормально.

В общем. Я прошу советов мудрых. Как таки упростить мне жизнь как разрабу, чтобы баги в проде легче находились и хотя бы понимать последние действия пользователя, которые выявили багулину.
Аноним 09/05/24 Чтв 11:28:17 3149410 747
1715243297501.png 9Кб, 395x401
395x401
>>3149297
А как это сделано у других? Вот посмотри и повтори. Чо там сложного?
Аноним 09/05/24 Чтв 11:30:03 3149412 748
Аноним 09/05/24 Чтв 14:51:06 3149583 749
>>3149289
Не мог бы ты развернуть мысль?
Аноним 09/05/24 Чтв 17:26:32 3149817 750
image.png 422Кб, 1136x991
1136x991
>>3149583
А что собственно развивать?
Твой текст - некий документ.
Значит что? Значит тебе нужна некая объектная модель того, как этот документ представлен в приложении.
Ну, а как быстро ходить по объектной модели документа, менять что-то в ней, совершать классические операции всякие типа добавить к куску документа стиль и прочее? Правильно, представить в виде дерева объектов. Корнем - является этот самый документ, а дальше - какие-то твои объекты, которые описывают структуру документа, какие стили к чему применяются, какие данные лежат где и прочее. Так ты просто можешь найти текущий кусок документа, и при редактировании - просто добавить либо данные, либо новую ноду, в которой лежит стиль который тебе нужен и прочее.

Можешь не изъебываться со своим форматом, а взять какой-нибудь готовый. В любом случае в твоем приложении он будет представлен в виде дерева, потому что операции с деревьями это быстро, это просто, это удобно для тебя как разработчика.
Аноним 10/05/24 Птн 01:42:45 3150262 751
>>3149817
>потому что операции с деревьями это быстро, это просто, это удобно для тебя как разработчика.
>операции с деревьями
"Но как же так, мне же сказали, что алгоритмы не нужны..."
Чет, слегка ржу.
Аноним 10/05/24 Птн 02:01:38 3150266 752
>>3150262
Пользуюсь хешсетом и словарем не вникая в реализацию (и тем более не пишу свою)
Мне пора уходить из профы?
Аноним 10/05/24 Птн 03:05:32 3150276 753
>>3150266
>Мне пора уходить из профы?
Пиздовать нахуй, мелким и быстрым шагом. Только не по тем причинам которые ты указал, а потому, что не можешь в юмор, слишком туп, чтобы за контекстом беседы следить и задаешь дурацкие вопросы.
Аноним 10/05/24 Птн 11:02:19 3150395 754
Аноны, кто работает в энтерпрайзе, ваше мнение по поводу стремительно распространяющийся заразы Go и как с этим бороться разработчикам? Менеджеры хайпуют язык, спонсируя на кабаньи деньги митапы и конференции гошникам, и игнорируют современный дотнет. C# остается очень недооцененным на рынке (рф).
Аноним 10/05/24 Птн 11:15:45 3150401 755
1715328947062.png 62Кб, 919x737
919x737
>>3150395
> и как с этим бороться разработчикам?
Скрывать го-треды.
Игнорировать го-посты.
Аноним 10/05/24 Птн 14:11:07 3150590 756
image.png 72Кб, 993x771
993x771
>>3150395
>как с этим бороться разработчикам?
Показывай им подобные картинки.
Аноним 10/05/24 Птн 14:33:02 3150625 757
>>3150590
Справедливости ради, горутины не совсем таски. Плюс - сами по себе эти горутины - ну, пиздец какая удобная залупень. Я серьезно хотел бы чтобы что-то такое было в шарпе.
Типа пишешь метод как обычный синхронный, но при желании - берешь и запускаешь его как асинхронный, без всякой ебанины. С тасками - ты обязан сделать выбор: либо асинхронщина, либо синхронщина.
Аноним 10/05/24 Птн 17:08:13 3150827 758
>>3150625
а я бы не хотел. ничего не знаю про го, но знаю про котлин. и за "выглядит как синхронный код" приходится платить высокую цену с "работа с исключениями ад" и с тасками на 10 порядков проще.
Аноним 10/05/24 Птн 20:56:13 3151023 759
>>3097760 (OP)
Шарпаны, есть какие-нибудь нормальные печатные материалы по OpenTelemetry в разрезе Asp.Net Core. Только что-нибудь последовательное, где слона едят по частям. А то в большинстве случаев берут приложение, накидывают в него сразу кучу говен в виде метрик, трейсов, логов и т.д., потом запускают дашборд - "смотрите, как заебись". А что из этого зачем и что делает не очень понятно.
Аноним 10/05/24 Птн 20:57:57 3151029 760
>>3151023
>Шарпаны, есть какие-нибудь нормальные печатные материалы по OpenTelemetry в разрезе Asp.Net Core.
?
Знак вопроса забыл.
Аноним 11/05/24 Суб 12:26:39 3151566 761
image.png 154Кб, 747x822
747x822
Как перебороть желание переписывать каждый раз Program.cs в прикриплейд? Может быть расскажете про скрытые подводные камни от этого, чтобы я уж точно перестал так делать. Потому что я чувствую себя ебанатом каким-то, который делает хуйню никому не нужную.
Для себя я оправдывал это вот чем. Типа юнит-тесты же. Вот. И вот таким макаром - можно было тестировать, что все правильные зависимости проставлены, все такое. Плюс, что приложение правильно стартует, правильно останавливается. Но все равно выглядит как страдание хуйней ненужной. Но желание переписать чтобы не как у других было - никуда не девается.
Аноним 11/05/24 Суб 14:29:26 3151698 762
>>3151566
>Как перебороть желание
Да не, норм все. Я тоже подбным страдаю наслаждаюсь постоянно. Только мне поебать на юнит тесты, я хочу маленькую компактную точку входа из которой вызываются нужные расширения для подключения нужного функционала.
Аноним 11/05/24 Суб 19:36:20 3152064 763
изображение.png 16Кб, 742x209
742x209
Как в студии/vs code сравнивать жирные по количеству свойств объекты? Я хочу просто скопировать 2 объекта в отладке в текстовом виде (в виде значения свойств) чтобы понять в чем проблема. Всякие ozcode, object dumper не помогают, проект на дотнете 8 (мб поэтому не работают). Гребаное окно интерпретации не показывает все свойства а именно обрезает выхлоп и оставшиеся свойства для копипаста в kdiff не глянуть. Как заставить долбаное окно интерпретации выводить все, без долбаного обрезания?
Аноним 11/05/24 Суб 22:12:41 3152315 764
>>3151023
Раз выдалось время на выхах решил замутить один сервис и в рамках него упороться в otel.
Курю доку майков, доку отеля, сорсы на гитхабе и ещё этот видос глянул https://www.youtube.com/watch?v=bYc7u9HFG0s

С виду должна получиться пушка гонка
Аноним 11/05/24 Суб 22:20:24 3152321 765
image.png 284Кб, 1844x1109
1844x1109
>>3152064
Консоль в дебаггере в помощь
Аноним 12/05/24 Вск 00:19:32 3152439 766
>>3152064
nuget - JsonDiffPatch.Net
Может выдать json со списком отличий свойств одного объекта от другого. А ты уже с этим json-ом можешь делать, что хочешь для удобства представления инфы. Еще умеет сравнивать объекты разных типов по одноименным свойствам.
Аноним 12/05/24 Вск 05:14:51 3152493 767
>>3152315
По итогу сам отел взлетел с пол пинка с метриками и трейсами, а вот выбрать куда писать то ещё приключение.
По итогу остановился на егере (query и collector. agent решил не поднимать) с эластиксёрч стораджем (разбираться с не очень подходящей под это кассандрой нет желания). Сам эластик у меня уже есть, но давно хотел заменить на опенсёрч, надеюсь jaeger-collector не будет выёбываться
Аноним 12/05/24 Вск 10:52:50 3152602 768
>>3143715
А кто мешает присобачить к интерфейсу метод расширения
bool XXXMethodName(this IMyInterface interface, string[] arg)
{
try {return interface.InterfaceMethod()}
catch {return null}
}
Аноним 12/05/24 Вск 11:49:55 3152640 769
>>3152602
Что метод расширение, что метод в интерфейсе - никто из них не может обращаться к приватным полям класса.
Аноним 12/05/24 Вск 13:16:37 3152718 770
>>3152640
Я ошибся, и хотел ответить больше про методы, которых нету в интерфейсе

А вообще, РЕФЛЕКСИЯ
Аноним 12/05/24 Вск 13:45:21 3152738 771
Как происходит событие FrameworkElement.Loaded? Как вообще родительский контрол "запускает" дочерние элементы, провоцируя OnLoaded?
Аноним 12/05/24 Вск 13:51:06 3152746 772
>>3152738
Да просто в определенном месте кода вызывается Invoke у делегата, который в свою очередь вызывает выполнение привязанных методов.
Аноним 12/05/24 Вск 13:53:20 3152750 773
Аноним 12/05/24 Вск 15:30:22 3152912 774
>>3152738
ну это тебе нужно копать исходники как происходит взаимодействие с фреймворком. Только зачем оно надо.
Аноним 12/05/24 Вск 15:48:59 3152921 775
>>3152750
Который привязан к событию.
Аноним 14/05/24 Втр 10:55:27 3155367 776
>>3152738

Примерно так, лол.

class FrameworkElement{


private void Load()
{

DoInternalLoadStuff();

var handler = Loaded;
if(handler != null) handler(this, CreateLoadedEventArgs());

}}
Аноним 14/05/24 Втр 11:34:04 3155473 777
Вот как нормально-то имплементировать богатую модель, если типа для каких-то операций нужны другие сущности?

Я про что говорю. Вот допустим, у меня есть модель:

class Project(string name, string description, DateTime created, List<ProjectTask> tasks);
class ProjectTask(string name, string description, List<Employee> employees, TimeSpan estimatedDuration);
class Employee(string Name);


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

Ну. Вы поняли. Типа, если сотрудник и так загружен - логика такая, что нельзя незначить серху задачу.

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

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

Просто я почему спрашиваю. Мне скучно делать анемичную модель. Но вот попытки сделать богатую = выливаются в то, что становится тупо неудобно кодом пользоваться.
Как быть? Кто-нибудь пробовал на серьезных щах богатую модель делать, чтобы оно работало нормально?
Аноним 14/05/24 Втр 15:06:42 3155782 778
>>3155473
>Но логика такая, что я не могу добавить сотрудника, который уже в другом проекте и у него по таскам - выходит так, что рассчетное время больше чем рабочих часов за время длительности проекта.
Выглядит так, что во первых ты пытаешься запихнуть дракона в ослицу, т.е. это совсем не их логика. Во вторых как будто для такого нужны собственные сущности над ними. Типа "рабочая загрузка" или общий "план-капкан" или еще что-то, что по иерархии имеет доступ ко всему что в него будет входить (проекты, работники их загрузки и т.д.)
>>3155473
>Просто я почему спрашиваю. Мне скучно делать анемичную модель. Но вот попытки сделать богатую = выливаются в то, что становится тупо неудобно кодом пользоваться.
>Как быть? Кто-нибудь пробовал на серьезных щах богатую модель делать, чтобы оно работало нормально?
Ну вот потому обычно реализации DDD у многих и выглядит как говно, т.к. сначала нашлепают анемичных моделей, а потом начинают вносить в них логику, которая "типа" им подходит или близка им по смыслу. А идти это должно в первую очередь от архитектуры и от грамотного ТЗ где прописываются все взаимосвязи и сценарии и ограничения. Но т.к. нормальные аналитики это редкий зверь, архитекторы, чаще всего просто бывшие аналитики имеем стандартные проекты ложащиеся на обычную слоеную архитектуру с анемичными моделями. Просто потом приходит ПМ, лид или еще кто и "пацаны у нас теперь все по ДДД, го запихивать весь service layer в домен"
Аноним 14/05/24 Втр 18:01:14 3156033 779
>>3155782
Ну. Допустим, в моменте с проектированием, я согласен.

Но вопрос про то как инфраструктуру и слой приложения на это натягивать.

Вот теперь у меня есть некий "Календарный план". Ок. Ему все равно же надо иметь доступ к БД, либо какой-то репозиторий/юнит оф ворк ему скармливать, либо тот же сервис, чтобы уже можно было что-то из этого делать. И получается, что я либо раздуваю конструктор, либо кучу параметров в метод передаю, либо создаю мусорные классы, для передачи разом настроек и зависимостей для этой операции.
Аноним 14/05/24 Втр 19:42:03 3156143 780
>>3156033
Ну честно говоря я х.з. как оно прям правильно. Но то с чем я работал по сути все равно имело отдельный DAL слой с репами и uow. Репы были тупыми, но могли работать со спецификациями. А спецификации были частью доменного слоя. Ну и сервисный слой так же сохранялся. По сути логика оказывалась размазанной между моделями/спецификациями и сервисами их обслуживающими.
Опять же всякие валидации тоже были либо в конструкторах моделей, либо в виде отдельных валидаторов, так же привязанных к сущностям.
Аноним 15/05/24 Срд 11:31:32 3156647 781
Почему когда я пытаюсь запустить задачу асинхронно, я не могу передать свойства в качестве параметров?
>Task.Run(() => MyFunctionAsync(this.MyProperty));

Но такой вариант исключений не вызывает:
>bool myProperty = this.MyProperty;
>Task.Run(() => MyFunctionAsync(myProperty));
Аноним 15/05/24 Срд 11:34:45 3156652 782
>>3156647
Исключение в первом случае:
>System.InvalidOperationException: "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток."

И почему исключение говорит о другом потоке, когда речь идет об асинхронной функции?
Аноним 15/05/24 Срд 11:45:39 3156667 783
>>3156652
Потому что асинхрон работает поверх потоков.
Аноним 15/05/24 Срд 12:10:29 3156685 784
>>3156667
Хорошо, а как меняет ситуацию тот факт, что я свойство сохранил в переменную и передал ее в качестве параметра асинхронного метода?

Ведь переменная создана не в том потоке, что и выполняемая задача, а в том потоке, что и свойство. Что поменялось?
Аноним 15/05/24 Срд 13:19:39 3156747 785
>>3156685
Свойство это ссылка на метод, переменная полученная из свойства это уже ссылка на объект.
Аноним 15/05/24 Срд 16:35:46 3157047 786
>>3156685
Task.Run(() => MyFunctionAsync(this.MyProperty));

сначала запустится задача (на пуле потоков), задаче будет выделен поток и уже потом пойдет чтение this.MyProperty и ругается именно get метод свойства MyProperty потому что программист в него проверку запихал

никакой шарп никакие потоки не проверяет.
Аноним 17/05/24 Птн 22:29:41 3159839 787
Как с помощью EF сделать вот такое:
У меня иерархическая структура.
Но т.к. поиск всех потомков рекурсивно долго - я делаю хак: в строке храню путь к родителю. Получается в духе 1.2.3, 1.2.4, 1.2.5
Вот.
Это оч сильно ускоряет поиск дочерних узлов. И работу с ними в общем случае.
Так вот. Теперь я хочу при изменении у родителя родительского узла - всем потомкам изменить.

На базе триггеров - это делается изи. Просто триггер на упдейт и все. Кайф. Красота. Все так же быстро и красиво. Одной транзакцией - хуяк и хоть миллион записей проапдейтили.

Но мы же говорим про ЕФ и независимость от базы. Так вот. Делать это на уровне приложения - это пиздец заеб, медленно и вообще, ебатория, если дерево здоровое.

Есть ли какие-то паттерны как не делать триггера но чтобы было быстро? Переход на носкуль не предлагать.
Аноним 17/05/24 Птн 22:51:23 3159874 788
>>3159839
Переходи на здравый смысл.
Аноним 17/05/24 Птн 22:53:36 3159879 789
>>3159874
Ну, т.е. не париться и сделать нормальный триггер как человек?
Аноним 17/05/24 Птн 22:57:56 3159881 790
>>3159879
Здравый смысл состоит в том, чтобы понимать, когда ORM полезны, а когда вредны.
Аноним 18/05/24 Суб 04:18:27 3159991 791
>>3159881
Всё просто
Всегда полезны и всегда вредны
Аноним 18/05/24 Суб 10:55:57 3160109 792
Кто-нибудь пробовал слоеную архитектуру на вертикальные фича-слайсы переделывать?

Просто вот я фуллстек, и на фронте как-то само собой получалось, что чтобы не возиться со всей этой ебаторией с миллионом папочек - ты в определенный момент решаешь: вот у меня папочка, в ней ВСЕ что мне нужно. И было на самом деле удобно.

Но на бекенде я как-будто боюсь отойти от того как учился все это время делать. А потому - по шаблону: App.Application, App.Core, App.Infrastructure, App.Hosting, App.WebAPI, App.Bootstrap и вот это вот все.
Аноним 18/05/24 Суб 12:42:23 3160174 793
>>3160109
Для этого как раз и подходят всякие DDD, CQRS и т.д. Но опять же для этого архитектуру не переделывать нужно, а буквально пилить с нуля под такой функционал.

Хотя по сути на бэке всегда проще перекрыть интерфейс. Нет входящих данных - нет работы. Ну и тупо хостед-сервисы на паузу ставить.
Аноним 18/05/24 Суб 13:28:44 3160234 794
Кто-нибудь прям кайфанул от "static abstract interface members"?
Не просто использовал а-ля "T Sum<T>(T[] array)", а для чего-нибудь более серьёзного: статические свойства имплементации интерфейса, переиспользование кода, оптимизации и т.д.
Например, как в дотнете в TensorPrimitives, где они используют один метод для множества операций, а операции реализуются через структуры:
https://source.dot.net/#System.Numerics.Tensors/System/Numerics/Tensors/netcore/TensorPrimitives.Abs.cs,d460a0e95bc8bd56
А то во многих выступлениях/презентациях/блогах по C# 11 упоминали какую-то мелкую хуйню, ну максимум упоминали generic math и этот "T Sum<T>(T[] array)".
Аноним 18/05/24 Суб 13:58:18 3160287 795
>>3160234
Использовал, когда на одном проекте надо было эндпоинты спрятать за фича-флагами.
Забыл что это добавили и сначала так горел, что надо ручками все это дело потом подрубать где надо.
Потом вспомнил и сильно кайфанул.

Ну, чтобы понятно было.

inteface IEndPoint<TRequest, TResponse>
{

Task<TResponse> Handle(TRequest request);

static abstract void ConfigEndpoint(IServiceCollection services);

static abstract void AddEnpoint(IWebApplication app, IConfiguration config);

}

И к этому делу - ConfigEndpointsFromAssembly(Assembly), AddEndpointsFromAssembly(Assembly)

В общем вышло оч аккуратненько и удобно. Так что в принципе понравилось.
Аноним 18/05/24 Суб 14:22:40 3160335 796
>>3160234
Чем вас методы расширения не устраивают?
Аноним 18/05/24 Суб 15:18:08 3160421 797
>>3160287
Интересно Прозвучало как-будто мне похуй, но нет, мне реально было интересно.
>>3160335
>Чем вас методы расширения не устраивают?
В смысле? А причём здесь методы расширения?
Аноним 18/05/24 Суб 16:51:29 3160597 798
>>3160234
>>3160335

Ниже я написал только про generic'и, а ведь эту фичу можно использовать и без generic'ов. По типу:
interface ICommand
{
static abstract string Description { get; }
}
или как в >>3160287

Вот более простой пример:
IParsable<TSelf>
https://learn.microsoft.com/en-us/dotnet/api/system.iparsable-1?view=net-8.0
Позволяет написать generic метод парсинга: "T Parse<T>(string text) where T : IParsable<T>"

Что они в дотнете и сделали (пример посложнее), добавив доп. интерфейсы с некоторыми методами и свойствами:
https://source.dot.net/#System.Private.CoreLib/src/libraries/System.Private.CoreLib/src/System/Number.Parsing.cs
IBinaryIntegerParseAndFormatInfo<TSelf> и IBinaryFloatParseAndFormatInfo<TSelf> - для парсинга и форматирования.
IHexOrBinaryParser<TInteger> - используется в методе для парсинга из двоичного и шестнадцатеричного представления (для 10-тиричного представления там всё немного сложнее, поэтому там отдельный метод).
И вот один метод TryParseBinaryIntegerHexOrBinaryNumberStyle<TChar, TInteger, TParser>() который парсит из этих 2-х представлений. И он один может парсить разные типы целых чисел (все базовые integer типы: Int8, UInt64 и т.д.) благодаря всем этим интерфейсам и доп. типам (HexParser<TInteger>, BinaryParser<TInteger> и т.д.).

А вот почему ещё реализации IHexOrBinaryParser<TInteger> (HexParser<TInteger> и BinaryParser<TInteger>) являются структурами:
Все типы которые метод может парсить являются Value types, и в перечисленных методах и интерфейсах используются generic'и, а значит для метода TryParseBinaryIntegerHexOrBinaryNumberStyle<TChar, TInteger, TParser>() JIT сгенерирует отдельный оптимизированный (это важно) код для каждой комбинации generic аргументов и заинлайнит все нужные методы у этих generic'ов. Благодаря этому этот один(!) метод также эффективен, как если бы они написали метод для каждого целого типа отдельно (10 * 2 = 20 методов - 10 типов и 2 формата (двоичный и шестнадцатеричный)). В итоге: лучше поддерживаемость кода (нет кучи методов с почти одинаковым кодом), производительность (как если бы написать методы под каждый тип).

Вообще, когда первый раз такое видишь очень тяжело понять что происходит и зачем такие сложности.
Поэтому пример с TensorPrimitives лучше всех, потому что чтобы им добавить новую операцию нужно написать совсем немного кода который описывает саму операцию, а не целый метод, который нужно оптимизировать, векторизироввть и т.д. Вот чтобы добавить побитовой And: https://source.dot.net/#System.Numerics.Tensors/System/Numerics/Tensors/netcore/TensorPrimitives.BitwiseAnd.cs

Так что теперь generic'и решают проблему дублирования кода ещё лучше.
Аноним 18/05/24 Суб 16:57:51 3160608 799
>>3160597
>10 * 2 = 20 методов - 10 типов и 2 формата
40 методов, ведь ещё есть UTF-8.
Аноним 19/05/24 Вск 18:43:29 3162025 800
>>3160608
ох если бы еще дженерик методы были так же эффективны в своем вызове....

какая же конченная капча просто пи....
Аноним 19/05/24 Вск 21:53:11 3162223 801
>>3162025
>ох если бы еще дженерик методы были так же эффективны в своем вызове....
Эффективны? В смысле производительность? Можешь пояснить чуть более подробно, что ты имеешь ввиду?

Если про производительность, то только виртуальные generic методы ужасно медленные:
https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/#jit-helpers
>you may have heard the refrain that generic virtual methods are relatively expensive. They are, comparatively.
>GenericNonVirtual 0.4866 ns
>GenericVirtual 6.4552 ns
Аноним 19/05/24 Вск 22:10:39 3162238 802
>>3162223
щас уже не найду но была статья на хабре где рассматривался один случай что дженерик начинал работать медленнее стоило добавить в класс еще один пустой метод который и не вызывали вовсе. Что то там из за размера кеша методов. не помню. Про виртуальность или нет - тоже не помню.
Аноним 19/05/24 Вск 22:14:21 3162242 803
>>3162238
Приходит муж с работы, а жена ему сообщает новость:
- Ты только представь, наш сосед Иванов выиграл в лотерею ВОЛГУ!!!!
Муж говорит:
- НЕ ВЕРЮ!!!
Жена?
- Ну пойди проверь!
Муж уходит.... Возвращается через полчаса и говорит:
- Не Иванов, а Рабинович, не в лотерею, а в преферанс, не Волгу, а три
рубля, не выиграл, а проиграл.
Аноним 19/05/24 Вск 22:17:06 3162246 804
>>3162242
И тем не менее. Я не припомню чтобы там речь шла про виртуальные дженерик методы. Это вообще редкость - виртуальные методы такого рода в силу малой нужности.

А в шарпе этого хватает - вон Method Group и лямбда, казалось бы ну в чем разница, а бенчмарк вам растолкует. Я давно не следил за темой, но разве пофиксили?
Аноним 19/05/24 Вск 22:20:16 3162248 805
>>3162242
не говоря уже про new T(), который под капотом - УНЫЛОЕ Activator.CreateInstance[T].

Кто-то соптимизировал это наконец? Ответ знаете сами. Сколько десятков тысяч лет ждать фикса?
Аноним 19/05/24 Вск 22:32:48 3162263 806
Аноним 19/05/24 Вск 22:34:30 3162264 807
>>3162238
Наоборот. Пустые методы фиксили производительность.
Аноним 19/05/24 Вск 22:35:50 3162268 808
>>3162264
да. поэтому и 3 рубля. Я ж не слон все помнить. Но саму суть это не меняет - у дженериков есть траблы которые влияют на перфоманс и мне по душе когда это фиксят разрабы CLR, а не всякие хаки дрюки.
Аноним 19/05/24 Вск 22:49:30 3162286 809
>>3162238
Я верю, ибо кодовая база райнтайма (особенно C++ часть) это сплошная каша, в которой куски времён .NET Framework'а (хоть их и уже практически нет), просто старый код или старые реализации для которых уже давно существуют современные альтернативы, и т.д. Там даже в большинстве своём C++ 03.Так что я не удивляюсь багам/странностям рантайма и JIT'а. Ну хоть NativeAOT они писали "по-современному" (очень много рантаймового кода на C#, C++ код по-новее и т.д.), вон даже exception handling они портировали из NativeAOT в CoreCLR:
https://github.com/dotnet/runtime/pull/88034

>>3162263
>https://github.com/dotnet/runtime/issues/3877
>никакой виртуальности там нет.
Как я понял это был баг

Вон у них сколько висел другой баг (и то они пофиксили только частично):
https://github.com/dotnet/runtime/issues/6924
>Unused generic type parameter should not cause loader failure
>Nov 2, 2016

>>3162242
>не говоря уже про new T(), который под капотом - УНЫЛОЕ Activator.CreateInstance[T].
Generic math частично заменяет это и теперь можно писать что-то типа T.Create(...) с соответствующими интерфейсами которые T реализует (что конечно не всегда возможно).
Аноним 19/05/24 Вск 22:59:32 3162298 810
>>3162286
>Как я понял это был баг
Баг. Но фикс лишь исправил иерархический поиск на "ищи сразу в глобальном кеше методов, что не самый оптимальный путь и хак "добавь пустые методы" не потерял актуальности.

>(что конечно не всегда возможно).
именно. конструкторы есть у всех, а эти интерфейсы не у многих. Поэтому добавление такого констрейна у дженерика попросту невозможно.
Им что жалко сгенерить какое нибудь подобие экспрешена раз уж CLR не может в нужное? Вижу что жалко.
Аноним 19/05/24 Вск 23:21:22 3162322 811
>>3162298
>Им что жалко сгенерить какое нибудь подобие экспрешена раз уж CLR не может в нужное? Вижу что жалко.
Видимо не в приоритете. Особенно после того как они добавили generic math.
Аноним 19/05/24 Вск 23:24:47 3162328 812
>>3162322
и то верно. у шарписта лоб большой - он запомнит все эти подводные камни. это ж вам не пхп где...ой.

Щас не знаю, а вот помню менял енумы (интовые) на прямые инты - скорость была х4. Спрашивается, ну как так то. Ответ - а вот так вот.
Аноним 19/05/24 Вск 23:30:36 3162338 813
>>3162328
>и то верно. у шарписта лоб большой - он запомнит все эти подводные камни. это ж вам не пхп где...ой.
Вообще они считают, что простой шарпист не должен упарываться во все эти мелочи (они и у себя некоторые ручные микро оптимизации отсекают с мыслью "этим должен заниматься JIT" (и потом улучают это в JITе только лет через 5)).
>Щас не знаю, а вот помню менял енумы (интовые) на прямые инты - скорость была х4. Спрашивается, ну как так то. Ответ - а вот так вот.
А вот тут хотелось бы поподробней.
Аноним 19/05/24 Вск 23:52:22 3162363 814
>>3162338
Просто заменил switch case с enum на просто числа.
Аноним 20/05/24 Пнд 00:04:29 3162378 815
>>3162363
>Просто заменил switch case с enum на просто числа.
JIT походу (как всегда) обосрался, хотя разницы в кодегене не должно быть.

Капча с таймаутами..., как троллинг какой-то...
Аноним 20/05/24 Пнд 01:11:11 3162429 816
>>3162378
Троллинг - это когда капча 404 not found, чтобы покупали пасскоды.
Аноним 20/05/24 Пнд 14:49:52 3162942 817
Почему когда я меняю тип возвращаемого объекта в переопределяемой функции, то студия не ругается? Это легально?
Аноним 20/05/24 Пнд 14:59:11 3162955 818
>>3162942
А ты любишь чтобы тебя ругали? Мазохист?
А вообще гугли ковариантность и контрвариантность
А к ним еще in/out в описаниях типов
Аноним 20/05/24 Пнд 15:00:51 3162958 819
>>3162942
Смотря что ты делаешь. Если возвращаемый тип наследует или реализует интерфейс нижележащего метода то схуя бы ему ругаться?
Аноним 20/05/24 Пнд 15:23:11 3162992 820
>>3162958
Да я менял вообще на рандомный тип и не ругалась. Например реализовал интерфейс IClonable для собственного
класса с методом
public virtual object Clone()
а в наследнике переопределял
public override string Clone()
И студия даже не задала вопросов

>>3162955
Чтобы понимать, что я делаю не так. Если я заменю тип в параметре переопределяемого метода, то студия ругается, а здесь почему-то нет.
Аноним 20/05/24 Пнд 15:25:03 3162994 821
>>3162992
А string это по твоему не object?
И почему ты постоянно говоришь про студию если у тебя тупые вопросы к компилятору?
Аноним 20/05/24 Пнд 15:38:46 3163011 822
>>3162994
ааа, вот он че. Вот я дебил.
Аноним 21/05/24 Втр 18:11:21 3164385 823
Вроде не видел здесь упоминания.

Deep .NET
https://www.youtube.com/playlist?list=PLdo4fOcmZ0oX8eqDkSw4hH9cSehrGgdr1
>Writing async/await from scratch in C# with Stephen Toub
>Deep Dive on LINQ with Stephen Toub
>An even DEEPER Dive into LINQ with Stephen Toub
>Deep Dive into RegEx with Stephen Toub
>A Complete .NET Developer's Guide to Span with Stephen Toub

И почему они раньше не запилили это?
Аноним 22/05/24 Срд 17:30:15 3165619 824
Аноним 22/05/24 Срд 17:58:38 3165654 825
>>3165619
Выглядит интересно, но в том виде в котором показано на видео пиздец как сомниительно. Функционально ннчего не добавляет, но вносит кучу путаницы между реальными свойствами и новыми расширениями, которые под них маскируются, но по сути остаются обычными методами. А так же между наследованием и explicit расширениями. Я уже прямо предчувствую пучок вопросов для джунов на собесах, аналогичным тем как ведут себя конструкторы и переопределения, при наследовании А от Б от С и т.д. Только тут нужно будет запоминать кучу особенностей поведения для цепочек расширений.

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

Ладно, мне все равно еще как минимум год с .net6 только работать, так что когда я с этим столкнусь, оно надеюсь будет уже допилено до вменяемого состояния.
Аноним 22/05/24 Срд 18:20:39 3165680 826
>>3165619
Вот раньше было Array.Length и Array.Count()
И как бы сразу понятно, что предпочтительнее. А теперь любую залупу будут пихать в свойство — просто потому, что лень писать скобочки.
Аноним 22/05/24 Срд 22:06:21 3165922 827
>>3165680
Ага, а еще обязательно какая-нибудь залупа с сериализацией/десереализацией вылезет.
Аноним 22/05/24 Срд 23:46:31 3166020 828
>>3165654
Свойства без хранения самого свойства или без переопределения существующих выглядит как ерунда. Лучше бы сделали прикрепляемые свойства для обычных классов, раз уж на то пошло.
Аноним 23/05/24 Чтв 09:22:29 3166246 829
List<int> test = new List<int>();

var t1 = test.Count;
var t2 = test.Count();
В чем разница? Что юзать то нужно?
Аноним 23/05/24 Чтв 09:25:29 3166250 830
>>3166246
Нажми ф12 на каждом и посмотри
Аноним 23/05/24 Чтв 11:58:23 3166419 831
2024-05-2311-23[...].png 22Кб, 787x811
787x811
>>3166250
>Нажми ф12 на каждом и посмотри
Майкрософт скрыла свой код, там разве что можно посмотреть сигнатуру.
Лучше использовать https://source.dot.net/ и забивать в поиск искомый класс. Вроде есть расширения для студии, которые по сути при нажатии F12 автоматом перекидывают на страницу source.dot.net, но мне показалось это неудобным калом т.к. перебивает работу F12 в других случаях.

>>3166246
Count() это метод расширения для Enumerable — базового класса List. Задача которого быть универсальным для большинства коллекций. В качестве параметра, этот метод принимает объект, реализующий интерфейс IEnumerable, поэтому метод вообще не вдупляет какой реальный тип у коллекции, а ведь у каждого типа свои методы получения количества итемов. К примеру у списка за это отвечает свойство Count, а у массива — свойство Length. У некоторых вообще нет ничего подобного, поэтому приходится вычислять count методом перебора итемов энумератора.

Короче, внутри test.Count() все сводится к первому варианту test.Count + проверки на тип и выбор самого оптимального варианта. И самое главное, свойства Count и Length уже хранят готовые значения, в то время как метод Count() будет выполнять проверки каждый раз, когда ты этот метод запускаешь.

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

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

Поэтому ты наверно понял, какую свинью могут подложить разработчики с новыми расширениями, маскируя метод под свойство. И ведь кто-то возьмет и напишет это
>for (int i = 0; i < n.Count; i++) { }
А внутри будет запрятан метод Count() который каждый раз перебирает коллекцию. И этот перебор будет происходить при каждой итерации цикла.
Аноним 23/05/24 Чтв 12:01:22 3166421 832
>>3166419
1. В студии работает сорслинк, но может быть выключен. Все майковские пакеты с ним собраны
2. С решарпером по ф12 отрабатывает нормальный декомпилятор, а не стандартный обрубок
Аноним 23/05/24 Чтв 12:13:38 3166430 833
>>3166421
С решарпером все понятно, а как первое поможет?
Потому что все рекомендации, которые я видел, типа "Enable navigation to Source Link and Embedded Sources", не распространяются на исходники от майкрософт. В итоге все сводилось к рекомендации установить расширение Ref12 (если не брать в расчет решарпер).
Аноним 23/05/24 Чтв 12:21:32 3166443 834
>>3166430
Может тогда не жевать кактус а поставить решарпер или идешку сменить?

Только не нужно про платность загонять. Есть варианты от "мой хозяин на работе даёт альтимейт лицуху" до "пиратских серверов активации по аналогии kms"
Аноним 23/05/24 Чтв 15:06:05 3166695 835
>>3166419
>Майкрософт скрыла свой код
где скрыла? все качается с гитхаба и показывается.
Аноним 23/05/24 Чтв 19:48:09 3166998 836
>>3166443
>мой хозяин на работе даёт альтимейт лицуху
Мне на одной из работ поставили энтерпрайз версию студии, так в ней часть 'бесплатных' расширений отвалилась. Т.к. типа если ты на комьюнити версии, то можно пользоваться бесплатно, а если у тебя оплачена лицензия, значит бабки есть, плати и за расширения тоже.
Аноним 23/05/24 Чтв 21:39:59 3167115 837
Понимаю, что вопрос про софт а не шарп, но все же студия, все дела.
В общем. С недавних пор какого-то фига в студии бесконечно растет потребление памяти.
Просто, буквально. Я открываю солюшин. Минут 10 все вроде ок. Но потом я открываю диспечер задач, вижу, что студия жрет 28 гигов из моих 32. И это выглядит как: растет до состояния, что студия перестает как-то на меня реагировать, потом - хренак, падает до 1,4, и потом вот такими циклами происходит.
Че эт может быть? У меня из расширений - буквально нифига нет. Всякие штуки пробовал поотключать. но нифига не помогло.
Сейчас из-за всей этой хурмы пересел на VSCode. Жить можно, но блин, я как-бы привык уже к студии. Переставлять боюсь из-за того что настроечки же свои наделал, чтобы максимально удобно, окошки там попрятал лишние, ненужные кнопки убрать, снова этим заниматься не хочется особо.
Аноним 23/05/24 Чтв 22:36:06 3167188 838
>>3167115
Настройки импортируй...
Аноним 24/05/24 Птн 03:07:15 3167329 839
>>3097760 (OP)
Почему у дотнета сообщество как в 1С? Его как бы нет.
Аноним 24/05/24 Птн 03:28:25 3167332 840
>>3167329
В эфире рубрика "Тейки с потолка"
Аноним 24/05/24 Птн 05:21:18 3167339 841
2.png 38Кб, 648x490
648x490
1.png 27Кб, 979x515
979x515
>>3162248
Вроде всё не так плохо, не?

>>3162298
>Им что жалко сгенерить какое нибудь подобие экспрешена раз уж CLR не может в нужное? Вижу что жалко.
Как я понял, они кешируют нужную инфу. А вызывают конструктор через кешированный указатель на метод.
https://source.dot.net/#System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs,d90ca8e3a15370ca
Аноним 24/05/24 Птн 08:17:55 3167369 842
image.png 117Кб, 1686x170
1686x170
такую уебанскую запись можно получить только после калпиляции и обфускации?
Аноним 24/05/24 Птн 14:10:21 3167754 843
>>3167369
Обычная запись юникода через escape последовательности.
Аноним 24/05/24 Птн 21:13:44 3168152 844
1716574423230.png 13Кб, 242x350
242x350
Аноним 24/05/24 Птн 22:10:20 3168217 845
>>3168152
Здесь так не шутят.
Аноним 24/05/24 Птн 23:05:57 3168271 846
Конструктор класса запускает метод Initialize(), но этот метод не имеет доступа к ReadOnly свойствам, хотя по сути он должен использоваться только в конструкторе.

Че делать?
Аноним 24/05/24 Птн 23:11:46 3168277 847
Аноним 25/05/24 Суб 13:10:07 3168621 848
Я думаю многие видели это (и ещё extensions):
https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-13
Но ещё есть:
https://github.com/dotnet/roslyn/blob/main/docs/Language%20Feature%20Status.md
>Ref/unsafe in iterators/async
Такую мелочь фиксить так долго...
>Ref Struct Interfaces
Байтоёбы стали счастливее
https://github.com/dotnet/runtime/issues/102671
>[API Proposal]: Employ allows ref struct in libraries

А что вы думаете по поводу C# 13? (discriminated union дебилы сразу идут нахуй)
Аноним 26/05/24 Вск 04:41:30 3169325 849
>>3168621
А что тут думать. Тред на гитхабе "сделайте блин ConfigureAwait настройку на уровне проекта/солюшена/вселенной" так и будет висеть вечность. А делают то, что нужно мало кому (ну мне в принципе нужно, но как то живу и без этого, а ConfigureAwait заипал.
Аноним 26/05/24 Вск 04:42:52 3169326 850
>>3169325
Опять ты со своим ConfigureAwait.
Аноним 26/05/24 Вск 05:09:28 3169328 851
>>3169326
и не только я. нас много.
Аноним 26/05/24 Вск 05:20:42 3169332 852
>>3169328
И кто то из этих "много" кинул пр с реализацией фичи?
Хочешь что то сделать хорошо - сделай это сам, а не ной как баба
Аноним 26/05/24 Вск 06:36:03 3169336 853
>>3169332
Ты дурачок какой-то.
Аноним 26/05/24 Вск 07:45:13 3169339 854
А есть класс похожий на span, но позволяющий добавлять в него элементы? В чем суть, есть огромный массив, есть его отрезок в виде спана, я хочу иметь возможность работая с этим отрезком добавлять туда элементы, при этом не обращаясь к самому массиву.
Аноним 26/05/24 Вск 08:58:30 3169366 855
Почему нет ни одного нормального курса на Udemy по C# Дотнету на русском языке?
Неужели это настолько невостребованный фреймворк?
Аноним 26/05/24 Вск 08:59:13 3169367 856
>>3169332
А вот эти фичи что в шарпе любом их тоже простой народ делает? А тотя как то пропустил

>>3169339
Ну с массивом оно как бы span. Но да - простой фичи типа ListSegment почему то нет хотя вот это как раз делается элементарно, а в жава есть.
Аноним 26/05/24 Вск 09:59:48 3169400 857
>>3169366
Настолько невостребованный Udemy.
Аноним 26/05/24 Вск 10:17:49 3169424 858
>>3169366
Потому что шарп обновляется так быстро, что даже на английском языке иногда нет актуальной литературы и курсов.
По моему сейчас уже даже известные авторы забили на обновление текущих и написание новых книг. Потому что прохождение полного издательского цикла от написания до печати книги займет столько времени, что успеет пара новых версий .net-а выйти.
Аноним 26/05/24 Вск 10:40:11 3169435 859
Как же мне иногда не хватает friend классов (по типу как в C++).
https://github.com/dotnet/csharplang/discussions/2073

Люблю обмазываться менеджерами и другой подобной хренью...
Аноним 26/05/24 Вск 13:38:23 3169660 860
>>3169435
Use internal Luke

Мне кажется, но все случаи, когда тебе нужны дружественные классы, легко разрулить модификаторами доступа, благо в шарпе есть internal и protected internal. Если прям трясешься от того, что из других классов сборки можно будет щупать другие методы, то просто выдели для таких классов отдельный проект.
Аноним 26/05/24 Вск 14:02:42 3169741 861
>>3169435
Звучит как желание иметь еще один слой зависимостей, от которых заебешься, когда будешь разгребать чужой говнокод. Не нужно.
Аноним 26/05/24 Вск 17:04:39 3170024 862
>>3169660
Ты прав.
Тебе кажется
Аноним 26/05/24 Вск 17:43:00 3170069 863
>>3170024
Давай тогда пример, когда не удастся. Будем тебя обоссывать.
Аноним 26/05/24 Вск 18:22:32 3170095 864
>>3170069
Да все удастся. можно вообще паблик сделать и тоже будет работать. Но те же понимаешь почему в природе существует не только паблик (хотя все при нем удается)?
Аноним 26/05/24 Вск 18:26:17 3170099 865
>>3170095
Ты конкретный кейс давай, когда friend-класс принесет значимые профиты, попутно не сделав код сильносвязанным говном. И пояснение за одно, почему в данном кейсе использование того же internal будет моветоном.
Аноним 26/05/24 Вск 19:36:01 3170173 866
>>3170099
ну там выше гитхаб дали -там тебе доводы.
ты понимаеш что френды и интерналы это разные вещи по уровню доступа и по уровню контроля открываемости?
Аноним 26/05/24 Вск 20:11:50 3170196 867
>>3170173
Не увиливай. Давай таой пример, когда оно тебе нужно в шарповом коде.

Как по мне, это плюсовая говнофича, которая делает код излишне связным и сложным в поддерже. И как бы то, что разрабы других языков и в том числе Шарпа не стремятся ее из плюсов в свои языки переносить как раз хороший аргумент в сторону ее ненужности в исходном виде.
Как по мне, это костыль языка, в котором до последнего времени не было нормальной модульности кода (в последних стандартах, слышал, что что-то для этого завезли), и в котором для того, чтобы использовать класс, лежащий рядом в проекте, нужно блядь по сути вставлять исходник с объявлением этого класса в свой исходник.
Аноним 26/05/24 Вск 20:46:13 3170236 868
Как бы я не хотел эту фичу, я понимаю её проблемы и последствия.
В какой-то степени friend это костыль, как список исключений к правилу. Т.е., вот у нас есть инкапсуляция и т.д., а вот у нас есть список на кого эта инкапсуляция не распространяется, т.е. исключение из правила, а это хоть где нибудь, но будет создавать геморрой. Вот даже если добавить аттрибут по типу InternalsVisibleTo(Type[] types), и он никак не будет проявлять себя на уровне рефлексии, например, будет чем-то вроде хака в компиляторе, то тулзы всё равно должны будут его понимать (компилятор, анализаторы, Intellisense и т.д.). И вот в проверку видимости члена добавятся ещё исключения, но теперь более конкретные (если InternalsVisibleTo, на уровне сборки, уже был, то теперь появится конкретный список типов).
Ну хоть и сама фича относительно маленькая, но небольшие неудобности в реализации имеет и добавляет ещё материала при изучении языка.
Ну а плюс: friend сохраняет инкапсуляцию типов (в некоторых местах можно будет им заменить internal и не светить внутренностями на всю сборку).

>>3170196
Так, блядь, friend это не про абстракцию (в основном), а, например, когда у тебя есть Foo и FooManager, и Foo не полностью самостоятельный объект и бесполезен без FooManagerа (FooManager их создаёт, владеет ими, удаляет их и дополняет их функционал).
>Как по мне, это костыль языка, в котором до последнего времени не было нормальной модульности кода (в последних стандартах, слышал, что что-то для этого завезли), и в котором для того, чтобы использовать класс, лежащий рядом в проекте, нужно блядь по сути вставлять исходник с объявлением этого класса в свой исходник.
Это всё не имеет отношение к friend. friend существует, чтобы выборочно нарушить инкапсуляцию своих членов (ну в C++ там всё немного серьёзнее).
>И как бы то, что разрабы других языков и в том числе Шарпа не стремятся ее из плюсов в свои языки переносить как раз хороший аргумент в сторону ее ненужности в исходном виде.
Ну а я бы сказал что большинство ООП языков, имеют это ООП в немного кастрированном виде, а потом со временем начинают придумывать различные костыли.
Аноним 26/05/24 Вск 21:38:24 3170255 869
>>3170236

>> Так, блядь, friend это не про абстракцию (в основном), а, например, когда у тебя есть Foo и FooManager, и Foo не полностью самостоятельный объект и бесполезен без FooManagerа (FooManager их создаёт, владеет ими, удаляет их и дополняет их функционал).

Решается либо вложенными классами, либо internal. Боишься, что internal-члены Foo будет трогать кто-то кроме FooManager - выделяешь для них публичный интерфейс, а саму реализацию выносишь в отдельную сборку. Либо добавляешь свой атрибут и один раз пишешь свой roslyn-анализатор, который будет это проверять. Все современные ide-ки (студия, Rider) умеют с ними работать и будут подсвечивать ошибку как в коде, при редактировании. Во время компиляции он тоже будет выдавать предупреждение. Можно настроить проект так, чтобы он считалось ошибкой и обрывало сборку. Потом этот анализатор можно будет запаковать в nuget и подключать к другим своим проектам. Пишутся они не сильно сложно.
https://habr.com/ru/articles/455844/

>> Это всё не имеет отношение к friend. friend существует, чтобы выборочно нарушить инкапсуляцию своих членов

Разрабы Шарпа и других языков вполне понимали необходимость иногда нарушать инкапсуляцию. Они и дали тебе инструменты, которых в плюсах нет, в силу их исторического наследия. Эти инструменты - вложенные классы и модули+internal. Просто при объявления класса френдом, ты даёшь ему доступ ко ВСЕМ private-методам класса. Потом это принесёт много страданий, так как хуй поймешь что от чего зависит, особенно если классы-друзья достаточно большие и имеют большую историю доработок разными разрабами, так как контрактом их взаимодействия по сути являются все члены класса, и их изменение может неожиданным образом зааффектить поведение класса-друга. internal-методы это же как раз возможность задать на такой случай дополнительный уровень контрактов.

>> Ну а я бы сказал что большинство ООП языков, имеют это ООП в немного кастрированном виде, а потом со временем начинают придумывать различные костыли.
Ну так friend это тоже костыль. И он никому из создателей более современных языков по душе не пришёлся.
Аноним 26/05/24 Вск 21:47:27 3170257 870
Аноним 27/05/24 Пнд 19:43:04 3171243 871
>>3170255
>Решается либо вложенными классами
Foo.FooManager это странно, а что делать когда есть Foo1, Foo2 и FooManager.
>выделяешь для них публичный интерфейс,
А что делать в случаях FooManager.DoSomething(IFoo[] foos)?
>а саму реализацию выносишь в отдельную сборку
Не всегда возможно. И к тому же, что, выносить все такие типы? всё дробить на сборки?
>roslyn-анализатор
Я не упомянул, но смотрел различные варианты: от EditorBrowsable(EditorBrowsableState.Never) до анализаторов. Думал про source генераторы, если бы можно было бы обращаться к членам, которые ещё только будут сгенерированы source генератором, то генератор, например, бы просто заменял такие обращение на методы с UnsafeAccessorAttribute. Такое решение было бы идеально (как friend классы, весь класс пишется как обычно). Текущие рещения с анализаторами и генераторами - решения с разной степенью костыльности (как и сам friend).
Все эти решения мне не нравятся, потому что они побольшому счёту workaroundы. Но решение с интерфесом самое адекватное из этих вариантов. Только вот городить интерфейс даже когда это менеждер с его "детьми" является сам internal, т.е. чисто для внутренней реализации, делать всё public/internal?
Тут нужно уточнить, что я в принципе против делать всё члены internal для типа, даже если он internal для сборки. Ну может я не понимаю, как работает инкапсуляция, и что делать всё внутренние типы и члены internal это норма.

>Просто при объявления класса френдом, ты даёшь ему доступ ко ВСЕМ private-методам класса.
Ну тут выбор: либо internal - видно только то что нужно, но всем в сборке, либо friend - видно всё, но только нужным классам.
>Потом это принесёт много страданий, так как хуй поймешь что от чего зависит, особенно если классы-друзья достаточно большие и имеют большую историю доработок разными разрабами, так как контрактом их взаимодействия по сути являются все члены класса, и их изменение может неожиданным образом зааффектить поведение класса-друга.
Тут согласен, но я не считаю это настолько большой проблемой.
>Они и дали тебе инструменты, которых в плюсах нет, в силу их исторического наследия.
Ну тут я согласен, что у C++ большое легаси и у разных языков, разные аудитории и разные общепринятые подходы.

Были ещё предложения с internal, но в пределах неймспейса (что тоже было бы неплохо или даже лучше).
Аноним 27/05/24 Пнд 20:02:31 3171258 872
>>3170255
>И он никому из создателей более современных языков по душе не пришёлся.
А чем covariant return, не пришёлся по душе разрабам шарпа, что он появился только в C# 9 (.NET 5, 2020 год) (и это ещё с учётом того, что касты, что в mono, что CoreCLR, что в NativeAOT - no-op, если убрать проверки). И это ещё к моему тейку, про языки ООП-кастраты.
Ну и как аргумент это не очень (там вроде разрабы шарпа примерно так же говорили). К тому же у нас есть GC язык с hardware intrinsicами, арифметикой управляемых указателей, подержка простых указателей (в т.ч. указателей на функции), вся каша с ref (и она становится только больше) и т.д. Много таких языков? Т.е. одна часть языка - модная, современная, для полудомохозяек, а другая - high performance. Даже scoped ref добавили и всё ещё собиратся добавить больше: https://github.com/dotnet/csharplang/blob/main/proposals/expand-ref.md

Ну, а вообще ты прав.
Friend не даёт ничего принципиально нового, что нельзя сделать сейчас (и это ещё один минус для новой фичи), просто мне хочется видеть развитие и улучшение ООП (хоть я и понимаю его минусы), а не добавление новых парадигм и полуготовые фичи которые доделывают через пару лет (in, primary contructors, collections expressions и т.д.).

И да, половина моих тейков это ИМХО и ранняя стадия C++а головного мозга. К тому же я слишком тупой, чтобы нормально задефать свое мнение. Пусть хоть местные аноны что-нибудь напишут, а то >>3167332 1С тред поживее будет.
Аноним 27/05/24 Пнд 22:17:52 3171369 873
>>3171243
>Ну тут выбор: либо internal - видно только то что нужно, но всем в сборке, либо friend - видно всё, но только нужным классам.
так то кул было бы иметь возможность приватное на уровне неймспейса, но у нас же шарп - тут много чего нет.
Аноним 28/05/24 Втр 19:47:28 3172253 874
2024-05-2819-15[...].png 7Кб, 717x260
717x260
2024-05-2818-37[...].png 59Кб, 883x810
883x810
Хочу решить проблему, когда я уверен, что метод возвращает не нулевое значение, но компилятор все равно требует проверку на null.

Я заметил, что для метода словаря Dictionary.TryGetValue даже несмотря на возвращение nullable-объекта, компилятор не требует проверки. Посмотрел в исходниках (пикрил 1), и там на выходном параметре стоит аргумент [MaybeNullWhen(false)]

Пытался повторить (пикрил 2). Создал тестовый класс, добавил собственный метод TryGetValue, который имитирует аналогичный метод в словаре.

Далее сделал метод TestMyFunction(), в котором использую свой TryGetValue, и как видите, в строке
>var n = myClass.Name;
видно подчеркивание, которое сигнализирует о рекомендации проверки на null экземпляра myClass.

В качестве сравнения, сделал метод TestDictionary(), где все ровно тоже самое, но только для метода словаря Dictionary.TryGetValue(). И вот здесь никакого предупреждения нет. Почему?

Я пытался использовать другие аргументы, типа [NotNullWhen(true)] и все работает, но я хочу понять почему не работает вариант, который использовался в метода для словаря?
Аноним 28/05/24 Втр 20:02:31 3172261 875
>>3172253
А, понял.

[MaybeNullWhen(false)] сообщает, что метод может вернуть ноль.
Поэтому в параметре возврата не указывается nullable-тип:
> out MyClass result

А [NotNullWhen(true)] сообщает, что nullable-объект в случае успеха гарантированно что-то возвращает, поэтому здесь наоборот указывается nullable-тип:
> out MyClass? result
Аноним 28/05/24 Втр 23:07:14 3172457 876
В каких случаях используют WeakReference?
Попробовал, но ссылка пропадает непредсказуемым образом.
Аноним 28/05/24 Втр 23:33:50 3172472 877
>>3172457
очевидно когда не нужно мешать сборщику мусора ее собрать
Пропадает она когда не остается строгих ссылок и проснулся GC

Применений валом. Например в подписках. Вон в WPF активно используется. Нельзя же бегать разбираться (на самом деле можно и нужно, но есть нюанс) кто когда куда исчез, поэтому там weak подписки
Аноним 29/05/24 Срд 10:05:52 3172693 878
>>3172472
Но вот я пытался там сохранить ссылку на метод. Когда сразу же хочу получить ссылку, то она возвращается. Но почему-то спустя непродолжительное время TryGetTarget возвращает false, при том что я совершенно точно уверен в существовании экземпляра класса, на метод которого была дана ссылка.
Аноним 29/05/24 Срд 10:48:38 3172723 879
>>3172693
Кажется дело в ссылке на метод. Если эту ссылку предварительно сохранить в поле, и уже ссылку на поле передавать в WeakReference, то тогда TryGetTarget возвращает true.

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

Короче непонятно поведение методов.
Аноним 29/05/24 Срд 14:47:38 3172959 880
>>3172693
>уверен в существовании экземпляра класса
Экземпляр класса и ссылка на его метод - 2 разные сущности. Если никто, кроме weak, не удерживает ссылку на что либо, то GC конечно его скушает.

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

Например, в MVVM фреймворках мессенджеры сделаны обычно weak потому что там нужно слать сообщения между вьюмоделями, а в них сложно отписываться - это обычно делается в Dispose, но сам Disposable паттерн слишком неудобен для этого поэтому мессенджер удерживает ссылку на адресата как weakref и не мешает его убить и тем самым избегает утечки памяти.

Этакий костыль для тех кто не умеет в лайфтаймы (но это уже оффтоп)
Аноним 29/05/24 Срд 22:56:31 3173663 881
>>3172959
Спасибо за ответ, я понял.
Аноним 30/05/24 Чтв 01:43:45 3173773 882
>>3173663
ссылка на метод === ссылка на делегат (который уже, в свою очередь, ссылается на метод и его владельца). и поскольку никто кроме weak не удерживает ссылку на этот делегат, то делегат убивается GC

Еще кстати есть типа словаря с weak ключами - ConditionalWeakTable
Аноним 30/05/24 Чтв 20:39:52 3174722 883
>>3173773
>и поскольку никто кроме weak не удерживает ссылку на этот делегат, то делегат убивается GC
ааа

>ConditionalWeakTable
про это я читал, да
Аноним 30/05/24 Чтв 20:53:31 3174729 884
А как в MVVM пнуть представление из модели сродни методу?

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

Я могу в модели создать событие. Представление получая дата контекст может на это событие подписаться. Но тогда подписка не дает представлению помереть в нужный момент. Может есть какие-то решения подобной проблемы? Не всегда удается решить задачу через свойства.
Аноним 30/05/24 Чтв 21:30:25 3174763 885
>>3174729
1 weak подписка на свойство или событие даст помереть виду
2 стронг подписка требует отписки. Но события анлоадед может не быть
- в случае виртуализации его нет. Попап не выгружает контент тоже.
- закрыл окно и не будет анлоадед
Поэтому я с лайфтаймами делаю лайфтайм контрола метожом который подписывется на анлоадед контрола и на зак эл закрытие окна
В случае виртуализации можно подписывать и отписывать в датакониекстчэнжед

Но ты юзай слабые подписки и не мучай жопу.
Аноним 30/05/24 Чтв 23:32:46 3174848 886
Пацаны, такое дело, кароче в виде хобби прогаю на Сшарпе, в визуал студио. Сейчас я немного оторван от моего нормального компа, на руках только древний некроноут из 2009-ого с виндоовс 7. Какая прога подойдёт чисто консольные приложухи писать, калькуляторы там и хеллоу ворлды? Желательно чтоб прям что-то очень лёгкое, а то визуал студио у меня и на мощном стационарном компе только запускается по 10 минут нахуй. Можно и без подсветки синтаксисов и без всяких свистоперделок, так даже лучше будет, без подсказок для практики я думаю.
Визуал студио не ставится,визуал студио код тоже.,
Аноним 30/05/24 Чтв 23:39:38 3174859 887
Аноним 31/05/24 Птн 00:01:53 3174879 888
>>3174848
Мне вима хватает для всяких утилиток.
Аноним 31/05/24 Птн 10:26:04 3175164 889
>>3174848
Тут вопрос в том, а должно ли это что-то уметь компилировать код?

>Можно и без подсветки синтаксисов
Как раз таки текстовых редакторов с подсветкой синтаксиса хоть жопой жуй — тот же Notepad++ или Sublime Text (выглядит современнее). Но все они не умеют компилировать — в них можно только писать код.
Аноним 31/05/24 Птн 10:35:09 3175188 890
>>3175164
Студия сама по себе тоже не умеет. Запускаешь dotnet watch в соседнем окне и пишешь
Аноним 31/05/24 Птн 10:36:15 3175192 891
>>3174848
>древний некроноут из 2009-ого с виндоовс 7
Где вы такое говно откапываете? У меня даже планшет пятилетней давности смог потянуть вижуал студию (правда смог только запустить), не говоря уже о вижуал студио коде.

Ну да ладно. Если есть доступ к интернету, то можешь попробовать онлайн компиляторы, типа
https://sharplab.io/
Там вообще ничего устанавливать не нужно. Но вот если придется пользоваться кастомными библиотеками или нюгет пакетами, тогда будет проблема.
Но вот самое-самое начало для освоения синтаксиса и проч сойдет. Хоть на телефоне пиши код. В качестве бонуса отображает IL-код.
Аноним 31/05/24 Птн 22:44:01 3176104 892
Почему, если кто-то говорит про Vertical Slices - заебись, новое слово в архитектуре, как удобно, нет этих ненужных абстракций.
Но если я сделаю класс User, который сам себя в БД пишет, дает доступ из любого места программы ко всему списку юзеров, еще и может отрисовать окошко с редактированием пользователя - пиздец, блядь, БОЖЕСТВЕННЫЙ КЛАСС, УУУУ, SRP, Уууууу, Ууууу. Как же - все в одном месте? Как же удобство работы и вот это вот все?
Аноним 01/06/24 Суб 00:20:59 3176167 893
2024-06-0100-00[...].png 28Кб, 1276x270
1276x270
2024-06-0100-08[...].png 27Кб, 979x382
979x382
Как забиндиться к ридонли депенденси проперти? Мне нужно отобразить статус что какое-то представление открыто, при этом логика определения статуса расположена в представлении, по принципу IsLoaded, которая вообще никак не связана со вьюмоделью.

Биндиться по имени контрола не вариант т.к. иконка статуса находится в жопе UI. Мне надо этот статус как-то пробрасывать через вью-модель.

Но тут возникает две проблемы:
1. Ни один из режимов привязки не работает с ридонли свойством контрола. Пикрил 1 - как выглядит свойство. Пикрил 2 - как я пытался забиндить. (регистрация ДП при помощи RegisterReadOnly тоже пробовал)

2. Даже если я решу первую проблему, свойство вьюмодели, в таком случае должно иметь доступ и на чтение и не запись, но это дает возможность другим элементам попытаться изменить данное свойство, что нехорошо.
Аноним 01/06/24 Суб 00:38:13 3176188 894
>>3176104
>Как же удобство работы и вот это вот все?
Удобство ведь только в теории, но на практике может прострелить колено.
Я встречался с ситуациями, когда самодеятельность суб-элементов приводила к тому, что они гадили в те моменты, когда их никто не просил. В итоге начинаются усложнения с запрещением этой самой самодеятельности.

Твой элемент будет шатать БД в не самое удачное время, потому что он не в курсе когда это время удачное. А если таких элементов куча, и эти элементы пинают другие элементы, то как ты собрался этот бедлам контролировать?
Аноним 01/06/24 Суб 00:47:41 3176203 895
>>3176104
Может в твоих Vertical Slices подразумевается, что User должен бить челом к пахану и спрашивать его разрешения сохранить в БД, а сам-то User простой мужик и только маляву передает. Иначе это уже беспредел.
Аноним 01/06/24 Суб 01:46:16 3176225 896
>>3176104
>Но если я сделаю класс User, который сам себя в БД пишет, дает доступ из любого места программы ко всему списку юзеров, еще и может отрисовать окошко с редактированием пользователя - пиздец, блядь
Ну как бы да, звучит как ебейший пиздец.
Аноним 01/06/24 Суб 04:46:11 3176249 897
>>3176167
Оневэйтусорс и есть вызов сеттера
А чтение геттера это онетайм и оневэй
Ответить в тред Ответить в тред

Check this out!

Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов