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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
image58 Кб, 1536x1536
C#/Сишарп/.NET Тред #36 /csharp/ 2399284 В конец треда | Веб
Прошлый тред: >>2334153 (OP)

Литература вторым постом

1. Ресурсы:
https://dotnet.microsoft.com/learn
https://docs.microsoft.com/ru-ru/dotnet/csharp/
https://metanit.com/

2. Онлайн-компиляторы:
https://ideone.com/
https://dotnetfiddle.net/

3. WinForms или WPF?
Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае с WinForms делать намного сложнее.

4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить?
Неправда. C# активно развивается, недавно вышел .NET 5 и С# 9.0. Дотнет стал полностью опенсорсным и кроссплатформенным. В том же энтерпрайзе он очень даже востребован.

5. Какую IDE выбрать?
Для Windows самым очевидным вариантом будет Visual Studio ( https://visualstudio.microsoft.com/ru/downloads/ ). Бесплатной Community-версии более, чем достаточно для большинства задач. Также есть версия для macOS.
Кроссплатформенный полуредактор/полуIDE VS Code ( https://code.visualstudio.com/ ).
Кроссплатформенный IDE Rider ( https://www.jetbrains.com/rider/ ).
Также существуют C#-плагины для Atom и Sublime Text, но функциональность там достаточно сильно урезана.

6. С# для мобильной разработки
https://dotnet.microsoft.com/apps/xamarin

Новые возможности C# 9.0: https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/

Текст шапки: https://pastebin.com/pbK8CGqw
2 2399290
>>399284 (OP)
Кто нибудь запускал юнит тесты .NET 6 VS 2022 на линуксе? Чего-то нихера у меня не пашет, пишет якобы среда WSL не сконфигурирована хотя вроде все по инструкцции сделал. Более того, до этого из студии на той же WSL собирал сишный проект на CMake и все сходу завелось, студия сама предложила доустановить на линукс недостающие компоненты.
sage 3 2399291
ПЕРЕКАТ >>2334153 (OP)
ПЕРЕКАТ >>2334153 (OP)
ПЕРЕКАТ >>2334153 (OP)
ПЕРЕКАТ >>2334153 (OP)
ПЕРЕКАТ >>2334153 (OP)
ПЕРЕКАТ >>2334153 (OP)
image.png424 Кб, 600x600
4 2399294
Вчера пытался устроиться на стажировку на модный стэк, за бесплатно естественно. Скинули тест. Ну и я его завалил.

2года опыта, ненавижу тесты блядь.

Не вкатывайтесь в шарп глупцы, хуже только кресты
5 2399295
>>399294
На днях тестовое на ждуна делал - с прокторингом (запись камеры, микро и экрана) разбирал, что выведет непотокобезопасный отвратительный говнокод и кучку задачек на логику
6 2399296
Какие подводные могут быть в вакансии?
https://hh.ru/vacancy/66905085?from=share_android
7 2399310
Мёртвый тред мёртвого языка.
8 2399333
Какое же ведро с крабами, лол.
мимо перекатился с ноды за месяц
9 2399381
Помогите вкатуну. Делаю небольшой пет проект. Хотел найти инфу по документации. Кто нибудь про нее что-то знает?
10 2399432
>>399284 (OP)

>3. WinForms или WPF?


Это еще предмет спора? Мне кажется, что уже даже WPF начинает отдавать гнильцой.
11 2399435
>>399295

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


Расскажи подробнее, плиз.
12 2399441
Сап, стоит ли втягиваться в C#, учитывая современную ситуацию в необъятной? Не утратит ли язык востребованность в случае ухода Майков с рынка РФ?
13 2399444
>>399443 (Del)
ОК, спасибо
14 2399476
Почему в VS Code можно просто добавить класс в папку решения, и всё заводится, а в студии надо прямо прописывать инклюд?
15 2399505
>>399476
Какой нахуй инклюд? Про пространства имён слышал?
16 2399514
>>399435
Там типа обычная очередь из квадратов чисел от 0 до 9999
И по количеству ядер запускаются потоки, которые берут числа из очереди и суммируют в общую переменную
17 2399607
>>399441
Вообще не стоит вкатываться. Ша требуют такой багаж знаний на мидла, что охуеешь.
18 2399655
>>399441
Никогда не стоило вкатываться, а щас - особенно не стоит. Посмотри жабу. Тот же с#, но оригинал.
19 2399659
>>399505
В то время на джаве никто ни с какими пространствами в анусах не заморачивается, когда на ассемблер# надо заебываться с такими низкоуровневыми вещами, как инклюды.
20 2399700
Опять джаваеблан срет какой-то залупой, нихуя не понимая в теме...
21 2399729
>>399659

>Джава


>Якобы образчик ООП


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


Вы все видели, вы все слышали.
22 2399735
>>399505
Такой. В sln файле projectreference
23 2399736
>>399476
VSCode это кал для дебилов не сумевших раздобыть нормальную VS.
24 2399744
>>399729
Ни пространства ни инклюды к ООП отношения не имеют. Это исключительно технические подходы к реализации языка.
25 2399770
>>399735
Там только проекты входящие в решение прописываются, ебушек. Если ты закинешь .cs файл с классом в каталог любого проекта, то он спокойно подхватится и будет добавлен в сборку проекта без какого-либо пердолинга
26 2399785
Кстати если неймспейс описывается в разных .cs файлах на выходе это всё ещё один .dll?
27 2399796
>>399770
Блин, и правда. Я не туда класс закинул.
28 2399821
>>399785
Между DLL и неймспейсами прямой связи нет. DLL соответствует сборке (assembly). В одной сборке может быть несколько неймспейсов. С другой стороны, классы принадлежащие одному неймспейсу могут располагаться в разных сборках.
29 2399851
>>399821
Погодь, я думал ассембли := неймспейс.
30 2399876
>>399851
Не, обычно assembly := project
31 2399887
>>399876
Oooo...
32 2399903
Почему в MAUI опять не завезли датагриды? Почему МС такие тупые пидорасы?
33 2399941
>>399744
Пространства имеют отношение к инкапсуляции. В джаве может это как-то иначе называется, но суть должна быть таже. Поэтому нет смысла катить бочку на неймспейсы.
34 2399945
>>399785
Смотря как и смотря где.
Если ты юзаешь управляемый ресурс, то может заругаться еще на стадии конпиляции, но это больше относится к классам и методам. Но так-то название dll это тоже часть пути, то заругаться может и не может.
35 2399947
>>399945

>Но так-то название dll это тоже часть пути, то заругаться может и не может.


Щас чет спизданул и сам охуел.
36 2399987
Нахуя нужен мультитхрединг если данные лочатся и в итоге всё всё равно выполняется в порядке очереди?
37 2399994
>>399987
В задаче, где все треды большую часть времени одновременно юзают одни и те же данные, мультитрединг нахуй не нужен.
38 2399998
>>399994
А где нужон? Только не надо мне про гуи.
39 2400004
>>399998
Какие нах гуи? На серверах и в программах с тяжёлыми вычислениями.
40 2400014
>>400004
Например?
41 2400021
>>400014
Обработка запросов, рендеринг, обучение нейронок, алгоритмы сортировки, используемые в СУБД.
42 2400025
Какой-то очень странный этот ваш ООП и крайне сомнительный в плане удобства. Делаешь всякие экземпляры там и сям, а потом часами сидишь ебешься с тем, чтобы все это друг с другом как-то связать, передать нужные данные через конструктор, параметры метода, хуй, пизду. Хочешь статики - дяди сеньоры грят иди нахуй, это не по ООПовски, потом все это не протестировать нормально. В итоге получаются ебучие макароны, где пятьсот раз приходится повторять одно и то же, чтобы ебучую цифру перекинуть из одного экземпляра класса в метод в другом. Все погромирование в целом ощущается как решение головоломки "как говно а передать в говно б". Может я что-то не так делаю?

Мимогорящий вкатыш.
43 2400029
>>400025
Любая предметная область сводится к связыванию сущностей и передаче данных через что-то, и не важно, статики или параметры методов. Пиши хоть процедурно, хоть объектно, хоть функционально - одно и то же говно.
44 2400041
>>400021
Тяжело...
45 2400051
>>400041
Ничего тяжёлого, просто задачи специфичные. Мультитрединг - не серебряная пуля.
46 2400054
>>400051
И как в этом всём разобраться?
47 2400061
>>400054
Читать книги и писать код.
48 2400075
>>400061

>Читать книги


Какие?

>писать код


Куда?
49 2400078
>>400075

> Какие?


Из шапки.

> Куда?


В стол.
50 2400085
>>400078

>Из шапки.


Сколько книжек и каких надо прочитать чтобы можно было устроиться на работу?

>В стол.


Почему не на гитхаб?
51 2400095
>>400085

> Сколько книжек и каких надо прочитать чтобы можно было устроиться на работу?


По самому языку хотя бы одну, ещё пару по всяким технологиям, алгоритмам, подходам. Но практика куда важнее книжек.

> Почему не на гитхаб?


Да хоть на чёрта лысого. Ты пишешь код в первую очередь для себя, чтобы оттачивать свои скиллы. На гитхабе чужие хеллоуворлды мало кому интересны, у каждого и так есть своя свалка учебных проектов.
52 2400104
>>400085

>Сколько книжек и каких надо прочитать чтобы можно было устроиться на работу?


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

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

>2400054


>И как в этом всём разобраться?


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

Но если у тебя B-задача не может начать работу без результатов A-задачи, то мультитрединг не подойдет, офкос. Если задачи А и Б блокируют что-то еще, то вот тут уже используется асинхронность — на скорость выполнения А и Б не повлияет, но задо даст дорогу другим задачам. Как-то так.
53 2400119
>>400104
Такое есть, но этим я буду заниматься когда перекачусь с реакта на другую работу, щас бы сам язык выучить.
54 2400133
>>400119
Знаешь реакт, а задаешь глупые вопросы в треде, как будто хело ворлда не писал.
55 2400141
>>400133
Ну всё равно тяжело
56 2400143
>>400141
Не к лицу тебе такое, мужик. Ты не жук-плавунец.
57 2400146
>>400143
Какое такое?
977818880561.mp4405 Кб, mp4,
640x350, 0:05
58 2400148
>>400146
Ты уже боец
59 2400149
>>400148
Да да я да
60 2400159
>>400029
В процедурке я могу объявить переменную в самом начале и потом без костылей обращаться к ней хоть со 100000-й строки кода. Понятно, что процедурка энивей неюзабельное и неподдерживаемое говно, но ООП тоже то еще мозгоебство. Создай экземпляр класса, в нем экземпляры остальных классов, из которых ты потом хуй вызовешь параметры из экземпляра основного класса, потом появляются другие сторонние классы, все это запутывается и здравствуй макаронная фабрика с огромным объемом кода и строками, вылезающими за границы экрана с постоянными проверками миллионов условий для того, чтобы сделать один пук.
61 2400168
>>400159
Ну как бы да. Ты платишь всей этой сложностью за то, что у тебя появляется возможность сделать так, чтобы пук был чуть другой тональности просто подминив один из объектов на другой с таким же интерфейсом на этапе сборки этого дерева объектов.
62 2400174
>>400159

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


Читай про dependency injection.
63 2400181
>>400174
А, эта хуйня именно для того, чтобы упростить этот процесс? А я-то думал это какая-то сложная залупа для сеньоров, чтобы кучу разных технологий вместе склеивать.
64 2400201
>>400159
Что мешает использовать и то и другое?
65 2400209
Когда может понадобиться работа с указателями?
66 2400211
>>400209
Когда приходится работать с какими-либо unmanaged модулями. К примеру, дергать какое-нибудь виндовое api.
67 2400212
>>400209
Недавно работал с неуправляемой библиотекой, у которой ref аргумент функции — это указатель по сути. А он еще с стринговый, а каждая манипуляция со стрингами в C# создает новый экземпляр, а не переписывает данные по текущему адресу.

А я еще на бейсике писал, а там нет блока unsafe.
68 2400236
>>399941

> Пространства имеют отношение к инкапсуляции.


Каким образом?
69 2400237
>>399941

> Пространства имеют отношение к инкапсуляции.


Давай определимся с терминологией?
Инкапсуляция - это когда участок кода "капсула" делает одну вещь, делает её хорошо, и ей (капсуле) не нужны другие участки кода, таким образом код in-capsule.
Неймспейсы же не имеют отношения к инкапсуляции в том виде, в котором я только что задефайнил. Неймспейсы позволяют нескольким "капсулам" обмениваться данными, что имеет отношение к интерфейсам, которые опять же не имеют отношения к ООП.
70 2400240
Этот ваш MAUI такое же говно как электрон ведь. Хули вы так за него топите?
71 2400249
>>400240
Порриджи, сэр.
72 2400268
Поясните за unmanaged ресурсы а именно что ими является. Про потоки понятно (хотя не понятно нахрена после .Close() вызывать .Dispose()). За чем ещё приходится подчищать?
73 2400286
>>400237

>и ей (капсуле) не нужны другие участки кода


Как так, если все ооп строится на связях между объектами?
74 2400292
>>400286
Так, что связываются объекты своими интерфейсами, а не участки кода кишками своих реализаций.
75 2400293
>>399903
потому что это мобильщина (где датагриды не нужны по понятным причинам) которую пытаются портировать на десктоп.
76 2400303
>>400268
В первую очередь это какие-либо дескрипторы ОС. Даже если ты дёрнул Close и вернул их ОС, то дергать Dispose нужно на случай, если в классе реализован финализатор с Dispose паттерном. В таком случае, если класс грамотно написан, в методе Dispose дернется SuppressFinalize для объекта и сборка мусора пройдет быстро и безболезненно. А если не дернешь, то сборка мусора пойдет длинным путем с вызовами финализаторов в отдельном тредике и возможностью для программы развалится нахуй, если финализатор кривой, так как исключения выбрашенные в финализаторе обработать никакой возможности нет.
77 2400379
>>400292
>>400237
Как говорится заставь дурака инкапсулировать, он абсолютно все спрячет и будет связывать интерфейсами. Инкапсуляция позволяет применять имена методов и полей только в пределах своей среды обитания. Инкапсуляция, прежде всего это возможность что-то скрыть.

А у тебя суперфанатичная крайность: ну вот передо мной топор, я буду им и дрова рубить и кашу готовить.
78 2400389
>>400379
Мы вам перезвоним.
79 2400404
>>400389
Нет, это я вам перезвоню.
image.png85 Кб, 611x761
80 2400419
Хочешь в .net? Подумай трижды.
81 2400421
>>400419
И что не так помимо шизоидных 3+ лет на ждуна?
Ресурсы для практики 82 2400422
Ку, аноны. Хотелось бы узнать, какие есть ресурсы, чтобы набивать руку на шарпе. Практиковаться одним словом.
83 2400425
>>400421
По сути просят готового спеца который может в соло тащить небольшой проект, под видом джуна.
84 2400436
>>400425

>По сути просят готового спеца


Самые обычные требования к бэковику.

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


Обычная практика для мелких галер. Но опыт даёт ебейший, по сравнению с работой в команде все 2-2.5х. Если лояльно к проёбам на начальных этапах будут относиться то вообще всё норм.
85 2400448
>>400292
Это вообще как? Уже кучу всего перечитал/пересмотрел, но ничего подобного не видел.
86 2400463
>>399441

>Не утратит ли язык востребованность в случае ухода Майков с рынка РФ?


Их на этом рынке и не было никогда официально.
87 2400464
>>400025

>Может я что-то не так делаю?


Однозначно. Изучай что такое инверсия управления и какие есть способы ее реализации.
88 2400494
В чём разница между полем и свойством?
89 2400509
>>400499 (Del)
Стоит еще сказать, что свойство - это пара методов, под которыми скрыто лежит поле.
90 2400511
>>400499 (Del)
>>400509
А для чего эти изъёбы если и для поля можно сгенерить геттер-сеттер? Это же по-идее и память дополнительную занимает или оно всегда в компайлтайме резолвится?
91 2400512
>>399284 (OP)

>недавно вышел .NET 5 и С# 9.0


Сука, как же горит жопа. Ебаные дауны перекатчики, уже миллион лет вышел .NET 6 который LTS.
92 2400514
>>400422
Никаких, есть только 1 способ практики: придумать себе проблему и решить её, сделай парсер жсон, сделай crud сервер REST API
93 2400522
>>400511
Не для каждого поля нужно публичное свойство, но для каждого свойства нужно поле. В C# сахар делает то, что ты бы сделал руками, памяти занимает настольк незначительно, что вообще похуй

[CompilerGenerated]
private SmthType <Property>k__BackingField;

public SmthType MyProperty
{
[CompilerGenerated]
get
{
return <Property>k__BackingField;
}
[CompilerGenerated]
set
{
<Property>k__BackingField = value;
}
}
image.png14 Кб, 678x338
94 2400540
Я правильно понимаю, что сейчас предпочтительнее использовать is null вместо обычного сравнения == null?
95 2400555
>>400540
Какое "сейчас"?
Знак сравнения применителен к структурам типа int, а is к классам типа твоего car.

За исключением string, который является ссылочным типом, но для удобства использования ведет себя как структура.
96 2400566
>>400555

> Какое "сейчас"?


Такое "сейчас", что раньше "is null" и "is not null" не было. Теперь "== null" и "!= null" можно полностью заменить. Но тут вопрос этого ли добивались майкрасофты или же они добавили "is null" / "is not null" для других целей.
97 2400613
>>400448
Перекатывайся в джаву. У нас есть Бугаенко. Он про всё это расскажет.
98 2400620
>>400566

>"is null" и "is not null"


да хуй знает, я бесикоблядь, у нас это было всегда. Если структура, то использовали "=", если ссылочный, то "is".

>добивались майкрасофты


C# и бейсик объединяют. С моей точки зрения, такое различие дает визуально понять, что сравнение идет по значению или по ссылке. Сам проебывал порой, если бы не ор студии.
99 2400629
>>400425
Ну я кстати на 1 работе в соляново написал проект и тащил его.
100 2400634
>>400613
Я тогда на работу устроюсь аккурат к пенсии, если буду по хуям языкам скакать.
101 2400636
>>400634
в чем проблема знать несколько языков?
102 2400639
>>400638 (Del)
Чел, плиз. Сейчас даже в ИП Говнокод кодревью и тесты проводят.
103 2400640
>>400638 (Del)
Есть такое, но Кабану было похуй, да и заказчику тоже.
104 2400642
>>400634
Петушарп является клоном жабы и фактически ничем не отличается, только в некоторых местах петушарп более низкоуровневый, чем джава. А хорошие программисты умеют кодить на любом языке, ведь принципы чистокода везде одинаковые, кроме скриптопараши конечно.
105 2400643
>>400639
Ревью было иногда, но тесты я тогда не писал. Чисто в постменчике проверял и нормально.
106 2400647
>>400643

>Чисто в постменчике проверял и нормально.


Было дело, все так писали. Благо это был нест который многие грехи пропускает или позволяет на аутистах игнорировать.
107 2400653
>>400648 (Del)
Забавно, как петушарперы перемогают картиночками. Прямо как хохлы с пораши. Нарисовали свинью (и то, придумали свинью не сами, а спиздили идею и попытались перефорсить), и думают, что правы.
108 2400656
Хочу сменить свою 1 работу джуном. Устал работать за 20к. Писал чисто бекенд, razor и js не использовал. С базой работал только через entity . Не сказал бы, чтобы прям очень многое умею, но что-то сделать сам смогу. 7 месяцев жидкого стажа, иногда могу плохо написать большой запрос к базе на linq. У меня есть вообще хоть какие-то шансы?
109 2400658
>>400656
В джаве есть. Петушарп умер после ухода мелкомягких из россии.
110 2400660
>>400656

>Писал чисто бекенд


>иногда могу плохо написать большой запрос к базе на linq


>чегоблядь.jpg


А так подтягиваешь текущие знания, учишь фронтенд, получаешь лычку фуллстака и на ~80к можешь расчитывать.
111 2400661
>>400658
Если совсем будет плохо, то перекачусь. На яве писал давненько, лень вспомнить всякие нюансы и кишочки спринга
112 2400664
>>400648 (Del)
Как нет хаскеля, дарта, Д и кучи других языков на которые всем похуй. Даже чморить лень.
113 2400674
>>400660
Да просто писал запрос на 10 строчек кода и в итоге написал немного неправильно. В общем я жиденький джун, но я знаю людей, которые сильно слабее и получают хоть что-то, а не ебаные 20 тысяч. Лан, спасибо за совет, буду фронт подтягивать. В реакт лучше вкатываться?
114 2400677
А откуда взялось правило приписывать название класса к айдишнику? Типа:
public class Book
{
public string BookId;
}
..
book.BookId = "123";

Почему это лучше, чем просто "Id"?
115 2400681
>>400674
Ты сначала с html+css+js+ts освойся. Либу потом выберешь.
116 2400687
>>400636
Во времени.

>>400642

>хорошие программисты


>ньюфаг 2 месяца


Олсо, BCL совершенно другая, фреймворки другие, окружающие технологии другие и так далее. Даже шарпосеньору понадобится пара месяцев для освоения.

>>400674
Я внимательно слежу за вакансиями на разных источниках и в требованиях 9/10 фронтовых фреймворков - это ангуляр. Вью вообще только один раз видел.
117 2400689
>>400681
А что по поводу знаний бд? Я нативный sql помню на уровне банальных крудов. На работе особо ничего не делаю на нем. Или моего знания достаточно?
118 2400690
>>400677
Хуета какая-то. Тавтология это плохо. И непонятно зачем стринг дял числового значения. Есть вообще GUID.
image.png85 Кб, 1033x1000
119 2400695
>>400690
Это так у микрософтов
120 2400698
Самая непонятная, вселенская штука для меня.

Есть вещественное число в стринге "0.001"

Как его распарсить так, чтобы не полетело все пиздой в зависимости от региона. Эти данные не я генерирую. Может прилететь число как с точкой, так и запятой.
121 2400702
>>400695
Там в одном классе как минимум два ID, ну тогда понятно зачем. Хотя это тупо — нужно создавать класс департамента, который в себе будет хранить ID, а не засирать им класс Course
122 2400704
>>400689
Учишь postgres по их доке, проходишь все уровни sql на литкоде и всё тут.
123 2400707
>>400702
>>400695
Бля, у них же есть класс департамента — выше. Они шо, ебанутые?
124 2400714
>>400698
var value = Single.Parse("0.001", System.Globalization.CultureInfo.InvariantCulture);

https://docs.microsoft.com/ru-ru/dotnet/api/system.globalization.cultureinfo.invariantculture?view=net-6.0
125 2400718
>>400707
Дайвёрсити, сэр.
126 2400722
>>400512

>миллион лет вышел


Года еще не прошло, хлебушек. Все до сих пор спокойно на 3.1 сидят и ок.
127 2400736
>>400566

>раньше "is null" и "is not null" не было


is null появился еще в 7-м шарпе, is not - в 9-м.

>>400540

>Я правильно понимаю, что сейчас предпочтительнее использовать is null вместо обычного сравнения == null


>>400566

>Но тут вопрос этого ли добивались майкрасофты или же они добавили "is null" / "is not null" для других целей.


Операторы == и != могут быть переопределены в классе, а is null и is not null кладут хуй на любые переопределения операторов.
Выводы сделаешь сам надеюсь.
128 2400740
Поля в тупле называть с большой буквы?
129 2400741
>>400620

>да хуй знает, я бесикоблядь


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

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


Это еще раз говорит о том, что приходя на новый стек/язык не стоит проецировать свой предыдущий опыт на него, а то можно знатно объебаться. Лучше прочитать доки и понять, что и зачем.
130 2400742
>>400714
О, спасибо!
131 2400743
>>400741

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



Сказал сишарпер. Ну так вали из шарпа тоже и полируй неуправляемый код.
132 2400749
>>400741
Только вот C# на данный момент послаще бейсика из 90х будет.
133 2400759
>>400743
Мне то зачем, если мне в шарпах все ок.
Это ты уже второй тред ноешь: "Вот в бейсике было о-о-о, а в шарпе фу-фу-фу".
Ну и косяк бейсика не в его сахаре или в неуправляемости/управляемости кода.
134 2400772
>>400736
Но это не отвечает на вопрос является ли данный способ сравнения "is null" и "is not null" предпочтительным.
135 2400792
>>400772
Eще раз для тупых. Операторы == и != могут быть перегружены в классе. И ты вполне можешь на условие if(item == null) получить true, даже если он по факту не null (ну вот захотелось создателю класса вот так) и наоборот при проверке if(item != null) получить true, хотя объект пустой (если чо, то операторы перегружаются статически, т.е. даже у пустого экземпляра отработает перегрузка, а не оригинал)
А при проверке is и is not тебе будет похуй есть там перегрузки или нет.
Т.е. если ты уверен, что в классах которыми ты пользуешься нет и не будет таких перегрузок или твоя логика включает в себя такие перегрузки, либо тебе просто похуй, то проверяй на null через == и !=
А если ты нормальный чел, то поймешь, что проверка через is и is not лучше, т.к. избавляет тебя от вышеописанных головняков.
136 2400823
>>399284 (OP)
Почему приложение на шарпе может не запускаться на других компах?

Ошибок не выдаёт, копируется вся папка release, где все необходимые библиотеки
137 2400850
>>400823

>release


>Ошибок не выдаёт


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

Может конфигурация сборки другая, может дело в импорте библиотек.
138 2400853
>>400850
Сама программа консольная, она работает с пдф файлами, на отсутствие библиотек не ругается, просто запускается и быстро завершается, проверок исключений в коде нету

Кучу вариантов перепробовал и посмотрел в интернете, но ответа нету вообще.
139 2400867
>>400853
Я думаю тогда надо уточнить, мало ли.
Библиотека коммерческая. Может ли быть так, что из-за неё программа отказывается работать на других ПК? В смысле, что она отслеживает, что приложение запускается на другом ПК и не работает?
140 2400877
>>400853

>на отсутствие библиотек не ругается


А дело может быть не во отсутствии, а в их несовместимости.
Ты можешь хотя бы main на свой код в try завернуть и в случае Catch Exception выдать меседжбокс или записать в txt с информацией об ошибке

Еще я видел у Христа тутор по глобальному Catch
https://www.youtube.com/watch?v=-97tko0ous8
Это чтобы не расписывать в каждой функции по try Catch

>Библиотека коммерческая.


Она может быть нативной. А такое собирается под конкретную конфигурацию.
141 2400879
>>400877

> Ты можешь хотя бы main на свой код в try завернуть и в случае Catch Exception выдать меседжбокс или записать в txt с информацией об ошибке



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

> А такое собирается под конкретную конфигурацию



Подробнее, ибо под конфигурацией я сходу понимаю железо, ОС и фрамеворк
142 2400889
>>400823
Хуево собрал / не все собрал
143 2400892
>>400889
Ща пробую с АдынКлик сделать установщик, пишут, что помогает.
144 2400894
>>400879

>Попробую


Попробуй глобальный кетч, как в видео

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


Дубина стоеросовая. Ты когда тестировал, небось юзал простенькие файлы, которые быстро записывались и быстро освобождались. И как только этот процесс затянулся, то все пошло по пизде. Еще небось какой нибудь delay приписывал, щоб "наверняка дождаться". Я тебя насквозь вижу.

>Подробнее, ибо под конфигурацией я сходу понимаю железо, ОС и фрамеворк


Например процессор: может интел, может амд, может 32, может 64. Читай что такое JIT-компиляция и чем результат отличается от машинного кода.
145 2400897
>>400894

> И как только этот процесс затянулся



Не

> JIT-компиляция



Просто ехе файл из релиза или из дебуго, обе машины АМД, причём обе 3000 серии
146 2400925
Несколько функций независимо друг от друга обращаются к однмоу листу и перезаписывают его. Это нормальная практика? Конфликта не будет?
147 2400928
>>400925

>Это нормальная практика?


Нет.

>Конфликта не будет?


Будет.
148 2400950
>>400928
А как этого избежать?

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

Есть какие-то решения для этого? Создать вторую переменную, котоаря будет неким семафором? А еще непонятно: в одном случае в листе будет 10 итемов, а в другом случае 40. А что если поступят еще 30, пока не обработаны предыдущие 20? Наверно надо дублировать список и только потом обрабатывать.
149 2400954
>>400897
Кароч повозился и оно таки ругается на права.

Можно ли как-то в коде поднять права или учесть?

В свойствах папки, в безопасности даже всем давал полный доступ, но оно всё равно ругается.
151 2400958
>>400954

>Можно ли как-то в коде поднять права или учесть?


Тогда какой был бы смысл в защите, если бы рандомный Васян с малварем сам себе бы повысил права?

>Можно ли как-то в коде поднять права или учесть?


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

>В свойствах папки, в безопасности даже всем давал полный доступ


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

Путь, в котором это всё лежит задаётся из тхт файла или через аргументы.

В самом лучшем случае он создаёт две папки, но на попытку даже чтения пдф уже ругается.
153 2401004
>>399284 (OP)
Где прочитать про 3х слойную архитектуру ? Желательно подробно с примерами на c# ? Спасибо
154 2401008
>>400957
О, спасибо, то что нужно.
155 2401090
Так, я прочитал за 5 дней:
- The C# Player's Guide
- C# 10 and .NET 6 – Modern Cross-Platform Development
- Writing High Performance .NET Code
Чё там дальше?
156 2401162
>>401090
Стирать трусы, ты обосрался.
157 2401163
>>401162
Это ты так пошутить попытался, чмоня?
158 2401170
>>401163
Нет, я спустил тебя на землю.
159 2401224
>>401170
Пчёл, я крестосеньор, я это всё по диагонали читал.
160 2401229
>>401224
Нахуй тебе петушарп, крестосерьор?
161 2401230
>>401229
Интересно освоить что-нибудь новое.
162 2401231
>>401230
Так есть же джава.
163 2401234
>>401231
- ваши яблоки вкусные?
- а зачем тебе яблоки?
- да вот захотелось попробовать что-то кроме помидор?
- так есть же гавно, иди говна поешь - новый вкус обеспечен
164 2401235
>>401231
Так джава ещё хуже.
165 2401236
>>401235
Че? Джава во всем обоссывает уродливую ассемблеропарашную бездокументационную хуйню типа петушарпа.
166 2401237
>>401224
Тем более. В таком случае тебе надо читать строго по страничке в день и внимательно все практиковать, усваивать человеческий язык и избавляться от привычек, приобретенных в языке, который создавали шизофреники.
167 2401239
>>401236
>>401237
Держите в курсе?
1589368540092.jpeg84 Кб, 620x620
168 2401240
>>401237

>петушарпер


>заявляет про писание какого то языка шизофрениками

169 2401245
>>401240
Разумеется. Петушарп - один из самых стройных и лакончиных языков на данный момент, если вообще не самый. А крестухон - поделие шизофреников, которое сейчас поддерживает сообщество таких же шизофреников. Попытки разобраться в огромной свалке под неприглядным названием С++ приводят к стойким повреждениям психики и требуют длительной реабилитации.
170 2401251
>>401224
>>401090
А зачем ты это читаешь? Если любишь читать, я бы посоветовал Чехова, например.
Все подобные книги - они для новичков в программировании вообще, а не на языке.
Я с куда меньшим чем у тебя бекграундом, когда перекатывался в решетку, не прочитал ни одной книги (ну одну на треть прочитал). Потому что это чудовищная потеря времени. Во-первых, в книгах ни одна тема не раскрывается исчерпывающе, и чтобы ощутить понимание, всё равно приходилось лезть и в документацию языка и исходники дотнета. Во-вторых, основы языка постигаются в первые часы изучения. А дальше уже ты предметно лезешь в доки по своим вопросам, либо гуглишь для своей задачи а как вот это сделать.
171 2401255
>>401245
Если взять и переписать весь дотнет с нуля, то будет да, так как ты описал.
Но огромное количество кода написано и до сих пор используется без всяких типов, с кучей магической рефлексии и атрибутов. WinForms, WFP, ASP и EF, если делать на новом шарпе, могли бы быть прекрасными, но в нынешнем виде - они на уровне джаваскрипта.
172 2401258
>>401255
Ну вот собсна пример запущенной шизы.
173 2401292
Доставьте список вопросов на собесе для бекэндера
174 2401306
А как вам null-допустимость? Мне кажется идея отличная. Но проблема в том, что C# и его фреймворки уже давно сформировался. Поэтому даже на уровне включаемой/отключаемой эта фича сомнительна. Нужен короче новый СИ, который избавится от всего легаси говна. Какой-нибудь Си Некст.
175 2401312
>>401306
Вся стандартная дотнетовская либа уже давно переписана в стиле новой модной нуллабилити.
А помойные ашотобиблиотеки если не поспевают за трендами, то идут нах.
176 2401315
>>401312

> Вся стандартная дотнетовская либа уже давно переписана в стиле новой модной нуллабилити


Хм, и вправду переписана. А может быть такое, что они нуллабилити по умолчанию врубят в будущем? Или такое исключено?
177 2401326
>>401315

>нуллабилити по умолчанию врубят в будущем?


Всё к этому идёт.
Хотя Nullable<T> в этой концепции выглядит по-идиотски. Потому что как писать в дженериках T? - это слишком ambiguously. Лучше бы её переписали на Optional<T> и убрали все двусмысленности с null. Впрочем и DBNull тоже мутный класс.
178 2401689
Как так получается, что Райдер в разы более тормознутый, чем Студия? Должно же быть наоборот.
179 2401715
>>401689

>Должно же быть наоборот.


Почему? Всё правильно.
180 2401725
>>401689
Ты сравниваешь лучшую иде всех времён и народов Студию, написанную на быстрых и лёгких крестами с шарпом, с васянским Райдером на тормознутой прожорливой жабе. Что тебя удивляет?
181 2401726
>>401689
А ты сравнивай со связкой студия+решарпер. Тогда уже более-менее на равных идут по тормознвтости. И по функционалу.
182 2401927
Сап двач, помоги с решением проблемы. На VBA в экселе макросом нужно из одного листа сравнить порядок ячеек из второго листа и отсортировать их как во втором. Желательно что бы ячейки напротив ячеек которые будем сортировать, так же перемещались с ними. Пик - таблицы.
Так же нужно на отдельный лист собрать данные которые будут собираться в таблицу в ворд, а потом выводиться на экран.

На пик3 код, который сейчас сортирует и считает кол-во задач на работника.

(А суть задачи в том, что бы в итоговой таблице в ворде были данные о количестве задач, фамилии сотрудников, и номера отделов. И что бы все было отсортировано по убыванию.)

Цитата задачи: На основании данных книги Data.xlsb написать программу на языке VBA, которая по нажатию на кнопку сформирует и выведет на экран документ "Отчет по загрузке" в MS Word.
Требования:
Исходные данные и их структура должны сохраниться.
Отделы и их сотрудники должны быть расположены в порядке убывания количества задач.
183 2401937
Я тут увидел у жабистов довольно пиздатый гайд по вкату. Почему у нас нету? Во-вторых, куда список книжек проебали при перекате? В-третьих, скоро 11 шарп выйдет, а у вас там до сих пор про 9 написано. В-четвертых, вместо мертвого замарина надо вписать мертворожденный мауи.
.png368 Кб, 774x551
184 2401945
>>401937

> Напиши гайд сам


> Я???


> Перекатывай сам


> Я??????


> Оформляй шапку сам


> Я?????????

185 2401952
>>401945
Я вкатыш, куда я там чего напишу.
186 2401975
>>401952
Хоть и вкатышь, судя по твоему посту ты имеешь представление об идеальной шапке. Значит, ты обязан сам туда что-то написать.
unity.mp43,9 Мб, mp4,
856x480, 1:58
187 2401982
>>401937

> скоро 11 шарп выйдет, а у вас там до сих пор про 9 написано


Ты можешь спокойно начать с шарпа 4.0

Список книжек должен был идти первом постом. Но ОП проебался
https://pastebin.com/pbK8CGqw

Ещё там мельком упоминается Unity. Считаю это большим упущением, потому что это очень крутой и популярный инструмент в данный момент.

Ещё есть очень крутая книжка для самых новичков:
Учимся программировать на C# вместе с Джоном Смайли
она давно снята с продажи, но её легко можно купить с рук
188 2402002
>>401982

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


Популярный - возможно, крутой - не особо.
189 2402008
>>402002

> крутой - не особо


Как минимум для шарпера лучший выбор. Хочешь делай на ПК, хочешь на консоли, хочешь на мобилки, хочешь для ВР (для поплуярного ВР чата контент делается именно на юнити, кста).

Ближайший аналог - Unreal Engine. Но это тяжеловесный монстр для профессиональных команд.
190 2402014
>>401975
Я знаю только что там должны были быть книги, ну и версии апдейтнуть надо. Главное - гайд. Его я точно не напишу.

>>401982

>Ты можешь спокойно начать с шарпа 4.0


Это извращение. У нас модный молодежный язык. Зачем пердолить версии, которых даже в легаси уже не найти? Ниже седьмой сидят единицы.

>>402008

>Но это тяжеловесный монстр для профессиональных команд.


Совсем не обязательно. Мегаскансы+блюпринты - и вот ты уже можешь делать внушительные проекты даже в одну харю. На юнити же тебе придется знать шарп (причем специализированный) и много с какими вещами дополнительно заебываться. Но на анриле неудобно делать мобилки и в принципе невозможно делать 2д.
191 2402040
У шарпа есть препроцессор? Чем он занимается помимо резолва директив?
192 2402044
>>402040
Есть, но не надо его юзать.
193 2402046
>>402044
Это понятно. Какие у него функции вообще? По любому же на каком-нибудь собесе спросят.
194 2402053
>>402008

>Как минимум для шарпера лучший выбор.


И опять ты не прав. Для шарпера это просто почти единственный выход если он хочет вкатиться в геймдев именно как в профессию. Но в 2К22 вкатываться в проф-геймдев - это хуйня из под коня. Говно в разы хуже галер, еще и платят меньше.
А вот если ты хочешь вкатиться просто, чтобы забацать своей индюшатины на C#, то выбор у тебя намного больше. Stride, Godot, FNA, FlatRedBall и т.д.
195 2402058
Вы так активно движкосрачи начинаете будто гейдев не мёртв уже как лет 5
196 2402066
>>402040

>Although the compiler doesn't have a separate preprocessor, the directives described in this section are processed as if there were one. You use them to help in conditional compilation.


Нету препроцессора. Есть только директивы, которые обрабатываются как будто бы он есть.
Алсо, на собесах про такое спрашивают практически никогда. Единственный вариант который еще может быть это про nullable context если ты идешь конкретно на .net6. Но и то мало еще кто понимает как их толком использовать.
А за использование остальных директив в коде обычно по ебалу дают, поэтому их можно и не знать.
197 2402068
>>402014

>Мегаскансы+блюпринты


Говно говненого говна.
Эта хуйня годится, только чтобы геймдизы могли игровую логику для квестов накидывать. А любой нормальный разраб тебе в ебало нассыт за их использование.
198 2402069
Так что выбрать для кросплатформенного гуи то? Нихуя вас не разберёшь. Или Qt так и остаются единственным вариантом?
200 2402078
>>402074
А как он в плане производительности и потребления ресурсов?
201 2402079

>4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить?


Неправда. C# активно развивается, недавно вышел .NET 5 и С# 9.0. Дотнет стал полностью опенсорсным и кроссплатформенным. В том же энтерпрайзе он очень даже востребован.

Вопрос а как вкатиться в шарпы? Шапка конечно интересная, но ответ на этот вопрос не дает. На 1 курсе были шарпы от преподш, которые сами параллельно работали, все следующие курсы прога будет полное говно. И как-то хочется в шарпы, раз я уже что-то знаю. Сами преподы сказали, что нас с руками и ногами возьмут, потому что мы повидали говно. Да вот хуй там. Я читаю, и почти на все джун позиции нужны опыт работы, знание ASP.NET/Какой-то конкретный SQL/JSON/XML/WPF/нужное вставить. Если это веб, то еще просят html js и прочую поебень. Для джуна. Допустим я выучу что-то из этого списка, а что потом? Искать вакансию с этой конкретной фичей? Про SQL вообще нихуя не ясно, он везде разный. Как вкатиться то, если я такой нахуй никому не нужен? Посоветуйте нужную комбинацию вышеупомянутых фич, чтобы гарантированно пойти куда-нибудь
202 2402080
>>402068
Ты бы хоть инфу по теме поискал. Блюпринты абсолютно охуеннны. Офк, никто и никогда не будет с их помощью делать ААА, а вот индюшатину можно пилить за милую душу.
203 2402083
>>402079
Ты просто нытик и бездельник. Я за 3 месяца вкатился и уже работаю получая 2к бачей.
QcEn7XJOuHc.jpg69 Кб, 550x550
204 2402084
>>402074

>нет линукса


>кроссплатформенный

205 2402085
>>402083
Ты за 3 месяца с нуля освоил c#?
206 2402087
>>402084
Сейчас бы тратить время на платформу, на которой невозможно заработать.
207 2402089
>>402085
А что тут осваивать?
208 2402090
209 2402092
>>402090
Не ной, а скачай книжку и начинай читать.
210 2402106
>>402079
Я вот тоже вкатун и на безрыбье сделал свой план. Не ебу, насколько он адекватный, может местные мидлы-сеньоры поправят.

1. Основы погромирования+синтаксис+база ООП (я сейчас здесь).
2. Тут планирую пробежаться по первому курсу Нила Каммингса, где он показывает запиливание интернет-магазина на ASP+Angular. Это чтобы представлять устройство системы на поверхностном уровне.
3. После этого думаю подтягивать частные знания: SQL (можно учить любой, проще всего PostgreSQL), EF, как работают интернеты, нахвататься базовых знаний по JS/TS/Angular. HTML и CSS вроде особо не нужны, либо их можно подтянуть потом.
4. Поверхностно потрогать паттерны проектирования, алгоритмы и структуры данных, порешать задачки на Литкоде.
5. Второй курс Нила, где он на том же стеке делает что-то вроде соцсети. Тут я уже буду делать кастомный вариант и применять полученные в п. 3 и 4 знания.
6. Свой жирный пет, который будет нормально задеплоен на VPS и будет представлять собой потенциально коммерческий проект.

Там еще много всяких технологий типа Redis, Kafka, RabbitMQ, всякие системы логов, Докер и так далее. Я в душе не ебу, что это вообще такое, но вроде оно с джуна не требуется.
211 2402121
>>402106
Cпасибо!
212 2402123
>>402106
Хуйня план. Ты так выгоришь очень быстро. Мой тебе совет - освоить фронт, вкатиться работать с ним и уже после по вечерам доучивать шарп и прочую бекодрочь. Так у тебя и на поесть будет, а если не дурак и того больше и мотивация.
213 2402133
>>402121
Я бы не рекомендовал брать этот план за основу, я ж полный ньюфаг не только в шарпе, но и в кодинге вообще.

>>402123
Так я в бек хочу, фронт - это в качестве дополнения, накидать что-нибудь на бутстрапе и наговнокодить кнопочек на ангуляре. Просто для понимания как оно устроено и в резюме строчку добавить. А нормально залезать во фронт сейчас ни разу не быстрее бека. И конкуренция там охуевшая. И жс учит плохому.
214 2402182
Два вопроса от ньюфага.
1. Какие паттерны часто используются и их нужно выучить обязательно? Или строго все нужно учить?
2. Несколько раз уже слышал, что из-за того, что сейчас все на микросервисах, наследование практически не используется. Как это устроено? Ведь без наследования мы лишаемся полиморфизма, абстрактных классов, интерфейсов и ООП в целом.
215 2402195
Нужно ли знать razor pages для вката? Недавно вкатился пилить круды в мелкую компанию, планирую уходить.
216 2402200
>>402182
1. DI
2. Хуйня, все монолит пишут и не парятся.
>>402195
Там нечего знать и учить
217 2402206
>>402182

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


в огороде бузина, а в киеве...
Эти вещи вообще не связаны.

Делегирование предпочтительнее наследованию (не всегда конечно), но микросервисы вообще не причем.
218 2402208
>>402182

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


Вообще никак не связано.

> Как это устроено?


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

> Ведь без наследования мы лишаемся полиморфизма, абстрактных классов, интерфейсов и ООП в целом.


Класс не наследуется от интерфейса, он его реализует. Большая разница. При отказе от активного использования наследования интерфейсы никуда не деваются. Насчёт "ООП в целом" спорно, ООП все по-разному понимают, и в современном понимании наследование является необязательным элементом.
219 2402219
>>400025
Изучай SOLID.
220 2402235
В общем думаю сделать пэт проект - облако. Сейчас на стадии предварительного планирования есть пара вопросов.
1. Как имитировать платежи? Есть какой-то пакет или сторонний сервис с колбэками, имитирующий платежи? Чтобы примерно понимать вообще, как оно работает.
2. Как сделать маршрутизацию вида ...:5001/files/papka1/govno/jopa, это обрабатывалось одним контроллером и он ловил "/papka1/govno/jopa" в параметр
221 2402251
>>402235
2) Прописываешь в атрибутах контроллера и его методов.
1) Если ты не знаешь как делается пункт 2, то до первого тебе как до китая раком.
222 2402258
>>402251
Пажжи, это просто в атрибут как "/files/{path}" условно кидается? Я просто почему-то думал, что раз там слэши, оно не спросит нормально
223 2402260
>>402258
Не спарсит*
224 2402277
>>400293
Это кросс в том числе и линукс и винда. Плюс мобильщина бывает на планшетах а там точно таблицы нужны. Больше похоже что педерасты из МС опять хуйней страдают как было с UWP.
225 2402278
>>400237
Не так, инкапсуляция скрывает данные, неймспейсы лишь решают конфликты имен. Вообще ортогональные понятия.
226 2402302
>>402277

>а там точно таблицы нужны


да ну. разве что в специализированном софте аля "таблицы". ибо больше нигде и не видел.
А так нужно отделять DataGrid от GridView
227 2402305
Как можно объяснить аномалию, что return напрямую из результата функции, возвращает бяку:
return MyFunction();

и приходится делать через временную переменную:
string result = MyFunction();
return result;
228 2402314
>>402305
Функция небось асинхронная?
229 2402316
>>402314
В том и дело, что обычная.
230 2402319
>>402314
Если бы была асинхронная, то присвоение ничего бы не дало.
231 2402331
>>402316
Скинь хотя бы код и ошибку.
232 2402336
>>402302
Энтерпрайз это специализация дот нета же, в бизнес задачах почти всегда надо табличку показать.
DataGrid и GridView это же просто разные названия у разных платформ\производителей того что в винформс называлось DatgaGridView.
233 2402337
>>401927
1. VB.Net имеет много общего с C#. Но VBA - не имеет ничего общего с C#, так что не в ту дверь ты стучишь. Хотя на шарпе можно написать надстройку в формате VSTO или либу и экспортировать нужные методы в COM, а потом подключить к коду VBA через Tools/References.
2. Допустим у тебя есть таблица сотрудников. У сотрудника есть ID. И есть таблица Порядок сортировки, где каждому ID указан порядок. Тогда ты должен либо формулами Excel (ВПР, ИНДЕКС, ПОИСКПОЗ, СРЗНАЧЕСЛИМН или какой-то другой) привязать значение порядка сортировки из второй таблицы в первую, и по нему сортировать. Никакой VBA тут не нужен.
3. На VBA если делать.
Создаешь структуру (Type Sotrudnik... End Type) под твои данные. Читаешь в массив такой структуры данные из таблицы 1, привязываешь к ней данные из таблицы 2, сортируешь массив (ну реализуй функцию, которая сортирует пузырьком, это легко), выводишь на нужный лист уже готовые данные.
Type Sotrudnik
FIO As String
Identifikator As String
SortirovochnoeZnachenie As Long
End Type
234 2402339
>>402331
Ошибки нет, просто возвращается ноль или не то, что ожидается.
Единственное что, функция вызывается из библиотеки.
235 2402341
>>402200

>1. DI


А синглтон какой-нибудь? Видел где-то список из примерно 4-5 маст-ноу паттернов, но проебал и не могу обратно найти.

>>402206

>Эти вещи вообще не связаны.


Я у этого сеньора про это слышал, может неправильно его понял: https://youtu.be/ETdulc1xk04?t=281

>>402208
Стоит ли мне тогда как нубу тоже минимизировать наследование и использование абстрактных классов?
236 2402342
>>402341

>А синглтон какой-нибудь?


Это больше мем, чем паттерн.
237 2402349
>>402342
Это иллюстрация что паттерны это развод наперсточников маркетолухов, тупо обозвали глобальную переменную модным словом и типа решили проблему. Вроде еще Луговский говорил что паттерны для дебилов и суть фиговый листочек для прикрытия уёбищности ООП.
image113 Кб, 960x540
238 2402359
>>402200

>1. DI


Это хуйня, а не паттерн, просто кристаллизованный зумерской дебилизм. Передача аргумента в функцию - рррряяяяя, я применил паттерн депенденси инжекшн. Чтение конфиг-файла - рррряяяяя, я применил паттерн депенденси инжекшн.
239 2402361
>>402359
А как нужно правильно делать?
240 2402371
>>402339
Ну так хотя бы название библиотеки и метода.
241 2402377
>>402278
Инкапсуляция - это объединение данных и операций над этими данными в единую сущность. А скрытие - это скрытие, это отдельный принцип, который за каким-то хуем лепят вместе с инкапсуляцией.
242 2402381
>>402377
Кто тебе этот бред сказал? Инкапсуляция это именно сокрытие, а объединение данных и операций это вообще класс или тип.
Ты даже если не знал как правильно мог бы догадаться построив контпример класса с операциями над открытыми данными.
helloviews4.png21 Кб, 200x284
243 2402418
>>402336

>DataGrid и GridView это же просто разные названия у разных платформ


Ну обычно смешивают. но на деле датагрид это там сортировка, фильтрация и так далее
А гривью это "фоточки собачков сеточкой уложить" (https://docs.microsoft.com/ru-ru/xamarin/android/user-interface/layouts/grid-view).
244 2402419
>>402341
да просто предпочитай делегирование наследованию и всего делов. Тем более что при использовании S от SOLID это само собой получается.
245 2402433
>>402428 (Del)
Что именно?
246 2402438
>>402436 (Del)
ну так легко не решать (ваш кэп)
247 2402444
>>402361
Не нужно называть паттерном, принципом, шаблоном и т.п. примитивные банальные повседневные элементы программирования.
248 2402449
>>402436 (Del)
Зачем ты решаешь дейлики, чел? Как насчёт того, чтобы перестать индульгировать и найти наконец работу? Ну знаешь, там, мать/жену/дочь на курорт свозить, зубы/фигуру пофиксить, мотоцикл купить, etc.?
249 2402451
>>402450 (Del)
Плохо быть тобой, чел. Какой стек?
250 2402456
>>402454 (Del)
а дейлики тогда зачем?
251 2402457
>>402454 (Del)
Ну допустим. Какой уровень? В любой цивилизованной стране это даже для ждуна $2к.
252 2402462
>>402460 (Del)
ага. а потом на тебя будут смотреть не по скилам, а по паспорту
как вот с мелкими
image.png70 Кб, 875x239
253 2402463
254 2402489
>>402463
Зато там можно тихонько залезть в какой-нибудь далекий угол, где про тебя никто не вспомнит, смотреть там аниму и получать 300кк/наносек.
255 2402492
>>402489
Манямечты. Погугли как в амазоне люди работают.
256 2402501
>>402381

>Инкапсуляция это именно сокрытие


Если что, то сокрытие спокойно реализуется и с помощью наследования и с помощью полиморфизма. Так что ты объебался.
257 2402506
>>402501
Шли третьи сутки споров о том, что является домом: стены или двери.

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


Как всегда логично.
258 2402507
>>402341

>А синглтон какой-нибудь? Видел где-то список из примерно 4-5 маст-ноу паттернов, но проебал и не могу обратно найти.


Синглтон достаточно просто знать, чтобы ответить если спросят. Самому про него лучше не спрашивать. (И кстати те синглтоны, что используются в DI - это не те же самые что в паттерне).
Знать хорошо "Фабричный метод" и "Абстрактную фабрику" и чем от них отличаются. Дополнительно неплохо знать "Стратегию", "Цепочку обязанностей", "Команда". Этого в принципе достаточно.
259 2402511
>>402507

>Самому про него лучше не спрашивать.


Не говорить.
260 2402520
>>402444
Может для тебя повседневные, а кто-то не знает. Тем более реализация ДИ на уровне проекта не тривиальная задача. Нет, конечно, если готовенькое используешь, то может показать тривиальным.
261 2402523
У меня при каждой итерации лист должен забиваться новыми элементами при помощи .Add

Что лучше: делать Clear старого экземпляра листа, или просто присваивать новый экземпляр New List?
262 2402538
>>402520

>Может для тебя повседневные, а кто-то не знает.


Я не знаю как возвращать данные из функции, поэтому я читаю про Return Pattern.

Есть еще Non Floating Pattern, это когда ты создаешь переменную целочисленного типа и присваиваешь ей значение.

Есть еще ABС Pattern, это когда ты создаешь переменную содержащую в названии буквы алфавита.
263 2402553
>>402501
У тебя каша в голове, твои тексты это генератор бреда.
264 2402558
>>402418
Я этот гридвью как просто грид в впф встречал. Ну да, это совсем из другой оперы, просто лэйаут а надо имеено экселе-подобную табличку для редактирования и ввода данных.
265 2402563
>>402538
Я думал, я один так про это думаю, и объяснял это тем, что джунишка и не способен постичь великой мудрости.
А можно так на собесах говорить или пидорнут за такое?
266 2402564
>>402523
Для перформанса лучше Clear, зачем грузить и так уставшить ГЦ новыми аллокациями постоянными?
267 2402570
>>402563
Просто самому не надо на собеседовании инициировать рассказ про односложные паттерны. А вероятность того, что тебя спросят рассказать про синглтон, близка к нулю. Ну а спросят — расскажешь.

Но если джуна спрашивают, какие паттерны он знает, и он в пример приводит синглтон, а потом добавляет, что "это хуйня для дебилов", то ясен пень, что в таком контексте его воспримут как шизоида.
maxresdefault (2).jpg72 Кб, 1280x720
268 2402579
>>402538
— Расскажите про ваш самый часто используемый паттерн
— NonFAP - Non Floating ABС Pattern
269 2402584
>>402564
А если в одной итерации 10 000 итемов, а в другой 3 итема?
Читал где-то, что Clear годится для обработки до 100 000 и если количество данных при каждой итерации не отличается разительно.
270 2402586
Обычные методы или лямбды?
271 2402592
>>402586
Щитаю, если метод короткий и применим только в пределах одного метода, то лямбда.
272 2402601
>>402584

>что Clear годится для обработки до 100 000


Ожидание: Clear - это магический метод, которые много всякого проворачивает под капотом.
Реальность:
public void Clear() { _free_index = 0; }
273 2402607
>>402587 (Del)
Подтверждаю, "работаю" так же.
мимо из фаанга
274 2402651
>>402523
Если важна память то аллокация, если время то clear
275 2402653
>>402538
Ты понимаешь что за этим стоит парадигма программирования? Ты пишешь такой код, который можно легко тестировать, потому что его части абстрагированы друг от друга и через внедрение зависимостей ты можешь быстро заменить реальный сервис на тестовый или отладочный. Зачем ты всё упрощаешь до шуточек для умственно отсталых, клоунидзе?
276 2402656
Как лучше всего сейчас работать с REST API из WPF (чистого)?
Какой из стандартных классов или какой пакет?
Бэкэнд тоже на шарпе
.net core 5
277 2402657
>>402305
Какой тип MyFunction возвращает?
Может что она вернула в стрингу кастится.
А твоя какой тип?
278 2402660
>>402653
Парадигма кал. Хуй проссышь что там внедрено если заранее не знаешь только усложняет а не помоагает.

>>402656
Начиная с 5 это просто net.
279 2402726
>>402463
Это ещё полуправда. Дело усугубляется тем что в фаанг набирают по квотам педерастов, баб и чурбанов вместо толковых белых программеров. Не удивительно что в итоге получается кал.
6a97628144034eac8f320d60ef256ac9.jpg175 Кб, 1920x1080
280 2402738
WPF стили нужно переосмысливать.
Чтобы закруглить края, нужно писать километры текста.
Чтобы сделать кнопку с иконкой, нужна простыня, которая способна трижды обернуть земной шар.

Мне хочется написать 5 строчек кода, вместо создания стилей. Я нормален? Везде пишут "Чувак, ксамл стили специально созданы для этого", но нет — я думаю, что созданы для страданий.
image.png431 Кб, 1657x941
281 2402741
>>402660

> усложняет а не помоагает


Абстракции ради абстракций действительно только усложняют, хотя некоторые рекомендуют их везде использовать. Но в некоторых случаях это жизненно необходимые вещи. В тех же проектах ASP.NET. Ты же не будешь каждый раз тестировать какой-то функционал с реальными сервисами? Тебе нужно подставить тестовые сервисы как раз через внедрение зависимостей. Или, допустим, в игре у тебя может быть много различных сервисов: первый работает с бекендом; второй с аналитикой; третий с платежами; четвёртый подключает фейсбук и другие социальные сети, загружает друзей; пятый грузит функционал стима; и так далее. Чтобы всё безумие нормально тестировать, тебе потребуется внедрение зависимостей.

Есть ещё более сложный пример с архитектурой игры Покемон Го
https://www.youtube.com/watch?v=8hru629dkRY
282 2402746
>>402657
Бля, ну это все очевидные вопросы. Зря я стринг в примере использовал. На самом деле возвращал сингл из функции, в которой тупо 2+2. Я очистил код до минимума, чтобы ничего не мешало.

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

Единственное, что я не упомянул, это то, что моя библиотека сконвертирована в unmanaged (просто расставлены точки входа в функции).
283 2402754
Правильно ли я понимаю, что принцип DI говорит о том, что мы все зависимости объявляем в конструкторах классов, а потом вызываем классы и связываем их друг с другом в Program.cs?
image140 Кб, 1000x725
284 2402767
>>402741
Внедрение зависимостей и называется, и выглядит как тупое говно, и им же оно и является, если использовать это понятие в узком смузихлёбном смысле, а не в широком (в широком смысле в каждую функцию при её вызове постоянно внедряются зависимости через аргументы).
Диды всё тоже самое делали через define (в шарпе тоже доступно) или через конфиг-файлы, конфиг стринги, да хотя бы просто статик класс или синглтон сделать который скажет инстансу приложения, как и что инициализировать. И всё перечисленное выглядит намного нормальнее и намного менее будет удивлять, чем шизофренический код как слева на картинке.
285 2402778
Пчелики, угомонитесь со своими принципами, паттернами и прочей хуйнёй. Этим даже в фаанге люди голову не ебут и пишут as is.
image.png219 Кб, 854x480
286 2402788
>>402767
Тяжёлый случай, однако.
287 2402848
>>402767

> как слева на картинке.


Мало того что написал какой-то хуеты не относящейся к теме,так еще и говноджавакод в качестве примера приводит.
2022-07-1120-35-12.png147 Кб, 1692x733
288 2402882
Почему в событии OnChecked, несмотря на установленный желтый бэкграунд, у меня какой-то голубой цвет?

Причем форграунд меняется номрально.
289 2402952
>>402882

>Почему в событии OnChecked, несмотря на установленный желтый бэкграунд, у меня какой-то голубой цвет?


1. Забилди проект
2. Посмотри внутри тега
3. Покажи скрытый код в #region
290 2402985
>>402952

>1. Забилди проект


делал

>2. Посмотри внутри тега


Какого?

>3.Покажи скрытый код в #region


У меня нет региона, и это вообще xaml
291 2402987
>>402882
это короче из-за виндовс стилей, типа аэро хуяеро типа такого что-то, не помню
292 2402993
>>402987
ааааа, вот прям ненавижу эти ебаные стили.
293 2402995
>>402200
Ну да, хуйня, я просто верстать не очень хотел ((
294 2403000
>>402985
Твоей кнопки или че там у тя за контрол
295 2403009
>>403000
Ты имеешь виду показать как выглядит свойства экземпляра кнопки? Да там только текст контента (пикрил 1), ну еще биндинг стиля был.

В общем пикрил 2 сделал
296 2403026
>>403009
Создай вопрос на ру SO, тебе там очень быстро ответят
297 2403027
>>402778
Паттерны еще может быть, а вот без принципов можно написать только наглухо отбитый неподдерживаемый говнокод.
298 2403047
>>402008

> Ближайший аналог - Unreal Engine.


Ближайший аналог юнити - годот. Там даже кодить на шарпе можно. С анрилом два этих говна не сравнятся.
299 2403081
>>403047
Юнити в разы превосходит Годот. С Анрилом оно вполне тягается, просто у них задачи разные.
15058216385830.jpg32 Кб, 604x453
300 2403084
>>403026
Я лучше подожду, когда эта хуйня издохнет. Надеюсь это будет быстрее, чем скорость ответа на SO. Я бы за потраченное время уже написал миллиард стилей обычным кодом.

Это выше моих сил. Каждый ебаный шаблон имеет свои НЮАНСЫ у каждого элемента, километры соплей вложенных в блевоту - шоб просто изменить цвет рамки. Ну вот если в тексбоксе есть цвет рамки, и в кнопке есть цвет рамки, НУ ТАК СХУЯЛИ шаблоны сука разные должны быть? СХУЯЛИ?

Я не профессиональный анальник, и я эти унижения терпеть не собираюсь!
301 2403086
>>403047

> Ближайший аналог юнити - годот


Клоунидзе, спокуха. Вот лишь небольшая часть игр сделанных на юнити. А на говноте твоём что сделано?
302 2403090
>>403084
Джоб секурити и защита от вкакотусек.
303 2403091
>>402738

>WPF стили нужно переосмысливать.


Есть такое. Да, есть возможность задать свой дизайн, но это очень многословно. Да еще рукожопы из мс шаблоны контролов сделали жопно. А стили сами по себе неправильные в плане наследования.
304 2403093
>>402767

>И всё перечисленное выглядит намного нормальнее


только работает через жопу. 2 разных экземпляра зависимости - хрен тебе, подменить зависимость - хрен тебе, тестирование - соси хрен, тебе же сказали.
305 2403115
>>402014

> шарп (причем специализированный)


Какой такой специализированный шарп?
>>402053

> Но в 2К22 вкатываться в проф-геймдев - это хуйня из под коня.


Нихуя. Если тебе это реально интересно, то работа кайф.
306 2403148
>>403090
Надо больше джоб секюрити. На контур Recrtangle присваиваешь new SolidColorBrush, а на контур Ellipse — new SolidPizdaMamashy. И чтобы изменить толщину линии эллипса, простое присвоение Thickness хуй тебе поможет (ну и что, что есть такое свойство? Ты охуел?), поэтому ты должен пересобрать класс заново. Вот это я понимаю стандартизация и универсальность.

А может это простой бардак. Алсоу, я сейчас пишу плагин для проги, где похожие сектанты вещают точно так же. У них нельзя удалить 3д-модель клавишей delete, и это типа защита от вкатунов. А внутри все элементы интерфейса захардкожены, внутренние скрипты не умеют работать параллельно — новый убивает процесс текущего, а в самом языке отсутствует возможность написания бесконечных циклов. Но это не жопорукость разработчиков, это джоб секюрити.
307 2403156
>>403148

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


Самое смешное, что в официальном хелпе есть пример написания музыкального плеера, который подразумевает параллельное выполнение на протяжении всей сессии программы. Но добрая часть элементов тоже использует скрипты, поэтому попытка пользоваться программой во время работы плеера к хуям убивает оный. На что разработчики сделали маленькую приписочку, что "из-за однопоточности, работа плеера может вызвать трудности".
Вот это вот классическое американское обтекаемое "может вызвать трудности" применимое к полнейшей невозможности.
308 2403162
А в крестотреде мне рассказывали, что xaml язык богов, и qml у него сосет
309 2403163
Решил тут разобраться в аутентификации всякой, но чёт не понял - а где код, за неё отвечающий? Во всяких доках и гайдах пишут, что код можно менять под себя, лежит он в папке Areas/...
А там нету нихуя
Вот хочу я в юзера поля добавить, группы пользователей поменять или google auth прикрутить, где это можно сделать?
310 2403172
>>403115

>Какой такой специализированный шарп?


Хуево выразился. Шарп офк тот же самый, но в Юнити своя огромная библиотека. Поэтому тот же бекендер с ноги в Юнити не залетит, придется много чего учить.
311 2403175
>>402656

>Как лучше всего сейчас работать с REST API из WPF (чистого)?


>Какой из стандартных классов или какой пакет?



Бамп вопросу
312 2403182
>>403175
А какая свянь между рест и впф?
313 2403190
>>403175
System.Net
314 2403203
>>403182
>>403190
Интересуюсь что лучше для rest запросов-ответов к использовать с десктопной приложухи
HttpClient или WebClient или может что стороннее будет лучше? Какая лучшая практика для этого?

Дополню вопросом про кэш
Планирую использовать для кэша sqlite в файлике
Но насчет схемы бд решил что пусть будет копией того что на бэке висит + файлы в блоб/байнери хранить
Если у клиента в кэше в дб такая же схема как и в дб на бэке это норм или моветон?
315 2403217
>>403203
да нет связи десктопности с запросами
берется что нравится
refit например кто любит декларативность, другой рест клиент типа TinyRest или RestSharp
или же тупо HttpClient c json расширением. (но это уже все таки low-level)
или же HttpClient и ручная работа с json

ерунда вопрос же
316 2403221
>>403203
структура кеша делается для ускорения работы. так что может быть как и "копия бд" аля "работаем оффлайн" (но даже в этом случае нет причин делать 1 к 1), так и вообще "ключ - значение".
Все зависит от потребностей.
317 2403224
>>403203
лично я использую Tiny.RestClient поскольку часто имею дело с рукожопными апи и строгость декларативности меня ограничивает, а опускаться на уровень HttpClient перебор
318 2403246
>>403093
Ну вот в примере на Java, если тебе надо поменять зависимость, ты правишь файл service.xxx или хранишь несколько таких файлов.
Что мешает сделать то же самое с конфиг файлом, с дефайнами или наконец с файлом со статик классом, поставляющим зависимость?
319 2403248
>>403246
единственность зависимости мешает. А если у меня 2 экземпляра потребителя зависимости и каждому нужно своя имплементация зависмости? А менять статик класс вообще жопа - тут статикотипизированный язык
320 2403249
>>403162
Разве удивительно, что шарпобляди сидят не только в своём треле?
Image 2.png2 Кб, 147x112
321 2403253
Вот для тех кто смотрит на авалонию пример что с ней не так
шрифты
322 2403257
>>403253
А там есть Snap to pixels?
323 2403260
>>403253
А как такими авалониями отображать графику? Например вектор?
324 2403262
А на чём созданы последние версии визуал студио? На WPF? Или у них там своя секретная библиотека.
325 2403264
>>403262
На чистом winapi
326 2403265
>>403257
похоже нет

>>403260
ну графику то отображай как и в WPF
это со шрифтами беда, они же рендерятся иначе

>>403262
помесь всего. поверх сях там ты можешь сделать расширение где панелька будет на впф, но в опции тебе придется делать винформс окошко
327 2403281
>>403217

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


>берется что нравится


Я понимаю, спрашиваю чем люди пользуются, чем удобнее

>>403224
Благодарю

>>403221
Просто мне не охота заново как-либо придумывать структуру
Поэтому интересуюсь если почти 1 в 1 будет не считается ли это дурным тоном
328 2403317
>>403262

>них там своя секретная библиотека


Думаю да, это же мелкософт, они всю жизнь такие, борьба с конкуренцией.

>>403264

>На чистом winapi


Вангую у мелкософта есть либы нативно встраивающие winapi в шарп, только вам лохам их не дадут, ебитесь прописывая каждый вызов ручками.
329 2403338
>>403281
дурным тоном для кого? Это кеш. Как удобно, так и храни.
330 2403377
>>403317
Может быть для среднего шарписта-кнопкоскруглятеля winapi и является недоступной магией, но для второсортного байтоёба оно весьма просто, примитивно и понятно.
331 2403460
>>403377
Дело не в сложности, а втом, что майкрософт не дает нормального доступа из шарпа. Но для себя-то за закрытыми дверями по любому имеет, но другим не дает.
332 2403513
Как же хочется вкатиться...
16567616938980.mp43,4 Мб, mp4,
1280x720, 0:06
333 2403573
>>403513
Вкатывайся. Разрешаю.
334 2403578
>>403573
Но как?
335 2403580
>>403578
колесом
336 2403581
>>403580
А если серьёзно?
337 2403622
>>403581
а серьезно - не нужен тебе шарп. был бы нужен - ты бы просто его учил, а не спрашивал.
338 2403628
>>403622
Так я учу, вон 3 книгу уже на 1/5 прочитал. Тяжело просто, поддержите морально.
339 2403645
>>403628

> Тяжело просто, поддержите морально


И что ты уже освоил? Что можешь написать? Читать без практики бессмысленно. Нужно постоянно программировать.
340 2403651
>>403645
LINQ могу, таски могу, треды могу, с Http игрался, ща с дотнетом и разором воюю. На кодварсах 5kyu пробую долбить. Ну всякое ооп там, дженерики хуё-моё.
341 2403654
>>403651
Ну то есть ничего не умеешь.
342 2403660
>>403654
Это ты так потроллить меня решил?
343 2403670
Посоветуйте библиотеку для создания миниатюр изображений. Нужна скорость, многопоточность.
344 2403692
GC.Collect(n) чистит за поколением n в SOH. А лоха как чистить? GC.Collect(2)?
345 2403708
>>403692
ну типа да. или спросто Collect()
346 2403714
>>403708
Тяжело...
image.png424 Кб, 600x600
347 2403735
На почту упало уведомление, о том что епам просмотрел мою заявку на вакансию, которую я отправлял месяца 2 назад.

Сравнил с тем что есть сейчас. Просто пиздец как требования выросли.
348 2403801
>>403714
так не вызывай. используй сервер с 256 гигов рамы и гоняй на нем консольный калькулятор на шарпе - и вызывать GC.Collect() не придется
349 2403814
>>403660
Тебе надо учить не отдельные технологии, а программирование. Оно, в свою очередь, учится практикой. Ты мог выучить переменные, условные операторы и циклы с оопом, а после только с помощью этого уже запилить рабочее приложение. Но раз ты уже выучил больше, то пили приложение на асп или на какой стек ты там собрался.
350 2403825
>>403670
все равно все упрется в "либу что работает с имаджами"
из них Bitmap возможно пойдет лесом ибо почти стал win-only
еще куча отвалится ибо фреймворк старый

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

ну еще есть либы типа opencv, но запускать это на лиунксах как в анекдоте "а теперь попробуем взлететь"
351 2403831
>>403814
Ну я год фуллстаком отпахал, это считается как программирование?
352 2403839
>>403831
Так а хули ты тогда вообще? Ты вкатиться можешь с полпинка.
353 2403842
Посоветуйте годный редактор UML-диаграм. Что ни пробую - одна хуйня.
354 2403844
>>403842
Enterprise architect?
355 2403851
>>403839
Ну тяжко же...
356 2403860
Вот бы тысячу звездочек в репе...
357 2403866
>>403860
Нахуя?
358 2403884
>>403866
Подписка, лайк, репост.
Лайки = звёздочки
Репосты = форки
Подписки = вотчеры
359 2403888
>>403884
Профит = ?
360 2403889
>>403888
= увеличение ЧСВ
361 2403890
>>403888
Пожертвования. Оффер в фаанг.
362 2403891
>>403889
Толсто
363 2403892
364 2403896
>>403851
С нуля вкатываться тяжко, а если ты уже понимаешь за основы кодинга и ооп, как оно там вообще устроено, то тебе по сути надо выучить только синтаксис, фреймворк и немного почитать про около технологии.
365 2403906
>>403844
А кроссплатформенные и бесплатные варианты есть?
366 2403923
>>403906
Зачем тебе кроссплатформенность?
367 2403927
>>403923
Зачем тогда шарп?
368 2403929
>>403927
Для винды
369 2403931
>>403929
У меня линукс
370 2403934
>>403931
Почему ты пользуешься прошивкой для роутера на десктопе?
371 2403937
>>403934

>Почему ты пользуешься микроконтроллерами?


>Почему ты пользуешься серверами?


>Почему ты пользуешься телефоном?


>Почему ты пользуешься телевизором?


>Почему ты пользуешься автомобилем?

372 2403938
>>403934
Посоветуй годный UML-редактор для роутеров, чтобы 192.168.0.1, admin, admin, хуяк - и UML.
373 2403947
>>403923
>>403931
Благодарю, что ответил за меня. Таки именно для линукса. Но и на виндовых и мак машинах может пригодиться.
374 2404002
>>403896
Ну так то да. Ладно, ща кофе наверну и пойду превозмогать далее.
375 2404009
А все эти using который автоматом подставляются они разве никак на производительность/финальный размер бандла не влияют? Думается мне лучше ручками прописывать только то, что тебе нужно.
376 2404013
>>404009
Не влияют. И с вопросами про производительность/размер иди в C++, здесь всем поебать, запускается и ладно.
377 2404021
>>404013

>И с вопросами про производительность/размер иди в C++, здесь всем поебать, запускается и ладно


Я и так оттуда. И не вижу ни одной причины чтобы сразу не научиться делать всё правильно и качественно. С хорошо работающим кодом и работать приятно.
378 2404028
>>404021
Здесь есть технические ограничения платформы и рантайма, выше которых не прыгнешь. А в крестах ты ограничен только процессором.
image.png12 Кб, 432x200
379 2404029
>>404009
Вообще никак не влияет. На размер влияют подключенные библиотеки. Если работаешь в студии, то использую пикрелейтед команду, чтобы держать порядок в коде.
380 2404030
>>404009
Непроставленный using наоборот может ухудшить производительность, а именно замедлить сборку мусора, так как незачищенный объект, у которого есть финализатор, придется во время сборки мусора финализировать. Лучше задиспозить его сразу.
381 2404031
>>404030
Блэд, не про тот using подумал, соре
382 2404109
>>404028
Прыгнешь, если юзать хаки и ансейф код
383 2404112
>>404109
Проще писать на предназначенном для этого языке, будет правильно и качественно. Так-то и на петухоне можно грузить нативные DLL-ки и ебаться с ними ради перформанса.
384 2404128
>>404112
Скажи это тем, кто пишет прошивки на питоне и гуи на js.
385 2404211
Пиздец, блять, вчера весь день писал код и всё было норм. Сегодня открываю и такая хуйня: The type or namespace name 'AspNet' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) Как это говно пофиксить блять, на со и прочем говне одно говно а не решения.
386 2404226
>>404211
Студия 2022?
Если так, то обнови до последней версии и поотключай все ненужные расширения (лучше вообще все, кроме самых важных).
Там есть какая-то ебала, из-за чего она может неожиданно взять и потерять все референсы в проекте.
387 2404238
>>404211
дропни папку .vs
388 2404246
>>404226
Да не, я линуксоид с вимом.
>>404238
Хз что за хуйня и как это работает но помогла замена AspNet на AspNetCore.
389 2404301
>>404246
Закрой VS, открой папку с проектом, удали папку .vs, запусти проект заново.
Если нету папки .vs, значит нужно включить отображение скрытых файлов и папок.
image91 Кб, 994x435
390 2404361
>>403735

>требования выросли


Был период бума айти, лет 8-10 назад, когда каждому ИП Гаранян стал нужен свой сайт с интернет-магазином и прочими интеграциями. Тренд подхватили буквально все, от банков до крупных промышленников, все стали набирать айтишников. Спрос был взрывной и чтобы закрывать эти дыры, стали брать в айти кого-попало, кто хоть что-то может. Даже продукты уровня лаба по информатике в 9Б стали продаваться как горячие пирожки. Стало очень выгодно открыть IT-шарагу, набрать туда сброд и пусть они пилят сайты, который хоть как-то можно продать, демпингуя ценой.
Но рынок давно уже в стадии остывания, он перенасыщен. Говно - уже не продать. Сложные и уникальные решения под заказ уступают место простоте, минимализму и стандартным решениям. Даже дата-питухам стали показывать на дверь, т.к. во-первых, мало кто из компаний на самом деле имеет достаточное количество данных, а во-вторых, слишком много проходимцев, которые для начальства показывают петухон, а сами втихаря линейные тренды в екселе строят.
Как итог, в 2к22 экспресс-вкат в программирование для соответствования рыночным требованиям реально занимает от 2 лет. Даже продавцы курсов уже не обещают вкатить вас за 3 месяца. Реально указывают сроки - 24 месяца. И если почитать отзывы на том же хабре от людей, которые не имели кодерского бекграунда, там реально приходится пахать и не спать ночами, тратя в день по 6-8 часов, что становится невыполнимым квестом при обучении без отрыва от основной работы.
По факту мы видим, что рынку больше не нужны IT-джамшуты, а срок обучения программированию до начального профессионального уровня приблизился к сроку обучения в ВУЗе. В принципе, если из программы ВУЗа убрать физкультуру, философию, физику и электронику, основательно почистить математику, основательно почистить абстрактные компьютерные науки, то как раз бакалавриат сократится до 2.5-3 лет, что и имеем сейчас для вката с нуля (не важно, через курсы или самостоятельно).
Времена, когда можно было выучить С++ за 21 день и вкатиться, прошли.
image91 Кб, 994x435
390 2404361
>>403735

>требования выросли


Был период бума айти, лет 8-10 назад, когда каждому ИП Гаранян стал нужен свой сайт с интернет-магазином и прочими интеграциями. Тренд подхватили буквально все, от банков до крупных промышленников, все стали набирать айтишников. Спрос был взрывной и чтобы закрывать эти дыры, стали брать в айти кого-попало, кто хоть что-то может. Даже продукты уровня лаба по информатике в 9Б стали продаваться как горячие пирожки. Стало очень выгодно открыть IT-шарагу, набрать туда сброд и пусть они пилят сайты, который хоть как-то можно продать, демпингуя ценой.
Но рынок давно уже в стадии остывания, он перенасыщен. Говно - уже не продать. Сложные и уникальные решения под заказ уступают место простоте, минимализму и стандартным решениям. Даже дата-питухам стали показывать на дверь, т.к. во-первых, мало кто из компаний на самом деле имеет достаточное количество данных, а во-вторых, слишком много проходимцев, которые для начальства показывают петухон, а сами втихаря линейные тренды в екселе строят.
Как итог, в 2к22 экспресс-вкат в программирование для соответствования рыночным требованиям реально занимает от 2 лет. Даже продавцы курсов уже не обещают вкатить вас за 3 месяца. Реально указывают сроки - 24 месяца. И если почитать отзывы на том же хабре от людей, которые не имели кодерского бекграунда, там реально приходится пахать и не спать ночами, тратя в день по 6-8 часов, что становится невыполнимым квестом при обучении без отрыва от основной работы.
По факту мы видим, что рынку больше не нужны IT-джамшуты, а срок обучения программированию до начального профессионального уровня приблизился к сроку обучения в ВУЗе. В принципе, если из программы ВУЗа убрать физкультуру, философию, физику и электронику, основательно почистить математику, основательно почистить абстрактные компьютерные науки, то как раз бакалавриат сократится до 2.5-3 лет, что и имеем сейчас для вката с нуля (не важно, через курсы или самостоятельно).
Времена, когда можно было выучить С++ за 21 день и вкатиться, прошли.
391 2404369
>>403460

>не дает нормального доступа из шарпа


Доступ ровно такой же, как из C++.
Вот на этом сайте pinvoke (точка) net есть 99% всех WinAPI функций, которые для тупого шарписта прокомментированы и обернуты в шарп AS IS.
Я как-то сам подобное делал для себя для одной хитрой задачи, оборачивая нужные WinAPI в нормальном ООП стиле.
392 2404374
>>404361
Хуя какой ты толстый краб. Если что и перегрето так только веб. А помимо него так-то дохуя других сфер есть в которых конкретный такой голод. Мы к себе в фирму 5 месяц не можем найти годного мидла плюсовика.
393 2404426
>>404374
деньги платить пробовали?
394 2404433
>>404426
Пробовали. Всё равно большая часть вчерашние выкатцы из онлайн курсов и те, кто несут дичь.
395 2404441
>>404433
Попробуй ещё. Только на этот раз постарайся получше. Я в такой же нищуковой конторе работал и там тех дир точно так же был убежден что условия у него охуенные. По факту было ниже в 2-3 раза средних зп в ДС.
396 2404452
>>404433
да, скорее всего у вас "хорошие условия! кипяток бесплатно, раз в год повышаем зп на 0,004%, даём льготный проездной на троллейбус"
397 2404483
>>404441
>>404452
Мне вообще до пизды, я простой разраб не лид, не дир. Но у меня в мои мидловые годы таких условий и вилок не было.
398 2404510
>>404374
Вот этот птичий язык "не можем найти специалиста", "отрасли не хватает 200 тыщщ айтишников", "на стройках не хватает 500 тыщ специалистов", "на заводах не хватает миллион рабочих рук" означает, что жадный пидор-буржуй не хочет платить рыночную зп, не может удовлетворить свой спрос на труд своим предложением оплаты. За 500к закрывается любая вакансия, так-то. Но капиталист хочет административными методами и мерами принуждения заставить людей работать на кабальных условиях.
Если вы не можете на рынке труда найти чела на свою зп, то значит ваше предложение не релевантно.
Да и вообще, смысл идти в плюсы в 2к22. Плюсы и так перенасыщенными проперженными токсичными дедами с запредельным ЧСВ, мол, в наше время... а сейчас зумерье-смузихлебы пошли... Так ещё и порог входа в плюсы завышенный, и зп при аналогичном опыте самая низкая по рынку. И язык древний и дышит на ладан. И лапши, и говнокода в нём в разы больше, особенно мелкие васянопроекты, они всегда ужасны. И культура разработки очень часто сугубо локальная и оторванная от мировых трендов. Вышел С++ 23? Не, не слышали, у нас Михал Петрович его не принял, у нас С++ 98. И рынок вакансий максимально уёбищен. На условном JS ты даже в мухосрани всегда будешь иметь выбор работы. А на плюсах скорее всего это будет завод и... всё.
Поэтому в плюсы нормис не пойдёт. А если нужен плюсовик, плати х2 от зп на дж на той же позиции. Но ведь никто не будет столько платить. Плюсовик работает медленно, его время очень сложно окупить. Проще выгнать на мороз 3 плюсовиков и нанять одного дотнетчика.
399 2404525
400 2404543
>>404525
Cлыш, плоти
401 2404554
>>404543
Могу за тебя заплатить только если ты красивая тян.
402 2404561
>>404554
Ты только учти что по канону бывают и тян мужского рода.
403 2404568
>>404561
У нас с тобой разные каноны
404 2404585
>>404568
Канон по определению один.
405 2404587
>>404585
Only a sith deals in absolutes
406 2404639
Когда-то давно, лет может 5 назад, был популярен С++ CLI, который мог свободно использовать все дотнетовские либы. И на нём можно было писать более производительный код, полностью совместимый с дотнетом и шарпом. И можно было на нём как самому управлять памятью как в классическом С++, так и делать managed объекты, чтобы GC заботился о них.
А как сейчас обстоят дела с С++ CLI? Он давно умер или же жив, актуален, развивается?
407 2404675
>>404639
Толсто. Этот кал никогда не был популярен т.к. унаследовал неудбоство С++ а управлямый код все равно под шарпом лучше писать.
408 2404911
>>404639

> лет может 5 назад


Скорее лет 15 назад.
409 2404917
Что нибудь про документацию узнали?
410 2404918
>>404917
Узнали, но тебе не скажем.
411 2404925
>>399284 (OP)
Расскажите мне про три вещи:

- Асинхронность.
- Многопоточность.
- Параллелизм.

async/await распараллеливает потоки, создает потоки или что?
Thread создает поток синхронный? Проще говоря, в потоке - функции выполняются синхронно?
412 2404927
>>404374
А меня возьмут? На плюсах разве что моды делал на сурс движок.
Шарю за низкоуровневую архитектуру.
Как устроен проц и как работает стэк, куча, указатели. Опыт в Reverse Engineering, чуть ближе к среднему наверное, шарю за виртуальные таблицы.
Но в С++ дальше вот виртуальной памяти и написания драйверов не заходил.
Знания на С++ можно сказать "поверхностные", потому что работал только с указателями, классами.

На сколько мои знания можно оценить, на джуниора сгожусь?
413 2404929
>>404374

>Мы к себе в фирму 5 месяц не можем найти годного мидла плюсовика.



Кекус , так все годные вдарили по тапкам нахуй из мордора, примерно как раз 5 месяцев назад.

Сказать, когда найдёте годного плюсовика? когда война кончится
414 2404930
>>404927
В штатах от 150К. Ща идет великое ударное переписывание всякого имбед-легаси-говна, на любые процы, которые не в Тайване производятся. От авто и ракет, до вибраторов и унитазов.

Бояре Сишники пануют.
415 2404935
>>404925

>Расскажите мне про три вещи:


Это квазиунофантастика, ну то есть всем понятно

>async/await распараллеливает потоки, создает потоки или что?


как и Task не имеет НИКАКОГО отношения к потокам. Является сахаром для кода вида (который в языках без асинков выглядит так)

DoSomething().Then(callback)

чтобы код выглядел как будто обычный. Компилятор преобразует метод помеченный async в конечный автомат ака объект с методами, которые он дергает когда приходит их время await (звучит сложно, но на деле тоже очень просто - посмотри на обычную ручную реализацию итератора, подобный подход же, даже в языках без async но с итераторами их и используют как замену)
416 2404945
>>399284 (OP)
Анон, как этот код https://github.com/mono/mono/tree/main/mcs/class/Mono.Data.Sqlite
скомпилировать в Mono.Data.Sqlite.dll ?
Я не вижу там .csproj и .sln файла.
.NET 4.0
Может кто переебенить это всё в отдельное репо, чтобы оно именно dll-ку эту ебучую выдавало на выходе?
417 2404960
>>404927

>на джуниора сгожусь


Если ты можешь взять реальную бизнес задачу и начать ее выполнять дрегая своего лида/наставника не более 2-х раз в день на 10 минут максимум, тогда годишься.
418 2404962
>>404945
Тебе не нужно это компилировать, подключи в references проекта dll (там поиск есть), или попробуй через nuget пакеты
419 2404963
>>404960

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


Ураа, я джун!
420 2404971
>>404960
Нахуя мне дёргать своего лида/наставника если у меня есть интернет и голова на плечах?
421 2404998
>>404971
Потому что могут быть неочевидные/не особо задокументированные внутренние штуки
422 2405001
>>404998
А я достаточно зрелый спец чтобы и с таким самостоятельно разобраться.
423 2405021
>>405001
Ты кал. Мог бы разобраться, уже разобрался бы.
424 2405024
А можно как-то на ходу заблокировать параметр, чтобы его невозможно было перезаписать? Т.е. в одном экземпляре класса он у меня ReadOnly, а в другом — нет.

Подойдет блокировка на этапе создания экземпляра т.к. далее меняться не будет.
425 2405034
>>405024
Логикой в сеттере.
426 2405040
>>405034
Ну да, вариант.
427 2405044
>>405021
Спокойно разбираюсь. Доёбывайся до кого-нибудь другого, быдло.
428 2405049
>>405044
[проводит шершавым по губам собеседника]

Cудя по дебильным вопросам ты - ебанько.
429 2405060
>>404962
Да не, я хочу сам бирарь из сореца как-то получить, и сам сорец вклеить, а то бинарь кидать к коду как-то не очень опенсорцно, к тому же в бинаре могут быть бекдоры и трояны всякие, хуй знает что там вшито в этот пре-компиленный бинарь. Код вроде есть, а как сбилдить - хз. Чё, всё моно тянуть, блядь?
Ещё и

>make get-monolite-latest


качает хуй знает что.

Или можно как-то именно это вот Mono.Data.Sqlite, отдельно сделать, чтобы не ебать себе мозг? Сорец вроде полный, но это не точно. И нет ни .csproj, ни .sln файла, блядь. Как создать - хз. Кто-нить может потыкать эту хуйню?
430 2405070
Поясните за atomic
431 2405089
>>405070
atomic - слово из 6 букв, начинается на a, а заканчивается на c

зы: какой вопрос такой и ответ
432 2405092
>>405089
Не кукарекай, вниманиеблядь.
433 2405096
>>405092

>Не кукарекай, вниманиеблядь.


это тоже пояснять?
434 2405098
>>405096
Тут всё и без твоих комментариев ясно.
435 2405103
>>404971
Например вопросы из серии "Почему было использовано именно это решение, а не другое" там где это не очевидно. Например у заказчика было такое желание левой пятки или архитектура смежных процессов навязывает такое решение и т.д.
Ну или бывают стандартные вопросы "Чувак тут какой-то чел мне указания дает. Его можно сразу послать нахуй или не стоит, т.к. это гендир?"
436 2405104
>>405024

>Т.е. в одном экземпляре класса он у меня ReadOnly, а в другом — нет.


Ну так сделай его в другом тоже ReadOnly, или через свойство сеттер заблокируй.
437 2405115
>>404971
наставник это вещь. самый быстрый способ обучения, даже если ты 100 раз зрелый. Он просто тупо покажет как надо и сэкономит тучу времени.
438 2405120
>>405103
Лiл, какой ещё такой гендир? Я удалёнщик, джентельмен удачи. Просыпаюсь в 11AM, кушаю, лениво захожу на доску на которую мне ПМ и точка заботливо залила новых тасок. Пишу код 2 часа, трекаю 6, пишу фронту мол, хуйня готова, чекай свагу. И всё, никаких тебе созвонов, никаких вопросов "а почему?" и т.д.
>>405115
Зачем мне субъективное мнение какого-то хуя, если я могу в интернете прочитать несколько разных точек зрения на вопрос n и выбрать свою позицию?
439 2405129
>>405120
изначальный вопрос был про джуна.
440 2405131
>>405129
Ну типо. Я премидл aka джун+, самостоятельно делаю 100% задач, что со мной не так?
441 2405133
>>405131
тебе УЖЕ показали как должно быть и чего от тебя ожидают. И ты достаточно накодился чтобы потом тебе по шапке на ревью не давали.
Да и задачи тебе дают под твои скилы. Локфри многопоток с хай лоадом тебя писать не просят.
442 2405137
>>405133

>тебе УЖЕ показали как должно быть и чего от тебя ожидают.


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

>Да и задачи тебе дают под твои скилы.


Самые разные. На мне сейчас 5 проектов.

>Локфри многопоток с хай лоадом тебя писать не просят.


Это же тааааааааааак сложно.
443 2405143
>>405137

>С ревью конечно по началу меня ебали, но сейчас все эти моменты я пофиксил.


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

>Это же тааааааааааак сложно.


Еще как.

А насчет "пойду почитаю мнение" помню читал про volatile и кеши, где читаешь про "запрещает оптимизацию и не будет проблемы что ядро проца закешировало что-то", а потом читаешь кого то из светил шарпа, а он пишет "volatile гарантий таких не дает. и фраза что "но за счет когерентности кешей будет все норм" не является правильной".
444 2405144
>>405143
суко гребаный знак мешающий печатать. в итоге заранее приходится набивать пустые строки, а потом забываю их удалить
445 2405155
>>405143

>просто с матами и затрещинами.


Да нет, обычный рабочий процесс где ты и не дурак, но и не в курсе всех тонкостей.

>Еще как.


Ну типо, поэтому я и написал "читаю несколько источников" а не принимаю на веру первый попавшийся.
446 2405160
>>405060
Ну тогда надо скачать всю хуйню, перейти к csproj файлу открыть консольку и написать dotnet build
447 2405179
>>404960
Наверное смогу, гугол то мне на что? Как то же я сам этому научился. Читал книги, гуглил, там все ответы есть.
448 2405196
>>404935
Я не спрашивал как устроен async/await, то что это state machine Task я знаю. Тут вопрос в том как работает сам Task? Вот так мне надо было вопрос поставить. Смотрел на гитхабе что это ThreadPool, но тредпул это что? Он создает потоки? Вижу ты пишешь что нет, тогда что оно делает, как он взаимодействует вообще с потоками, откуда он их берет.

И то что async/await появился первым в сишарпе и об этом знаю.
449 2405239
>>405196
Ну смотри. Допустим ты запускаешь что то асинхронное и передаешь калбэк, чтобы в конце работы его дернули. Но калбэк неудобен, его нельзя вернуть или поменять его расположение.
Поэтому немного изменяется что вместо принятия калбэка асинхронный метод вручает тебе специальный объект и у этого объекта и будет в конце работы изменен статус ну и результат выставлен.
И ты можешь подписаться на изменение статуса этого объекта и сам объект передать куда то
Вот это и есть Task/Future/Promise/Defer. Это просто обещание что по концу операции там будет нужный статус и результат (если есть)
и все.

Он ничего не знает про потоки. Он, как и CancellationToken, всего лишь токен с состоянием и возможностью подписаться на изменение состояния.

А работой в потоках заведуют другие места
ThreadPool - создает фоновые потоки в которых выполняет задачи. Создавать потоки дорого, поэтому этот пул потоков их переиспользует.
Task.Factory.StartNew и Task.Run() - которые планируют задачу в тредупуле (по дефолту)
await, который доверяет решать где выполнять контексту синхронизации иначе пихает в тредпул.
TaskCompletionSource - вообще никаких потоков.
450 2405241
>>405044
ИМХО ты лузер не умеющий программировать. Правильно тим лиды делают что тебя отбривают каждый раз.
451 2405258
>>405241
Твоё ИМХО не более чем О, чел. Я работаю 8 месяц.
452 2405293
>>405179
Ну значит иди и работай. Устроишься джуном - расскажешь.
453 2405432
>>405239
Спасибо анон, плюс минус понял. Узнал что-то новое.
Rlq15ehVQJE.jpg266 Кб, 720x1096
454 2405438
455 2405451
>>405438
Тебе заняться нечем?
456 2405494
>>404935

>DoSomething().Then(callback)


Не понимаю смысла этого кода. Это же то же самое что
DoSomething()
callback()
Ведь пока не отработает DoSomething() всё равно программа будет висеть, поток-то один.

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

Даже если один поток в системе (пусть будет жаваскрипт это) то в системе есть неблокирующие I/O. то есть когда читается файл или идет запрос в сеть, то поток не останавливается ждать.
Поэтому в твоем примере калбэк будет вызван сразу, а не как продолжение DoSomething()
458 2405502
>>405494
мой DoSomething().Then(callback) это буквально

DoSomething().ContinueWith(callback)
459 2405504
>>405499

>Почему они не блокируют текущий поток - дело десятое.


Попробуй ты так на собесе ответить
460 2405506
>>405504
Мы не на собесе.
461 2405507
>>405504
Легко. На уровне "мне вручили таск и не заблокировали мой поток" знание "почему не заблокировали" не нужно.

Внутри может быть сетевой запрос, отдельный поток (из пула или нет), а может даже отдельный процесс, или таймер с TaskCompletionSource - мне то какое до этого дело? А никакого. Это внутренние детали реализации, а я работаю с контрактом.
462 2405508
>>405506
>>405507
Раз уж взялись отвечать на вопросы зелени, так делайте это качественно. А не так, чтобы чувачок потом пришёл, а его хихикая про сабж спрашивают а он потеет и что-то там про рантайм мямлит.
463 2405510
>>405507
качественно это в инете. Там тонны мануалов
но если чел не понял и спрашивает, значит он хочет простое объяснение которое принесет ему понимание. Понимание сути - основа обучения. Если не понял основ - никуда не уедешь, а с основами и гугл научит легко

И я пытаюсь показать на ежиках, а не готовлю к собесу
Аноним 464 2405539
>>399284 (OP)
Как включить c# 9.0,у меня просто напросто не получается это сделать (я профан),установил net 5,и 6.......Помогите пожайлуста.
image.png960 Кб, 1280x720
465 2405553
Какие недостатки у шарпа или дотнета?
466 2405620
Структуры или классы?
И вообще когда аллочиться на стеке а когда на куче?
467 2405628
>>405553
Их нет, это лучшие язык и платформа, очевидно же.

>>405620
Погугли случаи, когда стоит использовать структуры. Но в целом это очень редкое явление, ибо слишком много подводных.
468 2405651
>>405620
Структура - это тот же класс, но с модификатором доступа public: по умолчанию.
469 2405653
А блять, это же тред про шарп.
470 2405655
>>405653
Хуя шизло
471 2405705
Бля, хочу вкатится, но никак не могу найти инфу по документации. Кто нибудь слышал что нибудь про ъто?
472 2405707
>>405620
Структуры это вэлью тип
Классы это референс тип
473 2405708
>>405705
Доступ к msdn только для премиум-пользователей по подписке, подписку оплачивает работодатель.
474 2405722
>>405707
Когда что юзать?
475 2405785
>>403086
Godot лучше тем что весит мало и на нем не только игры можно делать, а еще и приложения ага.
А еще он лучше тем что открытый исходный код и лицензия MIT.

Так что да, с выходом Godot 4 он может и трахнуть этот ваш unity.
476 2405786
>>405553
Единственный минус который я увидел это разный синтаксический сахар, напузыривание всякой хуетой языка, а так язык просто отличный.
477 2405808
>>405553
смотря что считать недостатками.
478 2405810
Сначала:
>>404935

>Task не имеет НИКАКОГО отношения к потокам



Потом:
>>405507

>Внутри может быть отдельный поток


>а может даже отдельный процесс



))))
479 2405815
>>405810
Потому что смешиваются понятия.

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

