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

C# thread #44 /csharp/

 Аноним 22/01/23 Вск 00:22:02 #1 №2582351 
image
image
image
image
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
Прошлый тред: >>2564359 (OP)
sage[mailto:sage] Аноним 22/01/23 Вск 00:28:05 #2 №2582356 
>>2582351 (OP)
Опять джавадебил перекатил тред.
Аноним 22/01/23 Вск 00:33:08 #3 №2582359 
хрюкалка.webm
>>2582356
Аноним 22/01/23 Вск 00:40:47 #4 №2582362 
>>2582351 (OP)
Анон, щас будет вот вообще пиздец нубский вопрос:
Если я захостю сайт через Apache по инструкции с MSDN и при этом у меня динамический IP, при переходе по этому адресу с других устройств, скажем на 228.359.1.69/Home/Index будет сайт работать?
Аноним 22/01/23 Вск 00:42:10 #5 №2582363 
>>2582362
IP должен быть белый в первую очередь.
Аноним 22/01/23 Вск 00:45:24 #6 №2582364 
>>2582362
Если у тебя нет виртуальных серверов в конфиге, а один, который отвечает на все запросы, то будет. А так да, белый айпи.
Аноним 22/01/23 Вск 00:47:16 #7 №2582366 
>>2582362
Проблема в первую очередь не в динамическом IP, а в NAT.
Если другое устройство находится в той же сети, что и твой сервер, страница откроется, например, если компьютер и мобилка подключены к одному роутеру, то с мобилки ты можешь подключаться с серверу, запущенному на компьютере. Но с мобильного интернета или с компьютера в другой сети доступа не будет.
Ну и сервер надо запускать не на локалхосте, а по адресу 0.0.0.0, иначе сайт будет работать только локально.
Аноним 22/01/23 Вск 00:55:37 #8 №2582369 
>>2582363
>>2582366
>>2582364
Ясно, спасибо
Аноним 22/01/23 Вск 05:16:37 #9 №2582445 
Объясните нубику: шарпа достаточно для написания ботов для ммо-шек? Или нужен дополнительно C/C++? Да, хочу нырнуть в это для себя, интересно, но пока не пониманию многообразия сишек.
Аноним 22/01/23 Вск 05:40:06 #10 №2582459 
>>2582445
Смотря что за ммо-шка.
Аноним 22/01/23 Вск 10:48:30 #11 №2582610 
>>2582445
Смотря насколько низкоуровневых ботов ты хочешь сделать. Если достаточно кликать мышкой и нажимать клаву, то шарпа хватит, а если надо ломать сетевой протокол клиента и подсовывать ему фейкоту, то очевидно нет.
Аноним 22/01/23 Вск 10:50:25 #12 №2582611 
>>2582445
Нужен С++. Обычно тебе будет нужно взаимодействие с кодом игры, а почти все ммо написаны на С++.

Забудь про вообще, это мертвое наречие и на нем уже лет 50 не пишут ничего нового
Аноним 22/01/23 Вск 10:50:57 #13 №2582613 
>>2582611
>Забудь про вообще
Про С
Аноним 22/01/23 Вск 11:18:44 #14 №2582629 
Часто стал видеть в десктопных приложениях, что бэкэнд написан на нормально языке го, си, кресты, а фронт на электроне. Почему так? Почему они не выбирают авалонию?
Аноним 22/01/23 Вск 11:35:04 #15 №2582635 
>>2582629
>Почему так?
JS-погромистов много.
>Почему они не выбирают авалонию?
Нонеймы.
Аноним 22/01/23 Вск 13:40:34 #16 №2582840 
А каким образом хранятся импортированные библиотеки?
Тут недавно всплывала тема про удаление папки obj.
Так вот, я очистил все obj и bin в каждом проекте решения, и у меня отвалились импортируемые с локального диска библиотеки.

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

Поискал, где эта библиотека находится в проетах и в 100% случаев она находится в папке bin (которые я тоже чикнул). При этом Nuget библиотеки вроде как восстановились.

Че за магия?
Аноним 22/01/23 Вск 13:54:36 #17 №2582857 
>>2582840
Короч упоминание библиотеки есть в двух файлах
собстно в проекте <project_name>.vbproj
и в папке \obj\Debug\net6.0-windows\, в файле <project_name>.vbproj.FileListAbsolute.txt

В первом файле указан абсолютный адрес к библиотеке и ее расположение не поменялось. Во втором уже относительный.
Сранно.
Аноним 22/01/23 Вск 14:13:30 #18 №2582896 
>>2582840
>импортируемые с локального диска библиотеки
Что за библиотеки
Аноним 22/01/23 Вск 14:30:11 #19 №2582940 
>>2582896
Моя личная библиотека, написанная еще на NetFramework. Лежит себе на диске типа D:\Code\Libraries\MyLibrary.dll

Добавляю в проект на net6.0 через "добавить ссылку". Собственно в файле .vbproj отображается полный путь к библиотеке.

Причем когда у меня возникла ошибка и посыпалось все решение, мне пришлось сперва удалить из ссылок мою библиотеку и только потом снова добавить. Иначе пишет, что библиотека не поддерживается.
Аноним 22/01/23 Вск 14:48:54 #20 №2582963 
>>2582940
>на net6.0 через "добавить ссылку". Собственно в файле .vbproj
А разве VB под .net6 есть? Я думал его еще на .NetFramework 4.8 стопорнули.
Во вторых сама идея подключать .NetFramework библиотеку к .Net6 проекту такое себе. Хотя бы под .NetStandart пересобери ее.
В третьих такой способ подключения библиотек сам по себе туфтовый. Создай свой локальный нюгет, помести туда свои библиотеки и подключай их как белый человек.
Аноним 22/01/23 Вск 14:49:58 #21 №2582966 
>>2582940
Алсо, если это твоя собственная библиотека, то намного проще ее подключить в виде исходников к проекту.
Аноним 22/01/23 Вск 15:28:42 #22 №2583026 
2023-01-2215-14-56.png
>>2582963
>А разве VB под .net6 есть? Я думал его еще на .NetFramework 4.8 стопорнули.
А как еще добавлять?
Зависимости -> Добавить ссылку.
в .vbproj пикрил. Ничем не отличается от добавления текстового файла.

>>2582966
>>2582963
>то намного проще ее подключить в виде исходников к проекту.
Да как-то не проще. Я не собирался ее редактировать, нах мне куча мозолящих глаза папок?

>Создай свой локальный нюгет, помести туда свои библиотеки и подключай их как белый человек.
Бля, было же просто. Не, ну давайте простые вещи делать через жопу, давайте погрузим данные в ракету, предварительно зарегистрировавшись в аккаунте NASA, отправим все это на Марс, шоб просто поковыряться в жопе.
Ну хоть есть возможность локально подключить и на том спасибо.
Аноним 22/01/23 Вск 15:45:35 #23 №2583059 
image.png
У меня два вопроса.
1. Почему в райдере нельзя добавить к нет кор проекту ссылку на COM библиотеку.
2. И почему мне выдает такую ошибку при регистрации dll.
Аноним 22/01/23 Вск 16:44:09 #24 №2583160 
А в чем отличие подписок от передачи делегата?
Вот если я подписался на событие, то мне нужно реализовывать Dispose, чтобы не забыть отписаться. Меня этот подход немного давит.

А что если я передам ссылку на метод, который будет запускаться изнутри класса? Все равно надо потом это все подчищать?
Аноним 22/01/23 Вск 16:52:46 #25 №2583191 
Пацаны, а при добавлении свойства ID, стоит ли приписывать к нему название класса? Я встречаю два разных варианта:

class User { string Id }
-и-
class User { string UseriId }

Не очень понятно какой из них лучше использовать.
Аноним 22/01/23 Вск 17:16:50 #26 №2583244 
>>2583191
Че тут непонятного? Твой запрос должен быть очевиден пользователю.
Если у тебя много свойств с именем ID в классе, то приписываешь уточнение.
Если это единственный ID, то можно не надо.
Просто пирписав User к ID, как снежный ком придется приписывать User ко всем остальным свойствам.
Аноним 22/01/23 Вск 17:22:06 #27 №2583256 
>>2583191
Первый вариант хорош для создания Entity с одним свойством Id. Тогда можно будет создать репозиторий который будет принимать только наследников этого класса.
Аноним 22/01/23 Вск 17:31:59 #28 №2583275 
>>2582840
Копируются в выходной каталог как есть. В обжект хранятся промежуточные файлы
Аноним 22/01/23 Вск 18:52:40 #29 №2583401 
>>2582840
>я очистил все obj и bin в каждом проекте решения, и у меня отвалились импортируемые с локального диска библиотеки.
Это ненормально. При ребилде все библиотеки указаные в файле проекта должны быть скопированы обратно в /bin/ и там нормально увидиться. Если у тебя не так, то надо чекнуть рефренсы у проекта.
Аноним 22/01/23 Вск 18:56:31 #30 №2583410 
>>2583160
> Все равно надо потом это все подчищать?
Ды-а! Подписка на эвент создает делегат который держит ссылку на объект, и явное создание дегата с его передачей объекту-потребителю тоже держит туже самую ссылку. От событий надо отписываться, а делегаты занулять.
Аноним 22/01/23 Вск 19:24:57 #31 №2583472 
>>2583401
Просто появляется желтый треугольник над проблемной либой. Причем если я чищу obj из одного проекта, то как бы норм, а если чищу obj всех проектов решения, то выскакивает проблема.

Может где-то перекрестные связи между проектами. Одно требует от другого, когда то не готово. Технически не создаю рекурсию — студия не ругается, но через третье колено боюсь что вероятность есть. Я думаю, что проблема в этом.
Аноним 22/01/23 Вск 19:26:31 #32 №2583476 
daccae896367ef760d1311fea74cfe17.jpg
>>2583410
Аноним 22/01/23 Вск 20:38:48 #33 №2583619 
>>2583472
Блять чел.
1) делай рестор пакетов решения
2) не чисти руками используй сука иде

У меня было решение на 20 проектов. Удалял даже руками обж и нихуя не было. Ты какую-то хуйню там наделал похоже
Аноним 22/01/23 Вск 21:17:35 #34 №2583650 
>>2583472
читай аутпут же. Там он напишет варнинги по которым рисует треугольники. Увы студия никак больше не поясняет почему треугольничает
Аноним 22/01/23 Вск 22:32:58 #35 №2583707 
Capture.JPG
а поясните за MethodImplOptions.AggressiveInlining
насколько он вообще рулит?
в интернетах очень противоречивая информация, кто-то говорит мамой клянусь работает как часы, кто-то говорит что компилятору похуй вообще он лучше тебя знает
а я просто не знаю
пытаюсь сбэкпортить одну вещь на говно мамонта где его еще не было
Аноним 22/01/23 Вск 23:13:02 #36 №2583749 
>>2583707
Ну навесить же его можно на что угодно, так что это не более чем указание "я бы хотел чтобы оно всегда инлайнилось". А результат не гарантируется, ведь 100500 причин которые могут не дать его инлайнить.
Аноним 22/01/23 Вск 23:31:18 #37 №2583774 
>>2583749
ну короче не буду париться и закоменчу, все равно их использовать не могу
Аноним 22/01/23 Вск 23:34:34 #38 №2583782 
>>2583707
>насколько он вообще рулит?
Вроде это опциональный атрибут. Конпелятор его игнорит если заинлайненый метод больше определенного размера(32 инструкции IL) и в нем есть вызовы других объектов(т.е. не к своим данным обращаешься).
Аноним 23/01/23 Пнд 00:57:54 #39 №2583846 
Хочу кодить на c# пиздец как! Но проблема в том что вакансий норм нету. На удалёнку говноджуна не возьмут, с текущей работы 100% придётся увольняться, ибо c# на проектах не задейстаован вообще никак. Печаль...
Аноним 23/01/23 Пнд 01:07:06 #40 №2583849 
>>2583846
И на какой ЯП решил переходить?
Аноним 23/01/23 Пнд 01:27:04 #41 №2583852 
>>2583849
Не, я наоборот на с# бы перешёл, но работы нет, тем более для джуна.
Аноним 23/01/23 Пнд 01:41:07 #42 №2583860 
>>2583846
Переезжай в ДС.
Аноним 23/01/23 Пнд 10:18:19 #43 №2584037 
>>2583852
Стучись сразу на вакансии мидла.
Аноним 23/01/23 Пнд 10:24:18 #44 №2584046 
Как из шарпа запустить консольное приложение и прочитать его вывод? Желательно, чтобы при этом не открывалась консоль
Аноним 23/01/23 Пнд 10:29:40 #45 №2584059 
>>2584046
Гугли c# subprocess pipe
Аноним 23/01/23 Пнд 11:14:46 #46 №2584130 
>>2582351 (OP)
Почему это говно провалилось?
Аноним 23/01/23 Пнд 11:24:17 #47 №2584144 
>>2584130
Не провалилось.
Аноним 23/01/23 Пнд 11:45:19 #48 №2584161 
Аноны, подскажите, пожалуйста, как получить значение из выделенного элемента в GridData.
Аноним 23/01/23 Пнд 11:50:32 #49 №2584166 
>>2584161
Отбой, до самого дошло сразу после того как пост написал.
Аноним 23/01/23 Пнд 11:54:49 #50 №2584171 
>>2584037
Был бы у меня ещё опыт бэкендера, для такой наглости.
Аноним 23/01/23 Пнд 12:10:44 #51 №2584188 
>>2584171
Увы, но других вариантов нет. Учишься, нарабатываешь опыт/проекты, стучишься в вакансии и доказываешь что можешь и умеешь.
Аноним 23/01/23 Пнд 14:17:20 #52 №2584370 
Что если одна функция ретранслирует кортеж из другой функции.
static (string Name, int Age) GetTupleA()
{
return GetTupleB();
}

static (string Name, int Age) GetTupleB()
{
return ( "Иван", 1000);
}

Получится два абсолютно разных кортежа или как-то автоматом определяется одинаковая сигнатура?
Аноним 23/01/23 Пнд 15:35:50 #53 №2584462 
Два часа трахался с ReactiveUi, прежде чем узнал, что для вызова расширений из класса для которого они написаны обязателен this...
Аноним 23/01/23 Пнд 15:39:40 #54 №2584471 
>>2584462
Сейчас бы вызывать расширения из класса, для которого они написаны.
Аноним 23/01/23 Пнд 16:05:12 #55 №2584525 
Мини-вопрос насчёт нейминга. Есть такой enum:
SignInStatus { Success, Failure, Cancel }

Увидел в другой коде похожий enum, но там Cancel написан в прошедшем времени Cancelled. Какой вариант правильнее - мой или их? Мне кажется, если ты пишешь Cancelled, то другие значения должны быть Succeed и Failed тогда.
Аноним 23/01/23 Пнд 16:16:08 #56 №2584555 
>>2584471
Я бы все отдал за вызов расширений из класса, для которого они не были написаны.

>>2584462
У нас в бейсике добавляется аргумент <Extension> перед функцией-расширением, но параметры пишутся стандартно.
В шарпе тоже должен быть какой-то идентификатор, который бы отличал обычную функцию от функции-расширения. Это касается не только ReactiveUi, а вообще всех расширений.
https://metanit.com/sharp/tutorial/3.18.php

Не пытайся играть в колдунство, запоминая заклинания — загуглил бы про расширения и не ебался бы джва часа.
Аноним 23/01/23 Пнд 16:30:03 #57 №2584570 
>>2584525
>Увидел в другой коде
Похоже на меня. С инглишем дубово и могу одно написать в прошедшем, другое в настоящем, перепутать selection с selected. Вообще, эти игры в склонения боком выходят, когда одно дург с другом переплетается, и у тебя уже целый зоопарк: одной свойство так, другое свойство сяк, метод вообще эдак. И уже визуально начинаешь путаться.

Я думаю, что лучше как у тебя. Наверно надо относиться к этому как ключевым словам — они неизменны и потому легко читаемы.
Аноним 23/01/23 Пнд 16:30:40 #58 №2584572 
>>2584525
>Какой вариант правильнее
Все правильные. В нете есть соглашение, что окончание -ed пишут когда что-то уже строго произошло, -ing пишут когда вот прямо сейчас произойдет, и без окончаний когда время неважно.
Аноним 23/01/23 Пнд 17:53:28 #59 №2584641 
Везде пишу is null и is not null вместо богомерзкого == null и != null. Кто сеймыч?
Аноним 23/01/23 Пнд 17:59:09 #60 №2584647 
>>2584641
== можно перегрузить и наебать, а с is не пройдёт.
Аноним 23/01/23 Пнд 19:43:56 #61 №2584756 
>>2584641
>Кто сеймыч?
Писал так всегда.
бейсикодебил

Попробуй писать is Nothing и в конце строки не ставить ";"
Аноним 23/01/23 Пнд 19:48:10 #62 №2584760 
>>2584756
>Попробуй писать is Nothing и в конце строки не ставить ";"
Даже если мои ноги сгниют от крокодила, а мать продам в рабство, даже тогда я буду выше этого.
Аноним 23/01/23 Пнд 20:01:27 #63 №2584769 
>>2584641
Всегда так пишу. Но да, в EFCore были места, где он не мог это нормально прожевать. В новом вроде все чики-пуки.
Аноним 23/01/23 Пнд 20:27:28 #64 №2584780 
>>2584769
>>2584760
>>2584756
>>2584671
>>2584647
>>2584641
var ?? "Member"

Нахуй какие-то сложности? Будьте умными, мы все-таки в 2к23 живем. Достаточно ??.
Аноним 23/01/23 Пнд 20:35:42 #65 №2584786 
>>2584780
Функциональщина не везде роляет. Иногда нужны простые if/else конструкции и там ?? не везде проканает.
Аноним 23/01/23 Пнд 20:37:16 #66 №2584788 
>>2584780
в 2028 году мы используем это
What??????!!!!!!!
Yes))))))))))
No Way!!!!! .... 🧐
Аноним 23/01/23 Пнд 20:52:28 #67 №2584815 
>>2584786
Охуеть, ?? теперь уже функциональщина. Жду, когда функциональщиной объявят using.
Аноним 23/01/23 Пнд 21:28:14 #68 №2584837 
Ребят, я в ярости. Кому-нибудь приходилось делать фид для яшики.недвижимость на шарпах? Согласно документации корневым элементом должно быть:
<realty-feed xmlns="http://webmaster.yandex.ru/schemas/feed/realty/2010-06">
...
</realty-feed>
И ёп жежь как оказывается не проблемно получить именно такой элемент с именно таким неймспейсом на шарпах.
во-первых по умолчанию туда пихаются неймспейсы по умолчанию xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema". Ладно их можно прибрать:

