Двач.hk не отвечает.
Вы видите копию треда, сохраненную 6 апреля 2023 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
sage 2 2582356
>>582351 (OP)
Опять джавадебил перекатил тред.
хрюкалка.webm1,6 Мб, webm,
1024x576, 0:06
3 2582359
4 2582362
>>582351 (OP)
Анон, щас будет вот вообще пиздец нубский вопрос:
Если я захостю сайт через Apache по инструкции с MSDN и при этом у меня динамический IP, при переходе по этому адресу с других устройств, скажем на 228.359.1.69/Home/Index будет сайт работать?
5 2582363
>>582362
IP должен быть белый в первую очередь.
6 2582364
>>582362
Если у тебя нет виртуальных серверов в конфиге, а один, который отвечает на все запросы, то будет. А так да, белый айпи.
7 2582366
>>582362
Проблема в первую очередь не в динамическом IP, а в NAT.
Если другое устройство находится в той же сети, что и твой сервер, страница откроется, например, если компьютер и мобилка подключены к одному роутеру, то с мобилки ты можешь подключаться с серверу, запущенному на компьютере. Но с мобильного интернета или с компьютера в другой сети доступа не будет.
Ну и сервер надо запускать не на локалхосте, а по адресу 0.0.0.0, иначе сайт будет работать только локально.
8 2582369
>>582363
>>582366
>>582364
Ясно, спасибо
9 2582445
Объясните нубику: шарпа достаточно для написания ботов для ммо-шек? Или нужен дополнительно C/C++? Да, хочу нырнуть в это для себя, интересно, но пока не пониманию многообразия сишек.
10 2582459
>>582445
Смотря что за ммо-шка.
11 2582610
>>582445
Смотря насколько низкоуровневых ботов ты хочешь сделать. Если достаточно кликать мышкой и нажимать клаву, то шарпа хватит, а если надо ломать сетевой протокол клиента и подсовывать ему фейкоту, то очевидно нет.
12 2582611
>>582445
Нужен С++. Обычно тебе будет нужно взаимодействие с кодом игры, а почти все ммо написаны на С++.

Забудь про вообще, это мертвое наречие и на нем уже лет 50 не пишут ничего нового
13 2582613
>>582611

>Забудь про вообще


Про С
14 2582629
Часто стал видеть в десктопных приложениях, что бэкэнд написан на нормально языке го, си, кресты, а фронт на электроне. Почему так? Почему они не выбирают авалонию?
15 2582635
>>582629

>Почему так?


JS-погромистов много.

>Почему они не выбирают авалонию?


Нонеймы.
16 2582840
А каким образом хранятся импортированные библиотеки?
Тут недавно всплывала тема про удаление папки obj.
Так вот, я очистил все obj и bin в каждом проекте решения, и у меня отвалились импортируемые с локального диска библиотеки.

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

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

Че за магия?
17 2582857
>>582840
Короч упоминание библиотеки есть в двух файлах
собстно в проекте <project_name>.vbproj
и в папке \obj\Debug\net6.0-windows\, в файле <project_name>.vbproj.FileListAbsolute.txt

В первом файле указан абсолютный адрес к библиотеке и ее расположение не поменялось. Во втором уже относительный.
Сранно.
18 2582896
>>582840

>импортируемые с локального диска библиотеки


Что за библиотеки
19 2582940
>>582896
Моя личная библиотека, написанная еще на NetFramework. Лежит себе на диске типа D:\Code\Libraries\MyLibrary.dll

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

Причем когда у меня возникла ошибка и посыпалось все решение, мне пришлось сперва удалить из ссылок мою библиотеку и только потом снова добавить. Иначе пишет, что библиотека не поддерживается.
20 2582963
>>582940

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


А разве VB под .net6 есть? Я думал его еще на .NetFramework 4.8 стопорнули.
Во вторых сама идея подключать .NetFramework библиотеку к .Net6 проекту такое себе. Хотя бы под .NetStandart пересобери ее.
В третьих такой способ подключения библиотек сам по себе туфтовый. Создай свой локальный нюгет, помести туда свои библиотеки и подключай их как белый человек.
21 2582966
>>582940
Алсо, если это твоя собственная библиотека, то намного проще ее подключить в виде исходников к проекту.
2023-01-2215-14-56.png14 Кб, 763x191
22 2583026
>>582963

>А разве VB под .net6 есть? Я думал его еще на .NetFramework 4.8 стопорнули.


А как еще добавлять?
Зависимости -> Добавить ссылку.
в .vbproj пикрил. Ничем не отличается от добавления текстового файла.

>>582966
>>582963

>то намного проще ее подключить в виде исходников к проекту.


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

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


Бля, было же просто. Не, ну давайте простые вещи делать через жопу, давайте погрузим данные в ракету, предварительно зарегистрировавшись в аккаунте NASA, отправим все это на Марс, шоб просто поковыряться в жопе.
Ну хоть есть возможность локально подключить и на том спасибо.
image.png5 Кб, 1765x30
23 2583059
У меня два вопроса.
1. Почему в райдере нельзя добавить к нет кор проекту ссылку на COM библиотеку.
2. И почему мне выдает такую ошибку при регистрации dll.
24 2583160
А в чем отличие подписок от передачи делегата?
Вот если я подписался на событие, то мне нужно реализовывать Dispose, чтобы не забыть отписаться. Меня этот подход немного давит.

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

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

Не очень понятно какой из них лучше использовать.
26 2583244
>>583191
Че тут непонятного? Твой запрос должен быть очевиден пользователю.
Если у тебя много свойств с именем ID в классе, то приписываешь уточнение.
Если это единственный ID, то можно не надо.
Просто пирписав User к ID, как снежный ком придется приписывать User ко всем остальным свойствам.
27 2583256
>>583191
Первый вариант хорош для создания Entity с одним свойством Id. Тогда можно будет создать репозиторий который будет принимать только наследников этого класса.
28 2583275
>>582840
Копируются в выходной каталог как есть. В обжект хранятся промежуточные файлы
29 2583401
>>582840

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


Это ненормально. При ребилде все библиотеки указаные в файле проекта должны быть скопированы обратно в /bin/ и там нормально увидиться. Если у тебя не так, то надо чекнуть рефренсы у проекта.
30 2583410
>>583160

> Все равно надо потом это все подчищать?


Ды-а! Подписка на эвент создает делегат который держит ссылку на объект, и явное создание дегата с его передачей объекту-потребителю тоже держит туже самую ссылку. От событий надо отписываться, а делегаты занулять.
31 2583472
>>583401
Просто появляется желтый треугольник над проблемной либой. Причем если я чищу obj из одного проекта, то как бы норм, а если чищу obj всех проектов решения, то выскакивает проблема.

Может где-то перекрестные связи между проектами. Одно требует от другого, когда то не готово. Технически не создаю рекурсию — студия не ругается, но через третье колено боюсь что вероятность есть. Я думаю, что проблема в этом.
daccae896367ef760d1311fea74cfe17.jpg282 Кб, 2168x1661
32 2583476
33 2583619
>>583472
Блять чел.
1) делай рестор пакетов решения
2) не чисти руками используй сука иде

У меня было решение на 20 проектов. Удалял даже руками обж и нихуя не было. Ты какую-то хуйню там наделал похоже
34 2583650
>>583472
читай аутпут же. Там он напишет варнинги по которым рисует треугольники. Увы студия никак больше не поясняет почему треугольничает
Capture.JPG22 Кб, 820x314
35 2583707
а поясните за MethodImplOptions.AggressiveInlining
насколько он вообще рулит?
в интернетах очень противоречивая информация, кто-то говорит мамой клянусь работает как часы, кто-то говорит что компилятору похуй вообще он лучше тебя знает
а я просто не знаю
пытаюсь сбэкпортить одну вещь на говно мамонта где его еще не было
36 2583749
>>583707
Ну навесить же его можно на что угодно, так что это не более чем указание "я бы хотел чтобы оно всегда инлайнилось". А результат не гарантируется, ведь 100500 причин которые могут не дать его инлайнить.
37 2583774
>>583749
ну короче не буду париться и закоменчу, все равно их использовать не могу
38 2583782
>>583707

>насколько он вообще рулит?


Вроде это опциональный атрибут. Конпелятор его игнорит если заинлайненый метод больше определенного размера(32 инструкции IL) и в нем есть вызовы других объектов(т.е. не к своим данным обращаешься).
39 2583846
Хочу кодить на c# пиздец как! Но проблема в том что вакансий норм нету. На удалёнку говноджуна не возьмут, с текущей работы 100% придётся увольняться, ибо c# на проектах не задейстаован вообще никак. Печаль...
40 2583849
>>583846
И на какой ЯП решил переходить?
41 2583852
>>583849
Не, я наоборот на с# бы перешёл, но работы нет, тем более для джуна.
42 2583860
>>583846
Переезжай в ДС.
43 2584037
>>583852
Стучись сразу на вакансии мидла.
44 2584046
Как из шарпа запустить консольное приложение и прочитать его вывод? Желательно, чтобы при этом не открывалась консоль
45 2584059
>>584046
Гугли c# subprocess pipe
46 2584130
>>582351 (OP)
Почему это говно провалилось?
47 2584144
>>584130
Не провалилось.
48 2584161
Аноны, подскажите, пожалуйста, как получить значение из выделенного элемента в GridData.
49 2584166
>>584161
Отбой, до самого дошло сразу после того как пост написал.
50 2584171
>>584037
Был бы у меня ещё опыт бэкендера, для такой наглости.
51 2584188
>>584171
Увы, но других вариантов нет. Учишься, нарабатываешь опыт/проекты, стучишься в вакансии и доказываешь что можешь и умеешь.
52 2584370
Что если одна функция ретранслирует кортеж из другой функции.
static (string Name, int Age) GetTupleA()
{
return GetTupleB();
}

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

Получится два абсолютно разных кортежа или как-то автоматом определяется одинаковая сигнатура?
53 2584462
Два часа трахался с ReactiveUi, прежде чем узнал, что для вызова расширений из класса для которого они написаны обязателен this...
54 2584471
>>584462
Сейчас бы вызывать расширения из класса, для которого они написаны.
55 2584525
Мини-вопрос насчёт нейминга. Есть такой enum:
SignInStatus { Success, Failure, Cancel }

Увидел в другой коде похожий enum, но там Cancel написан в прошедшем времени Cancelled. Какой вариант правильнее - мой или их? Мне кажется, если ты пишешь Cancelled, то другие значения должны быть Succeed и Failed тогда.
56 2584555
>>584471
Я бы все отдал за вызов расширений из класса, для которого они не были написаны.

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

Не пытайся играть в колдунство, запоминая заклинания — загуглил бы про расширения и не ебался бы джва часа.
57 2584570
>>584525

>Увидел в другой коде


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

Я думаю, что лучше как у тебя. Наверно надо относиться к этому как ключевым словам — они неизменны и потому легко читаемы.
58 2584572
>>584525

>Какой вариант правильнее


Все правильные. В нете есть соглашение, что окончание -ed пишут когда что-то уже строго произошло, -ing пишут когда вот прямо сейчас произойдет, и без окончаний когда время неважно.
59 2584641
Везде пишу is null и is not null вместо богомерзкого == null и != null. Кто сеймыч?
60 2584647
>>584641
== можно перегрузить и наебать, а с is не пройдёт.
61 2584756
>>584641

>Кто сеймыч?


Писал так всегда.
бейсикодебил

Попробуй писать is Nothing и в конце строки не ставить ";"
62 2584760
>>584756

>Попробуй писать is Nothing и в конце строки не ставить ";"


Даже если мои ноги сгниют от крокодила, а мать продам в рабство, даже тогда я буду выше этого.
63 2584769
>>584641
Всегда так пишу. Но да, в EFCore были места, где он не мог это нормально прожевать. В новом вроде все чики-пуки.
64 2584780
>>584769
>>584760
>>584756
>>584671 (Del)
>>584647
>>584641
var ?? "Member"

Нахуй какие-то сложности? Будьте умными, мы все-таки в 2к23 живем. Достаточно ??.
65 2584786
>>584780
Функциональщина не везде роляет. Иногда нужны простые if/else конструкции и там ?? не везде проканает.
66 2584788
>>584780
в 2028 году мы используем это
What??????!!!!!!!
Yes))))))))))
No Way!!!!! .... 🧐
67 2584815
>>584786
Охуеть, ?? теперь уже функциональщина. Жду, когда функциональщиной объявят using.
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"

Приводят к отсутствию неймспейса вообще, пока действую приведением опосля в нужный вид уже сериализованногго текста, но это же хуйня, какого хуя сериализация не может проходить по моим правилам, шо за бред? Есть тут кто имел дело с яшей.недвижимостью, памахите
69 2584855
>>584815
Само по себе нет. Но способ использования предлагаемый тобой - да.
70 2584861
>>584837

>Даст результат


>xmlns:xmlns


Нутк да, ты же добавляешь неймспес с названием "xmlns". Получается такое дублирование. Походу это у хуяндекса какое-то ебанутое представление о немспейсах(они пытаются дефолтный переопредлить на свой).
71 2584882
>>584780
а потом мы вдупляем в эти ебаные шарады и не вдупляем. ну нахуй так жить?
72 2584987
>>584882
Кому как. Вот лично для меня шарп очень беден на выразительные средства.
73 2585045
Кто нибудь итт использует авалонию? В ней можно как-то кастомизировать заголовок, не отключая его полностью? А то не хочется самому писать обработчики перетаскивания, группировки и тд.
74 2585081
>>584861
Но у меня бомбануло, от того что казалось бы простая задача оказалась трудновыполнимой
75 2585092
>>584987
?&%::^$@'# — это не выразительные средства, а способ выебать себе и другим моск.
76 2585102
Где в ASP.NET Core выполнять логику с кастомной инициализацией (например, сходить в бд, прочитать какие-то файлы, установить расписание на основе этих данных)?
В WPF был метод OnStartup и события Initialized/Loaded. Эту подготовку надо выполнить непосредственно перед запуском самого приложения.
Какие в ASP (webapi) есть для этого средства?
77 2585286
наткнулся в коде на вот такой блок:
#if DEBUG_CHECKS
//....
#endif
вроде можно #define там же c этим впилить и будет компилиться
но как его врубить для всего проекта?
78 2585310
>>585102
Попробуй сделать сервис наследованный от IHostedService.
Там есть методы StartAsync и StopAsync, которые работают при запуске/завершении приложения.
79 2585316
>>585286
Свойства Проекта - Построение - Символы условной конпеляции, пиши туда все что надо.
80 2585327
Насчёт ЛОГОВ. Во время работы приложения собираю различную информацию, в том числе различные ID'шники связанные с пользователем. Если происходит сбой, то вся эта информация отправляется на сервер.