Они не имеют никакого отношения к потокам. Они говорят про выделение отдельных кусков кода (ака задачи) и ассоциацию с ними специального токена для наблюдения. Для унификации работы с этим. Есть тут где-нибудь хоть намек на то, где и как она будет выполнена? НЕТ

А дальше ведь понятно что их можно запускать, то есть можно "запустить таску", ведь по факту она кусок кода.
Есть тут где-нибудь хоть намек на то, где и как она будет выполнена? НЕТ
Просто что она будет выполнена, но не как.
"запустить таску"==="выполнить таску" а не "выполнить в тредпуле"

Концепция деления на задачи и выполнения этих задач - перпендикулярны.

Task.Run(), несмотря на свое название, всего лишь утилитный метод помещения наших задач в тредпул, то есть сахар, чуть более сладкий чем Task.Factory.StartNew.

>Внутри может быть отдельный поток


Да. внутри асинхронного метода, который еще таской называют. Но таской его делает "ты нам верни объект специальный, да сообщи в конце через него че как", а не "выполняется он в потоках или еще как"
480 2405846
>>405815
Ты пишешь бессмыслицу.

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


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

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

Таким образом, вся эта кухня имеет САМОЕ ПРЯМОЕ отношение к потокам, потому что так реализуется параллельность в компьютере, не может существовать без потоков или их эмуляции.