var s = new XmlSerializer(typeof(Feed);
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
s.Serialize(SomeStrem, new Feed(), ns);

Но, сука, не получается добавить туда вместо них xmlns="http://webmaster.yandex.ru/schemas/feed/realty/2010-06"

ns.Add("xmlns", "http://webmaster.yandex.ru/schemas/feed/realty/2010-06");

Даст результат
xmlns:xmlns="http://webmaster.yandex.ru/schemas/feed/realty/2010-06"

Попытки наебать
ns.Add("", "http://webmaster.yandex.ru/schemas/feed/realty/2010-06");
или
[XmlAtribute("xmlns")]
public string Xmlns = "http://webmaster.yandex.ru/schemas/feed/realty/2010-06"

Приводят к отсутствию неймспейса вообще, пока действую приведением опосля в нужный вид уже сериализованногго текста, но это же хуйня, какого хуя сериализация не может проходить по моим правилам, шо за бред? Есть тут кто имел дело с яшей.недвижимостью, памахите
Аноним 23/01/23 Пнд 21:53:38 #69 №2584855 
>>2584815
Само по себе нет. Но способ использования предлагаемый тобой - да.
Аноним 23/01/23 Пнд 22:07:17 #70 №2584861 
>>2584837
>Даст результат
>xmlns:xmlns
Нутк да, ты же добавляешь неймспес с названием "xmlns". Получается такое дублирование. Походу это у хуяндекса какое-то ебанутое представление о немспейсах(они пытаются дефолтный переопредлить на свой).
Аноним 23/01/23 Пнд 22:23:30 #71 №2584882 
>>2584780
а потом мы вдупляем в эти ебаные шарады и не вдупляем. ну нахуй так жить?
Аноним 24/01/23 Втр 04:27:49 #72 №2584987 
>>2584882
Кому как. Вот лично для меня шарп очень беден на выразительные средства.
Аноним 24/01/23 Втр 08:22:59 #73 №2585045 
Кто нибудь итт использует авалонию? В ней можно как-то кастомизировать заголовок, не отключая его полностью? А то не хочется самому писать обработчики перетаскивания, группировки и тд.
Аноним 24/01/23 Втр 09:21:08 #74 №2585081 
>>2584861
Но у меня бомбануло, от того что казалось бы простая задача оказалась трудновыполнимой
Аноним 24/01/23 Втр 09:53:57 #75 №2585092 
>>2584987
?&%::^$@'# — это не выразительные средства, а способ выебать себе и другим моск.
Аноним 24/01/23 Втр 10:12:08 #76 №2585102 
Где в ASP.NET Core выполнять логику с кастомной инициализацией (например, сходить в бд, прочитать какие-то файлы, установить расписание на основе этих данных)?
В WPF был метод OnStartup и события Initialized/Loaded. Эту подготовку надо выполнить непосредственно перед запуском самого приложения.
Какие в ASP (webapi) есть для этого средства?
Аноним 24/01/23 Втр 13:57:26 #77 №2585286 
наткнулся в коде на вот такой блок:
#if DEBUG_CHECKS
//....
#endif
вроде можно #define там же c этим впилить и будет компилиться
но как его врубить для всего проекта?
Аноним 24/01/23 Втр 14:14:35 #78 №2585310 
>>2585102
Попробуй сделать сервис наследованный от IHostedService.
Там есть методы StartAsync и StopAsync, которые работают при запуске/завершении приложения.
Аноним 24/01/23 Втр 14:19:07 #79 №2585316 
>>2585286
Свойства Проекта - Построение - Символы условной конпеляции, пиши туда все что надо.
Аноним 24/01/23 Втр 14:22:02 #80 №2585327 
Насчёт ЛОГОВ. Во время работы приложения собираю различную информацию, в том числе различные ID'шники связанные с пользователем. Если происходит сбой, то вся эта информация отправляется на сервер.

Тут подумал, а ведь нельзя так открыто собирать ID'шники, ибо по ним можно установить пользователя, например? Хочу обрезать все ID'шники до 8 символов с конца, потому что мне не нужен полный ID для отладки на сервере. Правильная мысль? И как бы лучше это в коде запилить? Может добавить метод StringUtils.EscapeId(...);
Аноним 24/01/23 Втр 14:31:08 #81 №2585340 
>>2585316
спасибо
Аноним 24/01/23 Втр 15:13:50 #82 №2585408 
>>2585092
А писать постоянные ConfigureAwait так выразительно аж пипец.

>>2585102
IHostedService
и следи чтобы он выполнялся первым. И на конец StartAsync он свою работу сделал.
Вообще нигде не написано что сервисы стартуют последовательно, но иначе без вариантов.
Аноним 24/01/23 Втр 15:36:53 #83 №2585445 
>>2585335
Чел, речь вообще не об этом. В приложении используются сторонние сервисы для входа и у них есть ID. Типа фейсбук, гугл, эпл.
Аноним 24/01/23 Втр 16:16:13 #84 №2585520 
1674566172954.png
Народ, вы знаете какой-нибудь сервис для локализации приложений вроде Lokalise? То есть где мы могли бы получить перевод файлов ресурсов для .net приложения на другой язык?
Аноним 24/01/23 Втр 18:07:01 #85 №2585663 
>>2585408
>А писать постоянные ConfigureAwait так выразительно аж пипец.
ну да, гораздо лучше этой ^!@$^&&=>(xyipizda)
ведь мы для людей пишем а не для таукитян или какой-то там машины ебучей
Аноним 24/01/23 Втр 18:25:46 #86 №2585687 
>>2585663
>ведь мы для людей пишем
Ты не поверишь, но людям не нужны бесполезные new, ;, излишние скобочки
Попробуй какой нибуь Parallel.Foreach сделать, так запутаешься в скобочках
Выразительность - не значит магические символы.

Попробуй банальное "хочу foreach но с индексом" и сам все поймешь

и да, как раз этот ConfigureAwait настолько "выразителен", что люди предпочитают его не писать даже если это стоит некоторого оверхеда.
Аноним 24/01/23 Втр 18:55:33 #87 №2585731 
Все-таки херовый в нете ResourceManager. Сто лет его не использовал и забыл, что он вкомпиливает ресурсы из папок через точку. Типо путь "Folder/Res1.resx" превращается "Assembly.Folder.Res1". Сидел джва часа дебажил почему же ресы не видно. Блед что мешало дать явную настройку по какому нику их искать в бинаре.
Аноним 24/01/23 Втр 18:56:02 #88 №2585733 
Шарпаны, мы в шараге учим алгоритмы с сисярпом, у меня ноут 2015го и на нем вижуал студио скрипит пердит, да и винда тоже попердывает. Думаю поставить линукс, только мне нужна среда и компилятор сишарпа. В гугле пишут моно и тут два вопроса - во первых он еще развивается? Когда я искал моно для юнити то вроде мне писали что они давно прекратили его обновлять. Во вторых какие есть альтернативы без особого пердолинга в плане что написал код и исполнил без танцев с бубнами как в студии или близко у этому?
Аноним 24/01/23 Втр 19:06:08 #89 №2585737 
>>2585733
Это... Поставь студию 2008-2015 под неты 3.5-4.6 Для шараги должно хватить за глаза. Все проекты сделаные в них в джва клика портируются на современные поделки микрософта.

Алсо студия 2008 сейчас воспринимается как фитоняшка. Она даже быстрее вс-кода, а ведь когда вышла была жирным тормозным чудовищем на фоне делфей, лол.
Аноним 24/01/23 Втр 19:11:42 #90 №2585744 
>>2585731
Есть же System.Reflection.Assembly через которые все пути достать можно.
Аноним 24/01/23 Втр 19:21:42 #91 №2585757 
image.png
>>2585687
>Попробуй банальное "хочу foreach но с индексом" и сам все поймешь
"хочу foreach но с индексом" - это фиаско. Foreach, ты как раз и используешь, когда тебе похуй на индексы. Если тебе не похуй, то ты не исползуешь foreach.
И да, в шарпе даже такую хуйню можно делать очень просто (см. пик)
Аноним 24/01/23 Втр 19:43:45 #92 №2585791 
>>2585757
> то ты не исползуешь foreach.
и использую что?

А то что на скрине это дичь. Выразительность этой портянки никакая.
Аноним 24/01/23 Втр 19:45:13 #93 №2585794 
>>2585737
Хорошая идея анон, спасибо, попробую наверное так и сделать.
Аноним 24/01/23 Втр 19:45:29 #94 №2585795 
Используешь while.
Аноним 24/01/23 Втр 19:45:48 #95 №2585797 
>2585687
>Попробуй банальное "хочу foreach но с индексом" и сам все поймешь
Просто For?

>>2585757
Чет сложнее обычного цикла.
Аноним 24/01/23 Втр 19:47:50 #96 №2585801 
>>2585795
ну да. это ж шарп )))
выразительность такая выразительность )

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

Какой нибудь foreach(... in items.WithIndex())?
ну можно запилить такой метод типа да, но это будет велосипед. И каждый пилит такой свой велосипед со своим поведением. Ай красота (сарказм).
Аноним 24/01/23 Втр 19:55:05 #97 №2585808 
>>2585791
>Выразительность этой портянки никакая.
Какая тебе нахер выразительность? Ты о чем вообще?
Ты в любом другом языке, если задашся целью получить индекс в foreach, будешь примерно такой же хуйней пользоваться (кортежем или его подобием).
Если тебя смущает linq, то сделай экстеншен в который его спрячешь и все у тебя будет красиво и "выразительно".
Понавыдумывают себе какой-то хуйни, а потом носятся с ней.
Аноним 24/01/23 Втр 19:56:59 #98 №2585809 
2023-01-2419-52-25.png
2023-01-2419-53-57.png
>>2585801
Мне самому шарп в последнее время не очень нравится. Хотел с бейсика слезть, недавно открыл проект на шарпе, а там студия в очередной раз порекомендовала поставить ":", чтобы сократить хуйнюнейм. Как-то даже не смешно уже.
Аноним 24/01/23 Втр 20:00:45 #99 №2585814 
>>2585809
Вот эта хуйня вообще из C еще переползла в шарп, и она наверное в любом языке, с корнями оттуда есть.
Аноним 24/01/23 Втр 20:04:53 #100 №2585821 
>>2585814
Я не против одной хуйни, но когда этих хуевин уже 10 и каждая маркируется через ":", то это уже какая-то шиза.
Аноним 24/01/23 Втр 20:12:39 #101 №2585831 
я просто пишу for без задней мысли.
Аноним 24/01/23 Втр 20:17:48 #102 №2585834 
А возможно кодить на с# без Visual Studio? В смысле есть какие-нибудь ещё варианты IDE? Тулчейны там всякие для vscode или ещё что-то.
Аноним 24/01/23 Втр 20:27:29 #103 №2585846 
>>2585834
Можешь хоть в блокноте код писать. Потом в консоли запускай dotnet build и dotnet run и все
Аноним 24/01/23 Втр 20:31:17 #104 №2585850 
>>2585846
Я понимаю, речь об иде которые предоставляют сравнимый уровень удобства.
Аноним 24/01/23 Втр 20:36:47 #105 №2585858 
>>2585850
VSCode и Eclipse
Аноним 24/01/23 Втр 20:41:27 #106 №2585863 
VIM
Аноним 24/01/23 Втр 20:46:58 #107 №2585877 
1-AD1e170YTJaiUBypv1H9Ow.jpg
>>2585863
Шарпаны, это ловушка!
Аноним 24/01/23 Втр 21:40:20 #108 №2585942 
>>2585808
>Какая тебе нахер выразительность? Ты о чем вообще?
О выражении вещей короче, без лишнего семантического шума
и при этом не скатываясь в магию а-ля "пишем на перле"

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

кроме шарпа я активно пишу на питоне и на котлин.
те же вещи выражаются короче и чище. По сравнению с ними код на шарпе выглядит как "жава какая то". Очень много семантического шума, то есть то, что в другом языке можно выразить чище и короче и НЕ потерять в понятливости

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

А если и тут не понимаешь, то посмотри на визуал бейсик и попробуй его прочитать. Шарписту сложно читать визуал бейсик, хотя там ведь как бы тот же код написан, просто другим способом.
Аноним 24/01/23 Втр 23:30:02 #109 №2586097 
Как же хочеться вкатиться...
Аноним 24/01/23 Втр 23:31:14 #110 №2586099 
>>2585858
А в коммерческой разработке что используют? Кроме студии.
Аноним 24/01/23 Втр 23:35:12 #111 №2586106 
>>2586099
Платный Rider.
Аноним 25/01/23 Срд 00:02:29 #112 №2586139 
>>2586099
Студию и райдер.
Плюс VSCode, но больше как вспомогательный инструмент к этим двум.
Аноним 25/01/23 Срд 01:15:09 #113 №2586164 
почаны чем можно заменить Array.Empty в мамонтовом фреймворк таргете?
я правильно понимаю что он просто пустой дженерик массив возвращает?
Аноним 25/01/23 Срд 01:19:29 #114 №2586166 
>>2586164
https://referencesource.microsoft.com/#mscorlib/system/array.cs,bc9fd1be0e4f4e70,references
Бляя пиздец зумеры изобрели пустой массив.
Аноним 25/01/23 Срд 01:35:52 #115 №2586171 
>>2586166
бля реально пустой массив.
выразительное...
Аноним 25/01/23 Срд 10:41:47 #116 №2586387 
Image 10.png
И когда выйдет билд авалонии с фиксом сглаживания шрифтов под виндой, то все равно будет как то так.

эээх
Аноним 25/01/23 Срд 11:13:19 #117 №2586410 
>>2586387
Зачем авалония, когда есть winui? Да кривой, да багованный, зато нативный и красивый!
А я сейчас пишу тестовое на uwp, такая срань, хоспаде, окон нормальных нет, навигация путем вызова глобальных объектов, это же надо было придумать
Аноним 25/01/23 Срд 11:14:26 #118 №2586411 
>>2586387
Тут дело не в сглаживании, а в привязке к пикселям при прорисовке векторных шейпов букв. Почему "l" вместо палочки в один пиксель, рисуется три: желтая, черная, и синяя? Вероятно, идет не по центру пикслей. В WPF тоже не все волшебно — нужно подобрать подходящий размер шрифта, чтобы не блюрилось. Может быть так, что одни буквы норм, а другие в блюре.

Так что, на первом месте важно точное попадание в матрицу пикселей. А уж если это никак невозможно, то тогда в ход идет сглаживание. Решать все проблемы сглаживанием — дебилизм.
Аноним 25/01/23 Срд 11:29:09 #119 №2586420 
>>2586410
давно винуи стал кросс? ответ - никогда

>>2586411
>В WPF тоже не все волшебно
в WPF есть кроме выбора сглаживания клиртайп еще TextFormattingMode там Display/Ideal, которые дают крутой результат - неотличимо от GDI и напрочь решают проблему "мыльности шрифтов WPF"

А вот у авалонии такой настройки есть. То есть субпиксельное сглаживание вроде есть, но такое себе.
Аноним 25/01/23 Срд 11:36:03 #120 №2586424 
>>2586410
>Да кривой, да багованный, зато нативный и красивый!
в чем он нативный? принцип схож с WPF и при этом работает медленнее чем WPF

А красивость - темы аля "модерн дизайн" и для WPF есть.

Вообще этот винуи выглядит как урезанный WPF с модерновыми контролами из коробки.
Как будто такие же вещи нельзя сделать в WPF лол
Аноним 25/01/23 Срд 11:38:17 #121 №2586427 
>>2586424
> в чем он нативный? принцип схож с WPF и при этом работает медленнее чем WPF
В том, что использует системные контролы, написанные на плюсах.
Аноним 25/01/23 Срд 11:39:14 #122 №2586429 
ДЕСКТОП И ЕБАНЫЕ ВТФ
Аноним 25/01/23 Срд 11:55:18 #123 №2586438 
а ForEach LINQ по скорости такой же, как обычный форич? Выглядит как лишние манипуляции.
Аноним 25/01/23 Срд 12:39:09 #124 №2586476 
2023-01-2512-07-15.png
>>2586420
>TextFormattingMode там Display/Ideal
Hueta, даже VS им не пользуется.
Если, конечно, речь идет про связку
TextOptions.TextFormattingMode="Display"
TextOptions.TextRenderingMode="ClearType"

Да, каждая буква чистенькая, но при этом каждая буква сдвигается до оптимального для рендера места, из-за чего образуются конские щели между буквами. И весь текст выглядит словно дешевка.
Аноним 25/01/23 Срд 13:37:31 #125 №2586531 
Почему uwp не поддерживает net core старше третьей версии? Ещё и ссылаться на не-uwp библиотеки нельзя. Чтобы сделать миграцию бд в этом говне нужно создавать отдельный консольный проект.
Аноним 25/01/23 Срд 14:04:59 #126 №2586553 
>>2586531
Легаси говно - легаси дотнет.
Аноним 25/01/23 Срд 14:06:22 #127 №2586555 
image
image
Думаю как переделать интерфейс. Как бы это грамотно сделать?

Есть простой UserStorage, который сохраняет/загружает различные данные по ключу, на мобилках (пик 1)

Мне нужно добавить возможность сохранять персональные данные, чтобы они были доступны только конкретному пользователю по его ID. Так как в игре игрок может сменить аккаунт, загрузив другой через Facebook или Google.

То есть есть общие данные для всех: настройки графики, управления, например. Есть персональные связанные с конкретным аккаунтом: список новых предметов, которые игрок ещё не посмотрел, инфа о логине и т.п.

Пока набросал вариант (пик 2). Передавать alias(он же ID аккаунта) каждый раз при get/set не хотелось бы. Лучше его задать один раз в самом Storage.
Аноним 25/01/23 Срд 14:36:57 #128 №2586590 
image
>>2586555
Не, я какую-то хуйню написал. Не нужно трогать IUserStorage, не нужно добавлять новые сущности.

Нужно просто передавать user id через UserStorageExtensions, если я хочу сохранить какие-то уникальные данные для конкретного аккаунта.
Аноним 25/01/23 Срд 15:14:00 #129 №2586653 
Аноны, нужна либа для конвертации пдф в картинки.
Не ток изображения из пдф, но даже если они текст содержат, то страницы надо в картинки переводить.
Желательно без потери качества
Аноним 25/01/23 Срд 15:26:22 #130 №2586674 
>>2586653
Утка говорит https://stackoverflow.com/questions/23905169/how-to-convert-pdf-files-to-images
Аноним 25/01/23 Срд 15:28:23 #131 №2586679 
>>2586666
Украл мою ссылку с гетом!
Аноним 25/01/23 Срд 15:46:12 #132 №2586696 
>>2586666
Я его уже читал.
Думаю мож реально гостскрипт пдф заюзать, но это юзеру нужно будет это приложение к себе устанавливать...
Аноним 25/01/23 Срд 15:52:21 #133 №2586702 
>>2586696
там есть еще апишка для конвертации, но я уже заебался хранить пароли в своем приложении и че юзеру делать, если токен надо обновить, а
Аноним 25/01/23 Срд 18:26:44 #134 №2586966 
>>2586476
>И весь текст выглядит словно дешевка.
хз что ты там софт пишешь
текст выглядит как родной виндовый
в общем то это и нужно

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

>>2586427
а толку? такое можно сделать на WPF и работать будет быстрее.
а еще на WPF можно делать и классические, а не только зумерские приложения.
Аноним 25/01/23 Срд 19:00:47 #135 №2587036 
2023-01-2518-53-51.png
2023-01-2518-55-36.png
Как фотошоп умудряется держать 30МБ оперативки? Или вот телеграм - 20МБ. Понятно, что если я переключусь, то там подскочит, но как они это делают в режиме простоя? У меня на старте 80МБ и так висит.

Зато наш православный яндекс диск, у которого нет ни интерфейса, ничего, жрет под 500МБ.
Аноним 25/01/23 Срд 19:58:52 #136 №2587113 
>>2586097
Ебанулся? Поздно уже, скоро всех на нейросетку заменят
Аноним 25/01/23 Срд 20:05:20 #137 №2587118 
image.png
Обещал держать в курсе - держу. Прислали ответ, что тот собес с тестом на w3schools прошел, но оффер не дали, а ответили что будут искать подходящий проект. Прошла неделя, я чет скис, пошел искать вакансии в ебларуси на хх и оказалось, что их 2.5 на дотнет. Приуныл еще больше, но резюме свое разослал.
Аноним 25/01/23 Срд 20:10:47 #138 №2587122 
image
>>2587036
Решил глянуть что у меня там. А там виндоус как обычно срёт.
Аноним 25/01/23 Срд 20:16:41 #139 №2587132 
>>2587036
У шиндоса есть рабочий набор и выделеная виртуальная память. Они сильно не совпадают. Приложуха может думать, что она себе дохуя памяти выделила, но до тех пор пока она реально не начнет ей пользоваться у нее ничего нет.

Алсо, в нете память занимает рантайм сразу с запасом. Реально твое приложение может ей не пользоваться, но уже на старте она зарезервирована как рабочий набор и готова выделиться по первому new в коде.
Аноним 25/01/23 Срд 20:19:49 #140 №2587139 
>>2587118
>3rd technical interview
Ебануться. Я бы и на второе техническое не пошел бы. А тут третье и все для того, чтобы "Мы посмотрим, можно ли тебя куда-нибудь приткнуть"
Аноним 25/01/23 Срд 20:23:12 #141 №2587150 
>>2587139
Там пунктуация неправильная. "Третье, техническое интервью". Первым был скрининг с эйчаром, вторым звонок с хз кем просто поболтали о том как красиво писать код, а как некрасиво, а третьим было именно это техническое собеседование.
Аноним 25/01/23 Срд 20:50:53 #142 №2587182 
>>2587150
Ну тогда норм.
Аноним 25/01/23 Срд 21:05:18 #143 №2587193 
А как паттерн пайплайн делается с disposable объектами?
Вот есть у меня пдф файл, нужно его разрезать на страницы и я хочу параллельно каждую страницу дальше обрабатывать, как мне из одного метода в другой передать stream, чтобы память не утекала?
Аноним 25/01/23 Срд 22:12:41 #144 №2587244 
>>2587193
А не, мне это не нужно даже.
Но вообще, TPL pipeline подойдет для этой задачи?
Аноним 25/01/23 Срд 22:28:15 #145 №2587258 
>>2587244
вариантов куча
от заброшенного TPL DataFlow
или же PLINQ
через "заводим несколько очередей и перекладываем по готовности"
до "тупо семафоры навешиваем и радуемся"
Аноним 26/01/23 Чтв 01:48:06 #146 №2587383 
>>2587258
просто в таски все засунуть и вейт фор алл сойдет для запросов?
Дальше нужно будет их все также обработать и выбрать минимальный правильный
Аноним 26/01/23 Чтв 01:55:36 #147 №2587385 
>>2587383
да можешь хоть Parallel.For
все зависит от твоей задачи, желания "не занимать потоки больше необходимого" (или плевать на это) и личных предпочтений "люблю вот такую абстракцию".
Аноним 26/01/23 Чтв 01:56:52 #148 №2587386 
Я правильно понимаю, что конкретный класс Builder должен в методе Build возвращать конкретный класс, а не интерфейс?
Аноним 26/01/23 Чтв 02:04:54 #149 №2587387 
>>2587386
Билдер должен возвращать объект, который нетривиально создавать и заполнять самому. Через какие языкозависимые конструкции он работает - похуй, паттерны от языков не зависят.
Аноним 26/01/23 Чтв 02:09:00 #150 №2587388 
>>2587387
А если он возвращает абстракцию?
Аноним 26/01/23 Чтв 02:14:07 #151 №2587389 
>>2587388
Да пусть хоть object возвращает. Лишь бы можно было с ним взаимодействовать.
Аноним 26/01/23 Чтв 04:21:49 #152 №2587428 
Аноны, есть задача такая, под которую я никак не могу подходящий паттерн подобрать.
Есть базовый класс, который содержит поля и метод, который используется всеми наследниками.
Есть текст, в зависимости от того, содержит ли текст все ключевые слова я хочу создать экземпляр наследника.
Норм будет хранить тип и связанные с ними ключевые слова в каком-нибудь текстовом файле и сделать фабрику, которая будет использовать Activator.CreateInstance() и в зависимости от ключевых слов создавать экземпляр класса.
Аноним 26/01/23 Чтв 04:24:25 #153 №2587429 
>>2587428
Ну и да, хочу, чтобы если находило один класс, то другие уже не проверяло.
Эт думаю сделать через if с условием.
Наскок это конченный подход?
Аноним 26/01/23 Чтв 04:48:03 #154 №2587432 
>>2587428
Подход как подход. я такой подход даже в одной книжке видел
Но сам по себе подход говно
Хранить тип где то снаружи и любой рефакторинг грозит сломать этот тип...
понятно что в общем то двигать никто не будет, ведь это как плагины.
но лучше все таки сделать сопоставление