Тут подумал, а ведь нельзя так открыто собирать ID'шники, ибо по ним можно установить пользователя, например? Хочу обрезать все ID'шники до 8 символов с конца, потому что мне не нужен полный ID для отладки на сервере. Правильная мысль? И как бы лучше это в коде запилить? Может добавить метод StringUtils.EscapeId(...);
81 2585340
>>585316
спасибо
82 2585408
>>585092
А писать постоянные ConfigureAwait так выразительно аж пипец.

>>585102
IHostedService
и следи чтобы он выполнялся первым. И на конец StartAsync он свою работу сделал.
Вообще нигде не написано что сервисы стартуют последовательно, но иначе без вариантов.
83 2585445
>>585335 (Del)
Чел, речь вообще не об этом. В приложении используются сторонние сервисы для входа и у них есть ID. Типа фейсбук, гугл, эпл.
1674566172954.png222 Кб, 476x315
84 2585520
Народ, вы знаете какой-нибудь сервис для локализации приложений вроде Lokalise? То есть где мы могли бы получить перевод файлов ресурсов для .net приложения на другой язык?
85 2585663
>>585408

>А писать постоянные ConfigureAwait так выразительно аж пипец.


ну да, гораздо лучше этой ^!@$^&&=>(xyipizda)
ведь мы для людей пишем а не для таукитян или какой-то там машины ебучей
86 2585687
>>585663

>ведь мы для людей пишем


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

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

и да, как раз этот ConfigureAwait настолько "выразителен", что люди предпочитают его не писать даже если это стоит некоторого оверхеда.
87 2585731
Все-таки херовый в нете ResourceManager. Сто лет его не использовал и забыл, что он вкомпиливает ресурсы из папок через точку. Типо путь "Folder/Res1.resx" превращается "Assembly.Folder.Res1". Сидел джва часа дебажил почему же ресы не видно. Блед что мешало дать явную настройку по какому нику их искать в бинаре.
88 2585733
Шарпаны, мы в шараге учим алгоритмы с сисярпом, у меня ноут 2015го и на нем вижуал студио скрипит пердит, да и винда тоже попердывает. Думаю поставить линукс, только мне нужна среда и компилятор сишарпа. В гугле пишут моно и тут два вопроса - во первых он еще развивается? Когда я искал моно для юнити то вроде мне писали что они давно прекратили его обновлять. Во вторых какие есть альтернативы без особого пердолинга в плане что написал код и исполнил без танцев с бубнами как в студии или близко у этому?
89 2585737
>>585733
Это... Поставь студию 2008-2015 под неты 3.5-4.6 Для шараги должно хватить за глаза. Все проекты сделаные в них в джва клика портируются на современные поделки микрософта.

Алсо студия 2008 сейчас воспринимается как фитоняшка. Она даже быстрее вс-кода, а ведь когда вышла была жирным тормозным чудовищем на фоне делфей, лол.
90 2585744
>>585731
Есть же System.Reflection.Assembly через которые все пути достать можно.
image.png14 Кб, 529x94
91 2585757
>>585687

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


"хочу foreach но с индексом" - это фиаско. Foreach, ты как раз и используешь, когда тебе похуй на индексы. Если тебе не похуй, то ты не исползуешь foreach.
И да, в шарпе даже такую хуйню можно делать очень просто (см. пик)
92 2585791
>>585757

> то ты не исползуешь foreach.


и использую что?

А то что на скрине это дичь. Выразительность этой портянки никакая.
93 2585794
>>585737
Хорошая идея анон, спасибо, попробую наверное так и сделать.
94 2585795
Используешь while.
95 2585797

>2585687


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


Просто For?

>>585757
Чет сложнее обычного цикла.
96 2585801
>>585795
ну да. это ж шарп )))
выразительность такая выразительность )

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

Какой нибудь foreach(... in items.WithIndex())?
ну можно запилить такой метод типа да, но это будет велосипед. И каждый пилит такой свой велосипед со своим поведением. Ай красота (сарказм).
97 2585808
>>585791

>Выразительность этой портянки никакая.


Какая тебе нахер выразительность? Ты о чем вообще?
Ты в любом другом языке, если задашся целью получить индекс в foreach, будешь примерно такой же хуйней пользоваться (кортежем или его подобием).
Если тебя смущает linq, то сделай экстеншен в который его спрячешь и все у тебя будет красиво и "выразительно".
Понавыдумывают себе какой-то хуйни, а потом носятся с ней.
98 2585809
>>585801
Мне самому шарп в последнее время не очень нравится. Хотел с бейсика слезть, недавно открыл проект на шарпе, а там студия в очередной раз порекомендовала поставить ":", чтобы сократить хуйнюнейм. Как-то даже не смешно уже.
99 2585814
>>585809
Вот эта хуйня вообще из C еще переползла в шарп, и она наверное в любом языке, с корнями оттуда есть.
100 2585821
>>585814
Я не против одной хуйни, но когда этих хуевин уже 10 и каждая маркируется через ":", то это уже какая-то шиза.
101 2585831
я просто пишу for без задней мысли.
102 2585834
А возможно кодить на с# без Visual Studio? В смысле есть какие-нибудь ещё варианты IDE? Тулчейны там всякие для vscode или ещё что-то.
103 2585846
>>585834
Можешь хоть в блокноте код писать. Потом в консоли запускай dotnet build и dotnet run и все
104 2585850
>>585846
Я понимаю, речь об иде которые предоставляют сравнимый уровень удобства.
105 2585858
>>585850
VSCode и Eclipse
106 2585863
VIM
1-AD1e170YTJaiUBypv1H9Ow.jpg378 Кб, 1200x1574
107 2585877
>>585863
Шарпаны, это ловушка!
108 2585942
>>585808

>Какая тебе нахер выразительность? Ты о чем вообще?


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

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


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

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

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

А если и тут не понимаешь, то посмотри на визуал бейсик и попробуй его прочитать. Шарписту сложно читать визуал бейсик, хотя там ведь как бы тот же код написан, просто другим способом.
109 2586097
Как же хочеться вкатиться...
110 2586099
>>585858
А в коммерческой разработке что используют? Кроме студии.
111 2586106
>>586099
Платный Rider.
112 2586139
>>586099
Студию и райдер.
Плюс VSCode, но больше как вспомогательный инструмент к этим двум.
113 2586164
почаны чем можно заменить Array.Empty в мамонтовом фреймворк таргете?
я правильно понимаю что он просто пустой дженерик массив возвращает?
114 2586166
>>586164
https://referencesource.microsoft.com/#mscorlib/system/array.cs,bc9fd1be0e4f4e70,references
Бляя пиздец зумеры изобрели пустой массив.
115 2586171
>>586166
бля реально пустой массив.
выразительное...
Image 10.png5 Кб, 666x382
116 2586387
И когда выйдет билд авалонии с фиксом сглаживания шрифтов под виндой, то все равно будет как то так.

эээх
117 2586410
>>586387
Зачем авалония, когда есть winui? Да кривой, да багованный, зато нативный и красивый!
А я сейчас пишу тестовое на uwp, такая срань, хоспаде, окон нормальных нет, навигация путем вызова глобальных объектов, это же надо было придумать
118 2586411
>>586387
Тут дело не в сглаживании, а в привязке к пикселям при прорисовке векторных шейпов букв. Почему "l" вместо палочки в один пиксель, рисуется три: желтая, черная, и синяя? Вероятно, идет не по центру пикслей. В WPF тоже не все волшебно — нужно подобрать подходящий размер шрифта, чтобы не блюрилось. Может быть так, что одни буквы норм, а другие в блюре.

Так что, на первом месте важно точное попадание в матрицу пикселей. А уж если это никак невозможно, то тогда в ход идет сглаживание. Решать все проблемы сглаживанием — дебилизм.
119 2586420
>>586410
давно винуи стал кросс? ответ - никогда

>>586411

>В WPF тоже не все волшебно


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

А вот у авалонии такой настройки есть. То есть субпиксельное сглаживание вроде есть, но такое себе.
120 2586424
>>586410

>Да кривой, да багованный, зато нативный и красивый!


в чем он нативный? принцип схож с WPF и при этом работает медленнее чем WPF

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

Вообще этот винуи выглядит как урезанный WPF с модерновыми контролами из коробки.
Как будто такие же вещи нельзя сделать в WPF лол
121 2586427
>>586424

> в чем он нативный? принцип схож с WPF и при этом работает медленнее чем WPF


В том, что использует системные контролы, написанные на плюсах.
122 2586429
ДЕСКТОП И ЕБАНЫЕ ВТФ
123 2586438
а ForEach LINQ по скорости такой же, как обычный форич? Выглядит как лишние манипуляции.
2023-01-2512-07-15.png7 Кб, 933x177
124 2586476
>>586420

>TextFormattingMode там Display/Ideal


Hueta, даже VS им не пользуется.
Если, конечно, речь идет про связку
TextOptions.TextFormattingMode="Display"
TextOptions.TextRenderingMode="ClearType"

Да, каждая буква чистенькая, но при этом каждая буква сдвигается до оптимального для рендера места, из-за чего образуются конские щели между буквами. И весь текст выглядит словно дешевка.
125 2586531
Почему uwp не поддерживает net core старше третьей версии? Ещё и ссылаться на не-uwp библиотеки нельзя. Чтобы сделать миграцию бд в этом говне нужно создавать отдельный консольный проект.
126 2586553
>>586531
Легаси говно - легаси дотнет.
127 2586555
Думаю как переделать интерфейс. Как бы это грамотно сделать?

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

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

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

Пока набросал вариант (пик 2). Передавать alias(он же ID аккаунта) каждый раз при get/set не хотелось бы. Лучше его задать один раз в самом Storage.
image175 Кб, 1255x958
128 2586590
>>586555
Не, я какую-то хуйню написал. Не нужно трогать IUserStorage, не нужно добавлять новые сущности.

Нужно просто передавать user id через UserStorageExtensions, если я хочу сохранить какие-то уникальные данные для конкретного аккаунта.
129 2586653
Аноны, нужна либа для конвертации пдф в картинки.
Не ток изображения из пдф, но даже если они текст содержат, то страницы надо в картинки переводить.
Желательно без потери качества
131 2586679
>>586666 (Del)
Украл мою ссылку с гетом!
132 2586696
>>586666 (Del)
Я его уже читал.
Думаю мож реально гостскрипт пдф заюзать, но это юзеру нужно будет это приложение к себе устанавливать...
133 2586702
>>586696
там есть еще апишка для конвертации, но я уже заебался хранить пароли в своем приложении и че юзеру делать, если токен надо обновить, а
134 2586966
>>586476

>И весь текст выглядит словно дешевка.


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

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

>>586427
а толку? такое можно сделать на WPF и работать будет быстрее.
а еще на WPF можно делать и классические, а не только зумерские приложения.
135 2587036
Как фотошоп умудряется держать 30МБ оперативки? Или вот телеграм - 20МБ. Понятно, что если я переключусь, то там подскочит, но как они это делают в режиме простоя? У меня на старте 80МБ и так висит.

Зато наш православный яндекс диск, у которого нет ни интерфейса, ничего, жрет под 500МБ.
136 2587113
>>586097
Ебанулся? Поздно уже, скоро всех на нейросетку заменят
image.png15 Кб, 356x248
137 2587118
Обещал держать в курсе - держу. Прислали ответ, что тот собес с тестом на w3schools прошел, но оффер не дали, а ответили что будут искать подходящий проект. Прошла неделя, я чет скис, пошел искать вакансии в ебларуси на хх и оказалось, что их 2.5 на дотнет. Приуныл еще больше, но резюме свое разослал.
image3 Кб, 630x55
138 2587122
>>587036
Решил глянуть что у меня там. А там виндоус как обычно срёт.
139 2587132
>>587036
У шиндоса есть рабочий набор и выделеная виртуальная память. Они сильно не совпадают. Приложуха может думать, что она себе дохуя памяти выделила, но до тех пор пока она реально не начнет ей пользоваться у нее ничего нет.

Алсо, в нете память занимает рантайм сразу с запасом. Реально твое приложение может ей не пользоваться, но уже на старте она зарезервирована как рабочий набор и готова выделиться по первому new в коде.
140 2587139
>>587118

>3rd technical interview