Таким образом, ЭТО И ЕСТЬ ПОТОКИ, только не обычные потоки, а специальные синхронизированные потоки под капотом средствами самого языка. Всего лишь сахар НАД ПОТОКАМИ.

А ты говоришь

>Task не имеет НИКАКОГО отношения к потокам


Чушь.
481 2405861
>>405846

> вся эта кухня имеет САМОЕ ПРЯМОЕ отношение к потокам


>Таким образом, ЭТО И ЕСТЬ ПОТОКИ, только не обычные потоки, а специальные синхронизированные потоки под капотом средствами самого языка


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

То есть таски это "вот это должно быть выполнено после этого" и "статус выполнения и результат будут в объекте Task"

Само собой корутины должны не только делиться, а и выполняться. И поэтому в TPL есть дефолтный "выполнятор" - дефолтный TaskScheduler выполняет эти корутины в тредпуле.
и утилитные методы Task.Run() и Task.Factory.StartNew()

Но это всего лишь дефолтная реализация выполнения. Концепция корутин никак не затрагивает вопрос "как именно будет выполняться корутина" - ей ПОХЕР. Важно лишь, что она будет вообще выполнена, очередность и возвращает Task

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

>не может существовать без потоков или их эмуляции.


TaskCompletionSource никаких потоков не эмулирует. Он всего лишь выставляет статус у Task )
482 2405863
>>405846
упс. забыл. так что уточню
"и работы с ними (ожидание, статус, результат)"
следует читать как
"и работы с ними (ПРИОСТАНОВКА, ожидание, статус, результат)"

приостановка и продолжение - одна из ключевых частей концепции корутин
483 2405869
>>405786

>это разный синтаксический сахар, напузыривание всякой хуетой языка,


Притом не это само по себе, а то что пытаются притащить всякую хуету из языков со динамической и слабой типизацией.
484 2405870
То есть таски, наоборот, АБСТРАГИРУЮТ от деталей выполнения.

var result = await DoSomething()

абстрагирован от деталей выполнения этого самого DoSomething(). внутри этого метода могут использоваться тредпул, потом заменены на foreground поток, а потом быть заменены на процессы или на таймеры с TaskCompletionSource - `var result = await ` продолжит работать не замечая этих изменений.

Даже .ContinueWith не выбивается из этой канвы "выполнение не мое дело", поскольку не сама занимается выполнением продложения, а доверяет это TaskScheduler-у (который можно подменить просто передав свой)
485 2405884
>>405861

>корутин


>асинхронно


>планирование


Это и есть потоки. Так они и работают, ведь процессоров на всё явно не хватит, вот и эмулируется выполняя по кускам там и сям, получая искусственную параллельность. Этот "выполнятор" находится в ядре ОС, производя потоки, так же как в C# такой же "выполнятор" делает те же самые потоки. Иначе параллельности просто не бывает, как концепция не может существовать в одной нити выполнения.

Ты ошибочно считаешь за поток только системные потоки от ОС, однако совершенно игнорируешь что C# у себя делает то же самое, та же машина потоков там работает, только обозвано по-другому. Но как поток ни назови, это всё равно поток.

Ну а задание "выполни это после того", это лишь сахар для удобства, ничего особенного, никакой концепцией не является.
486 2405889
>>405884
Ёбу дал? Это более высокий уровень абстракции позволяющий формально доказывать корректность программы например. У тебя мышление слишком баётоёбское и приземлённое какое-то.
487 2405891
>>405884

>Это и есть потоки.


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

нет тут никаких потоков. Асинхронные структуры построены на TaskCompletionSource и не используют никаких потоков (даже I/O)
Process.WaitForExitAsync() какие потоки использует? Там работает процесс. Продолжение типа будет в потоке? так это уже другая корутина будет. И то, где она будет, тоже можно переопределить (свой TaskScheduler или контекст синхронизации)

>задание "выполни это после того", это лишь сахар для удобства


у тебя смешались мухи и котлеты и кони до кучи.
как концепция может быть сахаром. "выполни это после того" это сахар для чего?
488 2405894
>>405889
Никто не спорит, что поток обмазанный синхронизацией под капотом это новый уровень абстракции. Ну и? Потоки никуда не делись, самое прямое к ним отношение.
489 2405896
>>405891

>всего лишь обещание


Еще богу помолись. Компьютер это не обещалка, колдун херов, заклинатель демонов: "сделай мне заебись". Вот результат рекламы программирования среди сброда уличного.
490 2405898
Тяжело...
491 2405900
Что-то треды с решетками стали жить. В чем причина такого резкого ажиотажа?
492 2405902
>>405896
Ну да. ты результат.

В других языках, например жс, Task имеет имя Promice

Перевод нужен или сам переведешь?
493 2405903
>>405900
Набег тем кому "тяжело"
494 2405906
>>405894
Электроны тоже никуда не делись, но это не сахар как ты написал.
495 2405907
>>405900
Начались каникулы.
496 2405914
>>405903
>>405907
Обычно набеги на js/python тредики.
497 2405938
>>405722

>Когда что юзать?


Классы дают больше удобства пользования (для меня)
Ну например если ты создашь класс Point со свойствами X и Y, то ты можешь потом присвоить значение отдельно только X или только Y. В то время как со структурами для достижения того же самого, тебе придется перезаписать структуру полностью т.е. new Point(X, Y)

Структуры важны, если необходима скорость. Например мне надо было рисовать динамические кривые безье и там только время создания дефолтного класса Path, который в себе содержал класс PathFigure, который содержал в себе класс BezierSegment и т.д. — все это, т.е. простое создание нового объекта отжирало столько времени, что ФПС падал чуть ли не в нулину, если такие объекты создавать в цикле. А у меня еще своих классов дофига, и все это используется функциями которые ожидают структуры, то я просто не мог добиться нормального фпс.
Вот тогда я задумался про структуры, когда у тебя высокая частота обмена данными, какие-то математические расчеты которые провоцируют процесс упаковки и распаковки данных.

Тут подробнее про отличие структур от классов
https://youtu.be/8E9P_lnJ7RI

Короче, класс хорош, чтобы его один раз создать и потом использовать продолжительное время. Возможно это что-то комплексное и громоздкое. Структуры это такая херь, которая используется в циклах, в мат. расчетах — легко создал, легко забыл. В цикле можно хоть каждую итерацию создавать new Point или new Rect (а по другому и не получится). Попробуй Rect сделать классом — пизда фпс и памяти.
Image 1.png20 Кб, 592x559
498 2405944
>>405938
интересно как жависты живут без структур.
ну ладно примитивные типы оптимизированы
но допустим у меня картинка ARGB
Идеально для структуры,
вот пример имаджшарпа на пике. структуры удобна

но их нет в жава
упаковывают в int что ли
или используют шаблон "приспособленец"?
или тупо работают с data, data[i+1] - жесть.
image.png105 Кб, 336x188
499 2405946
>>405944
Да всем похуй на джав, чел.
500 2405947
>>405946
Тебе должно быть похуй, если у тебя этого нет — в этом основной принцип сохранения психики индивидуума.
501 2405949
>>405947
Ты сам то понял что сморозил?
502 2405955
>>405938
Да просто напиши:
struct это стек
class это куча

и пусть загуглит что такое стек и куча, если не знает. Это прям самое простое объяснение.
503 2405958
>>405914
А кому это гавно нужно однопоточное? Меня лично бесит этот ваш JS , что с ним можно сделать кроме написания веба? Сишарп намного сложен чем JS и более обширен в применение. Тут даже многопоточность сделать можно.
image.png104 Кб, 480x360
504 2405961
>>405955

>Да просто напиши:


struct это стек
class это куча
505 2405984
>>405958

>что с ним можно сделать кроме написания веба?


например запилить "десктопный" софт который будет лагать, занимать кучу памяти и быть унылым говном. И при этом орать "десктоп умер"
506 2406007
>>405984
Справедливости ради шарповые фреймворки такое же говно что до сих пор делает qt лучшей практикой.
507 2406019
>>405944

> интересно как жависты живут


Не упоминай калоедов всуе.
508 2406034
>>405955
Я думаю, что он уже загуглил и получил данный ответ.
Но на самом деле я тоже ничего не понимал, потому что и с тем и с другим хеловорлд работал одинаково, пока не приперло.
509 2406048
>>405944

>> интересно как жависты живут без структур.


Используют классы вместо структур, а потом тратят кучу времени на пердолинг с настройками GC и выбивание у начальства серверов с бОльшим кол-вом ОЗУ
510 2406061
>>406048
Это что же получается, хорошо что я решил вкатываться в шарп а не яву?
511 2406063
Стек, куча, пиздец, в крестах такой хуйни не было
512 2406066
>>406063
В плюсах и не такая хуйня бывает
513 2406086
Не знаю куда писать. В общем есть приложение, дотпикером, внутри кода есть два интересующих меня блока это ключ для HMAC-SHA256(пик 1) и сам блок хеширования (пик 2), моих знаний не хватает. Собственно вопрос, можно ли узнать ключ с пика 1? И какой точный порядок хеширования? честно запутался и не имел опыта получения хеша в коде
514 2406142
>>405160
А где ты видишь там .csproj-файл?
Там Makefile чтобы make делать на линуксе.
А для этого надо билдить весь mono/runtime
а чтобы его сбилдить
надо запустить

>./autogen.sh


и ещё и

>make get-monolite-latest


который качает хуй знает что.
Короче пиздос какой пердолинг.
Надо тупо код Mono.Data.Sqlite.dll заебенить и ебись оно конём. Как - хз. Я не ебу ваще как пропечатывать, все эти непонятные букаффы англюские, чтобы оно работало норм и не выёбывалось мне.
515 2406145
>>406142
Зачем он тебе вообще
516 2406146
>>406142
Вот какая ебала https://github.com/username1565/mono/blob/main/build_runtime.sh
Длл-ку получил. Но такое инклюдить к коду вместо длл-ки, как-то не очень. Плюс ещё куча зависимостей там, это просто пиздец.
517 2406147
>>406145
Шобы и в винде и в линухе сиквелайт работал норм.
518 2406150
>>406147
Маня, докер учи.
519 2406154
>>406150
докер это кал
520 2406158
>>406154
Чучело, тебя без знания докера даже на собес не позовут.
521 2406160
>>406158
В твою каловую шарагу для ебаньков? Нахуй иди, долбоёб.
522 2406161
>>406147
А какой не работает? Возьми стандартный провайдер. Не парь мозг
523 2406203
Кто нибудь знает что то про документацию?
524 2406205
>>405955
А вот нихуя.
525 2406210
Что за мем про документацию?
526 2406219
>>406210
Это не мем, а один еблан тут срёт.
527 2406221
>>406219
Ок. Ну хоть джавапетух съебался, на том спасибо
528 2406232
>>406221
Наверняка это как раз он.
529 2406287
>>406219
Это не еблан тут срет, а в ассемблернопарашной хуите нет документации.
530 2406288
>>406287
А вот и тот еблан.
531 2406293
>>406205
In C#, classes are always allocated on the heap. Structs are allocated on the stack, if a local function variable, or on the heap as part of a class if a class member.

Частично я оказался прав. Потому что я делал дизассемблирование (cheat engine) и моя структура лежала в стеке, а класс в куче.
532 2406317
>>406161
Такой штоли есть разве, в .NET 4.0 ?
Елси да, то нахуя тогда все эти изъёбства с System.Data.Sqlite.dll и Mono.Data.Sqlite.dll ? Два года уже ебусь с этим всем.
533 2406363
>>406317

>.NET 4.0


> linux


> 2022 год


мазохист
534 2406374
Я ОБАЖАЮ C#
535 2406412
>>405786
Хуйня, синтаксический сахар в шарпе просто охуенен

>>405869
Да ну, там наоборот всё строго типизировано
536 2406413
>>406412
Статически.
DLR
537 2406434
>>405938

> Ну например если ты создашь класс Point со свойствами X и Y, то ты можешь потом присвоить значение отдельно только X или только Y. В то время как со структурами для достижения того же самого, тебе придется перезаписать структуру полностью т.е. new Point(X, Y)


Схуяли.
Ты путаешь с иммутабл структурами.