Представь у тебя примитивная система плагинов на уровне палеолита. и делаешь ты ее так
1 заводишь аттрибут PluginKeyAttribute
2 используешь на классах плагина это аттрибут так
[PluginKey("foo")]
class MyClass
3 на старте ищешь все это и заводишь словарик
key=>type
4 используешь в текстов файле уже жесткое что то типа (да как угодно хоть жсон)
foo|param=value
5 по foo ты знаешь тип
Аноним 26/01/23 Чтв 04:53:29 #155 №2587433 
>>2587428
ну и делать через Activator.CreateInstance() тоже бяка. Можно, просто грязновато. в случае какой то ошибки получишь невразумительное исключение вместо нормального если бы делал нормальные фабрики.
Аноним 26/01/23 Чтв 05:27:46 #156 №2587437 
>>2587428
во. даже вспомнил где
https://javatutor.net/books/tip/pattern_refactoring
Аноним 26/01/23 Чтв 07:24:43 #157 №2587474 
>>2587433
>в случае какой то ошибки получишь невразумительное исключение вместо нормального если бы делал нормальные фабрики.
Фабрики? Типа абстрактную фабрику сделать или как?
Аноним 26/01/23 Чтв 08:36:50 #158 №2587515 
>>2587474
ну никто не запрещает кроме класса который ты собираешься инстанцировать также иметь и фабрику для инстанцирования
хоть даже статический метод в том же классе с указанием имени метода в аттрибуте, или по конвенции, или еще как.

Тут же все "зависит". Если у тебя тупой файлик вида
foo|param=value&param2=5
то активатору ты будешь кормить стринги, а значит конструктор класса должен получать обжектс, потом как то кастить. В общем неявность плата за универсальность.

С фабриками кода больше, но и нет неожиданностей. да и проверить файл с параметрами можно не инстанцируя все на свете.
Аноним 26/01/23 Чтв 10:17:02 #159 №2587587 
>>2585310
>>2585408

> IHostedService
Работает. Спасибо.

> и следи чтобы он выполнялся первым. И на конец StartAsync он свою работу сделал.
Как за этим следить?

Нашёл в интернетах ещё один вариант через метод расширения для IHost.
Чем эти два варианта принципиально отличаются? Какие +/- у каждого из них?
Аноним 26/01/23 Чтв 10:34:55 #160 №2587603 
>>2587587
>Как за этим следить?
регистрируй его в контейнере в первую очередь и жирный такой комент напиши что он обязан быть первым

ну и конечно в StarAsync дождаться все await. никаких "запустил и забыл авось успеет"

но вообще это нужно если у тебя остальные сервисы зависят от работы первого

>через метод расширения для IHost.
покажи о чем ты. Но вообще проблема стоит " у меня асинк инициализация как мне быть и принципиально не хочу GetAwaiter().GetResult() (хоть и знаю что ничего страшного не будет ибо нет контекста синхронизации)"

попутно же IHostedService может получить зависимости, а также есть команда стоп, которая асинковая по сравнению с подиской на завершене приложения.
Аноним 26/01/23 Чтв 11:03:43 #161 №2587633 
>>2587603

> регистрируй его в контейнере в первую очередь и жирный такой комент напиши что он обязан быть первым
Разве порядок вызовов зависит от порядка регистрации?

> покажи о чем ты
Вот так:
https://pastebin.com/Vat2TTzp
Аноним 26/01/23 Чтв 11:55:02 #162 №2587687 
>>2587633
Контейнер отдаст список в том порядке в каком в него добавляли
Так то метод с Ihost лучше тем что точно сработает первым
Аноним 26/01/23 Чтв 16:21:16 #163 №2588083 
Нужно ли в wpf создавать отдельный слой бизнес-логики, который будет работать с базой данных, или можно дёргать контекст базы данных прямо во вьюмодели?
Аноним 26/01/23 Чтв 16:21:56 #164 №2588084 
>>2588083
Зависит от проекта
Аноним 26/01/23 Чтв 16:23:44 #165 №2588090 
>>2588084
Делаю тестовое простой список заметок
Аноним 26/01/23 Чтв 16:25:01 #166 №2588093 
>>2588090
Нужно.
Аноним 26/01/23 Чтв 16:26:10 #167 №2588097 
>>2588093
И репозиторий нужно?
Аноним 26/01/23 Чтв 16:30:41 #168 №2588110 
>>2587515
Хм, окей, а как это сделать с фабрикой? Ну примерно, я сейчас не особо осознаю это.
В файлике я могу хранить ключевые слова в виде массива и само название класса наверное или что-нибудь, чтобы указать связь, что если текст содержит эти кейворды, то нужно вызывать либо эту фабрику, либо инстанцировать этот класс
Аноним 26/01/23 Чтв 18:07:32 #169 №2588338 
>>2588083
DAL слой не такой уж и сложный в реализации и даже если тот кто ревьюит код против, то максимум, что он сможет тебе предъявить, это "я не люблю такой подход" или "у нас так не принято".
А вот за то, что ты запихнешь работу с данными во вьюхи, вероятность того что тебя опустят на-а-амного больше.
Аноним 26/01/23 Чтв 18:49:58 #170 №2588424 
>>2588338
Спасибо за ответ. Тогда еще вопрос - я для удобства оборачиваю все команды и свойства во вьюмодели в регионы, а затем группирую эти регионы по типу (собственно команды, свойства, поля), как к такому относятся? Слышал, что советуют не использовать регионы.
Аноним 26/01/23 Чтв 19:22:17 #171 №2588457 
>>2588424
По моему опыту 50/50. Просто те кто пользуется регионами обычно делают это молча, а те кто нет - постоянно высказывются, как они их не любят.

Хотя я раньше тоже любил все поделить на регионы, чтобы было красиво и понятно. А сейчас научился писать код так, что не вижу в них необходимости, за исключеием редких случаев. Все и так понятно.
Аноним 26/01/23 Чтв 19:57:38 #172 №2588496 
2023-01-2619-41-30.png
>>2588457
Я часть кода временно заворачиваю в регион, чтобы глаза не мозолило и не утомляло постоянным скроллингом. А потом логически группирую, но чтобы в классе не было больше трех регионов. Шиза, это когда в каждом регионе по 1-2 функции или свойства.

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

>>2588424
>я для удобства оборачиваю все команды и свойства во вьюмодели в регионы
А почему везде пихают команды прямо в тело вьюмодели? Почему не сделать специальный класс-сборщик всех команд? У меня на пикрил есть отдельное свойство Commands, в котором и лежат все экземпляры команд.
Аноним 26/01/23 Чтв 20:02:19 #173 №2588502 
>>2588457
>А сейчас научился писать код так, что не вижу в них необходимости, за исключеием редких случаев. Все и так понятно.
научи и меня тоже...
Аноним 26/01/23 Чтв 20:08:10 #174 №2588508 
>>2588502
Чудес не бывает. Вместо 30 функций в одном классе у тебя 10 классов по 3 функции.
Ну кроме случаев оверинжениринга, когда ты пишешь "в лоб".
Но говно где-то держать придется — не в регионах, так в папках; не в папках, так в проектах; не в проектах так в библиотеках.
Аноним 26/01/23 Чтв 20:08:57 #175 №2588509 
image
>>2588424
Я использую регионы для разделения логики. А разделять регионами поля, свойства и методы не стоит, как по мне. Хотя вот в игровом движке на шарпе так разделяют:
https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/GameWindow.cs
Аноним 26/01/23 Чтв 20:14:39 #176 №2588515 
>>2588509
Ну отделять поля от классов это действительно абсурд, а вот когда у тебя куча расширенных свойств или свойств зависимостей, то в регион окутываю.
Аноним 26/01/23 Чтв 21:05:28 #177 №2588560 
>>2588515
>заметаю говнокод под коврик
Аноним 26/01/23 Чтв 21:07:38 #178 №2588564 
>>2588508
Еще можно говно не писать. Инб4: ряя нельзя
Аноним 26/01/23 Чтв 21:12:28 #179 №2588572 
>>2588564
Нельзя нарушить закон сохранения говна.
Аноним 26/01/23 Чтв 21:18:25 #180 №2588585 
ЗАСТАВЛЯЮТ ПИСАТЬ НА C#

А я питонист вообще-то. Как думаете меня выпрут если отказаться? Так-то проблема не только в языке. Этот сервис написали 10 лет назад с тех пор делали по 3 коммита в код на 10 строчек. Просто чтобы он продолжал работать. Сервис тупа создаёт вмки в облаке и конектит несколько вмок к одной локальной сети. Чтобы уже потом внутри этих вмок можно было кластер из наших сервисов накатить. Это для тестов. По факту я sdet, который тулзы для тестов пишет. Какого хуя мне нужно этот сервис пердолить? Они хотят чтобы я добавил фичу чтобы сервис дополнительные приватные сети на этив вмки накатывал. И обязательно делал это через 1 сетевой интервейс. Просто две сети накатать это пулреквест на 10 строчек. А вот настроить это через один интерфейс это ебать как пердолить надо. Сначала написать опёртку над консольным клиентом, который этими сетями управляет. Сейчас она кастрированая. Потом написать алгоритм выбора сетей из тех, что в облаке заранее созданы. Но нельзя просто спросить что за сети в облаке. Их нужно вручную положить в бд. В майкрасофт cql server. С их ебанутым синтаксисом. Вручную. Потом нужно орм для новой таблицы подключить. Толкьо потом можно алгоритм выбора свободных и подходязих сетей написать. Дальше как сервис создаст недокластер нужно ещё какие-то скрипты написать, которые будут интерфейсы настраивать внутри каждой вмки. И это на сищарпе. Нужно ещё что-то придумать с выбором мак адрессов. И под конец клинап поправить чтобы сначала допсети детачились, интерфейсы помечались свободными в бд и только потом удалялись вмки. Пиздец. На сишарпе это делать. В коде, который 10 лет никто не трогал. И ещё этот сервис гоняется на виндовой вмке в облаке. Без возможности автодиплоя. И без тестов. То есть мне нужно всё это без ошибок написать, собрать проект, скопировать все дллки на тот сервер подменив старые версии и там перезапустить этот сервис. Про ci не слышали когда его делали. Пиздец. Апгрейд с даунтаймом. Без тестов. Вручную. А я питонист вообще-то.
Аноним 26/01/23 Чтв 21:19:18 #181 №2588589 
>>2588585
Говна пожуй! C# лучший язык
Аноним 26/01/23 Чтв 21:20:00 #182 №2588592 
>>2588585
Иди нахуй! Ты должен радоваться, что тебе дали возможность писать на шарпе
Аноним 26/01/23 Чтв 21:21:05 #183 №2588595 
>>2588585
Ахуел? Сишарп шикарен
Аноним 26/01/23 Чтв 21:24:40 #184 №2588606 
>>2586099
У райдера много свистоперделок для рефакторинга и удобства говнокодинга, типа автоскрытия using директив. Плюс юай отзывчивый. Ну и статический анализ достаточно бодрый.
Студия более деревянная и олдфажная, зато имеет ебовейшую интеграцию с докером, позволяющую дебажить 50 микросервисов как обычный хелловорлд. Просто нажимаешь кнопку и поехали прыгать по брекпоинтам.
Для статического анализа там есть решарпер, но он делает юай тупить еще сильнее.

Собственно интеграция с докером однозначно делает студию лучшей в моих глазах. А на работе заставляют использовать райдер, блядь
Аноним 26/01/23 Чтв 21:25:27 #185 №2588607 
>>2588585
Ебать простыню настрочил, тебе больше жаба подходит, чем питон или шарп.
Аноним 26/01/23 Чтв 21:29:23 #186 №2588613 
>>2588585
Ты какую-то хуйню написал.
Тебе нужно просто написать 2 скрипта на баше. Дергать их шарпом. Все. Нахуя ты вот так вот усложняешь? Ты джун чи шо?
Аноним 26/01/23 Чтв 21:38:58 #187 №2588625 
Аноны, как в uwp сделать, чтобы при выборе строки в listview и нажатии enter вызывалась команда из вьюмодели?
Аноним 26/01/23 Чтв 21:39:31 #188 №2588626 
>>2588607
Просто чела жаба душит учить шарп.
Аноним 26/01/23 Чтв 21:40:04 #189 №2588628 
>>2588626
Да там ебала жаба питона.
Аноним 26/01/23 Чтв 21:46:14 #190 №2588634 
>>2588110
А ещё, можно ли полностью отвязать клиент от фабрики?
Чтобы при добавлении нового класса не нужно было менять клиент или уже существующую фабрику?
Аноним 26/01/23 Чтв 21:46:53 #191 №2588636 
>>2588625

А чем это тличается от WPF? Там можно биндить сочетания клавиш к командам.
<ListView.InputBindings>
<KeyBinding Key="Enter" Command="{Binding btnUpdate}" />
</ListView.InputBindings>

или самое тупое - подписка на событие по KeyDown, где ты запускаешь команду из DataContext.
Аноним 26/01/23 Чтв 21:54:43 #192 №2588645 
>>2588636
В wpf то можно, там вообще много чего можно... А вот в uwp не все так просто. Там нет inputbindings, есть только бехавиоры срабатывающие при нажатии клавиши, но они не работают, по крайне мере у меня.
Аноним 26/01/23 Чтв 21:56:14 #193 №2588648 
>>2588636
>>2588645
https://stackoverflow.com/questions/49912917/is-there-an-alternative-to-wpfs-keybinding-in-uwp
Аноним 26/01/23 Чтв 21:57:26 #194 №2588650 
>>2588636
> или самое тупое - подписка на событие по KeyDown, где ты запускаешь команду из DataContext.
Пока так и сделал только previewkeydown, обычный опять же не работает, пришлось добавить в команду проверку клавиши, что по моему нарушает принцип mvvm.
Аноним 26/01/23 Чтв 22:04:05 #195 №2588657 
>>2588648
Вот это уже интересно, спасибо. Только смущает, что можно вызвать только функции из codebehind, никакого mvvm
Аноним 26/01/23 Чтв 22:16:56 #196 №2588668 
>>2588650
Мне говорили, что не нарушает.
Там главное правило, чтобы view не переплеталось с modelView. А в загоне view ты можешь делать что угодно, но ты не можешь к примеру пердать экземпляр своего ListView вьюмодели. Собсно смысл в том, чтобы одна часть могла работать без другой и могла быть взаимозаменяемой.

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

А каждой команде хранил сочетание клавиш keyGesture. Сопсно при событии KeyDown, получал тот же keyGesture из keyEventArgs и просто проходил по списку и сравнивал. Т.е. у меня не было лесенки из else.

>>2588657
>из codebehind, никакого mvvm
Так метод же находится не во вьюмодели. Че не так? Это может быть написано в partial class твоего view. Ну есть же всякие конвертеры данных. Они тоже частично на шарпе пишутся и успешно применяются в MVVM.
Аноним 26/01/23 Чтв 22:21:19 #197 №2588671 
>>2588083
В общем случае держать тонкими контроллеры или вьюмодели нужно. вьюмодели и так слишком жирные обычно.

>>2588424
>Слышал, что советуют не использовать регионы.
А это те которым "если тебе нужны регионы значит ты что то делаешь неправильно, делегируй". Но по факту вьюмодели по своей сути "god objects" и дербанить это не очень удобно (рождаются всякие MVVMC), но обычно это велосипеды же.

А еще есть такой же момент вида "вьюмодели в папке viemodels, контролллеры в controllers, виды в views" что конечно верно. Но feature папки удобнее не только в модели, а и в этом деле.

>>2588650
>что по моему нарушает принцип mvvm.
принцип MVVM гласит что вьюмодели не должны знать явно про вид. То есть вьюмодель предоставляет данные, а как и кто их рисует или не рисует, а там вообще тесты - личное дело буковки V
Так что вид может использовать биндинги, может не использовать, может совпадать по структуре с вьюмоделями, может не совпадать - его личное дело и ничего не нарушает.
Аноним 26/01/23 Чтв 22:39:38 #198 №2588695 
>>2588110
Да ну все просто
1 имя класса в файле хранить плохо. Причина простая - а вдруг ты захочешь его переименовать или еще чего, а если обфусцирую. И даже если ты "мамой клянусь этого делать не буду тут на века", то все равно ИМХО лучше отделить имя инстанцируемого класса от имени в файле. Я не любитель "авось тут у нас все будет хорошо", вон в шарпе некоторая работа с ресурсами, некоторые конфиги используют прямое указание класса с нейспейсами и любой рефакторинг все ломает. Раздражает.


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

А если параметры разные? разное количество и типы?
И тут появляется зависимость от порядка значений в файле (минное поле) или твой конечный класс должен иметь конструктор который принимает какой нибудь IDictionary<object, object> и оттуда все сам достает.

Можно ли так? Ну конечно можно. Вернее оно будет работать. Но если ты привык все делать чисто, то у тебя будет глаз дергаться что класс вместо прямого принятия параметров принимает objects и сам парсит. Нормальный класс должен иметь нормальный типизированный конструктор, а грязь "инстанцирования" прячется в какой нибудь фабрике, которую ассоциируешь с классом.
файлику незачем знать про фабрику. Это код интерпретации этого файла должен знать "ага существует фабрика, вот ее и вызовем вместо Activator"
Аноним 26/01/23 Чтв 22:55:02 #199 №2588711 
>>2587428
Делаешь базовый класс MySupperDupperFactory.
В нем метод IMySupperDupperClass Create();
Делаешь класс FileKeywordsFactoryResolver с методом GetFactory(string path). Фабрики получаешь через интерфейс, четко указав список тех что тебе нужны(для понимания будет лучше, можно )
В нем - получаешь фабрики и по твоей логике - выбираешь нужную фабрику.

Собственно - да. Вот так бы наверное и сделал.
Аноним 27/01/23 Птн 01:58:17 #200 №2588857 
>>2588711
>Фабрики получаешь через интерфейс
Через какой интерфейс?
Аноним 27/01/23 Птн 05:52:15 #201 №2588906 
Какой же линку днище, просто пиздец. И вы этим гордитесь, долбоебики?
Аноним 27/01/23 Птн 06:46:29 #202 №2588916 
>>2588906
Жавист порвался от зависти. Бывает
Аноним 27/01/23 Птн 11:05:39 #203 №2589105 
Помогите с дилеммой.
Вот допустим я делаю команды с записью в историю (свою собственную). Допустим одна команда создает папку и делает запись в историю, а другая команда перемещает файлы и делает запись в историю.

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

Тут напрашивается некая группа точек истории, чтобы юзер нажал всего один раз Ctrl+Z, но отменился сразу целый ряд действий. Такое я видел в vba скриптах, когда ставился некий маркер в начале и в конце операции. Типа:

ActiveDocument.BeginCommandGroup "My Command"
... тут ряд команд ...
ActiveDocument.EndCommandGroup


Но вот что меня смущает. А что если мне надо перенести тысячу файлов, каждый в свою папку? Этож как история засрется. Ведь в каждой точке истории хранится попутная инфа, которая в данном случае будет тупо дублирующимся мусором.

Как такое решается или решается ли вообще? Усложняется команда? Т.е. у меня команда по умолчанию должна иметь возможность создавать N папок? А команда по перемещению файлов иметь возможность по умолчанию перемещать в N разных директорий?
Так у меня в некоторых случаях и так команды перегруженные. Ну к примеру когда ты помещаешь папку с похожим именем в директории, то ее бы следовало переименовать — это тоже должна быть отдельная команда со своей историей. Или после того как переместил, ты должен итемы визуально выделить — это еще одна команда. Но у меня пока все это дерьмо хранится в одной команде.

Хз что делать: eсложнять команды (хотя мне хочется их еще сильнее дробить) или засирать память.
Аноним 27/01/23 Птн 11:07:56 #204 №2589109 
>>2589105
>Хз что делать: eсложнять команды
усложнять команды *
Аноним 27/01/23 Птн 12:50:07 #205 №2589280 
>>2589109
Прям таки усложнять. Команда просто имеет контекст для отмены одного шага. Если контекс это батч операций... ну и что.
Аноним 27/01/23 Птн 13:56:08 #206 №2589393 
>>2589105
>ActiveDocument.BeginCommandGroup "My Command"
Сорт оф транзакция да. В винформах что-то похожее есть для любой нетривиальной операции с визульным компонентом. Например написал команду которая свапает два цвета у контролов - установка нового цвета записывается в историю, и получается там две операции при свапе, но команда логически одна. Поэтому появились транзакции - т.е. группы команд которые можно отменить или повторить по требованию. В предельном случае транзакция состоит всего из одной команды, но их может быть сколько угодно.
Аноним 27/01/23 Птн 14:29:23 #207 №2589457 
>>2588906
И именно поэтому вы джависты его себе спиздили, при этом еще и криво.
Аноним 27/01/23 Птн 17:03:31 #208 №2589754 
где можно спиздить решарпер? я нищий студент
Аноним 27/01/23 Птн 17:24:27 #209 №2589783 
>>2589754
Не нужен тебе решарпер.
Аноним 27/01/23 Птн 17:26:37 #210 №2589786 
>>2589783
Двачую. Работаю на визуалке без плагинов и мне заебись.
Аноним 27/01/23 Птн 17:27:29 #211 №2589787 
Звонили из какой-то компании, куда откликался на хх. Сказали офис за городром, но у них есть корпоративный транспорт, курирующий с конечной станции метро. Спросили ожидания по вилке. Сказал 1.6к долларов. Ответили, что "мы в поиске более джуниора для этой позиции и потолок зп для нее 1.2к". После чего со мной попрощались и бросили трубку. Хз, наверное надо было соглашаться на то, что дают.
Аноним 27/01/23 Птн 17:28:49 #212 №2589788 
Что эффективнее: возврат Null или False для случаев, когда нужно к примеру найти какой-то итем?