Ебануться. Я бы и на второе техническое не пошел бы. А тут третье и все для того, чтобы "Мы посмотрим, можно ли тебя куда-нибудь приткнуть"
141 2587150
>>587139
Там пунктуация неправильная. "Третье, техническое интервью". Первым был скрининг с эйчаром, вторым звонок с хз кем просто поболтали о том как красиво писать код, а как некрасиво, а третьим было именно это техническое собеседование.
142 2587182
>>587150
Ну тогда норм.
143 2587193
А как паттерн пайплайн делается с disposable объектами?
Вот есть у меня пдф файл, нужно его разрезать на страницы и я хочу параллельно каждую страницу дальше обрабатывать, как мне из одного метода в другой передать stream, чтобы память не утекала?
144 2587244
>>587193
А не, мне это не нужно даже.
Но вообще, TPL pipeline подойдет для этой задачи?
145 2587258
>>587244
вариантов куча
от заброшенного TPL DataFlow
или же PLINQ
через "заводим несколько очередей и перекладываем по готовности"
до "тупо семафоры навешиваем и радуемся"
146 2587383
>>587258
просто в таски все засунуть и вейт фор алл сойдет для запросов?
Дальше нужно будет их все также обработать и выбрать минимальный правильный
147 2587385
>>587383
да можешь хоть Parallel.For
все зависит от твоей задачи, желания "не занимать потоки больше необходимого" (или плевать на это) и личных предпочтений "люблю вот такую абстракцию".
148 2587386
Я правильно понимаю, что конкретный класс Builder должен в методе Build возвращать конкретный класс, а не интерфейс?
149 2587387
>>587386
Билдер должен возвращать объект, который нетривиально создавать и заполнять самому. Через какие языкозависимые конструкции он работает - похуй, паттерны от языков не зависят.
150 2587388
>>587387
А если он возвращает абстракцию?
151 2587389
>>587388
Да пусть хоть object возвращает. Лишь бы можно было с ним взаимодействовать.
152 2587428
Аноны, есть задача такая, под которую я никак не могу подходящий паттерн подобрать.
Есть базовый класс, который содержит поля и метод, который используется всеми наследниками.
Есть текст, в зависимости от того, содержит ли текст все ключевые слова я хочу создать экземпляр наследника.
Норм будет хранить тип и связанные с ними ключевые слова в каком-нибудь текстовом файле и сделать фабрику, которая будет использовать Activator.CreateInstance() и в зависимости от ключевых слов создавать экземпляр класса.
153 2587429
>>587428
Ну и да, хочу, чтобы если находило один класс, то другие уже не проверяло.
Эт думаю сделать через if с условием.
Наскок это конченный подход?
154 2587432
>>587428
Подход как подход. я такой подход даже в одной книжке видел
Но сам по себе подход говно
Хранить тип где то снаружи и любой рефакторинг грозит сломать этот тип...
понятно что в общем то двигать никто не будет, ведь это как плагины.
но лучше все таки сделать сопоставление

Представь у тебя примитивная система плагинов на уровне палеолита. и делаешь ты ее так
1 заводишь аттрибут PluginKeyAttribute
2 используешь на классах плагина это аттрибут так
[PluginKey("foo")]
class MyClass
3 на старте ищешь все это и заводишь словарик
key=>type
4 используешь в текстов файле уже жесткое что то типа (да как угодно хоть жсон)
foo|param=value
5 по foo ты знаешь тип
155 2587433
>>587428
ну и делать через Activator.CreateInstance() тоже бяка. Можно, просто грязновато. в случае какой то ошибки получишь невразумительное исключение вместо нормального если бы делал нормальные фабрики.
156 2587437
157 2587474
>>587433

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


Фабрики? Типа абстрактную фабрику сделать или как?
158 2587515
>>587474
ну никто не запрещает кроме класса который ты собираешься инстанцировать также иметь и фабрику для инстанцирования
хоть даже статический метод в том же классе с указанием имени метода в аттрибуте, или по конвенции, или еще как.

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

С фабриками кода больше, но и нет неожиданностей. да и проверить файл с параметрами можно не инстанцируя все на свете.
159 2587587
>>585310
>>585408

> IHostedService


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

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


Как за этим следить?

Нашёл в интернетах ещё один вариант через метод расширения для IHost.
Чем эти два варианта принципиально отличаются? Какие +/- у каждого из них?
160 2587603
>>587587

>Как за этим следить?


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

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

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

>через метод расширения для IHost.


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

попутно же IHostedService может получить зависимости, а также есть команда стоп, которая асинковая по сравнению с подиской на завершене приложения.
161 2587633
>>587603

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


Разве порядок вызовов зависит от порядка регистрации?

> покажи о чем ты


Вот так:
https://pastebin.com/Vat2TTzp
162 2587687
>>587633
Контейнер отдаст список в том порядке в каком в него добавляли
Так то метод с Ihost лучше тем что точно сработает первым
163 2588083
Нужно ли в wpf создавать отдельный слой бизнес-логики, который будет работать с базой данных, или можно дёргать контекст базы данных прямо во вьюмодели?
164 2588084
>>588083
Зависит от проекта
165 2588090
>>588084
Делаю тестовое простой список заметок
166 2588093
>>588090
Нужно.
167 2588097
>>588093
И репозиторий нужно?
168 2588110
>>587515
Хм, окей, а как это сделать с фабрикой? Ну примерно, я сейчас не особо осознаю это.
В файлике я могу хранить ключевые слова в виде массива и само название класса наверное или что-нибудь, чтобы указать связь, что если текст содержит эти кейворды, то нужно вызывать либо эту фабрику, либо инстанцировать этот класс
169 2588338
>>588083
DAL слой не такой уж и сложный в реализации и даже если тот кто ревьюит код против, то максимум, что он сможет тебе предъявить, это "я не люблю такой подход" или "у нас так не принято".
А вот за то, что ты запихнешь работу с данными во вьюхи, вероятность того что тебя опустят на-а-амного больше.
170 2588424
>>588338
Спасибо за ответ. Тогда еще вопрос - я для удобства оборачиваю все команды и свойства во вьюмодели в регионы, а затем группирую эти регионы по типу (собственно команды, свойства, поля), как к такому относятся? Слышал, что советуют не использовать регионы.
171 2588457
>>588424
По моему опыту 50/50. Просто те кто пользуется регионами обычно делают это молча, а те кто нет - постоянно высказывются, как они их не любят.

Хотя я раньше тоже любил все поделить на регионы, чтобы было красиво и понятно. А сейчас научился писать код так, что не вижу в них необходимости, за исключеием редких случаев. Все и так понятно.
2023-01-2619-41-30.png45 Кб, 801x202
172 2588496
>>588457
Я часть кода временно заворачиваю в регион, чтобы глаза не мозолило и не утомляло постоянным скроллингом. А потом логически группирую, но чтобы в классе не было больше трех регионов. Шиза, это когда в каждом регионе по 1-2 функции или свойства.

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

>>588424

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


А почему везде пихают команды прямо в тело вьюмодели? Почему не сделать специальный класс-сборщик всех команд? У меня на пикрил есть отдельное свойство Commands, в котором и лежат все экземпляры команд.
173 2588502
>>588457

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


научи и меня тоже...
174 2588508
>>588502
Чудес не бывает. Вместо 30 функций в одном классе у тебя 10 классов по 3 функции.
Ну кроме случаев оверинжениринга, когда ты пишешь "в лоб".
Но говно где-то держать придется — не в регионах, так в папках; не в папках, так в проектах; не в проектах так в библиотеках.
image116 Кб, 989x904
175 2588509
>>588424
Я использую регионы для разделения логики. А разделять регионами поля, свойства и методы не стоит, как по мне. Хотя вот в игровом движке на шарпе так разделяют:
https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/GameWindow.cs
176 2588515
>>588509
Ну отделять поля от классов это действительно абсурд, а вот когда у тебя куча расширенных свойств или свойств зависимостей, то в регион окутываю.
177 2588560
>>588515

>заметаю говнокод под коврик

178 2588564
>>588508
Еще можно говно не писать. Инб4: ряя нельзя
179 2588572
>>588564
Нельзя нарушить закон сохранения говна.
180 2588585
ЗАСТАВЛЯЮТ ПИСАТЬ НА C#

А я питонист вообще-то. Как думаете меня выпрут если отказаться? Так-то проблема не только в языке. Этот сервис написали 10 лет назад с тех пор делали по 3 коммита в код на 10 строчек. Просто чтобы он продолжал работать. Сервис тупа создаёт вмки в облаке и конектит несколько вмок к одной локальной сети. Чтобы уже потом внутри этих вмок можно было кластер из наших сервисов накатить. Это для тестов. По факту я sdet, который тулзы для тестов пишет. Какого хуя мне нужно этот сервис пердолить? Они хотят чтобы я добавил фичу чтобы сервис дополнительные приватные сети на этив вмки накатывал. И обязательно делал это через 1 сетевой интервейс. Просто две сети накатать это пулреквест на 10 строчек. А вот настроить это через один интерфейс это ебать как пердолить надо. Сначала написать опёртку над консольным клиентом, который этими сетями управляет. Сейчас она кастрированая. Потом написать алгоритм выбора сетей из тех, что в облаке заранее созданы. Но нельзя просто спросить что за сети в облаке. Их нужно вручную положить в бд. В майкрасофт cql server. С их ебанутым синтаксисом. Вручную. Потом нужно орм для новой таблицы подключить. Толкьо потом можно алгоритм выбора свободных и подходязих сетей написать. Дальше как сервис создаст недокластер нужно ещё какие-то скрипты написать, которые будут интерфейсы настраивать внутри каждой вмки. И это на сищарпе. Нужно ещё что-то придумать с выбором мак адрессов. И под конец клинап поправить чтобы сначала допсети детачились, интерфейсы помечались свободными в бд и только потом удалялись вмки. Пиздец. На сишарпе это делать. В коде, который 10 лет никто не трогал. И ещё этот сервис гоняется на виндовой вмке в облаке. Без возможности автодиплоя. И без тестов. То есть мне нужно всё это без ошибок написать, собрать проект, скопировать все дллки на тот сервер подменив старые версии и там перезапустить этот сервис. Про ci не слышали когда его делали. Пиздец. Апгрейд с даунтаймом. Без тестов. Вручную. А я питонист вообще-то.
180 2588585
ЗАСТАВЛЯЮТ ПИСАТЬ НА C#

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

Собственно интеграция с докером однозначно делает студию лучшей в моих глазах. А на работе заставляют использовать райдер, блядь
185 2588607
>>588585
Ебать простыню настрочил, тебе больше жаба подходит, чем питон или шарп.
186 2588613
>>588585
Ты какую-то хуйню написал.
Тебе нужно просто написать 2 скрипта на баше. Дергать их шарпом. Все. Нахуя ты вот так вот усложняешь? Ты джун чи шо?
187 2588625
Аноны, как в uwp сделать, чтобы при выборе строки в listview и нажатии enter вызывалась команда из вьюмодели?
188 2588626
>>588607
Просто чела жаба душит учить шарп.
189 2588628
>>588626
Да там ебала жаба питона.
190 2588634
>>588110
А ещё, можно ли полностью отвязать клиент от фабрики?
Чтобы при добавлении нового класса не нужно было менять клиент или уже существующую фабрику?
191 2588636
>>588625

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

или самое тупое - подписка на событие по KeyDown, где ты запускаешь команду из DataContext.
192 2588645
>>588636
В wpf то можно, там вообще много чего можно... А вот в uwp не все так просто. Там нет inputbindings, есть только бехавиоры срабатывающие при нажатии клавиши, но они не работают, по крайне мере у меня.
194 2588650
>>588636

> или самое тупое - подписка на событие по KeyDown, где ты запускаешь команду из DataContext.


Пока так и сделал только previewkeydown, обычный опять же не работает, пришлось добавить в команду проверку клавиши, что по моему нарушает принцип mvvm.
195 2588657
>>588648
Вот это уже интересно, спасибо. Только смущает, что можно вызвать только функции из codebehind, никакого mvvm
196 2588668
>>588650
Мне говорили, что не нарушает.
Там главное правило, чтобы view не переплеталось с modelView. А в загоне view ты можешь делать что угодно, но ты не можешь к примеру пердать экземпляр своего ListView вьюмодели. Собсно смысл в том, чтобы одна часть могла работать без другой и могла быть взаимозаменяемой.

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

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

>>588657

>из codebehind, никакого mvvm


Так метод же находится не во вьюмодели. Че не так? Это может быть написано в partial class твоего view. Ну есть же всякие конвертеры данных. Они тоже частично на шарпе пишутся и успешно применяются в MVVM.
197 2588671
>>588083
В общем случае держать тонкими контроллеры или вьюмодели нужно. вьюмодели и так слишком жирные обычно.

>>588424

>Слышал, что советуют не использовать регионы.


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

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

>>588650

>что по моему нарушает принцип mvvm.


принцип MVVM гласит что вьюмодели не должны знать явно про вид. То есть вьюмодель предоставляет данные, а как и кто их рисует или не рисует, а там вообще тесты - личное дело буковки V
Так что вид может использовать биндинги, может не использовать, может совпадать по структуре с вьюмоделями, может не совпадать - его личное дело и ничего не нарушает.
198 2588695
>>588110
Да ну все просто
1 имя класса в файле хранить плохо. Причина простая - а вдруг ты захочешь его переименовать или еще чего, а если обфусцирую. И даже если ты "мамой клянусь этого делать не буду тут на века", то все равно ИМХО лучше отделить имя инстанцируемого класса от имени в файле. Я не любитель "авось тут у нас все будет хорошо", вон в шарпе некоторая работа с ресурсами, некоторые конфиги используют прямое указание класса с нейспейсами и любой рефакторинг все ломает. Раздражает.

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

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

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

Собственно - да. Вот так бы наверное и сделал.
200 2588857
>>588711

>Фабрики получаешь через интерфейс


Через какой интерфейс?
201 2588906
Какой же линку днище, просто пиздец. И вы этим гордитесь, долбоебики?
202 2588916
>>588906
Жавист порвался от зависти. Бывает
203 2589105
Помогите с дилеммой.
Вот допустим я делаю команды с записью в историю (свою собственную). Допустим одна команда создает папку и делает запись в историю, а другая команда перемещает файлы и делает запись в историю.

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

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

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


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

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

Хз что делать: eсложнять команды (хотя мне хочется их еще сильнее дробить) или засирать память.
204 2589109
>>589105

>Хз что делать: eсложнять команды


усложнять команды *
205 2589280
>>589109
Прям таки усложнять. Команда просто имеет контекст для отмены одного шага. Если контекс это батч операций... ну и что.
206 2589393
>>589105

>ActiveDocument.BeginCommandGroup "My Command"