> Структуры важны, если необходима скорость. Например мне надо было рисовать динамические кривые безье и там только время создания дефолтного класса Path, который в себе содержал класс PathFigure, который содержал в себе класс BezierSegment и т.д. — все это, т.е. простое создание нового объекта отжирало столько времени, что ФПС падал чуть ли не в нулину, если такие объекты создавать в цикле. А у меня еще своих классов дофига, и все это используется функциями которые ожидают структуры, то я просто не мог добиться нормального фпс.


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


> Короче, класс хорош, чтобы его один раз создать и потом использовать продолжительное время. Возможно это что-то комплексное и громоздкое. Структуры это такая херь, которая используется в циклах, в мат. расчетах — легко создал, легко забыл. В цикле можно хоть каждую итерацию создавать new Point или new Rect (а по другому и не получится). Попробуй Rect сделать классом — пизда фпс и памяти.


Тут самое важное, что надо отметить - структуры нужны для локальности памяти. Если у тебя List<Point> и поинт это класс, то в списке будут храниться ссылки, и когда ты его будешь проходить в цикле - проц будет переходить по отдельной ссылке в какую-то залупу.
А если поинт это структура - то они в памяти будут по порядку лежать, и проу сразу будет наперёд их в кэш подгружать, поэтому всё будет быстро.
Ну и конечно структуры лишний раз не создают объекты в куче(хотя их можно закинуть в кучу), поэтому сборщика мусора не ебут.
538 2406437
>>406061
Ну конечно бля, жава это легаси, она сейчас нужна для доработки старой залупы во всяких банках и предприятиях. Но вот котлин вроде бы хорош.
image28 Кб, 884x592
539 2406526
Если после шарпа закатиться в С++, каких вещей, которые есть в шарпе, но нет в крестах, будет больше всего не хватать в повседневном кодинге?
Про GC, атрибуты и скорость компиляции понятно.
540 2406527
>>406434

>Схуяли. Ты путаешь с иммутабл структурами.


Ну я часто сталкивался, что структуры не дают шатать какое-то конкретное свойство: что Point, что Rect. Насчет Size не уверен, кстати.

Если там стоит модификатор иммутабельности, то есть варианты почему так сделали. Я сука заебался с этим дерьмом, проще отдельно иметь переменные X и Y. Даже в функциях аругменты в большинстве случаев запрашивают координаты по отдельности, хотя могли бы поит принимать.
541 2406531
>>406526
Я пытался вкатиться 10 раз, узнавал что-то новое, а оказывается, что это новое — вариация вывода строки в консоль. На 11 раз вкатываюсь, смотрю — незнакомая команда, гуглю, а это вывод строки на экран.

Ну и дропнул эту хуйню.
542 2406532
>>406531
Ну поставь себе более интересную задачу, чем срать в консольку. Например, срать в окно на winforms или в окно браузера.
543 2406585
>>399284 (OP)
ThreadPool создается на CPU, ядре или в главном потоке приложения?
544 2406600
>>406526

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


"Виртуальной машины". Твой код против операционной системы, без посредников
545 2406611
>>406585
а какая разница где. "создан в каком то потоке" не значит что он и далее живет в этом потоке. Существование объекта в памяти к потоку не привязано.
546 2406612
>>406527

>Если там стоит модификатор иммутабельности, то есть варианты почему так сделали


Вариант один - мутабельные структуры злейшее зло. Заипешься следить за тем чтобы не было создано защитной копии.
547 2406621
>>406293
А еще есть боксинг. И хз, откуда ты эту парашную цитату вытащил, но где и что аллоцируется будет решать .NET, а не C#, так что на собесе так никогда не говори.
548 2406633
>>406621
да прямо таки. правила аллокации просты. и цитата верная. И боксинг, несмотря на типа магию, подчиняется тем же правилам.
549 2406637
>>399284 (OP)
Хочу установить Visual Studio 2022. Стоит ли гнаться за редакцией Enterprise или будет достаточно Community? Буду писать UWP, WPF и ASP.NET приложения, и возможно мобильные. Реально ли найти ключ для Enterprise в сети? Кое-что находил, но не знаю насколько они рабочие, проверить пока негде. Как вообще юзаете лицензионные VS?
550 2406638
Шарпобояре, подскажите. Сейчас работаю на легаси на winforms, но там есть и веб(подпустят ли меня к нему - хз) и куча всего. Как развиваться в свободное от работы время, что учить и самое главное - как? Опыт промышленной разработки набирается, но в вебе я буду даже через год вряд ли лучше обычного вкатунишки.
551 2406640
>>406293
Если не играть в unsafe (и еще глубже), то просто нужно помнить
стек может ссылаться на кучу (потому локальные ссылки на экземпляры классов в куче лежат в стеке без проблем), а куча на стек нет.

и следствие

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

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

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

- массив значимого типа
массив это ссылочный тип, а значит держит структуру у себя. и выше писал что место выделяется сразу
А значит var test = new BigStruct[100000000] с радостью отхапает себе кусок в несколько гигов памяти

- массив ссылочного типа
типы ссылочные и экземпляры лежат в куче, но сама ссылка на кучу это значение. и место должно быть выделено на сами эти ссылки
и var test = new string[1000000000]; (побольше нуликов ибо ссылка всего 8 байт) тоже выжрет несколько гигов, хотя test[100] скажет что в нем null
(правда чтобы увидеть ее в диспетчере задач нужно включить колонку "выделеная память", ну и студия сразу покажет тоже)

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

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

>>406637
да. есть полезные шняги. ключ реально. сразу после выхода стало реально ) и тулзы типа решарпера и supercharger подвезли. oz-code проблемен.
551 2406640
>>406293
Если не играть в unsafe (и еще глубже), то просто нужно помнить
стек может ссылаться на кучу (потому локальные ссылки на экземпляры классов в куче лежат в стеке без проблем), а куча на стек нет.

и следствие

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

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

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

- массив значимого типа
массив это ссылочный тип, а значит держит структуру у себя. и выше писал что место выделяется сразу
А значит var test = new BigStruct[100000000] с радостью отхапает себе кусок в несколько гигов памяти

- массив ссылочного типа
типы ссылочные и экземпляры лежат в куче, но сама ссылка на кучу это значение. и место должно быть выделено на сами эти ссылки
и var test = new string[1000000000]; (побольше нуликов ибо ссылка всего 8 байт) тоже выжрет несколько гигов, хотя test[100] скажет что в нем null
(правда чтобы увидеть ее в диспетчере задач нужно включить колонку "выделеная память", ну и студия сразу покажет тоже)

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

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

>>406637
да. есть полезные шняги. ключ реально. сразу после выхода стало реально ) и тулзы типа решарпера и supercharger подвезли. oz-code проблемен.
552 2406641
>>406640

>да


Да - это неплохо бы иметь Enterprise или достаточно Community?
553 2406642
>>406641
неплохо бы иметь. каждому свое
https://visualstudio.microsoft.com/ru/vs/compare/

если ничего нужного тебе не зарезано в комунити то тебе ее хватит
554 2406643
>>406638
Просто берёшь и делаешь пару проектов в гитхаб на ASP. Делаешь аналоги каких-то сервисов в своём упрощённом представлении.
555 2406645
>>406641
лично мне 99% не нужно того что есть разница в ентерпрайз
даже коделенс разница

"CodeLens доступен в версии сообщества Visual Studio Community, однако в этой версии индикаторы управления source control недоступны."

Тесты это решарпер гоняет

Для меня все решает IntelliTrace, плюс там что то из сторонних вещей может не стать на коммунити
556 2406718
Есть разница между передачей функции другой функции myFunc и делегата этой функции, то есть Func<string, bool>(myFunc)?
557 2406738
>>406718
Нет. Компилятор услужливо создаст делегат за тебя
558 2406748
Для резюме на джуна/trainee написал простой webapi проект (aspnet, efcore, Mapster, FluentValidation, Serilog, xunit). Js и front-end слабо знаю, попытался на Vue наклепать что-то, но вышло очень примитивно, и боюсь что из-за этого бек будет слабее выглядить)

Как лучше:
- давать ссылку на swagger, чтоб там и мапинги, и валидацию было видно
- доделать/подучить фронт
- оставить так же (в Readme гитхаба есть ссылки и на фронт, и на сваггер)

И вообще на джуна лучше чисто back-end вакансии искать или fullstack? Или через стажировки вкатиться попробовать?
559 2406757
>>406611
Меня интересует вопрос, что происходит когда я создаю N потоков, ThreadPool за ними тянется и расширяется или он привязан на приложении/процессе или на каждом ядре?
560 2406760
>>406621
Когда мы перемещаем тип значения в ссылочный тип, данные перемещаются (копируются) из стека в кучу. Когда мы перемещаем ссылочный тип в тип значения, то данные перемещаются (копируются) из кучи в стек.

сурс: http://microsin.net/programming/pc/dot-net-stack-heap-value-reference-boxing-unboxing.html
561 2406762
>>406757
нет. ты просто их создаешь. Они никак не привязаны к тредпулу
тредпул не мифическая сущность
это просто класс, который внутри себя создает потоки и перемылывает в них все что дают
можешь написать свой тредпул даже
562 2406909
>>406748
Я для того чтобы на джуна попасть пришел, сказал: Приветик, в общем, такое дело, кушц хочу, готов кодить за еду.
Взяли.
Шарп на тот момент я не знал, в школе - учил паскаль.
563 2406957
>>406909
и продолжаешь кодить за еду...
564 2406969
>>406957
Ну и?
565 2406973
>>406969
и молодец. нашел свое место в жизни. Кодить за деньги - так меркантильно. Долой ремесло, программирование это призвание.
566 2407211
Нахера вообще нужны делегаты? Когда просто так вызвать метод из какого-нибудь DI не вариант? Делегат обходит модификаторы доступа?
567 2407253
>>407211
Нужны для тех случаев, когда тебе нужно передать функцию в качестве аргумента другой функции/методу. Посмотри Linq. Это отличный пример их использования. Ну и для механизма событий они необходимы.
568 2407281
>>407211

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


Конечно вариант, просто больше кода надо писать, придётся создавать общий интерфейс, реализовывать его в классе с единственным методом, а в методе-приёмнике вызывать метод этого интерфейса. А с делегатами можно тупо передать метод или лямбду, и в методе-приёмнике её вызвать как обычную функцию. Тебе нравится писать больше кода, когда можно меньше? Даже в жабе заебались так делать и придумали сахарок.
569 2407430
Насколько сильно между собой отличаются последние версии языка? Много ли я (вкатун) упущу, если прочитаю книгу условного Троелсена о 7 версии?
570 2407531
>>407430

>Много ли я (вкатун) упущу, если прочитаю книгу условного Троелсена о 7 версии?


Нет, не много. Можешь вполне спокойно с седьмой версии учить. На освоение действительно значимых нововведений остальных версий языка максимум два дня уходит.
571 2407717
В чём причина ошибки?
572 2407726
Это нормально что я устраивался на программиста c#, но в итоге пишу раз в неделю на visual basic и всё, прям как в экселе? Ну хоть платят нормально, 60 тысяч
573 2407731
>>407726
В итоге когда решишь искать другую работу выяснится, что ты ничего не умеешь
574 2407742
>>407731
Ну я для этого и устраивался...
575 2407777
>>407717
После обновления EFCore всё заработало.
576 2407818
>>405785

> а еще и приложения ага


Причём прямо щас, не дожидаясь четвёрки можно лабать бэк на шарпе и фронт на годоте, который запустится на всех актуальных платформах. Встроенный конструктор форм позволяет легко и привычно лепить адаптивные интерфейсы. Единственный минус, фронт всегда будет работать на опен гл ес, нет способа запустить его в режиме обычной оконной отрисовки без графического ускорения.
577 2407834
>>403086
Хороший пример Rust, который сжирает все ресурсы компьютера и неимоверно лагает
578 2407864
>>407834
Сначала охуел, а потом понял, что ты про игру.
579 2407870
>>407834
Потому что разрабы дауны. Тем не менее, игра все равно супер успешная.

Хартстоун кстати тоже на юнити
580 2407875
>>407870

Тогда понятно, почему эта параша так сильно тормозит на любых спеках.
.png72 Кб, 460x671
581 2407876
Помогите.
Смотрите. Есть некие данные. Их нужно читать. У данных могут быть разные типы.
Собственно в чем проблема. Я ничего лучше, чем вот такую вот табличку в базе делать - не придумал.
Кто знает решение лучше?
Просто я думал о какой-нибудь хитровыебанной системе с типа тегами и атрибутами и вот это вот все, а данные просто в строке хранить. Но сразу начинается ебатория, с тем, что нужно теперь делать постоянно запросы к базе, чтобы узнать какой же там тип данных, пропадает возможность сортировку нормальную и фильтрацию делать и вообще.
С другой стороны- прикриплейд выглядит кродливо как-то.
Короче. Как нормальные люди подобное делают?
582 2407885
>>407876

public T Value {get; set;}

public List<T> Filter

Type t = T.GetType();

if( t is int)
...
if (t is DateTime)

...

if (t is String)
...

return List<T>
583 2407887
>>407885
А каким образом ты это в базу запихнуть собираешься?
584 2407891
>>407887
Тогда так object Value {get; set}

public List<T> Filter

((Value as Int) not null)

{

}

return List<T>
585 2407966
>>407876
То есть ты планируешь хранить такое количество полей, и будешь их грузить при каждом запросе, но не хочешь делать лишние запрос, чтобы узнать тип?
Хз. Хранить тип енамкой, значение байтами?
586 2407996
Кто-нибудь может объяснить мне, почему первый прикриплейд - жрет ~5MB оперативки?
И почему второй прикриплейд всего 500КБ?
587 2407998
>>407996

>почему


Потому что иди нахуй, вот почему.
588 2408004
>>407966
Почему ты думаешь что я буду грузить все поля?
Есть отдельная табличка Data в которой как раз енамкой указан тип поля.
Собственно план следующий: при запросе каких-то результатов чтения - смотреть в Data какой там тип, и по этому типу - выбирать какие поля подгружать.
Этот объект же это модель в базе. В приложение и публичное апи он просачиваться не должен будет.
589 2408024
>>407996
ты бы еще на ассемблере накидал и спросил, почему в ассемблере жрет 1 кб.
Очевидно же что net framework нагружен всякой хуйней и это тащится в сборку скомпилированную.
590 2408030
>>408004
Ну тогда хранить в одном поле, при загрузке конвертировать в нужный тип. Просто у тебя каждое поле всё равно место жрать будет
591 2408039
>>408030
Так суть-то в том, что из-за разных типов - я могу делать фильтрацию и прочее на стороне базы, плюс использовать индексы, хуиндексы и прочее. Без этого - придется все уже в приложении это реализовывать.
Ну, типа если там будет битовый массив - я не смогу просто написать WHERE UInt64Value > 10; WHERE ASCIIStringValue LIKE "Vasya" и т.д.
592 2408045
>>408024
Ну и что мне делать, если мой руководитель из кожи вон лезет, чтобы на железках с 256МБ оперативки и процом ARM'овским за 2 бакса - запускали .Net?
Я просто пытаюсь пояснить, что .NET - прожорливый, у него на все один ответ - вот, мы программулину запустили, она даже работает, жрет всю память, ну дык это потому что никто не умеет с .net'ом работать, а он где-то читал, что вообще на микроконтроллерах .net запускали, значит можно как-то извратиться. Но я как не ебался, не старался - ну минимум для реального использования - это ~150МБ надо, когда такое же приложение на плюсах - уже есть и оно всего 10МБ жрет и нормально работает, сверху даже Nginx запихнуть получилось и PHP и много чего полезного и оно нормально работает, а тут будет одно приложение .NET'овское жить и жрать все для себя. Я не представляю, какие аргументы можно использовать в такой вот ситуации, если все тесты и метрики показывают, что для такого вот слабого железа - .NET противопоказан. Плакать хочется.
593 2408054
>>408045
Ты учитывай, что с .net 6 программы не отдают память, если в системе ещё че-то остаётся. У меня парочка хуёвин ест 0.85гб от 1гб, но я могу докинуть ещё столько же
594 2408080
>>408054
Хм. А вот это на самом деле может быть аргументом.
Где про это почитать можно?
595 2408098
>>408080
Че то щас попытался искать, ничего толкового не нашёл, лол.

https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals#conditions-for-a-garbage-collection

Тут указано, что есть 3 причины для вызова гц, и одна из них это заканчивающуюся память.
596 2408107
>>407996
ну а как ты хотел
виртуальная машина, 1 мегабайт на стековую память по дефолту, GC нужно где то жить, и джиту развернуться, всякие CoreCLR

для таких придумали .NET Micro Framework

"Memory needs of about 300 kB; in contrast, the next smallest .NET implementation, the .NET Compact Framework running on Windows CE, needs about 12 MB"
597 2408193
>>405553

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


Отсутствие нормально оплачиваемой работы, даже в сравнении с JS, Java, про GOвно вообще молчу, там платят еще больше.
Ну и тонны легаси с WFC, WebForms и тд
Если без этого - один из лучших ООП языков на ровне с котлином
598 2408212
>>408193
Ты забыл уточнить, что речь про РФ
599 2408274
>>408193
Проблемы негров
600 2408304
>>408193

>Отсутствие нормально оплачиваемой работы


Пиздишь, просто открой любой сайт с кодерскими вакансиями.

>даже в сравнении с JS, Java


Где в два раза больше вакансий, но в десять раз выше конкуренция. Найс. Еще и языки говно.

>GOвно


Скучно и перспективы мутные.

>Ну и тонны легаси с WFC, WebForms и тд


Очень редко, большинство давно переехало с этого говна или срочно переезжает, потому что с вебформсами меньше чем за 300ккк/наносек никто ебаться не будет, такие вакансии просто сажаскрывают сразу же.
601 2408315
>>408212

> речь про РФ


Речь в первую очередь про штаты и Канаду.
Технологичность - пиздец.
14 из 15 легаси, платят копейки.
В Бритахе с этим получше, на удивление и новые проекты пилят, но платят все равно смех в сравнении с условным формошлепством на ноде.
Германия - пиздец, сплошная жаба, правда с такими тоннами легаси.
602 2408318
>>408045
пиши не .net 2.0 или 4, выше нет смысла залезать. Чем выше версия .net тем больше потребление памяти и тем больше весит сборка.
В общем пообкатывай там разные .net версии и найди разницу.
603 2408323
>>408318
а вот анон подсказал решение >>408107
604 2408332
>>408304

>Пиздишь, просто открой любой сайт с кодерскими вакансиями.


У нас понятия нормально оплачиваемой работы разные.
Условные 300к ты можешь и на дотнете получать в РФ.
На удаленку контрактором на дяду сэму ты не уйдешь, потому что проекты говно и платят ебучие копейки, я уже весь indeed перерыл, сплошной тухлят.
Проекты сплошное говно, выбить условные 50$ в час еще нужно постараться.

>>408304

>но в десять раз выше конкуренция


На конкуренцию похуй.

>>408304

>Еще и языки говно


Говно, но кушать хочется лучше

>>408304

>Очень редко


Очень редко в РФ.
В штатах подобного говна навалом, что-то конечно переписывают, но не на дотнет, а на условный питухон
(реальный случай знакомого который переписывал вебформы на ноду)
|
Я только рад оказаться не прав, но это реальность о которой я сужу по вакансиям на indeed.
14 из 15 - говно.

Может я конечно долбаеб не там ищу
605 2408363
>>408332
Про забугры я слабо шарю, но по одной свалке вакансий судить точно рано.

>На удаленку контрактором на дяду сэму ты не уйдешь


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

>На конкуренцию похуй.


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


>>408315
Это ты судишь по таким же удаленкам для третьих стран или это реальная ситуация конкретно на местах? Я от местных в пиндостане слышал, что дотнета там дохуя и больше с годными зарплатами и большинство на коре сидит.

>ноде


За этот кусок недобэка с 1% рынка вообще что-то платят? Покажи, я такого чуда еще не видел.
606 2408369
>>408332

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


(реальный случай знакомого который переписывал вебформы на ноду)
Олсо, какой нахуй петухон и нода? На них можно развернуть сайтец локальной аптеки или там местного фитнес-клуба с онлайн-записью. Серьезные энтерпрайзы никто на такие технологии переводить не будет, потому что жирные приложения на петухоне и ноде не подлежат поддержке, это технологии для совершенно других задач.
607 2408374
>>408363

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



Поддвачну, это действительно так, но на удивление на ноде пару норм вакансий по описанию видел.
Я сужу по всему indeed, не только по плашкам
remote contractor from anywhere
Там большинство вакансий с дотнетом действительно какое-то говно и платят мало.
Может этот ресурс у них не котируется, но я из СНГ брезгую на таком за такие деньги работать, в штатах я бы тем более за такие суммы не работал

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

>>408363

>куча разных проектов и годные зарплаты


Я все что связано с фронтом не перевариваю, ангуляр еще более-менее, но верстку нахуй.

>>408363

>реальная ситуация конкретно на местах


Это реальная ситуация на аутсорс галере

>>408363

>недобэка с 1% рынка вообще что-то платят?


Платят, любители говностартапов с пердолингом по 8+ часов в сутки оценят.
Размеренного темпа с планированием и нормальным Agile процессами там и не пахнет
608 2408379
>>408369

>Серьезные энтерпрайзы никто на такие технологии переводить не будет


Переводили какую-то CRM с вебформ на ноду
В сортах говна не разбираюсь, но proof of concept на сколько я знаю заказчику выкатывали на NestJS
>>408369

>ноде не подлежат поддержке


Смотря кто пишет, код на дотнете тоже не всегда подлежит поддержке, если его долбаебы писали
609 2408380
>>408374
А зачем вообще пытаться в эту удаленку с дядей сэмом? Тем более сейчас, когда этот дядя в любой момент тебя нахуй пошлет, дикие проблемы с оплатой и так далее. У нас же локальных годных вакансий дохуя и больше. А если уж к сэму, то имхо надо по-нормальному с релоком.
610 2408384
>>408380

>А зачем вообще пытаться в эту удаленку с дядей сэмом


Платят значительно больше (при условии если идти на нормальные рейты 50$+) на меньше я не согласен
>>408380

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



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

> А если уж к сэму, то имхо надо по-нормальному с релоком.


А я и рыбку съесть и на пенек залезть хочу, релок предлагают аутсорс галеры, но там говно какое-то, ради условных 1500$ в месяц сверху переезжать ну такое
611 2408391
>>408384

>Я в РБ


Так вам вроде в рф устроиться должно быть легко.

>релок предлагают аутсорс галеры


Много кто предлагает. Правда с уровня не ниже мидла. Если ты годный специалист (а СНГшные ценятся), то релокнет почти кто-угодно, это не так уж дорого в сравнении с тем, что ты им дашь.
612 2408394
>>408391

>Много кто предлагает. Правда с уровня не ниже мидла. Если ты годный специалист (а СНГшные ценятся), то релокнет почти кто-угодно, это не так уж дорого в сравнении с тем, что ты им дашь.


>>408391

>Так вам вроде в рф устроиться должно быть легко.


Я релок принципиально не хочу, в этом вся проблема.
613 2408551
>>408323
Ну он похоже заброшен
Потому вот https://www.nanoframework.net/
614 2408602
Maui это замена wpf и xamarin?
615 2408604
>>408602
Maui - это замена Xamarin на EEE.
616 2409147
>>408602
Это какая-то надстройка над wpf
617 2409151
>>409147
даже рядом не лежало
это хамарин на десктопе, причем без линукса
618 2409180
>>409151
Зачем прошивке для роутера графический фреймворк?
619 2409188
А wpf рендерит интерфейс на видеокарте, или использует родные виндовские примитивы?
image.png203 Кб, 674x354
620 2409215
Сделал метод который считает сумму двух чисел. Шанс на вкат есть?
621 2409220
Можно говорить что угодно, но факт остаётся фактом: лучше WinForms ещё ничего не придумали.
622 2409221
>>409220
Всё так анончик, пока клованы ебутся с биндингами и xaml винформо-боги просто мышкой перетаскивают и делают модный UI.
623 2409226
>>409221
Всё просто и понятно, как у дедов с RAD. Не надо придумывать себе архитектурные проблемы и потом героически их превозмогать.
624 2409348
>>409180
Прошивке для роутера достаточно веб-интерфейса
625 2409405
>>409215
Если бы я такое увидел на ревью - я бы тебя убил прямо на месте. Даже не просил бы нормально написать. Просто взял и убил прямо там. А показав этот код другим коллегам - думаю они бы помогли от тела избавиться.
626 2409473
>>400211
Я вижу 2 причины:
1) Неуправляемые сторонние библиотеки
2) Очень тонкое место в системе, где нужно производить дохуя расчетов, при этом чтобы тут не мешался GC. Например это может произойти в какой нибудь системе реального времени, где данные поступают сплошным нескончаемым потоком - и тебе нужно их как-то обработать. Если тут будет GC, то есть шанс, что из-за его работы внезапно подвиснет поток и программа перестанет успевать за входящими данными
627 2409474
>>404925
Асинхронность, это когда ты например отправил запрос куда-то там и тупо ожидаешь ответа. Например запрос на сервак или в бд. В это время у тебя программа фактически нихуя не делает, просто ждет.
Парралелизм, это когда программа всё же делает, что-то считает например, отдавая это сторонним потокам.

Это основное отличие асинхронности от парралелизма.

При async await у тебя вообще таска может никуда не уйти из вызывающего потока, например если быстро выполнилось. Как правило работает это все же иначе. Если есть контекст синхронизации, который обычно объявлен общим по всей приложухе, то после await, выполнение 100% вернется обратно в вызывающий поток. Если контекста синхронизации нету, как в ASP приложениях, то выполнение как нехуй может вернуться уже в другом потоке. Это кстати основная причина того, почему await нельзя засунуть в lock и компилятор пошлет тебя нахуй.

Thread - низкоуровневая хуйня, никогда не создавай её ручками. Используй TPL - там хотя бы всякие тредовые пулы юзаются
628 2409488
>>409221
унылый UI (не умеющий в изменение DPI) из заранее забитых компонентов
(захочешь кастомизации - привет пердолинг в ручное рисование)
629 2409498
>>409215
Никого не слушай, ты реально талант
630 2409499
>>409474

>Если есть контекст синхронизации, который обычно объявлен общим по всей приложухе, то после await, выполнение 100% вернется обратно в вызывающий поток



неправда. оно вернется в контекст (который уже сам решит где ему выполнять) и то только если ConfigureAwait(true) - да, эта хрень по дефолту тру, но не у всех - пока мелкие игнорят просьбы сделать выбор на уровне сборки, другие (и я тоже) используют Fody.ConfigureAwait и делают ConfigureAwait(false) по дефолту
631 2409500
>>409215
а кому такое нужно? Такое нужно только тем, кто либы разные пишет. Но бизнесу такое не нужно.
632 2409510
>>409500

>а кому такое нужно


Никому, это пустая трата времени. Лучше бы я алгоритмы дрочил, а не эту хуйню.
633 2409511
>>409215

> пик


Это что-то вроде ассемблерных вставок?
634 2409513
>>409405
Почему? Можешь объяснить чем этот код плох? Кроме его бесполезности, конечно же.
635 2409518
>>409500
Бизнесу вообще программирование нахуй не всралось, ему нужна оптимизация процесса получения прибыли. И как это добьются четырёхглазые макаки из айти, ему насрать, пусть хоть через динамикметоды.
636 2409547
Всем привет. Подскжите, какой набор скиллов и проектов сейчас нужен джуну на позицию asp.net разраба, чтобы его резюме было заметно лучше чем у большинства конкурентов?
637 2409550
>>409511
это кодогенерация. нужна там, где по какой то причине не хватает expression tree
или же генеришь классы на лету. в мапперах всяких или обхода ограничений CLR. То есть в библиотеках.
с приходом source generator стало менее нужным
Я вот использую в маппере игнорируя CLR проверки на типы понимая возможные последствия конечно.

в обычном программировании нахер не нужно - там есть expressio tree

>>409518
да да. конечно ) если ты будешь кодить год вместо 2х дней, то ему будет не насрать.
638 2409553
>>409547
Вкатился недавно. Есть апишка с EF одна на гитхабе, но мне кажется её даже не смотрели. Есть год опыта смежного (не .net, но тоже кодинг). Тестовое делал с многопоточкой и сетями (нужно ковырять их специально глючный сервак по TCP и вытягивать данные). На собесе спросили чутка про подробности ООП и про внутреннее устройство коллекций.
639 2409557
>>409550
Если ты через динамикметод решишь задачу быстрее, чем нормальным способом, тебя заставят юзать динамикметод.
640 2409579
>>409557
но ты не решишь. Даже будь ты 100000 раз спецом - тупо писать больше.
Если бы так решалось, то все бы писали на ассемблерах и высокоуровневые языки бы не родились (а зачем)
и шарп бы не родился - а зачем если есть си
641 2409622
>>409579
Ну так это говно и не годится для стандартного крудошлёпства для кабана, его нужно юзать в более специфичных задачах.
642 2409647
>>405553
GC.StopTheWorld
image.png408 Кб, 1000x977
643 2409656
Чо посоны прислали таки оффер, потерял всего 30% по зп. Почти 5 месяцев без работы сидел.

>>2384400 →-нытик
644 2409675
>>409656
знание зарплаты ничего не дает
важны требования

можно зарабатывать и косарь, но при этом балду пинать, не отчитываться, иметь гибкий график и так далее.
645 2410040
>>409656

>потерял всего 30% по зп.


Это ты что, на 700 баксов подписался?
Чет совсем дешево, не ценишь ты себя.
Я столько имел год назад на заводе стоя за станком (причем по старому курсу)
646 2410055
>>410040
Неее, до спецоперации почти 3к получал.
647 2410202
>>399284 (OP)
Как сделать пира на .NET 3.5?
648 2410207
>>410202
Сокеты есть? Есть. Чо тебе ещё надо?
649 2410218
Есть класс, наследующий Grid. У этого грида есть дочерний элемент — эллипс, у которого есть событие MouseButtonUp.

Так вот, как бы, так сказать, ретранслировать это событие на родительский класс Grid. Я не хочу снаружи иметь доступ к эллипсу. Городить кастомное событие тоже не хочется — там многабукв.
650 2410229
>>410218
Все, нашел.
651 2410258
>>410229
всегда рады помочь, с вас пять тыщ.
652 2410264
>>410207
Понимание того, что это за херь, и как сделать нормального пира на них.

Пока, всё что приходит в голову - это блядь костылить такую хуету.
Пир, значит, это и клиент, и сервер...
Значит надо поднять блядь сервер.
Сервер какой?
Очевиднейший TcpServer: https://github.com/username1565/nanoboard/blob/master/nanodb.exe-source/Server/TcpServer.cs
Ну не HttpServer же, блеать:
https://github.com/username1565/nanoboard/blob/master/nanodb.exe-source/Server/HttpServer.cs

Но я пошёл дальше, и нарыл такие коды: https://github.com/username1565/CSharpServers/tree/TCPUDPChat
Короче, можно типа ещё и UDP прихуярить туда, чтобы и TCP и UDP было на одном порту, какбэ.
И шо это даст? Казалось бы, нихуя, но...
UDP поддерживаеть Multicast: https://metanit.com/sharp/net/5.2.php
А значит, можно делать Peer Discovery в LAN, через Multicast,
и так искать пиров, в локалке.
А потом соединяться с ними по TCP или UDP, и короче добавлять их в Dictionary, дальше уже синхронить список пиров между ними (Peer Exchange).

Хуй знает шо за сокеты, и с чем их жрать, но ебанины, очевидно, много.
Написал всю хуйню русскими буквами, кириллическими, вот здесь:
https://github.com/username1565/nanoboard/issues/21#issuecomment-1188924519
А как вкодить - хуй знает блядь. Я уже реально заебался с этой хуйнёй. ПАМАГИТИИИ...
653 2410282
>>410264
Не надо TCP и UDP. Надо просто UDP. Осталось обмазать DHT и NAT hole punching, и это самое сложное.
654 2410305
>>410282
А как же без TCP, если там HttpServer.cs увязан на TcpServer.cs? Это типа чо, по UDP - HTTP-запросы можно делать, и всякий HTML c JSON'ом передавать?
Не, по-моему надо оставить TCP-сервер, как есть, чтобы не перепердоливать всё, нахуй блядь, а то можно вусмерть закрасноглазиться на голом энтузиазме, как я.
Поэтому, взбрело в голову заебенить TCP+UDP, какбэ, и вроде как уже протестил, оно пошет, вон код.

Насчет DHT... Ну хуй знает...
Хэш - IP, можно сделать в Dictionary, а потом тупо конвертнуть его в JSON, и дальше уже - можно тупо JSON хуярить текстом, в виде байт, по TCP, уже после установки соединения,
и так синхронить эту хэш-таблицу с пирами, реализуя Peer Exchange.
А уже между пирами, потом синхронить и хэш-таблицу с самой базой данных наноборды (там тоже хэш-таблица, тащемта).

Насчет NAT Hole punching, а он нужен этот пердолинг?
Может просто upnp прихуярить туда, чтобы автопроброс порта работал, как-бэ, а дальше уже биндить всю хуйню на 0.0.0.0, чтобы на всех адресах оно пахало, и не выёбывалось.
Но да, если только в локалке мультикастом пиров искать будет,
то за NAT пиров хуй найдёшь,
поэтому можно было бы замкнуть NAT Hole punching на самих пиров, и пока 1 пир есть, чтобы можно было его юзать, как ноды в криптоговнах.

Я думал есть уже пир, но как обычно придётся самозапиливать всю хуйню самостоятельно, ибо ебать какой я элитарий, я же на острие инноваций.
655 2410358
>>410305

> А как же без TCP, если там HttpServer.cs увязан на TcpServer.cs? Это типа чо, по UDP - HTTP-запросы можно делать, и всякий HTML c JSON'ом передавать?


Зачем тебе вообще HTTP? Ну, можешь построить туннель поверх UDP, чтобы он мог передавать HTTP, некоторые P2P-сети поддерживают подобное, оборачивают TCP-трафик в UDP. HTML и JSON можно передавать без HTTP, это просто формат данных, он ничего не знает о протоколе.

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


P2P-сети и перепердоливают всё. Там по сути приходится строить все уровни протоколов с нуля., только вместо IP-пакетов UDP-пакеты.

> Хэш - IP


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

> Насчет NAT Hole punching, а он нужен этот пердолинг?


> Может просто upnp прихуярить туда, чтобы автопроброс порта работал, как-бэ, а дальше уже биндить всю хуйню на 0.0.0.0, чтобы на всех адресах оно пахало, и не выёбывалось.


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

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


Есть, те же торренты с API для шарпа. Но многие заточены под специфичные юзкейсы, и если ты собрался писать свою сеть общего назначения типа I2P, большую часть придётся реализовывать самому, потому что массово никому такие задачи решать не приходится, почти всем хватает традиционного клиент-сервера поверх TCP.
656 2410362
>>410358

> и не блокирует входящие соединения по TCP


Блокирует.
fix
657 2410475
Прочел RB Whitaker The C# Player's Guide, который тут неоднократно советовали. Могу ли я теперь считаться джуном и пытаться найти галеру?
658 2410519
659 2410587
>>410475
нет
660 2410594
>>410475
Чтобы стать джуном нужно писать.
661 2410596
>>410475
Для джуна главное софт скилы, а не знания. Ты можешь плавать в теории, не мочь в асинхронность, но иметь подвешенный язык, и тебя возьмут скорее, чем задрота.
image.png25 Кб, 697x160
662 2410642
>>410358

>Зачем тебе вообще HTTP?


Потому что наноборда работает по HTTP, а он по TCP, и HttpServer.cs, по коду, увязан на TcpServer.cs

>Ну, можешь построить туннель поверх UDP, чтобы он мог передавать HTTP


Это как так? Через UDP HTTP-запросы отправлять, что-ли?

>некоторые P2P-сети поддерживают подобное, оборачивают TCP-трафик в UDP.


Бля, это ещё пижже, как-бэ, но нахуа?
Прикол в то, что UDP пакеты пиздуют не последовательно, а как-бы вразнобой:

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



В то время как TCP-пакеты пронумерованы, и доставляются последовательно, в потоке (TcpStream).
Это если HTTP поверх UDP слать, и если будет пиздатый запрос, то конец запроса может прийти раньше чем начало запроса, короче кусками запрос придёт - и хуй знает как всё это обрабатывать, блядь.
Также, и ответ может пиздовать вразнобой, надо походу нумеровать пакеты, а потом их складывать в цепочку, и это будет какая-то задержка типа.

>HTML и JSON можно передавать без HTTP, это просто формат данных, он ничего не знает о протоколе.


Ну ясен хуй, что хэш-таблицу нанопостов в виде JSON можно синхронизировать и по TCP и по UDP, между пирами. Как и список пиров, реализуя тем самым Peer Exchange.
Но чтобы HTML передавать по HTTP, через UDP или мутить инкапсуляцию TCP over UDP - ну тут уже хуй знает, я такого не видел. TCP годен тем, что там держится коннект, после тройного рукопожатия, и инфа пиздует в потоке, а не вразнобой. Именно поэтому HTTP-сервер работает по TCP. Но TCP не поддерживает multicast, а значит и Peer Discovery.
Поэтому я решил объединиь TCP/UDP в один сервер, и приебенить туда мультикаст-группу для поиска пиров.
Но всё это в пределах локалки, не за NAT.
Это как Tox, например, если в локалке два TOX-клиента поднять, они друг-друга сразу найдут Multicast'ом, и соединятся, и пока есть хотя-бы один коннект - оба пира в сети, и можно общаться даже без интернета.
Ну а чтобы за NAT'ом приконнектится, тогда уже можно использовать внешние ноды: https://nodes.tox.chat и там походу есть уже NAT Hole punching или что-то вроде этого,
хуй знает, там код на C и питоне - я просто не могу его читать, не зная синтаксис этих языков программирования.