Я видел где функции почему-то возвращают булевый статус, а объекты результата возвращают через референсный параметр метода. К чему такие сложности?
Аноним 27/01/23 Птн 17:44:04 #213 №2589798 
>>2589754
А где взять rider?
Пользовался студенческой лицензией, осталось 14 дней..
Аноним 27/01/23 Птн 17:45:37 #214 №2589800 
>>2589798
> Пользовался студенческой лицензией, осталось 14 дней..
Отчислили?
Аноним 27/01/23 Птн 17:46:38 #215 №2589801 
2023-01-2717-45-53.png
>>2589788
Аноним 27/01/23 Птн 17:53:21 #216 №2589806 
>>2589783
>>2589786
ну мне говорят жить без него не могут очень полезный
а я пощупать хочу что там за дела вообще
Аноним 27/01/23 Птн 17:54:08 #217 №2589807 
>>2589787
>Хз, наверное надо было соглашаться на то, что дают.
Если есть где жить. Если есть хоть какая финансовая поддержка (родители, жена). То для самого-самого старта вполне неплохая сумма.
Аноним 27/01/23 Птн 18:31:02 #218 №2589859 
>>2589788
>Я видел где функции почему-то возвращают булевый статус, а объекты результата возвращают через референсный параметр метода. К чему такие сложности?
Это микрооптимизация чтобы не вычислять хеши два раза или не бросать дорогие исключения на тривиальные ошибки парсинга.

Как пример со словарем - тут хеш ключа вычисляется два раза:
if (Dict.ContainsKey(Кey))
{
Result = Dict[Key];
// что-то дальше делаем с Result
}
Превращается в:
if (Dict.TryGetValue(Кey, out Result))
{
// что-то дальше делаем с Result
}

>Что эффективнее: возврат Null или False для случаев, когда нужно к примеру найти какой-то итем?
Без разницы на самом деле. Главное чтобы пользователи методов были готовы поймать null или обработать False.
В некоторых случаях хороший вариант возвращать - дефолтный объект-заглушку нужного типа. Тогда даже проверять ничего не надо, ведь с этим объектом алгоритмы идущие дальше не поломаются.
Аноним 27/01/23 Птн 18:31:12 #219 №2589860 
>>2589788
Метод find возвращает ienumerable<t>, если ничего не найдено то пустой.
Get возвращает объект, или выбрасывает исключение.
TryGet возвращает результат в виде bool, и значение как out параметр.
Пидарасы возвращают null.
Аноним 27/01/23 Птн 19:23:09 #220 №2589921 
>>2588695
> И тут появляется зависимость от порядка значений в файле (минное поле)
Да, я тоже об этом думал, причем один класс может отвечать на несколько кейвордов.
> файлику незачем знать про фабрику
Но фабрике нужно как-то знать о том, как именно эти кейворды ассоциировать с именно этим классом.
А еще как-то нужно собрать все фабрики, в идеале бы не нарушать open closed principle
Аноним 28/01/23 Суб 01:17:54 #221 №2590287 
>>2589860
>Пидарасы возвращают null.
Т.е. про FirstOrDefault ты не знаешь?
Аноним 28/01/23 Суб 02:22:37 #222 №2590323 
>>2590287
Пидорас, не оправдывайся.
Аноним 28/01/23 Суб 02:27:53 #223 №2590326 
>>2589921
>Но фабрике нужно как-то знать о том
Ну конечно нужно. Это ведь сама причина создания этой фабрики

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

фломастеры.
Аноним 28/01/23 Суб 02:54:06 #224 №2590333 
>>2590326
> реестре фабрик
Я, если честно, не понял, как оно должно работать.
Есть где-нибудь пример кода, который это реализует, чтобы вас не заебывать вопросами.
Аноним 28/01/23 Суб 03:16:46 #225 №2590334 
>>2590333
Кто-то должен уметь конструировать конкретный объект. Значит это в минимуме метод. Куда то этот метод нужно приткнуть.

А значит это в минимуме хоть тупой словарик вида Dictionary<string|Type, Func<paramobject, object>> где можно "дай мне фабрику по ключу/типу"
или класс обертка над подобным словариком чтобы можно было красиво так запросить .GetFactory<TResult>();/.GetFactory(resultType);

Но так как ты работаешь на уровне рефлексии и тебе дженерики не нужны, то у тебя может быть даже одна большая фабрика которая умеет создавать все типы где ты просишь "сделай мне объект"
банальное
factory.Create(resultType);

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

Не усложняй простые вещи. В этой задаче сложность на уровне "куда положить? да пусть тут лежит, как то пох",
то есть вопрос стоит так - если я добавлю еще один класс, то где мне придется дописывать код, удобно ли это делать и что будет если я забуду написать фабрику для нового типа - на деле ничего не будет, ведь если кодер не имбецил то он хоть раз запустит проверить "как работает код что я написал" и получит ошибку в рантайме и допишет.
Аноним 28/01/23 Суб 05:19:44 #226 №2590358 
image.png
Окей, аноны. Какие вопросы могут задать на эту вакансию-мультитул?
Аноним 28/01/23 Суб 10:45:27 #227 №2590467 
ну ладно они сделали что можно сделать интерфейсы для статиков
но методы расширения для статиков так и нет (
Аноним 28/01/23 Суб 11:34:35 #228 №2590496 
>>2590467
Зачем? Одна из сутей метода расширения — подхватить экземпляр в качестве одного из параметров. В случае со статическими методами в этом нет смысла. Что мешает просто обратиться к методу напрямую?
Аноним 28/01/23 Суб 11:42:58 #229 №2590502 
>>2590496
Мешает отсутствие этого самого метода. Приходится заводить разные SomeClassEx
Аноним 28/01/23 Суб 12:40:49 #230 №2590566 
>>2590358
Вакансия звучит как древнее говно мамонта.
Аноним 28/01/23 Суб 12:42:41 #231 №2590568 
>>2589806
>говорят жить без него не могут очень полезный
Синдром утенка самый натуральный. Вижла не менее удобна.
Аноним 28/01/23 Суб 14:56:09 #232 №2590709 
>>2590568
менее.
Аноним 28/01/23 Суб 15:01:34 #233 №2590721 
>>2590709
Для новичков вообще похуй.
Аноним 28/01/23 Суб 15:03:46 #234 №2590730 
>>2590358
>Какие вопросы могут задать на эту вакансию-мультитул?
"Вы готовы разгребать все это говно?" Это единственный вопрос который они имеют моральное право задать.
Правильный ответ, если что: "Нет".
Аноним 28/01/23 Суб 17:21:56 #235 №2590958 
>>2590566
Скорее всего так и есть потому что это банк.
Аноним 28/01/23 Суб 18:21:55 #236 №2591072 
>>2590334
> А значит это в минимуме хоть тупой словарик вида Dictionary<string|Type, Func<paramobject, object>> где можно "дай мне фабрику по ключу/типу"
О, я это уже видел, значит, хитростей тут каких-то нет.
Аноним 28/01/23 Суб 18:29:54 #237 №2591089 
>>2591072
хитрость в том что писать тип как строку можно только в некоторых случаях - некоторая работа с ресурсами (плохо, но такой уж дотнет), конфигурация (а это уже плохой подход, но опять же дотнет это) и в логировании (ну тут хотя бы выбора может не быть, ок)

в рабочих же файлах лучше избегать этого
Аноним 28/01/23 Суб 19:36:15 #238 №2591173 
>>2590958
Кек. Я даже знаю над чем придется работать по этой вакансии. В моем банке примерно на такой же куче говна вся эта механика крутилась, но сейчас уже все это на .Net6 переписано и другую БД. Плюс очереди на подходе. Правда от XML-к никуда не деться, но тут уже проблема, что это формат ЦБ и от него никак не уйти.
Аноним 28/01/23 Суб 20:42:10 #239 №2591210 
>>2591173
>Правда от XML-к никуда не деться, но тут уже проблема, что это формат ЦБ и от него никак не уйти.
Я не понимаю этого, схуяли ваще? Кем это установлено? Почему бы не перейти на нормальный жсон или прото?
Аноним 28/01/23 Суб 21:00:17 #240 №2591222 
1674928817945.gif
Как в wpf увеличить частоту рендеринга, чтобы при растягивании окна не появлялось пустых полей и мерцания, как например на гифке? Хотя такая проблема не только в впф, я бы даже сказал только в винформах окна растягиваются плавно интересно почему.
Аноним 28/01/23 Суб 21:30:28 #241 №2591242 
>>2591210
>Кем это установлено?
Международный стандарт ISO 20022
Аноним 28/01/23 Суб 21:34:47 #242 №2591247 
>>2591222
Короче кроличья нора оказалась глубже, чем я думал. Проблема с мерцанием это фундаментальная проблема винды и хуй ты ее решишь.
https://stackoverflow.com/questions/53000291/how-to-smooth-ugly-jitter-flicker-jumping-when-resizing-windows-especially-drag
Аноним 28/01/23 Суб 21:54:58 #243 №2591262 
>>2591222
+ Ещё одна причина писать на винформах.
Аноним 28/01/23 Суб 22:07:26 #244 №2591279 
>>2591247
Я к херам избавлялся от стандартной рамки окна и делал прозрачным задник.

Это точно впф? Как будто открыл редактор VBA 6. Даже меню похожее.
И нахера тебе фпв на шиндовс 7? Ты бы еще на ХР запустил. Если у тебя так лагает с пустым практически окном, то земля тебе пухом.

Короче хуй знает чет там запустил.
Аноним 28/01/23 Суб 22:12:16 #245 №2591284 
>>2591279
> Это точно впф? Как будто открыл редактор VBA 6. Даже меню похожее.
На гифке просто пример мерцания.
> И нахера тебе фпв на шиндовс 7? Ты бы еще на ХР запустил. Если у тебя так лагает с пустым практически окном, то земля тебе пухом.
Это не у меня лагает, это у всех лагает, ты бы хоть материал по ссылке прочел. Буквально открываешь большинство приложений и будет такая хрень.
Аноним 28/01/23 Суб 22:22:54 #246 №2591289 
bandicam 2023-01-28 22-17-19-423.mp4
>>2591284
>На гифке просто пример мерцания.
Это не просто пример, это ответ почему мерцает.

>Это не у меня лагает, это у всех лагает
У меня не лагает.

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

На видеорил самый простой вариант, можно еще лучше.
Аноним 28/01/23 Суб 22:30:56 #247 №2591295 
>>2591284
>>2591289
... единственный геморный вариант черного фона — при загрузке окна, который возникает даже с опцией AllowTransperency. Тут надо оптимизировать так, чтобы все тяжелое говно разом не подгружалось.

И вообще, я какого-то единого подхода для себя не нашел, вот чернотой при старте я мучаюсь.
Аноним 28/01/23 Суб 23:19:40 #248 №2591325 
>>2589860
а если я Maybe<T> возвращаю
Аноним 28/01/23 Суб 23:33:18 #249 №2591338 
>>2591325
Зачем тогда полумерами ограничиваться. Возвращай уже нормальный Result<Maybe<T>> и анврапер нормальный не забудь сделать.
Аноним 28/01/23 Суб 23:53:57 #250 №2591365 
Maybe<Result<Result<Result<Maybe<T>>>>>
Аноним 29/01/23 Вск 01:40:49 #251 №2591427 
Пацантры, чем отличается

(T)value
от
value as T

Я только понял, что второй вариант работает только с классами.
Аноним 29/01/23 Вск 02:07:29 #252 №2591437 
>>2591427
> (T)value
Если value не типа T, кинет эксепшен.
> value as T
Если value не типа T, результат будет null.
Аноним 29/01/23 Вск 02:13:28 #253 №2591440 
>>2591437
> Если value не типа T, результат будет null.
Если T является структурой, то он вообще не даёт скомпилировать. А (T) при этом компилируется.
Аноним 29/01/23 Вск 02:18:10 #254 №2591442 
Кто-нибудь пробовал майкрософтвское OCR? Я так понимаю оно не на всех версиях десятки работает?
Аноним 29/01/23 Вск 02:30:52 #255 №2591446 
>>2591442
ОКР? Да, збс, наша тема.
Аноним 29/01/23 Вск 07:02:49 #256 №2591517 
Меня наконец позвали на первое очное собеседование, если возьмут, то предстоит заниматься десктопной разработкой wpf, uwp, win app sdk. Можете накидать тем, которые у меня могут спросить?
Аноним 29/01/23 Вск 07:16:33 #257 №2591520 
Хм, подход засунуть кучу тасков в list, потом делая while(list.Any()) и внутри этого цикла await Task.WhenAny(list) и удалять этот таск из списка нормальный? Потенциально запуская добавляя в еще один список таск и вызывая новый метод через Task.Run() нормальный?
Вроде как выигрывает мне время.
Аноним 29/01/23 Вск 07:24:38 #258 №2591524 
>>2591520
Какая то непонятная хрень
Аноним 29/01/23 Вск 07:30:10 #259 №2591526 
>>2591524
Ну я просто имею список из тасков и хочу подождать, пока хотя бы один из них выполнится и запустить следующий асинхронный таск
Аноним 29/01/23 Вск 07:33:08 #260 №2591528 
>>2591526
У вас запрещают семафоры?
Аноним 29/01/23 Вск 07:34:49 #261 №2591529 
>>2591528
Нет, я просто про них плохо помню, можно как-то сделать это лучше с семафорами?
Аноним 29/01/23 Вск 07:37:56 #262 №2591530 
>>2591529
Значит нужно вспомнить, а не велосипедить не пойми что
Аноним 29/01/23 Вск 09:09:30 #263 №2591579 
Шарпаны-шарпаны.
Вчера делал HTTP-сервер. Заняло это 3 часа, включая гуглеж, проверку и общение с анончиками в /b/.
Цель была сделать максимально примитивный сервер, который может отдать html-файл из папочки www.
В общем. В /b/ анон сказал что лютый говнокод и меня не возьмут на работу.

Объясните, че не так-то?
https://pastebin.com/QYKrWNsH
Аноним 29/01/23 Вск 10:11:25 #264 №2591627 
>>2591520

https://www.rocksolidknowledge.com/articles/awaiting-multiple-tasks-effectively
Аноним 29/01/23 Вск 10:15:16 #265 №2591633 
>>2591520
Task.WhenAll(tasks);
Аноним 29/01/23 Вск 10:37:49 #266 №2591677 
>>2582351 (OP)
Слушайте, посоветуйте пожалуйста книг/ресурсов по написанию хорошего кода. Я так-то шарп знаю, но вот максимально редко пользуюсь всякими интерфейсами делегатами и прочей хуйней. А я хочу писать качественный код, который быстрый, удобочитаемый и модифицируемый. Помогите мне!
Аноним 29/01/23 Вск 10:38:17 #267 №2591680 
>>2591627
Нет никакой проверки на то, что всё было задиспожено, методы имеют ебанутые названия, отсутствует кодстайл, где-то запятые проёбаны и имеют неодинаковый вид тоже самое с фигурными скобками, нет в названии асинхронных методов слова "Async". Поля раскиданы хуй пойми где и инициализируешь их на месте, а не в конструкторе. Во многих местах - публичные set. В методе Main вообще отстутствует await оператор для метода Process (28 строка).

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

Отсутствуют модификаторы доступа для полей (некоторые помечены, некоторые нет). Бест-практис говорит нам всегда добавлять private, хоть он и по умолчанию такой (код читабельнее).

В HttpRequest - pipe не readonly, почему?

Ну а вообще в том треде я тебе сказал, у тебя неплохие познания есть, иди устраиваться на работу.
Аноним 29/01/23 Вск 10:42:40 #268 №2591689 
>>2591677
Р. Мартин Чистый Код
Аноним 29/01/23 Вск 10:45:12 #269 №2591693 
>>2591680
> В методе Main вообще отстутствует await оператор для метода Process (28 строка).
Так и должно быть для обработки нескольких запросов одновременно
Аноним 29/01/23 Вск 10:49:39 #270 №2591700 
>>2591689
А еще есть чего? Или этого хватит?
Аноним 29/01/23 Вск 10:51:39 #271 №2591704 
>>2591700
Хотяб его осиль.
Аноним 29/01/23 Вск 10:55:08 #272 №2591708 
>>2591704
А на будущее..? Я так-то таненбаума осилил, две книги, это думаю тоже без проблем
Аноним 29/01/23 Вск 11:02:32 #273 №2591717 
>>2591708
Эх хоть кто-нибудь по перевой ссылке в шапке перешел...

>Принципы, паттерны и методики гибкой разработки на языке C#, Роберт С. Мартин, Мика Мартин

Вот еще https://ru.stackoverflow.com/a/474416/422180, надо бы в шапку добавить, чуть позже отредачу пастбин
Аноним 29/01/23 Вск 11:31:18 #274 №2591762 
>>2591717
Спасибо

А еще такая фигня, как алгосы изучать лучше? Я просто такой человек который если что то не использует на практике то очень быстро это забывает. А алгоритмы я вообще нахуй нигде не использую... На литкоде решать их?
Аноним 29/01/23 Вск 11:33:29 #275 №2591766 
>>2591762
Гугли "Александр Куликов алгоритмы" на ютубе и смотри, совместно читай Кормена 1 издание. Ну если у тебя прям совсем нулёвые знания - то начинай с Грокаем Алгоритмы, а дальше переходи к вышеперечисленному. Совместно с этим решай задачки тут https://projecteuler.net/archives, потом как нарешаешься - переходи к литкоду.
Аноним 29/01/23 Вск 11:34:06 #276 №2591767 
>>2591766
Спасибо большое
Аноним 29/01/23 Вск 11:44:50 #277 №2591774 
>>2591440
>А (T) при этом компилируется.
Потому что такой формат каста вообще не думает. Но вообще, если тебе приходится кстить струтктуру, то что-то ты делаешь не так.

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

Все функции, принимающие структуры, принимают самые простейшие явные типы. К примеру какой нибудь расчет площади прямоугольника логически может принимать один параметр в виде структуры Size с двумя свойствами Width и Height, но принимает он два параметра типа double: Width и Height.

А какой нибудь прямоуголник не принимает два параметра Size и Position. Он принимает ЧЕТЫРЕ параметра: Width, Height, X, Y.

А уж принимать структуры неизвестного типа — это лютый бред. Это как унитаз прикручивать к потолку.
Аноним 29/01/23 Вск 11:45:49 #278 №2591776 
>>2591762
>>2591767

База какая-то такая:

Графы:
- способы представления графа (матрицы смежности, инцидентности, список рёбер и т.д.)
- обход в ширину, глубину
- проверка графа на ацикличность и поиск произовольного цилка
- топ. сортировка, поиск компонент связности и сильной связности
- проверка графа на эйлеровость, поиск эйлерового пути/цикла

- алгортимы поиска кратчайших путей (дейкстра, форд-белман, флойд-уоршол)

- минимальные остовные деревья (алгоритмы прима и крускала)

- сети и потоки в сетях (эдмондс-карп, min cost max flow, в общём, всё, что есть в Кормене, нужно на этот счёт прочитать и понять).

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

Структуры данных:
- Куча, стек, очередь (возможные реализации их трейдофы).
- Бинарные деревья поиска, самобалансирующиеся бинарные деревья поиска (красно-чёрное, avl, декартово)
- Система непересекающихся множеств
- Дерево отрезков и задача RMQ
- Хэш-таблицы; методы разрешения коллизий

Строки:
- Z-функция и префикс-функция. Их эффективное вычисление
- Алогоритмы поиска подстроки в строке (как минимум КМП, но вообще их дофига и желательно в них немного покопаться, чтоб хотя бы примерно представлять ,какие там идеи используются и что вообще бывает)
- Бор. Ахо-Корасик
- Суффиксные деревья. Укконен
- Суффиксные автоматы

Комбинаторика:
Умение генерировать комбинаторные объекты типа перестановок, размещений, сочетаний, деревьев и т.п. (есть например в искусстве программирования Кнута).

Немного вычислительной геометрии (кмк, не обязательноl; просто чтоб потрогать область)
- Ориентированная площадь треугольника
- Проверка отрезков на пересечение и поиск точки пересечения (то же для прымых и окружностей)
- Поиск выпуклой оболочки: Джарвис, Грэхем-Эндрю

Параллельно с этим идёшь на какой-нибудь codeforces/informatics/topcoder или любую другую твою любимую площадку с олимпиадными задачи и решаешь-решаешь-решьаешь. В процессе всплывёт ещё куча неупомянутых мной более мелких алгоритмов (например, я вообще ничего не писал про всякую теория чисел типа решета эратосфена, поиска нод-а и тому подобных вещей). Всё это доботываешь по ходу дела. Хороший ориентир - способность стабильно решать на кодфорсесе задачи под номерами 3-4 из div2. Это уровень при котором ты будешь железно проходить алгоритмические секции вообще не парясь (я бы даже сказал, что это оверкилл, потому что на алго. секциях обычно дают задачи по типу литкода, а они всё же несколько проще, чем олимпиадные в большинстве своём).
Аноним 29/01/23 Вск 12:09:53 #279 №2591802 
>>2591776
>(то же для прымых и окружностей)
Смотрел стрим Tsoding-а про анти-алиазинг геометрических фигур. У меня вопрос: почему все начинают дрочить на кружки и прямоугольнички, вместо изучения того же самого для кривых безье, которые могут быть и кружком, и треугольничком, и небом, и Аллахом?

Я смотрю на этого Цзодинга, как он сперва голову ломает над алгоритмом сглаживания для кружка, потом как голову ломает над алгоритмом сглаживания для треугольничка и у меня кровь течет из глаз. Ну напиши ты алгоритм для безье один раз и он будет работать везде. Не хочу, хочу жрать говно, хочу чтобы у меня появился ромб и я сидел бы час и переписывал бы все заново.
Аноним 29/01/23 Вск 12:15:15 #280 №2591807 
image
>>2591774
> А уж принимать структуры неизвестного типа — это лютый бред. Это как унитаз прикручивать к потолку.
Подскажи тогда, как тогда лучше реализовать пикрелейтед?

Get - по ключу выдаёт либо загруженные данные, либо сначала их загружает из json файла и после возвращает. Данные кэшируются внутри.
Set - задает и помечает данные, что они изменены (IsChanged=true)
Save - сохраняет все изменённые данные обратно в json файлы по ключам

Создавать каждый раз объекты при вызове Get не вариант, ибо это мобилки и лучше не дёргать лишний раз GC.
Аноним 29/01/23 Вск 13:18:51 #281 №2591874 
>>2591807
Ты при реализации интерфейса указываешь конеретный тип или так и оставляешь структурой?

Если твои структуры — примитивные типы, типа bool, int, float то и хрен с ним, у тебя особо выбора нет, да тебе это и не нужно.

Если бы ты в Value пихал структуру из 100500 свойств, то GC ты бы не изнасиловал, но зато изнасиловал бы что-то другое, причем куда более варварскими методами.

Можно сделать перегрузки, если у тебя не зоопарк структур.
Аноним 29/01/23 Вск 16:24:48 #282 №2592214 
Шарпаны, я пришел к вам с двумя вещами.
Во первых - в шарпе нет динамических массивов? Чет гугл по запросу динамик аррэй выдает только си и плюсы.
Во вторых - я сейчас читаю книгу каких то ебаных болгаров полупидоров и мне уже неистово подгорает. Они бросают тебе задачу и в подсказках пишут "пиздуй в интернет". Короч задача реализовать вот эту хуйню
https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
до десяти миллионов. КАК БЛЯДЬ? Мне че массив на 10 миллионов ячеек создавать чтоб у меня комп утонул нахуй?
Те решения что я находил в интернете довольно элементарны но мне они нихуя не помогают потому что они идут до N Где N не больше тысячи. А мне надо 10 блядь миллионов лимит.
То есть заносить в массив каждый результат умножения на простое число. А потом смотреть каких чисел нет в массиве те и простые.
Я не могу подсчитать сколько простых чисел чтобы сделать массив, я конечно же не буду делать массив на 10 миллионов ячеек, и я не знаю как в си шарпе сделать динамический массив а задать длинну массива заранее я не могу ибо не знаю сколько членов в нем будет.
Аноним 29/01/23 Вск 16:40:32 #283 №2592238 
https://dmkpress.com/catalog/computer/programming/dot_net/978-5-97060-983-5/
Где спиратить?
Аноним 29/01/23 Вск 16:42:38 #284 №2592243 
нахуйболгар.png
Короч в рот ебал болгар, вот моя реализация, похуй ваще.
Аноним 29/01/23 Вск 16:53:02 #285 №2592256 
>>2592243
Нихуя не работает выше 120, тут короч надо сохранять новое простое число и потом добавлять проверку его деления по модулю
Аноним 29/01/23 Вск 16:53:24 #286 №2592257 
>>2592214
> в шарпе нет динамических массивов?
дохуя, к примеру List
Аноним 29/01/23 Вск 17:01:03 #287 №2592263 
>>2592214
> динамических массивов
Вместо них используют коллекции, всякие List, Dictionary, HashSet и т.д. Размер заранее неизвестен, добавляй туда сколько угодно элементов, коллекция будет автоматически изменять размер.
Аноним 29/01/23 Вск 17:05:56 #288 №2592271 
>>2592214
Ехал дебич через дебич, видит дебич в реке дебич.

У тебя даже на примере показывается от 2 до 131. Что мешает вот так же твои 10млн поделить на диапазоны чисел и последовательно применять свое ссаное сито к каждому диапазону?

Что мешает загуглить сперва какие коллекции и массивы бывают в шарпе?
Аноним 29/01/23 Вск 17:16:34 #289 №2592283 
>>2592243
Алгоритм Профана
Аноним 29/01/23 Вск 17:43:04 #290 №2592343 
primes.png
Короч запилил такой говнокод и он работает но у меня место кончилось в массиве, даже до 1000 не дошло.
Аноним 29/01/23 Вск 17:44:38 #291 №2592345 
>>2592283
Я и есть профан, чел, первый семетр шараги.
>>2592278
>>2592263
>>2592257
Понял, буду гуглить
>>2592271
>Что мешает вот так же твои 10млн поделить на диапазоны чисел и последовательно применять свое ссаное сито к каждому диапазону?

Руки из жопы
Аноним 29/01/23 Вск 17:57:29 #292 №2592366 
>>2592360
Вот я и хочу подзадрочить алгоритмы. Есть какая-то книга на примете?
Аноним 29/01/23 Вск 17:57:59 #293 №2592369 
Вот этого не слушай >>2592360 твой матан и алгоритмы никому нахуй не нужны. Ах да, через пару лет всех кодеров заменит ии, так что лучше учись на токарном станке работать, щегол.
Аноним 29/01/23 Вск 17:58:31 #294 №2592371 
1675004312133.jpg
>>2592366
> Есть какая-то книга на примете?
Аноним 29/01/23 Вск 17:59:47 #295 №2592377 
Стикер
>>2592345
>Я и есть профан
Да я в шутку, типа делал алгоритм Эратосфена, а получился алгоритм Профана.
Аноним 29/01/23 Вск 18:01:24 #296 №2592382 
>>2592378
>>2592371
Пасиб
>>2592377
Тонкая шутка
Аноним 29/01/23 Вск 18:02:46 #297 №2592389 
>>2592369
Короч я понял, надо посыпать голову пеплом, повесить на себя табличку "the end is nigh" и кричать на жд вокзале что скайнет грядет.
Аноним 29/01/23 Вск 18:08:42 #298 №2592401 
>>2592371
magnet:?xt=urn:btih:0D5B1AC5981F6A535369EF314F00C1F67B7DF0F3&tr=http%3A%2F%2Fbt4.t-ru.org%2Fann%3Fmagnet&dn=%D0%A2.%D0%9A%D0%BE%D1%80%D0%BC%D0%B5%D0%BD%2C%20%D0%A7.%D0%9B%D0%B5%D0%B9%D0%B7%D0%B5%D1%80%D1%81%D0%BE%D0%BD%2C%20%D0%A0.%D0%A0%D0%B8%D0%B2%D0%B5%D1%81%D1%82%2C%20%D0%9A.%D0%A8%D1%82%D0%B0%D0%B9%D0%BD%20-%20%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B8%20%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7.%20%D0%98%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%203-%D0%B5%20%5B2013%2C%20DjVu%2C%20RUS%5D

вот на рутрекере нашел если надо комуто
Аноним 29/01/23 Вск 18:10:50 #299 №2592404 
>>2592393
>в большинстве задач
Поражало, что люди сперва ориентируются на большинство, а потом скулят от конкуренции. В любой области болшинство хуи пинают и нажимают одну кнопочку. Хочешь плыть в эту сторону — флаг тебе в жопу.
Аноним 29/01/23 Вск 18:22:55 #300 №2592423 
>>2592393
>единственное
Был почти в десятке проектов с совершенно разными стаками, и у всех была единственная проблема - разваливающийся под собственным весом говнокод, который невозможно поддерживать.
Вместо мудреного алгоритма ты можешь захардкодить какой-нибудь массив на миллион значений, и оно будет работающим и поддерживаемым.
Но если ты систематически делаешь даже мелкие косяки в архитектуре, проекту пизда. Через N лет в него просто невозможно будет вносить изменения.
Аноним 29/01/23 Вск 18:24:30 #301 №2592424 
>>2592343
Че тебе мешает делать лениво?
Аноним 29/01/23 Вск 18:59:46 #302 №2592481 
1675007986695.jpg
>>2585571
Аноним 29/01/23 Вск 19:16:58 #303 №2592509 
> IStringLocalizer.
Нахуя? Просто пишешь расширение строки, например LocaliseThis(), которое считывает локаль, находит нужную строку в жсоне и возвращает ее.
Аноним 29/01/23 Вск 19:47:23 #304 №2592555 
>>2592382
>Тонкая шутка
тонкость уровня /b/
Аноним 29/01/23 Вск 21:32:01 #305 №2592681 
>>2591633
Оно медленнее работает на пару секунд.
Ибо ждёт всех тасков, а так ждёт любой таск и работает дальше.
Аноним 30/01/23 Пнд 04:17:34 #306 №2592984 
>>2591530
Подожди, а нахуя мне семафор вообще
Аноним 30/01/23 Пнд 05:15:17 #307 №2592989 
>>2592984
Потому что для программиста фраза
"хочу подождать, пока хотя бы один из них выполнится и запустить следующий"
переводится как
"хочу выполнить много тасков но с лимитом одновременного выполнения"
Аноним 30/01/23 Пнд 06:18:39 #308 №2593000 
>>2591520
Можно кстати не как анон говорит с семафорами а так.
У тебя есть ConcurrentQueue<Func<CancellationToken, Task>> в нее пишешь то что надо выполнить
У тебя есть метод Task ProcessQueue(CancellationToken ct), в котором - из очереди достается очередная задача, выполняется.
Собственно все. Ограничение одновременно выполняемых тасок будет строится на количестве одновременно запущенных тасок ProcessQueue.

ProcessQueue примерно так выглядит:

while(ct.IsCancellationRequered is false)
{
var t = _queue.TryDequeue(out var task) ? task(ct), Task.Delay(100, ct);
await t;
}
Аноним 30/01/23 Пнд 06:25:56 #309 №2593002 
>>2593000
>>2592989
бля, заинтриговали, попробую семафор написать
Аноним 30/01/23 Пнд 07:17:08 #310 №2593015 
>>2593000
Никогда так не делай.
Аноним 30/01/23 Пнд 08:59:02 #311 №2593046 
>>2592989
> "хочу выполнить много тасков но с лимитом одновременного выполнения"
А причем тут лимит одновременного выполнения? Я не отсылаю десятки тысяч реквестов к API, чтобы это не было необходимо.
В лучшем случае всего 16 реквестов
Аноним 30/01/23 Пнд 09:04:21 #312 №2593048 
>>2593046
называй как хочешь, суть это не меняет
если ты ждешь окончания задачи чтобы начать новую - значит ты лимитируешь выполнение. Например, тредпул - он заканчивает одну из тасок, удаляет ее из своей внутренней очереди и начинает новую.

Разницу видишь с твоим описанием? А разница не суслик - ее нет
Аноним 30/01/23 Пнд 09:16:20 #313 №2593058 
>>2593048
>если ты ждешь окончания задачи чтобы начать новую - значит ты лимитируешь выполнение.
Не, мне просто нужно дождаться, пока апишка вернет значение, чтобы я мог это значение в другой асинхронный метод передать.
Аноним 30/01/23 Пнд 09:18:26 #314 №2593061 
>>2593058
так дожидайся и передавай
не изобретай велосипеды для несуществующих проблем.
Аноним 30/01/23 Пнд 09:21:09 #315 №2593062 
>>2593061
Ну просто это разными методами можно сделать, я хочу по мере поступления, а так можно все таски дождаться и запустить батч из следующих тасков
Аноним 30/01/23 Пнд 09:43:17 #316 №2593086 
>>2593062
ну делай по мере поступления
OrderByCompletion в виде "хочу чтобы удобна" легко гуглится
http://sergeyteplyakov.blogspot.com/2015/06/process-tasks-by-completion.html
также есть тут https://github.com/StephenCleary/AsyncEx

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

сам я такое не юзаю ибо ссылки выше, да и хотелки побольше (лимит выполнения и лимит очереди (ну не люблю я подход когда миллион задач сразу становится в очередь и другим не советую))
Аноним 30/01/23 Пнд 13:29:41 #317 №2593318 
dplTLrXAKA.jpg
Что вообще спрашивают на собесах веб разработчика с 4 годами опыта? У меня ток 1.5, но позвали туда где требуется 4.
Аноним 30/01/23 Пнд 13:35:11 #318 №2593321 
>>2593318
не понял юмора, ведь (a + b)2 = a2 + 2ab + b2

мимо аутист
Аноним 30/01/23 Пнд 17:50:40 #319 №2593587 
>>2593015
И чому же?
Нормальная практика.
Допустим, у тебя есть задачи, которые надо в фоне обработать. Ты их в очередь пишешь. Ограничиваешь число обработчиков, в зависимости от ресурсов сервиса. У очереди - делаешь лимиты, чтобы не было переполнения, либо выталкиваешь старые задачи, которые уже "протухли". Собственно, все, обработчики - по мере сил - берут в обработку задачу, обрабатывают, потом идут за следующей.
Так много где делается.
Аноним 30/01/23 Пнд 17:57:15 #320 №2593597 
>>2593058
> просто нужно дождаться, пока апишка вернет значение, чтобы я мог это значение в другой асинхронный метод
Почему нельзя просто:
var resA = await fooA();
await FooB(resA);
?

Если хочешь их В одну задачу зарихнуть:
await Task.Run(async () => {
var resA = await fooA();
await FooB(resA);
});

Если тебе нужно много таких.
То в цикле просто запускаешь задачи. Добавляешь в список.
Потом Task.WhenAll(tasks);
Аноним 30/01/23 Пнд 17:59:11 #321 №2593599 
>>2593587
потому что проверять в цикле на "есть чё" это дичь. Это противоречит самому принципу await

Это как заказать пиццу и каждую минуту выбегать из квартиры проверять не несут ли вместо тупо открыть когда позвонят.
Аноним 30/01/23 Пнд 18:08:41 #322 №2593609 
>>2593599
> просто нужно дождаться, пока апишка вернет значение, чтобы я мог это значение в другой асинхронный метод
Можно без есть чо.
Делаешь у очереди семафорчик. Какой-нибудь SemaphoreSlim. При добавлении - релизишь. При взятии задачи в обработку - входишь.
Обработчик - делает:
while(true){
var task = await _queue.GetTask(cancellationToken);
try{
await task(cancellationToken);
}
catch(Excetpion e) {_logger.Error(e); }
}
Аноним 30/01/23 Пнд 18:33:34 #323 №2593623 
>>2593609
Конечно можно. Ведь именно семафор и был предложен )