Сорт оф транзакция да. В винформах что-то похожее есть для любой нетривиальной операции с визульным компонентом. Например написал команду которая свапает два цвета у контролов - установка нового цвета записывается в историю, и получается там две операции при свапе, но команда логически одна. Поэтому появились транзакции - т.е. группы команд которые можно отменить или повторить по требованию. В предельном случае транзакция состоит всего из одной команды, но их может быть сколько угодно.
207 2589457
>>588906
И именно поэтому вы джависты его себе спиздили, при этом еще и криво.
208 2589754
где можно спиздить решарпер? я нищий студент
209 2589783
>>589754
Не нужен тебе решарпер.
210 2589786
>>589783
Двачую. Работаю на визуалке без плагинов и мне заебись.
211 2589787
Звонили из какой-то компании, куда откликался на хх. Сказали офис за городром, но у них есть корпоративный транспорт, курирующий с конечной станции метро. Спросили ожидания по вилке. Сказал 1.6к долларов. Ответили, что "мы в поиске более джуниора для этой позиции и потолок зп для нее 1.2к". После чего со мной попрощались и бросили трубку. Хз, наверное надо было соглашаться на то, что дают.
212 2589788
Что эффективнее: возврат Null или False для случаев, когда нужно к примеру найти какой-то итем?

Я видел где функции почему-то возвращают булевый статус, а объекты результата возвращают через референсный параметр метода. К чему такие сложности?
213 2589798
>>589754
А где взять rider?
Пользовался студенческой лицензией, осталось 14 дней..
214 2589800
>>589798

> Пользовался студенческой лицензией, осталось 14 дней..


Отчислили?
2023-01-2717-45-53.png24 Кб, 771x342
215 2589801
216 2589806
>>589783
>>589786
ну мне говорят жить без него не могут очень полезный
а я пощупать хочу что там за дела вообще
217 2589807
>>589787

>Хз, наверное надо было соглашаться на то, что дают.


Если есть где жить. Если есть хоть какая финансовая поддержка (родители, жена). То для самого-самого старта вполне неплохая сумма.
218 2589859
>>589788

>Я видел где функции почему-то возвращают булевый статус, а объекты результата возвращают через референсный параметр метода. К чему такие сложности?


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

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

>Что эффективнее: возврат Null или False для случаев, когда нужно к примеру найти какой-то итем?


Без разницы на самом деле. Главное чтобы пользователи методов были готовы поймать null или обработать False.
В некоторых случаях хороший вариант возвращать - дефолтный объект-заглушку нужного типа. Тогда даже проверять ничего не надо, ведь с этим объектом алгоритмы идущие дальше не поломаются.
219 2589860
>>589788
Метод find возвращает ienumerable<t>, если ничего не найдено то пустой.
Get возвращает объект, или выбрасывает исключение.
TryGet возвращает результат в виде bool, и значение как out параметр.
Пидарасы возвращают null.
220 2589921
>>588695

> И тут появляется зависимость от порядка значений в файле (минное поле)


Да, я тоже об этом думал, причем один класс может отвечать на несколько кейвордов.

> файлику незачем знать про фабрику


Но фабрике нужно как-то знать о том, как именно эти кейворды ассоциировать с именно этим классом.
А еще как-то нужно собрать все фабрики, в идеале бы не нарушать open closed principle
221 2590287
>>589860

>Пидарасы возвращают null.


Т.е. про FirstOrDefault ты не знаешь?
222 2590323
>>590287
Пидорас, не оправдывайся.
223 2590326
>>589921

>Но фабрике нужно как-то знать о том


Ну конечно нужно. Это ведь сама причина создания этой фабрики

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

фломастеры.
224 2590333
>>590326

> реестре фабрик


Я, если честно, не понял, как оно должно работать.
Есть где-нибудь пример кода, который это реализует, чтобы вас не заебывать вопросами.
225 2590334
>>590333
Кто-то должен уметь конструировать конкретный объект. Значит это в минимуме метод. Куда то этот метод нужно приткнуть.

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

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

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

Не усложняй простые вещи. В этой задаче сложность на уровне "куда положить? да пусть тут лежит, как то пох",
то есть вопрос стоит так - если я добавлю еще один класс, то где мне придется дописывать код, удобно ли это делать и что будет если я забуду написать фабрику для нового типа - на деле ничего не будет, ведь если кодер не имбецил то он хоть раз запустит проверить "как работает код что я написал" и получит ошибку в рантайме и допишет.
image.png22 Кб, 770x183
226 2590358
Окей, аноны. Какие вопросы могут задать на эту вакансию-мультитул?
227 2590467
ну ладно они сделали что можно сделать интерфейсы для статиков
но методы расширения для статиков так и нет (
228 2590496
>>590467
Зачем? Одна из сутей метода расширения — подхватить экземпляр в качестве одного из параметров. В случае со статическими методами в этом нет смысла. Что мешает просто обратиться к методу напрямую?
229 2590502
>>590496
Мешает отсутствие этого самого метода. Приходится заводить разные SomeClassEx
230 2590566
>>590358
Вакансия звучит как древнее говно мамонта.
231 2590568
>>589806

>говорят жить без него не могут очень полезный


Синдром утенка самый натуральный. Вижла не менее удобна.
232 2590709
>>590568
менее.
233 2590721
>>590709
Для новичков вообще похуй.
234 2590730
>>590358

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


"Вы готовы разгребать все это говно?" Это единственный вопрос который они имеют моральное право задать.
Правильный ответ, если что: "Нет".
235 2590958
>>590566
Скорее всего так и есть потому что это банк.
236 2591072
>>590334

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


О, я это уже видел, значит, хитростей тут каких-то нет.
237 2591089
>>591072
хитрость в том что писать тип как строку можно только в некоторых случаях - некоторая работа с ресурсами (плохо, но такой уж дотнет), конфигурация (а это уже плохой подход, но опять же дотнет это) и в логировании (ну тут хотя бы выбора может не быть, ок)

в рабочих же файлах лучше избегать этого
238 2591173
>>590958
Кек. Я даже знаю над чем придется работать по этой вакансии. В моем банке примерно на такой же куче говна вся эта механика крутилась, но сейчас уже все это на .Net6 переписано и другую БД. Плюс очереди на подходе. Правда от XML-к никуда не деться, но тут уже проблема, что это формат ЦБ и от него никак не уйти.
239 2591210
>>591173

>Правда от XML-к никуда не деться, но тут уже проблема, что это формат ЦБ и от него никак не уйти.


Я не понимаю этого, схуяли ваще? Кем это установлено? Почему бы не перейти на нормальный жсон или прото?
1674928817945.gif119 Кб, 300x251
240 2591222
Как в wpf увеличить частоту рендеринга, чтобы при растягивании окна не появлялось пустых полей и мерцания, как например на гифке? Хотя такая проблема не только в впф, я бы даже сказал только в винформах окна растягиваются плавно интересно почему.
241 2591242
>>591210

>Кем это установлено?


Международный стандарт ISO 20022
242 2591247
>>591222
Короче кроличья нора оказалась глубже, чем я думал. Проблема с мерцанием это фундаментальная проблема винды и хуй ты ее решишь.
https://stackoverflow.com/questions/53000291/how-to-smooth-ugly-jitter-flicker-jumping-when-resizing-windows-especially-drag
243 2591262
>>591222
+ Ещё одна причина писать на винформах.
244 2591279
>>591247
Я к херам избавлялся от стандартной рамки окна и делал прозрачным задник.

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

Короче хуй знает чет там запустил.
245 2591284
>>591279

> Это точно впф? Как будто открыл редактор VBA 6. Даже меню похожее.


На гифке просто пример мерцания.

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


Это не у меня лагает, это у всех лагает, ты бы хоть материал по ссылке прочел. Буквально открываешь большинство приложений и будет такая хрень.
bandicam 2023-01-28 22-17-19-423.mp42,6 Мб, mp4,
1144x856, 0:07
246 2591289
>>591284

>На гифке просто пример мерцания.


Это не просто пример, это ответ почему мерцает.

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


У меня не лагает.

>большинство приложений и будет такая хрень.


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

На видеорил самый простой вариант, можно еще лучше.
247 2591295
>>591284
>>591289
... единственный геморный вариант черного фона — при загрузке окна, который возникает даже с опцией AllowTransperency. Тут надо оптимизировать так, чтобы все тяжелое говно разом не подгружалось.

И вообще, я какого-то единого подхода для себя не нашел, вот чернотой при старте я мучаюсь.
248 2591325
>>589860
а если я Maybe<T> возвращаю
249 2591338
>>591325
Зачем тогда полумерами ограничиваться. Возвращай уже нормальный Result<Maybe<T>> и анврапер нормальный не забудь сделать.
250 2591365
Maybe<Result<Result<Result<Maybe<T>>>>>
251 2591427
Пацантры, чем отличается

(T)value
от
value as T

Я только понял, что второй вариант работает только с классами.
252 2591437
>>591427

> (T)value


Если value не типа T, кинет эксепшен.

> value as T


Если value не типа T, результат будет null.
253 2591440
>>591437

> Если value не типа T, результат будет null.


Если T является структурой, то он вообще не даёт скомпилировать. А (T) при этом компилируется.
254 2591442
Кто-нибудь пробовал майкрософтвское OCR? Я так понимаю оно не на всех версиях десятки работает?
255 2591446
>>591442
ОКР? Да, збс, наша тема.
256 2591517
Меня наконец позвали на первое очное собеседование, если возьмут, то предстоит заниматься десктопной разработкой wpf, uwp, win app sdk. Можете накидать тем, которые у меня могут спросить?
257 2591520
Хм, подход засунуть кучу тасков в list, потом делая while(list.Any()) и внутри этого цикла await Task.WhenAny(list) и удалять этот таск из списка нормальный? Потенциально запуская добавляя в еще один список таск и вызывая новый метод через Task.Run() нормальный?
Вроде как выигрывает мне время.
258 2591524
>>591520
Какая то непонятная хрень
259 2591526
>>591524
Ну я просто имею список из тасков и хочу подождать, пока хотя бы один из них выполнится и запустить следующий асинхронный таск
260 2591528
>>591526
У вас запрещают семафоры?
261 2591529
>>591528
Нет, я просто про них плохо помню, можно как-то сделать это лучше с семафорами?
262 2591530
>>591529
Значит нужно вспомнить, а не велосипедить не пойми что
263 2591579
Шарпаны-шарпаны.
Вчера делал HTTP-сервер. Заняло это 3 часа, включая гуглеж, проверку и общение с анончиками в /b/.
Цель была сделать максимально примитивный сервер, который может отдать html-файл из папочки www.
В общем. В /b/ анон сказал что лютый говнокод и меня не возьмут на работу.

Объясните, че не так-то?
https://pastebin.com/QYKrWNsH
265 2591633
>>591520
Task.WhenAll(tasks);
266 2591677
>>582351 (OP)
Слушайте, посоветуйте пожалуйста книг/ресурсов по написанию хорошего кода. Я так-то шарп знаю, но вот максимально редко пользуюсь всякими интерфейсами делегатами и прочей хуйней. А я хочу писать качественный код, который быстрый, удобочитаемый и модифицируемый. Помогите мне!
267 2591680
>>591627
Нет никакой проверки на то, что всё было задиспожено, методы имеют ебанутые названия, отсутствует кодстайл, где-то запятые проёбаны и имеют неодинаковый вид тоже самое с фигурными скобками, нет в названии асинхронных методов слова "Async". Поля раскиданы хуй пойми где и инициализируешь их на месте, а не в конструкторе. Во многих местах - публичные set. В методе Main вообще отстутствует await оператор для метода Process (28 строка).

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

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

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

Ну а вообще в том треде я тебе сказал, у тебя неплохие познания есть, иди устраиваться на работу.
268 2591689
>>591677
Р. Мартин Чистый Код
269 2591693
>>591680

> В методе Main вообще отстутствует await оператор для метода Process (28 строка).


Так и должно быть для обработки нескольких запросов одновременно
270 2591700
>>591689
А еще есть чего? Или этого хватит?
271 2591704
>>591700
Хотяб его осиль.
272 2591708
>>591704
А на будущее..? Я так-то таненбаума осилил, две книги, это думаю тоже без проблем
273 2591717
>>591708
Эх хоть кто-нибудь по перевой ссылке в шапке перешел...

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



Вот еще https://ru.stackoverflow.com/a/474416/422180, надо бы в шапку добавить, чуть позже отредачу пастбин
274 2591762
>>591717
Спасибо

А еще такая фигня, как алгосы изучать лучше? Я просто такой человек который если что то не использует на практике то очень быстро это забывает. А алгоритмы я вообще нахуй нигде не использую... На литкоде решать их?
275 2591766
>>591762
Гугли "Александр Куликов алгоритмы" на ютубе и смотри, совместно читай Кормена 1 издание. Ну если у тебя прям совсем нулёвые знания - то начинай с Грокаем Алгоритмы, а дальше переходи к вышеперечисленному. Совместно с этим решай задачки тут https://projecteuler.net/archives, потом как нарешаешься - переходи к литкоду.
276 2591767
>>591766
Спасибо большое
277 2591774
>>591440

>А (T) при этом компилируется.


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

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

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

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

А уж принимать структуры неизвестного типа — это лютый бред. Это как унитаз прикручивать к потолку.
278 2591776
>>591762
>>591767

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

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

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

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

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

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

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

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

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

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

Параллельно с этим идёшь на какой-нибудь codeforces/informatics/topcoder или любую другую твою любимую площадку с олимпиадными задачи и решаешь-решаешь-решьаешь. В процессе всплывёт ещё куча неупомянутых мной более мелких алгоритмов (например, я вообще ничего не писал про всякую теория чисел типа решета эратосфена, поиска нод-а и тому подобных вещей). Всё это доботываешь по ходу дела. Хороший ориентир - способность стабильно решать на кодфорсесе задачи под номерами 3-4 из div2. Это уровень при котором ты будешь железно проходить алгоритмические секции вообще не парясь (я бы даже сказал, что это оверкилл, потому что на алго. секциях обычно дают задачи по типу литкода, а они всё же несколько проще, чем олимпиадные в большинстве своём).
278 2591776
>>591762
>>591767

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

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

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

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

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

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

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

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

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

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

Параллельно с этим идёшь на какой-нибудь codeforces/informatics/topcoder или любую другую твою любимую площадку с олимпиадными задачи и решаешь-решаешь-решьаешь. В процессе всплывёт ещё куча неупомянутых мной более мелких алгоритмов (например, я вообще ничего не писал про всякую теория чисел типа решета эратосфена, поиска нод-а и тому подобных вещей). Всё это доботываешь по ходу дела. Хороший ориентир - способность стабильно решать на кодфорсесе задачи под номерами 3-4 из div2. Это уровень при котором ты будешь железно проходить алгоритмические секции вообще не парясь (я бы даже сказал, что это оверкилл, потому что на алго. секциях обычно дают задачи по типу литкода, а они всё же несколько проще, чем олимпиадные в большинстве своём).
279 2591802
>>591776

>(то же для прымых и окружностей)


Смотрел стрим Tsoding-а про анти-алиазинг геометрических фигур. У меня вопрос: почему все начинают дрочить на кружки и прямоугольнички, вместо изучения того же самого для кривых безье, которые могут быть и кружком, и треугольничком, и небом, и Аллахом?

Я смотрю на этого Цзодинга, как он сперва голову ломает над алгоритмом сглаживания для кружка, потом как голову ломает над алгоритмом сглаживания для треугольничка и у меня кровь течет из глаз. Ну напиши ты алгоритм для безье один раз и он будет работать везде. Не хочу, хочу жрать говно, хочу чтобы у меня появился ромб и я сидел бы час и переписывал бы все заново.
image24 Кб, 643x169
280 2591807
>>591774

> А уж принимать структуры неизвестного типа — это лютый бред. Это как унитаз прикручивать к потолку.


Подскажи тогда, как тогда лучше реализовать пикрелейтед?

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

Создавать каждый раз объекты при вызове Get не вариант, ибо это мобилки и лучше не дёргать лишний раз GC.
281 2591874
>>591807
Ты при реализации интерфейса указываешь конеретный тип или так и оставляешь структурой?

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

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

Можно сделать перегрузки, если у тебя не зоопарк структур.
282 2592214
Шарпаны, я пришел к вам с двумя вещами.
Во первых - в шарпе нет динамических массивов? Чет гугл по запросу динамик аррэй выдает только си и плюсы.
Во вторых - я сейчас читаю книгу каких то ебаных болгаров полупидоров и мне уже неистово подгорает. Они бросают тебе задачу и в подсказках пишут "пиздуй в интернет". Короч задача реализовать вот эту хуйню
https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
до десяти миллионов. КАК БЛЯДЬ? Мне че массив на 10 миллионов ячеек создавать чтоб у меня комп утонул нахуй?
Те решения что я находил в интернете довольно элементарны но мне они нихуя не помогают потому что они идут до N Где N не больше тысячи. А мне надо 10 блядь миллионов лимит.
То есть заносить в массив каждый результат умножения на простое число. А потом смотреть каких чисел нет в массиве те и простые.
Я не могу подсчитать сколько простых чисел чтобы сделать массив, я конечно же не буду делать массив на 10 миллионов ячеек, и я не знаю как в си шарпе сделать динамический массив а задать длинну массива заранее я не могу ибо не знаю сколько членов в нем будет.
нахуйболгар.png36 Кб, 579x542
284 2592243
Короч в рот ебал болгар, вот моя реализация, похуй ваще.
285 2592256
>>592243
Нихуя не работает выше 120, тут короч надо сохранять новое простое число и потом добавлять проверку его деления по модулю
286 2592257
>>592214

> в шарпе нет динамических массивов?


дохуя, к примеру List
287 2592263
>>592214

> динамических массивов


Вместо них используют коллекции, всякие List, Dictionary, HashSet и т.д. Размер заранее неизвестен, добавляй туда сколько угодно элементов, коллекция будет автоматически изменять размер.
288 2592271
>>592214
Ехал дебич через дебич, видит дебич в реке дебич.

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

Что мешает загуглить сперва какие коллекции и массивы бывают в шарпе?
289 2592283
>>592243
Алгоритм Профана
primes.png61 Кб, 827x923
290 2592343
Короч запилил такой говнокод и он работает но у меня место кончилось в массиве, даже до 1000 не дошло.
291 2592345
>>592283
Я и есть профан, чел, первый семетр шараги.
>>592278 (Del)
>>592263
>>592257
Понял, буду гуглить
>>592271

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



Руки из жопы
292 2592366
>>592360 (Del)
Вот я и хочу подзадрочить алгоритмы. Есть какая-то книга на примете?
293 2592369
Вот этого не слушай >>592360 (Del) твой матан и алгоритмы никому нахуй не нужны. Ах да, через пару лет всех кодеров заменит ии, так что лучше учись на токарном станке работать, щегол.
1675004312133.jpg21 Кб, 363x504
294 2592371
>>592366

> Есть какая-то книга на примете?

Стикер255 Кб, 512x375
295 2592377
>>592345

>Я и есть профан


Да я в шутку, типа делал алгоритм Эратосфена, а получился алгоритм Профана.
296 2592382
>>592378 (Del)
>>592371
Пасиб
>>592377
Тонкая шутка
297 2592389
>>592369
Короч я понял, надо посыпать голову пеплом, повесить на себя табличку "the end is nigh" и кричать на жд вокзале что скайнет грядет.
298 2592401
>>592371
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

вот на рутрекере нашел если надо комуто
299 2592404
>>592393 (Del)

>в большинстве задач


Поражало, что люди сперва ориентируются на большинство, а потом скулят от конкуренции. В любой области болшинство хуи пинают и нажимают одну кнопочку. Хочешь плыть в эту сторону — флаг тебе в жопу.
300 2592423
>>592393 (Del)

>единственное


Был почти в десятке проектов с совершенно разными стаками, и у всех была единственная проблема - разваливающийся под собственным весом говнокод, который невозможно поддерживать.
Вместо мудреного алгоритма ты можешь захардкодить какой-нибудь массив на миллион значений, и оно будет работающим и поддерживаемым.
Но если ты систематически делаешь даже мелкие косяки в архитектуре, проекту пизда. Через N лет в него просто невозможно будет вносить изменения.
301 2592424
>>592343
Че тебе мешает делать лениво?
1675007986695.jpg29 Кб, 384x320
302 2592481
303 2592509

> IStringLocalizer.


Нахуя? Просто пишешь расширение строки, например LocaliseThis(), которое считывает локаль, находит нужную строку в жсоне и возвращает ее.
304 2592555
>>592382

>Тонкая шутка


тонкость уровня /b/
305 2592681
>>591633
Оно медленнее работает на пару секунд.
Ибо ждёт всех тасков, а так ждёт любой таск и работает дальше.
306 2592984
>>591530
Подожди, а нахуя мне семафор вообще
307 2592989
>>592984
Потому что для программиста фраза
"хочу подождать, пока хотя бы один из них выполнится и запустить следующий"
переводится как
"хочу выполнить много тасков но с лимитом одновременного выполнения"
308 2593000
>>591520
Можно кстати не как анон говорит с семафорами а так.
У тебя есть 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;
}
309 2593002
>>593000
>>592989
бля, заинтриговали, попробую семафор написать
310 2593015
>>593000
Никогда так не делай.
311 2593046
>>592989