>P2P-сети и перепердоливают всё. Там по сути приходится строить все уровни протоколов с нуля., только вместо IP-пакетов UDP-пакеты.


Могу залить тестовый код.
Я пока сделал такую хуйню,
там короче TCP/UDP сервер вместе,
на одном порту поднимаются,
и к UDP-серверу присоединяется мультикаст-группа тоже.
Затем, клиентская сторона, по таймеру срабатывает регулярно, и шлёт только мультикаст-запросы по UDP, на адрес мультикаст-группы.
Если приходит ответ из мультикаст-группы, берётся IP откуда пришёл ответ, ну и порт дефолтный - порт TCP/UDP-сервера.
IP:PORT добавляется в HashSet, и сразу выводится, на этот IP:PORT можно будет приконнектиться либо по UDP, либо по TCP.
И дальше уже просинхронить этот HashSet, и прочее, когда установится TCP-коннект (так как UDP-пакеты будут идти вразнобой).
Всё это, какбэ работает без NAT пока, потому что я не впердоливал upnp и NAT hole punching, ещё.

>Ещё IP может быть динамическим.


Тогда надо юзать нечто вроде DDNS, походу, и коннектиться на DomainName:PORT
И ещё, вроде как, надо выкидывать подобное говно из HashSet <string> PeersList если нельзя приконнектиться в течении некоего времени. Но это вопрос спорный, тот пир может быть просто отключён на время, а потом включится.

>Ещё под одним белым IP может сидеть тысяча узлов с серым локальным IP. 192.168.x.x.


Вот тут надо upnp, или Port Forwarding для порта TCP/UDP-сервера, потому что иначе, порт TCP/UDP сервера может быть закрыт, а клиент может подключаться к разным серверам - с разных портов, которые ещё и меняься будут.
Ясное дело, что тысяча узлов не могут прокинуться на один и тот же порт.

>Допустим, проблему с пробросом портов на своём домашнем роутере ты решишь.


Так шоб его руками не пробрасывать, надо upnp.
Но если ты говоришь тысяча узлов будет сидеть на роутере,
то это будет 1000 самых разных портов открытых, и номер порта TCP/UDP-сервера, как-бы, не фиксированный, получается.

>А что делать с провайдером, который не даёт статический IP


DDNS.
Его - разрезолвить в IP, и на дефолтный TCP/UDP порт как-бы, ломится, туда.

>и не блокирует входящие соединения по TCP?


Тут не совсем понял. Ты хотел сказать блокирует?
Если провайдер блокирует входящие соединения TCP, значит надо очевиднейший UDP, потому что там нет соединений, как таковых, там просто пакеты летают в разные стороны.

>Те же торренты в безтрекерной сети могут работать и с серыми IP.


Они через обмен пирами приходят, походу. И скорее всего там NAT Hole Punching уже реализован. Пикрелейтед.
Но это не точно.

>Есть, те же торренты с API для шарпа.


>Но многие заточены под специфичные юзкейсы


А они на .NET 3.5 будут работать?
Может реально заливать тупо в торренты и нанопосты, и аттачи для них, и по magnet-ссылкам вытягивать всё это дело потом?
Думал также на IPFS лить всю эту хуйню.
Но это будет куча торрент-файлов, блеать, и куча ссылок...
А хотелось бы просто файл базы синхронить или три хэш-таблицы (список пиров, список нанопостов, список аттачей).

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


Я изначально подумал следать что-то вроде TOX'а, чтобы можно было просто две наноборды поднять в локалке, и чтобы они сразу друг-друга нашли, и потом сами соединились, и сами просинхрили базу данных - без инета вообще, через роутер, например, и дополнили свои базы данных нанопостами - на обеих пирах.
Но тут NAT не учтён, какбэ, да.

>почти всем хватает традиционного клиент-сервера поверх TCP.


Ну, в принципе, можно было бы просто сервер поднять, и коннектиться. Но наноборда - это же анонимная имиджборда. А если будет сервер, то будет диванон.
Алсо, сервер могут тупо положить дудосом.
Поэтому я хочу заебенить пир. А пир - это не просто сервер, это клиент и сервер одновременно, как-бэ.
И вот, допустим, удалось объединить TCP-сервер и TCP-клиент воедино, в один пир.
И вот два пира поднято - в локалке или в Интернете.
И как они друг-друга найдут?
TCP не поддерживает multicast - в этом прикол.
Значит надо использовать что-то вроде списка addnode, как в криптовалютах, но при таком раскладе, addnode - это по-сути сервера с конкретными IP и проброшенным через Port Forwarding или upnp - портом.
А по IP их могут задиванонить и задудосить нахуй, или нагнать маски-шоу и расхуярить всё там, чтобы пересрать всё нахрен, и всю сеть поломать.
Потому что без нод, хуй приконнектятся пиры эти ебучие.
Я такую ебанину уже заебался зоонаблюдать в криптоговнах,
специально цены на криптоговнины роняют в нулину, сложности роняют тоже, майнить и держать говно не выгодно, ноды держать включёнными не выгодно, их отклчают нафиг,
а эти мочерские, подментованные пидоры пробивонные,
из парочки нод уже могут легко задиванонить криптана,
потому что поле поиска резко сужается, когда мало синхнод, блеать.
Поэтому, чтобы всей этой ублюдочной хуйни не было, я пришёл к Peer Discovery через UDP Multicast, ибо при таком раскладе, пиры могут быть подняты в локалке, и сразу, автоматически, они могут начать синхрониться, без всяких addnode и публичных серверов, как-бы, которые ещё надо хостить, и хостить на белых IP, и палить их.

А так-то, наноборда, вообще без серверов разрабатывалась, там тупо локальный сервер, как читалка нанопостов, и больше нихуя.
Локальный сервер хуй задодосишь, и хуй задиванонишь, потому что он локальный блеать.
image.png25 Кб, 697x160
662 2410642
>>410358

>Зачем тебе вообще HTTP?


Потому что наноборда работает по HTTP, а он по TCP, и HttpServer.cs, по коду, увязан на TcpServer.cs

>Ну, можешь построить туннель поверх UDP, чтобы он мог передавать HTTP


Это как так? Через UDP HTTP-запросы отправлять, что-ли?

>некоторые P2P-сети поддерживают подобное, оборачивают TCP-трафик в UDP.


Бля, это ещё пижже, как-бэ, но нахуа?
Прикол в то, что UDP пакеты пиздуют не последовательно, а как-бы вразнобой:

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



В то время как TCP-пакеты пронумерованы, и доставляются последовательно, в потоке (TcpStream).
Это если HTTP поверх UDP слать, и если будет пиздатый запрос, то конец запроса может прийти раньше чем начало запроса, короче кусками запрос придёт - и хуй знает как всё это обрабатывать, блядь.
Также, и ответ может пиздовать вразнобой, надо походу нумеровать пакеты, а потом их складывать в цепочку, и это будет какая-то задержка типа.

>HTML и JSON можно передавать без HTTP, это просто формат данных, он ничего не знает о протоколе.


Ну ясен хуй, что хэш-таблицу нанопостов в виде JSON можно синхронизировать и по TCP и по UDP, между пирами. Как и список пиров, реализуя тем самым Peer Exchange.
Но чтобы HTML передавать по HTTP, через UDP или мутить инкапсуляцию TCP over UDP - ну тут уже хуй знает, я такого не видел. TCP годен тем, что там держится коннект, после тройного рукопожатия, и инфа пиздует в потоке, а не вразнобой. Именно поэтому HTTP-сервер работает по TCP. Но TCP не поддерживает multicast, а значит и Peer Discovery.
Поэтому я решил объединиь TCP/UDP в один сервер, и приебенить туда мультикаст-группу для поиска пиров.
Но всё это в пределах локалки, не за NAT.
Это как Tox, например, если в локалке два TOX-клиента поднять, они друг-друга сразу найдут Multicast'ом, и соединятся, и пока есть хотя-бы один коннект - оба пира в сети, и можно общаться даже без интернета.
Ну а чтобы за NAT'ом приконнектится, тогда уже можно использовать внешние ноды: https://nodes.tox.chat и там походу есть уже NAT Hole punching или что-то вроде этого,
хуй знает, там код на C и питоне - я просто не могу его читать, не зная синтаксис этих языков программирования.

>P2P-сети и перепердоливают всё. Там по сути приходится строить все уровни протоколов с нуля., только вместо IP-пакетов UDP-пакеты.


Могу залить тестовый код.
Я пока сделал такую хуйню,
там короче TCP/UDP сервер вместе,
на одном порту поднимаются,
и к UDP-серверу присоединяется мультикаст-группа тоже.
Затем, клиентская сторона, по таймеру срабатывает регулярно, и шлёт только мультикаст-запросы по UDP, на адрес мультикаст-группы.
Если приходит ответ из мультикаст-группы, берётся IP откуда пришёл ответ, ну и порт дефолтный - порт TCP/UDP-сервера.
IP:PORT добавляется в HashSet, и сразу выводится, на этот IP:PORT можно будет приконнектиться либо по UDP, либо по TCP.
И дальше уже просинхронить этот HashSet, и прочее, когда установится TCP-коннект (так как UDP-пакеты будут идти вразнобой).
Всё это, какбэ работает без NAT пока, потому что я не впердоливал upnp и NAT hole punching, ещё.

>Ещё IP может быть динамическим.


Тогда надо юзать нечто вроде DDNS, походу, и коннектиться на DomainName:PORT
И ещё, вроде как, надо выкидывать подобное говно из HashSet <string> PeersList если нельзя приконнектиться в течении некоего времени. Но это вопрос спорный, тот пир может быть просто отключён на время, а потом включится.

>Ещё под одним белым IP может сидеть тысяча узлов с серым локальным IP. 192.168.x.x.


Вот тут надо upnp, или Port Forwarding для порта TCP/UDP-сервера, потому что иначе, порт TCP/UDP сервера может быть закрыт, а клиент может подключаться к разным серверам - с разных портов, которые ещё и меняься будут.
Ясное дело, что тысяча узлов не могут прокинуться на один и тот же порт.

>Допустим, проблему с пробросом портов на своём домашнем роутере ты решишь.


Так шоб его руками не пробрасывать, надо upnp.
Но если ты говоришь тысяча узлов будет сидеть на роутере,
то это будет 1000 самых разных портов открытых, и номер порта TCP/UDP-сервера, как-бы, не фиксированный, получается.

>А что делать с провайдером, который не даёт статический IP


DDNS.
Его - разрезолвить в IP, и на дефолтный TCP/UDP порт как-бы, ломится, туда.

>и не блокирует входящие соединения по TCP?


Тут не совсем понял. Ты хотел сказать блокирует?
Если провайдер блокирует входящие соединения TCP, значит надо очевиднейший UDP, потому что там нет соединений, как таковых, там просто пакеты летают в разные стороны.

>Те же торренты в безтрекерной сети могут работать и с серыми IP.


Они через обмен пирами приходят, походу. И скорее всего там NAT Hole Punching уже реализован. Пикрелейтед.
Но это не точно.

>Есть, те же торренты с API для шарпа.


>Но многие заточены под специфичные юзкейсы


А они на .NET 3.5 будут работать?
Может реально заливать тупо в торренты и нанопосты, и аттачи для них, и по magnet-ссылкам вытягивать всё это дело потом?
Думал также на IPFS лить всю эту хуйню.
Но это будет куча торрент-файлов, блеать, и куча ссылок...
А хотелось бы просто файл базы синхронить или три хэш-таблицы (список пиров, список нанопостов, список аттачей).

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


Я изначально подумал следать что-то вроде TOX'а, чтобы можно было просто две наноборды поднять в локалке, и чтобы они сразу друг-друга нашли, и потом сами соединились, и сами просинхрили базу данных - без инета вообще, через роутер, например, и дополнили свои базы данных нанопостами - на обеих пирах.
Но тут NAT не учтён, какбэ, да.

>почти всем хватает традиционного клиент-сервера поверх TCP.


Ну, в принципе, можно было бы просто сервер поднять, и коннектиться. Но наноборда - это же анонимная имиджборда. А если будет сервер, то будет диванон.
Алсо, сервер могут тупо положить дудосом.
Поэтому я хочу заебенить пир. А пир - это не просто сервер, это клиент и сервер одновременно, как-бэ.
И вот, допустим, удалось объединить TCP-сервер и TCP-клиент воедино, в один пир.
И вот два пира поднято - в локалке или в Интернете.
И как они друг-друга найдут?
TCP не поддерживает multicast - в этом прикол.
Значит надо использовать что-то вроде списка addnode, как в криптовалютах, но при таком раскладе, addnode - это по-сути сервера с конкретными IP и проброшенным через Port Forwarding или upnp - портом.
А по IP их могут задиванонить и задудосить нахуй, или нагнать маски-шоу и расхуярить всё там, чтобы пересрать всё нахрен, и всю сеть поломать.
Потому что без нод, хуй приконнектятся пиры эти ебучие.
Я такую ебанину уже заебался зоонаблюдать в криптоговнах,
специально цены на криптоговнины роняют в нулину, сложности роняют тоже, майнить и держать говно не выгодно, ноды держать включёнными не выгодно, их отклчают нафиг,
а эти мочерские, подментованные пидоры пробивонные,
из парочки нод уже могут легко задиванонить криптана,
потому что поле поиска резко сужается, когда мало синхнод, блеать.
Поэтому, чтобы всей этой ублюдочной хуйни не было, я пришёл к Peer Discovery через UDP Multicast, ибо при таком раскладе, пиры могут быть подняты в локалке, и сразу, автоматически, они могут начать синхрониться, без всяких addnode и публичных серверов, как-бы, которые ещё надо хостить, и хостить на белых IP, и палить их.

А так-то, наноборда, вообще без серверов разрабатывалась, там тупо локальный сервер, как читалка нанопостов, и больше нихуя.
Локальный сервер хуй задодосишь, и хуй задиванонишь, потому что он локальный блеать.
663 2410654
Здравствуйте, господа шарписты!
Есть ли тут те, кто сидят на линухе и пишут код на шарпе?
Пару дней назад я установил линукс на пекарню, чисто по приколу. И значит вспомнил, что я люблю этот ваш C#, и хочется на нём пописать. Так вот вопрос к знатокам линуксойдам - где вы пишите код? Rider норм ваще? Не писать же в VS code?
664 2410657
Блять, как вы заебали, ебаные прыщебляди.
665 2410688
>>410654
Как обычно, в блокноте,
компилируем с помощью csc или msbuild, в mono.
https://ru.wikipedia.org/wiki/Mono
Запускаем так:

>mono Program.exe

666 2410689
>>410688
вы ебанулись!
667 2410695
>>410654
Короче, глянь
это https://github.com/username1565/mono/blob/main/build_runtime.sh
это https://github.com/username1565/nanoboard/blob/nanodb-sqlite/nanodb.exe-source/build.sh
и это https://github.com/username1565/nanoboard/blob/nanodb-sqlite/run.sh
Там, в комментах строчки сныканы, ну шоб поставить это моно.
668 2410716
>>410642

> Потому что наноборда работает по HTTP, а он по TCP, и HttpServer.cs, по коду, увязан на TcpServer.cs


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

> Это как так? Через UDP HTTP-запросы отправлять, что-ли?


Ну да.

> Бля, это ещё пижже, как-бэ, но нахуа?


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


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

> Поэтому я решил объединиь TCP/UDP в один сервер, и приебенить туда мультикаст-группу для поиска пиров.


Основная проблема TCP - через него невозможно сделать NAT hole punching. Так-то все бы его юзали и не парились.

> Но если ты говоришь тысяча узлов будет сидеть на роутере,


Не, я имел в виду маршрутизатор самого провайдера, который соединён с твоим домашним роутером.

> >Есть, те же торренты с API для шарпа.


> >Но многие заточены под специфичные юзкейсы


> А они на .NET 3.5 будут работать?


Не факт, но попробуй взять релизы постарее.

И много других проблем, по остальному не подскажу, очень специфичная тема.
669 2410736
>>410654
А че, вс код считается калом*
670 2410751
>>410736
ну...на любителя
671 2410774
>>410654
Rider - охуенная тема. Правда, есть вероятность, что к vs ты уже не захочешь возвращаться.
672 2410925
>>408045
У меня для тебя неприятная новость: Тебя хотят сократить и ищут предлог.
673 2410951
>>410688
>>410695
Вы блять троллите или из 2015?
Какой нахуй mono
>>410654

>Rider норм ваще


Норм, на нем и пишут
674 2411067
>>410689
>>410951
Ну наконец-то мы услышим предложение от настоящих специалистов, как без вайна запустить программу с WinForms на лялехе!
675 2411092
Wpf устарел?
676 2411099
Сколько байт занимает object?
677 2411101
>>411099
Настолько дохуя, что ты охуеешь. Если не можешь с этим смириться, тебе в C++ тред.
678 2411104
>>411092
Все некроссплатформенные* API устарели, даже если их написали сегодня.

⚹винда, линукс и макос
679 2411109
>>411101

>Настолько дохуя, что ты охуеешь


После твоей мамаши меня уже ничего не удивит
680 2411114
>>411109
Кроме размера object.
681 2411115
>>411104
Прошивка для роутеров и прошивка для пидоров не нужны.
682 2411117
>>411115
Лишь бы была прошивка для твоей мамаши.
683 2411120
>>411114
Который равняется ...?
684 2411211
>>411120
12 кажется. 8 на номер рантайм типа, 4 байта для флагов синхронизации и системного говна.
685 2411230
>>411211
Ебать, 12 гигабайт.
686 2411246
Анон, помоги разобраться с dependency injection. Весь день курю гуглы и ютубы по теме, но все еще остаются два вопроса.
1. Какой фреймворк для этого дела учить джуну? Одни советуют родной мелкософтовский, другие autofac, третьи еще что-то. Нормальные туториалы нашел только по автофаку.
2. Видел несколько реализаций без фреймворков - там создается отедльный класс с методами, в которых вызываются инстанции классов. И я как-то не понял, это всегда будет работа с новыми инстанциями? А если мне нужен стабильный класс с определенными данными, который постоянно висит в памяти?
image.png24 Кб, 643x156
687 2411260
Да что такое эта ваша асинхронщина если оно авейтит выполнение?
688 2411270
>>411246

>Какой фреймворк для этого дела учить джуну


Microsoft DI

>Видел несколько реализаций без фреймворков


Это каловое говно из жопы. Настоящий DI который юзают в проектах делается не так.

Объясняю на пальцах. У тебя есть интерфейс и его реализация:

interface IPizda { }

class LocalPizda : IPizda { }

Так же, есть класс который ЗАВИСИТ (dependency) от IPizda (т.е в нашем случае IPizda - это dependency/зависимость/залежність):

class Sex
{
private IPizda _pizda;
public Sex(IPizda pizda)
{
_pizda = pizda;
}
}

Но, поскольку реализаций может быть много которые будут меняться во время разработки приложения (например LocalPizda - это класс тупо для теста функциональности на локальном ПК, а в будущем будет такой же класс но с более глобальным функционалом) мы не можем нормально передавать в конструктор класса Sex конкретную реализацию (всё таки всё сведется к тому что мы где-то захардкодим new LocalPizda()), так помимо всего этого в класс LocalPizda может еще прийти 100500 таких же зависимостей (которые в себе могут содержать зависимости.. и так до бесконечности).

Чтобы решить проблему ебли с new ConcreteClass(new Dependency1(), new Dependency2(new DependencyDependency1())) где присутствует конкретная реализация, что плохо, придумали такое как внедрение зависимостей. Внутри Microsoft.DependencyInjection происходит следующее: фиксируется интерфейс IPizda и его реализация LocalPizda. Из LocalPizda фиксируются все возможные конструкторы с параметрами и без. После того, как ты зарегаешь все свои зависимости с зависимостями:

IServiceCollection serviceCollection = new ServiceCollection();

serviceCollection.AddTransient<LocalPizda, IPizda>();
serviceCollection.AddTransient<LocalPizdaDependency, ILocalPizdaDependency>();

Ты можешь их сбилдить в объект:

ServiceProvider provider = serviceCollection.BuildServiceProvider();

Ты можешь сделать следующий вызов:

var localPizda = provider.GetService<IPizda>();

И теперь у тебя есть объект LocalPizda (но будет как IPizda), содержащий все нужные ему зависимости, т.е serviceProvider сам сделал конструктор и засунул туда нужные зависимости и сделал для них конструкторы с их зависимостями (ну и так вглубь до конечного результата который тебе нужен в виде IPizda), это помогает как решить new ConcreteClass(new Dependency1(), new Dependency2(new DependencyDependency1()))
688 2411270
>>411246

>Какой фреймворк для этого дела учить джуну


Microsoft DI

>Видел несколько реализаций без фреймворков


Это каловое говно из жопы. Настоящий DI который юзают в проектах делается не так.

Объясняю на пальцах. У тебя есть интерфейс и его реализация:

interface IPizda { }

class LocalPizda : IPizda { }

Так же, есть класс который ЗАВИСИТ (dependency) от IPizda (т.е в нашем случае IPizda - это dependency/зависимость/залежність):

class Sex
{
private IPizda _pizda;
public Sex(IPizda pizda)
{
_pizda = pizda;
}
}

Но, поскольку реализаций может быть много которые будут меняться во время разработки приложения (например LocalPizda - это класс тупо для теста функциональности на локальном ПК, а в будущем будет такой же класс но с более глобальным функционалом) мы не можем нормально передавать в конструктор класса Sex конкретную реализацию (всё таки всё сведется к тому что мы где-то захардкодим new LocalPizda()), так помимо всего этого в класс LocalPizda может еще прийти 100500 таких же зависимостей (которые в себе могут содержать зависимости.. и так до бесконечности).

Чтобы решить проблему ебли с new ConcreteClass(new Dependency1(), new Dependency2(new DependencyDependency1())) где присутствует конкретная реализация, что плохо, придумали такое как внедрение зависимостей. Внутри Microsoft.DependencyInjection происходит следующее: фиксируется интерфейс IPizda и его реализация LocalPizda. Из LocalPizda фиксируются все возможные конструкторы с параметрами и без. После того, как ты зарегаешь все свои зависимости с зависимостями:

IServiceCollection serviceCollection = new ServiceCollection();

serviceCollection.AddTransient<LocalPizda, IPizda>();
serviceCollection.AddTransient<LocalPizdaDependency, ILocalPizdaDependency>();

Ты можешь их сбилдить в объект:

ServiceProvider provider = serviceCollection.BuildServiceProvider();

Ты можешь сделать следующий вызов:

var localPizda = provider.GetService<IPizda>();

И теперь у тебя есть объект LocalPizda (но будет как IPizda), содержащий все нужные ему зависимости, т.е serviceProvider сам сделал конструктор и засунул туда нужные зависимости и сделал для них конструкторы с их зависимостями (ну и так вглубь до конечного результата который тебе нужен в виде IPizda), это помогает как решить new ConcreteClass(new Dependency1(), new Dependency2(new DependencyDependency1()))
689 2411274
>>411270

>в нашем случае IPizda - это dependency/зависимость/залежність


Девственникопроблемы
.png139 Кб, 793x787
690 2411408
>>411260

В общем. Я под спойлером кучу слов написал. Но пока писал - понял что на примере нагляднее.
В общем. Вот как ты будешь делать без await https://docs.microsoft.com/ru-ru/dotnet/framework/network-programming/asynchronous-server-socket-example
На картинке - как с await.
Какой код по твоему проще для понимания?
А про саму асинхронщину - таки под спойлером.

Смотри. Вот допустим, у тебя в программе был бы ровно один поток. Так вот. Ты хочешь какую-то долгую операцию выполнить. Допустим - открыть файл в миллион строк и вывести это на экран. Так вот. Поток у тебя все еще один. А значит что? А значит то, что у тебя все будет выполняться последовательно(синхронно), т.е. код дойдет до момента, когда нужно открыть файл. Заблокирует поток. Будет ждать от ОС сигнала о том, что файл есть, его можно открыть, вот тебе хендлер для работы с файлом. Дальше - ты так же синхронно начнешь данные читать/копировать, дальше ты так же синхронно будешь ждать выводить строчки из файла куда тебе там надо. И вот когда все это закончится - только тогда программа будет способна что-то еще делать.

Асинхронщина:
Ты вот так же как и раньше, хочешь работать с файлом. Миллион строк. Так вот. Поток доходит до момента, когда нужно открыть файл. Но вместо того чтобы ждать завершения - просит ос открыть файл и идет дальше делать полезные дела. Когда ос пинганет и вернет хендлер - поток узнает об этом механизмами которые придумали разработчики ОС - и можешь что-то полезное сделать, например так же асинхронно почитать из файла, и так же не блокируя поток продолжить выполнение. Благодаря этому - поток может больше полезных операций выполнить, вместо того чтобы ждать пока ос просрется, пока диск ответит и т.д.
Развивая мысль - мы можем уже сверху натянуть пулы потоков и всячески наращивать более интенсивное использование ресурсов CPU для полезных вещей, вместо того чтобы тот стоял и нихуя не делал полезного, а пользователь думал, что все зависло.

Так вот. В твоем примере - это сахарок для того чтобы ты не ебался с миллионами коллбеков, AsyncEventHandler'ами и прочей залупистикой, а мог писать как-бы синхронно.
Посмотри просто примеры как это говно на ЖС до введения async-await было. Колбек на коллбеке и коллбеком погоняет. Либо еще хуже и у тебя это вот в ООП завернуто. Там у тебя будет пиздец в духе: Хендлер на хендлере и хендлером погоняет.
Потому умные люди подумали-подумали и придумали вот такой вот сахарок.
.png139 Кб, 793x787
690 2411408
>>411260

В общем. Я под спойлером кучу слов написал. Но пока писал - понял что на примере нагляднее.
В общем. Вот как ты будешь делать без await https://docs.microsoft.com/ru-ru/dotnet/framework/network-programming/asynchronous-server-socket-example
На картинке - как с await.
Какой код по твоему проще для понимания?
А про саму асинхронщину - таки под спойлером.

Смотри. Вот допустим, у тебя в программе был бы ровно один поток. Так вот. Ты хочешь какую-то долгую операцию выполнить. Допустим - открыть файл в миллион строк и вывести это на экран. Так вот. Поток у тебя все еще один. А значит что? А значит то, что у тебя все будет выполняться последовательно(синхронно), т.е. код дойдет до момента, когда нужно открыть файл. Заблокирует поток. Будет ждать от ОС сигнала о том, что файл есть, его можно открыть, вот тебе хендлер для работы с файлом. Дальше - ты так же синхронно начнешь данные читать/копировать, дальше ты так же синхронно будешь ждать выводить строчки из файла куда тебе там надо. И вот когда все это закончится - только тогда программа будет способна что-то еще делать.

Асинхронщина:
Ты вот так же как и раньше, хочешь работать с файлом. Миллион строк. Так вот. Поток доходит до момента, когда нужно открыть файл. Но вместо того чтобы ждать завершения - просит ос открыть файл и идет дальше делать полезные дела. Когда ос пинганет и вернет хендлер - поток узнает об этом механизмами которые придумали разработчики ОС - и можешь что-то полезное сделать, например так же асинхронно почитать из файла, и так же не блокируя поток продолжить выполнение. Благодаря этому - поток может больше полезных операций выполнить, вместо того чтобы ждать пока ос просрется, пока диск ответит и т.д.
Развивая мысль - мы можем уже сверху натянуть пулы потоков и всячески наращивать более интенсивное использование ресурсов CPU для полезных вещей, вместо того чтобы тот стоял и нихуя не делал полезного, а пользователь думал, что все зависло.

Так вот. В твоем примере - это сахарок для того чтобы ты не ебался с миллионами коллбеков, AsyncEventHandler'ами и прочей залупистикой, а мог писать как-бы синхронно.
Посмотри просто примеры как это говно на ЖС до введения async-await было. Колбек на коллбеке и коллбеком погоняет. Либо еще хуже и у тебя это вот в ООП завернуто. Там у тебя будет пиздец в духе: Хендлер на хендлере и хендлером погоняет.
Потому умные люди подумали-подумали и придумали вот такой вот сахарок.
691 2411413
Нужно выполнить кучу относительно медленных запросов, по одному - слишком медленно выходит, все сразу - тоже не получится из-за количества. Причём некоторые могут вообще долго тупить, а некоторые - отвалиться, и нужно чтобы основная масса этих запросов выполнилась как можно скорее. Лучшее, что придумалось - сделать очередь и условно десяток асинхронных "воркеров", которые будут брать из очереди запросы и их выполнять. Каждый воркер берёт из очереди запрос, выполняет его, берёт следующий запрос из очереди. Или, если он слишком медленный - канцелит его, кидает в другую очередь, которая будет выполняться в конце особым образом, с более длительным ожиданием и ретраями.

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

Причём задача то звучит как вполне типичная, наверняка где-то лежит её красивое решение с простым кодом, но я чет не могу нагуглить. Хелп.
692 2411416
>>411413
Нет не лежит.
Если ты про запросы к базе - то первое что нужно было смотреть - план запроса и пробовать его сделать более быстрым(индексы-хуиндексы, снизить число циклических обходов размер запрашиваемых из базы данных, если оно не надо).
Если запросы какую-то работу выполняют - то +- как ты описал все и делают. Простого решения тут нет.
Для работы потокобезопасно с очередями у шарпа есть ConcurrentQueue.
Чтобы снаружи это выглядело более пристойно - можешь сделать свой LongRunningTask<T> который будет в очередь помимо задачи - класть семафор и после завершения задачи - отжимать его, чтобы снаружи выглядело как обычная задача с await и всем таким.
693 2411550
Взяли джуном на проект с net framework 4.5 за 45к.
694 2411555
>>411550
Взяли премидлом на проект с неткором за 2к евро.
695 2411562
>>411550
Взяли джуном на неткор за сотыгу рублей
696 2411566
>>411562
>>411555
Москвабляди?
697 2411567
>>411566
Ага
698 2411569
>>411566
Удалёнкоблядь
699 2411570
>>411550
Взяли джуном на говнолегаси на жабе за 160к.
700 2411575
Если взять 2 листа:
1 - закинуты объекты "хуй", "говно"
2 - закинуты тысяча объектов, удалены, закинуты объекты "хуй", "говно"
У них будут одинаковые хэши? А equals? А сравнение через ==?
701 2411576
>>411550
Замутил свой стартап на лохчейне, уже 2 года живу на пассивном доходе.
702 2411583
>>411575
Нет.
703 2411605
>>411260
Спокуха, щас объясню. Task - это какая-то одна асинхронная операция. Запускается она следующим образом (есть несколько способов, я напишу самый простой):
var task = Task.Run(() => Console.WriteLine("method1"));

Данная операция выполнится асинхронно, но вот когда она выполнится - хуй его знает. Чтобы получить результат таски здесь и сейчас - юзаем `await`, т.е:

await Task.Run(() => Console.WriteLine("method2"));
Слово await заставляет всех в текущей таске ждать выполнения этого метода. Теперь на примере:

public async Task Method1Async()
{
var result = await _service.SmthHuitaAsync();
}

public async Task Method2Async()
{
var result = await _service.SmthHuita2Async();
}

Теперь методы Method1Async и Method2Async можно запустить независимо друг от друга:

public void Pizdec()
{
var task1 = Method1Async();
var task2 = Method1Async();
}

Выполнение пойдет одновременно и вывод может любой:

method1
method2

ИЛИ

method2
method1

Это и есть асинхронная операция.
703 2411605
>>411260
Спокуха, щас объясню. Task - это какая-то одна асинхронная операция. Запускается она следующим образом (есть несколько способов, я напишу самый простой):
var task = Task.Run(() => Console.WriteLine("method1"));

Данная операция выполнится асинхронно, но вот когда она выполнится - хуй его знает. Чтобы получить результат таски здесь и сейчас - юзаем `await`, т.е:

await Task.Run(() => Console.WriteLine("method2"));
Слово await заставляет всех в текущей таске ждать выполнения этого метода. Теперь на примере:

public async Task Method1Async()
{
var result = await _service.SmthHuitaAsync();
}

public async Task Method2Async()
{
var result = await _service.SmthHuita2Async();
}

Теперь методы Method1Async и Method2Async можно запустить независимо друг от друга:

public void Pizdec()
{
var task1 = Method1Async();
var task2 = Method1Async();
}

Выполнение пойдет одновременно и вывод может любой:

method1
method2

ИЛИ

method2
method1

Это и есть асинхронная операция.
704 2411607
>>411605
Но ведь прога может завершиться до того как будут выведены сообщения.
705 2411608
>>411408

Никогда не смешивай Thread и Task в коде, любой новый Thread блочит любые таски, вот неплохое объяснение различия https://ru.stackoverflow.com/a/548879/422180
706 2411609
>>411607

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


Если будет какой-то краш проги критический который убьёт нахуй процесс, или выключится свет, то да, ну или если у тебя консольная программа из двух строчек кода которые я написал в методе Pizdec в конце ответа
707 2411616
>>411609
Так если основной поток отработает до того, как выполнится эта асинхронка она же и не будет выполнена?
708 2411623
>>411616

>Так если основной поток отработает до того, как выполнится эта асинхронка она же и не будет выполнена?


Ты путаешь потоки и задачи https://ru.stackoverflow.com/a/548879/422180
709 2411629
>>411550
Взял пожрать из холодильника за причитания о поиске работы.
710 2411639
>>411270
Два чая, анон, что-то примерно начинает доходить. А где по науке регистрируются все эти зависимости и билдятся в объект? В Program.cs? Олсо, как я потом вызову зависимость из другого класса, если тут тоже используется new ServiceCollection()?
711 2411641
>>411639
по науке на самом самом верху приложения в глубину контейнер не передается.

>лсо, как я потом вызову зависимость из другого класса, если тут тоже используется new ServiceCollection()?


шта?
712 2411746
>>410774
Хм, внатуре. Годнота та ещё. Надо попробовать clion дать второй шанс.
713 2411818
>>411639
Все зависимости регаются как можно ближе к стартующему приложению классу (но не рядом с Main), обычно в отдельном методе, но не обязательно.

К примеру в WPF регать можно где-то в классе App.cs, так же убрать в App.cs.xaml StartupUri для того, чтобы в классе можно было переопределить метод OnStartup, зарегать там твои зависимости и ViewModel'и поскольку зачастую вьюмоделям нужно что-то передавать в конструктор что делает невозможным еблю с кодом в xaml.

Далее делается публичное свойство в App.cs
public static ServiceProvider ServiceProvider { get; set; }

А затем делаешь всё что я описал выше (если что вот так вот объявлять MyWindow через new тоже не стоит, для этого делается класс со словарем который управляет жизненным циклом окна: биндит VW, открывает, закрывает. Для примера в принципе сойдет)

public override void OnStartup()
{
ConfigureServices();

var mainViewModel = ServiceProvider.GetService<MyViewModel>();
MyWindow w = new MyWindow(mainViewModel);
w.Show()
}

private void ConfigureServices()
{
IServiceCollection collection = new ServiceCollection()
collection.AddTransient<MyService, IMyService>();
collection.AddTransient<MainViewModel>(); //Допустим, MainViewModel зависит IMyService

ServiceProvider = collection.BuildServiceProvider();
}

Далее из любой точки программы:
var service = App.ServiceProvider.GetRequiredService<IMyService>();

В ASP.NET Core в контроллерах, а так же Razor Pages нет нужды обращаться напрямую к ServiceProvider поскольку контроллеры и странички автогенерируемы, и их конструкторы по дефолту будут заполняться нужными зависимостями, достаточно только зарегистрировать их. В NET 6 убрали класс Startup и прочее объединив в один класс:

var builder = WebApplication.CreateBuilder(args);
...
builder.Services.AddScoped<MyService, IMyService>();
713 2411818
>>411639
Все зависимости регаются как можно ближе к стартующему приложению классу (но не рядом с Main), обычно в отдельном методе, но не обязательно.

К примеру в WPF регать можно где-то в классе App.cs, так же убрать в App.cs.xaml StartupUri для того, чтобы в классе можно было переопределить метод OnStartup, зарегать там твои зависимости и ViewModel'и поскольку зачастую вьюмоделям нужно что-то передавать в конструктор что делает невозможным еблю с кодом в xaml.

Далее делается публичное свойство в App.cs
public static ServiceProvider ServiceProvider { get; set; }

А затем делаешь всё что я описал выше (если что вот так вот объявлять MyWindow через new тоже не стоит, для этого делается класс со словарем который управляет жизненным циклом окна: биндит VW, открывает, закрывает. Для примера в принципе сойдет)