хотя конечно над семафором/очередями много разного наворотили более высокоуровненого
Аноним 30/01/23 Пнд 19:23:34 #324 №2593687 
ребят, пояснитe за ML.NET. Перспективная технология или очередной высер майков, чисто бы было?
Аноним 30/01/23 Пнд 19:25:14 #325 №2593691 
>>2593687
технология найс, скоро все буду кодить нейронки на шарпах, а питон отомрет нахуй, так что смело вкатывайся
Аноним 30/01/23 Пнд 19:43:47 #326 №2593707 
>>2593691
Вот ты его троллишь. Но сама-то технология - действительно крутая. Другое же дело, что пистон - слишком уж дохуя всего захватил.
Аноним 30/01/23 Пнд 20:03:59 #327 №2593743 
>>2593687
> очередной высер майков
Подозреваю что это. Веры нет в их начинания учитывая что они уже в шестой раз переделываю гуй и скачут по версиям как хоромоги.
Аноним 30/01/23 Пнд 23:19:13 #328 №2593908 
>>2593587
Так даже решают проблемы многопоточной записи в файл или другой ресурс. Делаем очередь куда пишут потоки, запускаем параллельно таску в которой пишем в файл получая данные из очереди по одному.
Можно писать и многопоточно, главная фишка отсутствие кода синхронизации в рабочих потоках и следовательно ОЧЕНЬ дорогих остановок и запусков потока на ядре. Зато на задержки потоков вывода нам насрать пусть подтармаживают
Аноним 30/01/23 Пнд 23:55:07 #329 №2593938 
Пацы, что скажите про Azure Functions? Стоит ли вообще использовать эту штуку? Кое-как через друга из другой страны создал аккаунт и смог на бесплатном тарифе запустить демо. Функционал очень скудный. Но зато всё просто.

С другой стороны, можно создать свой asp.net core проект и запустить на Amazon AWS. Только придётся самом разворачивать сервер на винде.

Мне нужно обрабатывать около 20 млн API запросов в день. На Азуре это выйдет мне примерно в 350 баксов в месяц. На своём amazon сервере без понятия во сколько это обойдётся и не будет ли дрочки с превышением трафика.
Аноним 31/01/23 Втр 02:07:51 #330 №2594035 
>>2593938
>asp.net core
Ты же в курсе, что можешь вообще на любом серваке такие приложения развернуть. Т.е. ты тупо выбираешь сначала тот который потянет твои 20 млн в деньЕсли не секрет, то что?, и деплоишь туда.
Аноним 31/01/23 Втр 03:14:26 #331 №2594046 
image.png
>>2593609
> await _queue.GetTask(cancellationToken);
Это что-то, что я сам должен написать или есть готовое?
Кста, видел этот код, это же хуйня какая-то, если что-то действительно выкинет ошибку, то семафор никогда не релизнется.
Надо ли в таких случаях semaphor.Release() помещать в catch?
Аноним 31/01/23 Втр 05:13:30 #332 №2594055 
>>2593321
В том и шутка, что "я не знаю почти ничего, а то что знаю - неправильно".
Аноним 31/01/23 Втр 05:47:31 #333 №2594062 
>>2594046
всегда нужно помещать в безусловное выполнение вида finally, ContinueWith, using (для асинксемфоров, стандартный в using не умеет)
Аноним 31/01/23 Втр 06:11:16 #334 №2594068 
>>2594046
> есть готовое?
Можешь https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.channels.channel-1?view=net-7.0
Использовать.
По хорошему - надо свое писать.
Аноним 31/01/23 Втр 09:14:23 #335 №2594119 
Зачем нужно вызывать WaitForPendingFinalizers после вызова сборщика мусора? У Троелсена указано, мол это для гарантии, что к освобождаемым ресурсам никто не обратится, но ведь к ним и так никто не сможет обратиться, потому что собираются только те ресурсы, на которые нет ссылок.
Аноним 31/01/23 Втр 11:17:19 #336 №2594176 
>>2594119
Что бы из другого потока не достучались до удаляемых объектов.
Аноним 31/01/23 Втр 11:37:45 #337 №2594200 
>>2594176
кто не достучался?
Аноним 31/01/23 Втр 15:00:18 #338 №2594397 
Можно ли хуячить стили для интерфейса программы в WPF, как для вёба это делается, с таким же по сути безграничным функционалом?
Аноним 31/01/23 Втр 15:46:12 #339 №2594432 
>>2594397
WebView/WebView2
Аноним 31/01/23 Втр 15:51:27 #340 №2594436 
Почему массив кидает ошибку при выходе за его границу, а не просто считывает данные дальше?
Аноним 31/01/23 Втр 15:54:53 #341 №2594440 
>>2594436
Какие данные? Массив кончился, какие данные могут быть после конца данных?
Аноним 31/01/23 Втр 16:03:50 #342 №2594455 
>>2594440
Случайные. Как в си и крестах.
Аноним 31/01/23 Втр 16:06:43 #343 №2594459 
>>2594455
Шарп - не си и не кресты.
Аноним 31/01/23 Втр 16:34:56 #344 №2594516 
Кто-нибудь имел дело с библиотеками devexpress и foxit? Интересует работа с документами, преобразование в pdf и т.д. Расскажите о своём опыте, какую из них лучше выбрать?
Аноним 31/01/23 Втр 16:35:57 #345 №2594518 
>>2594455
через unsafe обратись
Аноним 31/01/23 Втр 17:04:00 #346 №2594565 
1123.jpg
MVVM. Ситуация - пикрилейтед: дан некий список с тремя итемами, у каждого итема есть чекбокс. Состояние чекбокса должно быть связано со свойством модели.

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

Даже если я захочу по событию клика чекбокса применять команду, то внутри итема нет доступа ко вью-модели. Как быть-то? У модели тоже нет доступа.

Как такое дерьмо разруливается в MVVM? Как выполнить действие если изменилось свойство?
Аноним 31/01/23 Втр 17:09:16 #347 №2594574 
>>2594565
В шаблоне итема биндиш чекбокс к команде и передаешь ей номер элемента.
Аноним 31/01/23 Втр 17:09:50 #348 №2594576 
>>2594574
> биндишь
Фикс
Аноним 31/01/23 Втр 17:10:43 #349 №2594577 
>>2594565
> то внутри итема нет доступа ко вью-модели.
Переопределяешь datacontext для элемента.
Аноним 31/01/23 Втр 17:20:02 #350 №2594598 
>>2594574
>>2594577
>В шаблоне итема биндиш чекбокс к команде и передаешь ей номер элемента.
>Переопределяешь datacontext для элемента.
Не могу. Итем соурс шаблона - модель, а не вью-модель. А команды находятся во вью-модели.