> "хочу выполнить много тасков но с лимитом одновременного выполнения"


А причем тут лимит одновременного выполнения? Я не отсылаю десятки тысяч реквестов к API, чтобы это не было необходимо.
В лучшем случае всего 16 реквестов
312 2593048
>>593046
называй как хочешь, суть это не меняет
если ты ждешь окончания задачи чтобы начать новую - значит ты лимитируешь выполнение. Например, тредпул - он заканчивает одну из тасок, удаляет ее из своей внутренней очереди и начинает новую.

Разницу видишь с твоим описанием? А разница не суслик - ее нет
313 2593058
>>593048

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


Не, мне просто нужно дождаться, пока апишка вернет значение, чтобы я мог это значение в другой асинхронный метод передать.
314 2593061
>>593058
так дожидайся и передавай
не изобретай велосипеды для несуществующих проблем.
315 2593062
>>593061
Ну просто это разными методами можно сделать, я хочу по мере поступления, а так можно все таски дождаться и запустить батч из следующих тасков
316 2593086
>>593062
ну делай по мере поступления
OrderByCompletion в виде "хочу чтобы удобна" легко гуглится
http://sergeyteplyakov.blogspot.com/2015/06/process-tasks-by-completion.html
также есть тут https://github.com/StephenCleary/AsyncEx

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

сам я такое не юзаю ибо ссылки выше, да и хотелки побольше (лимит выполнения и лимит очереди (ну не люблю я подход когда миллион задач сразу становится в очередь и другим не советую))
dplTLrXAKA.jpg100 Кб, 958x540
317 2593318
Что вообще спрашивают на собесах веб разработчика с 4 годами опыта? У меня ток 1.5, но позвали туда где требуется 4.
318 2593321
>>593318
не понял юмора, ведь (a + b)2 = a2 + 2ab + b2

мимо аутист
319 2593587
>>593015
И чому же?
Нормальная практика.
Допустим, у тебя есть задачи, которые надо в фоне обработать. Ты их в очередь пишешь. Ограничиваешь число обработчиков, в зависимости от ресурсов сервиса. У очереди - делаешь лимиты, чтобы не было переполнения, либо выталкиваешь старые задачи, которые уже "протухли". Собственно, все, обработчики - по мере сил - берут в обработку задачу, обрабатывают, потом идут за следующей.
Так много где делается.
320 2593597
>>593058

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


Почему нельзя просто:
var resA = await fooA();
await FooB(resA);
?

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

Если тебе нужно много таких.
То в цикле просто запускаешь задачи. Добавляешь в список.
Потом Task.WhenAll(tasks);
321 2593599
>>593587
потому что проверять в цикле на "есть чё" это дичь. Это противоречит самому принципу await

Это как заказать пиццу и каждую минуту выбегать из квартиры проверять не несут ли вместо тупо открыть когда позвонят.
322 2593609
>>593599

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


Можно без есть чо.
Делаешь у очереди семафорчик. Какой-нибудь SemaphoreSlim. При добавлении - релизишь. При взятии задачи в обработку - входишь.
Обработчик - делает:
while(true){
var task = await _queue.GetTask(cancellationToken);
try{
await task(cancellationToken);
}
catch(Excetpion e) {_logger.Error(e); }
}
323 2593623
>>593609
Конечно можно. Ведь именно семафор и был предложен )

хотя конечно над семафором/очередями много разного наворотили более высокоуровненого
324 2593687
ребят, пояснитe за ML.NET. Перспективная технология или очередной высер майков, чисто бы было?
325 2593691
>>593687
технология найс, скоро все буду кодить нейронки на шарпах, а питон отомрет нахуй, так что смело вкатывайся
326 2593707
>>593691
Вот ты его троллишь. Но сама-то технология - действительно крутая. Другое же дело, что пистон - слишком уж дохуя всего захватил.
327 2593743
>>593687

> очередной высер майков


Подозреваю что это. Веры нет в их начинания учитывая что они уже в шестой раз переделываю гуй и скачут по версиям как хоромоги.
328 2593908
>>593587
Так даже решают проблемы многопоточной записи в файл или другой ресурс. Делаем очередь куда пишут потоки, запускаем параллельно таску в которой пишем в файл получая данные из очереди по одному.
Можно писать и многопоточно, главная фишка отсутствие кода синхронизации в рабочих потоках и следовательно ОЧЕНЬ дорогих остановок и запусков потока на ядре. Зато на задержки потоков вывода нам насрать пусть подтармаживают
329 2593938
Пацы, что скажите про Azure Functions? Стоит ли вообще использовать эту штуку? Кое-как через друга из другой страны создал аккаунт и смог на бесплатном тарифе запустить демо. Функционал очень скудный. Но зато всё просто.

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

Мне нужно обрабатывать около 20 млн API запросов в день. На Азуре это выйдет мне примерно в 350 баксов в месяц. На своём amazon сервере без понятия во сколько это обойдётся и не будет ли дрочки с превышением трафика.
330 2594035
>>593938

>asp.net core


Ты же в курсе, что можешь вообще на любом серваке такие приложения развернуть. Т.е. ты тупо выбираешь сначала тот который потянет твои 20 млн в деньЕсли не секрет, то что?, и деплоишь туда.
image.png99 Кб, 740x593
331 2594046
>>593609

> await _queue.GetTask(cancellationToken);


Это что-то, что я сам должен написать или есть готовое?
Кста, видел этот код, это же хуйня какая-то, если что-то действительно выкинет ошибку, то семафор никогда не релизнется.
Надо ли в таких случаях semaphor.Release() помещать в catch?
332 2594055
>>593321
В том и шутка, что "я не знаю почти ничего, а то что знаю - неправильно".
333 2594062
>>594046
всегда нужно помещать в безусловное выполнение вида finally, ContinueWith, using (для асинксемфоров, стандартный в using не умеет)
334 2594068
>>594046

> есть готовое?


Можешь https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.channels.channel-1?view=net-7.0
Использовать.
По хорошему - надо свое писать.
335 2594119
Зачем нужно вызывать WaitForPendingFinalizers после вызова сборщика мусора? У Троелсена указано, мол это для гарантии, что к освобождаемым ресурсам никто не обратится, но ведь к ним и так никто не сможет обратиться, потому что собираются только те ресурсы, на которые нет ссылок.
336 2594176
>>594119
Что бы из другого потока не достучались до удаляемых объектов.
337 2594200
>>594176
кто не достучался?
338 2594397
Можно ли хуячить стили для интерфейса программы в WPF, как для вёба это делается, с таким же по сути безграничным функционалом?
339 2594432
>>594397
WebView/WebView2
340 2594436
Почему массив кидает ошибку при выходе за его границу, а не просто считывает данные дальше?
341 2594440
>>594436
Какие данные? Массив кончился, какие данные могут быть после конца данных?
342 2594455
>>594440
Случайные. Как в си и крестах.
343 2594459
>>594455
Шарп - не си и не кресты.
344 2594516
Кто-нибудь имел дело с библиотеками devexpress и foxit? Интересует работа с документами, преобразование в pdf и т.д. Расскажите о своём опыте, какую из них лучше выбрать?
345 2594518
>>594455
через unsafe обратись
1123.jpg14 Кб, 500x470
346 2594565
MVVM. Ситуация - пикрилейтед: дан некий список с тремя итемами, у каждого итема есть чекбокс. Состояние чекбокса должно быть связано со свойством модели.

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

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