public override void OnStartup()
{
ConfigureServices();

var mainViewModel = ServiceProvider.GetService<MyViewModel>();
MyWindow w = new MyWindow(mainViewModel);
w.Show()
}

private void ConfigureServices()
{
IServiceCollection collection = new ServiceCollection()
collection.AddTransient<MyService, IMyService>();
collection.AddTransient<MainViewModel>(); //Допустим, MainViewModel зависит IMyService

ServiceProvider = collection.BuildServiceProvider();
}

Далее из любой точки программы:
var service = App.ServiceProvider.GetRequiredService<IMyService>();

В ASP.NET Core в контроллерах, а так же Razor Pages нет нужды обращаться напрямую к ServiceProvider поскольку контроллеры и странички автогенерируемы, и их конструкторы по дефолту будут заполняться нужными зависимостями, достаточно только зарегистрировать их. В NET 6 убрали класс Startup и прочее объединив в один класс:

var builder = WebApplication.CreateBuilder(args);
...
builder.Services.AddScoped<MyService, IMyService>();
714 2411901
Чё-то у меня в мухосранске вообще вакансий на C# нет. Есть токо на VB одна и всё. Что у вас с вакансиями? Неужели кроме гейдева на C# ничего не наработаешь?
715 2411917
Linq боги здесь?
Есть один список результатов, в котором есть поля:
DateTime date;
int someintvalue;
Как в нем просумировать и вывести среднее int значения по днях? Например в нем может быть n экземпляров с каким-то одним днем, мне нужно вернуть одну экземпляр с этим днем и средним int значением.
716 2411928
>>411917

var zalupa = results.GroupBy(res => res.date.Day)
.Select(res => new { day = res.Key, avg = res.Average(res => res.someintvalue) })
.ToArray();

Типа того?
717 2412030
>>411901
Удалёнку ищи
718 2412105
>>411608
Где я их смешивал? Если ты про

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


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

await HandleClient() не даст работать 2+ подключениям одновременно.
720 2412285
>>412105

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


да не можеш ты блять. зайди в свою ебучую студию и запусти два потока с несколькими тасками (как с await так и без) и посмотри че будет.
721 2412362
>>411550
Вали оттуда при первой же возможности. Через год ты обнаружишь, что даже вкатун, только что выползший с курсов жидбрейнса, будет намного ценнее тебя на рынке труда.
722 2412365
>>411917
>>411928
Я ща подумал, короче я насрал.
Во первых, там создаётся анонимный тип, а не один из экземпляров юзается, во вторых, это хуйня не будет работать нормально, если у тебя больше одного месяца в результатах, тому что Day возвращает просто день в месяце. Наверн можно вывернуть как-то в res.date.ToString("dd:MM:yy"), тогда будет работать до конца века. ну или yyyy сделай.
723 2412386
>>411067

> как без вайна запустить программу с WinForms на лялехе


Никак. Попроси разраба сделать билд на Eto.Forms.
724 2412399
>>411818
Бро, тебе бы туториалы писать. Я мимокрокодилировал, прочитал и сразу всё понял.
image.png25 Кб, 1211x82
725 2412534
Анон, как правильно такие предупреждения решать?

Не игнорируя ясен пень.

Так и делать везде проверку на ноль?
726 2412568
>>412534
AppSettings?.Get("Version") ?? "Unknown";
727 2412572
>>412568
спс
728 2412576
>>412285

> await HandleClient() не даст работать 2+ подключениям одновременно.


Я знаю. Это в данном случае не ошибка, просто я проглядел что MS в старой реализации отпускают ManualResetEvent . В даном случае можно просто таску не эвейтить, ну либо async void делать.
>>412285
При чем тут таски и асинхронность, чел? По твоему таски это единственный способ сделать выполнение кода асинхронным? Ты троллишь?
Например. Методы стримов BeginRead, BeginWrite - асинхронные.
729 2412594
как же в шарпе не хватает питоновского

def foo(a, b, /, c, *, d, e)

где требование указывать параметры верно позиционно и требовать с именами указывать.
730 2412596
>>412594
Худшее, что можно было только высрать в петухоне. Теперь все срут функциями по 20 аргументов. Лучше уж передавать один объект, заполненный через initializer block.
731 2412598
>>412594

>и требовать с именами указывать.


А что если я все коллекции которые принимаю как параметр метода называю items? А у человека в методе нахуй 5 коллекций которые друг с другом ебутся во все дырки чтобы притащить в моей метод коллекцию с названием items? Лол. У меня порой если метод +- крупный то приходится ебаться с названиями чтобы они попросту не конфликтовали и были читаемы
732 2412599
>>412596

>Теперь все срут функциями по 20 аргументов.


как одно связано с другим. Кто запрещает срать функциями по 20 аргументов в шарпе? там тоже есть именованные параметры.

>>412598

>А что если я все коллекции которые принимаю как параметр метода называю items?


И? о чем ты вообще. В шарпе ЕСТЬ именованные параметры (только без требования "имя опустить нельзя").
733 2412600
>>412596

>Лучше уж передавать один объект, заполненный через initializer block.


у которого кстати НЕТ проверки на заполненность на уровне компилятора ибо required не впилили.
Ну можно заполнить через конструктор....ой, а это ж опять те же 20 полей, да без имен )
734 2412601
>>412599

>В шарпе ЕСТЬ именованные параметры


Видимо не так понял то, что ты имел в виду у пайтона, не ебу что там у него.
735 2412602
>>412601
def foo(a, b, /, c, *, d, e)

a, b - НЕЛЬЗЯ использовать с именами. только позиционно. Как следствие ты потом можешь их переименовать и ничего не сломается
d, e - использовать только с именами, что люто добавляет читабельности, ведь никто не вызовет
foo(1,2,3,4, 5)
а будет вынужден писать как
foo(1,2,3,d=4, e=5)

в шарпе тоже есть именованные аргументы позволяющие писать так
foo(1,2,3,d:4, e:5)

но это нужно иметь культуру "а вдруг кто читать будет после меня" и особо настраивать правила чистилок "не чисти эти имена гад, ну и что что их не является обязательным указывать, я их указал для читабельности", что конечно никто не делает.
736 2412604
>>412602
Надеюсь это никогда не добавят, щас бы нахуй думать над позиционированием входящих параметров и чето там запрещать. Нахуя? Нет же ни одной объективной ситуации где это могло бы быть нужным. Читаемость даст следующий код:

void Foo(int a, int b, int c, int d, int e)

а не вот этот:
def foo(a, b, /, c, , d, e)

Какие-то нахуй слэши, звёздочки, нахуя это всё?

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


Вот поэтому этот синтаксис из питона никогда не добавят, мне важнее читаемость в будущем чем какие-то ограничения на параметры
737 2412609
>>412604

>Какие-то нахуй слэши, звёздочки, нахуя это всё?


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

>Читаемость даст следующий код:


>мне важнее читаемость в будущем


я вызываю твой метод
Foo(1,2,3,4, 5)

ты потом читаешь этот код. правда сходу понятно что такое 3, а что 4? или все таки нет? )
читабельность уровня "да хз, вроде норм"

или

Foo(true, true, false, true, false)

красота же. Читаемость 10000%

А теперь следи за руками. Никто не требует указывать имена для всех параметров. Используется только для опциональных!!. И в шарпе тоже самое - используется для опциональных.

Только если опциональный параметр ничего не пропускает, то IDE предлагает убрать имена. и получается
Foo(true, true, false, true, false)
738 2412615
>>412609

>Foo(1,2,3,4, 5)


>ты потом читаешь этот код



Даже в вс коде есть инлайн подсказки для имён параметров в таких случаях. Одно расширение только что заруинило твою аргументацию
739 2412616
>>412615
На питоне пишут нормальные люди, а не шарпомакаки, которые без подсказок IDE даже хеллоуаорлд не напишут.
740 2412620
>>412615
мышью елозить - это не читабельность.
Иначе бы тогда не было претензий к var вместо явного указания типа - "а хули там, мышью навел, какая проблема"

особенно когда читаешь код в каком нибудь diff, где мыши нет.

а по аргументации вот тебе пример

public IEnumerable Product(bool a, bool b, bool c, bool simplify = false, reverse: bool = false)

простой метод, принимающий 3 обязательных параметра и пару опциональных.

и сравни читабельность
foreach ... in Product(true, false, false, true, true)

и

foreach ... in Product(true, false, false, simplify: true, reverse: true)

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

Вот только второй вариант НИКТО не напишет, потому что можно первый вариант, да и IDE задолбает просьбой превратить второе в первое.

заводить для пары опциональных параметров целый класс Options?
Так количество параметров в методе не превышает 5, что не является запахом.

и сразу - не нужно про обратную совместимость имен. поскольку любой параметр можно использовать именованно, то шарписты и щас не имеют свободы менять потом имена параметров, поскольку нет гарантии что никто не использовал имя (на деле конечно никто, но это авось, а не гарантия)
740 2412620
>>412615
мышью елозить - это не читабельность.
Иначе бы тогда не было претензий к var вместо явного указания типа - "а хули там, мышью навел, какая проблема"

особенно когда читаешь код в каком нибудь diff, где мыши нет.

а по аргументации вот тебе пример

public IEnumerable Product(bool a, bool b, bool c, bool simplify = false, reverse: bool = false)

простой метод, принимающий 3 обязательных параметра и пару опциональных.

и сравни читабельность
foreach ... in Product(true, false, false, true, true)

и

foreach ... in Product(true, false, false, simplify: true, reverse: true)

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

Вот только второй вариант НИКТО не напишет, потому что можно первый вариант, да и IDE задолбает просьбой превратить второе в первое.

заводить для пары опциональных параметров целый класс Options?
Так количество параметров в методе не превышает 5, что не является запахом.

и сразу - не нужно про обратную совместимость имен. поскольку любой параметр можно использовать именованно, то шарписты и щас не имеют свободы менять потом имена параметров, поскольку нет гарантии что никто не использовал имя (на деле конечно никто, но это авось, а не гарантия)
742 2412622
>>412621
Уж точно нормальнее шарпомакак.
16088873911800.mp4438 Кб, mp4,
320x240, 0:06
743 2412623
>>412622

>Уж точно нормальнее шарпомакак.


Прекрати пожалуйста, я не могу одеться на работу из-за тебя
744 2412624
>>412620

>мышью елозить - это не читабельность.


То есть ты даже не шаришь, о чём говоришь.
745 2412626
>>412624
прекрасно шарю. только в реальном мире код смотрят не только в IDE.
Image 1.png7 Кб, 809x228
746 2412627
>>412615
о каких подсказках ты говоришь?
вот например визуал студия 22я
747 2412628
>>412627
Как ты сделал вот эти полоски слева розовые? У тебя коммьюнити студия?
Image 2.png28 Кб, 933x476
748 2412631
>>412628
это supercharger
там много разного бесполезного говна правда.
для коммьюнити студии он фри
749 2412635
>>412627
В визуалке я хз где-то, но знаю, что там это тоже есть
подсказки.png87 Кб, 946x644
750 2412636
>>412627
Держи подсказочки.
751 2412637
>>412626
Открою секрет. diff-ы можно точно так же спокойно смотреть в IDE и у тебя там будут доступны любые расширения с подсказками и без.

А теперь давай придумай еще какой-нибудь нереалистичный способ, когда я не смогу воспользоваться IDE чтобы, посмотреть что там и где.
Image 4.png10 Кб, 1029x226
752 2412638
>>412635
есть
inline hints назыается
отключается в первую очередь из-за такой херни как на скрине

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

>>412637

> можно точно так же спокойно


ты перепутал со словом НУЖНО (в твоем случае) ибо только там мусорные инлайн хинтс или грызун
15961284194210.jpg96 Кб, 672x662
753 2412645
>>412620

>и сравни читабельность


>foreach ... in Product(true, false, false, true, true)



>foreach ... in Product(true, false, false, simplify: true, reverse: true)



Во-первых. Если это касается каких-то флагов или перечислений, то шарпе создатель функции может использовать Enum, чтобы принудить пользователя не использовать вот этот подход (false, -1). В нормальной функции у тебя будет так: (Visibility.Hide, HorizontalAlignment.Left), и пользователю не нужно все это расписывать.

Во-вторых, если это касается каких-то чисел, то я давно не припомню, чтобы я прямо в аугменты функции вписывал что-то подобное (356, 80, 45, 90). Если это не перечисления, то вписываю туда уже существующие переменные, типа (X, Y, Width, Height), которые уже говорят сами за себя. У меня возникает МАЛЕНЬКИЙ вопросик, а какого хуя питоноблядь допустила ситуации, когда она пишет это (356, 80, 45, 90), окромя каки-то быстрых тестов. Как у нее это получилось? Как у нее значения заспавнились в середине тела функции? И почему это захаркодено?

В-третьих. Да, нужно приучать себя создавать перечисления и иметь внутреннюю самоорганизацию. К сожалению, попытка языка покрывать лень пишущего, приводит к чудовищным последствиям, и джава скрипт тому пример — 60% функционала рождены только для того, чтобы осилить\исправить изначальное попустительство в сторону пользователя. И что это дает? Возвращает язык к тому, от чего он бежал, а сам юзер в итоге должен изучать дополнительные 60% информации, чтобы в итоге 24\7 быть начеку, отслеживая всякие "поднятия" и прочую хуйню, которая ни на минуту его не расслабляет и не делает его жизнь легче, хотя сам юзер мог бы приучить себя к самоорганизации и упростить себе жизнь многократно.
754 2412647
>>412638

>отключается в первую очередь из-за такой херни как на скрине


У этого вроде есть даже определение, типа телескопический эффект.
755 2412651
>>412645

>Если это не перечисления, то вписываю туда уже существующие переменные, типа (X, Y, Width, Height), которые уже говорят сами за себя



ты вообще о чем? где ты в ВЫЗОВАХ методов прописываешь имена параметров? В сигнатурах понятно что имена есть, но в В ВЫЗОВАХ ты прописываешь ТОЛЬКО ЗНАЧЕИЯ
и ситуация вида
(356, 80, 45, 90)
вполне норма, если тебя не очень высокоуровневый код, где у каждого параметра обязательно есть именованная переменная.

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

про перечисления не в тему ибо перечисления это перечисления, а флаги это флаги и опциональные параметры - это опциональные парамтры (то есть могут быть не только true/false)
Потому и плодят разные Options, а не перечисления заводят.

>>412647
да пофиг что там есть. он
а) замусоривает код (причем настолько что в итоге вырубается нах)
б) требует редактора. то есть я не могу с планшета почитать гитхаб. Мне нужно обязательно комп, обязательно клонить проект, поебаться с " у вас не установлено 100 вариантов фреймворков" и " это не грузится потому что вот вам сто ошибок" (товарищ с моно sqlite один из пруфов этого) и только потом нормально читать )
756 2412654
>>412645
то есть понятно что код должен быть самодокументируемым.
но нужно же и меру знать
если метод принимает 5 bool
то я не буду заводить 5 констант только ради того чтобы передать их в метод и были имена.

к тому же методы пишешь НЕ ТЫ
ты их ТОЛЬКО ВЫЗЫВАЕШЬ
и хотелки "а вот они должны принимать" можешь отправить разве что в спортлото

я лучше использую именованные параметры, которые использую разве что я, да и IDE с радостью их потрет при первой возможности
757 2412658
>>412651

>ты вообще о чем? где ты в ВЫЗОВАХ методов прописываешь имена параметров?


мда...
x int = 100;
y int = 200;
SetPosition(x, y);

>(356, 80, 45, 90) вполне норма, если тебя не очень высокоуровневый код


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

>про перечисления не в тему ибо перечисления это перечисления, а флаги это флаги и опциональные параметры - это опциональные парамтры


Охуенный аргумент:
— Ваша мать - шлюха
— Моя мать не в тему, потому что мать это мать, отец это отец, бабушка это бабушка.
758 2412660
>>412654

>если метод принимает 5 bool


Это уже странно.

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


Ясно.
759 2412669
>>412658

>SetPosition(x, y);


Ну ты так написал, прямо постарался (хотя я не верю что ты так пишешь), скорее так
SetPosition(x: 100, y: 200);
а 1000 людей так на написали, потому что у них нет такого правила, а у языка нет средств для этого.

>Я прямо сейчас готов растерзать таких пидорасов, которые вот так и сделали


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

>Охуенный аргумент:


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

>>412660

>Это уже странно.


абсолютно нормально. код начинает пахнуть если больше 5 параметров, а уж про типы ничего не говорит - тут как получится
760 2412682
Решарпер же все ещё лучше чем IntelliSence?
761 2412711
>>412669

>Ну ты так написал, прямо постарался


Я так и пишу, потому что так или иначе к моменту использования
нашей условной функции SetPosition, у меня уже сформируются определенный набор переменных — либо они приходят из аргументов, либо появляются по ходу. Это не я себя заставляю, так получается естественным образом. И чтобы я на самом старте юзал SetPosition(x: 100, y: 200), это один случай на миллион. Это может подходить только к примитивным структурам типа поинта или ректенгла, да и то не всегда.

>как видишь, ТАК ДЕЛАЮТ и ты вынужден это читать


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

>не все впихивается в перечисления


Не все перечисления впихиваются в перечисления? Я написал два способа передачи: перечисления и через переменную. Случай с SetPosition(x, y); — это и есть второй вариант. Напрямую значение никто не передает.

>код начинает пахнуть если больше 5 параметров


Естественно, но опять же, у тебя естественным образом должны сформироваться переменные к моменту передачи аргументов в функцию. Если это не так, то стоит задуматься, а насколько адаптивен твой код. Ты вот критикуешь сишарп, но ты даже сам не осознаешь проблему, которую ты себе создал питоном.
762 2412712
>>412596
А нахуя они это делают, флуент билдер еще не изобрели?
763 2412723
>>412596
Ему видите-ли лень писать билдер и хочется здесь и сейчас, а еще ему лень объявлять переменные, поэтому в функцию он передает прямо числа. Там терминальная стадия говнокодинга.

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

>SetPosition(x: 100, y: 200), это один случай на миллион


именно. обычно так никто не пишет, потому что IDE этому сопротивляется. обычно пишут
SetPosition(100, 200, false, true)
ты можешь сколько угодно разглагольствовать "а вот я", но я могу открыть рэндомную репку на гитхабе и найти где в функцию прямо передается true/false

И в итоге ты читаешь чужой код а там сплошное SetPosition(100, 200, false, true) и это не является захардкоженым, а деталями реализации. Все так "захардкоженность" подразумевает то потенциальное желание заменить, а это совершенно другое.

>Такие пидорасы должны страдать


но страдают не они. страдаешь ТЫ. они пишут - им норм, а заставить писать иначе ты не можешь, да и не хочешь.

> Я написал два способа передачи: перечисления и через переменную. Случай с SetPosition(x, y); — это и есть второй вариант


тогда я вообще не знаю о чем ты. покажи мне вызов ЧУЖОГО метода по своему по умному

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


софтистика какая то. какие то проблемы уже питон создает
я ВСЕГО ЛИШЬ ПРОШУ писать читаемо и все. И питон на уровне языка дает возможность ЗАПРЕТИТЬ писать вызов функции.
Ты сам жалуешься, что другие написали непонятно, но при этом запрещаешь им запретить писать непонятно
765 2412855
Запись данных на диск для обмена информацией это нормально? Просто у многих ССД и они трясутся над количеством перезаписей.
766 2412869
Возник еще тупой вопрос про DI. Вот я регаю зависимость <IPizda, Pizda>. А что делать, если у меня несколько имплементаций? Типа BritayaPizda, NebritayaPizda и они мне нужны одновременно, например в конструкторе одного класса одно, а в конструкторе другого другое?
767 2412874
>>412855
для обмена с кем?
768 2412877
>>412869
ты должен регать каждую имплементацию
<IPizda, Pizda>
<IPizda, BritayaPizda>
<IPizda, NebritayaPizda>

в итоге при резолве одного будет хз какой, а при резовле IEnumerable<IPizda> получишь список

вот так же с IHostedService происходит - там же куча имплементаций

но вообще все зависит от конкретного IoC. я говорю про мелких
769 2412881
>>412869
вернее при резолве одного должен быть последний, что очень годно, но это "должен быть", а на деле хз что в реальности в разных IoC контейнерах
770 2412889
>>412869

> и они мне нужны одновременно


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

так что ...не нужны они тебе одновременно.
771 2412918
>>412874
Между двумя приложениями. Я знаю про MemoryMapping, но мне надо передать массив стрингов.
772 2412923
Шарпоманьки, через 5 лет вы будете нахуй не нужны, аи от майков сам будет писать код, посадят только макаку таб кликать.
773 2412935
>>412923
Если даже ии может писать нормальный код, получается, язык идеальный
774 2412938
>>412923
Для кого он будет писать код через 5 лет когда через год дебилы на людях забросают друг друга ядеркой?
775 2412949
>>412918
ну это ж не единственный способ IPC
сокеты, пайпы, параметры и т.д - никто не отменял
776 2412977
>>412889

>так что ...не нужны они тебе одновременно.


А как же всякие стандартные случаи, когда например есть интерфейс IEmployee и его дефолтные имплементации типа: Stuff, Clerks, Managers и так далее? Для каждого такого класса делать отдельный интерфейс и наследовать его от IEmployee?
777 2412990
>>412923
Когда это произойдет, то твоя обрыганная джава уж тем более нахуй никому не нужна будет, клован.
778 2412991
>>412869
У тебя не должно быть моментов где тебе нужно регистрировать несколько имплементаций. Регистрируешь ты только сервисы, никаких нахуй `IEmpoyee` и прочую хуйню.
779 2413002
>>412977
Покажи код, что ты регаешь? DI облегчает жизнь только для сложных сервисов зависящих от других сервисов, доменную логику (например класс который чистит папки) зачастую не регают. Регистрируют только сервисы уровня приложения (application services). Сервисы уровня приложения вызывают уже конкретные методы доменной логики
780 2413003
>>412779

>И питон на уровне языка дает возможность ЗАПРЕТИТЬ писать вызов функции


А чем тебе C# мешает добавить private?
781 2413020
>>412977
Ну обычно IoC мыслит более фундаментальными вещами. стринги же не регистрируешь. IEmployee все таки не сервис и делать ему в контейнере нечего

Но вообще да, не хватает такой фичи у мелких. Как и в декораторы не умеет нормальные (скрутор это костыль)
782 2413026
>>413003
ты просто проустил тему, а я там похерил часть предложения воюя с формой (дебильная кнопка стикеров падла)

речь шла про запрет писать

foreach ... in Product(true, false, false, true, true)

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

foreach ... in Product(true, false, false, simplify: true, reverse: true)

что добавляет читаемости
783 2413036
>>412991
А как тогда быть с зависимостями типа IEmployee?

>>413002
Я пока консольки только пишу, написанное тобой для меня - мунспик.
784 2413040
>>413036
передавать в конструктор явно. как и другие объекты, что не являются сервисами.
785 2413044
>>413036

>А как тогда быть с зависимостями типа IEmployee?


Покажи код, все что не сервисы - передаётся руками.

>Я пока консольки только пишу, написанное тобой для меня - мунспик.


Та дропай нахуй, чем сложнее ебатория тем лучше разберешься, тем более судя по всему ты не особо понимаешь что такое эти сервисы. Захуяч какой-нибудь интернет магазин на WPF, сделай всё по канону DDD. Стековерфлоу и двач тебе если надо всё объяснит если будут проблемы.
786 2413197
>>413036

> Я пока консольки только пишу, написанное тобой для меня - мунспик.


Да просто DI нужен только чтобы самые высокоуровневые системы связать, для всякой мелочи нинужон
787 2413199
>>413026
Ну сделай паттерн билдер в чем проблема
788 2413203
>>413199
мне для каждой пары параметров билдер делать?
nick-young-confused-face-300x256-nqlyaa.jpg20 Кб, 800x450
789 2413333
>>413044

>интернет магазин


>WPF

790 2413340
>>413333

>>интернет магазин


>>WPF


Да, согласен. Под конец рабочего дня совсем расплавило мозг. Да на самом деле похуй на чем и где практиковать, везде юзается один подход но конечное говно доходит до заказчика в виде десктоп говна либо в виде сайтика, меняется тока вьюшка.
791 2413349
>>413340
А насколько мне в будущей работе вообще нужно будет уметь писать какие-то сложные консольные приложения? Спрашиваю не только про уровень джуна, но и дальше.
792 2413373
>>413333
Почему бы не сделать десктоп приложение для интернет магазина? Охуенная же идея, почему никто еще до такого не додумался? Можно включить автозапуск при старте системы и пихать рекламу в уведомления.
793 2413382
>>413373
Хотя бы потому, что поисковики не смогут такое проиндексировать, только ссылку на сайт для скачивания клиента. Ну а клиент ставить мало кто захочет, быстрее в другом магазине купить.
794 2413392
>>413349
Шанс близок к 0. Мне пригодилось консолька 1 раз когда надо было сделать мини-команды по дрочке видео-файлов с помощью fmpeg, но там настолько всё просто что ваще пиздец. олсо юзал чью-то либу под названием CliFx, так что если нужно будет дрочиться с команд-лайн задачкой то вот те в помощь полезная либа. Так же есть от майкрософтов CommandLineApplication, но она конченая и неудобная.
795 2413452
Как не впасть в гордыню, когда сравниваешь свою реализацию с чужой и твоя всем лучше, кроме разве что читаемости?
Просто пиздец у меня писька встала, когда сравнил легаси штуку со своей и внезапно оказалось - что мой код работает в 1000 раз быстрее. ТЫСЯЧА, блядь. 10 единовременных активных сессий коммуникации, против 10к. Сука. А сверху - на эти 10 сессий - старое добро жрет 4 гига оперативы, у меня на 10к - гиг. Блядь. Я просто охуеваю с себя. Как же я хорош. Мог бы дотянуться до хуя - сам себе бы отсосал.
796 2413467
>>413452
Никак, ибо на крестах ты смог бы добиться икса примерно в 1кк раз. Тебе ещё расти и расти.
797 2413474
>>413467
Та были бы менеджеры не так запуганы крестами - я бы на крестах и писал. Кек. Другое дело, что на шарпе я реализацию свою сделал за 2 месяца, а думаю с крестами бы пришлось ебаться не меньше полугода.
798 2413479
>>413474

>я реализацию свою сделал за 2 месяца, а думаю с крестами бы пришлось ебаться не меньше полугода


Ты там целый сервис переписывал что ли?
799 2413487
>>413479
Не. Коммуникационный сервер.
800 2413561
>>413487
А что коммуницирует?
801 2413563
Бля, какой пет на неткоре замутить чтобы меня потом с распростёртыми объятиями на работку взяли?
802 2413584
>>413563
Любой. Главное сделай его максимально хорошо. В идеале - это должен быть проект который можно было бы взять и начать продавать.
Ну, давай с простого. Ты можешь сделать калькулятор. Так вот. Если ты делаешь его на отъебись(в винформах накида кнопок, на каждую повесил обработчик и типа ЗБС)))) - никто не похвалит тебя и брать на работу будут только в случае, если острый дефицит кадров. А можешь сделать - заебок, чтобы и дизайн эргономичный, и код был: ВАХ, КРАСЫВА, и фичей напихать которых часто не хватает(допустим - для программисткого калькулятора часто не хватает фичи с отображением как текст, ну пиздец бесит, мне приходится лезть в гугол и смотреть, либо открывать таблицу ASCII, вот хули никто не сделает?) И при этом сделаешь это быстро(нахуй перфекционистов и прочих мутителей воды в команде, нужен здравый смысл, когда мы понимаем, что нужно сделать фичу и сделать ее нормально, а не уходим в какие-то пространные достижения идеала хуй пойми в чем) Ну и т.д.
Суть я думаю ты уловил. Чтобы тебя без реального опыта хотели с руками оторвать - нужно чтобы было видно, что ты не на отъебись и только то что тебе интересно делаешь, а как раз - способен сесть и сделать хорошо, но при этом за разумные сроки.
803 2413588
>>413584
Да ну какой калькулятор лол, я же не пусси совсем, 2 года суммарно в вебе отпахал, но на жсе. Мне нужен вариант который я за несколько вечеров на связке Рякт+С#+pg/монга/кассандра ебану, задеплою и у меня и всё что я до этого выучил по шарпу устаканится и нихуёвый такой плюсик мол вот я крутой, могу весь проект в соло тащить.
804 2413591
>>413588
Ну, тогда пили совместное редактирование документов, с разграничением прав, версионированием, чатиком и возможностью отобразить битовую строку как текст.
805 2413595
>>413591
Слишком дохуя всего для пета, хватит троллить.
806 2413597
>>413595
Это 3 недели ленивой работы для одного человека. Для пета - самое то. Разве что битовую строку как текст - может занять много времени, не зря же ее никто не хочет внедрять.
807 2413602
>>413597
Я и говорю - дохуя. Я готов выделить не более 5 дней на работу.
808 2413634
Бля. Решал сейчас задачку на литкоде. Решил, результаты в районе 30-40% по памяти и времени.
Там в одном месте foreach по string.Reverce()
По приколу заменил на for с перебором индексов от n-1 до 0 и вытаскивание чара
Результаты по времени и памяти 95%+
Ебать я охуел с этого
809 2413637
Ну и кстати: есть возможность проитерироваться форичем в обратном порядке без аллокаций?
810 2413675
>>413637
Да. Делаешь структуру-итератор которая ходит в обратном порядке
811 2413790
>>413634
>>413637
foreach в принципе не предназначен для вытаскивания чего-либо в определенном порядке. Ну т.е. это можно сделать (причем за счет самой перебираемой коллекции), но он для этого не предназначен от слова совсем.
812 2413796
>>413790
А почему тогда если я пишу перебор циклом, решарпер мне пишет "это хуйня, давай я на форич переделаю"?
изображение.png11 Кб, 458x111
813 2413832
Можно как-то сделать, чтобы подсказка от ide отображалась перед атрибутами?
814 2413982
>>409499
Да, спасибо что поправил. На сколько мне известно, контекст синхронизации сейчас по сути объявлен только в десктопе, но там ты полюбас вернешься в UI поток. Ещё он раньше был объявлен в старых версиях ASP .NET MVC, но его полностью выпилили из ASP .NET Core
815 2413984
>>411246
1. Вообще похуй. Начни с MSDI. В ASP .NET Core там один хуй будет фасад поверх контейнера. Разница будет заключаться только лишь в деталях конфигурации.

2. Какую-то хуйню ты видел. Вот этот чувак например реализовал более менее норм DI.

https://www.youtube.com/watch?v=dCkYP03lXOs
816 2414007
>>413796
ну. во первых, он не самый умный и мне бывало переписывал в нерабочую конструкцию
Во-вторых, он может видеть что у тебя List, а не Ienumerable и можно без проблем шагать от от обратного надеясь на оптимизации
но скорее первое
817 2414126
>>413796

>почему


В душе не ебу, я не пользуюсь решарпером.
Ну и опять же мой поинт был в том, что цикл foreach предназначен для перебора 'всех элементов коллекции', но он не предназначен для перебора элементов 'в определенном порядке'. Основное его назначение взять каждый элемент коллекции и выполнить тело цикла.
Ты не можешь контролировать порядок из самого цикла, т.к. это полностью на стороне перебираемой коллекции. В цикле For можешь (если есть индексатор), в foreach нет.
Возможно у тебя в решарпере стоит настройка, что он видит, что твой способ перебора в for кладет хер на порядок и предлагает переделать на вариант с foreach
818 2414149
>>414126
Вероятно суть в том, что энумерация строки гарантированно идёт 0 -> n-1
819 2414152
>>413984
Зашёл посмотреть видос по шарпу а мне зачем то политотой в уши ссут, 10/10.
820 2414170
>>413790

> foreach в принципе не предназначен для вытаскивания чего-либо в определенном порядке.


Предназначен, лол, ты чо рофлишь?
Он перебирает в таком порядке, какой IEnumerable даст
821 2414173
>>413634
Ну как бы в первом случае ты используешь LINQ метод Reverse(this IEnumerable<T>). А он в силу универсальности медленный. У тебя там как минимум одно доп выделение памяти для промежуточного буфера происходит, с копированием строки в него. А скорее всего несколько, так как String не реализует ICollection<T>, а значит нет возможности пойти по быстрому пути и выделить массив памяти нужного размера сразу, а значит он будет пересоздаваться несколько раз, конечно же с копированием из старого в новый. А без материализации в промежуточный буфер нельзя, вдруг ты туда не строку фиксированной длины передавал, а вообще какой-нибудь генератор. Плюс у тебя ещё два енумератора в куче создастся. За тем, чтобы понять какого хуя происходит следует сходить сюда: https://github.com/microsoft/referencesource/blob/master/System.Core/System/Linq/Enumerable.cs

Во втором же случае у тебя просто доступ к элементам массива по индексу, без всяких там выделений памяти, копирований и прочего.
822 2414176
>>413634
Перезапусти ещё несколько раз, там всегда разные результаты будут. На эффективность надо дрочить только на С++.

Вообще надо исходники посмотреть, во что там этот реверс оборачивается
823 2414178
>>414173
Я надеялся что у спана есть реверс, но нет. Получается для таких приколов надо самому писать экстеншен.
824 2414182
>>414176

>На эффективность надо дрочить только на С++


Потому что даже самому нишёвому стартапу похуй, будет ли запрос на ручку обрабатываться 5 секунд или 500 мс
825 2414189
>>413634
Попробуй сделать так foreach (var s in string.ToCharArray().Reverse())
826 2414217
Сколько книг, статей, примеров и видео не смотрю/читаю никто не юзает in для передачи параметров в метод. Все хуярят по значению и ни о чём не сожалеют. Вопрос - почему? Вопрос 2 - они ебанаты?
827 2414222
>>414217
in/out-параметры могли высрать только какие-то процедурные шизоиды.
828 2414229
>>414222
Допустим на второй вопрос ты ответил. Что по первому?
829 2414230
>>414217
Во-вторых, указав in, вы объявляете о намерении передать аргумент по ссылке. Аргумент, используемый с in, должен представлять расположение, на которое можно сослаться напрямую. Такие же общие правила применяются к аргументам out и ref: вы не можете использовать константы, обычные свойства или другие выражения, возвращающие значения. В противном случае пропуск in в месте вызова сообщает компилятору, что вы разрешите ему создать временную переменную для передачи с помощью ссылки на метод, доступной только для чтения. Компилятор создает временную переменную, чтобы преодолеть некоторые ограничения для аргументов....
830 2414258
>>414222
Во всём прав. out еще можно понять и это норм, но in - максимально бесполезная хуета.
831 2414264
>>414222
out нужная вещь, у того же дикшинари trygetvalue его юзает, очень удобного.

in хз
832 2414266
То есть большиство здесь внатуре кладёт свои 14 см на память и хуярит as is? Почему вы на жс пишете? Тоже самое получится, да ещё и быстрее.
833 2414269
>>414266

>Почему вы на жс не пишете?

834 2414274
>>414258
Почему бесполезная? Дает понять, что переменная передается по ссылке но не модифицируется.
835 2414278
>>414266
что не так с памятью?
836 2414279
>>414266

> кладёт свои 14 см на память


Почему ты на C++ не пишешь? То же самое получится, да ещё и быстрее.
837 2414282
>>414279

> Почему ты на C++ не пишешь?


Вакансий нет.
838 2414286
>>414279
Пишу на обоих языках. Ещё вопросы?
839 2414294
>>414182
Именно из-за этого карта лояльности в пятёрочке применяется секунд 10
840 2414296
>>414294

>Именно из-за этого карта лояльности в пятёрочке применяется секунд 10


Джвачаю. Очко горит с этих ебаных кодеров на питонах которые приложение банков пишут которые кэширует 500 мб в неделю
841 2414298
>>414294
Оркопроблемы
842 2414299
>>414298
А в Тбилиси есть кассы самообслуживания?
16076862308180.mp41,3 Мб, mp4,
380x286, 0:27
843 2414300
>>414299

>А в Тбилиси есть кассы самообслуживания?


Обосрался, ебать ты попустил этого любителя забить хуй на оптимизацию для которого нет разницы в 500 мс и 5 сек
844 2414301
>>414299
Хз, я Грузию видел только в фильме Кавказская пленница.
845 2414322
>>414286
да есть. что не так с памятью без in и суперски с in?
846 2414459
>>414170
Блять, да хули вы тупые то такие.
Еще раз. Используя foreach ты никак не можешь повлиять на порядок обработки элементов внутри самого цикла. Порядком заведует исключительно сама коллекция. Т.е. тебе сначала нужно произвести манипуляции с ней, задав порядок выдачи элементов енумератором и потом уже пихать ее в foreach.
В то время как в for ты именно, что сам определяешь этот порядок, без дополнительных манипуляций с самой коллекцией.
847 2414506
>>414459
Коллекция это коллекция. Она просто хранит.
Порядком обхода ведает итератор. Это отдельная сущность. Конечно коллекция имеет дефолтный итератор.
но coll.Reverse() выдает свой итератор ReverseIterator<TSource>

Вот только ReverseIterator<TSource> хоть и реверсит, но делает это тупо материализацией во временный буфер с очевидным перераходом памяти на ровном месте.
848 2414652
>>414459
Че ты несёшь