Модель тоже не знает ничего про вью-модель.
Аноним 31/01/23 Втр 17:24:49 #351 №2594604 
>>2594598
> Итем соурс шаблона - модель, а не вью-модель.
Ну так фикси свой говнокод.
Аноним 31/01/23 Втр 17:26:25 #352 №2594607 
>>2594598
Что значит не можешь? Для любого элемента можно определить любой контекст данных.
Аноним 31/01/23 Втр 17:34:20 #353 №2594620 
>>2594604
В смысле фиксить, если так по инструкции?

- Window имеет дата контекст вью-модели,
- ListView имеет дата контекс списка вьюмодели,
- Шаблон ListItem имеет дата контекст элемента списка.

>>2594607
>Для любого элемента можно определить любой контекст данных.
Ну да, и он у меня как контекст итема списка вьюмодели. Он не видит все что выше по условной иерархии. Это надо что-то типа RelativeSource до уровня Window.
Аноним 31/01/23 Втр 18:34:55 #354 №2594703 
>>2594620
Все, так и сделал. Обратился по имени к элементу выше и забрал у него дата контекст.
Аноним 31/01/23 Втр 19:35:04 #355 №2594762 
>>2594703
Ну и варианты где вьюмодель списка подписана на события вьюмодели итема через обычное событие или INPC также абсолютно нормальные (главное не забывать про отписку, если она нужна).
Аноним 31/01/23 Втр 20:50:35 #356 №2594810 
>>2594762
>на события вьюмодели итема через обычное событие
Хотел так, но подумал, что гемора будет больше — не только из-за подписки, но и из-за потери контроля над расстановкой чекбоксов сразу для нескольких итемов. По сути начнется спам командой, которая по одному чекбоксику будет сохранять в историю. Я просто не знаю как это адекватно обработать в одно действие.

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

К тому же в WPF подписка автоматом подчищается, правда ведь?
Аноним 31/01/23 Втр 21:19:25 #357 №2594838 
>>2594810
>К тому же в WPF подписка автоматом подчищается, правда ведь?

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

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

Лично я во вьюмоделях использую подписку с лайфтаймом.
Аноним 31/01/23 Втр 22:15:23 #358 №2594905 
Оки-доки.
Есть БД. Есть табличка Users.
У User'а, есть:
Id - то что бд дает
InnerId - Id пользователя в системе вцелом, нужно чтобы значения этого столбца, шли друг за другом, без дырок, потому что другой сервис имеет следующую логику: Начиная с 1 и пока не получит 404 - запрашивает нужное ему от пользоватля, при 404 - начинает с самого начала, считая, что весь список прошел.
IntegrationId - то же что и InnerId , но для сторонних систем, используется хитрый JSONrpc-протокол, запрашивается другое, но логика такая же.

Собственно, эти два InnerId и IntegrationId - все подсирают. Потому что вставка нового пользователя, по этим правилам - это проверка на дырки и сдвигание всех пользователей, чтобы дырки не было. Удаление в системе должно быть, потому решить проблему просто помечанием как "удаленный" - нельзя. Менять логику для InnerId еще бы можно было, т.к. внутренняя хуяня, в принципе можно убедить как-то нормально сделать, но вот IntegrationId - это стороннее ПО, которое охуевшим стандартом придумано, и его обязательно поддерживать, а хуи оттуда - покладут болт на мои визги, что медленно выходит.
Я в душе не ебу, как сделать вот это вот требование с одной стороны - правильно, с другой, чтобы оно не тормазило все остальное. Локать всю таблицу при каждой вставке-удалении, ну как-то такое.
Сначала, чтобы чуть ускориться - я решил отказаться от EF. Помогло, но не как-то сильно. Потом - я решил, что добавлю триггеры и хранимки. Уже чуть лучше помогло, но тоже хуяня на самом деле.
Пока что единственное что я придумал, это вообще в базу не лазить лишний раз, держать все это в памяти, а раз в условную минуту - отправлять состояние. Но пиздец же какой-то. Кажется, что я какую-то хуйню делаю. Да. Так оно - более-менее нормально работает, но чет хуйня же какая-то.

Предложите мне нормально решение-то. Я заебался уже. Месяц ебусь. Начинаю чувствовать себя профнепригодным.
Аноним 31/01/23 Втр 22:43:24 #359 №2594941 
>>2594905
InnerId используется как индекс, можно вкорячить логику отдачи пользователей отсортированных по возрастанию, а сам айди удалить нахой.
IntegrationId использовать как обычный айди, обычный айди удалить.
Аноним 31/01/23 Втр 22:46:09 #360 №2594945 
>>2594905
А вообще я бы мамкиным архитекторам, которые придумывают такую ересь, покупал билет домой в индию.
Хотя у меня в тиме ребята, в целом адекватные, тоже часто норовят плдобную хуйню куда-нибудь вкорячить.
Аноним 31/01/23 Втр 22:48:22 #361 №2594948 
>>2594941
В смысле просто через yield return отдавать пользователей по очереди, игнорируя значение innerid
Аноним 01/02/23 Срд 03:01:35 #362 №2595102 
>>2594905
При удалении заменить удалённого на последнего в таблице, последнего удалить.
Аноним 01/02/23 Срд 08:47:06 #363 №2595179 
Что потенциально может быть не так с пдф файлом, что гугл драйв отказывается его через запрос принимать? Программы его открывают, попробовал из него картинку вытащить и сохранить ее как пдф и все норм, гугл ее принимает
Аноним 01/02/23 Срд 09:59:35 #364 №2595218 
Это опять я с вопросами про вопросы на собес. Какие advanced level вопросы задают по шарпам и дотнету?
Завтра собес, я весь метанит и мсдн перечитал, но жутко нервую.
Аноним 01/02/23 Срд 11:18:37 #365 №2595257 
>>2585733
vs code + аддон c#
Аноним 01/02/23 Срд 11:38:04 #366 №2595273 
А студия может что-то кешировать и не собирать проект полностью?

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

Я конечно видел кнопку "перестроить решение", но я думал, что студии хватит ума перестроить тот проект, в котором я внес изменения.
Аноним 01/02/23 Срд 11:44:46 #367 №2595280 
Стикер
>>2595218
Не знал, что метанит - advanced level.
Аноним 01/02/23 Срд 11:46:35 #368 №2595285 
>>2595218
>но жутко нервую.
А чего нервничать? Завтра и узнаешь какие будут вопросы. Как будто у тебя первое и последнее собеседование.
Аноним 01/02/23 Срд 13:37:47 #369 №2595390 
>>2595218
У меня сегодня был собес. Спрашивали про дженерики, я не смог толком ответить сказал, мол, это классы, которые помимо аргументов конструктора принимают также аргументы типа и работают с этими типами, ещё спросили про await, я переволновался и сказал, что это просто ожидание выполнения функции, про возвращение управления не сказал. Ещё не смог толком объяснить суть внедрения зависимостей хотя использовал его в тестовом, также спросили устройство листа, и тут я завалил. Впрочем меня все равно пригласили на тестовую неделю и даже предложили больше, чем я просил изначально
Аноним 01/02/23 Срд 13:57:24 #370 №2595429 
>>2595390
Поимел немножко удачи. Молодец.
Аноним 01/02/23 Срд 14:29:28 #371 №2595495 
>>2595218
Прочитай справочник Абрахами (можно краткий). Теперь ты самый умный.
Аноним 01/02/23 Срд 14:48:09 #372 №2595544 
>>2595495
Не гуглится
Аноним 01/02/23 Срд 15:37:32 #373 №2595628 
>>2595544
Джозеф Албахари.
По C# 9.0 есть Полный справочник и краткий. В первом около 1000 страниц, во втором 200.
Аноним 01/02/23 Срд 17:11:33 #374 №2595784 
Бля, чо .net совсем сдох?

Разморозил профиль на линкедине. За 2 недели написали всего 4 человека. Из них 3 это какой-то скам от индусов. И одно предложение фуллстаком в Европе (удаленно ясен хер) за 3к евро пиздец охуевшие собаки.

Ладно бы просматривали, видели красные флажки и уходили, сука, даже просмотров мало. 1-2 в день.
Аноним 01/02/23 Срд 19:57:43 #375 №2596034 
.jpg
>>2595218
> advanced level
Ну. Если бы я проводил такое собеседование, то вопросы были бы в духе:
Каков размер строки "12345"?

Имеем следующий код:
'
void Foo1()
{
IEnumerable<int> data = new int[] {1,2,3,4,5};
Print(data);
}
void Foo2()
{
IEnumerable<int> data = new List<int>{1,2,3,4,5};
Print(data);
}
void Print(IEnumberable<int> data)
{
foreach(var it in data)
Console.WriteLine(it);
}
'
Чем будет отличаться выполнение Foo1 от Foo2?

Имеем следующий код:
public static class A
{
public static int a = 0;
public static void Run()
{
for(int i = 0; i < 100; i++)
i++
}
}
...
(new Thread((_)=>A.Run())).Run();
(new Thread((_)=>A.Run())).Run();
Thread.Yield();
Console.WriteLine(A.a);

Что выведется в конcоль? Почему?

Какие принципы SOLID нарушает Stream?

Как сделать свой класс, который можно await'ить?

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

Какой-то еблан включил trace в конфиге для прода. Место на сервере заканчивается. Какие действия предпримите и какие меры будут приняты, чтобы подобного не повторилось?

Нужно производить локализацию ответов бекенда, на основе геолокации запроса. Как будете это делать?
Аноним 01/02/23 Срд 20:43:17 #376 №2596061 
>>2596034
> (new Thread((_)=>A.Run())).Run();
(new Thread((_)=>A.Run())).Start() конечно.
Без подсказок - хуево(((
Аноним 01/02/23 Срд 21:56:41 #377 №2596147 
>>2596034
>Какие действия предпримите и какие меры будут приняты, чтобы подобного не повторилось?
И каков правильный ответ? Роллинг логов не решение этой проблемы, а уволить еблана или закупить дисков мы не имеем полномочий. А настучать по кумполу поучительно, но тупиковый путь
Аноним 01/02/23 Срд 22:18:16 #378 №2596157 
>>2596034
Как хорошо что ты не проводишь собесы. Одно ебланство какое-то.
Аноним 01/02/23 Срд 22:44:08 #379 №2596178 
.jpg
>>2596147
Вопрос же на то чтобы посмотреть как будет рассуждать кандидат. Имеет ли он вообще опыт в таких задачах. Какой уровень инфраструктуры был у него не прошлых местах работы и че он там делал. Потому что может быть он там 5 лет жсоны гонял, а грейды ему давали за "лояльность", а не потому что как специалист рос.
Из того как решать, по очевидным подходам: поднять запасной сервер, в котором такой хуйни нет, и перенаправить трафик туда, пока чиним тот что засран.
Из мер, тоже очевидных - пайплайн переработать, репы разделить, чтобы конфиги лежали отдельно от основного кода, политики пересмотреть, чтобы кто угодно не мог лазить и править конфиги.
Хороший мидл - уже сталкивался с этим, и как минимум проговорить то что дядьки вокруг делали - может.
>>2596157
Обычные вопросы для мидла+, стремящегося к сеньеру. Если чел на вопросе про строки, потоки посыпался - уже можно скипать, это джун-самозванец. Дальше - оцениваем какие проблемы решал в реальной жизни, как рассуждает, какие решения предлагает и либо повышаем планку начального грейда, либо понижаем.
Аноним 02/02/23 Чтв 00:32:10 #380 №2596286 
>>2596034
>Каков размер строки "12345"?
Зависит от кодировки 5-10байт, но вроде для энтих буков также само.

>Чем будет отличаться выполнение Foo1 от Foo2?
Скоростью?
Я у себя в методе сохранения истории действия требую массив, чтобы был доступ к length и чтобы компактнее было.
Аноним 02/02/23 Чтв 00:38:33 #381 №2596291 
>>2596034
>Как сделать свой класс, который можно await'ить?
Класс или метод?
Аноним 02/02/23 Чтв 01:16:13 #382 №2596302 
>>2596291
видимо речь идет про реализацию INotifyCompletion
Аноним 02/02/23 Чтв 01:21:19 #383 №2596305 
>>2596286
>Зависит от кодировки 5-10байт, но вроде для энтих буков также само
у дотнета utf-16, на символ 2 байта + хидер конечно.
Аноним 02/02/23 Чтв 01:48:16 #384 №2596319 
>>2595179
Понял, что не так.
Гугл не хочет запросом принимать пдф файл версии 1.3.
Кто знает, есть ли способ обновить до 1.4 хотя бы И нет, изменить заголовок не сработает
Аноним 02/02/23 Чтв 08:29:53 #385 №2596392 
>>2596319
Пересохранить документ программно мс-офисом или еще какой залупой?
Аноним 02/02/23 Чтв 08:32:51 #386 №2596393 
>>2596392
да походу придется гхостскрипт ставить
Аноним 02/02/23 Чтв 09:50:15 #387 №2596417 
>>2596393
Какой еще скрипт? Из шарпокода это сделай. Будь мужиком!
Аноним 02/02/23 Чтв 10:22:12 #388 №2596438 
>>2582351 (OP)
Антончик, подскажи по ключам для вижлы.
Например у меня на офисном компе стоит Visual Studio Enterprise. Я например знаю ключ продукта и это единый ключ для всех установок в офисе.

Что в теории произойдет если я дома на своем компе установлю такую же и попытаюсь активировать её этим ключом?
Смогу ли я вообще её так активировать?
Запалит ли меня работодатель? (по количеству установок например или еще как сможет посмотреть)
Сможет ли он обрубить ее, так что вижла в тыкву превратится?
Аноним 02/02/23 Чтв 10:30:15 #389 №2596460 
>>2596034
> i++
Может всё-таки a++?
Аноним 02/02/23 Чтв 11:09:39 #390 №2596528 
>>2596417
Да ебать, на написание этого уйдет больше времени и сил, чем на весь остальной проект
Аноним 02/02/23 Чтв 11:31:05 #391 №2596548 
>>2596438
Ну наверно по количеству установок, когда очередному сотруднику будут выдавать ключ. Но тут вообще вопрос к подходу твоей компании. Обычно никто ключи не раздает офисному быдлу направо и налево, для этого есть специальная должность, идет учет кому выдали ключ, кому нет — именно по той причине, что есть такие гниды навроде тебя, которые пользуются чужим доверием. Т.е. здесь речь идет о какой-то микроконторке, которая купила ключ на авито и ей вообще похуй на последствия. В таких микроконторках можно пойти к боссу и попросить для работы.

Чел ... скачай с торрента, в чем отличие? Ты же ведь типа все равно нарушаешь закон, пользуешься втихушную пока никто не спалил — это ровно то, чем является торрент версия.
Или ты думаешь купленный интерпрайз золотом помазан?

Если у тебя ключ установлен неофициально, то отличий нет от спизженной.
Аноним 02/02/23 Чтв 11:34:04 #392 №2596552 
>>2596528
Но блять, я так не люблю ебаться с гостшарпом и остальной хуйней, это надо будет дополнительно к приложению устанавливать его, нужно сохранять файл, читать из файла, удалять файл, эх.
Аноним 02/02/23 Чтв 11:42:38 #393 №2596562 
>>2596548
>есть специальная должность, идет учет кому выдали ключ, кому нет
Классическая история, когда новенький добродушный системный администратор по дружбе дает офисному сотруднику ключ, а тот раздает его бабушке, теще, жене, собаке. Через неделю (в зависимости от размера компании) всё вскрывается, и сисадминчигу дают пизды старшие - так он с кочергой в жопе проходит обряд посвящения, приходя к единственно верной мысли, что среди офисного отребья друзей и товарищей быть не может.

Ну а если сиадминчек раздает ключи вообще всем, не установив, так сказать, эмоциональную связь с каким-то конкретным индивидом-крысой, то такого сисадминчега надо увольнять вовсе. Если только в компании все эти ключи - пыль в глаза.
Аноним 02/02/23 Чтв 11:45:59 #394 №2596567 
>>2596562
>все эти ключи - НЕ пыль в глаза*
Аноним 02/02/23 Чтв 13:18:25 #395 №2596688 
>>2596548
>>2596562
Воу-воу. Ну че сразу в крысу-то.
Никто мне ключ не доверял, я его честно спиздил.
Аноним 02/02/23 Чтв 14:06:11 #396 №2596754 
>>2596688
Ну тогда от этого ключа тебе ни тепло не холодно. Можешь так же за копейки купить ключик на авито. Проеб заметят когда захотят зарегистрировоать нового юзера, а свободных не окажется или будет меньше предполагаемого.

Могут ли превратить в тыкву? Хз как в вижуал студи, но вероятно сбрасывается для всех и регистрируется заново, но уже по уму сисадмин собственноручно регистрирует и ведет отчетность.
Аноним 02/02/23 Чтв 19:03:52 #397 №2597217 
Если какой-то цикл 100500 раз подряд меняет значение переменной типа int, но по факту уникальное значение меняется всего несколько раз или вообще не меняется, то уместно ли делать проверку переменной по типу "если текущее значение переменной != новому значению, то присвоить новое, иначе пропустить", или нет ничего зазорного в спаме переменной?
Аноним 02/02/23 Чтв 19:17:46 #398 №2597239 
>>2597217
Компилятор сам за тебя сделает лучше.
Аноним 02/02/23 Чтв 19:46:20 #399 №2597280 
>>2597217
Нет это херь, братиш. Одно присвоение буквально одна реальная инструкция проца, а проверка условия и присовение это целых три инструкции из-за чего станет немного тормознее.

Тут правило орков во все поля: красное едет быстрее чем меньше код тем быстрее он работает.
Аноним 02/02/23 Чтв 19:49:03 #400 №2597283 
Привет всем! Решил я углубится в изучение программирования, а именно в С# для начала. Посоветовали мне канал Simple Code, а также руководство от Metanit. Возможно, Вы можете дать годные советы начинающим, а именно какие руководства, книги или каналы лучше всего глянуть для полного понимания той или иной темы?
И ещё такой вопрос: Не поздно ли я начал изучать в 17 лет? А то вечно этот вопрос гуляет в голове и не даёт покоя. Всех благодарю за ответы
Аноним 02/02/23 Чтв 19:51:25 #401 №2597288 
>>2597283
>Не поздно ли я начал изучать в 17 лет?
Это не смешно. Хватит троллить.
Аноним 02/02/23 Чтв 22:07:13 #402 №2597448 
>>2597283
>Не поздно ли я начал изучать в 17 лет
Самое время наоборот, к 20 лет уже будешь иметь 3 года, по сути мидл.
Аноним 02/02/23 Чтв 22:13:48 #403 №2597461 
.png
Назрел сложный вопрос.
Чем на шарпе можно тестировать контракты апи?
Я уже заебался. Привыкли, блядь, люди делать монолиты, что если что-то сломаешь, то везде пиздец. Потому, если у них собирается - ну и похуй, я же свою работу сделал)))
Собственно. Я, могу поступить как крыса, начать стучать управленцам, но понимая как думают управленцы - они забюрократизируют все это дело и, скорее всего назначат меня следить, чтобы апи чужое не ломалось.
Очевидный заеб и я ебал это в сраку.
Потому, первое что хочу попробовать - это протолкнуть идею с тестами апида, блядь, я с трудом юнит-тесты протолкнул, пиздец сколько воевать пришлось, но теперь полегче жить стало, когда детские ошибки сразу фиксятся, и можно джунов посадить реально что-то полезное для других делать, а не придумывать им работу, чтобы УЧИЛИСЬ. Но очевидно же, что если их нужно будет вручную постоянно делать - все забьют. Потому - жду предложений чего-то в духе Spring Cloud Contract, но для шарпов. Можно конечно надрочить постманом и проганять так. Но ХЗ, не думаю что те кто забывают сами проверить, что их изменения ничего не сломали - будут постманом тестировать это.
Аноним 03/02/23 Птн 07:40:46 #404 №2597679 
2556.png
С удивлением заметил, что индусософт продолжает тянуть поддержку очень старого .Net 3.5 и там с ним рядышком четвертый притаился. Это означает, что уютный десктоп можно пилить вполне комфортно на древнейших версиях .Net'a и не скакать бесконечно по версиям Net Core/Net Standard каждые пару лет, порожденных исключительно больной фантазией маркетологов. С - стабильность. Стал еще более убежденным старовером.

Единственно что не радует - неразумные писатели библиотек зачем-то завышают требования к своим поделиям. Нахуя они это делают и главное зачем непонятно.
Аноним 03/02/23 Птн 09:14:29 #405 №2597709 
>>2597283
ulearn.me
Аноним 03/02/23 Птн 11:52:31 #406 №2597822 
>>2597679
Затем что никому не в радость поддерживать устаревшее
Аноним 03/02/23 Птн 12:40:19 #407 №2597863 
>>2597822
>поддерживать устаревшее
Мне почему-то кажется, что бесконечная гонка за новым куда более изматывающее занятие чем фиксация версии либы на разумном пределе и оставление ее в покое.

Вокруг того же .Net 3.5 давно нет толпы хипстеров с шилом в жопе и тягой бесконечно улучшать все и вся, и знаешь, жить как-то спокойне. Если ты нашел на гитхабе что-то что под него работает, то это будет просто работать годами, а не ебать мозг обновлениями, сломаными апи, апдейтами безопасности, сетевыми холиварами призывающими перейти на что-то другое, вбросами маркетологов/евангелистов нахваливающих всю эту парашу и прочим суетливым булшитом. Просто работает и все! Охуенчик же. Есть конечно обратная сторона в виде 150 незакрытых багов которые не починят никогда. С ними можно жить ведь они тоже навсегда, а не каждый раз новые с каждым релизом.
Аноним 03/02/23 Птн 12:47:47 #408 №2597870 
>>2597863
Именно что кажется
Новые фичи дают возможность переписать проще и оптимизировать.
Аноним 03/02/23 Птн 13:36:16 #409 №2597939 
>>2597870
>Новые фичи дают возможность переписать проще и оптимизировать.
Но по факту ты тратишь столько же времени, потому что частота переписывания увеличивается.