Как такое дерьмо разруливается в MVVM? Как выполнить действие если изменилось свойство?
347 2594574
>>594565
В шаблоне итема биндиш чекбокс к команде и передаешь ей номер элемента.
348 2594576
>>594574

> биндишь


Фикс
349 2594577
>>594565

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


Переопределяешь datacontext для элемента.
350 2594598
>>594574
>>594577

>В шаблоне итема биндиш чекбокс к команде и передаешь ей номер элемента.


>Переопределяешь datacontext для элемента.


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

Модель тоже не знает ничего про вью-модель.
351 2594604
>>594598

> Итем соурс шаблона - модель, а не вью-модель.


Ну так фикси свой говнокод.
352 2594607
>>594598
Что значит не можешь? Для любого элемента можно определить любой контекст данных.
353 2594620
>>594604
В смысле фиксить, если так по инструкции?

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

>>594607

>Для любого элемента можно определить любой контекст данных.


Ну да, и он у меня как контекст итема списка вьюмодели. Он не видит все что выше по условной иерархии. Это надо что-то типа RelativeSource до уровня Window.
354 2594703
>>594620
Все, так и сделал. Обратился по имени к элементу выше и забрал у него дата контекст.
355 2594762
>>594703
Ну и варианты где вьюмодель списка подписана на события вьюмодели итема через обычное событие или INPC также абсолютно нормальные (главное не забывать про отписку, если она нужна).
356 2594810
>>594762

>на события вьюмодели итема через обычное событие


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

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

К тому же в WPF подписка автоматом подчищается, правда ведь?
357 2594838
>>594810

>К тому же в WPF подписка автоматом подчищается, правда ведь?



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

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

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

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

Предложите мне нормально решение-то. Я заебался уже. Месяц ебусь. Начинаю чувствовать себя профнепригодным.
359 2594941
>>594905
InnerId используется как индекс, можно вкорячить логику отдачи пользователей отсортированных по возрастанию, а сам айди удалить нахой.
IntegrationId использовать как обычный айди, обычный айди удалить.
360 2594945
>>594905
А вообще я бы мамкиным архитекторам, которые придумывают такую ересь, покупал билет домой в индию.
Хотя у меня в тиме ребята, в целом адекватные, тоже часто норовят плдобную хуйню куда-нибудь вкорячить.
361 2594948
>>594941
В смысле просто через yield return отдавать пользователей по очереди, игнорируя значение innerid
362 2595102
>>594905
При удалении заменить удалённого на последнего в таблице, последнего удалить.
363 2595179
Что потенциально может быть не так с пдф файлом, что гугл драйв отказывается его через запрос принимать? Программы его открывают, попробовал из него картинку вытащить и сохранить ее как пдф и все норм, гугл ее принимает
364 2595218
Это опять я с вопросами про вопросы на собес. Какие advanced level вопросы задают по шарпам и дотнету?
Завтра собес, я весь метанит и мсдн перечитал, но жутко нервую.
365 2595257
>>585733
vs code + аддон c#
366 2595273
А студия может что-то кешировать и не собирать проект полностью?

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

Я конечно видел кнопку "перестроить решение", но я думал, что студии хватит ума перестроить тот проект, в котором я внес изменения.
Стикер63 Кб, 200x200
367 2595280
>>595218
Не знал, что метанит - advanced level.
368 2595285
>>595218

>но жутко нервую.


А чего нервничать? Завтра и узнаешь какие будут вопросы. Как будто у тебя первое и последнее собеседование.
369 2595390
>>595218
У меня сегодня был собес. Спрашивали про дженерики, я не смог толком ответить сказал, мол, это классы, которые помимо аргументов конструктора принимают также аргументы типа и работают с этими типами, ещё спросили про await, я переволновался и сказал, что это просто ожидание выполнения функции, про возвращение управления не сказал. Ещё не смог толком объяснить суть внедрения зависимостей хотя использовал его в тестовом, также спросили устройство листа, и тут я завалил. Впрочем меня все равно пригласили на тестовую неделю и даже предложили больше, чем я просил изначально
370 2595429
>>595390
Поимел немножко удачи. Молодец.
371 2595495
>>595218
Прочитай справочник Абрахами (можно краткий). Теперь ты самый умный.
372 2595544
>>595495
Не гуглится
373 2595628
>>595544
Джозеф Албахари.
По C# 9.0 есть Полный справочник и краткий. В первом около 1000 страниц, во втором 200.
374 2595784
Бля, чо .net совсем сдох?

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

Ладно бы просматривали, видели красные флажки и уходили, сука, даже просмотров мало. 1-2 в день.
.jpg254 Кб, 1280x1919
375 2596034
>>595218

> 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 в конфиге для прода. Место на сервере заканчивается. Какие действия предпримите и какие меры будут приняты, чтобы подобного не повторилось?

Нужно производить локализацию ответов бекенда, на основе геолокации запроса. Как будете это делать?
.jpg254 Кб, 1280x1919
375 2596034
>>595218

> 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 в конфиге для прода. Место на сервере заканчивается. Какие действия предпримите и какие меры будут приняты, чтобы подобного не повторилось?

Нужно производить локализацию ответов бекенда, на основе геолокации запроса. Как будете это делать?
376 2596061
>>596034

> (new Thread((_)=>A.Run())).Run();


(new Thread((_)=>A.Run())).Start() конечно.
Без подсказок - хуево(((
377 2596147
>>596034

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


И каков правильный ответ? Роллинг логов не решение этой проблемы, а уволить еблана или закупить дисков мы не имеем полномочий. А настучать по кумполу поучительно, но тупиковый путь
378 2596157
>>596034
Как хорошо что ты не проводишь собесы. Одно ебланство какое-то.
.jpg158 Кб, 1280x1920
379 2596178
>>596147
Вопрос же на то чтобы посмотреть как будет рассуждать кандидат. Имеет ли он вообще опыт в таких задачах. Какой уровень инфраструктуры был у него не прошлых местах работы и че он там делал. Потому что может быть он там 5 лет жсоны гонял, а грейды ему давали за "лояльность", а не потому что как специалист рос.
Из того как решать, по очевидным подходам: поднять запасной сервер, в котором такой хуйни нет, и перенаправить трафик туда, пока чиним тот что засран.
Из мер, тоже очевидных - пайплайн переработать, репы разделить, чтобы конфиги лежали отдельно от основного кода, политики пересмотреть, чтобы кто угодно не мог лазить и править конфиги.
Хороший мидл - уже сталкивался с этим, и как минимум проговорить то что дядьки вокруг делали - может.
>>596157
Обычные вопросы для мидла+, стремящегося к сеньеру. Если чел на вопросе про строки, потоки посыпался - уже можно скипать, это джун-самозванец. Дальше - оцениваем какие проблемы решал в реальной жизни, как рассуждает, какие решения предлагает и либо повышаем планку начального грейда, либо понижаем.
380 2596286
>>596034

>Каков размер строки "12345"?


Зависит от кодировки 5-10байт, но вроде для энтих буков также само.

>Чем будет отличаться выполнение Foo1 от Foo2?


Скоростью?
Я у себя в методе сохранения истории действия требую массив, чтобы был доступ к length и чтобы компактнее было.
381 2596291
>>596034

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


Класс или метод?
382 2596302
>>596291
видимо речь идет про реализацию INotifyCompletion
383 2596305
>>596286

>Зависит от кодировки 5-10байт, но вроде для энтих буков также само


у дотнета utf-16, на символ 2 байта + хидер конечно.
384 2596319
>>595179
Понял, что не так.
Гугл не хочет запросом принимать пдф файл версии 1.3.
Кто знает, есть ли способ обновить до 1.4 хотя бы И нет, изменить заголовок не сработает
385 2596392
>>596319
Пересохранить документ программно мс-офисом или еще какой залупой?
386 2596393
>>596392
да походу придется гхостскрипт ставить
387 2596417
>>596393
Какой еще скрипт? Из шарпокода это сделай. Будь мужиком!
388 2596438
>>582351 (OP)
Антончик, подскажи по ключам для вижлы.
Например у меня на офисном компе стоит Visual Studio Enterprise. Я например знаю ключ продукта и это единый ключ для всех установок в офисе.

Что в теории произойдет если я дома на своем компе установлю такую же и попытаюсь активировать её этим ключом?
Смогу ли я вообще её так активировать?
Запалит ли меня работодатель? (по количеству установок например или еще как сможет посмотреть)
Сможет ли он обрубить ее, так что вижла в тыкву превратится?
389 2596460
>>596034

> i++


Может всё-таки a++?
390 2596528
>>596417
Да ебать, на написание этого уйдет больше времени и сил, чем на весь остальной проект
391 2596548
>>596438
Ну наверно по количеству установок, когда очередному сотруднику будут выдавать ключ. Но тут вообще вопрос к подходу твоей компании. Обычно никто ключи не раздает офисному быдлу направо и налево, для этого есть специальная должность, идет учет кому выдали ключ, кому нет — именно по той причине, что есть такие гниды навроде тебя, которые пользуются чужим доверием. Т.е. здесь речь идет о какой-то микроконторке, которая купила ключ на авито и ей вообще похуй на последствия. В таких микроконторках можно пойти к боссу и попросить для работы.

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

Если у тебя ключ установлен неофициально, то отличий нет от спизженной.
392 2596552
>>596528
Но блять, я так не люблю ебаться с гостшарпом и остальной хуйней, это надо будет дополнительно к приложению устанавливать его, нужно сохранять файл, читать из файла, удалять файл, эх.
393 2596562
>>596548

>есть специальная должность, идет учет кому выдали ключ, кому нет


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

Ну а если сиадминчек раздает ключи вообще всем, не установив, так сказать, эмоциональную связь с каким-то конкретным индивидом-крысой, то такого сисадминчега надо увольнять вовсе. Если только в компании все эти ключи - пыль в глаза.
394 2596567
>>596562

>все эти ключи - НЕ пыль в глаза*

395 2596688
>>596548
>>596562
Воу-воу. Ну че сразу в крысу-то.
Никто мне ключ не доверял, я его честно спиздил.
396 2596754
>>596688
Ну тогда от этого ключа тебе ни тепло не холодно. Можешь так же за копейки купить ключик на авито. Проеб заметят когда захотят зарегистрировоать нового юзера, а свободных не окажется или будет меньше предполагаемого.

Могут ли превратить в тыкву? Хз как в вижуал студи, но вероятно сбрасывается для всех и регистрируется заново, но уже по уму сисадмин собственноручно регистрирует и ведет отчетность.
397 2597217
Если какой-то цикл 100500 раз подряд меняет значение переменной типа int, но по факту уникальное значение меняется всего несколько раз или вообще не меняется, то уместно ли делать проверку переменной по типу "если текущее значение переменной != новому значению, то присвоить новое, иначе пропустить", или нет ничего зазорного в спаме переменной?
398 2597239
>>597217
Компилятор сам за тебя сделает лучше.
399 2597280
>>597217
Нет это херь, братиш. Одно присвоение буквально одна реальная инструкция проца, а проверка условия и присовение это целых три инструкции из-за чего станет немного тормознее.

Тут правило орков во все поля: красное едет быстрее чем меньше код тем быстрее он работает.
400 2597283
Привет всем! Решил я углубится в изучение программирования, а именно в С# для начала. Посоветовали мне канал Simple Code, а также руководство от Metanit. Возможно, Вы можете дать годные советы начинающим, а именно какие руководства, книги или каналы лучше всего глянуть для полного понимания той или иной темы?
И ещё такой вопрос: Не поздно ли я начал изучать в 17 лет? А то вечно этот вопрос гуляет в голове и не даёт покоя. Всех благодарю за ответы
401 2597288
>>597283

>Не поздно ли я начал изучать в 17 лет?


Это не смешно. Хватит троллить.
402 2597448
>>597283

>Не поздно ли я начал изучать в 17 лет


Самое время наоборот, к 20 лет уже будешь иметь 3 года, по сути мидл.
.png5,6 Мб, 2000x3000
403 2597461
Назрел сложный вопрос.
Чем на шарпе можно тестировать контракты апи?
Я уже заебался. Привыкли, блядь, люди делать монолиты, что если что-то сломаешь, то везде пиздец. Потому, если у них собирается - ну и похуй, я же свою работу сделал)))
Собственно. Я, могу поступить как крыса, начать стучать управленцам, но понимая как думают управленцы - они забюрократизируют все это дело и, скорее всего назначат меня следить, чтобы апи чужое не ломалось.
Очевидный заеб и я ебал это в сраку.
Потому, первое что хочу попробовать - это протолкнуть идею с тестами апида, блядь, я с трудом юнит-тесты протолкнул, пиздец сколько воевать пришлось, но теперь полегче жить стало, когда детские ошибки сразу фиксятся, и можно джунов посадить реально что-то полезное для других делать, а не придумывать им работу, чтобы УЧИЛИСЬ. Но очевидно же, что если их нужно будет вручную постоянно делать - все забьют. Потому - жду предложений чего-то в духе Spring Cloud Contract, но для шарпов. Можно конечно надрочить постманом и проганять так. Но ХЗ, не думаю что те кто забывают сами проверить, что их изменения ничего не сломали - будут постманом тестировать это.
2556.png7 Кб, 561x203
404 2597679
С удивлением заметил, что индусософт продолжает тянуть поддержку очень старого .Net 3.5 и там с ним рядышком четвертый притаился. Это означает, что уютный десктоп можно пилить вполне комфортно на древнейших версиях .Net'a и не скакать бесконечно по версиям Net Core/Net Standard каждые пару лет, порожденных исключительно больной фантазией маркетологов. С - стабильность. Стал еще более убежденным старовером.

Единственно что не радует - неразумные писатели библиотек зачем-то завышают требования к своим поделиям. Нахуя они это делают и главное зачем непонятно.
405 2597709
>>597283
ulearn.me
406 2597822
>>597679
Затем что никому не в радость поддерживать устаревшее
407 2597863
>>597822