> Используя foreach ты никак не можешь повлиять на порядок обработки элементов внутри самого цикла.


Они идут ровно в том порядке, в каком их выдаёт енумератор

> Порядком заведует исключительно сама коллекция.


Да.

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


Ты же только что выше сказал, что порчдком заведвет сама коллекция(енумератор, который она выдаёт, в случае листа он обходит элементы с первого по последний)
849 2414904
>>414152
Да, напрягает эта хуйня порой. Но чисто по технической части контент заебатый.
850 2415007
Какой модификатор доступа будет у типа если не указывать его?
851 2415014
Qt или WPF?
852 2415030
>>415014
кот или собака?
853 2415051
Сап шарп, может кто знает как програмно шарп кодом сгенерить self-extracted .exe или мб какой-то йоба инсталлер библиотеку для этого?
Пока что я нашел:
1) https://products.aspose.com/zip/net/
Очень удобно, но гуи на ангельском, конечный юзер может не понять. Хотя на крайний случай я его таки использую.
2) https://devindeep.com/creating-a-self-extracting-executable-in-c-source-code-included/
Вроде годно, простой messagebox с текстом который можно указать. Правда он нихуя не работает. И я абсолютно не понимаю почему.
Проект сбилдили на 4.5, в майках на сайте сдк уже нету, обновил до 4.8, правда на что это может влиять я не понимаю т.к. там просто запуск консоли с параметрами путей до 7z либ и екзешников. Конечный exe выдает ошибку 7-zip что файл не найден. Да, я глобальные пути поменял.
Еще варианты?
image.png858 Кб, 1200x801
854 2415052
>>415030
Зумерище...
855 2415060
>>415051

>Сап шарп, может кто знает как програмно шарп кодом сгенерить self-extracted .exe


Гуглишь консольные команды для этого говна и делаешь утилиту которая запускается где-нибудь в фоновом режиме. Только сделай условие на текущее ОС, команды могут быть разными.
856 2415086
Можете привести пример случая, где нужно апкастить класс? Делал это только в тестовых проектах при обучении. Там есть помимо явного приведения ключевые слова as, или is, на тот случай, если приведение не получится выполнить, но у меня ещё не случалось такого. Всем спасибо, надеюсь ясно выразился.
857 2415091
>>415086
В теории тебе может пригодиться что угодно когда угодно. На практике - всё индивидуально.
858 2415100
>>415086
К примеру для оптимизации. В реализации многих linq-методов есть попытка апкастнуть IEnumerable к ICollection или IList, так как многие операции можно в таком случае выполнить эффективней (к примеру, при вызове ToArray можно сразу выделить массив нужного размера под все элементы).
859 2415104
>>415086
Ну, допустим тебе досталась сторонняя библиотека с оч странной архитектурой.
Возвращается предок. Но у наследника есть нужный тебе метод, которого нет в родителе и он тебе нужен здесь. Ты точно знаешь что вернулся экземпляр наследника. Ты берешь и апкастишь.
Ну и в таком духе штуки.
Короче, это примеры реальных кейсов. Можно плеваться, что архитектура плохая и все такое, но ты не весь код на планете пишешь, и тебе никто не даст миллион лет делать адаптеры-хуяптеры и прочее, иногда нужно просто взять и сделать вчера.
860 2415109
Почему создатели языка выбрали стрёмный с-стайл каст в качестве каста? Почему не какой-нибудь as T?
861 2415111
>>415104

>


>


>>415100
Спасибо большое , вы самые лучшие <3
862 2415116
>>415104
Блин. Я довен кажется и перепутал апкаст с даункастом(((
863 2415119
>>415052
тогда QPF очевидно
864 2415128
>>415119
Ну это уже когда даже гей-порно не вставляет.
865 2415140
>>415014
Ну а если без шуток то вопрос не имеет смысла

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

А если кросс, то выбор из Qt или WPF очевиден - кто из них кросс
866 2415215
>>415109
А что в нем стремного? Удобный каст. Разве что плюсовиков пугает.
867 2415228
>>415109
"as T" тоже есть. Только работает как dynamic_cast в плюсах
868 2415614
>>415086
Самое очевидное - рефлексия.
869 2415686
>>415140

> А если кросс


Только кросс! Всегда кросс!
>>415014

> Qt или WPF?


Ни тот ни другой.
Юзай оверлейные тулкиты, которые на винде выводят твои абстрактные окошки через ВПФ/ВинФормс, на линуксе через КТ/ГТК, на маке через маковское говно.
Например, я выбираю графический тулкит Eto.Forms.
870 2415710
>>415686

> Юзай оверлейные тулкиты, которые на винде выводят твои абстрактные окошки через ВПФ/ВинФормс, на линуксе через КТ/ГТК, на маке через маковское говно.


То есть Qt
871 2415756
>>415710
Я пробовал вкатиться в кют, но к своему стыду не обнаружил нормальных, юзабельных врапперов в шарп. Ткни носом, анончик, какой враппер ты юзаешь?
Безымянный.png11 Кб, 998x515
872 2415866
Сап, аноны, есть весьма ебанутый вопрос

Есть задача - реализовать этакий прототип хэш таблицы (возможно, используется метод цепочек)
На входе дается строка ключа навроде "farhncxs" и строка данных
Нужно создать многомерный вложенный список (в данном случае уровень вложенности 8), в котором каждая буква ключа будет является идентификатором вложенного списка, и так до последнего символа
В последнем списке будет пара ключ-строка данных
Собственно вопрос - как реализовать класс для этой таблицы
Пикча как пример, как это должно работать

Не бейте тапками, в C# только начал вкатываться
873 2415990
>>415686

>Только кросс! Всегда кросс!


сочувствую.
874 2416015
Неужели нет современной литературы по .NET на русском?
875 2416029
>>416015
Есть.
876 2416140
Для юнити шарп прям хай-эндовый нужен? Прям придется сеньером становится шарповым чтобы допустим инди поебень как неон вайт сделать?
877 2416145
>>416140
Нет, для инди-поебени шарп можно учить на отъебись, запомнил базовый синтаксис и копай API юнити. Можно вооьще не учить, там есть какое-то no-code говно для юнити.
878 2416149
>>416145
То есть я пройду Дударя без задней мысли, мне этого хватит сделать допустим бомжовый дарксоулс с аниме тянкой?
879 2416152
Короче хули бухтеть да? Пойду обмажусь вашим калом.
880 2416154
И да, спасибо. А то чет на секунду тильт словил. Игры ведь делают даже школьники, хули мне 54 летнему динозавру.
881 2416157
Оооооо у дударя курс еще под юнити. Ахуеть, вот это нахуй технологии, вот это коллективный разум.
882 2416260
>>416149
Кодить ты будешь 5 минут своего времени, все остальное это рисовать в блендере и накидывать анимации на скелет, а эта та еще ебатория. Большая часть времени уходит в модели, анимации, звуки, левел-дизайн и прочая залупня.

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

А ну тебе еще обязательно надо базово знать тригонометрию, синус/косинус и вот это вот все + вектора и простую арифметику, математики применять будешь оч много.

Тогда да, попробовать можешь.

Я когда в геймдев ударился godot, то ахуел от того скок пришлось учить, потому что в школе не учил вообще ничего, даже не знал кто такой Эйлер и как находить синус.
883 2416263
>>416260
мимо.
2022-07-2520-30-06.png1 Кб, 151x129
884 2416308
Сторонее приложение передает в функцию моей библиотеки строку. Там кракозябры (пикрил).
Текст: ;Голова.;19

Я точно знаю, что передаваемый в функцию текст на русском.
Онлайн декодер пишет, что это WINDOWS-1251.
Как это конвертнуть?
.png129 Кб, 794x781
885 2416320
>>415866
Я бы так дела. Может быть сверху какой-нибудь итератор бы намутил.
886 2416325
>>416320
наглядный пример какой треш и мазохизм эти inline hints
887 2416327
>>416325
Ну, я их обычно и не использую. Говно без задач. Просто знакомый просил показать как их включать. А я так и не выключил.
888 2416331
>>416320
А еще дикая любовь к касту через as
при том что даже студия ругается, но все равно.
889 2416333
>>416331
as - быстрее
890 2416334
>>416308
Все, нашел.
891 2416347
>>416140

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


Ты неонвайт в одно омежье ебало не вывезешь. Погугли сколько там народу участвовало в девелопе.
892 2416377
>>416260

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


Ты забыл еще матрицы и комплексные числа (особенно если в 3Д лезть)
893 2416446
Где кроме бэка и десктопа есть работа в шарпее?
894 2416458
>>416446
Да, геймдев. Разработка библиотек для самого шарпа. Можешь например добавить поддержку линукса, я тогда тебе лично буду 10% зп донатить.
895 2416460
>>416458
Добавил поддержку линукса, можешь проверять https://wiki.archlinux.org/title/.NET
Кошелёк кидать?
896 2416462
>>416460
А мауи скомпилится и запустится тоже?
897 2416465
>>416462
Вот тут хз, с гуи не работал.
898 2416481
>>416462
Не скомпилится и не запустится, из него намеренно выпилили линукс.
899 2416484
Так что потенциал MAUI не намного больше, чем у WinForms/WPF.
16076862308180.mp41,3 Мб, mp4,
380x286, 0:27
900 2416494
>>416481

>из него намеренно выпилили линукс.


Я когда это осознаю - у меня едет крыша. Вы же в курсе что там под копотом комплится в джаву просто потому что нет поддержки линукса, т.к андроид написан на базе ядра линукс?
901 2416497
>>416462

> А мауи скомпилится и запустится тоже?


Нахуя тебе переобутый в полёте хамарин? Юзай кроссплатформенные тулкиты, которые на каждой из поддерживаемых систем разворачиваются в нативную графическую подсистему, например, в линуксе в ГТК, в шынде шын32, в макоси макошное говно.
Например, из таких тулкитов есть Eto.Forms.
902 2416500
>>416497

>Eto.Forms


Зачем если есть Qt?
903 2416510
>>416500
Нет кьюта. По крайней мере я не нашел пригодного к продакшону враппера в шарп.
904 2416514
>>416510
Почему ты не выучишь кресты? Зная шарп и их ты станешь ультимативной прогерской машиной.
905 2416515
>>416500
Шарп проще и приятнее крестов, даже современных.
906 2416518
>>416514

> Почему ты не выучишь кресты?


Потому что у них омерзительные закорючки и звёздочки вместо человеческого синтаксиса. Я лучше потерплю лишние 500 тактов проца и лишние 300 Мб бинарника, чем полезу в это дерьмо. Нахуя ты крестовыблядок в шарпотред залез? Репортом по айпи уебать?
907 2416521
>>416518
Чё такой нервый? Сходи к мозгоправу, попей колёсики.
908 2416525
>>416521
Ты сходи в свой тред для начала.
909 2416526
>>416525
У меня нет треда
910 2416527
>>416526
Вот твой тред: >>2410386 (OP)
И не возвращайся.
911 2416529
>>416527
Не заводись ты так. Я одинаково хорошо пишу что на плюсах, что на шарпе, что на жсе с питоном.
912 2416531
>>416529
Больше ты не будешь писать на шарпе.
913 2416532
>>416531
Кто сказал?
914 2416535
>>416532
Бабка надвое сказала.
915 2416536
>>416532
Кто?
916 2416538
>>416535
Поосторожнее с бабкой, как бы дедлок не случился.
>>416536
Гжегож Бженчишчикевич
917 2416607
Кто-нибудь пробовал Eclipse?
918 2416629
>>416607
в шарпотреде?
919 2416721
>>416538

> Гжегож Бженчишчикевич


Gzhegozh Bzhenchischchikevich
1584775451612.mp4938 Кб, mp4,
480x360, 0:12
920 2417074
Почему джависты так не любят шарпистов? Завидуют нашему прогрессивному ЯП?
921 2417356
>>417074
Конечно. Это по сути та самая ситуация когда чед просто подошел к твоей тян рыночку, агрессивно схватил за пизду, та потекла и пошла с ним ебаться..
922 2417415
>>416629
Он поддерживает его. Единственная живая бесплатная ide
923 2417419
>>417415
Хуясе. Надо попробовать.
924 2417447
>>417415
Студия community уже не иде?
925 2417451
>>417447
Нет, не работает без интернета, т.е, например, из внутренней корпоративной сети.
926 2417455
>>417451
Да и вообще, сама идея иде с логином в аккаунт - порочна. Вот майкрософт там что-то заявлял об уходе из России. Ща возьмут и заблочат студию дистанционно. И чо теперь? Так что нет, надо искать альтернативы. В т.ч. на торрентах, хехе
927 2417456
>>417455
Ну а чо, пиратство уже наполовину легализовали
928 2417611
Когда юзаю generic math получаю невероятное удовольствие. Давно такое не испытывал. Побыстрее бы новую .NET подвезли с официальным апдейтом.
929 2417635
>>399284 (OP)
Есть TcpClient.
И есть Networkstream TcpClient.GetStream()
И вот есть метод, где обрабатывается запрос и выдаётся ответ.
Теперь, вся эта хуйня вызывается в отдельном потоке Parametrized threadStart
Дальше, есть много клиентов.
На каждого клиента - по потоку.
Вот они подключаются, отправляют запросы... И внезапно, соединения закрываются блядь.
Второй запрос если отправляется, TcpClient.GetStream() снова вызывается и какая-то хуйня получается - соединение рвётся нахуй.

Кроче, что делать с этой хуйнёй?
Надо шоб соединения были открытыми, и активными, и чтобы они держались открытыми и не выёбывались мне.
930 2417694
Бля, а доттрейса для пингвина нет что ли? И как профайлить то?
931 2417743
Взялся в качестве пета написать веб сервак. Если для гет метода всё понятно то как правильно прокидывать и обрабатывать post/put/patch/delete?
932 2417757
>>417743
Можно использовать префикс в названии метода (post/put/patch/delete), либо использовать атрибут HttPost, HttpPut и так далее.

Вот норм пример
https://www.pragimtech.com/blog/blazor/delete-in-asp.net-core-rest-api/
933 2417766
>>417694
по старинке же )
PerfCollect.
а вот дотмемори для снятия дампов есть
934 2417771
Как в злоебучем ридере смапить директорию в готовый билд? Вот есть у меня папка www, там несколько html говна, но при билде они не открываются т.к. CurrentDirectory не та.
935 2418029
Когда запускаю модальное окно в WPF, то многие события учитывают родительское окно: MouseLeave, Deactivated.

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

Как это убрать? Мне нужно закрыть окно, если пользователь кликает за его пределами.
936 2418037
>>418029
Не используй открытие окна внутри родительского окна. Используй вот такой способ открытия и закрытия окон:
https://ru.stackoverflow.com/a/727774/422180
https://ru.stackoverflow.com/a/526028/422180

Тогда ты будешь работать с окном как отдельной сущностью не связанной с другим окном.
937 2418087
>>418037
Ок, спасибо, посмотрю.
938 2418092
>>417635

> TcpClient client = new TcpClient();


> client.Connect(server, port);


> NetworkStream stream = client.GetStream();


>


> byte[] data = new byte[256];


> StringBuilder response = new StringBuilder();


>


>//запрос


> byte[] buffer = Encoding.UTF8.GetBytes("request");


> stream.Write(buffer, 0, buffer.Length);


>//ответ


> do


> {


> int bytes = stream.Read(data, 0, data.Length);


> response.Append(Encoding.UTF8.GetString(data, 0, bytes));


> }


> while (stream.DataAvailable); // пока данные есть в потоке


>


> Console.WriteLine(response.ToString());



В самом верху создаётся новый TcpClient, подключается, а потом с него берётся поток stream.
Дальше идёт запрос-ответ, в поток этот и из него.
Как повторить эту хуйню, так, чтобы ещё один запрос отправить в поток, и ответ получить из него?
Какие-то ёбанные оффсеты надо задать штоле? Как и где их задать, блядь?
Постоянно рвётся соединение, сукка.
А новый клиент для каждого пука - создавать не резон, потому что куча соединений открывается, блядь, на разных портах.
Надо одно соединение и там уже данные гонять по нему, а не хуеву кучу соединений ебучих, от которых весь инет виснет нахуй.

ПАМАГИТИ.
938 2418092
>>417635

> TcpClient client = new TcpClient();


> client.Connect(server, port);


> NetworkStream stream = client.GetStream();


>


> byte[] data = new byte[256];


> StringBuilder response = new StringBuilder();


>


>//запрос


> byte[] buffer = Encoding.UTF8.GetBytes("request");


> stream.Write(buffer, 0, buffer.Length);


>//ответ


> do


> {


> int bytes = stream.Read(data, 0, data.Length);


> response.Append(Encoding.UTF8.GetString(data, 0, bytes));


> }


> while (stream.DataAvailable); // пока данные есть в потоке


>


> Console.WriteLine(response.ToString());



В самом верху создаётся новый TcpClient, подключается, а потом с него берётся поток stream.
Дальше идёт запрос-ответ, в поток этот и из него.
Как повторить эту хуйню, так, чтобы ещё один запрос отправить в поток, и ответ получить из него?
Какие-то ёбанные оффсеты надо задать штоле? Как и где их задать, блядь?
Постоянно рвётся соединение, сукка.
А новый клиент для каждого пука - создавать не резон, потому что куча соединений открывается, блядь, на разных портах.
Надо одно соединение и там уже данные гонять по нему, а не хуеву кучу соединений ебучих, от которых весь инет виснет нахуй.

ПАМАГИТИ.
939 2418105
>>418092
отличный формат.

хуй знает, ты скинул два куска, и че то интересное, видимо, происходит между ними. че значит рвётся, какую ошибку то он кидает? там разные бывают, знаешь
940 2418118
>>418105
Ну, я просто, снова, продублировал код, где запрос и ответ
и вместо

>byte[] buffer = Encoding.UTF8.GetBytes("request");


написал вот это вот всё:

> stream.Close();


> client.Close();


> client = new TcpClient();


> client.Connect(server, port);


> stream = client.GetStream();


> response = new StringBuilder();


> buffer = Encoding.UTF8.GetBytes("request2");



Вижу два запроса и два ответа:

>REQUEST


>REQUEST2


>Запрос завершен...



А теперь думаю, как же можно выкинуть из кода всё это вот, ненужное ???

> stream.Close();


> client.Close();


> client = new TcpClient();


> client.Connect(server, port);


> stream = client.GetStream();


Чтобы не открывалось новое соединение с нового TCPClient'a, блеать?
941 2418133
>>418118
Там, походу, во втором запросе, надо как-то хитрожопо, писать в конец потока, и читать из конца потока.
Короче, надо задать оффсет какой-то, смещение, в потоке,
или что-то наподобие этого. А как это сделать - хуй знает.
А то оно читает аж пока данные есть в потоке. А потом что-то происходит, наподобие EOS (End Of Stream), после чего stream.DataAvailable становится false и софтина выпиздячивает чтение данных из цикла.

А когда открываешь

>NetworkStream stream = client.GetStream();


оно по новой хуярит чтение - с начала потока...
И как эту хуйню зарулить - хз.
LWHoL.png18 Кб, 643x353
942 2418154
Сломался диск где лежат кеш пакетов, и теперь установщик вообще не видит вижуал студию
Можно ли как-то восстановить без переустановки? Хотя даже заново установить не даёт, пишет папка уже занята
943 2418163
>>418154

> A:\


Как ты на дискету установил студию???
944 2418164
>>418163
Скрин с инета, у меня на ссд стоит остальное
945 2418228
>>418092
ServicePoint.SetTcpKeep не подходит?
946 2418388
>>418037
причем тут вообщще MVVM до закрытия окна с помощью мыши?
Проблема автора вообще никак не лежит в плоскости MVVM
даже рядом не лежит, да и за 100 км тоже не валялась.

>>418029
так просто не делай окно модальным и всего делов. Любой клик на родительское окно все равно должен закрыть - ну так лови там превиев событие и если дочеренее открыто, то закрой его
947 2418389
>>418029
А еще есть Mouse.Capture()
это позволяет ловить клики за пределами там чего то. Так закрываются попапы (например комбобоксы или меню) если кликнуть куда то еще.

Не могу сказать как это работает если больше одного окна
948 2418390
Модальное окно в WTF.
949 2418397
>>418390

> WTF


Вот на таком фреймворке я бы сделал охуенное приложение!
950 2418409
>>418029
В общем то Mouse.Capture работает, но если тебе не нужно отличать куда кликнули - на родитеьскую форму, на десктоп, на титлбар модального окна
иначе тебе придется вычислять куда был клик, что геморно
Да еще всякие там textbox любят срывать capture

потому подход с немодальным окном проще
951 2418410
>>418133
Чел, у тебя херня мутная пиздец. Ты кидаешь кусок, как ты читаешь, но я не вижу, где ты отправляешь ещё раз запрос туда. Ну и чтения со стороны сервера тоже нет. Ошибку ты не написал, то есть непонятно, кто мудачит. Короче, земля тебе пухом.
952 2418437
А что за дллка генерируется рядом с программой в net 5+?
953 2418439
>>418437
Это и есть основной код
Ты можешь запустить его без ехе
954 2418459
>>418389
>>418388
>>418409

Да мне нужно модальное, чтобы ожидать закрытия. Я уже и так сделал через обычный запуск при помощи Await, просто каждый раз есть соблазн использовать модальное окно, типа одной строкой, и каждый раз жую говна с ним.
955 2418474
>>418459

> Да мне нужно модальное, чтобы ожидать закрытия



Да, делается через await немодальное окно. Это нормально.
Я так делал когда у меня несколько немодальных форм и если одна из них откроет диалог, то остальное лочит нахер. Поэтому все через await и Preview события на "заблокированных" окнах
956 2418492
>>418459
все равно держи для примера наивную реализацию на коленке просто для понимания какое оно все го....WPF то есть

https://pastebin.com/UsEPGmg3

использовать в диалоговом окне
<Window
local:OutsideCloser.Close="True"
957 2418501
>>418459
небольшое улучшение что клик был по родительскому окну, а не абы где
https://pastebin.com/Btmxd3ad

но все еще остается вопрос клика по титлбару модального окна
(это конечно если он используется)
958 2418510
>>418492
>>418501

О, спасибо. Я сделал через бесконечный цикл и событие деактивейта.
https://pastebin.com/PQ3rqdz4

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

Какча не валидна
959 2418529
>>418510
непонятно зачем вечный цикл.

Если у тебя Task нужен, то конвертишь событие Closed в Task (с помощью TaskCompletionSource) и все.
960 2418692
>>418529
Ух ты, что-то подобное я искал.
Только не понял что значит конвертировать. Я Ж
1. создал новый экземпляр TaskCompletionSource
2. в переопределенной функции ShowDialog поставил его на Await
3. в событии Closing использовал TrySetResult.

>непонятно зачем вечный цикл.


а разве внутри TaskCompletionSource не сидит какой нибудь цикл или таймер? Как оно там бесконечно ожидает события?
Image 1.png10 Кб, 599x245
961 2418705
>>418692

>Только не понял что значит конвертировать


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

>а разве внутри TaskCompletionSource не сидит какой нибудь цикл или таймер?


нет. это такой же объект как и CancellationTokenSource. Очень простая штука. По просьбе он просто выставляет значение у таски, как CancellationTokenSource у CancellationToken

А смысл существования CancellationTokenSource и TaskCompletionSource - чтобы получатель Task или CancellationToken не могли их изменять.
Точно так же с LifetimeDefinition и Lifetime - спец объект холдер для изменения токена.

>Как оно там бесконечно ожидает события?


никто никого не ожидает. У Task есть ContinueWith (вернее для внутренних нужд там более лекговесный интерфейс, но суть та же), то есть по факту подписка на изменение состояния.
Понимаешь же как работает event в шарпе - никакой разницы нет.
962 2418709
>>418692
ты не мыслишь асинхронно.

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

Так и в тасках - ВСЕ просто подписываются на изменение состояния интересующей их таски (на звонок курьера) и по "звонку" планируют продолжение "позвонил, значит теперь можно делать это". Все эти продолжения планируются с помощью TaskScheduler (дефолтный планирует на тредпуле) на выполнение и потом перемалываются тем, кем запланировано выполнять.

await же просто сахар, где компилятор за тебя пишет многочисленные ContinueWith (на деле конечно не их,а другую более эффективную структуру, но смысл одинаковый)
963 2418768
>>418709

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


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

Правильно ли я понял, что запускается задача, смотрит на условный флаг, если он отрицательный, то программа идет дальше, перешагивая через все, что идет после await? И при каждой итерации будет заглядывать в функцию, прыгать "аля GоTo" в задачу и снова перешагивать код, пока в это задаче не будет положительного флага?

>Понимаешь же как работает event в шарпе - никакой разницы нет.


Я это понимаю так, что какая-то функция вызывает событие, которое проходит по списку подписок, которые являются ссылками на функции. Тут мне понятен механизм без циклов. Функция события просто запускает функции по ссылкам и подписчикам не нужен цикл для мониторинга.
964 2418793
>>418474
Кстати да. Как-то ещё в дельфийские времена читал критику принципа модальности. Типа, если софт слишком сложный, он может выкинуть больше одного модального окна за раз и самозалочиться.
965 2418797
>>418768
ты как то сложно выразился
но в общем - нет никакого цикла для мониторинга.
Нет никаких условных флагов

попробую упростить на котиках
синхронный метод
void Foo(){
MakingTea()
WaitForCat()
PetTheCat()
WaitForDog()
PetTheDog()
}
пока мы внутри чего то ждем, то поток зря блокируем.

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

псевдокот:

void Foo(){
MakingTea()
WaitForCat().Then(PetTheCat()).Then(WaitForDog()).Then(PetTheDog())
}

Тут MakingTea() выполняется синхронно, а WaitForCat() уже асинхронная, поэтому тот код который должен выполниться по концу WaitForCat() уходит в Then

Что такое Then?
Да это мы пишем либу, которая предоставляет метод Then, который принимает Action и когда action выполнен, то мы выполняем следующий. А пока время не настало (у нас action просто ждет), то и поток не занимаем
Как понять, когда action выполнен - заводим токен Defer, который просто токен как и CancellationToken и к нему можно подписку Subscribe сделать. и его возвращает метод Then, и Then по факту подписка на Defer предыдущего action
Так мы получаем цепочку продолжений.
Заодно делаем пул потоков, где будем выполнять эти продолжения.
Вводим сущность taskScheduler, чтобы "а пусть он планирует где выполнять, вдруг юзеру не нужно в пуле потоков, а свое что то".
переименовываем Then -> ContinuwWith, Defer -> Task
И вот мы изобрели подобие TPL

Как видишь - каждый асинхронный метод выдает объект Task, к которому можно подписаться и выполнить продолжение (который тоже выдает свой Task, к которому можно подписаться и выполнить...)
Цепочка подписок и продолжений.

async/await - сахар, что заставляет компилятор написать все продолжения за нас.

void Foo(){
MakingTea()
await WaitForCat()
PetTheCat()
await WaitForDog()
PetTheDog()
}

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

>сделать пустую асинхронную функцию,


пустая асинхронная фукнция является синхронной, потому что нигде в ней нет точек, где "я тут в ожидании и мне поток не нужен"
async это маркер, что в коде будут await и потому нужно строить стейт машину с продолжениями. Но если await нет, то и продолжений нет и все выполнится синхронно
965 2418797
>>418768
ты как то сложно выразился
но в общем - нет никакого цикла для мониторинга.
Нет никаких условных флагов

попробую упростить на котиках
синхронный метод
void Foo(){
MakingTea()
WaitForCat()
PetTheCat()
WaitForDog()
PetTheDog()
}
пока мы внутри чего то ждем, то поток зря блокируем.

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

псевдокот:

void Foo(){
MakingTea()
WaitForCat().Then(PetTheCat()).Then(WaitForDog()).Then(PetTheDog())
}

Тут MakingTea() выполняется синхронно, а WaitForCat() уже асинхронная, поэтому тот код который должен выполниться по концу WaitForCat() уходит в Then

Что такое Then?
Да это мы пишем либу, которая предоставляет метод Then, который принимает Action и когда action выполнен, то мы выполняем следующий. А пока время не настало (у нас action просто ждет), то и поток не занимаем
Как понять, когда action выполнен - заводим токен Defer, который просто токен как и CancellationToken и к нему можно подписку Subscribe сделать. и его возвращает метод Then, и Then по факту подписка на Defer предыдущего action
Так мы получаем цепочку продолжений.
Заодно делаем пул потоков, где будем выполнять эти продолжения.
Вводим сущность taskScheduler, чтобы "а пусть он планирует где выполнять, вдруг юзеру не нужно в пуле потоков, а свое что то".
переименовываем Then -> ContinuwWith, Defer -> Task
И вот мы изобрели подобие TPL

Как видишь - каждый асинхронный метод выдает объект Task, к которому можно подписаться и выполнить продолжение (который тоже выдает свой Task, к которому можно подписаться и выполнить...)
Цепочка подписок и продолжений.

async/await - сахар, что заставляет компилятор написать все продолжения за нас.

void Foo(){
MakingTea()
await WaitForCat()
PetTheCat()
await WaitForDog()
PetTheDog()
}

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

>сделать пустую асинхронную функцию,


пустая асинхронная фукнция является синхронной, потому что нигде в ней нет точек, где "я тут в ожидании и мне поток не нужен"
async это маркер, что в коде будут await и потому нужно строить стейт машину с продолжениями. Но если await нет, то и продолжений нет и все выполнится синхронно
1508465978938.png113 Кб, 1477x635
966 2418804
Хочу добавить в игру что-то вроде простого сервис локатора. Обычные иок контейнеры, внедрение через конструкторы и прочее - недоступно, потому что движок так устроен.

Хочу через статический класс Context получать ссылки на конфиги и сервисы:
Context.Resolve<StorageConfig>();
Context.Resolve<IAccountService>();
Context.Resolve<ILocalizer>();


Устанавливаться сервисы и конфиги будут через Context Installer. Я выбираю в редакторе Production, Staging или Development, и в зависимости от этого подключается нужный инсталлер.

Думаю как бы всё это организовать в плане классов/интерфейсов? Не хотел использовать связку ServiceCollection + ServiceProvider(ServiceCollection collection) по аналогии с asp.net, потому что внутри инсталлеров будут задаваться как сервисы, так и конфиги, поэтому это будет вызывать путаницу, типа:
services.AddInstance(UIConfig);
services.AddFromPrefab<IPlayerService>(playerServicePrefab);


В общем, набросал пикрелейтед, но что-то мне не нравится. Классы ContextBuilder и ContextContainer будут использоваться только внутри класса Context, а снаружи только интерфейсы IContextInstaller и IContextBuilder.
967 2418858
>>418228
Cудя по https://stackoverflow.com/questions/23752783/httpwebrequest-keepalive-vs-servicepoint-settcpkeepalive
Это для HttpWebRequest
Глядя на это https://darchuk.net/2019/01/04/c-setting-socket-keep-alive/
прописал это

>TcpClient client = new TcpClient();


>client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);


Но второй запрос всё-равно чё-то не пашет.

>>418410
Чувак, я же скинул всю инфу.

>Ты кидаешь кусок, как ты читаешь, но я не вижу, где ты отправляешь ещё раз запрос туда.


>>418092

>stream.Write(buffer, 0, buffer.Length);



>Ошибку ты не написал, то есть непонятно, кто мудачит.


Да там разные ошибки, в зависимсти от того, что закомментировать.

>Ну и чтения со стороны сервера тоже нет.


Там сервер тупо делает это

>TcpListener server = new TcpListener(localAddr, port);


>server.Start();


и дальше в бесконечном цикле

>TcpClient client = server.AcceptTcpClient();


и потом в

>using (NetworkStream stream = client.GetStream())


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

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

>System.InvalidOperationException: Операция не разрешается на неподключенных сокетах.


> в System.Net.Sockets.TcpClient.GetStream()


А клиент шлёт второй запрос, но нихуя не получает.
Там надо что-то вроде stream.Seek stream.Peek или оффсет какй-то блядь задать, походу, чтобы оно нормально читалось этот ебучий запрос.
967 2418858
>>418228
Cудя по https://stackoverflow.com/questions/23752783/httpwebrequest-keepalive-vs-servicepoint-settcpkeepalive
Это для HttpWebRequest
Глядя на это https://darchuk.net/2019/01/04/c-setting-socket-keep-alive/
прописал это

>TcpClient client = new TcpClient();


>client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);


Но второй запрос всё-равно чё-то не пашет.

>>418410
Чувак, я же скинул всю инфу.

>Ты кидаешь кусок, как ты читаешь, но я не вижу, где ты отправляешь ещё раз запрос туда.


>>418092

>stream.Write(buffer, 0, buffer.Length);



>Ошибку ты не написал, то есть непонятно, кто мудачит.


Да там разные ошибки, в зависимсти от того, что закомментировать.

>Ну и чтения со стороны сервера тоже нет.


Там сервер тупо делает это

>TcpListener server = new TcpListener(localAddr, port);


>server.Start();


и дальше в бесконечном цикле

>TcpClient client = server.AcceptTcpClient();


и потом в

>using (NetworkStream stream = client.GetStream())


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

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

>System.InvalidOperationException: Операция не разрешается на неподключенных сокетах.


> в System.Net.Sockets.TcpClient.GetStream()


А клиент шлёт второй запрос, но нихуя не получает.
Там надо что-то вроде stream.Seek stream.Peek или оффсет какй-то блядь задать, походу, чтобы оно нормально читалось этот ебучий запрос.
1599239716797.png58 Кб, 679x506
968 2418953
>>418907 (Del)
Это Unity3D. Там своя архитектура, свой подход к написанию кода. Там даже у базового объекта Object переопределены операторы сравнения, чтобы сравнение с null сделать иначе (из-за этого многие начинающие попадаются на трудноуловимые баги)
969 2418982
>>418797
Спасибо, анон за обстоятельныйое объяснение. Стало понятнее.
970 2419010
>>418982
Кстати вот это синхронное выполнение до первого await иногда портит жизнь.
Например HttpClient
await http.GetAsync тупо тормозило.
Потому что dns запрос выполняется синхронно, а на машине стоял каспер и вызывал тормоза.

Еще можешь увидеть ValueTask.
любая асинхронная операция возвращает Task (унифицированный подход), но если ты читаешь из stream, то там у тебя буфер. Ты читаешь из него по 10 байт, а он при первом запросе мог забить буфер на 80кб и далее тебе синхронно отдает из этого буфера. То есть уже при втором запросе он за данными никуда не ходит (они уже у него в буфере), но Task приходится создать на каждый такой запрос чтения. И получается много аллокаций на ровном месте. И тут на сцену выходит ValueTask - GC на него плевать, но получаешь больше копирования ибо это структура.

TaskCompletionSource полезен, когда нужно вернуть Task сейчас и вручную потом установить его состояние.
Это примитивный объект холдер. Нельзя чтобы каждый встречный поперечный мог изменить состояние Task. Поэтому Task - риоднли и заводится объект-владелец через который и можно менять.
Такой же подход и в CancellationToken, IMemoryOwner и так далее.

Ну и лишний пример для понимания. Вот у тебя класс, который в 1 выделенный поток перемалывает что-то. И у тебя есть внутренняя очередь
и есть метод
exceсutor.RunAsync(Action action, CancellationToken)
который внешний код вызывает. Но этот action может быть сотый в очереди и мы не можем его выполнить сейчас. И мы не можем блокировать в этом месте и поэтому должны вернуть Task
Вот тут нам и приходится TaskCompletionSource - мы его создаем и возвращаем его Task, а его самого кладем в очередь вместе с action и когда до action дойдет очередь и он будет выпонлен - мы воспользуемся сохраненным
TaskCompletionSource и выставим статус у Task

Так же работают и всякие AsyncQueue - для каждого входящего "await queue.GetNextItemAsync()" создается TaskCompletionSource, кладется во внутренний список `List<TaskCompletionSource> awaiters` и возвращется его Task. Как только в очереди появляется новый элемент, то берется первый TaskCompletionSource из списка awaiters и выставляется SetResult(item)

Ну и часто рядом ходит CancellationToken - тут нужно не забывать подумать про CancellationTokenSource.CreateLinkedTokenSource()
Неважно как оно выглядит
task.ContinueWith
cancellationToken.Register()
obj.MyEvent+=
подписка есть подписка и можно легко подвесить приличный граф в памяти.
вот и на моем пике >>418705 TaskCompletionSource захватывает child. Это не страшно, поскольку просто создает кольцевую ссылку, но лучше все таки так не захватывать.
970 2419010
>>418982
Кстати вот это синхронное выполнение до первого await иногда портит жизнь.
Например HttpClient
await http.GetAsync тупо тормозило.
Потому что dns запрос выполняется синхронно, а на машине стоял каспер и вызывал тормоза.

Еще можешь увидеть ValueTask.
любая асинхронная операция возвращает Task (унифицированный подход), но если ты читаешь из stream, то там у тебя буфер. Ты читаешь из него по 10 байт, а он при первом запросе мог забить буфер на 80кб и далее тебе синхронно отдает из этого буфера. То есть уже при втором запросе он за данными никуда не ходит (они уже у него в буфере), но Task приходится создать на каждый такой запрос чтения. И получается много аллокаций на ровном месте. И тут на сцену выходит ValueTask - GC на него плевать, но получаешь больше копирования ибо это структура.