Насчет оптимизации тоже спорно, ибо оптимизируют в одном месте, но в то же время пытаются сделать некоторые вещи проще или гибче в использовании, что наоборот ухудшает производительность. Тот же WPF никак не проще винформсов, даже из коробки — из-за попытки быть гибким и универсальным одновременно. Там одними только словарями ресурсов можно похерить все сбереженные миллисекундочки.
Аноним 03/02/23 Птн 13:43:39 #410 №2597943 
>>2597679
>Стал еще более убежденным старовером.
Это возраст чел. Но я порой с грустью вспоминаю эти "бесполезные" метания с молодой горящей жопой, когда время казалось бесконечным. А с попытками все рационализировать приходит застой и эффективной деятельности становится не больше, чем раньше.
Аноним 03/02/23 Птн 14:16:44 #411 №2597969 
>>2597939
>Но по факту ты тратишь столько же времени, потому что частота переписывания увеличивается
Не увеличивается, никто ведь не заставляет переписывать.
>>2597939
>Тот же WPF никак не проще винформсов, даже из коробки — из-за попытки быть гибким и универсальным одновременно.
Он гораздо проще. Просто попробуй сделать интерфейс со всплывающими меню, переключением страниц и анимациями и там и там, а потом сравни затраченное время.
Аноним 03/02/23 Птн 14:40:15 #412 №2597982 
>>2597863
>Есть конечно обратная сторона в виде 150 незакрытых багов которые не починят никогда.
Ты забываешь еще один ньюанс - отсутствие поддержки для современных решений. Возникнет у тебя например необходимость сделать интеграцию с каким-нибудь сервисом по grpc, и соснешь ты со своим 3.5 с проглотом.
Аноним 03/02/23 Птн 14:53:01 #413 №2597995 
020320231449JRscbunfxBdevenv.png
Подскажи в каких случаях будет копирование стуктуры. Как это обнаружить? Можно ли его избежать?
Аноним 03/02/23 Птн 15:33:38 #414 №2598021 
>>2597969
>потом сравни затраченное время
Затраченное время для кого? Для машины? Еще раз перечитай мой текст, там написано, что в новых обновлениях ради удобства пользователя создают создают универсальный и гибкий инструмент, который своей массивностью перекрывает все оптимизации, поэтому оптимизации не стоит воспринимать всерьез.

Что касается затраченного времени пользователя, то на старых версиях просто не делают то, что геморно.
Аноним 03/02/23 Птн 15:37:58 #415 №2598024 
>>2598021
>Затраченное время для кого?
для программиста. На WPF элементарно делают вещи, которые на формсах ты будешь неделю пилить и то получится хрень. ну да, формсы работают быстрее, но я к этому времени уже получу деньги и уеду в закат, а ты будешь продолжать пердолиться с OnPaint
Аноним 03/02/23 Птн 15:49:06 #416 №2598033 
>>2597995
>Как это обнаружить?
круто знать теорию, но ее никто!!! не знает. всякие там тулзы разве что но то такое

>Можно ли его избежать?
ref (и в параметрах методов и локал), in, readonly
Аноним 03/02/23 Птн 16:11:58 #417 №2598054 
>>2597995
>Подскажи в каких случаях будет копирование стуктуры.
Ну когда ты просто обращаешься к свойству структуры, то ты получаешь значение этого свойства. Но вот если ты захочешь передавать методу структуру целиком, или же целиком возвращать, то вот тут уже начинаются вопросики, ибо будут передаваться все N значений структуры.

Если ты передашь методу структуру с десятью свойствами, а ПО ФАКТУ метод будет юзать от силы 2 свойства — вот это хуета какая-то. Эффективнее передавать только эти два свойства.
А если ты используешь 100% переданного, то вроде это не пробелма.

А так бывают структуры из двух свойств, к примеру Size, и даже есть совсем сложные типа Rect, где есть как минимум четыре свойства. Но все они используются чтобы избавиться от так называемых "телескопических" эффектов при инициализации. Их никто не передает взад-вперед. Вот надо построить прямоугольник, ты передаешь структуру Rect (из ширины, высоты, x, y) и все 4 свойства будут задействованы.

Короче, если ты уверен что данные всей твоей структуры будут использованы на 100%, то проблем нет.
Аноним 03/02/23 Птн 19:11:22 #418 №2598252 
Народ, кто-то знает, как создать lic файл?
Аноним 03/02/23 Птн 19:11:54 #419 №2598254 
Как создать lic файл, кто-то может подсказать?
Аноним 03/02/23 Птн 19:26:06 #420 №2598263 
>>2598254
В текстовом редакторе.
Аноним 03/02/23 Птн 19:43:02 #421 №2598277 
>>2598263
А смысл создавать lic файл Тогда, почему не оставляют текстовый?
Аноним 03/02/23 Птн 20:02:48 #422 №2598289 
>>2598277
Формат — это отличительный знак по сути, потому что имя может быть каким угодно.
Как по твоему программа будет искать файл и вообще распознавать каким образом его читать?
Аноним 03/02/23 Птн 23:16:07 #423 №2598470 
>>2597995
https://devblogs.microsoft.com/premier-developer/avoiding-struct-and-readonly-reference-performance-pitfalls-with-errorprone-net/

вот так все плохо. расширение давно не обновлялось в нюгет
со студией 2022 вообще хз
а прочтение статьи оставляет желание забить на этот вопрос
Аноним 04/02/23 Суб 10:54:58 #424 №2598636 
>>2597863
>апдейтами безопасности
А потом тебе нужно пройти аудит в СБ ИТ для релиза приложения. И ты сосешь хуи.

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

Мне хватило один раз пол года обновлять приложение и руками переписывать старые либы под новые версии чтобы перестать быть старовером. Приключение называется "прохождение аудита безопасности приложения" где тебя индус, мексиканец и китаец ебут за кучу уязвимостей
Аноним 04/02/23 Суб 13:34:04 #425 №2598758 
А как при MVVM реализовать глобальные данные? К примеру если я хочу реализовать галочку "Больше не показывать это окно". А это окно всплывает в десятках экземпляров вьюмоделей, внутри которых есть свои вьюмодели.

Через биндинг получается очень уж геморройный мицелий привязок. Событием тоже срать как-то не комильфо.
Аноним 04/02/23 Суб 15:45:57 #426 №2598891 
>>2598758
Запихнул в базовую модель. У каждой дочерней вьюмодели пришлось таки реализовать свойство Parent и по этим парентам добираюсь до базы и меняю оригинал.

Более простого подхода без гемора я не нашел. Еще бы автоматом родитель назначался.
Аноним 04/02/23 Суб 17:32:08 #427 №2599064 
>>2598891
ну у тебя же пет проект. там свобода и можно перешагнуть через каноны

Делать все по науке слишком много гемора. Потому если наука не требуется, то можно мудрить.

у меня вот в таких вещах везде ходит context где помимо очевидного шарится словарик шаред вьюмоделей ака контроллеры. Типичная проблема - вьюмодель это god object и хочется разделить собственно данные для вида и команды. Особенно если одна команда и где то в меню и на статусбаре она же. И биндить такое жесть. А так везде доступен этот словарик и можно прямо биндить на него. Набор этих "контроллеров" существует в рамках какого то рутового Workspace, коих может быть сколько угодно ибо определяют регион, а не являются одним на весь проект.

сложно сказать удобно ли, ведь теперь после того как такой контроллер что то поменял он должен всех уведомить, что добавляет уже другого гемора.
Аноним 04/02/23 Суб 17:40:02 #428 №2599075 
>>2598758
Называется настройки приложения, ты можешь сохранять в выделеном хранилище любые данные приложения и получать к ним доступ путем инъекции зависимости. При внедрении тебе соберет объект настроек и выдаст его.
Аноним 04/02/23 Суб 18:17:30 #429 №2599118 
>>2598758
Почитай про внедрение зависимостей и IOptions
Аноним 04/02/23 Суб 20:33:57 #430 №2599231 
>>2598758
> К примеру если я хочу реализовать галочку "Больше не показывать это окно".
Делаешь статичный класс GlobalApplicationSettings
В нем:
public Dictionary<string, bool> ShowWindow { get; } = new();

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

Не еби мозги не себе не людям. Делай максимально просто. Ты в любом случае не будешь свои окошки переиспользовать.
Аноним 04/02/23 Суб 20:34:40 #431 №2599232 
>>2599231
Да. У этого класса - в конструкторе - делаешь инициализацию настроек из файлика.
Аноним 04/02/23 Суб 20:49:43 #432 №2599243 
Вообще. Я чет стал за 10 лет коммерческой разработки - каким-то хуйлом, если честно. Все чаще ловлю себя на мысли, что большая часть "правил", это какой-то карго-культ.
Типа блин. Камон. Хороший код, это простой-понятный код, который решает задачу здесь и сейчас и который можно выкинуть нахуй, как только задача поменяется.
Такие вот дела. Да. А делая сложную хуйню с внедрением зависимостей, хуе-мое, регистрацией всего этого дела, выделяя классы под опции к твоей хуйн, ты потом неделю говно выгребать будешь, когда тот код что был нужен станет неактуальным.
Аноним 04/02/23 Суб 23:11:15 #433 №2599409 
>>2599243
дай угадаю, у тебя в проекте есть папочки Енум,Моделс,Хелперч и т.д., где лежить разнешестный кал?
Аноним 05/02/23 Вск 04:10:58 #434 №2599509 
Есть ли сейчас работа для джуна в C# сфере?
Или лучше в Java Spring вкатываться?

Или как везде - тухло?
Аноним 05/02/23 Вск 04:19:49 #435 №2599512 
>>2599509
Везде дохуя работы для джуна, вкатывайся во что хочешь.
Аноним 05/02/23 Вск 04:22:21 #436 №2599513 
>>2599512
А что лучше учить - C# - и потом в .net, или Java Spring?
Где перспективы лучше?
Аноним 05/02/23 Вск 04:23:16 #437 №2599514 
>>2599513
Одинаковые перспективы.
Аноним 05/02/23 Вск 04:24:14 #438 №2599515 
>>2599513
К тому же ты уже решил всё, раз спрашиваешь здесь, но не в треде про джаву.
Аноним 05/02/23 Вск 04:26:35 #439 №2599516 
>>2599515
Да я то в Android-разработку иду - а там говорят что работы нет, то во фронтенд - и там тоже с работой вроде туго.
Решил на C# игры делать, а заодно и .net выучить - но вдруг надо Java Spring зубрить или еще куда перекатываться? перекатывайся в сантехники
Аноним 05/02/23 Вск 04:34:51 #440 №2599518 
>>2599516
> Да я то в Android-разработку иду - а там говорят что работы нет
Работы мало, да и то говно.
> фронтенд - и там тоже с работой вроде туго.
Там норм, но большая конкуренция.
> Решил на C# игры делать
Примерно как с андроидом.
> заодно и .net выучить
Учи ASP.NET Core. Бэкенд - самое нормальное направление.
> вдруг надо Java Spring зубрить или еще куда перекатываться
Если мало времени, советую поскорее выбрать что-то одно, а не скакать по десяткам сфер, а то рили вкатишься в сантехники. Если времени овердохуя, можешь посмотреть всё, повыбирать, вдруг в итоге вообще вкатишься в нейронки.
Аноним 05/02/23 Вск 04:40:19 #441 №2599521 
>>2599518
В нейронки тоже пробовал вкатиться - но не понравилось.
Ладно, буду пробовать ASP.NET Core.
Спасибо за совет, анон.
Аноним 05/02/23 Вск 04:44:49 #442 №2599523 
>>2599243
>А делая сложную хуйню с внедрением зависимостей
Никогда не понимал, что такого сожного в DI. Одна из самых простых и удобных концепций.
Аноним 05/02/23 Вск 07:50:30 #443 №2599545 
>>2599523
Сложность DI во много вокруг того что на него накручивают: регистрация дочерних зависимостей, детект отказов и логика восстановления, подмены зависимостей по условиям - вот это вот все знатно выносит моск. А так есть патерн еще проще чем DI, а именно сервис локатор. Но его сейчас предали анафеме за то он принципы солид нарушает.
Аноним 05/02/23 Вск 08:04:42 #444 №2599547 
>>2599523
При чем тут сложность DI как концепции? Сложность ретуалов вокруг него.
Раньше я делал как:
class A<B> where B : IB, new()
И норм, жил как-то. Получал зависимость снаружи, но при этом мне не нужно было ебаться с тем, чтобы прописать его куда надо, не нужно было в рантайме ловить хуйню, что зависимость не прокинулась, покрывать тестами как раз внедрение нужных зависимостей и прочей хуйней заниматься.

Крочое, удобно было.
Сейчас - модный дорч, что мы вообще нигде new сами не используем - бесит, больше карго риуталов делать приходится. При этом, по факту, ты все равно НИКОГДА, не будешь подкитывать другую реализацию, делаешь интерфейс, только чтобы мокнуть его в тестах. Все.
Короче. Я только проснулся. Хуй знает понятно ли мое негодование. Но суть такая. Не DI сложен, а пайплайн работы вокруг него.
Аноним 05/02/23 Вск 09:37:52 #445 №2599600 
>>2599547
раньше ты писал фабричный код создания объектов вручную
теперь DI пишет его за тебя
в чем сложность? а нет ее.

ну да бывают моменты когда хочется подменить реализацию или враппер какой, а контейнер мелких слишком примитивен для этого.
но это ж проблема конкретной реализации.
Аноним 05/02/23 Вск 10:07:05 #446 №2599631 
>>2599600
> в чем сложность?
В том что я как ебанат, делая новый класс, должен пиздовать в файлик Startup.cs/Program.cs и вписывать каждый раз: services.AddScoped, services.AddSingleton, дополнительно - пиздовать в файлик appsettings.json и добавлять там секию с настроичками, делать MyClassOptions и т.д. Просто потому что УУУУУ, ТАК НАДА. Кому надо - непонятно.

Вот допустим. Мне надо было недавно добавить поле которое должно браться из конкретного файла, который должен лежать в конкретной папочки к ответу определенному.
Как я должен ПО НАУКЕ СДЕЛАТЬ:
interface IMyFiledProvider
{
puiblic string FileContent { get; }
}

public class FiledProviderOptions
{
public string Path { get; set; }
}

public class FiledProvider : IMyFiledProvider
{
public FiledProvider(FiledProviderOptions options)
{
FileContent = File.ReadAllText(options.Path);
}
public string FileContent { get; }
}

Пойти, зарегистрировать эту хуйню. Потом не забыть добавить в конструктор того класса, который генерирует ответ IMyFiledProvider и только потом добавить поле.
Охуенно? Охуенно!
Подумай, почему я не стал так делать.
Аноним 05/02/23 Вск 11:12:26 #447 №2599671 
>>2599631
>делая новый класс, должен пиздовать в файлик Startup.cs/Program.cs
далеко не каждый класс так то, а только те, которые нужны чтобы их где то резолвили

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

> ПО НАУКЕ СДЕЛАТЬ:
по науке ты должен сделать интефрейс IВотЭтоПровайдер
и уже в имени реализации будет указано откуда чего как.

и да, сходить зарегестрировать где это нужно. Потому что без регистрации ты будешь сам писать new Реализация(options), а потом выделишь все это в фабричные методы, то есть просто будешь делать то, что за тебя генерит контейнер.

сначала приходит понимание что СТОИТ потратить время на структуру где чего лежит чтобы все было чистенько и не было DRY

А потом и понимание что не стоит писать фабрики ручками.

>Подумай, почему я не стал так делать.
молодость и неопытность, еще не поел говна "и так сойдет все равно менять ничего больше не буду", а потом пришлось менять.
А как поешь, то даже в мелких проектах будет у тебя сразу подобие порядка.
Аноним 05/02/23 Вск 11:38:52 #448 №2599685 
>>2582351 (OP)
Гайз, опишите плез кейсы, когда CQRS + Mediatr полезно использовать.
Аноним 05/02/23 Вск 11:57:37 #449 №2599693 
>>2599671
> и да, сходить зарегестрировать где это нужно. Потому что без регистрации ты будешь сам писать new Реализация(options), а потом выделишь все это в фабричные методы, то есть просто будешь делать то, что за тебя генерит контейнер
Эх. Вот я про это говно и говорю.

И да. Я, как нормальный человек, на самом деле давно сделал: ServiceAttribute, и метод расширения RegisterServicesFromAssembly. Но все равно буду гореть. Потому что ебатория какая-то по дефолту. Вот когда сделают нормально, чтобы не нужно было свой атрибут и метод расширения делать - тогда и успокоюсь.

> молодость и неопытность
10 лет коммерческой разработки, чел.
Аноним 05/02/23 Вск 12:02:54 #450 №2599699 
ну сделал и сделал, что тут такого
многие либы у себя точно так же позволяют сделать "найди все сам в сборках и зарегай". суть от этого не меняется же.

>>2599693
>10 лет коммерческой разработки, чел.
я ж о том и говорю. "давай давай, некогда думать как лучше". не искусство, а ремесло.
Аноним 05/02/23 Вск 12:09:49 #451 №2599704 
>>2599545
>а то он принципы солид нарушает
Скорее за нарушение принципа инкапсуляции.
Аноним 05/02/23 Вск 12:11:40 #452 №2599706 
>>2599699
Так нифига ж не лучше. Лучше, это когда я могу - просто выкинуть не нужный класс, и нихуя не сломается. Тут - я выкинул один класс, пиздуй разрегистрировать, пиздуй ту хуйню остальную удаляй. Куча ебучих ритуалов, из-за тупой реализации DI.
При этом, сделать самому нормальный DI - намного проще, но ебучие джуны же увидев свою реализацию контейнеров - обосрутся и приходится уже на уровне выше меньше выебываться, чтобы остальная команда - не страдала.

Эх. Вот раньше как было охуенно. Берем ADO, делаем папочку sql, свой DI нормальный, три слоя и погнали. Не. Теперь делаем говно, потому что майки учат говно, а джуны - по урокам майков учатся. Грустно короче. Да.
Аноним 05/02/23 Вск 12:16:01 #453 №2599708 
>>2599547
>При этом, по факту, ты все равно НИКОГДА, не будешь подкитывать другую реализацию, делаешь интерфейс
Схуя ли? Банальный пример - паттерн Стратегия. Запихиваешь в контейнер все реализации одного интерфейса, а потом в контексте резолвишь нужную.
Аноним 05/02/23 Вск 12:18:56 #454 №2599711 
>>2599708
И зачем делать это через DI? Чтобы что? Или ты в стратегию дохуилиард зависимостей просовываешь? Ну просовывай их прямо в контексте.
Аноним 05/02/23 Вск 13:02:58 #455 №2599733 
>>2599711
>Ну просовывай их прямо в контексте.
А нахуя роутеру стратегии знать что там и как нужно самой стратегии?
Тебе хороший пример скинули а ты все копротивляешься

Раньше я думал, что лютый сечас тренд "СЛОЖНА СЛОЖНА ХАЧУ прОЩе ЛАПШУ ТЯНУТЬ" идет от джунов, но теперь вижу, что тут еще второй фронт пожилых шлеп, которые повторяют за умными дядями, но не понимают зачем и им пришло "озарение" - "не я тупой, а они"
Аноним 05/02/23 Вск 13:04:00 #456 №2599735 
16754540973740.jpg
>>2599706
> Берем ADO, делаем папочку sql, свой DI нормальный
Аноним 05/02/23 Вск 13:42:46 #457 №2599803 
Почему C# в РФ не ценится? Вижу кучу вакансий на го с знанием языка за 250к и вакансии на сишарпе с ебейшим пулом навыков+охуенным знанием дотнета за 100к.
Аноним 05/02/23 Вск 14:35:58 #458 №2599853 
>>2599547
Причём тут дженерик и DI. Как ты собрался условно настройки приложения таким образом передавать или реализации интерфейса? В каждом месте руками указывать класс реализации и потом руками же менять?