>поддерживать устаревшее


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

Вокруг того же .Net 3.5 давно нет толпы хипстеров с шилом в жопе и тягой бесконечно улучшать все и вся, и знаешь, жить как-то спокойне. Если ты нашел на гитхабе что-то что под него работает, то это будет просто работать годами, а не ебать мозг обновлениями, сломаными апи, апдейтами безопасности, сетевыми холиварами призывающими перейти на что-то другое, вбросами маркетологов/евангелистов нахваливающих всю эту парашу и прочим суетливым булшитом. Просто работает и все! Охуенчик же. Есть конечно обратная сторона в виде 150 незакрытых багов которые не починят никогда. С ними можно жить ведь они тоже навсегда, а не каждый раз новые с каждым релизом.
408 2597870
>>597863
Именно что кажется
Новые фичи дают возможность переписать проще и оптимизировать.
409 2597939
>>597870

>Новые фичи дают возможность переписать проще и оптимизировать.


Но по факту ты тратишь столько же времени, потому что частота переписывания увеличивается.

Насчет оптимизации тоже спорно, ибо оптимизируют в одном месте, но в то же время пытаются сделать некоторые вещи проще или гибче в использовании, что наоборот ухудшает производительность. Тот же WPF никак не проще винформсов, даже из коробки — из-за попытки быть гибким и универсальным одновременно. Там одними только словарями ресурсов можно похерить все сбереженные миллисекундочки.
410 2597943
>>597679

>Стал еще более убежденным старовером.


Это возраст чел. Но я порой с грустью вспоминаю эти "бесполезные" метания с молодой горящей жопой, когда время казалось бесконечным. А с попытками все рационализировать приходит застой и эффективной деятельности становится не больше, чем раньше.
411 2597969
>>597939

>Но по факту ты тратишь столько же времени, потому что частота переписывания увеличивается


Не увеличивается, никто ведь не заставляет переписывать.
>>597939

>Тот же WPF никак не проще винформсов, даже из коробки — из-за попытки быть гибким и универсальным одновременно.


Он гораздо проще. Просто попробуй сделать интерфейс со всплывающими меню, переключением страниц и анимациями и там и там, а потом сравни затраченное время.
412 2597982
>>597863

>Есть конечно обратная сторона в виде 150 незакрытых багов которые не починят никогда.


Ты забываешь еще один ньюанс - отсутствие поддержки для современных решений. Возникнет у тебя например необходимость сделать интеграцию с каким-нибудь сервисом по grpc, и соснешь ты со своим 3.5 с проглотом.
020320231449JRscbunfxBdevenv.png94 Кб, 816x947
413 2597995
Подскажи в каких случаях будет копирование стуктуры. Как это обнаружить? Можно ли его избежать?
414 2598021
>>597969

>потом сравни затраченное время


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

Что касается затраченного времени пользователя, то на старых версиях просто не делают то, что геморно.
415 2598024
>>598021

>Затраченное время для кого?


для программиста. На WPF элементарно делают вещи, которые на формсах ты будешь неделю пилить и то получится хрень. ну да, формсы работают быстрее, но я к этому времени уже получу деньги и уеду в закат, а ты будешь продолжать пердолиться с OnPaint
416 2598033
>>597995

>Как это обнаружить?


круто знать теорию, но ее никто!!! не знает. всякие там тулзы разве что но то такое

>Можно ли его избежать?


ref (и в параметрах методов и локал), in, readonly
417 2598054
>>597995

>Подскажи в каких случаях будет копирование стуктуры.


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

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

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

Короче, если ты уверен что данные всей твоей структуры будут использованы на 100%, то проблем нет.
418 2598252
Народ, кто-то знает, как создать lic файл?
419 2598254
Как создать lic файл, кто-то может подсказать?
420 2598263
>>598254
В текстовом редакторе.
421 2598277
>>598263
А смысл создавать lic файл Тогда, почему не оставляют текстовый?
422 2598289
>>598277
Формат — это отличительный знак по сути, потому что имя может быть каким угодно.
Как по твоему программа будет искать файл и вообще распознавать каким образом его читать?
423 2598470
>>597995
https://devblogs.microsoft.com/premier-developer/avoiding-struct-and-readonly-reference-performance-pitfalls-with-errorprone-net/

вот так все плохо. расширение давно не обновлялось в нюгет
со студией 2022 вообще хз
а прочтение статьи оставляет желание забить на этот вопрос
424 2598636
>>597863

>апдейтами безопасности


А потом тебе нужно пройти аудит в СБ ИТ для релиза приложения. И ты сосешь хуи.

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


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

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

Через биндинг получается очень уж геморройный мицелий привязок. Событием тоже срать как-то не комильфо.
426 2598891
>>598758
Запихнул в базовую модель. У каждой дочерней вьюмодели пришлось таки реализовать свойство Parent и по этим парентам добираюсь до базы и меняю оригинал.

Более простого подхода без гемора я не нашел. Еще бы автоматом родитель назначался.
427 2599064
>>598891
ну у тебя же пет проект. там свобода и можно перешагнуть через каноны

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

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

сложно сказать удобно ли, ведь теперь после того как такой контроллер что то поменял он должен всех уведомить, что добавляет уже другого гемора.
428 2599075
>>598758
Называется настройки приложения, ты можешь сохранять в выделеном хранилище любые данные приложения и получать к ним доступ путем инъекции зависимости. При внедрении тебе соберет объект настроек и выдаст его.
429 2599118
>>598758
Почитай про внедрение зависимостей и IOptions
430 2599231
>>598758

> К примеру если я хочу реализовать галочку "Больше не показывать это окно".


Делаешь статичный класс GlobalApplicationSettings
В нем:
public Dictionary<string, bool> ShowWindow { get; } = new();

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

Не еби мозги не себе не людям. Делай максимально просто. Ты в любом случае не будешь свои окошки переиспользовать.
431 2599232
>>599231
Да. У этого класса - в конструкторе - делаешь инициализацию настроек из файлика.
432 2599243
Вообще. Я чет стал за 10 лет коммерческой разработки - каким-то хуйлом, если честно. Все чаще ловлю себя на мысли, что большая часть "правил", это какой-то карго-культ.
Типа блин. Камон. Хороший код, это простой-понятный код, который решает задачу здесь и сейчас и который можно выкинуть нахуй, как только задача поменяется.
Такие вот дела. Да. А делая сложную хуйню с внедрением зависимостей, хуе-мое, регистрацией всего этого дела, выделяя классы под опции к твоей хуйн, ты потом неделю говно выгребать будешь, когда тот код что был нужен станет неактуальным.
433 2599409
>>599243
дай угадаю, у тебя в проекте есть папочки Енум,Моделс,Хелперч и т.д., где лежить разнешестный кал?
434 2599509
Есть ли сейчас работа для джуна в C# сфере?
Или лучше в Java Spring вкатываться?

Или как везде - тухло?
435 2599512
>>599509
Везде дохуя работы для джуна, вкатывайся во что хочешь.
436 2599513
>>599512
А что лучше учить - C# - и потом в .net, или Java Spring?
Где перспективы лучше?
437 2599514
>>599513
Одинаковые перспективы.
438 2599515
>>599513
К тому же ты уже решил всё, раз спрашиваешь здесь, но не в треде про джаву.
439 2599516
>>599515
Да я то в Android-разработку иду - а там говорят что работы нет, то во фронтенд - и там тоже с работой вроде туго.
Решил на C# игры делать, а заодно и .net выучить - но вдруг надо Java Spring зубрить или еще куда перекатываться? перекатывайся в сантехники
440 2599518
>>599516

> Да я то в Android-разработку иду - а там говорят что работы нет


Работы мало, да и то говно.

> фронтенд - и там тоже с работой вроде туго.


Там норм, но большая конкуренция.

> Решил на C# игры делать


Примерно как с андроидом.

> заодно и .net выучить


Учи ASP.NET Core. Бэкенд - самое нормальное направление.

> вдруг надо Java Spring зубрить или еще куда перекатываться


Если мало времени, советую поскорее выбрать что-то одно, а не скакать по десяткам сфер, а то рили вкатишься в сантехники. Если времени овердохуя, можешь посмотреть всё, повыбирать, вдруг в итоге вообще вкатишься в нейронки.
441 2599521
>>599518
В нейронки тоже пробовал вкатиться - но не понравилось.
Ладно, буду пробовать ASP.NET Core.
Спасибо за совет, анон.
442 2599523
>>599243

>А делая сложную хуйню с внедрением зависимостей


Никогда не понимал, что такого сожного в DI. Одна из самых простых и удобных концепций.
443 2599545
>>599523
Сложность DI во много вокруг того что на него накручивают: регистрация дочерних зависимостей, детект отказов и логика восстановления, подмены зависимостей по условиям - вот это вот все знатно выносит моск. А так есть патерн еще проще чем DI, а именно сервис локатор. Но его сейчас предали анафеме за то он принципы солид нарушает.
444 2599547
>>599523
При чем тут сложность DI как концепции? Сложность ретуалов вокруг него.
Раньше я делал как:
class A<B> where B : IB, new()
И норм, жил как-то. Получал зависимость снаружи, но при этом мне не нужно было ебаться с тем, чтобы прописать его куда надо, не нужно было в рантайме ловить хуйню, что зависимость не прокинулась, покрывать тестами как раз внедрение нужных зависимостей и прочей хуйней заниматься.

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

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

> в чем сложность?


В том что я как ебанат, делая новый класс, должен пиздовать в файлик 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 и только потом добавить поле.
Охуенно? Охуенно!
Подумай, почему я не стал так делать.
446 2599631
>>599600

> в чем сложность?


В том что я как ебанат, делая новый класс, должен пиздовать в файлик 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 и только потом добавить поле.
Охуенно? Охуенно!
Подумай, почему я не стал так делать.
447 2599671
>>599631

>делая новый класс, должен пиздовать в файлик Startup.cs/Program.cs


далеко не каждый класс так то, а только те, которые нужны чтобы их где то резолвили

>дополнительно - пиздовать в файлик appsettings.json


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

> ПО НАУКЕ СДЕЛАТЬ:


по науке ты должен сделать интефрейс IВотЭтоПровайдер
и уже в имени реализации будет указано откуда чего как.

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

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

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

>Подумай, почему я не стал так делать.


молодость и неопытность, еще не поел говна "и так сойдет все равно менять ничего больше не буду", а потом пришлось менять.
А как поешь, то даже в мелких проектах будет у тебя сразу подобие порядка.
448 2599685
>>582351 (OP)
Гайз, опишите плез кейсы, когда CQRS + Mediatr полезно использовать.
449 2599693
>>599671

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


Эх. Вот я про это говно и говорю.

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

> молодость и неопытность


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

>>599693

>10 лет коммерческой разработки, чел.


я ж о том и говорю. "давай давай, некогда думать как лучше". не искусство, а ремесло.
451 2599704
>>599545

>а то он принципы солид нарушает


Скорее за нарушение принципа инкапсуляции.
452 2599706
>>599699
Так нифига ж не лучше. Лучше, это когда я могу - просто выкинуть не нужный класс, и нихуя не сломается. Тут - я выкинул один класс, пиздуй разрегистрировать, пиздуй ту хуйню остальную удаляй. Куча ебучих ритуалов, из-за тупой реализации DI.
При этом, сделать самому нормальный DI - намного проще, но ебучие джуны же увидев свою реализацию контейнеров - обосрутся и приходится уже на уровне выше меньше выебываться, чтобы остальная команда - не страдала.

Эх. Вот раньше как было охуенно. Берем ADO, делаем папочку sql, свой DI нормальный, три слоя и погнали. Не. Теперь делаем говно, потому что майки учат говно, а джуны - по урокам майков учатся. Грустно короче. Да.
453 2599708
>>599547

>При этом, по факту, ты все равно НИКОГДА, не будешь подкитывать другую реализацию, делаешь интерфейс


Схуя ли? Банальный пример - паттерн Стратегия. Запихиваешь в контейнер все реализации одного интерфейса, а потом в контексте резолвишь нужную.
454 2599711
>>599708
И зачем делать это через DI? Чтобы что? Или ты в стратегию дохуилиард зависимостей просовываешь? Ну просовывай их прямо в контексте.
455 2599733
>>599711

>Ну просовывай их прямо в контексте.


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

Раньше я думал, что лютый сечас тренд "СЛОЖНА СЛОЖНА ХАЧУ прОЩе ЛАПШУ ТЯНУТЬ" идет от джунов, но теперь вижу, что тут еще второй фронт пожилых шлеп, которые повторяют за умными дядями, но не понимают зачем и им пришло "озарение" - "не я тупой, а они"
16754540973740.jpg111 Кб, 640x480
456 2599735
>>599706

> Берем ADO, делаем папочку sql, свой DI нормальный

457 2599803
Почему C# в РФ не ценится? Вижу кучу вакансий на го с знанием языка за 250к и вакансии на сишарпе с ебейшим пулом навыков+охуенным знанием дотнета за 100к.
458 2599853
>>599547
Причём тут дженерик и DI. Как ты собрался условно настройки приложения таким образом передавать или реализации интерфейса? В каждом месте руками указывать класс реализации и потом руками же менять?

Есть ощущение что ты 10 лет писал говнокод и вообще не понимаешь термины которые используются
459 2599856
>>599631

>В том что я как ебанат, делая новый класс, должен пиздовать в файлик Startup.cs/Program.cs и вписывать каждый раз: services.AddScoped, services.AddSingleton


Сделай нормальные суффиксы и резолвер по именам, не?
460 2599862
>>599631
Можно просто написать расширение, которое с помощью рефлексии добавляет все классы из определенных папок.
изображение2023-02-05193158758.png42 Кб, 1265x264
461 2600121
Аноны, почему не работает, ноль идей даже как загуглить. Бот не дожидается ответа, а сразу завершается с ошибкой.
462 2600154
>>600121

>завершается с ошибкой