TaskCompletionSource полезен, когда нужно вернуть Task сейчас и вручную потом установить его состояние.
Это примитивный объект холдер. Нельзя чтобы каждый встречный поперечный мог изменить состояние Task. Поэтому Task - риоднли и заводится объект-владелец через который и можно менять.
Такой же подход и в CancellationToken, IMemoryOwner и так далее.

Ну и лишний пример для понимания. Вот у тебя класс, который в 1 выделенный поток перемалывает что-то. И у тебя есть внутренняя очередь
и есть метод
exceсutor.RunAsync(Action action, CancellationToken)
который внешний код вызывает. Но этот action может быть сотый в очереди и мы не можем его выполнить сейчас. И мы не можем блокировать в этом месте и поэтому должны вернуть Task
Вот тут нам и приходится TaskCompletionSource - мы его создаем и возвращаем его Task, а его самого кладем в очередь вместе с action и когда до action дойдет очередь и он будет выпонлен - мы воспользуемся сохраненным
TaskCompletionSource и выставим статус у Task

Так же работают и всякие AsyncQueue - для каждого входящего "await queue.GetNextItemAsync()" создается TaskCompletionSource, кладется во внутренний список `List<TaskCompletionSource> awaiters` и возвращется его Task. Как только в очереди появляется новый элемент, то берется первый TaskCompletionSource из списка awaiters и выставляется SetResult(item)

Ну и часто рядом ходит CancellationToken - тут нужно не забывать подумать про CancellationTokenSource.CreateLinkedTokenSource()
Неважно как оно выглядит
task.ContinueWith
cancellationToken.Register()
obj.MyEvent+=
подписка есть подписка и можно легко подвесить приличный граф в памяти.
вот и на моем пике >>418705 TaskCompletionSource захватывает child. Это не страшно, поскольку просто создает кольцевую ссылку, но лучше все таки так не захватывать.
971 2419057
Как в 22 студии сделать горизонтальный скролл с шифтом? Там есть аддон для этого, но он выдает ошибку при установке
понятно, что надо использовать райдер, но на работе мы используем VS
972 2419058
>>418953
https://www.smarly.net/dependency-injection-in-net/di-containers/unity/managing-lifetime

Возможно это то, что тебе надо. Я не поверю, что в 2022 году Unity не поддерживает DI
973 2419071
>>419010
Спасибо, я сохранил весть текст. На ходу переварить сложно, пкоа не упрешься в пробелму.
974 2419159
В треде есть блейзор-зумеры?
Как на кестреле(!) завести content compression?
Проделал все отсюда: https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-6.0#compression
И по итогу только несколько блейзеровских js'ок (и то не все) с тегом content-compressed. Это норма?
На простом asp net core было: services.AddResponseCompression();
services.Configure<BrotliCompressionProviderOptions>(options => {
options.Level = CompressionLevel.SmallestSize;
});
И такой же конфиг для gzip'a.
Мне что-то не очень хочется поднимать IIS т
к. у меня мелкохуита и он по бенчмаркам а тырнете на порядок тормознутее простого кестрела без прокси оберток.
975 2419568
>>419058
1) Чувак, ты попутал.
Есть юнити как игровой движок Unity
А есть DI контейнер с таким же именем - Unity.
Это две совершенно разные вещи и у них только имя одинаковое.

2) И, кстати, этот контейнер считается устаревшим и использовать его не стоит.
Сейчас актуальны только два: родной майкросовтовский и Autofac. Про все остальное можно уже забыть.

3) В юнити (движке), вроде как народ применяет DI, но то ли там что-то специфическое, то ли народ просто свои велосипеды пишет. Как-то так.
976 2419570
>>419057
Вот это расширение попробуй:
https://github.com/drewnoakes/vs-side-scroller
У меня оно на 22-ю нормально ставится и работает.
977 2419588
>>418953

> Там даже у базового объекта Object переопределены


Object и object это разные классы.

> Там своя архитектура, свой подход к написанию кода.


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

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

>>419568

> В юнити (движке), вроде как народ применяет DI, но то ли там что-то специфическое, то ли народ просто свои велосипеды пишет. Как-то так.


Там Zenject(Extenject) юзают. Но можешь чё угожно юзать, это не принципиально, в зенжекте просто много полезного есть, что сразу работает с компонентами и объектами юнити.

>>418804
У тебя че там так много сервисов будет, чтобы такую залупу надо было городить?
Зенжект юзай тогда просто
978 2419702
Как удалить MemoryMappingFile из оперативки?
Еще не могу понят почему на считывающей стороне при первом запуске ругается, что файл с таким именем не найден, но при последюущих обращениях все норм. Причем даже когда я перезапускаю программу или ПК, больше этой ошибки не возникает.

Но ведь MemoryMappingFile не может оставаться после закрытия программы, да?
979 2419707
>>419588

>Object и object это разные классы.


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

Этож надо сидеть с линейкой и определять отклонение дуги O на несколько пикселей, чтобы понять что тебе высирает интелсенс. Больные люди.
980 2419797
>>419588

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


Проблема не столько в DI контейнере(его достаточно просто реализовать), а в переключении режимов. У меня, как и в вебе, есть три режима запуска игры: Productuion, Staging и Development. В первых двух меняются только ключи доступа к многочисленным внешним сервисам (бекенд, мультиплеер, аналитика, пуш-нотификации, реклама). В третьем используются фейковые сервисы.

Игра мобильная, но тестирую я её как на мобилках, так и на ПК. А значит мне под Mobile и Standalone уже нужен немного иной набор сервисов (MobileAccountService и StandaloneAccountService; MobileInputSystem и StandaloneInputSystem; DebugAnalyticsService на пк, а на мобилках - реальная аналитика). Из этого получается, что мне нужно 6 конфигов для запуска.

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

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

Для standalone не буду с нуля заполнять все данные. Воспользуюсь методом AddOrReplaceComponentFromNewPrefab, чтобы заменить тот же MobileAccountService на StandaloneAccountService.
981 2419819
>>419707

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


Нет, Object это класс созданный для вполнк конкретной цели, он не буквой отличается.
В юнити есть своя система сериализации, через неё работает весь контент в проекте. Для того чтобы ты мог просто взять и перетащить материал на модельку на сцене - материал должен быть Objectом и все объекты на сцене Objectы, у них там есть инстанс айди через которые оно всё работает... Название путающее, но этот класс необхожим.
При этом само собой, ты можешь делать классы, которые НЕ Object, никаких проблем.
982 2419855
>>419797
Блять, я даже половины из вышеописанного не понял. Как же мне сделоть свою игру? Эхх... Придётся программиста нанимать. Пойдёшь в мою студию? Зарплата - банка тушёнки.
983 2419879
>>419819

>Нет, Object это класс созданный для вполнк конкретной цели, он не буквой отличается.


Я понимаю, сам писал плагины для графических программ и всегда хочется назвать какой-то элемент объектом, что вводит в диссонанс с логикой .NET
Но я имел ввиду зачем назначать одинаковые имена классам, которые визуально отличаются малой и большой буквой? Ну назви ты UObject или SceneObject.

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

>Название путающее


Вот и я о чем. Разрабы пошли против шерсти. Если бы это был бейсик, то их дезориентирующая деятельность не прокатила бы.
984 2419892
>>419819
Благо они переносят весь движок на ECS, который лишён всех нынешних легаси-проблем Юнити.
985 2419909
>>419855

> Как же мне сделоть свою игру?


В какой-нибудь инди-игрушке на ПК всё это дерьмо не потребуется. А вот если ты делаешь сетевую сервисную игру на мобилки, то готовься к Аду.
986 2419999
>>419892
ECS - это всего-лишь архитектурный паттерн. Сам по себе он не решает проблем архитектуры самой юнити.
987 2420026
Как в редакторе xaml добавлять обработчик события со своим именем, чтобы среда сама добавляла нужный код в класс? Пока это работает только со стандартным именем метода, который предлагает студия.
988 2420048
Подскажите, делегаты и эвенты сейчас используются в продакшне вообще?
989 2420050
>>420026
ну просто сразу же переименуй то что создала студия и все.

>>420048
это вопрос сродни "а скажите колеса еще используются в машинах"?
990 2420060
Внутри основного окна создаю экземпляр окна (которое я даже не запускал), после чего при закрытии основного окна в режиме отладки, студия не хочет детектить закрытие приложения.
991 2420074
>>420050

>это вопрос сродни "а скажите колеса еще используются в машинах"?


Я ж не знаю что там в продакшне происходит. И видел еще видео какого-то сеньора, который пояснял, что лучше юзать MediatR для этих дел.
992 2420091
>>420074
1 на асп.нет продакшен не заканчивается.
2 и даже если асп.нет и даже если прямо прямо последнее, то насчет MediatR - его личное мнение. У MediatR есть сторонники и противники - и их больше чем сторонников. (такая же ситуация как и с DDD)
993 2420200
Аноны, есть ли в треде тестировщики-автоматизаторы на данном языке? Если есть, подскажите пожалуйста что нужно почитать. Вкатился в новую компашку из php и пишу автотесты на шарпах чисто по аналогии с пыхой. Тимлид смотрит мой код и ужасается, говорит про всякие дженерики и прочие приколы. Какую true книжку можно почитать по таким тонкостям языка?
994 2420370
>>420200
Я х.з. что ты за тесты на шарпе пишешь.
Но если это действительно какие-то автотесты, то имхо ты страдаешь хуйней, т.к. для этого есть более удобные инструменты чем шарп и то, что ты на нем напишешь.

Если же ты имеешь в виду юнит тесты. То там наоборот - чем проще и тупее тем лучше. Т.к. вся суть юнит теста - быть простым, проверять какой-то необходимый минимум функционала за раз и быть легко отлаживаемым.
Если же ты начнешь на них наворачивать какие-либо паттерны и усложнять, то заебешься потом искать где у тебя косяк в коде или самих тестах.
995 2420372
>>420048
Делегаты постоянно использую.
Евенты вообще ни разу.
996 2420654
Два объекта одного типа должны быть равны, если равны два любых поля:
public override bool Equals(A other){
//...
return this.Foo == other.Foo || this.Bar == other.Bar

Как для такого равенства сгенерировать хэш?
997 2420677
>>420372

>Евенты вообще ни разу.


веб?
998 2420791
>>420074

> лучше юзать MediatR для этих дел


У меня вообще такое ощущения, что properties и events в C# - это жуткий костыль от которого надо избавляться. Проперти претворяются обычными полями и скрывают внутри себя логику, которая может приводить к неблагоприятным последствиям. Ивенты создают много проблем с утечкой памяти, нужно постоянно отслеживать привязки.
999 2420801
>>420791
у тебя неправильные ощущения. Конечно event в своем реализации не самая удачная реализация паттерна Observer, но PubSub инвертирует не только недостатки, но и достоинства первого. Получив плюшки, теряешь...другие плюшки. Идеала нет.

MediatR (так паттерн требует)
достоинство - скрывает компонент который обработает запрос
недостаток - скрывает компонент который обработает запрос

Более того, MediatR усиливает это достоинство(а может недостаток) тем, что базируется по дефолту на IoC

MediatR не первая и не уникальная реализация паттерна, Просто очередная с предсказуемым результатом - а хороший он или плохой - фломастеры

Про свойства вообще бред. Тут даже нечего обсуждать. Они были введены в язык потому что тупо нужны. И в тех языках, где их нет, тупо пилят свои кастомные getProp()/setProp() и плачут.

А скрыть логику можно и в явном методе setProp() - как будто вызывающему коду вообще есть разница.
1000 2420820
>>420801

> Про свойства вообще бред


БОЛЬШАЯ проблема свойств том, что ты не знаешь, как работать с конкретным свойством: как с полем или как с методом? Свойство при каждом обращении может выделять память. Свойство при каждом обращении может совершать относительно тяжёлую операцию, например, по поиску. И тебе в каждом случае приходится смотреть исходный код свойства, чтобы понять - я должен кэшировать значение?
1001 2420832
>>420820

>что ты не знаешь, как работать с конкретным свойством: как с полем или как с методом?


А ты и не должен это знать.

>Свойство при каждом обращении может совершать относительно тяжёлую операцию


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

Будь это метод... и что? как то, что это метод дает знание нужно кешировать или нет? А никак. Ты запустишь - увидишь тормоза...и закешируешь.

а если нет разницы, то зачем херить нужный механизм только потому, что его некоторые люди идиотски применияют. Попробуй сделать без свойств private set поле и сразу же свойства захочешь.
1002 2420836
>>420832

> только потому, что его некоторые люди идиотски применияют


Вот эта неоднозначность напрягает. Я сейчас больше в геймдеве работаю. И есть примеры ебанутого использования свойств. Допустим, есть свойство MainCamera, которое даёт ссылку на основную камеру игровой сцены. Казалось бы всё охуенно, красиво, удобно. Открываешь исходник свойства, а там блять при каждом обращении происходит обход всех объектов сцены и поиск тега "maincamera". Ну, добавь ты метод FindMainCamera(), тогда всё будет очевидно и понятно любому дураку. Нет, блять, хочу свойства, это же сишарп, если есть свойства, надо использовать. Такие моменты часто встречаются.
1003 2420855
>>420836
Нахуевертить можно всегда. Можно и в конструктор запихать сетевую логику, но это не повод отказываться от конструкторов.
1004 2420901
CLR via C# стоит читать? Там полезное есть что?
sage 1005 2420982
Пишу новую шапку, а то старая просто говнище ебаное которое никто не читает. Рейт

https://pastebin.com/HT7Hi6FD
1006 2420990
>>420982

> 4. С# для игр


> Unity-тред в /gd/


Юнити одна из сильнейших сторон современного C#, а ты так невзрачно об этом написал? Можно делать игры и в два клика билдить их на множество платформ. Это же бомба.
1007 2420994
>>420990
Геймдеву вообще не место в /pr/.
sage 1008 2420997
>>420990
Про геймдев есть отдельный тред на отдельной доске. Юнити это рыгня которую делали не майки, поэтому похуй. Тот кто хочет в игры найдет либо анриал енжин или юнити.
1009 2420999
>>420997
С таким быдло-подходом тебе точно не стоит кого-то там наставлять через шапки.
sage 1010 2421003
>>420999
У нас в текущей шапке тоже самое. Я не стал менять поскольку никак не отношусь к геймдеву. Можешь написать сюда что считаешь нужным, а я добавлю
1011 2421023
>>420370
В моей компании пишут автотесты на C#. И за это так называемое, страдание хуйней, мне платят деньги.
1012 2421089
>>420677
Да. Бэк.
1013 2421156
static readonly
или
readonly static
1014 2421162
>>421156
static consteval
1015 2421288
>>421162
мне кажется, ты тредом ошибся
1016 2421345
>>421288
Тебе кажется
1017 2421347
>>421345
Ты тредом ошибся.
1018 2421355
>>421347
Программирование - это не синтаксис языка
1019 2421362
>>421355
Тред про шарп, а не про программирование.
изображение.png9 Кб, 708x112
1021 2421487
Читаю сейчас троелсена и наткнулся на данный момент. Разве в блоке using нужно самому закрывать файловый поток? Он сам не закроется?
1022 2421574
Есть базовый класс Base со свойством Visability.
Этот класс наследуют еще два класса BaseExtendA и BaseExtendB, в одном из которых переопределено свойство Visability.

Так вот вопрос, как мне универсально обратиться к свойству Visability наследников? Если я буду обращаться к объектам через каст Base, то не сработает переопределившееся свойство.
Я делал через Object и технически работает, но может есть какой-то более элегантный способ?
1023 2421579
>>421487
Конечно закроется
1024 2421582
>>421574

> то не сработает переопределившееся свойство


Почему ты так в этом уверен? Может проверишь в тестовом консольном проекте?
1025 2421597
>>421574

>Если я буду обращаться к объектам через каст Base, то не сработает переопределившееся свойство.



а? откуда ты это взял
1026 2421600
>>421574
Я ща покумекал. Короче, если ты "переопределяешь" методы через new в наследниках, то это не переопределение, а сокрытие. И сокрытие так ебано работает, да. Тебе нужно override метода сделать, в этом вся суть полиморфизма так то. Почитай про виртуальные методы, переопределение и прочее, это база
1027 2421628
>>421582
>>421597
>>421600
Ах, оказывается я неправильно изъяснился. Я через сокрытие Shadows делал.

>Тебе нужно override метода сделать


А тогда можно обращаться к базовому свойству? У меня там суть такая, что выполняется логика базового свойства, плюс еще кое что. Я чет боюсь оверрайд использовать, какой-то он грозный.
1028 2421643
>>421628
Не бойся, вся суть ооп в этом.

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

Какой именно синтаксис у свойств я не помню, но их тоже можно переопределять, тому что это по факту поле плюс пара методов.

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

Лучше почитай обо всём этом, это прямо самая-самая база, ты как-то рано полез штуки писать, раз в итоге начал заниматься вуду магией с сокрытием. На msdn есть всё, что тебе нужно знать.
1029 2421646
>>417635
Короче. Я бы как-то так сделал...
1030 2421753
>>421646
Мне больно видеть, что ты не определился: использовать ли тебе var или использовать new(). Из-за этого получилась каша. Лично я решил использовать new() только для инициализации полей/свойств класса.
1031 2421769
>>421753
Ну да.
Сам-то я как-бы того же подхода хочу придерживаться, что и ты, но чисто механически так выходит.
Такая же фигня и с is not null. Типа я как-бы понимаю что этот вариант предпочтительнее, но иногда хреначу != null по старой памяти.

Все из-за отсутствия кодревью на работке. И нежелания настроить code-style чтобы оно просто не собиралось в случае отхода от стайлгайдов(((
1032 2421771
>>421769
А, ну и в довесок от того, что на работке нужно то на си, то на плюсах, то на жаве писать, то на ЖС, это тоже немного выбивает.
1033 2421773
>>421769

> Такая же фигня и с is not null. Типа я как-бы понимаю что этот вариант предпочтительнее, но иногда хреначу != null по старой памяти.


Ага, есть такая проблемка.
1034 2421814
>>421487
C# provides a special "using" statement to call Dispose method explicitly.
1035 2421831
>>421487
Блок using - по факту, это что-то типа такого:

IDisposable obj = GetSomeIDisposable ();
try{
...логика
}
finaly{
obj.Dispose();
}

Все. Закроется поток или нет - зависит от того реализовали ли в Dispose - его закрытие.
image.png19 Кб, 786x407
1036 2422196
Когда мы по линкью запросу форичем проходимася - какую сложность по памяти получаем? Например, для кода на пике у нас память будет для всего запроса сразу выделяться, или оно просто пройдет и все действия одно за одним выполнит, не выделяя одноразово память под всю коллекцию?
1037 2422201
>>422196
выделится память на создание цепочки итераторов
далее для каждого итератора будет MoveNext
Если нет действий, где нужна материализация коллекции, то память расти не будет.
1038 2422213
>>422201
Чего-то я тебя не совсем понял - если выделится память на создание всей цепочки итератора - то как она расти не будет?
1039 2422227
>>422213
твоя сложная from ...where просто сахарная форма эквиалентного кода
scores.Where().Select()

каждый этот метод Where/Select просто получает IEnumerable, создает итератор и возвращает его как свой IEnumerable, то есть просто наращивая цепочку.

Так на этапе определения LINQ запроса память расходуется на создание всех этих итераторов и все.

До момента запуска это просто цепочка итераторов. После запуска память будет расти пропорционально необходимости материализации.
В твоем запросе вырастет чуть чуть даже если ты скормишь этому запросу бесконечный источник. Но стоит тебе добавить Distinct() и получишь атата
.png48 Кб, 755x554
1040 2422281
>>422196
Линку - в общем случае - ленивый.
Но ты сам мог посмотреть как это работает.
1041 2422286
>>399284 (OP)
Как реализовать хранение хэш-таблицы (key-value) так,
чтобы она могла вместить BigData?
1042 2422288
>>422286
Чем тебе Dictionary не подходит?
1043 2422293
>>422286
Взять готовую СУБД, либо посмотреть, как в них это реализовано и запилить свой велосипед.
1044 2422385
>>422288
Там 2 лярда строчек всего можно запхнуть.
>>422293
Ну так хоть бы каких-то слов ключевых накидал, для поиска опернсорцных субд на шарпеге.

Пока вот что https://github.com/username1565/KeyValue/tree/SimpleTXTStorage но дохуя инфы туда не полезет.
1045 2422410
>>422385

> Там 2 лярда строчек всего можно запхнуть.


А ты собираешься такую здоровую хеш-таблицу в оперативной памяти держать?
Совсем бака?

Я просто к тому, что это вопрос не про шарп.
Почитай Introduction to Database Systems, пойми, что ты охуеешь это все нормально на про уровне реализовывать и бери СУБД под свои нужды. Попробуешь какую-нибудь монгу, поймешь что говно, возьмешь нормальную реляционную СУБД, например Postgres и будешь с ней как человек работать.
1046 2422422
>>422410

>> Там 2 лярда строчек всего можно запхнуть.


>А ты собираешься такую здоровую хеш-таблицу в оперативной памяти держать?


>Совсем бака?


Ну если там value порядка Int32.MaxValue, то лучше просто ключи хранить в оперативке, а сами значения - на диске пусть лежат, и обращаться к нему по мере необходимости, кэшируя небольшие но частно-используемые values.

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

>Я просто к тому, что это вопрос не про шарп.


Ну как не про шарп, на шарпеге же вся хуйня.

>Почитай Introduction to Database Systems


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

>пойми, что ты охуеешь это все нормально на про уровне реализовывать


Как-то по непонятному пишешь.

>и бери СУБД под свои нужды


Так а какую - ты так и не сказал. Какая там на шарпеге есть, чтоб была - для BigData?

>Попробуешь какую-нибудь монгу, поймешь что говно, возьмешь нормальную реляционную СУБД, например Postgres и будешь с ней как человек работать.



>монгу


Так она на сях, плюсах, и жаваскрипте.

>Postgres


И эта на CLang'e, как мне этот шланг в шарпег потом припердолить?
К тому же там размер таблицы ограничен 32 терабайтами. https://ru.wikipedia.org/wiki/PostgreSQL#Поддержка_стандартов,_возможности,_особенности
А что если там петабайтная хэш-таблица будет?

Тащемта у меня задача довольно простая. Раздать DHT между пирами, в децентрализованной сети:
https://github.com/username1565/nanoboard/issues/21#issuecomment-1200594467
А чтобы её раздать, эту DHT, надо для начала заебенить норм HT (HashTable), и её уже потом раздавать, чтобы была DHT (Distributed Hash Table). И всё это говно ещё опенсорцное, и ещё и на шарпеге. Понял, да?
1046 2422422
>>422410

>> Там 2 лярда строчек всего можно запхнуть.


>А ты собираешься такую здоровую хеш-таблицу в оперативной памяти держать?


>Совсем бака?


Ну если там value порядка Int32.MaxValue, то лучше просто ключи хранить в оперативке, а сами значения - на диске пусть лежат, и обращаться к нему по мере необходимости, кэшируя небольшие но частно-используемые values.

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

>Я просто к тому, что это вопрос не про шарп.


Ну как не про шарп, на шарпеге же вся хуйня.

>Почитай Introduction to Database Systems


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

>пойми, что ты охуеешь это все нормально на про уровне реализовывать


Как-то по непонятному пишешь.

>и бери СУБД под свои нужды


Так а какую - ты так и не сказал. Какая там на шарпеге есть, чтоб была - для BigData?

>Попробуешь какую-нибудь монгу, поймешь что говно, возьмешь нормальную реляционную СУБД, например Postgres и будешь с ней как человек работать.



>монгу


Так она на сях, плюсах, и жаваскрипте.

>Postgres


И эта на CLang'e, как мне этот шланг в шарпег потом припердолить?
К тому же там размер таблицы ограничен 32 терабайтами. https://ru.wikipedia.org/wiki/PostgreSQL#Поддержка_стандартов,_возможности,_особенности
А что если там петабайтная хэш-таблица будет?

Тащемта у меня задача довольно простая. Раздать DHT между пирами, в децентрализованной сети:
https://github.com/username1565/nanoboard/issues/21#issuecomment-1200594467
А чтобы её раздать, эту DHT, надо для начала заебенить норм HT (HashTable), и её уже потом раздавать, чтобы была DHT (Distributed Hash Table). И всё это говно ещё опенсорцное, и ещё и на шарпеге. Понял, да?
1047 2422541
>>422422
А? Для любой популярной и мало мальски известной субд есть либа на шарпе. Не говоря уже о монге и постегресе
1048 2422594
>>422541
Ох уж эти бигдата бд типа монги )

ну так то в любую бд можно загрузить много данных
даже в sqlite даже можно загрузить 281 ТБ (а еще можно сделать attach таких же 125 баз)

Вот только как быстро это будет работать )))
1049 2422618
>>422594
Я не о том, что их стоит юзать. Чел просто почему-то думает, что нет провайдеров на шарпе для этих субд.
1050 2422634
>>422594
>>422618
Оки-доки. Давайте причины, почему тот же PG/MSSql не юзать для бигдаты и что юзать.
1051 2422637
>>422634
А я то че, Я вообще не шарю, че для бигдаты юзать. Чел просто неправду написал, и я доебался
1052 2422649
>>422637
Реляционки и юзать. Просто есть некоторые дополнительные сложности связанные с масштабированием. Приходится применять вуду-магию с шардингами, репликациями, вынесением баз на отдельные физические сервера, оптимизацией запросов и работы с индексами, и т.д. Но это как-бы закономерный этап развития. На нем обычно приходит лысенький худой чел в очках в команду, с какой-нибудь профессорской степенью, смотрит на все это дело, морщит брови, и постепенно приводит вашу структуру к пригодной для того чтобы с этой самой бигдатой работать, а вам - приходится обижаться, что вот, теперь оказывается база данных не просто хранилище в которое ты серишь без разбора.
1053 2422652
>>422649
Моя удача, что я хуйню пишу, а не нормальные приложения
1054 2422676
Некая программа использует мою библиотеку, написанную на net и мимикрирующую под native library с точками экспорта. Так вот, эта программа сперва выделяет memory block и передает переменную в функцию моей либы.
Там меняется значение, после чего прога снова обращается к memory block и получает новые данные.

В принципе работает и так:
public static float ChangeData(ref float data))
{
data = 287;
return 0;
}


Но потом меня черт дернул использовать маршалинг:
public static float ChangeData(IntPtr data)
{

float M;
M = Marshal.PtrToStructure<float>(data);
Interaction.MsgBox($"Полученное значение: {M}");

M = 287;
Marshal.StructureToPtr(M, data, false);
Interaction.MsgBox($"Новое значение: {M}");

return 0;
}


Короче вопрос, а оно того стоит? Программа думает, что моя либа написана на C.
Экспортировал функции по этой инструкции: https://habr.com/ru/post/137300/
Не будет ли чего недоброго, если я буду использовать первый вариант?
1054 2422676
Некая программа использует мою библиотеку, написанную на net и мимикрирующую под native library с точками экспорта. Так вот, эта программа сперва выделяет memory block и передает переменную в функцию моей либы.
Там меняется значение, после чего прога снова обращается к memory block и получает новые данные.

В принципе работает и так:
public static float ChangeData(ref float data))
{
data = 287;
return 0;
}


Но потом меня черт дернул использовать маршалинг:
public static float ChangeData(IntPtr data)
{

float M;
M = Marshal.PtrToStructure<float>(data);
Interaction.MsgBox($"Полученное значение: {M}");

M = 287;
Marshal.StructureToPtr(M, data, false);
Interaction.MsgBox($"Новое значение: {M}");

return 0;
}


Короче вопрос, а оно того стоит? Программа думает, что моя либа написана на C.
Экспортировал функции по этой инструкции: https://habr.com/ru/post/137300/
Не будет ли чего недоброго, если я буду использовать первый вариант?
1055 2422690
>>422676
Чем тебе этот пример не понравился?
https://github.com/dotnet/corert/tree/master/samples/NativeLibrary
1056 2422707
>>422690
Я пытался юзать unmanagedexports но там как оказалось с кодировкой не дружит. Надо шиндовс переключать в англ регион.
Потом еще пару говен перелопатил и вы итоге свою тулзу написал.

Эту вроде не пробовал, спасибо.
1057 2422712
>>422690
Судя по семплам, там тоже используют IntPtr.
Хотя для стрингов у меня получалось использовать StringBuilder, тоже меняет значение по ссылке.
1058 2422865
Посоны, можете скинуть ссылку на сайт, который показывает, что компилятор делает, когда убирает весь этот синтаксический сахар в коде и показывает всякие метаданные
1059 2422869
>>422865
Нет такого сайта.
1060 2422870
>>422869
Есть, я нашел, SharpLab, соррян за тупое описание, лол
1061 2422895
Почему для реализации элементарного свойства зависимости на wpf надо написать хуеву тучу строк кода?
1062 2422899
>>422895
Потому что WTF - говно.
1063 2422906
>>422895
да прямо таки много
ВСЕ НУЖНОЕ
само определение свойства + явный геттер и сеттер для текущего контрола.
1064 2422972
Вопрос немного не про шарп, а архитектуру.

Вот допустим, я - дебил, хочу что-то делать без фреймворков и движков. В целях обучения.
Допустим это должна будет быть игра. Рогалик именно что классического толка.
Ну так вот.
Я внезапно осознал, что не могу придумать архитектуру того как оно должно быть правильно.
Типа, вот я делаю класс Game. Классический GameLoop: Update, Draw;
Вот я решаю, что нужно добавить абстракцию: Scene и в нее запихнуть эти Update, Draw, чтобы можно было менюшки там делать, лоад-скрины и прочее
Вот я ввожу SceneManager чтобы можно было просто получить доступ к сцене и GameLoop преобразуется в SceneManager.Current.Update, SceneManager.Current.Draw
Вот я понимаю, что нужно будет делать сцену для игры и новая абстракция: Level, который та же сцена, но только теперь это уровень, с картой и всем таким. Можно конечно было бы эти уровни наследовать от GameScene, но мне кажется это неправильно, думаю лучше будет GameScene чтобы в себе хранил ссылку на текущий Level и переключал их по необходимости.
Так вот. Чтобы между левелами хранить состояние игрока - я придумал GameContext, там инвентарь, хп, уровень, позиция на текущем уровне.

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

В общем. Может быть есть какая-то литература где рассматривается создание игры на примере какой-нибудь консольной рпг, чтобы там были эти всякие эффекты, объекты, инвентари рассмотрены и прочее?
1065 2422982
Помидоры поясните.
Вот приходит ко мне json, я его в объект кладу. Потом мне нужно этот объект превратить в объект другого класса.
Ну я просто создал класс в нем метод типо UserConvert ну и типо в него пихаю один объект и на выходе получаю другой.
Это правильный подход?
Ну вроде все норм, но меня не покидает чувство что за такое могут и обосцать.
1066 2422990
>>422982
По хорошему - стоило бы сделать что-то типа:
interface IMapper<TIn, TOut>
{
TOut Map(Tin @in);
}

На деле - в принципе можно и так, особенно если у тебя какие-то приватные поля используются. Просто засерать такой вот фигней класс - ну такое. У тебя со временем может миллион классов появиться, к которым ты мапить должен, и все это будет вот там и ты уже хуй разберешься.
1067 2423022
>>422982
Если работаешь по DDD, то в принципе норм.
В других случаях лучше выносить все это в экстеншены, чтобы не засирать класс, либо юзать автомаппер.
1068 2423032
ПЕРЕКАТ
>>2423030 (OP)
1070 2423200
>>422541

>А? Для любой популярной и мало мальски известной субд есть либа на шарпе. Не говоря уже о монге и постегресе


>>422618

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


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

>>422594

>даже в sqlite даже можно загрузить 281 ТБ (а еще можно сделать attach таких же 125 баз)


Эксабайт не потянет, вроде.

Пока, у меня, какие-то вот такие размышления:
https://github.com/username1565/KeyValue/issues/1
Эксабайт вроде должен поместиться, если почикать на части всю ебанину, как в торрентах.

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

>Вот только как быстро это будет работать )))


А вот об этом я не подумал. Может прикрутить туда какой-нибудь lock и MultiThreading?
sage 1071 2423225
ПЕРЕКАТ
>>2423030 (OP) (OP)
sage 1072 2423226
ПЕРЕКАТ
>>2423030 (OP) (OP) (OP)
1073 2426855
Почему этот код из троеллсена крашит конструктор wpf?
image.png255 Кб, 577x729
1074 2427515
>>399284 (OP)
Господа, можете посоветовать что-то похожее на пикрил? Тут ее неоднократно хвалили и говорили, что после ее полного прочтения можно смело идти в джуны. Но к сожалению, мне не хватает английского, чтобы свободно ее читать и это весьма сомнительное удовольствие по полчаса переводить каждую страницу, тем более после начала ООП.
1075 2427549
>>427515
Мне книга Троелсона зашла в свое время . Пишет легко и доступно объясняет . Не сказал бы ,чтобы уж очень глубоко ,но достатоно для того, чтобы вникнуть
1076 2427745
Аноны, объясните плс одну вещь. Я попробовал посмотреть гайды на ютубе, но это только сильнее запутало. Есть стек, есть куча. В одном храняться значимые типы, во-втором ссылочные. Во-первых, нахуя это разделение нужно и на что это влияет при работе?
Так же не понял этого дроча со значимыми и ссылочными типами: допустим, есть у меня две переменные инт со значением 10. Получается, у меня в памяти существуют два независимых числа 10?
Если тип ссылочный, например, два стринга со значением "Hello". Это значит, что "Hello" существует только в одном экземпляре? А если я этот стринг решу запихнуть в метод аргументом и изменить его там? Я получу на выходе совершенно другую переменную? Или что?И опять таки - нахуй оно нужоно?
1077 2427846
Здрасьте, давно не пользовался этим вашим дотнетом. С какой версии можно юзать всякие Console, LinkedList и тд без using?
1078 2427850
ПЕРЕКАТ >>2423030 (OP)
ПЕРЕКАТ >>2423030 (OP)
ПЕРЕКАТ >>2423030 (OP)
ПЕРЕКАТ >>2423030 (OP)

Ебаная моча, ты хули тред не закрепишь?
1079 2429110
>>400464
Я правильно понимаю, что внедрение зависимостей - это один из способов достижения инверсии?
1080 2429531
1.PNG50 Кб, 583x636
1081 2430351
Всем привет. У меня имеется интерфейс, который имеет в себе protected метод Move(). Я этот метод реализую в классе Car, после я наследую класс Car. Как мне вызвать protected метод IMove.Move() в классе наследнике? Можно ли вообще так делать? Пожалуйста, объясните.
1082 2430370
>>430351
И вообще в чём прикол? Protected метод из интерфейса становиться private методом в классе Car, при этом еще хуй знает как его вызвать в классе наследнике
1083 2430451
Ахахахахаха всего джва треда, да и то дохлые. Шарписты, а почему вы такие говноеды, ваше мнение?
мимо Великий Java - господин
image.png23 Кб, 442x255
1084 2430548
И ещё один вопрос, почему я могу реализовать метод, который в интерфейсе protected через модификатор public?
1085 2430698
при откладке проекта с блейзер компонент "статический", не срабатывают функции на onInput и onChange в текстовых полях.
в чем может быть проблема?
уже переустановил студию и виндовс
1086 2430754
>>430698
Тред перекатился
1087 2431208
Emgu CV может распознать движения на видео?
Мне нужно в 50 часах видео найти движение одного обьекта.
1088 2432263
Актуальна ли на данный момент книга CLR VIA C# ? Почитываю Албахари , он достаточно глубоко описывает синтаксис на современном стандарте , или Рихтер неизменная классика ?
1089 2432808
Увидел в одном из паттернов такую схему, есть два new Cl1(); и new Cl2();

Вот из подвели под один тип TypeOfCl cl и обращаются к ним.
Как это называется?
class Cl3{ Cl3(TypeOfCl cl) {} }
1090 2433106
>>399284 (OP)

>System.InvalidCastException: Заданное приведение является недопустимым.


Как изгнать это ебучее приведение, которое вселилось в мой грёбанный код?
1091 2433141
Мне нужно написать программулину для работы в консоли Линукса. Программа проста до безумия: открыть файл с картинкой в стандартном формате, отресайзить его и, допустим, скопировать поверх другого Canvas'а.

GDI под прыщами не работает. Microsoft официально предлагает три стула https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only#recommended-action
- https://github.com/dotnet/Microsoft.Maui.Graphics
- https://github.com/SixLabors/ImageSharp
- https://github.com/mono/SkiaSharp

Приложение будет написано с нуля заковано в docker-контейнер, поэтому версия .Net абсолютно не важна. Какой из трёх стульев выбрать?
Сам склоняюсь в Мауи, как к официальному решению от самого Майкрософт. Нужен ли Мауи доступ к видеокарте (её не будет в доккер-контейнере, тем более на прыще-сервере без физической видухи)? Что с остальными двумя?
1092 2486576
>>433106
Надо код показать было
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 14 октября 2022 года.

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

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