Есть ощущение что ты 10 лет писал говнокод и вообще не понимаешь термины которые используются
Аноним 05/02/23 Вск 14:38:21 #459 №2599856 
>>2599631
>В том что я как ебанат, делая новый класс, должен пиздовать в файлик Startup.cs/Program.cs и вписывать каждый раз: services.AddScoped, services.AddSingleton
Сделай нормальные суффиксы и резолвер по именам, не?
Аноним 05/02/23 Вск 14:46:16 #460 №2599862 
>>2599631
Можно просто написать расширение, которое с помощью рефлексии добавляет все классы из определенных папок.
Аноним 05/02/23 Вск 18:33:55 #461 №2600121 
изображение2023-02-05193158758.png
Аноны, почему не работает, ноль идей даже как загуглить. Бот не дожидается ответа, а сразу завершается с ошибкой.
Аноним 05/02/23 Вск 18:51:51 #462 №2600154 
>>2600121
>завершается с ошибкой
какой? Ты можешь обернуть в try Cath и вывести ошибку?
Аноним 05/02/23 Вск 18:55:27 #463 №2600161 
изображение2023-02-05195313163.png
>>2600154
Выкидывает с необработанным исключением, ошибка в методе от telegram.bot
Аноним 05/02/23 Вск 19:02:26 #464 №2600167 
>>2600121
Ты точно понимаешь что ты делаешь?
https://telegrambots.github.io/book/2/send-msg/native-polls-msg.html
Аноним 05/02/23 Вск 19:13:20 #465 №2600184 
изображение2023-02-05201254798.png
>>2600167
Я хочу получать сообщение из которого надо скопировать текст и отправить в sql запрос, однако бот не дожидается второго сообщения и копирует пустое поле
Аноним 05/02/23 Вск 19:20:42 #466 №2600198 
>>2599803
С хера не любят? Оч даже любят. Просто у шарпа была оооооочень долгая проблема с тем, что он был привязан к винде. Собственно, очень много где - это не подходило. Допустим, в нефтянке, на заводах всяких и прочих местах, где АйТи - не совсем свое - шарп нормально так укоренился, пока майки не решили убить классический фреймворк.
Блядь, половина того что удаленно снимает показание с твоих приборов учета, в РФ либо на плюсах(тех что C++/CLI), либо на шарпе, иногда еще дельфи, да. На заводах - аналогично, половина автоматизации заводов - это шарпы, дельфи, и плюсы. Есть часть легаси веба на ASP.Net, который еще старый, до того как там появились эти ваши вебапи и прочее.
Тырпрайз, у нас тут исторически на жаве писался.
Банки - тоже.
А когда майки таки отпустили поводья и сделали .netcore - уже как-бы рынок остального АйТи - поделен у нас. Стеки устоялись. Шарповоду, который не хочет на завод, по большей части дорога только в ДоДо, 2гис или банки, которые появились позже. Ну или в гейдев с юнькой.

А почему так сложилось? Потому что винда - всегда была проблемой для шарпа. Язык-то охуенный, но когда начинается реальное IT, никто не хочет с ней связываться. Вот и жил себе долго шарп сбоку, в областях автоматизации всякой.
Аноним 05/02/23 Вск 19:46:25 #467 №2600228 
>>2600198
>А почему так сложилось?
Потому что ты так нафантазировал.
Аноним 05/02/23 Вск 19:55:33 #468 №2600243 
>>2599243
А потом такие смотрят с приоткрытым ртом, когда в код, сделанный по заветам "карго-культа" новые фичи добавляются просто дописыванием новых имплементаций и парой строчек в di, а не разъебывая половину проекта, как они привыкли.
Но он же умный, он получил год опыта 10 раз.
Аноним 05/02/23 Вск 20:07:08 #469 №2600263 
>>2600228
Всё правильно он "нафантазировал"
Аноним 05/02/23 Вск 20:16:10 #470 №2600283 
>>2600243
Ну ок. Ты зашел на опасную территорию.
Давай. Вот тебе кейс.
Система опроса с очередями. Логика была простой: устройство - воркер, воркер пытается опросить устройство, сохраняет результат опроса в базу. Все изначально просто - по TCP общаемся без особых проблем.
Ок. Все норм. 10к потоков спокойно опрашивают че там надо.
Теперь - у нас есть COM-порты, через один COM-порт подключено 2к устройств.
Давай, объясняй, как твой DI поможет решить проблему того, что нельзя пытаться открыть из разных потоков один и тот же COM-порт.
Аноним 05/02/23 Вск 20:20:54 #471 №2600295 
>>2600283
>как твой DI поможет решить проблему того
Ты микроскопом суп хлебаешь?

DI решает другие проблемы
Аноним 05/02/23 Вск 20:22:40 #472 №2600298 
>>2600295
> новые фичи добавляются просто дописыванием новых имплементаций и парой строчек
Так каким образом новая фича в опросе через COM-порт будет реализована-то? Нужно же просто по заветам карго-культа чет там дописать.
Аноним 05/02/23 Вск 20:31:39 #473 №2600314 
>>2600298
очень просто
твой воркер не работает ни с какими устройствами напрямую. Он принимает какой нибудь IDevice и с ним работает.

Вот когда ты захочешь заменить device с tcp реализацией еще com реализацией, то ты сможешь просто переконфигруривать все в DI и твой воркер получит другой девайс

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

Ты же понимаешь (видимо нет) что не все пихается в DI?
Если тебе нужен семфор, ты же не принимаешь его в конструктор (кроме случаев если тебе нужен общий семафор, что бывает нужно менее чем 1/1000000 случаев ибо это грязно), а рождаешь его на месте.
Аноним 05/02/23 Вск 20:34:52 #474 №2600320 
Где прочитать про то, как неткор асинхронщину обрабатывает и параллельность?
Недавно услышал, что теперь synchronisation context выпилили и с дедлоками все лучше
Аноним 05/02/23 Вск 20:36:19 #475 №2600322 
>>2600320
никто его не выпиливал. его просто нет в асп.нете и поэтому можно не писать ConfgureAwait(false) и типа не иметь проблем.
типа.
Аноним 05/02/23 Вск 20:40:05 #476 №2600325 
>>2600298
Если ты не понимаешь пользы, так я приведу пример.

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

А все почему? А потому что майки открыли точку расширения фреймворка и у меня есть возможность в ней заменять нужные части на свои. И для этого мне не нужно делать форк, чего то патчить в рантайме и так далее.
Аноним 05/02/23 Вск 20:42:29 #477 №2600331 
>>2600298
Начнем с того, что твой воркер нарушает принцип единой ответственности.
Я бы инжектил в него список комманд, реализующих простой интерфейс с методом doasynk, и выполняющих одну итерацию бизнес логики.
Отдельные команды, чтобы выгребать из портов данные и писать их в конкаррент очереди в памяти.
Отдельные комманды, чтобы выгребать данные из очередей и держать коннект на ком порту.
Отдельные комманды, чтобы забирать данные из очередей и писать их в базу.

Понадобится lpt порт прикрутить - добавляешь комманду в енумерабле, воркер ее крутит.

Заранее извиняюсь за почерк, бахнул пива и пишу с телефона.
Аноним 05/02/23 Вск 20:56:07 #478 №2600347 
>>2600331
> Начнем с того, что твой воркер нарушает принцип единой ответственности
Каким образом-то?
Он буквально делает вот что:
while(stopToken.IsCancellationRequired is false)
{
var task = await _reader.ReadAsync(stopToken);
var interface = task.Interface;
if(interface.IsOpen is false) interface.Open();
for(int i = 0; i < _retrys; i++){
var protocol = task.Protocol;
var request = protocol.CreateRequest(task.Mapper.ToProtocol(protocol));
var response = await interface.SendRequestAsync(request, stopToken);
if(responce.IsSuccess)
{
await _dataArchive.SaveData(task.Mapper.FromProtocolToData(typeof(protocol), respose.Payload));
break;
}
}
if(task.CloseInterfaceOnComplete is true) interface.Close();
}
Аноним 06/02/23 Пнд 00:12:55 #479 №2600522 
Что делать, если есть 2 метода, каждый из 10 строк, но их различие только в одной отсутствующей строке?Причем эта строка находится в цикле и не хочется писать доп условие.

И что быстрее If bool, или delegate метода внутри цикла?
Аноним 06/02/23 Пнд 00:17:29 #480 №2600527 
>>2600522
Замерь, разницы не увидишь.
Аноним 06/02/23 Пнд 02:08:27 #481 №2600600 
>>2595218
Меня дрочили теорией по бд и устройством v8 собесился на фулстека.
По шарпу было два вопроса, по которым я спорил с интервьюером - как работает IDisposable и деструктор, и про структуры. В первом он мне пытался доказать, что Dispose удаляет объект из памяти, а я говорил, что не удалет, а убивает неуправляемые ресурсы. По второму говорил, что GC чистит структуры, что очевидно не так. Я же прав??
В конце правда по чесноку сразу сказал, что я не подхожу, и признался, что у них жуткое легаси на вебформах, так что я не расстроился.

Тяжело...
Аноним 06/02/23 Пнд 02:15:31 #482 №2600605 
>>2600600
Dispose - скмантическм вида close/finally. Ресурсы тут не причем. В диспозе можно хоть ктудху вызывать
Gc не трекает структуры.
Аноним 06/02/23 Пнд 02:53:40 #483 №2600666 
>>2600600
мда. тяжко на мобиле писать. добрался до компа и поясню шире

В общем Dispose - настойчивая!!! рекомендация вызвать этот метод когда объект уже не нужен чтобы он корректно очистил свое состояние.
Но это не значит что это неуправляемые ресурсы. Я могу использовать (и активно использую) using(IDisposable) как альтернативу try_finally и где тут неуправляемые ресурсы? А нигде. Так что у Dispose семантика Close и это может быть что угодно вообще. В том числе и ничего - не все, что есть IDisposable, требует этого вызова - в районе HttpClient такое есть.

Другое дело что просить вызвать Dispose не значит что его удобно вызывать, но это уже совсем другая тема.

Так что это просто паттерн "очень!!! прошу вызови этот метод чтобы я корректно освободил ресурсы/ сделал нужное дело" без конкретики что именно будет происходить

Структуры живут на стеке. GC не заведует стеком, но вот при боксинге структуры попадают в кучу и тогда GC знает про обертку и трекает ее.

>жуткое легаси на вебформах
эээх. а ведь они ищут того кто им перепишет на новое, а ты их подвел )
Аноним 06/02/23 Пнд 09:53:27 #484 №2600846 
>>2600600
>что GC чистит структуры
Может и чистит. Если у структуры есть поле ссылочного типа его содержимое находится в куче. GC очевидно занимается отслеживанием живых структур которые держат на ссылку.
Аноним 06/02/23 Пнд 10:02:20 #485 №2600856 
>>2600522
>что быстрее If bool, или delegate метода внутри цикла?
Делегат намного тормознее. Для вызов каждой функции нужно сохранять контекст предыдущей, выделять память под локальные переменные, потом это все очищать.
Аноним 06/02/23 Пнд 11:49:46 #486 №2600932 
Мой мир разбит и все представления о нем.
Оказывается, что есть единая история, типа как в проводнике, когда не важно в каком окне идут изменения — все это часть одной истории.

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

Эта срань делает зависимой одну историю от другой. Я раньше ругался на программы типа 3д макса, считая их древним говном мамонта, а разрабов ленивыми уебанами, не могущими сделать "так как в обычном проводнике". Оказывается вот оно че.
В фотошопе, к примеру, нельзя переместить слой из одного проекта в другой — только дублировать.

И ладно бы студия, у которой просто текст, где перемещение текста это по сути копирование с уничтожением оригинала. В этом случае Ctrl+Z в источнике просто оставит копию. Но ведь есть тяжеловесные объекты типа как 3д-модель со своим уникальным ID, и по сути, перемещение из одного документа в другой — это перемещение ссылки на этот объект. А время физического перемещения там может занять до минуты.

Конечно есть решение, но оно неоднозначное и пока не представляю как это может аукнуться в будущем. Напрягает, что так не реализовано нигде.
Аноним 06/02/23 Пнд 12:15:42 #487 №2600945 
Если мне нужно тупо выучить к примеру Ангуляр для резюме и интервью, не легче ли будет тупо пройтись по вопросам интервью, а не задрачивать документацию или собирать пет проект?
Аноним 06/02/23 Пнд 12:46:26 #488 №2600983 
>>2600945
Да. Проходишь интервью, узнаешь вопросы, отправляешь в прошлое самому себе список вопросов. Просто и продуктивно.
Аноним 06/02/23 Пнд 13:03:01 #489 №2600994 
Просто скажите, как мне из одного threadпередать в другой thread объект, чтобы мне не выдавало ошибку, что объект создан в другом потоке? Я не понимаю, почему в калошарпе это так сложно и почему я не могу нагуглить ничего адекватного
Аноним 06/02/23 Пнд 13:04:04 #490 №2600995 
>>2600932
Что за поток сознания?
Аноним 06/02/23 Пнд 13:12:28 #491 №2601006 
>>2600995
Простите. Расписал как мог.
Эту боль могу почувствовать только я.
вкатыш Аноним 06/02/23 Пнд 13:40:24 #492 №2601048 
Hello there /pr/C#

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

Учась на 3м курсе в неплохом вузе в столице решил, что пора искать первую работу в ит, именно на бэк на C#. Очевидно, что резюме на hh +/- пустое т.к. опыт официальной работы был ток в фастфуде, но, думаю, что вставлять это на hh себе дороже. Сначала пытался надыбать стажировки на шарпах, но их вообще по пальцам пересчитать, потом решил биться на джуна, но, честно говоря, уже складывается ощущение, что бьюсь головой о стены. Я в своих пет-проектах (a.k.a курсачи/лабы в ВУЗе/хакатоны) юзал стек из Jquery, ASP Net Mvc, Core, EF Core, голые SQL запросы, PostgreSQL, Mssql и т.д.. Даже есть пару сертификатов, что я прошёл отбор на группу повышения квалификации в вузе, причём успешно закончил. Но вот уже откликнулся на 34 вакансии, где-то с сопроводительным письмом, где-то без, где-то решал тестовые, где-то нет и на данный момент стата из 34 вакансий: 21 отказ и 13 игноров.

В общем, однокурсник, который устроился на 1С хотя шёл на джависта говорит, мол, жди апреля, там финансовый год начнётся, поэтому я остыл и пока решил подождать до апреля, а теперь собственно вопрос: "Правильно ли я делаю вещи клипая ненужные никому pet-проекты, решая литкод и читая книги, может быть лучше просто как-то офигительно наврать на hh про несуществующий опыт работы? Или может ходить на всякие C# встречи, что люто хайпятся в рекламе вк/hh? Или может купить курсы с "100% трудоустройство после окончания" (хотя этот вариант нереальный т.к. я бомжара 100 уровня, даже учиться в вузе начинал в кредит, благо смог на бюджет перейти)?"
Аноним 06/02/23 Пнд 14:07:06 #493 №2601070 
>>2601067
Спасибо, значит я на верном пути, но mindbox мне, кстати, уже отказал, буквально пару недель назад, что меня удивило т.к. я тестовое решил прям как надо, конечно, по моему неджуновскому мнению. А что такое "сисдиз"?
Аноним 06/02/23 Пнд 14:12:55 #494 №2601072 
>>2601067
Судя по всему это сокращение от "системный дизайн", а что подразумевается под этим словосочетанием?
- Умение использвоать системы контроля версий с веточками и girflow?
- Паттерны проектирования вроде строитель, одиночка и т.п.?
- Принципы программирования типо Solid, Kiss, Dry?
- Принципы ООП?
Просто это я тоже изучаю (хотя, думаю, могу сказать, что изучил)
Аноним 06/02/23 Пнд 14:15:15 #495 №2601073 
>>2601071
А вот и ответ, хорошо, спасибо попробую, про контур вообще до э
того не слышал. Наверное, действительно на джуна мне рановато без опыта пытаться, попробую добиться какой-нибудь стажировки за еду.
Аноним 06/02/23 Пнд 14:21:00 #496 №2601078 
Кто нибудь знает что за рамка возникает вокруг элемента WPF при клике с Alt? Ни UIElement.Focus, ни Keyboard.Focus(UIElement) эту рамку не активируют.
Аноним 06/02/23 Пнд 14:30:04 #497 №2601082 
>>2600994
Сами потоки тут не причем
Это сам объект (или то что он использует) запоминает поток создания ибо ему это важно, ну и проверяет что его вызовы в том же потоке
Аноним 06/02/23 Пнд 14:30:21 #498 №2601083 
>>2601048
Попробуй в озон на стажировку поступаться. https://tech.ozon.ru/routestart
У меня знакомый qa-мануальщиком на нее попал. Неделю назад закончил стажировку и теперь там джуном работает.
Аноним 06/02/23 Пнд 15:31:56 #499 №2601162 
>>2600283
Бляяяя чел. Пусть твои 2000 устройств пишут в очередь, а другие потоки это читают и делают что надо.

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

Получаем архитектуру где 1000 устройств пишет куда данные и не знает что с ними происходит, может в текстовый документ пишут или в Пентагон данные шлют, а возможно там вообще 10 разных вариантов одновременно.
Ридеры читают данные откуда-то, им неизвестно откуда они берутся. Сами ридеры это возможно вообще разные физ машины или набор потоков.

У меня ощущение что у тебя проблемы с пониманием концепции интерфейсов и сокрытия деталей реализации. Твои все эти штуки не должны вообще знать о природе хранения данных, это не их дело
Аноним 06/02/23 Пнд 15:36:11 #500 №2601167 
>>2601048
>Правильно ли я делаю вещи клипая ненужные никому pet-проекты, решая литкод и читая книги, может быть лучше просто как-то офигительно наврать на hh про несуществующий опыт работы
Хуйней занят. Литкод это бесполезная хуета, твои проекты нахер никому не интересны и их никогда никто не будет смотреть.
Аноним 06/02/23 Пнд 17:51:22 #501 №2601321 
Поцоны, кто нибудь смотрел ITVDN? Купил на рутрекере чтобы восполнить пробелы в базе, а там духота такая ояебу - какие-то окна уязвимости, дрочево на области видимости переменных, дрочево на const/простые переменные, правильное сравнение переменных - вначале константы потом переменные. Кто-нибуть итт ирл видел такую хуиту или это я нетру прогромизд?
Аноним 06/02/23 Пнд 17:52:58 #502 №2601325 
Я вообще молчу про то что видео можно уверено в полтора раза ускорять + само видео по контенту можно в среднем на треть вырезать.
Аноним 06/02/23 Пнд 17:54:09 #503 №2601328 
ПЕРЕКАТЫВАЕМСЯ, БУРУНДУКИ

>>2601326 (OP)
>>2601326 (OP)
>>2601326 (OP)
Аноним 06/02/23 Пнд 19:17:38 #504 №2601452 
>>2601162
> Передашь IDataWriter для адаптера твоих вокреров. Они не зная что там находится внутри пишут в него данные. Пишем хоть вообще отдельное приложение или фабрику ридеров которые читают из IDataRider.
Угу.
Получаем. Пришло время почитать у 1000 устройств, которые висят на одном COM-порте. Все обработчики обосрались, они ретраят. В результате - сбор пошел по пизде. ЗАТО АРХИТЕКТУРА, да.
Аноним 06/02/23 Пнд 23:17:28 #505 №2601655 
>>2601321
>или это я нетру прогромизд?
This
Аноним 07/02/23 Втр 08:51:37 #506 №2601822 
>>2601452
тебя уже не вылечить. иди на завод
Аноним 09/02/23 Чтв 13:32:49 #507 №2604621 
>>2599509
Ваше не вкатывайся в .net, это говнище умирает ну как минимум не развивается. Я сйечас локти кусаю что 2 года назад в голанг не перекатился.
Аноним 09/02/23 Чтв 23:40:19 #508 №2605217 
>>2601452
С чего он обосрались дебис? С того что ты хочешь через 1 порт опросить 1000 устройств? Извините блять кодом нельзя решать проблемы того что ебанутый. Ты ещё спроси а че ваша архитектура не умеет решать проблемы хардвера
Аноним 10/02/23 Птн 05:58:23 #509 №2605614 
.png
>>2605217
Чел. Я не ебанутый. Это обычная практика.
Так вот. Независимо от архитектуры, мы должны учитывать, что вот для COM-порта надо еще на уровне поставления задачи разруливать, иначе пизда. Если мы так же хотим, чтобы через ПэЭлКа какой-нибудь хреновенький можно было опрашивать - мы так же должны учитывать че там за ПэЭлКа и в ряде случаев - не создавать задачи чтения, пока сеанс связи через ПэЭлКа с другим устройством не завершится. И все это вот.
Ну, че поделать. Да.
Но мне выше говорят, что все можно сделать абстрактно и потом просто строчку дописать, все будет заебись. Не будет, блядь.
Аноним 11/02/23 Суб 22:48:54 #510 №2607893 
>>2600283
>Теперь - у нас есть COM-порты, через один COM-порт подключено 2к устройств.

Ты ёбнутый.
Аноним 11/02/23 Суб 23:09:06 #511 №2607907 
>>2607893
Это обычная практика. У тебя стоит модем подключенный через COM, через него по CSD устройства в полях опрашиваются.
Аноним 11/02/23 Суб 23:37:57 #512 №2607931 
>>2607907
Пошел нахуй, неуч. Ходить нахуй - это стандартная для тебя практика.

Протокол ModBus предполагает использование адресов ведомых устройств в диапазоне 1-. 247. Каждое устройство в сети должно иметь уникальный адрес.
https://intellect-module.ru/downloads/manuals/inode_35D/ModBus_RTU.pdf
Аноним 11/02/23 Суб 23:43:57 #513 №2607934 
>>2607907
>У тебя стоит модем подключенный через COM, через него по CSD устройства в полях опрашиваются.

У тебя, шизло. В фантазиях.
Период опроса говна в полях сколько лет, если говн несколько тысяч?

Ебать ты коневод сфероконей в вакууме.
Аноним 11/02/23 Суб 23:49:20 #514 №2607940 
>>2607931
При чем тут модбас, чел? Обычные пртоколы Bisync-лайк.

>>2607934
> Период опроса говна в полях сколько лет, если говн несколько тысяч?
На скорости 9600 за сутки несколько тысяч можно опросить с одного модема. Чай не жсоны гоняем.
Аноним 13/02/23 Пнд 13:35:00 #515 №2609611 
>>2600945
В целом, подход может сработать, потому что спрашивают, обычно, документацию + некоторые практические моменты (популярно встречающиеся, но в доке описаны скудно), таким образом, просто задрочить документацию профита не даст, а если времени пилить пет-проект нет, то и подавно. Хотя я бы советовал совмещать документацию и вопросы к собесам - чувствовать будешь себя уверенней, да и в работе пригодится.
comments powered by Disqus

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