какой? Ты можешь обернуть в try Cath и вывести ошибку?
изображение2023-02-05195313163.png37 Кб, 1092x281
463 2600161
>>600154
Выкидывает с необработанным исключением, ошибка в методе от telegram.bot
464 2600167
>>600121
Ты точно понимаешь что ты делаешь?
https://telegrambots.github.io/book/2/send-msg/native-polls-msg.html
изображение2023-02-05201254798.png31 Кб, 786x208
465 2600184
>>600167
Я хочу получать сообщение из которого надо скопировать текст и отправить в sql запрос, однако бот не дожидается второго сообщения и копирует пустое поле
466 2600198
>>599803
С хера не любят? Оч даже любят. Просто у шарпа была оооооочень долгая проблема с тем, что он был привязан к винде. Собственно, очень много где - это не подходило. Допустим, в нефтянке, на заводах всяких и прочих местах, где АйТи - не совсем свое - шарп нормально так укоренился, пока майки не решили убить классический фреймворк.
Блядь, половина того что удаленно снимает показание с твоих приборов учета, в РФ либо на плюсах(тех что C++/CLI), либо на шарпе, иногда еще дельфи, да. На заводах - аналогично, половина автоматизации заводов - это шарпы, дельфи, и плюсы. Есть часть легаси веба на ASP.Net, который еще старый, до того как там появились эти ваши вебапи и прочее.
Тырпрайз, у нас тут исторически на жаве писался.
Банки - тоже.
А когда майки таки отпустили поводья и сделали .netcore - уже как-бы рынок остального АйТи - поделен у нас. Стеки устоялись. Шарповоду, который не хочет на завод, по большей части дорога только в ДоДо, 2гис или банки, которые появились позже. Ну или в гейдев с юнькой.

А почему так сложилось? Потому что винда - всегда была проблемой для шарпа. Язык-то охуенный, но когда начинается реальное IT, никто не хочет с ней связываться. Вот и жил себе долго шарп сбоку, в областях автоматизации всякой.
467 2600228
>>600198

>А почему так сложилось?


Потому что ты так нафантазировал.
468 2600243
>>599243
А потом такие смотрят с приоткрытым ртом, когда в код, сделанный по заветам "карго-культа" новые фичи добавляются просто дописыванием новых имплементаций и парой строчек в di, а не разъебывая половину проекта, как они привыкли.
Но он же умный, он получил год опыта 10 раз.
469 2600263
>>600228
Всё правильно он "нафантазировал"
470 2600283
>>600243
Ну ок. Ты зашел на опасную территорию.
Давай. Вот тебе кейс.
Система опроса с очередями. Логика была простой: устройство - воркер, воркер пытается опросить устройство, сохраняет результат опроса в базу. Все изначально просто - по TCP общаемся без особых проблем.
Ок. Все норм. 10к потоков спокойно опрашивают че там надо.
Теперь - у нас есть COM-порты, через один COM-порт подключено 2к устройств.
Давай, объясняй, как твой DI поможет решить проблему того, что нельзя пытаться открыть из разных потоков один и тот же COM-порт.
471 2600295
>>600283

>как твой DI поможет решить проблему того


Ты микроскопом суп хлебаешь?

DI решает другие проблемы
472 2600298
>>600295

> новые фичи добавляются просто дописыванием новых имплементаций и парой строчек


Так каким образом новая фича в опросе через COM-порт будет реализована-то? Нужно же просто по заветам карго-культа чет там дописать.
473 2600314
>>600298
очень просто
твой воркер не работает ни с какими устройствами напрямую. Он принимает какой нибудь IDevice и с ним работает.

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

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

Ты же понимаешь (видимо нет) что не все пихается в DI?
Если тебе нужен семфор, ты же не принимаешь его в конструктор (кроме случаев если тебе нужен общий семафор, что бывает нужно менее чем 1/1000000 случаев ибо это грязно), а рождаешь его на месте.
474 2600320
Где прочитать про то, как неткор асинхронщину обрабатывает и параллельность?
Недавно услышал, что теперь synchronisation context выпилили и с дедлоками все лучше
475 2600322
>>600320
никто его не выпиливал. его просто нет в асп.нете и поэтому можно не писать ConfgureAwait(false) и типа не иметь проблем.
типа.
476 2600325
>>600298
Если ты не понимаешь пользы, так я приведу пример.

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

А все почему? А потому что майки открыли точку расширения фреймворка и у меня есть возможность в ней заменять нужные части на свои. И для этого мне не нужно делать форк, чего то патчить в рантайме и так далее.
477 2600331
>>600298
Начнем с того, что твой воркер нарушает принцип единой ответственности.
Я бы инжектил в него список комманд, реализующих простой интерфейс с методом doasynk, и выполняющих одну итерацию бизнес логики.
Отдельные команды, чтобы выгребать из портов данные и писать их в конкаррент очереди в памяти.
Отдельные комманды, чтобы выгребать данные из очередей и держать коннект на ком порту.
Отдельные комманды, чтобы забирать данные из очередей и писать их в базу.

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

Заранее извиняюсь за почерк, бахнул пива и пишу с телефона.
478 2600347
>>600331

> Начнем с того, что твой воркер нарушает принцип единой ответственности


Каким образом-то?
Он буквально делает вот что:
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();
}
479 2600522
Что делать, если есть 2 метода, каждый из 10 строк, но их различие только в одной отсутствующей строке?Причем эта строка находится в цикле и не хочется писать доп условие.

И что быстрее If bool, или delegate метода внутри цикла?
480 2600527
>>600522
Замерь, разницы не увидишь.
481 2600600
>>595218
Меня дрочили теорией по бд и устройством v8 собесился на фулстека.
По шарпу было два вопроса, по которым я спорил с интервьюером - как работает IDisposable и деструктор, и про структуры. В первом он мне пытался доказать, что Dispose удаляет объект из памяти, а я говорил, что не удалет, а убивает неуправляемые ресурсы. По второму говорил, что GC чистит структуры, что очевидно не так. Я же прав??
В конце правда по чесноку сразу сказал, что я не подхожу, и признался, что у них жуткое легаси на вебформах, так что я не расстроился.

Тяжело...
482 2600605
>>600600
Dispose - скмантическм вида close/finally. Ресурсы тут не причем. В диспозе можно хоть ктудху вызывать
Gc не трекает структуры.
483 2600666
>>600600
мда. тяжко на мобиле писать. добрался до компа и поясню шире

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

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

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

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

>жуткое легаси на вебформах


эээх. а ведь они ищут того кто им перепишет на новое, а ты их подвел )
484 2600846
>>600600

>что GC чистит структуры


Может и чистит. Если у структуры есть поле ссылочного типа его содержимое находится в куче. GC очевидно занимается отслеживанием живых структур которые держат на ссылку.
485 2600856
>>600522

>что быстрее If bool, или delegate метода внутри цикла?


Делегат намного тормознее. Для вызов каждой функции нужно сохранять контекст предыдущей, выделять память под локальные переменные, потом это все очищать.
486 2600932
Мой мир разбит и все представления о нем.
Оказывается, что есть единая история, типа как в проводнике, когда не важно в каком окне идут изменения — все это часть одной истории.

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

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

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

Конечно есть решение, но оно неоднозначное и пока не представляю как это может аукнуться в будущем. Напрягает, что так не реализовано нигде.
487 2600945
Если мне нужно тупо выучить к примеру Ангуляр для резюме и интервью, не легче ли будет тупо пройтись по вопросам интервью, а не задрачивать документацию или собирать пет проект?
488 2600983
>>600945
Да. Проходишь интервью, узнаешь вопросы, отправляешь в прошлое самому себе список вопросов. Просто и продуктивно.
489 2600994
Просто скажите, как мне из одного threadпередать в другой thread объект, чтобы мне не выдавало ошибку, что объект создан в другом потоке? Я не понимаю, почему в калошарпе это так сложно и почему я не могу нагуглить ничего адекватного
490 2600995
>>600932
Что за поток сознания?
491 2601006
>>600995
Простите. Расписал как мог.
Эту боль могу почувствовать только я.
вкатыш 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 уровня, даже учиться в вузе начинал в кредит, благо смог на бюджет перейти)?"
493 2601070
>>601067 (Del)
Спасибо, значит я на верном пути, но mindbox мне, кстати, уже отказал, буквально пару недель назад, что меня удивило т.к. я тестовое решил прям как надо, конечно, по моему неджуновскому мнению. А что такое "сисдиз"?
494 2601072
>>601067 (Del)
Судя по всему это сокращение от "системный дизайн", а что подразумевается под этим словосочетанием?
- Умение использвоать системы контроля версий с веточками и girflow?
- Паттерны проектирования вроде строитель, одиночка и т.п.?
- Принципы программирования типо Solid, Kiss, Dry?
- Принципы ООП?
Просто это я тоже изучаю (хотя, думаю, могу сказать, что изучил)
495 2601073
>>601071 (Del)
А вот и ответ, хорошо, спасибо попробую, про контур вообще до э
того не слышал. Наверное, действительно на джуна мне рановато без опыта пытаться, попробую добиться какой-нибудь стажировки за еду.
496 2601078
Кто нибудь знает что за рамка возникает вокруг элемента WPF при клике с Alt? Ни UIElement.Focus, ни Keyboard.Focus(UIElement) эту рамку не активируют.
497 2601082
>>600994
Сами потоки тут не причем
Это сам объект (или то что он использует) запоминает поток создания ибо ему это важно, ну и проверяет что его вызовы в том же потоке
498 2601083
>>601048
Попробуй в озон на стажировку поступаться. https://tech.ozon.ru/routestart
У меня знакомый qa-мануальщиком на нее попал. Неделю назад закончил стажировку и теперь там джуном работает.
499 2601162
>>600283
Бляяяя чел. Пусть твои 2000 устройств пишут в очередь, а другие потоки это читают и делают что надо.

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

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

У меня ощущение что у тебя проблемы с пониманием концепции интерфейсов и сокрытия деталей реализации. Твои все эти штуки не должны вообще знать о природе хранения данных, это не их дело
500 2601167
>>601048

>Правильно ли я делаю вещи клипая ненужные никому pet-проекты, решая литкод и читая книги, может быть лучше просто как-то офигительно наврать на hh про несуществующий опыт работы


Хуйней занят. Литкод это бесполезная хуета, твои проекты нахер никому не интересны и их никогда никто не будет смотреть.
501 2601321
Поцоны, кто нибудь смотрел ITVDN? Купил на рутрекере чтобы восполнить пробелы в базе, а там духота такая ояебу - какие-то окна уязвимости, дрочево на области видимости переменных, дрочево на const/простые переменные, правильное сравнение переменных - вначале константы потом переменные. Кто-нибуть итт ирл видел такую хуиту или это я нетру прогромизд?
502 2601325
Я вообще молчу про то что видео можно уверено в полтора раза ускорять + само видео по контенту можно в среднем на треть вырезать.
503 2601328
ПЕРЕКАТЫВАЕМСЯ, БУРУНДУКИ

>>2601326 (OP)
>>2601326 (OP)
>>2601326 (OP)
504 2601452
>>601162

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


Угу.
Получаем. Пришло время почитать у 1000 устройств, которые висят на одном COM-порте. Все обработчики обосрались, они ретраят. В результате - сбор пошел по пизде. ЗАТО АРХИТЕКТУРА, да.
505 2601655
>>601321

>или это я нетру прогромизд?


This
506 2601822
>>601452
тебя уже не вылечить. иди на завод
507 2604621
>>599509
Ваше не вкатывайся в .net, это говнище умирает ну как минимум не развивается. Я сйечас локти кусаю что 2 года назад в голанг не перекатился.
508 2605217
>>601452
С чего он обосрались дебис? С того что ты хочешь через 1 порт опросить 1000 устройств? Извините блять кодом нельзя решать проблемы того что ебанутый. Ты ещё спроси а че ваша архитектура не умеет решать проблемы хардвера
.png14 Кб, 656x437
509 2605614
>>605217
Чел. Я не ебанутый. Это обычная практика.
Так вот. Независимо от архитектуры, мы должны учитывать, что вот для COM-порта надо еще на уровне поставления задачи разруливать, иначе пизда. Если мы так же хотим, чтобы через ПэЭлКа какой-нибудь хреновенький можно было опрашивать - мы так же должны учитывать че там за ПэЭлКа и в ряде случаев - не создавать задачи чтения, пока сеанс связи через ПэЭлКа с другим устройством не завершится. И все это вот.
Ну, че поделать. Да.
Но мне выше говорят, что все можно сделать абстрактно и потом просто строчку дописать, все будет заебись. Не будет, блядь.
510 2607893
>>600283

>Теперь - у нас есть COM-порты, через один COM-порт подключено 2к устройств.



Ты ёбнутый.
511 2607907
>>607893
Это обычная практика. У тебя стоит модем подключенный через COM, через него по CSD устройства в полях опрашиваются.
512 2607931
>>607907
Пошел нахуй, неуч. Ходить нахуй - это стандартная для тебя практика.

Протокол ModBus предполагает использование адресов ведомых устройств в диапазоне 1-. 247. Каждое устройство в сети должно иметь уникальный адрес.
https://intellect-module.ru/downloads/manuals/inode_35D/ModBus_RTU.pdf
513 2607934
>>607907

>У тебя стоит модем подключенный через COM, через него по CSD устройства в полях опрашиваются.



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

Ебать ты коневод сфероконей в вакууме.
514 2607940
>>607931
При чем тут модбас, чел? Обычные пртоколы Bisync-лайк.

>>607934

> Период опроса говна в полях сколько лет, если говн несколько тысяч?


На скорости 9600 за сутки несколько тысяч можно опросить с одного модема. Чай не жсоны гоняем.
515 2609611
>>600945
В целом, подход может сработать, потому что спрашивают, обычно, документацию + некоторые практические моменты (популярно встречающиеся, но в доке описаны скудно), таким образом, просто задрочить документацию профита не даст, а если времени пилить пет-проект нет, то и подавно. Хотя я бы советовал совмещать документацию и вопросы к собесам - чувствовать будешь себя уверенней, да и в работе пригодится.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 6 апреля 2023 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски