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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
1677065411727363.png116 Кб, 1024x1024
2 2621960
>>21949 (OP)
Смысл этого тредиса? Никто не использует дотнет. Все новые цифровые проекты пишутся на джавовском спринг буте или голанге. К заводчанам, пишущим системы автоматизации под виндовсы, вопросов нет
3 2621961
Давайте обсудим невозможность мультивыбора в TreeView.
4 2621964
>>21960
Мы пишем системы автоматизации под виндовсы на заводе. Свободен, листай ленту дальше.
5 2621966
>>21949 (OP)
Перекотился!

>>21961
Давайте лучше обсудим .NET 8 Preview 1
6 2621975
>>21961
Что мешает тебе сделать тривью с мультивыбором?
7 2621980
>>21975
А ты попробуй.
8 2621994
>>21975
Это такая ебля, шо пиздец.
Мимо другой анонон.
9 2622002
Кто нибудь сталкивался с тем, что ньютоновский джейсон сериализатор проебывает последнюю закрывающую скобку? В основном на более-менее комплексных классах.
10 2622009
>>22002
Не может быть. Есть код, который воспроизводит этот баг?
11 2622017
>>21980
Ну. Попробовал. Наколеночное решение за 5минут. Думаю если именно задача стоит такая - можно сделать нормально для твоих целей.
12 2622036
>>22017
Спасибо, наконец-то кто-то нашёл решение, и тему можно закрывать.
13 2622037
>>22017
Да. Немного пролюбился. Во-первых, event надо было к хендлеру добавить, а то я смотрю, в редакторе чет нет события. Ну и по хорошему - чуть сложнее обработку всего этого дела, типа не просто тупа менять селект при клике по ноде, а проверять, на плюсик клацнули или на саму ноду, вот это вот все, по хорошему - там еще допилить шифты всякие, более сложное поведение.
Но я просто про то, что вроде как сказали "Попробуй", будто это какая-то невыполнимая магия или даже если выполнимая, то придется ебаться со всякими winapi и прочим добром. Типа сделать, если задача такая - думаю можно часа за 4 со всем-всем че надо.
14 2622063
Хочу сделать бандлы, как в Фортнайт. Но не могу понять, как они рассчитывают общую стоимость бандла. Сначала думал, что они просто умножают общую стоимость всех предметов на какое-то конкретное число. Но когда я купил 1 предмет из бандла, стоимость посчиталась уже иначе. Есть идеи, что там за формула может быть? Может там есть ещё некий "вес" у каждого предмета в зависимости от его стоимости.
15 2622065
Как некоторые инсталляторы определяют установленное приложение и все его версии? К примеру у пользователя установлена вижуал студия 2019, 2015 и 2010, и инсталлятор детектит и выводит этот список.
16 2622070
>>22063
По формуле NE_LOH.
Ну и пытаться анализировать перечеркнутый ценник, это конечно сильно.

Маппинг диапазона пробовал? Хз как это называется по научному, но во всех графических программах популярна функция приведения одного диапазона к другому и называется что-то вроде Map by Range.
17 2622076
>>22070
Не, простой маппинг возвратит 2769.
Купи еще один предмет. Нам нужна статистика.
18 2622079
Хм. Вдруг вы знаете.
Куда делся этот чел https://github.com/zeul72
У него были видосики на ютубе и они были прям оффигенные. Типа мне - сильно помогли те что по сокетам были. Хотел посмотреть че у него нового, но даже старое найти не могу.
Может быть вы в курсе.
Просто это был единственный чел по сокетам, кто относительно нормальный пример привел, подача тоже вроде была норм. Да и код у него прикольный.
19 2622081
>>22065
Много способов, можно в реестре поискать, можно сделать запрос к WMI по MSFT_VSInstance, можно запустить C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe, можно тупо обойти все диски в поисках папки с Visual Studio в Program Files.
благодаря твоему вопросу, я узнал из гугла много нового
20 2622103
>>22081
Дык перебором это понятно. Я думал есть для этого какая-то специальная штука, которая выводит связи, мб по лицензии. Вижуал студия — это лишь условный пример. Потому что бывает такой бардак, что программа например повышается по примеру 1, 2, 3, а потом вдруг начинает привязывать версию к году 2010, 2011, а потом и вовсе дает имена вроде Windows Vista.

>Реестр


Непредсказуем. У меня две версии приложения, и только одна прописана в реестре.

>MSFT_VSInstance


Это специально для вижлы

>vswhere.exe


Это тоже.

Остается тупо перебор жестких дисков. Но это же пиздец, оно может быть установлено где угодно и не факт что в Program Files. При этом некоторые плагины определяют вмиг все релизы приложения.
21 2622108
>>22103

>Реестр


>Непредсказуем. У меня две версии приложения, и только одна прописана в реестре.



Епт, забыл что у приложения сменился владелец и теперь лежит в другом месте. Есть оба в реестре. Наверно этот вариант будет самый нормальный.
22 2622110
>>22103
Не может существовать такой штуки. Пользователь, к примеру, мог тупо распаковать архив с нужной ему программой в удобном месте, и как волшебная штука должна её найти, кроме полного обхода всех дисков?
Для каждой программы надо писать свой локатор и юзать аналогичные вижуалстудии способы, или хотя бы предположить, что большинство пользователей не меняет дефолтный путь установки в Program Files, показывать список оттуда, а если ничего нет, предлагать пользователю самому указать путь.
image2,9 Мб, 2560x1440
23 2622112
>>22076

> Купи еще один предмет. Нам нужна статистика.


Купил ещё предмет за 1200.
image15 Кб, 693x254
24 2622114
>>22076
Вообще, я смог получить 2500 и 1300. Но это какая-то бессмыслица. А если я куплю ещё предмет за 2к, тогда стоимость в минус уйдёт что ли блять.
25 2622115
>>22112
Яж пошутил, кек.

Этож классика.
В любой непонятной ситуации делим меньшее число на большее и получаем множитель.
3000 \ 6500 = 0,46
2500 \ 6000 = 0,41
Так пропорции например определют. Далее нам интересно а какое соотношение купленной тобой хуйнюшки к изначальнйо цене
500 \ 6500 = 0,07

И какую связь мы видимс?
0,46 - 0,41 = ~0,07
2023-02-2501-27-00.png5 Кб, 538x209
26 2622124
>>22112
В сообщении присутсвует слово из спам листа
27 2622128
>>22124
Ты или наркоман, или гений. Пока не пойму твои письмена. Походу придётся завтра купить ещё один предмет, за 2к в этот раз.
28 2622129
>>22112
>>22114
Есть еще типа ... видел же алгоритм. Типа ты диапазон можешь регулировать при помощи кривой. Такой херней обычно пользуются при сглаживании ключей анимации.

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

Ща найду.
29 2622131
>>22128
Скорее опечатался, лол. В третьей строке не 0,42
30 2622136
>>22128
Нашел! Lerp называется. Все вылетело из головы.
https://youtu.be/YJB1QnEmlTs
2023-02-2501-59-14.png320 Кб, 1179x599
31 2622141
>>22114

>тогда стоимость в минус уйдёт что ли блять.


Ну так ты покупаешь по дефолной стоимости, поэтому в этом случае ты да, технически уйдешь в минус.

Вангую счетчик достигнет нуля и для тебя "выгодное предложение" закончится, либо чем ближе к нулю, тем меньше скорость падения цены, как на видеорил >>22136
2023-02-2503-39-36.png14 Кб, 657x343
32 2622147
>>22141
Примерный график
33 2622157
>>21949 (OP)
Откуда пошла рекомендация делать мок зависимости, код которой ты не контролируешь? В чем ценность таких тестов? Это словно пальцем в небо, где ты гадаешь как бы ответила система, хотя на самом деле не знаешь. Я еще понимаю мок какой-нибудь библиотеки или простенькой хуитки, которая дает API и у нее мокают клиент. Но несколько раз видел, когда мокали клиент для огромной ебы, где дернув ручку создается целая гирлянда всевозможных объектов и состояние системы меняется, что простыми моками это либо не описать, либо займет весь день на один тест.
34 2622163
>>22157
Прикольно ты спросил в тредах про джаву и шарп одновременно.
Тесты бывают модульными и интеграционными. В модульных ты проверяешь работоспособность одного конкретного модуля, который должен корректно работать, если все используемые в нём модули также корректно работают, и их работоспособность ты проверяешь модульными тестами уже для них. Ну и в интеграционных проверяешь, как модули работают вместе. Что может быть проще?
35 2622169
>>22163
Модульный на то и модульный, что зависимости обычно представляют твой собственный код, который ты знаешь как работает и можешь закрыть качественными моками, чтобы тестировать в изоляции один класс, например. В случае интеграционных ты сталкиваешься с ситуацией, когда ты интегрируешься с какой-нибудь сторонней хуетой к которой у тебя есть библиотека для доступа к API, но мокать ее ответы не имеет смысла, т.к. ценность таких тестов околонулевая и ты не сможешь предугадать правильные ответы во всех случаях
36 2622173
>>22169
Что значит не можешь преугадать? Ты тестируешь генератор случайных чисел что ли? Или всё-таки задокументированную функциональность с чётким и однозначным поведением? Вот эта "сторонняя хуета" звучит так, будто она невесть откуда взялась в проекте и никто не знает, что это и зачем. Хотя в реальности никогда так не бывает, по крайней мере, не так часто, чтобы категорично заявлять о полной бесполезности любых моков.
37 2622175
>>22173
Просто читай Фаулера - он все расписал про моки. Моки в тестах - горе на проекте
38 2622196
>>22175

>Просто читай Фаулера


Как же я проиграл. Этот старый теоретик на полном серьезе пишет юнит-тест на рест-контроллер где он мокает репозиторий блядь, и тестирует ручку, лол.
39 2622237
Если сделать как говорит ItsOK(первый коммент), то валидация будет происходить при каждом создании объекта, например, при выгрузке из файла, так ведь? То есть получается, лучше делать через свич?
https://metanit.com/sharp/wpf/14.php
40 2622257
>>22141
Короче, я выяснил. Нет там никакой формулы нахуй. Они тупа отнимают стоимость купленных предметов из общей стоимости. При этом они считают минимальную стоимость bundle так: берут предмет с наименьшей редкостью и на основе этого задают стоимость. Мин. стоимость получается от 100 до 500. Редкость это просто формальность, типа: Легендарный Автомат или Эпический Автомат.
41 2622353
Есть ли какой-то штатный эквалити компарер для массовов или в общем случае спанов.
Вот допустим я хочу сделать словарь, в котором ключом будет массив интов. Но они должны сравниваться по значению всех элементов (их будет мало в моём случае).
Есть ли что-то штатное или самому пилить?
изображение.png22 Кб, 652x151
42 2622464
Кто-нибудь в курсе, как убрать этот пунктир? Глаза очень режет. VS 2022
43 2622577
>>21960

>Смысл этого тредиса? Никто не использует дотнет


это тред для обсуждения перекатов. ну и немного в него спамят под дотнету - но это прохожие что не в теме сути треда.
Image 1.png45 Кб, 1019x668
44 2622582
45 2622614
>>22582
спасибо
46 2622730
Как привести словарь или список абстрактного типа к строгому типу?
Это надо перебирать все итемы?
47 2622747
>>22730
ну а как иначе. LINQ Cast<>/OfType<>
48 2622752
Оказывается Lunacy написана на авалонии, я и не знал. Похоже действительно достойный фреймворк.
49 2622791
>>22752
На гитхабе звёздочек примерно как у MAUI и больше, чем у WPF. Можно смело юзать в проде.
50 2622811
А еще в авалонии нормально реализованы стили, как в css, с селекторами.
51 2622821
Юзаю винформы, брат жив.
52 2622823
>>22811
но никогда не будут нормальными шрифты, увы
изображение.png33 Кб, 362x565
53 2622999
Доброго времени суток. Вопрос адекватно сформулировать не могу, но постараюсь объяснить проблему. Есть метод, который принимает запросы от телеграма, обрабатывает его и отдаёт обратно. Проблема в том, что когда я нажимаю на кнопку в одном телегам-пользователе изменения отображаются в другом. На первом скрине чекбоксы, при нажатии на какой-либо из них изменения отображаются сразу у всех. Собственно говоря, что тут нужно придумать? Нужна какая-то очередь, но я не в курсе как её сделать. Пытался сделать словарь, где ключ-id чата - идея говно, не работает.
55 2623020
>>22999
ты же понимаешь что никто ничего не понял из твоего пояснения?
какой то поток слов понятный только автору.
56 2623041
Почему шарп такое говно?
57 2623042
>>23041
потому что слизан с жавы, которая мегаговно
если бы создавался как котлин, то было бы шикарно
58 2623142
>>23042
Вот только Котлин безыдейное мертворожденное дерьмо, слизанное с сишарпа года 2012, так что насчет шикарно это орево
59 2623263
да бля чо этот ебаный випифи такой хуевый я ебал
такое ощущение что его специально придумали чтобы тренироваться костыли приделывать
60 2623322
>>23042
>>23142
C#, как и Java, и Kotlin - это мертворожденные и увядающие языки, мечущиеся между двух ниш.
В будущем останется только 2 стула:
1. Razt для системщины и байтокрутов.
2. Pitun для высокоуровневых макакингеров.
Остальные промежуточные двурушники умрут.
61 2623326
>>22821
Поддерживаю.
Единственная адекватная проверенная временем технология для GUI, дружественная к программисту, с низким порогом входа и с лучшим перформансом на рынке, с самым коротким путём от открытия IDE после обеда до MVP к концу рабочего дня.
Жива и здравствует до сих пор, потому что ничего лучше так и не смогли придумать.
image63 Кб, 402x385
62 2623337
>>23322

> увядающие языки


> C# и .NET каждый год обновляются


Я даже уже заебался следить за новыми фичами. Каждый год блять что-то новое.
63 2623373
>>23337
Ну это как барахтающийся утопающий. Брызг, пузырей, шуму, визгу много. А толку - мало. Плавать надо уметь в новой реальности. А не суетно пускать автоматные очереди бездумных изменений, чтобы хоть как-то удержаться на плаву.
Это верный признак конца.
64 2623394
>>23373

> Плавать надо уметь в новой реальности


Угадай на каком языке написана большая часть современных мобильных игр.
65 2623412
Изучаю в вузе c#. Хотел узнать какие перспективы, думал летом завалиться куда-нибудь на стажировк
66 2623417
>>23394
На котлине
67 2623419
>>23142
Ты просто не пробовал
В котлине код лаконичнее и выразительнее
И многие фичи там есть что в шарпе и не будет никогда
68 2623436
>>23394
Только вот в юнити свой рантайм, свой сишарп, отстающий от основной версии. И вообще он зачастую транспилируется в код на крестах, а уже потом компилируется нормальный крестовый код.
На юнити свои особые практики разработки близкие к крестовым, с минимизацией аллокаций. С преаллокацией больших объектов. Это просто крестодрочево на шарпе. И в общем-то то, как это уродливо выглядит, как бы намекаем нам на то, что сишарп в юнити - это просто как пропихнутый по блату неликвид, который по хорошему надо менять на кресты или раст.
Юнити - это самый убедительный аргумент в пользу того, что сишарп не пригоден для разработки игр, и используется там в силу внешних причин (микрософт просто его туда пропихивает не взирая на объективные потребности рынка).
ha-ha.webm1,4 Мб, webm,
958x720, 0:11
69 2623613
>>23436
Выдумал какое-то соломенное чучело и сам же разъебал его. Типичный шизоид.
70 2623716
Насколько легальна конструкция:

IA
IB :IA
MyBaseClass :IA
MyChildrenClass :MyBaseClass :IB


Задача в том, что я железно должен соблюсти два правила:
1. MyBaseClass обязательно должен реализовать интерфейс IA
2. При обращении к IB должен видеть функционал IA

Проблема в том, что выглядит так, что интерфейс IA используется как бы дважды.
71 2623719
>>23412
А если перспектив нет, то отчислишься?
72 2624157
Можно ли в соло написать и запустить веб проект на ASP.NET + Angular и монетизировать? Какие подводные?
73 2624162
>>24157
Всё возможно, дерзай, если есть энтузиазм и запал!
74 2624164
бля как же я ебал этот веб. завтра скачиваю unityhub, в геймдеве хоть деньги есть
sage 75 2624195
>>24157
Нельзя, в ASP.NET встроена проверка, что если ты пишешь проект в соло, он детектит все твои счета в банках и электронных кошельках и запрещает по ним входящие платежи.
76 2624225
>>24164

>в геймдеве хоть деньги есть


You can bet on it
77 2624226
>>24225
Он же не сказал какой геймдев. Может он клиент для казино на юнити собрался писать.
78 2624230
>>24164

> в геймдеве хоть деньги есть


Есть, да не про вашу честь! Войти на тот же рынок мобилок тяжело, нужен креативный подход. А если ты решил на дядю работать, то там платят копейки.
79 2624266
>>22999

>Пытался сделать словарь, где ключ-id чата - идея говно, не работает.


Ты что-то наебланил, такого не может быть.
80 2624368
>>24226

>Может он клиент для казино на юнити собрался писать.


Угу. Считать, что можно заработать бабки разрабатывая для мобильного казино, примерно то же самое, что считать, что можно разбогатеть будучи обычным крупье в стандартном казино.
81 2624377
>>24327 (Del)
Съебать должны те, кто задаёт тупые вопросы.
82 2624413
>>23719
нет, пойду тогда летом опять в доставку яндекс еды
83 2624470
>>24425 (Del)

>"Врёти нинужна"


Не считаю так.

Бтв, недавно начал дрочить задачи с codewars, + курс ulearn'a.

>- иди нахуй с треда куда-нибудь в питонотред


пришел от туда)
84 2624472
>>24425 (Del)
для чего нужны литкод и алгосы для очередного шарп крудошлепа?
85 2624718
Есть ли нормальное будущее у десктоп разработки? Есть ли смысл перекатыватся в веб с декстопа на винде? В вебе платят больше и вакансий больше и он намного популярнее, а десктоп как будто не существует
86 2624723
>>24718
Нет. Да.
87 2624729
>>24718
винда умирает, перекатывайся в разработку gtk приложений на Си или Расте
88 2624859
Хочу написать гуи приложение для покетбука работает вроде как на линуксе, даже хромиум есть, с чего вообще начать?
89 2624888
>>24859
С html, css и js.
90 2624939
Анонсы, нужен небольшой архитектурный совет да, это опять насчёт игры

Есть AuthenticationService, который занимается входом/выходом. В нём есть класс Account, который хранит данные о текущем пользователе.

Мне нужен ещё один сервис (пик 2), который будет хранить данные игрока в свойстве Player (по аналогии с Account). Внутри будут данные: UserId, Coins, Tokens, Nickname и тп. Вопрос: как можно назвать сервис, который на пик 2? GameService уже есть. Можно назвать PlayerService, но как-то мне не нравится такое обращение "playerService.Player". Хотя так логичнее всего наверное... Может UserService, хм.
91 2625027
>>24939
Че этот интерфейс делает, так и называй.
С точки зрения архитектуры - у тебя тут перемешаны интерфейсы. Потому - это должен быть не сервис а фасад какой-нибудь смешанный со слушателями.

Но в твоем случае - очевидно, что у тебя сущности доступа к игроку - смешаны с сущностями которые за рекламу отвечают. Отвязывай их. Делай как человек - IAdService, ITokensService, Inventory, Profile...

А вообще, можешь сделать как делают деды в непонятной ситуации. Вот смотришь внимательно на то где это применяется, и добавляешь слово Context. Допустим у тебя эта хуйня, как видно из методов - применяется в какой-то хуйне связанной с магазином. Так и делай: ShopContext. Player переименовываешь в Consumer. Выглядеть будет так: context.SetNikname("PodzalupniyTvorojok"), context.Consumer.Coins.
92 2625096
Если я через EF кверю постгрес то по какому принципу мне выбирать возвращаемый тип из Task и ValueTask?
93 2625097
>>25096
по принципу - ПОТОМ ПРОФАЙЛЕР ПОКАЖЕТ
94 2625098
>>25097
Хочется сразу нормально сделать
95 2625461
>>24413
А нахера тогда спрашиваешь? Все равно придется учить, все равно придется ходить на собесы.
2023-02-2811-53-23.png2 Кб, 293x72
96 2625549
Как в IValueConverter отменить конвертацию, если данные не верные? Мне не нужно исключение.

Задачи пикрил. Я забиндил цвет к прямоугольнику и в текстбокс правее забиндил через IValueConverter этот же цвет в HEX-представлении. Связка двухсторонняя.

Проблема в том, что пользователь может ввести неверный формат данных и это надо как-то регулировать: либо отменить конвертацию, либо вернуть текущее валидное значение.
97 2625555
>>25549
А, все, надо вернуть null. Даже текстбокс автоматом подсвечивается красной рамкой — удобно.
98 2625687
>>25555
Нужно возвращать DependencyProperty.UnsetValue, иначе в тексбокс в обратку придет пустой цвет.
99 2625795
А как вообще реализовывается окно настроек при паттерне MVVM? Допустим у меня есть вьюмодель настроек, но проблема в том, что если я ее привяжу, то ЛЮБЫЕ изменения в окне настроек моментально внесут глобальные изменения на все приложение. По идее пользователь должен нажать OK, чтобы изменения применились, или Cancel, чтобы их отменить.

Это надо делать копию данных, над ней издеваться, а уже потом переносить данные в оригинал. Но это же лютый пиздец, это же надо вручную перебирать каждое свойство.
100 2625801
Если я знаю плюсы и тайпскрипт сколько у меня займёт перекат в шарпы?
101 2625804
>>25801

> знаю плюсы


Сколько лет опыта?
102 2625811
>>25804
Где-то 5 с хвостиком
103 2625815
>>25801
>>25804
>>25811
Хватит хуйней страдать. Чел 5 лет плюсы изучал и тайпскрипт и не занет сколько нужно на изучение шарпа.

Лучше ответье на вопрос >>25795
104 2625819
>>25813 (Del)
Ну ля, а к собесу как готовиться? Гц этот ваши, лохи и прочее.
105 2625837
>>25827 (Del)
Хм. Т.е. сделать опции не как синглтон?

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

С точки зрения производительности хуже, но без ебли глубинного копирования. Найс, мне нравится.
106 2625845
C#, .NET Core, ASP.NET, EF
Я ничего не забыл?
107 2625855
>>25853 (Del)
Тяжело...
108 2625886
>>25854 (Del)
ну так то синглтон синглтону рознь. синглотн ака Service.Instance зло, а через DI нет
однако и даже первый вариант не всегда зло. например то же логирование.
да и биндинг настроек вью тоже идет на сигнлтон и ничего. Ну конечно если ты не хочешь делать автотесты гуи на уровне контролов и подменять при этом настройки - а ты этого не захочешь точно.
109 2626244
>>26237 (Del)
Здесь тебе шарп, а не кресты.
.jpg80 Кб, 700x700
110 2626292
Смотрите.
Я давно делал свою либу для своих нужд для работы с TCP.

Ну так вот. Я чет в последнее время хочу к ней вернуться.

И че меня смущает в ее дизайне.

А вот че.
Есть интерфейс: IProtocol

Собственно вот такого вида:
interface IProtocol<TMessage, TContext>
{
Task<TMessage> ReceiveAsync(PipeReader reader, TContext context);
Task SendAsync(PipeWriter writer, TMessage message, TContext context);
}

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

Вот че делать?
Мне не хочется делать IProtocol который это будет обжектами заменять. А делать интерфейсы и реализации классов под случай, когда с контекстом и без - тоже не хочется.
Можно конечно сделать в духе:
IProtocol<TMessage> : IProtocol<TMessage, EmptyContext>
Но типа тоже как говно выглядит, тем более, что тот кто будет реализовывать интерфейс - будет этот EmptyContext видеть.
А как решать - я хуй знает.
.jpg80 Кб, 700x700
110 2626292
Смотрите.
Я давно делал свою либу для своих нужд для работы с TCP.

Ну так вот. Я чет в последнее время хочу к ней вернуться.

И че меня смущает в ее дизайне.

А вот че.
Есть интерфейс: IProtocol

Собственно вот такого вида:
interface IProtocol<TMessage, TContext>
{
Task<TMessage> ReceiveAsync(PipeReader reader, TContext context);
Task SendAsync(PipeWriter writer, TMessage message, TContext context);
}

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

Вот че делать?
Мне не хочется делать IProtocol который это будет обжектами заменять. А делать интерфейсы и реализации классов под случай, когда с контекстом и без - тоже не хочется.
Можно конечно сделать в духе:
IProtocol<TMessage> : IProtocol<TMessage, EmptyContext>
Но типа тоже как говно выглядит, тем более, что тот кто будет реализовывать интерфейс - будет этот EmptyContext видеть.
А как решать - я хуй знает.
111 2626394
>>25096
А зачем тебе ValueTask?
Если операции асинхронные - всегда Таск.
Если чаще нет, чем да, ну блескни смекалОчкой в ПРе и юзни ValueTask, если там кешхит хороший
112 2626655
>>26292
Как я понял Context некая частная штука. Поэтому я бы его вообще не отображал в интерфейсах. Пускай его используют конкретные классы.
image.png116 Кб, 1024x1024
113 2626747
Откуда в .NET настолько много сеньеров?

В Djinni масса народу лезет на все сеньерские вакансии где нужно 5+ лет опыта и на многих вакансиях делает т50-70+ откликов, а отклик не поставить там джуну если у него стоит 0-1 год опыта.

Это щас джуны настолько наглые что ставят 5 лет опыта в системе и подаются хоть на архитекта или реально рынок спецов настолько переполнен? Такая же ситуация с мидлами.

Война же не затронула настолько сильно рынок опытных специалистов, или я ошибаюсь?

Такое чуство что вакансия не сеньерская а джуниорская без опыта, и так на многих сеньерский-мидловых вакансиях
114 2626841
>>26655
Контекст, в данном случае - это такая хреновина, которая отвечает за специфику протокола.
Допустим, вот у нас есть протокол, который по дефолту - после обработки запроса - закрывает соединение. Но если передан флаг KeepAlive - сервер не должен закрывать соединение после. Либо, у протокола есть возможность разные типы шифрования использовать, в таком случае - в контексте содержится информация о том, как шифровать сообщение. Ну и прочая фигня, которая нужна парсеру в зависимости от котнекста соединения.
Ну, а я - еще и хочу же экономить, не создавать кучу парсеров, в которых отличается только контекст, потому хотел, чтобы IProtocol- был один на тип соединения, типа: Для хттп - HttpProtocol : IProtocol<HttpMessage, HttpContext>, для модбаса - другой: ModbusProtocol : IProtocol<ModbusMessage, ModbusContext> ну и т.д.

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

while(httpContext.Request is null){
var httpMessage = await httpContext.ReciveAsync();
httpContext.Request = new HttpRequest(httpMessage);
await application(httpContext);
if(context.Responce is not null) await httpContext.SendResponce();
if(httpContext.KeepAlive) httpContext.Reset();
}

Просто уродливо когда со стороны какой-то EchoServer показать хочется.
115 2626975
Чет меня расстраивает студия в последнее время.
Слишком часто происходит следующего вида хрень:
Просто подчеркивается рандомный кусок текста красным и проект просто не хочет собираться. Просто с нихуя.
Помогает просто перезапуск студии.
Но бесит жутко.
ХЗ как чинить нормально.
Раньше такое случалось только совсем уж в здроровых проектах. Но сейчас - проектик на 20к строк - уже начинается.
116 2626977
>>21960
Ах если бы, я бы без работы сидел
117 2626979
>>26747
Это вноючие вкатуны, крутящие опыт, забей.
118 2626982
>>26747
Это вонючие вкатуны, крутящие опыт, забей. Во фронте с этим вообще пиздец.
119 2626984
>>22999
Снеси нахуй статику. И использую объекты. У тебя один и тот же чекбокс, который живёт у всех пользователей
120 2626986
>>22999
Снеси нахуй статику. И использую объекты. У тебя один и тот же чекбокс, который живёт у всех пользователей
121 2627039
>>26747
Отклики на вакансии никогда не соответствовали реальному положению дел. Есть боты всяких агентств, автоматически рассылающие отклики. Есть отчаявшиеся вкатуны без опыта, на авось откликающиеся на всё подряд. Есть шизики, услышавшие у инфоцыган, что требуемый опыт можно игнорировать. Есть те, кто жопой читает описание вакансий. Есть наёбщики, посмотревшие видосики "как убедительно пиздеть о своём опыте". Ну и от силы 1-2 сеньора, подходящих под описание, которые откликнулись заодно на 50 других вакансий.
122 2627050
>>27039

>Ну и от силы 1-2 сеньора, подходящих под описание, которые откликнулись заодно на 50 других вакансий.


Стоит еще учитывать, что по факту нормальные вакансии изначально заполняются через агенства, аутсорс/аутстафф или свои каналы. Т.к. все сеньерные сеньеры уже давно во всех базах и их обзванивают в первую очередь. Плюс пылесосят все нормальные резюме в общем доступе. И когда уже никого не нашлось вакансия выкидывается в эфир, в надежде, что среди набежавжих окажутся те самые пара человек которые чудом проскочили мимо пылесоса.
123 2627059
>>26975
1. Прочекай все расширения. Очень часто такая проблема бывает из-за кривого расширения или конфликтов между ними.
2. Попробуй обнови студию. В 2022-й в одном из билдов была такая проблема, когда студия на больших проектах теряла все референсы и даже перезагрузка не всегда спасала.
Я после того как до последней текущей редакции обновился и поотключал большинство расширений - проблема исчезла.
124 2627073
>>27039

>Есть наёбщики, посмотревшие видосики "как убедительно пиздеть о своём опыте".


Разве все настолько плохо если врать о опыте? читал много отзывов о вкате через убедительный пиздёжь о своем опыте, у многих всё получалось без проблем, получали джуна-мидла без опыта, да и человеку который пиздит, ему же хуже от этого не будет, раскроют ложь в одной конторе пойдет на 200-100гу в другую.
125 2627081
>>27073

>раскроют ложь в одной конторе пойдет на 200-100гу в другую.


"И что это за профессия такая, прости господи! Сын лейтенанта Шмидта! Ну, год ещё, ну, два. А дальше что? Дальше ваши рыжие кудри примелькаются, и вас просто начнут бить."
126 2627082
>>27059
У меня из расширений - только CodeMaid и тема от которой глаза не вытекают.
Попробую завтра обновить.

Просто реально. Типа раньше - подобное было, но на больших проектах, можно было понять. Но тута началось - даже на небольшом. Всего 4 проекта в солюшне, 20к строчек в сумме. Оно уже ломается. Обидно до дури.
image.png13 Кб, 551x288
127 2628214
Почему так нельзя и при чём тут конверсия?
128 2628229
>>28214
Потому что первое не Class1 не имеет никакого отношения к T.
Компилятор не может вывести зависимость типов, да никто не может, ведь они не связаны

Сделаешь ты потом new Generic<string> и как по твоему Class1 должен неявно кастоваться к string.
129 2628231
>>28229

>Сделаешь ты потом new Generic<string> и как по твоему Class1 должен неявно кастоваться к string.


То есть эээ... два инстанса Generic<T> с разными типами должны неявно приводиться один к другому?
130 2628232
>>28229
А всё, понял, отбой.
>>28231
131 2628275
Всё сижу и думаю об этом >>28214
Я не программист, шарп просто хобби, но знаний по женерикам достаточно, чтобы самому понять, почему эта хуйня инвалид, но вот заклинило и всё.
"Интересно" мозги неработают.
1123.jpg48 Кб, 1200x619
132 2628508
Есть что-то наподобие реверс мультибиндинга?

Задача - пикрил. Есть один источник данных в виде цвета aRGB.
А есть два UI-окна, которые биндят этот цвет. Одно окно должно отображать канал Alpha(Opacity), а другое собственно цвет RGB.

С получением данных проблем нет — я это сделал через IValueConverter и сепарировал каналы.
Но представим, что пользователь в окно Opacity вводит новое значение. Конвертору, нужно знать два значения Opacity и RGB, чтобы собрать в кучу и высрать полноценный Color. А конвертер так не умеет, он знать не знает про RGB и где его взять.

Я пытался биндить цвет к parameter в ValueConverter, но он не является DependencyObject. На SO советовали юзать IMultiValueConverter, но это же совсем другая херь — она подразумевает, что у меня 2 источника и одно свойство. А у меня наоборот один источник и два свойства.

Есть идеи?
2023-03-0315-35-05.png78 Кб, 765x834
133 2628597
>>28508
Что чел имел ввиду? Что это за зверушка такая без Binding, без StaticResouce, без указания неймспейса через двоеточие?
2ч.jpg29 Кб, 926x181
134 2628634
ЕБАНЫ РОТ, Я УЖЕ ДВА ДНЯ СИЖУ, НИХУЯ НЕ ПОНИМАЮ:
как сделать чтение из одного файла в нескольких одновременных процессах??
Так в файл записывается белиберда, не соответствующая действительности.
135 2628722
>>28508
тебе для чего вьюмодели дадены? чтобы хранить в них данные для вью. вох и храни

>>28597
а оно работает? видеть бы его в работе

>>28634
и никто не понимает что ты вообще делаешь. На пике прочитал ты файл, а потом параллельно начинаешь пихать его Bag которая в принципе не предназначена для "должен быть порядок"
136 2628741
Как вкатиться в бэк с годом опыта разработки десктопа на впф?
137 2628744
>>28741
Как джуну без какого-либо опыта.
2023-03-0317-51-00.png44 Кб, 757x529
138 2628746
>>28722

>тебе для чего вьюмодели дадены? чтобы хранить в них данные для вью. вох и храни


А у меня что? У меня свойство типа Color и хранится во вьюмодели. Два текстбокса биндятся к этому свойству, только одному нужен альфа канал, а другому каналы RGB. И каждый тексбокс должен править ТОЛЬКО конкретный альфаканал, а не цвет целиком.
А я напоминаю, что тип Color - структура и ее суб свойства не являются INPC или DP.

Пытаюсь к ValueConverter приклеить DependencyProperty. Чет нихера не выходит. Ща подготовлю демо-проект.
Вкратце, если наследуюсь от DependencyObject, то возникает ошибка в рантайме, мол источник биндинга is null (а это 100% не так). Если наследуюсь от FrameworkElement, то ошибки нет, но и свойство не обновляется. Если я юзаю не Binding, а StaticResource то обновление свойства регистрируется.
Чет с визуальным деревом и данные теряются.

Вроде тут поясняют, но я пока не разбирал.
https://www.codeproject.com/Articles/18678/Attaching-a-Virtual-Branch-to-the-Logical-Tree-in

>а оно работает? видеть бы его в работе


Ну вот у меня ошибка. Я не понимаю что имеется ввиду.
139 2628748
>>28746
а я напоминаю что вьюмодели для этого и нужны - давать данные для вида. И если вдруг части Color не являются INPC и это нужно, то делается ColorViewModel где этот Color будет иметь INPC свойства своих частей.

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

Проблема проброса DataContext в хамл, что не состоит в дереве - ну это другая проблема

>Я не понимаю что имеется ввиду


ну скорее всего он потерял неймспейс ибо писал в блокнотах пример и вставил.
140 2628755
>>28748

>то делается ColorViewModel где этот Color будет иметь INPC свойства своих частей.


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

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


Не запихнешь. Как я конвертеру передам вьюмодель? Если бы я мог, я бы передал Color.

>ну скорее всего он потерял неймспейс


С неймспейсом тоже ошибка.
141 2628763
>>28755

> Не запихнешь. Как я конвертеру передам вьюмодель? Если бы я мог, я бы передал Color.


Наследуешь конвертер от markupextension и передаешь что душа пожелает.
142 2628764
>>28755
ну чудес не бывает. Если тебе нужно INPC и что то не обладает INPC то ты делаешь INPC или делаешь вообще другой подход

> Как я конвертеру передам вьюмодель?


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

или то же самое но в markupextension - тут просто инстанс конвертера создается "на месте"

>С неймспейсом тоже ошибка.


ошибку в студию тогда.
2023-03-0318-34-33.png29 Кб, 1121x342
143 2628772
>>28764

>markupextension


Почему он, а не DependencyObject или FrameworkElement? Ведь туда тоже можно запихнуть что угодно и передать что угодно.

А как юзать markupextension? Ща будет ор, что свойство не является Binding. Вот этот пример и идет по этому пути >>28597
Ссылка на референс: https://pastebin.com/VxF1c5ma
Там свойство объявлено как Binding, но я не понимаю как это запустить.

>ошибку в студию тогда.


пикрил
144 2628774
>>28772
Скобка лишняя
145 2628784
>>28772
Ересь какая-то. Непонятно что тут хотят сделать.
146 2628786
>>28772
в хамл ты можешь создать любой объект и задать его свойства - как ты делаешь с контролами
markupextension позволяет создавать объект внутри { } и тоже задавать его свойства

а сам этот BindingWithBindableConverterParameter показывает пример "так можно", не более типа "смотрите можно сделать свой биндинг", хотя это просто обертка над обычным биндингом и кроме примера ни на что не годится.
147 2628815
>>28744
Шутишь? У меня год опыта коммерческой разработки, и я по твоему должен конкурировать с вкатунами?
148 2628891
>>28786
Ну смотри, вот проект: https://transfiles.ru/l90fh

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

Конвертацией заведует OpacityConverter, в нем есть обычное депенденси свойство, которое биндится к оранжевому цвету, но цвет остается черным.
Поэтому любое изменение окна Opacity моментально искажает цвет (пикрил 2).

Вот что не так? Почему биндинг не срабатывает?
149 2628895
>>28815
Если уверен в своих силах, то чяво спрашиваешь?
150 2628901
>>28786

>markupextension позволяет создавать объект внутри { } и тоже задавать его свойства


Но нельзя биндить эти свойства. А чтобы это реализовать, свойство должно быть Dependency, а чтобы его реализовать, я должен наследовать DependencyObject или Framework Element, но множественное наследование запрещено.

Поэтому MarkupExtension для меня бесполезен. А DependencyObject или Framework Element не работают.

В общем печально, что нет решения для казалось бы очевидной задачи. Ну нельзя даже Color расщеплять на INPC. Шо это за хуйня? Мне весь проект перелопачивать ради того, чтобы в одном окошечке реализовать возможность регулировки прозрачности цвета?
Ну пиздец.
151 2628925
>>28901

>я должен наследовать DependencyObject или Framework Element


нет. наследовать Freezable

твое

<Binding.Converter>
<cnv:OpacityConverter Reference="{Binding TestColor}" />
</Binding.Converter>
ругается же как
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=TestColor; DataItem=null; target element is 'OpacityConverter' (HashCode=60429346); target property is 'Reference' (type 'Color')

если конвертер вынести в ресурсы
<cnv:OpacityConverter x:Key="OpacityConverter" Reference="{Binding TestColor, Mode=OneWay}" />

и использовать

Text="{Binding TestColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource OpacityConverter}}"

то все работает.
152 2628931
>>28925

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



А если у меня таких 100500 окон, то в ресурсах я должен создать 100500 экземпляров конвертеров?
Впрочем мне все равно придется делать общий конвертер с правым окном. Спасибо за помощь!
153 2628946
>>28931
есть проблема
в теории ты можешь использовать MarkupExtension чтобы передавать цвет как параметр, но тогда ты не сможешь передать этот цвет как биндинг

а наследоваться от 2х классов Freezable и MarkupExtension ты не можешь
тут нужно велосипедиь.
154 2628970
>>28946
А зачем мне теперь MarkupExtension?

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

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

Либо надо внутри держать какой-то словарь, а ключ передавать тем же параметром. Выглядит как хуета.
155 2628975
>>28970
MarkupExtension нужен тем кто "не хочу я в ресурсах конвертер обьявлять и статик конвертер тоже не хочу, хочу чтобы на месте"

и там все хорошо пока не захочется передать параметр который нужно дополнительно биндить.
156 2628985
>>28975
Для меня один хер что там строчка, что здесь.
157 2629063
ребят из реакта/фронта в сишарп долго перекатываться?
158 2629065
>>29063
Судя по вопросу ты еще в реакт/фронт не вкатюлился, так что ответ столько же сколько с нуля
159 2629066
>>29063
Ну. Если есть хотя бы общие представления о БД, многопоточности, типах, то не то чтобы прям.
Говорю правда с другой стороны, когда нужно было из бека шарпа стать временно фуллстеком.
160 2629075
>>29065
Да я решил что мне неинтересно ебашить фронт, меня типа учат огромному количеству инфы, но я все еще не понимаю нахуя мне это надо.

ПЛюс милиард библиотек
реакт редакс мобх тайпскирпт таилвинд вуе ангуляр
почему так сложно, вы долбаебы чтоли?
161 2629092
>>29075
На беке тебя вообще инфой засыпит чел, а если не осилишь, так еще фулстеком придется работать в мелкоконторах.
162 2629428
>>29092
Ну а где не засыпет то в кодинге? Другое дело чтобы было интересно в этом всем копаться, и я видел какую-то финальную цель.
163 2629915
Есть ряд кнопок в стакпанели. Стиль задан через статикРисурс, второй рисунок. Когда тыкаешь на одну, у предвидущей сбрасывается обводка. Всё работает.

Но когда я поделил их на две стакпанели нихуя не работает. Почему так?
164 2629970
>>29915
Дошло кажись, у меня радиокнопки, они одним стэком считаются.
165 2630683
>>28815

>год опыта коммерческой разработки


>впф



Это не считается, такой попуск на собесе устроят, заснуть потом не сможешь
166 2630869
>>28815
Конечно. Ты же в бэк собираешся, а там твой впф-опыт почти никому не уперся.
167 2630870
>>30757 (Del)

>Хочешь верь, хочешь нет, но в мире остаётся огромное количество заказчиков программного обеспечения


Ну-ка, хотя бы парочку нормальных контор с открытыми вакансиями приведи.
168 2630933
>>30869
Чо чулавека пугаешь. Ваше крудошлепство дебил освоит за неделю и уже мидл.
169 2630954
Смысл этой хуйни?
170 2630957
>>30954
Чтобы поджигать жопы джавистам.
171 2631083
На с# нормально будет в бекэнд или лучше язык попроще найти? Мне очень нравится c#, не хочу переучиваться.

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

бэком раньше не интересовался вообще, не бейте
172 2631084
>>31083
Толсто.
173 2631101
>>31084
Я реально спрашиваю
174 2631177
>>31014 (Del)
1) Во первых конкретные примеры, а то я тоже могу про 'массы' говорить. Во вторых, в большинстве таких контор 'разработчиков аналогов' ты будешь хуй сосать вместо зарплаты.
2) Тут уже интереснее, только ты все равно обосрался. Компас написан на плюсах, на шарпе там только плагины можно для него делать. И то в подавляющем большинстве они все на делфях сделаны (знаю т.к. сам писал). Ну и в аскон хуй ты попадешь без знания плюсов и хорошей математической базы (это если на сам движок), либо хорошей предметной базы (вроде конструкторской или ТМ), а это почти всегда вышка или неебический опыт. С годом ВПФ-а там нехуй делать.
175 2631185
>>30933

>Ваше крудошлепство дебил освоит за неделю и уже мидл.


Угу, круды. А потом тебе дают таску вроде "подписание xml по хитровыебанному ГОСТу, с оригинальным алгоритмом каноникализации и под линукс" со сроком хорошо если хотя бы в пару недель. Или интеграцию с каким либо сервисом с каким то хитровыебаным форматом мутантом jsonrpc, resta или еще хуй пойми чего. Где хорошо если хотя бы часть API описана.
А все круды уже давно автоматои парой строчек делаются наследованием от абстрактных классов.
176 2631204
>>31083

Шарп норм, на джаву очень похож.
Я в том году вкатился, до этого учил джаву года полтора.
Базу какую-то на джаве выучил, начал Spring изучать, прошел курс на udemy где-то наполовину - параллельно для общего развития потихоньку изучал JS, и знакомый порекомендовал ангуляр потыкать - там его каким-то знакомым требовался на ангуляр разработчик.
В итоге вкатился на фронт/фулстэк (в другую контору), JS по сути выучил через ООПшную логику TypeScript и Angular, а бэк тут на шарпе.
177 2631234
>>21949 (OP)
Шарпаны. А что можно почитать по функциональному подходу в C#? Ну и вообще базу по функциональщине?
178 2631526
>>31204
Ну я вот тоже хочу фуллстэк, но нет уверенности, что шарп подойдет, но судя по вакансиям все норм. Изначально думал, что буду его для геймдева юзать, но игры вообще не мое как оказалось, хочу на сайтики перейти, но пока вообще ничего в них не понимаю, поэтому может и спрашиваю тупые вопросы.

Просто смотрю на вакансии для бека и там требуют C#, HTML, CSS, а для фронта вакансий меньше и зп меньше, требования те же, но без C#, лол.
image.png28 Кб, 711x220
179 2632146
Это нормально, что 2-4 года опыта это джун? Мне казалось 2, ну уж тем более 4 года это мид уже.

типичные требования для вката в 2023, м
180 2632160
>>32146
На каждом проекте свои критерии для джунов и миддлов. Где-то миддлом можно быть с 0.5 годами опыта (в основном мелкие проекты в стартапах), где-то не меньше 5 (огромный проект с кучей разрабов и энтерпрайзе).
181 2632201
>>32146
Если это зарубежная вакансия, то да.
Это в РФ основной принцип: "Маши крыльями - или сдохнешь". И вчерашний джун с годом опыта уже через год может в соло ебашить микросервисы, чтобы не вылететь на мороз.
А там все крайне неспешно (настолько, что готов поспорить, что в данной вакансии подразумевается еще .NetFramework и никакого Core). Там чел может спокойно сидеть в офисе года 2...3 и ничего кроме простых задач ему не доверят, просто потому что не по статусу и недостаточно задниц вылизано.
182 2632303
>>31526

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



Ну это от региона кстати сильно зависит. Смотри по вакансиям и стеку необходимых технологий - это и учи.
Для фулстэка необходимый минимум что надо знать - это основы HTML (DOM) и CSS, SQL очень важен, какой-либо из JS/TS фреймворков (React, Angular, Vue), основы работы протокола HTTP, ну и собственно сам шарп (ASP.NET/ASP.NET Core).
И, что ОЧЕНЬ важно (лично для меня было) - освой дебаг. Чтобы прям в Visual Studio или дебаг-консоли браузера ты шел по строкам, смотрел что в какую переменную поступает, как обрабатывается и как хранится в памяти.
Рекомендую на базе (философствования по поводу ООП и прочий leetcode) сильно долго не засиживаться, как только начнешь более-менее разбираться - учи фреймворки и пытайся собрать на практике рабочий пет-проект из разных языков и технологий. На этом этапе не помешает освоить Git (его впрочем тебе и так в любом курсе впарят за компанию).
Чтобы изучить любую технологию/фреймворк - на старте выбери какую-нибудь книгу, интернет- или видео-курс (не особо важно какой, тут главное системность и чтобы с упражнениями самостоятельными) и иди по ним. Пройди хотя бы наполовину.
Чем дальше будешь по этому пути идти - тем четче будешь видеть дальнейший путь.
Добра.
183 2632812
Хочу перекатиться из ноды в шарпы. Уже какое-то время трогаю аспнет + ef. Что ещё посмотреть? Что читать? Нужен ли CLR via C#? Даёт ли опыт 3 года на ноде+рякт+тс какой-то плюс? Даёт ли опыт с плюсами какой-то плюс? Насколько шарп востребован на западе вообще?
184 2632821
>>32303
Спасибо, анончик, добра тебе. У меня план вот ровно такой и был, как ты написал, но теперь стал чуть более структурированный. Просто иногда читаю статьи и там совсем не упоминают C#, либо пишут, что он для сложных и больших проектов, а не для небольших сайтов, это так? Хотя не думаю, что это играет сильную роль.

А фулстэк меня интересует только потому, что мне отчасти интересен фронтенд и дизайн, так как есть навыки в художественной области, но понимаю, что вообще не хочу связывать всю профессию с этим, меня бэк намного больше привлекает. Но при этом буду совсем горевать, если мне нужно будет всю жизнь только с серверной стороны работать. Очень люблю подбирать цвета, шрифты, формы, у меня прям гармонично это получается, но вот на постоянку такое - meh.
185 2632887
>>31234
Бамп вопросу.
186 2633062
>>32812
Бамп вопросу.
187 2633068
>>32812

> Хочу перекатиться из ноды в шарпы. Уже какое-то время трогаю аспнет + ef. Что ещё посмотреть? Что читать?


Продолжай тыкать asp.net, ef. У майков отличная документация https://learn.microsoft.com/en-us/aspnet/core/getting-started/?view=aspnetcore-7.0&tabs=windows , где и гайды, и fundamentals.

А дальше по роадмапам иди (https://github.com/Elfocrash/.NET-Backend-Developer-Roadmap), и тыкай разные библиотеки (automapper, swagger, serilog, xunit etc).

> Нужен ли CLR via C#?


Книги по asp/ef/c# такое, инфа на сайте все-равно быстрее обновится, CLR via C# уже про базу C# и рантайма, читать смысла не много на первых порах.

> Даёт ли опыт 3 года на ноде+рякт+тс какой-то плюс? Даёт ли опыт с плюсами какой-то плюс?


Ну TS похож, т.к. 1 человек проектировал, из фреймворков angular много концепций asp имеет, di например. Опыт просто из бека поможет.
В сравнении с плюсами, меньше ебки и писать приятнее.

> Насколько шарп востребован на западе вообще?
Ну в энтерпрайзе больше джавы, но c# достаточно, работы хватит.

>

188 2633083
>>33068

>automapper, swagger, serilog, xunit etc


Ну из этого всего только serilog не трогал. А так всякие там newtonsoft, автофак и прочие хз бест ли но практисы пробовал.
А так общее знание бека, тса и плюсов помогает люто. Хочу заспидранить нужную для прохождения собеса теорию и начинать вкатываться.
189 2633498
В общем. Опять я с тупым вопросом.

Вот смотрите. Я таки решил, что нехуй соединению знать че там за протокол прикладной, все такое.

Но вот решил я сделать вот такую бяку:

public abstract class ProtocolContext<TProtocol, TMessage, TContext> :
where TProtocol : IProtocol<TMessage,TContext>, new()
where TContext : ProtocolContext<TProtocol, TMessage, TContext>
{
static readonly TProtocol _protocol = new();

private TContext _context;

public Task<TMessage> Rec() => _protocol.Rec((TContext) this)

public Task<TMessage> Send(TMessage message) => _protocol.Send(message, (TContext) this)
}

И в случае реализации оно выглядит так:
public class MyProtocolContext : ProtocolContext<MyProtocol, MyMessage, MyProtocolContext>
{}

Чет смотрится как говно. И уверен что нарушает какие-нибудь принципы солид.
Особенно если смотреть со стороны клиента, потому что вот эту вот бяку - приходится оборачивать в MyClientProtocolWrapper который уже будет получать MyProtocolContext.

Короче. Может быть у вас есть лучше идеи как это все сделать?
189 2633498
В общем. Опять я с тупым вопросом.

Вот смотрите. Я таки решил, что нехуй соединению знать че там за протокол прикладной, все такое.

Но вот решил я сделать вот такую бяку:

public abstract class ProtocolContext<TProtocol, TMessage, TContext> :
where TProtocol : IProtocol<TMessage,TContext>, new()
where TContext : ProtocolContext<TProtocol, TMessage, TContext>
{
static readonly TProtocol _protocol = new();

private TContext _context;

public Task<TMessage> Rec() => _protocol.Rec((TContext) this)

public Task<TMessage> Send(TMessage message) => _protocol.Send(message, (TContext) this)
}

И в случае реализации оно выглядит так:
public class MyProtocolContext : ProtocolContext<MyProtocol, MyMessage, MyProtocolContext>
{}

Чет смотрится как говно. И уверен что нарушает какие-нибудь принципы солид.
Особенно если смотреть со стороны клиента, потому что вот эту вот бяку - приходится оборачивать в MyClientProtocolWrapper который уже будет получать MyProtocolContext.

Короче. Может быть у вас есть лучше идеи как это все сделать?
190 2633520
>>33498
А ты не думал, что изначальная ошибка в том, что ты пытаешься совместить не совмещаемое? Я в таком случае разделяю когда на разные модули, которые друг о друге ничего не знают.
191 2633548
>>33520
Ну. Думал.
Просто как. Моя идея-то в чем.
Вот в чем.

В конечном итоге оно должно выглядеть примерно так:

var dispatcher = new MyProtocolDispatcher();
var server = new ServerBuilder()
.UseTcpListener(0, 80)
.UseConnectionLimit(100500)
.UseProtocol<MySupperDupperProtocol>()
.UseHeartbeatHandler( async (con, serverContext) => { if(DateTime.Now - con.LastActive > Timespan.FromMinute(1)){
var messagePing = new PingMessage();
var protocol = serverContext.GetProtocol();
await protocol.Send(messagePing, connection);
}
})
.UseConnectionHandler(new ConnectionHandlerBuilder((connection, serverContext) => {
var protocol = serverContext.GetProtocol();
while(connection.IsOpen){
var request = protocol.Rec(connection);
await dispatcher.Dispatch(request, connection);
}
}))
.Build();
await server.Run();

И типа хотим, используем формы, хотим - консолькой, хотим - присобачиваем это к ASP.Net и управляем через веб-интерфейс сервером, который присобачиваем к ASP.Net с его инфраструктурой.
191 2633548
>>33520
Ну. Думал.
Просто как. Моя идея-то в чем.
Вот в чем.

В конечном итоге оно должно выглядеть примерно так:

var dispatcher = new MyProtocolDispatcher();
var server = new ServerBuilder()
.UseTcpListener(0, 80)
.UseConnectionLimit(100500)
.UseProtocol<MySupperDupperProtocol>()
.UseHeartbeatHandler( async (con, serverContext) => { if(DateTime.Now - con.LastActive > Timespan.FromMinute(1)){
var messagePing = new PingMessage();
var protocol = serverContext.GetProtocol();
await protocol.Send(messagePing, connection);
}
})
.UseConnectionHandler(new ConnectionHandlerBuilder((connection, serverContext) => {
var protocol = serverContext.GetProtocol();
while(connection.IsOpen){
var request = protocol.Rec(connection);
await dispatcher.Dispatch(request, connection);
}
}))
.Build();
await server.Run();

И типа хотим, используем формы, хотим - консолькой, хотим - присобачиваем это к ASP.Net и управляем через веб-интерфейс сервером, который присобачиваем к ASP.Net с его инфраструктурой.
192 2633851
Почему петушарпер это всегда соевое быдло?
193 2634042
>>33083

>Ну из этого всего только serilog не трогал.


Еще NLog для верности наверни. Он примерно так же часто как серилог встречается.
194 2634048
>>34042
Надо обязательно прочитать несколько талмудов про логгеры, а то не перезвонят.
195 2634097
>>34048
В 2023 чтобы вкатиться надо обязательно качественно освоить пайплайн из логгирования - выгрузки в Elasticsearch - тренировки GPT модели на поступивших из логов данных.
196 2634325
>>34048
Не, на собесах тебя максимум спросят с какими логгерами ты работал и все. А вот на реальной работе тебя сразу ссаными тряпками погонят, если ты в логгирование не умеешь. А NLog и Serilog - это фактически уже стандарты индустрии.
197 2634347
>>34325

>тебя сразу ссаными тряпками погонят, если ты в логгирование не умеешь


Как только объяснишь нахуй они нужны
198 2634403
Тому создателю шарпа что придумал что 0x00 это int - отдельный (цензура) в (цензура)
199 2634412
>>34403
А чем ещё ему быть, строкой что ли?
200 2634421
>>34412
Байтом конечно же.
В шарпе нет указания что это байт кроме явного каста
201 2634574
>>34347

>Как только объяснишь нахуй они нужны


Когда проебешь транзакцию клиента на пару лямов и в твоей системе не будет и следа от запросов, тебе доступно объяснят зачем нужно логгирование.
202 2634581
>>34421
Логично же. В системе ориентированной преимущественно на x32/x64 все должно по умолчанию в байты каститься. Все для удобства байтоебов.
203 2634682
>>34574
Главное не логировать персональные данные. А то так можно будет проебать уже не пару лямов, а пару лярдов.
204 2634744
>>34574
Для предотвращения такой хуйни у меня проект юзает блокчейн. Повторю свой вопрос - зачем мне логгирование?
205 2634811
Пацаны, как с помощью Json.NET лучше всего десериализовать массив разных объектов?

У тамошних объектов сначала идут общие поля для всех:
Id, Type, Category, Price и т.п.

Type указывает как раз на тип объекта. В зависимости от типа объекта могут быть дополнительные поля.

В C# мне нужно объявить базовый класс и наследующие классы. Но вот как их правильно создать из json? Сначала вручную чекать Type, а потом в зависимости от него создавать нужны экземпляр класса?
206 2634897
>>34744

>блокчейн


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

>зачем мне


Затем, что иди нахуй, вот зачем.
207 2634983
>>34897

>ты в него вообще все говно пихаешь что-ли?


Нет. Как раз таки только биллинг инфу которого потерять нельзя.

>Затем, что иди нахуй, вот зачем.


Причина подрыва?
208 2634986
>>34983

>Причина подрыва?


Нога болит после операции. Вообще всех ненавижу сейчас.
209 2634988
>>34986
На лепесток наступил что ли?
210 2635182
Свичнулся с микросервисов на десктоп. Есть тут хуже меня?
211 2635193
>>35182
Те, кто свичнулся в ручное тестирование.
212 2635252
>>21949 (OP)
Народ, а есть у кого примеры использования Telegram.Bot под Asp.Net, но только не на вебхуках, а с использованием long poling ?
213 2635331
>>34682

Судя по российской практике утечек баз - максимум штраф тысяч 50 лол.
214 2635364
Как редактировать System.Windows.Input.KeyGesture? Это класс с ReadOnly свойствами. Если я заменю на новый класс, то у меня слетят все привязки, а точечно менять свойство Key и Modifiers я не в силах.

И что делать, если я в сеттингах своего приложения захочу поменять хоткей? Как применить изменения без перезагрузки всего приложения?
215 2635369
>>35331
Причём платит тот, чьи данные слили, лол.
216 2635390
>>34811

>В зависимости от типа объекта могут быть дополнительные поля.



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

Джейсон конвертер смотрит этот обджект и парсит его со всеми доступными свойствами.

>дополнительные поля


Поля и статические поля, приватные свойства конвертер вроде пропускает мимо
Чтобы запретить какое-то свойство от парсинга, юзается атрибут [JsonIgnore]
217 2635457
Как хуйню с пика 1 засунуть в TreeView? Итемы могут быть без групп, группы без итемов, а ещё группа может быть вложена в группу, а та в группу, а та...

Через List<object> и темплейты? Или вместо List<object> лучше как на пике 2? Если пик 2, то не выглядит ли он как говно?
218 2635470
>>35364
Все что в голову пришло, это сделать обертку поверх KeyGesture и сделать те же свойства, которые будут ретранслировать свойства из экземпляра KeyGesture. Заодно свойства можно сделать INPC.
Пока не знаю поможет ли это во всех ситуациях, ведь некоторые элементы требуют именно класс KeyGesture.

Разве никому в голову не приходила идея менять хоткеи в рантайме?
Все что я видел — это очистка InputGestureCollection, но это какой-то бред или я чего-то не понимаю. Привязка существует к свойству конкретного экземпляра KeyGesture, очищая InputGestureCollection я этот экземпляр удаляю и биндинг слетает.
219 2635522
>>35457
Когда я делал свое дерево, у меня Group сам по себе был коллекцией. Я юзал MVVM, поэтому Group наследовала ObsrtvableCollection, чтобы можно было биндить. А сам факт добавления в Group чего либо, говорит что внутри собсно есть другие элементы.
Ничего не мешает в эту коллекцию добавить экземпляр новой коллекции Group — так выстраивается иерархия.

По итогу, дереву я скармливал ровно один элемент — Group, который был корнем всей остальной иерархии. Внутри этой корневой папки были дургие папки, а внутри этих папок еще папки.

Если ты юзать MVVM, то в TreeView там есть два темплейта
HierarchicalDataTemplate и DataTemplate. Первый распознает группы, а второй итемы.
Конечно же надо скормить в DataType тип нужного класса, к примеру
<HierarchicalDataTemplate DataType="{x:Type ns:Group}" >
тут твой темплейт
</HierarchicalDataTemplate>

<DataTemplate DataType="{x:Type ns:Item}" >
тут твой темплейт
</HierarchicalDataTemplate>


И после этого автоматом TreeView все распознает.
220 2635546
>>35457
>>35522
Дальше, что это за свойство Group? Родительская группа?
Пиши Parent как для Item, так и для Group. Лучше, чтобы оба реализовали единый интерфейс (назовем его INode) со свойством Parent.

Далее, ты должен переопределить метод Add и Remove в классе Group (который у тебя будет наследовать коллекцию). В этих методах ты будешь автоматом заполнять то самое свойство Parent, или же удалять. Это позволит тебе в дальнейшем не париться по поводу контроля Parent.

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

Ща у тебя группа и итем это совершенно не родственные элементы. А должно быть так, что (возвращаясь к началу поста) все элементы иерархии в основе своей ноды (INode). Тогда ты сможешь скармливать своей группе новые элементы, если они вдруг появятся в будущем.
203048.jpg512 Кб, 1044x1024
221 2635563
>>35457

>Пикрил 2, имя базового класса



I have a Item, I have a Group
Ammm...

>ItemOrGroup



I have a ItemOrGroup, I have a HierarchyElement
Ammm...
ItemOrGroupAsHierarchyElement

I have a YourMother, I have a Sana, I have a Class
Ammm...
ItemOrGrouprOrYourMotherOrSanaAsHierarchyElementAsClass

Назови базовый элемент нодой.
image.png14 Кб, 381x303
222 2635645
>>35563

>ItemOrGrouprOrYourMotherOrSanaAsHierarchyElementAsClass


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

>>35522
>>35546
Item и Group для примера, настоящие классы называются по-другому но наверняка всё равно тупо, но я пытаюсь... и находятся в другом проекте, там уже всё сделано (ну или почти всё), а хуйня на втором пике чтобы было понятно.

>Дальше, что это за свойство Group? Родительская группа?


Только как объект для группировки объектов класса-прообраза Item. Ни для чего больше. Типа как папки. В Item свойство Group вообще можно убрать.

>Пиши Parent как для Item, так и для Group. Лучше, чтобы оба реализовали единый интерфейс (назовем его INode) со свойством Parent.


>Далее, ты должен переопределить метод Add и Remove в классе Group (который у тебя будет наследовать коллекцию). В этих методах ты будешь автоматом заполнять то самое свойство Parent, или же удалять. Это позволит тебе в дальнейшем не париться по поводу контроля Parent.


Item и Group находятся в законченном проекте (библиотеке). Я не сомневаюсь, что он говно, но какой есть. И более того - мне кажется, что там это будет лишнее.
223 2635672
>>35645

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


Что пилишь?
224 2635685
>>35672
Пока что хочу записную книжку. Пробую так и сяк, сначала пытался смотреть, как делать "правильно" (домены и всё такое), но вопросов появлялось овердохуя и забил, стал делать как придумается. Херовастая память и постоянно хуевое состояние из-за недосыпа и неудобного рабочего места на работе, и идея записной книжки появилась задолго до того, как увлёкся программированием.
Стикер255 Кб, 512x509
225 2635700
>>35685

>стал делать как придумается


Сейм щит. Переделываю свой проект третий раз, пока проект не стал хоть как-то походить на "как надо".

>>35645

>Типа как папки.


Т.е. родительской папки?

> И более того - мне кажется, что там это будет лишнее.


Кхм ... это тебя щас кажется, а потом мы имеем вот это

>Я не сомневаюсь, что он говно, но какой есть.


... ибо прошлый проект ты пилил абсолютно по такому же принципу.

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

По двойному клику условной папки, ты выводишь содержимое папки не далее одного уровня. Понимаш? Т.е. список Groups и Items. Всё.
Можно добавить свойство IsExpanded, чтобы хранить все раскрытые ноды.
226 2635713
>>35685
Алсо, ты знаешь что такое рекурсия?
227 2635719
>>35700
Там тэги (Item) и их группы/наборы. Так что выводить надо всё будет всё. А ещё там должны быть чекбоксы у каждого тэга и группы - у тэгов для присвоения к записям и потом фильтрации, у групп - чтобы включать/отключать всё, что вложено.

>>35713
Вроде да.
228 2635757
>>35719
Ну тогда только рекурсия.

Функция должна сканировать один уровень вложенности, потом применяться к каждой найденной папке для поиска вложенности, пока не дойдет до упора.

Смотри алгоритмы поиска в глубину и поиска в ширину.
изображение.png137 Кб, 1928x1048
229 2636306
Как вот тут добавить новую строку к таблице так, чтобы можно было таблицу сохранить и применить изменения к этой программе? А то при попытке сохранить просто предлагает сохранить файл в любом месте, а не изменить именно открытый файл.
230 2636610
>>36306
Учись делать миграции, code-first это лучшее что придумало человечество
231 2636646
Какой же ссаный этот ваш KeyGesture.
Мало того, что у него ридонли свойства, так он еще не поддерживает простые хоткеи, уровня "B", или "Ctrl+B".
Если первое еще как-то логично т.к. при наборе теста в каком нибудь текстбоксе сработает хоткей, то "второе не является жестом".

Что такое жест? Нахуй он нужен? Или это та самая блядская система VS уровня "Ctrl+B, Ctrl+D", которую будет нажимать только солевой наркоман?
232 2636663
>>36658 (Del)
Как там на джаве с новыми проектами дела?)
233 2636665
>>36664 (Del)
Но трясешься тут ты иначе зачем коупинг выше? Сиди спокойно на своей джаве и фикси баги. Когда совсем время прижмет и кабан заставит тебя переписывать многолетнее джава легаси на дотнет то просто уйдешь в другой энтерпрайзный загон догнивать
234 2636667
>>36666 (Del)
Слит. Также как слили джавовых бездарей в такскоме и тиньке, переписав их обмякшее под нагрузкой джава дерьмо на дотнет)
235 2637053
>>36658 (Del)
1.1. Используй ::.
1.2. Кучу раз уже обсуждали почему Олман пизже чем K&R. И всегда основной аргумент приверженцев жаба-стиля: "Ряя-яя. Байты дорогие. Лишняя строчка глаза режет".
1.3. Ну сокращение и что. Ты только что плакался, что тебе лишняя строка глаза режет, но всякие extends/implements типа норм.
1.4, 1.5 - пустые доебы уровня скобок, даже не до семантики, а до общепринятого кодстайла языка.

2.1. Никогда не понимал, горения жабаебов с get/set. Максимально удобная штука позволяющая нормально инкапсулировать логику внутри класса.
2.2. Твои сведения устарели. Уже года 3 как есть. Правда уверен, что тут же будет высер на тему "ваши рекорды, совсем не рекорды", но да и похуй на тебя.
2.3. Лень разбирать что это в джаве, но подозреваю, что есть. В шарпе дохуя всего связанного с многопоточностью, включая всякие семафоры, локи-хуеки и прочую лабуду. Так что и такая хуета думаю найдется. Плюс в джаве до сих пор нет нормального аналога async/await, а это по моему намного сильнее перевешивает.
2.4., 3. 4.
Ты там немчинского обсмотрелся что-ли? Как там в 2016-м? Даже коментировать такую хуйню не буду.
236 2637304
Установил VS Code+.NET+C#. Смотрю уроки. Вот мои плоды общения с терминалом:

PS C:\Trash\С#\project> dotnet --version
7.0.201

PS C:\Trash\С#\project> dotnet new console
При создании этого шаблона будут внесены изменения в существующие файлы:
Перезаписать ./project.csproj
Перезаписать ./Program.cs

Чтобы создать шаблон в любом случае, выполните команду с параметром "--force":
dotnet new console --force

Дополнительные сведения о коде выхода см. на странице https://aka.ms/templating-exit-codes#73
PS C:\Trash\С#\project> dotnet new console --force
Шаблон "Консольное приложение" успешно создан.

Идет обработка действий после создания...
Восстановление C:\Trash\С#\project\project.csproj:
Определение проектов для восстановления...
Все проекты обновлены для восстановления.
Восстановление выполнено.

Никаких файлов в папке создано не было. Что делать?
237 2637328
Насколько говеное решение вот так вот делать?
238 2637343
>>37328
Ну. Т.е. я поясню че я делаю.
У меня есть протокол. Вернее несколько.
В протоколе - есть сообщения. Все вроде понятненько.

Ну дык вот. Меня - остоебенело, что если в протоколе китайцы добавляют новый тип сообщения - приходится лезть в огромный switch и там создавать обработчик. Накидывать ему сервисы, что нужны для работы, вот это вот все.
Я решил, что будет удобнее, если будет просто ProtocolController, в котором я просто напишу новый метод по обработке сообщения, и оно типа само вот так вот "зерегистрируется".
Но конечно смущает, что 1. рефлексия. 2. Само решение - кастрированное, оно предполагает, что ответ я буду из контроллера слать, а параметры метода контроллера - будут содержать только сервисы, которые нужны мне для работы.
239 2637421
>>37385 (Del)
Пошёл нахуй.
240 2637588
Посоны, а во что оборачивать работу с API?
К примеру, мне через IMAP нужно загрузить загрузить файлы с почты и показать юзеру папки с почты.
Это все в отдельный класс запихнуть и использовать как репозиторий или прям в презентере весь функционал реализовать?
Тоже самое с яндекс диском, нужно загружать файлы на диск, можно, конечно, напрямую в презентере все написать, но меня как-то коробит от этого.
.png12 Кб, 285x448
241 2637602
>>37588
Вообще не понял о чем ты.
Типичная структура современного проекта на шарпе, примерно следующая
Работа с апи - это просто вьюшка в старых терминах, т.е. тебе приходит запрос на роут, ты его передаешь в сервис, потом, если надо, от сервиса результат оборачиваешь в DTO и отдаешь клиенту.

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

//afterCreate.sql
INSERT into dbo.Sklad("Название", "Масса (кг)", "Объем (М²)", "Количество (шт)")
VALUES
('Говно', 1, 10, 1000)

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

Обернуть все в IF DB NOT EXIST и радоваться. При первом старте - все заполнишь как тебе надо.

Деды так делали, и ты так делай.

А в контексте EF - можешь просто modelBuilder.Entity<Govno>().HasData(...), но это не тру и вообще, для пидоров
243 2637713
Вопрос на миллион долларов.
Если я "Вдохновляюсь" теперь-то открытым кодом майков в закрытых проектах, могут ли от этого быть проблемы?
Типа блин. Вот иногда же смотришь как у них там че сделано, задумываешься, чому не делать так же, раз уж они так делают.
Ну, собственно, некоторые куски из памяти восстанавливаю почти 1 в 1, пусть и для своего случая.
Смущает.
244 2637812
>>37713

>Смущает.


Смущаться будешь когда тебя за дрочкой на что-нибудь непотребное застукают. А в программировании вся суть состоит в том, что нехуй дважды делать работу которую уже сделали. Если кто-то уже сделал что-то хорошо, то возьми это и используй, если можешь - улучши.
Если тебя смущает правовой вопрос. То в РФ ты со своим кодом нахуй никому не нужен. Здесь тебя в первую очередь выебут за нелицензионный автокад или 1С (даже если у тебя их нет, кек). А за рубежом прав тот у кого больше бабок.
245 2637828
>>36658 (Del)

>2.3. Отсутствие виртуальных тредов.



Так их и в джаве нет, то что есть к проду не готово
246 2637845
>>37828
Еще смешнее с несуществующими виртуальными тредами джавы, что оракл проигнорировал комьюнити, которое десять лет потратило на запил годных инструментов и библиотек для реактивного программирования. Типа им виднее какой путь лучше
247 2637909
>>36658 (Del)
1.1 ну отступы можно не делать, хотя я вот все равно делаю. привычка (при этом на остальных языках отступы не делаю)
1.2 поддерживаю.
1.3 чушь. слова это уродливо. сравни бейсик и шарп. бейсик нереально читать ибо глазу легко понять символ, а вот слово нужно читать. Поэтому и на дорогах знаки это символы, а не текст (текст только там, где без него нельзя)
1.4 как раз наоборот - знаешь что обращаешься к интерфейсу и это правильно. Подчеркиваешь что тебе неважно кто там, важно что он умеет.
1.5 фломастеры. бесит только психов. сам пишу на многих языках и в каждом языке свои правила и корежит читать когда левые правила несут в язык.

2.1 так то ломбок принесли ибо даже жависты (которые законсервированные динозавры) стали ныть что "ну сколько можно писать getXXX/setXXX в 21 веке). И семантика аннотациями имхо более уродлива чем гет/сет.
2.2 ты из какого года пишешь?

2.4 ВИНформс прибит к вин (удивительно )))
248 2638000
>>37328
Нахуй вы это включаете.
249 2638086
>>38076 (Del)
Что за хрень ты несешь
250 2638125
>>36658 (Del)

> Неймспейсы. Полный пиздец. Рассинхрон с пакетами


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

> лишние отступы


Из какого года ты пишешь? Уже года 3 как - можно без отступов неймспейсы делать.

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


Как и джаве с ее пакетами, лол.

> Перенос { на новую строку


Вкусовщина. При этом - хочешь, используй Mono-стайлгайд, они - как раз не переносили.

> IZalupa как название интерфейса по дефолту


Да, ведь лучше у тебя будет интрефейс List, а потом дефолтная имплементация: ListDefault. Да? Да? Да? Да? Лучше будет IList и как человек ты будешь использовать List

> Названия методов с большой буквыIZalupa как название интерфейса по дефолту


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

> Наличие бойлерплейта


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

> Отсутствие record


Из какого года пишешь? Есть рекорды.

> Отсутствие виртуальных тредов


Не помню про это. Может быть уже съебался, когда оно появилось.

> Прибитость гвоздями к винде


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

>Экосистема. У петушарпа позорная экосистема


Вот, единственный реально важный доеб. Экосистема в целом - в джаве в разы лучше. На выбор и системы сборок разные, и куча пакетов под любой вкус.
Другое дело, что это порождает ситуацию, когда: проект еще под ant сделали, чел что писал его - охуеть преисполнился и съебался в закат, теперь никто из новых сотрудников - не в состоянии собрать это говно. На шарпе - я открываю проект написанный в 2003м, студия мне предлагает обновить, конечно оно сразу не собирается, но часик посидел, поправил где надо - все, оно собирается и работает. В джаве - перенести что-то древнее, это просто такой-то экспириенс, что ебись оно в сраку, кажется что проще переписать эти ебучие 200к строк на шарп и не париться больше.

> Свобода и распределённость


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

А теперь - мои притенении к жаве.
1. В файле - один нормальный класс. Просто 11/10 решение. Из-за этого вырастают уродливые решения, когда в класс - вкалдывают еще классы, потому что - блядь, ну, кхем, кхем, ну, АРХИТЕКТУРА, кхем.
2. Куча бойлерплейта. Каждый новый проект - начинается либо с подтягивания библиотек с этим самым бойлерплейтом, либо с реализации хуйни четырех пидорасов.
3. Отсутствие лямбд. Тут - я могу спиздеть. Когда я сваливал - не было. Было пиздец как охуенно делать класс на каждый чих. Но вроде читал, что лямбды появились
4. Отсутствие async-await. Как же охуенно - тредпулом пользоваться, пиздец просто, дайте мне тредпул, и колбек в него положить. Уууу. Блядь. Тредпул наше все! А если мне нужно бекграунд таску намутить - дайте мне Runnable. Уууу. Как же бе Runnable жить-то?
5. Зоопарк. Из-за этого зоопарка - в принципе ты не соберешь проект без IDE. Уже писал выше, как охуенно, когда дед, который знал, как собирать - съебался в закат, и больше никто в компании - не знает, как собрать то что он писал, чтобы пофиксить баг или фичу впилилть.
6. Тяжеловесность. Это просто пиздец. Я помню, как на мине писал сервер для джавы. 5к коннектов - ХУЯК, блядь, 4 гига вынь да полож. На шарпе - тасками такой же сервер - для 10к соединений 200МБ жрет и живет спокойно.
7. Без коммунити - ты в принципе не способен чет нормальное делать. Стандартный набор того что есть - крайне ущербен. В шарпе - у тебя уже есть почти все, что нужно для нормальной жизни из коробки.
250 2638125
>>36658 (Del)

> Неймспейсы. Полный пиздец. Рассинхрон с пакетами


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

> лишние отступы


Из какого года ты пишешь? Уже года 3 как - можно без отступов неймспейсы делать.

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


Как и джаве с ее пакетами, лол.

> Перенос { на новую строку


Вкусовщина. При этом - хочешь, используй Mono-стайлгайд, они - как раз не переносили.

> IZalupa как название интерфейса по дефолту


Да, ведь лучше у тебя будет интрефейс List, а потом дефолтная имплементация: ListDefault. Да? Да? Да? Да? Лучше будет IList и как человек ты будешь использовать List

> Названия методов с большой буквыIZalupa как название интерфейса по дефолту


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

> Наличие бойлерплейта


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

> Отсутствие record


Из какого года пишешь? Есть рекорды.

> Отсутствие виртуальных тредов


Не помню про это. Может быть уже съебался, когда оно появилось.

> Прибитость гвоздями к винде


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

>Экосистема. У петушарпа позорная экосистема


Вот, единственный реально важный доеб. Экосистема в целом - в джаве в разы лучше. На выбор и системы сборок разные, и куча пакетов под любой вкус.
Другое дело, что это порождает ситуацию, когда: проект еще под ant сделали, чел что писал его - охуеть преисполнился и съебался в закат, теперь никто из новых сотрудников - не в состоянии собрать это говно. На шарпе - я открываю проект написанный в 2003м, студия мне предлагает обновить, конечно оно сразу не собирается, но часик посидел, поправил где надо - все, оно собирается и работает. В джаве - перенести что-то древнее, это просто такой-то экспириенс, что ебись оно в сраку, кажется что проще переписать эти ебучие 200к строк на шарп и не париться больше.

> Свобода и распределённость


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

А теперь - мои притенении к жаве.
1. В файле - один нормальный класс. Просто 11/10 решение. Из-за этого вырастают уродливые решения, когда в класс - вкалдывают еще классы, потому что - блядь, ну, кхем, кхем, ну, АРХИТЕКТУРА, кхем.
2. Куча бойлерплейта. Каждый новый проект - начинается либо с подтягивания библиотек с этим самым бойлерплейтом, либо с реализации хуйни четырех пидорасов.
3. Отсутствие лямбд. Тут - я могу спиздеть. Когда я сваливал - не было. Было пиздец как охуенно делать класс на каждый чих. Но вроде читал, что лямбды появились
4. Отсутствие async-await. Как же охуенно - тредпулом пользоваться, пиздец просто, дайте мне тредпул, и колбек в него положить. Уууу. Блядь. Тредпул наше все! А если мне нужно бекграунд таску намутить - дайте мне Runnable. Уууу. Как же бе Runnable жить-то?
5. Зоопарк. Из-за этого зоопарка - в принципе ты не соберешь проект без IDE. Уже писал выше, как охуенно, когда дед, который знал, как собирать - съебался в закат, и больше никто в компании - не знает, как собрать то что он писал, чтобы пофиксить баг или фичу впилилть.
6. Тяжеловесность. Это просто пиздец. Я помню, как на мине писал сервер для джавы. 5к коннектов - ХУЯК, блядь, 4 гига вынь да полож. На шарпе - тасками такой же сервер - для 10к соединений 200МБ жрет и живет спокойно.
7. Без коммунити - ты в принципе не способен чет нормальное делать. Стандартный набор того что есть - крайне ущербен. В шарпе - у тебя уже есть почти все, что нужно для нормальной жизни из коробки.
251 2638126
>>38076 (Del)
Чувачок, твой оригинальный лист 'недостатков' ничем от "нинужна" и "яскозал" не отличается. Так что завали и отползи нахуй.
252 2638147
Почему событие KeyDown не хочет детектить сочетание клавиш "Ctrl+Y"? Событие вообще не происходит.

Просто Y детектит, так же детектит "Ctrl+Shift+Y", а это не хочет.
253 2638241
>>38147
ну может кто то его перехватывает раньше.
лови preview
254 2638269
>>38147
>>38241
Бля, этот текстбокс, а у него куча своих внутренних хоткеев. Понял, когда не отработал Delete, хотя на других элементах точно работал.
255 2638322
>>38279 (Del)
Из жавы куда-то делись конструкторы? Та не пизди.
А если хочешь прокидывать зависимости без использования конструкторов в шарпе - берешь и юзаешь рефлексию. Никто не мешает.
Опять же, другое дело, что код джавовский, для ньюфага из-за всей этой мумба-юмба магии становится этой самой магией. А стектрейс при ошибке - так вообще в джава - это рофл какой-то.
Или искать ошибку, когда у тебя метод, если верить ИДЕ - вызывается 0 раз, но блядь, вот почему-то вызывается, ебись как хочешь)))

Зато при упоминании свойства - такой вот сектант либо зашипит про ненужность, либо магический атрибут вспомнит. Забывая, что сама по себе жава - тот еще кастрированный кусок добра.
Я бы понял, если бы ты котлин вспоминал. Он - да, реально качественный шаг вперед. Но джава. Это рофл какой-то же. Медленная, прожорливая, еще и в своей основе - кривая в дизайне, а потому - кривоту - приходится преодолевать кучей костылей.
256 2638344
>>38337 (Del)
Хуй пойми че ты сказать хочешь.
Любая магия в программировании - зло. Ты потом заебешься отлаживать и искать причину того, что у тебя чет в рантайме падает или течет как сука. И самое веселое, когда это происходит из-за чужой магической приблуды.
257 2638356
У меня есть апи, его дёргает клиент(общий, он потом рассылает в клиентское приложение данные). В базе есть какие-то пользователи. Нужно сделать, чтоб для каждого пользователя дергалось апи в определенный интервал времени. К примеру, для одного пользователя каждый день в 9 утра. Я могу сохранять этот интервал в базе, но как понять, что именно в это время клиенту нужно стучать в апи? Не каждую же минуту чекать бд. Мне в голову сразу пришло сохранять это в словаре на клиенте и условно каждую минуту проверять, есть ли в это время какие-то пользователи и если есть, то стучать в апи к этому пользователю. Но я уверен, что есть способ правильнее.
Посоветуйте в какую сторону гуглить
258 2638369
>>38356
Quarz - библиотека для запуска периодических задач (jobs).
Для контроля времени запуска задач можно использовать Cron Expressions. Например в твоем случае для "запуск каждый день в 9 утра" крон будет выглядеть вот так "0 0 9 ?". Как хранить в бд решай сам. Можешь непосредственно в таком виде хранить или преобразовывать непосредственно перед настройкой джобы.
259 2638371
>>38355 (Del)
Когда у тебя над методом/полем висит магический атрибут, и он за тебя чет там делает. А в широком смысле - любая хуйня, которая делает что-то неявно, скрыто от твоего взгляда и без возможности повлиять на это без жопной боли.

В шарпе - такая магия - это роутинг запросов.

В жаве - это спринговская хуйня и максимально - CrudRepository<Govno, Zalupa>.
.png166 Кб, 1920x1050
260 2638374
В общем. Я послушал джава-господина и буду ближайшее время кодить с их стайл-гайдом в плане скобок. Посмотрим че выйдет.
image.png1 Кб, 100x29
261 2638375
>>38369

>вот так "0 0 9 ?"


Сорян, символы сожрались. На картинке правильный вариант.
262 2638378
>>38374
А я несколько лет пишу на жабе и плююсь от принятого здесь способа расстановки скобочек. Был бы у меня выбор, расставлял бы их как в шарпе.
263 2638393
>>38389 (Del)
Не выёбывайся, фигурные скобки с новой строки не проходят ревью, и хуй что я сделаю.
Я бы и интерфейсы называл с I, всяко лучше, чем уродливые Impl.
264 2638401
>>38397 (Del)
Вроде джавист, а такую хуйню несёшь, аж стыдно за коллег по профессии.
265 2638412
>>38386 (Del)
Не только про них, но и них в том числе.

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

Я бы вообще, будь моя воля, большую часть плюшек и шарпа бы поубирал, типа асинк-эвейтов, всяких неявных захватываний переменных в лямбдах и прочего мусора. Вот был бы си, но без проблем с безопасностью, я бы всеми силами его проталкивал где только можно. Максимум, который нужно в си добавить - классы, женерики, импорты-экспорты человеческие. Собственно - все.
266 2638441
>>38369
Посмотрю, спасибо
267 2638458
>>38369
То что нужно, спасибо
268 2638465
>>38356
Альтернативой Quartz - Hangfire. Мне оно больше понравилось. Проще в настройке, работает отлично, есть дашборда из коробки.

Ну а если тебе не хочется тянуть чужую систему, то можно было бы простенький велосипедик.
Дергать базу раз в минуту - ничего плохого нет, что Hangfire что Quartz - делают именно это, просто за тебя. Базы сейчас - быстрые что пиздец и рассчитаны на тысячи-миллионы запросов чтения в секунду.
Но если не хочется каждую минуту.
Тебе просто нужно сделать сущность очереди, в которой ты рассчитываешь следующее время для старта задачи и метку добавлять. При инициализации сервиса - проверяешь, есть ли там задачи, которые надо было выполнить с прошлого раза. Если нету - ищешь запись с самой близкой меткой времени, спишь до этого времени, потом - достаешь все что тебе надо выполнить - выполняешь, обновляешь время следущего запуска, кладешь в базу, находишь блиджайшую метку времени к текущему времени - и спишь до нее. Повторяешь пока приложение не завершится.
Примерно так выглядеть запись будет:
pubic class Job{
public int Id { get; set; }
//чтобы когда грохнули юзера - все его джобы - ебнулись вместе с ним
public User User { get; set; }
// апи которое дергаешь
public string Api {get; set; }
//настройка которую будешь парсить чтобы рассчитать время запуска
public string Settings { get; set; }
//время последнего фактического запуска
public DateTimeOffset LastStart { get; set; }
//время следующего рассчетного запуска
public DateTimeOffset NextStart { get; set; }
//чтобы можно было отследить че там умерло в процессе и перезапустить если надо
public JobStatus Status { get; set; }
}
269 2638469
>>38454 (Del)
Если ты про си/плюсы, то я на них и так работаю, лул.
Просто такое дело, что по долгу службы - я вынужден не только на си писать. Их - чтобы под устройства писать ВПО, чтобы писать всякие конфигураторы устройств, серверы по сбору данных и прочее - надо таки чет более высокоуровневое.
А еще я фронтенд на ангуляре пишу.
Да. Такие вот дела. Да.
270 2638571
>>21949 (OP)
Зачем некоторые тащат помойный grpc в ненагруженные сервисы, куда прилетает максимум 5-10 запросов в минуту?
Ладно бы еще тулинг и прочая обвязка в виде мониторинга и прочих хуиток была норм. Но там все через жопу и банальное логирование делается через три пизды. Всякие моки-тесты - хуй напишешь. Нахуя страдать, шарпаны?
271 2638579
>>38571
Так на раннем этапе - ты ж не знаешь, че там будет нагружено, че нет.
Плюс - делать зоопарк из технологий тоже не хочется: Тут мы рестом, тут grpc, а тута - вообще свой протокол придумаем, чтобы охуеть как круто было.
Плюс, бананльно, это может быть прописано в требованиях к сервису - потому пиши.
272 2639003
>>38579

>Так на раннем этапе - ты ж не знаешь, че там будет нагружено, че нет.


Про преждевременную оптимизацию что-нибудь слышал? Зачем себе усложнять жизнь, если тебе неизвестно, что сервис в принципе будет нагруженным? И да, сервис уже давно в эксплуатации - 3 года. Количество запросов не выросло.
273 2639162
Почему событие dataGridView1_CellValueChanged вызывается только когда ячейка изменена И мышка кликнула по другой ячейку, а не сразу когда произошёл ввод?
274 2639175
>>39162
Тебе нужно такое событие, которое будет генерироваться при нажатии каждой кнопки?
275 2639180
>>39175
Нет, только когда произошёл ввод в ячейку существующей строки.
276 2639184
>>39180
Как определить, что ввод закончился, если клик по другой ячейке тебе не нравится?
277 2639191
>>39184
Мне было бы достаточно того, что ввод начался.
278 2639214
>>39191
И ты предлагаешь на каждый инпут - дергать событие?
Просто обычно - в датагриде - при изменении значения - сразу сохраняют в базу/отправляют какому-нибудь контроллеру, который в базу сохраняет/вью модельке отправляют, которая отдает модельке, которая в базу сохраняет. Ебатория будет та еще.
Но вообще, тебе никто не мешает свое событие намутить как ты хочешь.
.png92 Кб, 256x256
279 2639220
А про мою фигню никто так ничего и не сказал(((
>>37328
280 2639242
У меня аномалия такая есть. Когда я вношу в таблицу значение кликаю по другой ячейке той же строки и нажимаю "обновить", то ничего не сохраняется, а если по ячейке другой строки, то всё сохраняется. В чём же проблема? Никак понять не могу. Нужные строчки отрабатывают, я такое проверяю через мессагебокс.
281 2639248
>>39242
Тут никто винформсы не знает.
282 2639263
>>39248
Я знаю, но мне лень.
283 2639268
>>39242
Ох ебать. Может есть какой-то redraw? Должна быть какая-то функция принудительного обновления UI. Именно поэтому нежелательно использовать контролы в качестве хранилища данных — они медленно обновляются или не успевают обновиться.
Месседжбокс не стоит юзать, он запускается с задержкой, он перерисовывает интерфейс или меняет фокус окна, короч с ним часто все работает. Попробуй Debug.WriteLine("Сообщение") предварительно открыв Окно Интерпретации в Visual Studio.

В WPF, если юзать MVVM, то у текстбоксов и вероятно итемов есть так называемый параметр UpdateSourceTrigger.
К примеру флаг UpdateSourceTrigger=PropertyChanged заставляет обновлять свойство при каждом изменении, а UpdateSourceTrigger=LostFocus обновляется только при потере фокуса (он по-умолчанию).

А еще нах ты Delete срешь в каждой строке? Разве она не должна быть рядом с кнопкой "Обновить"?
284 2639269
>>39263
Ты в курсе, что из-за лени написал в 50 раз больше строк?
285 2639272
>>39269
Больше чего? Точно меньше модного WTF.
286 2639282
>>39268
У меня, оказывается, приобновлении данных в БД не отрабатывает sqlDataAdapter. Только при добавлении и удалении строк работает. Я ХЗ, что делать даже. Сижу ищу решение, и всё как-то не то.
287 2639283
>>39272
Даже если не заморачиваться с автогенерацией столбцов, то в втф понадобится ровно 7 строк для привязки каждого столбца (если не юзать хитровыебанные стили). И ты можешь настроить поведение обновления: хош при каждом вводе символа, хош при переключении на другую ячейку. Там даже кнопка "Обновить" не понадобится.
2023-03-1320-03-21.png18 Кб, 1109x480
288 2639290
>>39282
Пчел ... в финформсах ровно тоже самое. Она строчка, чел. Одна строчка.

https://metanit.com/sharp/adonet/3.1.php
289 2639291
M e T a N i T
290 2639295
>>39282
Я не знаю sql, а в чем отличие метода Fill от Update?
2023-03-1320-14-48.png1 Кб, 319x63
291 2639299
>>39295
А вот еще в датасете нужно обязательно применить изменения
292 2639316
>>39242
Я бы тебе помог, но не буду принципиально, пока ты не перепишешь нормально.
293 2639327
Че делать, если при тестировании нагрузки я получаю:
The connection pool has been exhausted, either raise MaxPoolSize (currently 100)

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

Ну и да. Проблема не только при большой нагрузке встречается, но и при оч долгой работе сервера, допустим, без велосипеда с очередью - через полгода аптайма - оно просто упало нахуй.
Просто при большой нагрузке - оно быстро вылетает.
294 2639329
>>39295
Fill выводит данные из БД, а update вводит их в БД.
295 2639332
>>39327
Ну. Т.е. в чем проблема собственно.
При ебейшей нагрузке - npgsql - создает кучу коннектов.
Но природа EF и npgsql такова, что контексты БД - создают эти коннекты на свой поток. И потом, как нагрузка спала - используется один-два реальных коннекта, остальные - просто висят, но может случиться страшное - и родится новый тред, который попробует новое соединение открыть, и вот тогда - сразу пизда.

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

В тырнетах - я чет единственное предложение что вижу - ставить приблуду посредине между приложением и БД, которая будет оборачивать кучу контексто в один коннект и уже через него работать. Но быстрый гуглеж говорит, что приблуда платная, а я на это идти не хочу в данный момент.
b18cc3932a57c36525efd63e95222ed2.jpg77 Кб, 900x900
296 2639357
Вопрос по биндингам.

Допустим элемент страницы биндится к дата контексту этой страницы.

И вот я меняю страницу на новую и я не хочу, чтобы старая продолжала обновляться. Я беру и присваиваю null в DataContext. Что там под капотом? Автоматом как-то происходит анбиндинг или что?
.png19 Кб, 514x405
297 2639386
Как правильно описать примерно следующую логику?
Студия просто говорит что код - говно, ставит 50 баллов в индексе удобства поддержки. Портит всю статистику.
А как иначе - хз.
изображение.png190 Кб, 610x714
298 2639411
299 2639421
>>39411
Бляя ща опять начнётся
300 2639429
>>39411
Ты поехавший сектант.

>int func() {


>}


Смотрится логично, т.к. начало не у пустой строки.
301 2639430
>>39429
А вот и поехавший сектант прибежал.
302 2639431
>>39430
Я тебя первым объявил.
303 2639434
>>39431
Зато я первым скажу, что ты душнила.
Как известно, душнила тот, кого первым назовут душнилой
304 2639460
>>39386
- нет модификатора доступа
- не возвращай void
- m, u - здесь тебе не C, за такое пиздят.
- user.Login - Если user это поле класса, то либо this.user, либо, что лучше - _user
- блок связанный с city - вынести в отдельный сервис.
- алсо, если метод OnAuthMessage, является не методом сервиса, а методом какой-нибудь модели, то обращаться из него в бд, вообще пиздец.
- respoce - что это? (подозреваю, что должно быть response)

Плюс еще возможно до обработки ошибок доебаться, но хер знает, может она у тебя снаружи прикручена, то х.з.
305 2639462
>>39357
бамп вопросом
306 2639467
>>39460
Проверил эти ваши метрики у себя тоже.
79 баллов это норм? Картину портит Serilog, лол.
307 2639486
Чтобы поменять цвета comboboxа в wpf нужно написать ~300 строк кода, они это серьезно?
308 2639515
>>39486
Да. Они рукожопы.
309 2639546
>>39486
Ну вот такие минусы полной кастомизации, которая взамен дает тебе возможность переделать комбобокс как угодно. Ну а если ты не собираешься переделывать стиль целиком, то нах тебе впф?
310 2639716
>>39546
кастомизация тут не причем. тут РУКОЖОПСТВО разрабов, которые в дефолтный стиль ХАРДКОРЯТ цвета

в итоге получается тупость
в вин 7 ты допустим меняешь цвет выделения с помощью банального задания в ресурсах контрола цвета с нужным кеем
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
а в вин 10 это не работает уже (или же вообще никогда не работало даже в вин 7) и нужно приседать с бубном.
И подключать триггеры (если повезет), а если не повезло, то... ради замены одного цвета нужно перегружать ВЕСЬ шаблон с триггерами и всем этим.
311 2639718
>>39716
fix: дефолтный стиль -> дефолтный шаблон
312 2639734
>>39716

>кастомизация тут не причем. тут РУКОЖОПСТВО разрабов, которые в дефолтный стиль ХАРДКОРЯТ цвета


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

>И подключать триггеры (если повезет), а если не повезло, то... ради замены одного цвета нужно перегружать ВЕСЬ шаблон с триггерами и всем этим.


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

Триггер не должен менять свойство конкретного элемента в контроле, если только он не интегрирован в самом шаблоне.
313 2639751
>>39734
Ах да, еще все стили для комплексных контролов — это сборная солянка из примитивных контролов, поэтому жесткий биндинг свойств во-первых бессмысленно переопределяет стиль, а во-вторых добавляет тебе лишней работы по контролю всего зоопарка стилей.

В большинстве случаев я меняю стиль TextBlock и мне не надо париться с прописыванием стиля в других элементах, где он встречается. Но это касается для случаев, когда ты меняешь полностью тему, а не какой-то конкретный контрол. По факту у меня словарь со стилями для всех элементов.
изображение.png29 Кб, 458x299
314 2639833
Здравствуйте, есть вот такой метод, что делать если не получилось получить список валют и я попал в блок catch? Добавить в лог и...вернуть null, чтобы программа продолжила работать? Или как тут лучше сделать?
315 2639840
>>39734
в большинстве - не значит всегда
в итоге банальное превращается в портянку
https://stackoverflow.com/questions/16819577/setting-background-color-or-wpf-4-0-listbox-windows-8/16820062
316 2639843
>>39833
добавить в лог и пробросить исключение. Его поймает тот, кто знает что с ним делать.
317 2639847
>>39843
Проект в соло делаю, поэтому спрашиваю
318 2639864
>>39847
Если не знаешь что делать с исключением на каком то уровне - значит ты должен либо не ловить там, либо пробросить дальше. И так поднимаешься пока не попадешь в место где знаешь что с ним делать.
Даже если это на самом верхнем уровне или вообще нигде (fail fast подход)
319 2639867
>>39864
Понял, спасибо
320 2639908
>>39867
То есть следуй правилу "я не знаю что делать с исключением - пусть разбираются выше".
Поэтому на этих уровнях catch и не нужен. Исключения
1 ловим, логгируем и кидаем дальше
2 ловим, добавляем Data и кидаем дальше
3 граница контекста - ловим и оборачиваем в новое.
321 2639915
>>39847

>Проект в соло делаю, поэтому спрашиваю


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

Но есть функции, которые в принципе выдают исключение в качестве одного из ответов, такие исключения никуда не пробрасываются и даже не пишутся в лог. К примеру парсер цвета. Пока пользователь набирает условное значение #bb6c8a, парсер будет выдавать исключение и это не должно засирать лог.

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

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

>Добавить в лог и...вернуть null


Зависит от того насколько критична ошибка.
Можешь в лог, можешь в UI написать пользователю, что возникла проблема, можешь рамочку подсветить.

Если твоя функция НЕ обрабатывает данные в процессе набора текста, то она вообще не должна обрабатывать исключения. Ибо обработав исключение что она сделает? У тебя моментально возникает этот самый вопрос "а что дальше?". Родительский метод запишет твой null в базу данных или отменит операцию записи? Если отменит, то чому бы ему не ловить эксепшин, раз он принимает решение?
322 2640035
>>39833
Используй ФП и Result<T>.
Когда распробуешь - подсядешь и уже не сможешь писать так как раньше. И не сможешь быть пидором, пробрасывающим обрабатываемые исключения между слоями.
323 2640075
>>40035

>ФП


Что это? Result<T> видел только в тасках.
324 2640087
>>40075
Функци-анальное программирование.
изображение.png39 Кб, 694x426
325 2640232
>>39290
А где там сохранение данных в БД? По твоей ссылкке я вижу только заолнение таблицы данными из БД.
>>39299
Не помогает. Что именно я делаю не так? Как новые значения в ячейках существующих строк сохраняться в БД?
326 2640233
>>40035
да прямо таки
вот я под андроид пишу исключительно в реактивном стиле
но в шарпе это ничуть не приживается - оверхед видно, а пользы не оч.

так что на любителя.
328 2640236
>>40235
Да. На первом скрине - обосрамс небольшой, но его легко заметить, так что не критично.
329 2640296
>>40233

>вот я под андроид пишу исключительно в реактивном стиле


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


Реактивность насколько я знаю в там где UI и десктоп фреймворках вполне себе используется. А вот в бэке она просто нахуй не уперлась, поэтому и не используется. А ФП это про другое.
330 2640300
>>40075

>Что это?


Функциональное программирование

>Result<T> видел только в тасках.


Глянь вот тут https://github.com/vkhorikov/CSharpFunctionalExtensions
331 2640346
>>40232
Бамп. Помогите, пожалуйста, разобраться.
332 2640426
>>40235
Интересно, было что-то похожее на второй скрин, но я решил отказаться хз почему. Только я возвращал BaseResponse, который состоял из кода ошибки, описания и Data, если она есть
Безымянный.png13 Кб, 529x402
333 2640608
Почему нельзя написать просто DataContext = user? Зачем создается свойство User User?
334 2640737
>>40346
Я вообще логики не пойму. Почему AcceptChanges идет после Update, в моем понимании нужно сперва применить изменения, а потом уже пихать в базу данных. Но NET название не всегда соответствует функционалу, или там такой многоступенчатый смысл, что сходу не допереть.
Я бы порекомендовал для начала повторить пример метанита и понять работает ли.

>Почему нельзя написать просто DataContext = user? Зачем создается свойство User User?


Лично я так делаю потому, что DataContext имеет тип Object и если для биндингов все норм, то для меня это неудобно — хочется видеть данные нужного мне типа. Чисто для внутреннего удобства.

Только я не понял, схуя ли назначение на свойство user идет при инициализации, а не при событии DataContextChanged. Вот щас "условный" пользователь в ходе работы приложения сменит DataContext, а в user останется старый экземпляр и усё, приехали.
335 2640758
Есть условный INPC класс ColorData в котором есть свойство RGB. Это свойство тоже является INPC классом, в котором есть свойства R, G и B.

Можно ли меняя к примеру свойство R как-то уведомить, что изменился весь RGB? Или только подписка на событие OnPropertyChanged? Просто получается геморный Disposable класс, который нужно высвобождать.
336 2640800
Всем привет, подскажите, пожалуйста, как тут быть. Имеется Windows Server 2012, из AD нужно вытаскивать пользователей, чей пароль истекает через 10 дней, потом надо брать этих людей и им на email высылать поедупреждение. Написал powershell скрипт, чтобы вытаскивать пользователей на стороне сервера, отправку писем тоже нет проблемы реализовать. Вопрос такой: как мне связать мою программу и AD, может есть api какой или как мне тащить данные в програму?
337 2640812
>>40737
Мне так советовали.
>>39299
338 2640921
>>37602
У меня клиент.
Нужно работать с IMAP, получить папки, также скачивать письма и приложения к письмам.
Еще нужно юзать гугл диск апи и яндекс диск апи.
339 2640927
Вот есть у меня событие
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
//
...
//
}
А как пометить цветом ячейку, значение которой было изменено? В интернете я нашёл только строчку вроде "dataGridView1.Rows[e.RowIndex].Cells[1].Style.BackColor = Color.Red", но как получить координату ячейки автоматически, как еслибы существовал метод e.CellIndex?
340 2640969
>>40927
Простите, а нахуя?
Тебе пихается экземпляр этой ячейки через sender. Просто приведи ее к типу ячейки Cell (или что там) и делай с ней что хочешь.

При изменении ячейки, эта ячейка вызывает событие и отправляет себя в качестве сендера (буквально кто отправитель), попутно отправляет необходимые данные в качестве EventArgs (котоырй DataGridViewCellEventArgs).
341 2640976
Про TreeView попиздели, теперь можно попиздеть про DataGridView.
342 2640984
>>40927

> как еслибы существовал метод e.CellIndex?


e это EventArgs т.е. аргументы события — некая сопутствующая информация. Там вряд ли должны находиться методы, там могут быть только свойства.
343 2640987
>>40976
Че бухтишь? Твой любимый Виндоу Формс. Все гнал бочку на WPF, а как дело зашло за формсами, так все утихли.
344 2641058
>>40987
поддерживаю. в WPF это решается элементарно.
345 2641140
>>40608
Затем что создано оно для других причин. Видно же что это не MVVM.
Остальное артефакты записи
346 2641269
>>40608
Чтобы каждый раз при обращении к вьюмодельке не приводить типы.
347 2641598
Нужна помощь по коду, уже который час сижу не знаю как реализовать эту хуйню, в общем нужно реализовать удаление строчки из datagrid`a, но максимум что получалось это удаление всех строчек по нажатию на кнопку, не знаю че делать помогите прошу иначе я ебнусь сейчас
Diazepam12#8984 дс для связи
348 2641720
Аноны, подскажите по типу запуска обработчика для клиента при общении сервер-клиентых

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

Имею TcpListener, который делает делает accept на входящие коннекты

И вот здесь затык, как мне лучше сделать запуск обработчика клиента, в качестве тасок или выделять каждому клиенту свой тред с обработчиком
349 2641724
>>41720
ЗЫ
Исходно намеревался стартовать обработчики через Task.Factory.StartNew(handler) с опцией LongRunning

Но перечитал стэковерфлоу(вьебал говна) и теперь сомневаюсь в своей компетенции по данному вопросу
350 2641732
>>41724
ЗЫЗЫ

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

Сам спросил - сам ответил
351 2641773
>>41732
Не благодари
изображение.png46 Кб, 1005x205
352 2641870
Здравствуйте. Имеется вот такой XML:
<?xml version="1.0" encoding="utf-8"?>
<Objects>
<Object Type="System.Management.Automation.PSCustomObject">
<Property Name="EmailAddress" Type="System.String">Pidor.PidoiHHrovANUSgamqFeilPUNCTUMc5Gbom</Property>
<Property Name="ExpirationDate" Type="System.DateTime">21.07.2022 10:54:59</Property>
</Object>
<Object Type="System.Management.Automation.PSCustomObject">
<Property Name="EmailAddress" Type="System.String">SlavkOpMa.PavlovANUSmai!qUlPUNCTUMrquE0</Property>
<Property Name="ExpirationDate" Type="System.DateTime">23.02.2021 5:51:59</Property>
</Object>
</Objects>
Помогите, пожалуйста, вытащить property с атрибутом Name="EmailAddress".
Я смог вытащить первый элемент с Name="EmailAddress", но вот второй не получается. Мои потугуи на картинке.
Пример с msdn https://learn.microsoft.com/ru-ru/dotnet/standard/linq/find-element-specific-attribute
353 2641874
>>41870
Пример не смог адаптировать, если что.
354 2641928
>>41773
Спасибо
355 2641968
Почему мне ебучая студия выдаёт null там где НЕТ ЕБУЧЕГО null, ёбаный рот, сука?
visualsToXpsDocument.BeginBatchWrite();
for (int i = 0; i < paginator.PageCount; i++)
{
visualsToXpsDocument.Write(paginator.GetPage(i).Visual);
}
visualsToXpsDocument.EndBatchWrite();
Просто записываю visual в xps документ и мне на 3 элементе выдаёт null, хотя там 146% не null. Если просто записать так
visualsToXpsDocument.Write(paginator.GetPage(2).Visual);
То всё нормально. Можно хоть 100 объектов записать таким образом и никаких null не будет. Но в цикле, сука, просто null и всё. Если заранее записать visual в коллекцию и потом по индексу к ней обращаться
visualsToXpsDocument.Write(visuals[0]);
То вообще ни одного элемента не записать, в цикле или не цикле - похуй, сразу null, хотя все элементы в коллекции нормальные

Что это за бред ебаный?
хы.webm574 Кб, webm,
1280x720, 0:04
356 2642230
Частенько в своих мыслях обсуждаю с вами те или иные вопросы, пытаюсь найти способы решения задачи. И знаете что? Вы мне помогаете! Хоть вы об этом и не подозреваете. В 99 процентах случаев мне даже не приходится писать пост в треде. Спасибо!
357 2642410
>>42230
Всегда пожалуйста!
А теперь ты должен поставить этот стикер и обоину в свою студию.
.png90 Кб, 676x753
358 2642429
Ну. Вот я и наткнулся на ситуацию, когда скобка открывающая - мешает.

Я раза с 10 заметил, где кончаются аргументы конструктора и начинается тело.
Придется обратно вертать(((
359 2642517
>>42429

>где кончаются аргументы конструктора и начинается тело.


Ну это решается просто, добавь пустую строку между сигнатурой и телом метода... Ой бля, падажди. Это же та же самая хуйня против которой сражаются адепты жабаскобок.
360 2642520
>>42517
Ну. Видимо да. Придется возвращаться к шарповским скобкам.
Целых 4 дня получается продержался.

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

СЛОЖНА.

Вот почему нельзя как сишники - писать сокращениями-то? У них в 100 символов умещается имя, 12 аргументов и вообще.
361 2642555
>>21949 (OP)
Аноны, как вы думаете, легче устроиться джуном, если за плечами есть несколько лет фронтенд разработки (typescript)? Или всем похуй?
362 2642557
>>42555
Если не только кнопки красил, можешь даже миддлом устроиться при желании.
363 2642560
>>42557
Ну на react и vue кнопки обычно не красят.

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


Слабо себе представляю, как человек из другой области (хоть и знакомый с программированием) может сразу устроиться мидлом. В продакшене я много раз встречался с ситуациями, когда даже при наличии теоретических знаний можно погореть из-за отсутствия практического опыта.
Но за поддержку спасибо!
364 2642577
>>42555
Я, как дед, все еще считаю, что программирование - это про способы мышления.
Ну так вот. Мидл отличается от джуна, в плане мышления, что у него - внезапно должна была начать закрадываться мысль, что код, сам по себе - нихуя не стоит и не нужен, ваш код - способ удовлетворить потребность клиента и все вот это вот.
Ну так вот. А дальше, как дед продолжаю. Все языки +- похожи. Я начинал в школе с паскаля, в вузе - плюсы, на работе джава-шарп-питон. Фундаментальные различия - не то чтобы присутствуют, Ну, т.е. да, можно сказать, что вот там ты можешь работать с памятью напрямую, тут у тебя сборщик мусора, там ты в песочнице вообще возишься. Но вцелом, если ты в состоянии самостоятельно написать что-то уровня ПХП, ну или там свой интерпритатор команд, компилятор, приложение с системой плагинов; то опять же, фундаментально - отличаться один язык от другого - не будет.
К чему я. К тому что все зависит от того на какой ты стадии развития.
Про развитие - легче будет. Какие-то же знания про то как гоняются твои запросики до сервера уже должен был получить, представлять что такое БД, уметь простенькие SQL-запросы писать и вот это вот все. Ну. Т.е. знания некоторые есть, теперь - смотришь с другой стороны и должно быть полегче. Как с изучением других языков: знаешь английский, француский будет выучить легче, немецкий - еще легче; японский - будет так же легче учить, чем если бы ты его первым после родного решил осваивать.
А про найм. Ненулевая вероятность, что для ХРа - твой опыт - не опыт, так что придется по общим правилам, т.е. на рандоме.
365 2642612
>>42577

>Я, как дед,


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

Мой поинт в том, что люди разные и для некоторых перейти в новую парадигму может и не быть проблемой, но для некоторых (и не факт что их меньше), это может быть сложным процессом требующих специфических усилий (а не просто 'выучить новый стек'). Т.к. фундаментально хе-хе программирование - это такой же навык, как и игра на гитаре или езда на велосипеде (попробуй научись ездить на веле у которого руль в обратную сторону от колес вращается). И он где-то наполовину состоит из понимания, а на вторую из обычного задрачивания свое нейросети.
367 2642814
>>42577
>>42625
Сколько Вам лет?
368 2642881
>>42814
42
автор хуевых аналогий
369 2643169
Как добавить библиотеку dll на Core без Nuget? Какого хуя это требует загрузки на сервера?
370 2643182
>>42814
Дед правильно говорит
Как только понимаешь очередную концепцию, то язык уже не имеет значения.

Потому первый яхык учить сложно, а второй+ зависит от твоего понимания концепций.
371 2643184
>>43169
Я уточню.

Допустим у меня есть библиотека А
В нее добавлена библиотека Б

А теперь мне нужно библиотеку А поместить в решение, в котром УЖЕ есть библиотека Б. И тут происходит конфликт неймспейсов.

У меня раньше такой хуйни не было с библиотеками. У меня dll как копировалась в сборку и кому нужно — тот брал. Я мог в любой проект импортировать библиотеку без каких либо конфликтов с соседними.
372 2643185
>>43182
>>42881
Пиздуйте со своей философией в скилбокс, долбоебы.
373 2643186
>>43184

>И тут происходит конфликт неймспейсов.


шта? какой еще конфликт.
374 2643195
>>43186
Что-то типа неоднозначность имен. Студия похрустела и чет восстановилось.
375 2643383
>>42625
Плохая аналогия. Интеллект не моторика, понимать можно хоть сколько парадигм, они друг другу не мешают, а моторика мешает. Если же у человека только одна парадигма в башке помещается как моторика, перед вами скудоум, просто даун.
376 2643417
А существует ли аналог наследования только применительно к проектам? Есть проект, основа которого неизменна, но мне нужно обмазать его доп. контентом.

По итогу хотелось бы иметь общий неймспейс, как если бы это был один проект.
377 2643427
>>43417
А чем обычные либы не дают нужного? никто не запрещает создать MyLibExt, добавить туда MyLib и заюзать тот же неймспейс.

также есть понятие shared project в студии, хотя лично мне сложно придумать где бы не хватило либ (ну кроме проблем области видимости, но зачем себе их создавать)
378 2643432
>>43427
Я понял, но для этого классы должны иметь хотя бы неймспейс второго уровня. У меня щас все в корневом неймспейсе, но это уже мои проблемы.
379 2643453
>>43432

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


????
380 2643501
Чем больше я ебусь с этой тем больше ловлю себя на мысли, что объективно достаточно было вот такой структуры(((
Первое что сейчас. Второе, что мне было надо и что кажется было бы правильнее.
381 2643536
>>43501

>Чем больше я ебусь с этой тем больше ловлю себя на мысли, что объективно достаточно было вот такой структуры


Ты себе даже не представляешь на сколько. На проде один раз только писал тсп-сервак, для одной железяки.
382 2643550
>>43536
Нуууу. Если так рассуждать - ниче не надо делать же.
Просто все эти моменты.
Вот я делал-делал. Пришло понимание, что есть всякие FTP, где на сервере одновременно по UDP и по TCP и надо как-то это тоже учитывать и все такое. А сделать все эти диспечеризации сообщений и прочее - нах не упало, если у тебя протокол хорошо описан и там никаких особых вещей быть не может.
А SNMP - ну, пиздец, я заебусь с этой ASN.1 и мибами. Не люблю SNMP, но только для них и кажется было бы полезно. Правда там нужно было бы с UDP начинать.
383 2643557
>>43550

> что есть всякие FTP, где на сервере одновременно по UDP и по TCP и надо как-то это тоже учитывать и все такое



на самом деле не надо.
FTP работает как комбинация контрольного соединения TCP и нескольких TCP-соединений с данными.

Хуй знает что тут у вас происходит, просто зашел поправить.

А SNMP, конечно, пиздец.
384 2643564
>>43557

> на самом деле не надо.


> FTP работает как комбинация контрольного соединения TCP и нескольких TCP-соединений с данными.


Точно? Я почему-то в голове помню, что там слушается порт UDP который ловит от сесии команды всякие. Может быть я еблан и себе это сам придумал.
385 2643576
>>43564
точно.
с SIP и прочими медиа-протоколами путаешь.
386 2643592
>>43576
Видимо ты прав. Погуглил.
Дырявая башка. Последнее время стал замечать что путать стал чаще. Надо наверное нормализовать режим сна и хотя бы 6 часов спать.
387 2643722
>>43383

>понимать можно хоть сколько парадигм


Понимать, не значит уметь применять. То же ООП очень простая концепция с всего несколькими ключевыми принципами. Но дохуя программистов которые не умеют его нормально применять, при том что они могут быть гуру в каком-нибудь лоу-левел кодинге или функциональщине.
image.png115 Кб, 781x710
388 2643900
Решил пощупать селекторы в авалонии, написал пик, а он не работает! Когда WindowState равен Normal, отображается текст Max, но при Maximized, текст пустой. Почему?
389 2644044
>>43722
И что? Это не относится к сказанному. Человек лучше делает то, что он делает больше, это обычный навык.
390 2644229
Возможно ли отладить .Net Core на линуксе с помощью тулзы типа dotpeek? Имеется ввиду отладка без наличия исходного кода. Возможно ли вообще отладить .Net Core без исходников, независимо от ОС? Где-то читал что там бинарники не такие как от .NET Framework, но не могу вспомнить источник
391 2644282
>>44229
Если собрано в сингл файл бинарник - не вскроешь на отладку
392 2644298
>>44044
Бля, как будто с тупой нейросеткой общаешься, которая теряет контекст через пару сообщений.
393 2644349
>>44229

>.Net Core без исходников, независимо от ОС?


посмотри dnSpy
жаль он умер но только что попробовал - отлаживает нет кор 3.1 и 6 точно.
394 2644372
Как привязаться к свойству экземпляра, объявленного в ресурсах?

Вот ресурс
<Grid.Resources>
<p:ProbeInfo x:Key="uProbe" x:Name="ProbeName" />
</Grid.Resources>


Вот кнопка, пытающаяся привязаться к свойству "IsEnabled"
<ToggleButton IsChecked="{Binding IsEnabled,
RelativeSource={RelativeSource AncestorType={x:Type p:ProbeInfo}}}" />


Вот ошибка
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='ColorPicker.Probe.ProbeInfo', AncestorLevel='1''. BindingExpression:Path=IsEnabled; DataItem=null; target element is 'ToggleButton' (Name=''); target property is 'IsChecked' (type 'Nullable`1')

Пытался привязаться и через ElementName - без толку. Я типа должен юзать StaticResource, но хз как.
395 2644375
>>44372
Source={StaticResource ProbeName}}"
396 2644398
>>44375
Спасибо
397 2644484
>>44398
вернее Source={StaticResource uProbe}}"
ибо поиск идет по x:Key, но это ты уже и сам понял
16420980333134.mp42,4 Мб, mp4,
720x1280, 0:11
398 2644818
399 2644899
>>41968
Бамп вопросу
400 2644979
Чуваки, впервые пробую sqlite и такой вопрос -
У меня база загружается за 500 миллисекунд, это не дохуя ли? Там всего 4 строки и 4 столбца.
Xml файл на 100 записей, в каждой по 14 свойств грузится в 10 раз быстрее. Вот и думаю, мб я что-то не то делаю.
401 2644998
>>44979
Ты куда то спешишь?

На деле твой вопрос не имеет смысла без описания как загружаешь
Например орм потратит время на создание маппинга при первом запросе (хотя зависит от орм)
402 2645093
Что такое "System.Threading.Tasks.TaskCanceledException"?

Короче, есть цикл в который я передаю канселейшн токен, в нем есть ожидание Task.Delay(n). Проблема в том, что ожидание может быть достаточно долгим, прежде чем начнется новая итерация цикла и проверка токена отмены. Я решил "а почему бы этот токен так же не предать в Delay, чтобы не было бесполезного ожидания" но получаю вышеуказанное исключение.
403 2645106
>>45093
А еще обернул в Try Catch, а исключение продолжает срать в окно интерпретации.
404 2645218
>>37304

>Никаких файлов в папке создано не было. Что делать?


Оказалось, антивирус блокировал файл powershell, убрал из карантина и все заработало
405 2645501
>>45106

> но получаю вышеуказанное исключение.


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

(кстати если там HttpClient то все понятно)

>срать в окно интерпретации


если это output то почему бы и нет
406 2645812
>>45093

> TaskCanceledException


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

Возникает оно у тебя, потому что токен который ты передал - в состоянии Cancelled.

Вообще. Типа я понимаю в чем смысл этого дизайнерского решения. Но пиздец оно раздражает на самом деле. Потому что весь, блядь TPL - придуман чтобы быть быстрым. Ну дак вот. У тебя 10к сокетов, таск на чтение, таск на отправку. Сеть отрубилась. Со старой моделью, ты нормально отрабатываешь это и вообще не замечаешь. С новой - у тебя посыпались эксепшны, проц в 100% улетел, пока это все отловится, пока отработает, пизда полная. И ты страдаешь, ждешь 10к отключений пока отработают, сеть уже появилась, новые клиенты ломятся, а ты все обрабатываешь те исключения. Срака полная.
407 2645984
>>45812
1 исключение - штатный механизм прерывания работы "дальше работать нельзя ". Альтернатива - прокидывать ошибку по всем уровням явно.
2 OperationCanceledException ни для каких потоков. Это просто более общее исключение отмены. И базовый класс дляTaskCanceledException
3 TPL придуман чтобы дать унифицированный подход к асинхронщине с не хрень вида new Thread или BeginXXX
408 2646018
>>45984

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


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

> OperationCanceledException ни для каких потоков


> The exception that is thrown in a thread upon cancellation of an operation that the thread was executing


Конечно, можно считать, что оно к потокам никакого отношения не имеет, но если мы берем эту хреновину в контексте однопоточного приложения - оно вообще смысла не имеет, потому что мы можем нормально отработать отмену корутины через флаг, не страдая всей этой хренью с исключениями.
409 2646025
>>46018
Ну и в контексте однопотока - оно вообще никогда не бросится, потому что некому отменять
410 2646041
Нашел тут книгу по алгоритмам с кодом на сисярпе мож кому пригодится
https://sd.blackball.lv/books/17528
411 2646157
>>46018

>что оно к потокам никакого отношения не имеет


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

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


исключения - базовый механизм.
Твои претензии ясны, но тогда были бы вопросы - а хули базовые вещи имеют свой дизайн? что за бардак в языке.
Но так уж повелось что были выбраны исключения как средство управления потоком выполнения при ошибке.
шарп слизывали с жавы, а думали уже потом, когда было поздно. Ну или не думали. До сих пор удивляешься что базовые вещи либо нет вообще, либо интернал, либо убого.
412 2646907
Есть прога использующая либу. Поставили задачу по переносу функциональности из либы, а именно перенос в namespace проги всех методов и полей либы необходимых для работы функционала (в моем случае это шифрование) . Я посмотрел и там в либе свыше сотен разных полей и методов. Можно ли как-то автоматизировать этот процесс, а именно после запуска проги определить все методы и поля класса в либе, используемые для шифрования? Пробовал диаграмму классов для либы построить, но она напоминает таблицу Менделеева (большие цепочки наследования классов)
413 2647129
>>46907

>в моем случае это шифрование


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

>а именно перенос в namespace проги


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

>срать в окно интерпретации


>если это output то почему бы и нет



Потому что это сбивает с толку визуальным шумом. Я знаю, что будет эксепшн и я его оборачиваю в Try Catch. А теперь представь, что этих эксепшинов штук 50, а в другом месте еще 100. Я заебусь это говно разгребать.

>>45812
Отказался я от этой затеи — пихать токен в делэй. Пока не критично.
415 2647197
Такой вопрос
делаю цикл
for(.....)
{
int var = 1;
......
}

Как я понимаю каждый раз в начале цикла создается переменная. Что с ней происходит когда цикл заканчивается? Он типа засирает ячейки памяти каждый раз создавая переменную в новой ячейке или он по окончанию цикла удаляет ее и потом в начале следующего создает заново? Лучше ли снаружи цикла объявить переменную и инициализировать ее или похую? Снаружи цикла я ее не использую.
Я нюфаг тапками не бейте.
416 2647198
>>47197
Точнее не присваивать ей значение снаружи цикла а просто объявить, мне надо чтоб значение обнулялось (объединялось лол) каждое начало цикла.
417 2647202
>>22112
Все еще недостаточно данных, купи еще один.
418 2647212
>>47198
Простейшие типы данных, типа структур для того и созданы, чтобы ими срать внутри цикла.

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

Еще раз. Класс — долгоиграющий объект, часто сложный объект, который ты создаешь ДО цикла и дальше в цикле редактируешь. Структура — простой объект, который "быстро создал, быстро забыл". Структура идеально подходит, чтобы создавать новый экземпляр при каждой итерации цикла. Там настолько все быстро, что нет смысла оптимизировать , если только твоя структура не string, но это уже другая история.
419 2647214
>>47198
>>47197

>Я нюфаг


Ага.
Хуй забей, компилятор сам все оптимизирует. Вплоть до того, что если будет нужно, то сам вынесет (или внесет) переменную куда нужно.
420 2647215
>>47197

>Что с ней происходит когда цикл заканчивается?


Она уничтожается.

>или он по окончанию цикла удаляет ее и потом в начале следующего создает заново?


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

Ты посмотри сколько весит переменная bool (думаешь 1 байт? а на самом деле 4 байта), и задумайся, а этот язык вообще приспособлен для такой мелочи, которая тебя волнует? Пока ты юзаешь в цикле структуру, шпи шпокойно.
image62 Кб, 378x364
421 2647231
422 2647235
>>47197
На уровне msil твой код будет переписан под выполнение IL инструкций на основе стека + goto переходов

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

а далее из этих ячеек будет писать в стек, выполнять операции, извлекать из стека.
и твой int var = 1; превратится в
1)кладем на стек 1
2) извлекаем из стека 1 в ячейку для переменной var

то есть ничего нового в итерации не создается. да и нет никаких итераций в MSIL - там просто гото. В стеке ничего не задерживается - операции для своих нужд извлекают значения из стека тем самым опустошая его. Потому нет миллиона итераций - есть миллион (push/pop стек) и затем goto.
423 2647237
Кто-то уже игрался с AOT?
Как оно?

Просто я попробовал на реальном проекте поиграться, оно при старте начало грязно выраджаться про то что не может чет там найти конструктор к DbContext'у, ну я и забил. Но все равно интересно же.
424 2647297
>>47197
В интерпретируемой скриптопараше как С# ответа на этот вопрос нет, он скрыт внутри машины интерпретатора и не афишируется, и тем более может в любой момент поменяться по велению левой пятки разработчиков. Поэтому в таких говноскриптах нет документации по их внутренней работе, если тебе надо что-то получить, ты должен ради этого ставить эксперимент созданием тестового кода измеряющего нужные тебе параметры и смотреть на результат, при условии что это вообще возможно, что не гарантируется тоже.
425 2647341
Как часто нужно производить логгирование? Не должно быть записей для каждой функции (даже если это уровень Verbose)?
426 2647495
>>47297
Дед, выпей таблетки. Сейчас давно уже не восьмидесятые.
427 2647601
Всем привет. Как можно реализовать хранение настроек приложения вне кода, то есть нужен конфигурационный файл, который сможет менять сторонний пользователь. Сделал App.config, но при публикации и последующем запуске exe файла вылетает ошибка.
428 2647702
>>47297

>В интерпретируемой скриптопараше


>С#



Джавадебил совсем уже обезумел, охуеть. Пора мочу вызывать.
429 2647707
>>47601
Решение для работяг оно же дефолтное - json. Просто делаешь себе класс настроек (или несколько вложенных классов), а дальше сериализуешь и десериализуешь. На все потребуется System.Text.Json и пара строчек.
430 2647743
>>47601
ЖДАНОВ так старательно всё замазывал, но всеравно спалил, что он ЖДАНОВ
431 2647764
>>47601
Гражданин Жданов М. у вас пиратская копия Visual Studio полиция уже выехала по вашему адресу.
432 2647765
>>47743
Не просто ЖДАНОВ, а АДМИН ЖДАНОВ
433 2647794
>>47764
>>47743
Специально не написал первым, что обосрался. Думал, что не заметят,но нет, тут всё как обычно
434 2647798
>>47707
Понятненько, спасибо
435 2647800
>>47765
я сис админом работаю
436 2647810
>>47341
столько сколько нужно же, но не больше необходимого
главное чтобы это имело смысл.

Также не стоит забывать про приемы оптимизации выполнения выключенного лога. Ну чтобы или вообще в релиз сборке не было лишних вызовов или же ветка логгера не выполнялась. В примитиве это logger.IsDebugEnabled и тому подобное.
437 2647874
>>47810

>logger.IsDebugEnabled


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

Еще напрягает куча стринговых сообщений, которые нужно хранить прямо в методах.
438 2647899
>>47601
Я познакомился с Newtonsoft JSON. Во-первых файл конфига получается более читабельным, во-вторых сериализация большинства типов данных работает из коробки, без создания конвертеров (кроме парочки, типа десериализации интерфейсов).
439 2647913
>>47874
Ну такой чек нужно делать на каждый вызов логгера что не очень удобно и нужно использовать костыли

В остальном ничего не поделаешь - лог есть лог. Если он нужен то придется в него писать.

>>47899
Жсона из коробки более чем достаточно. Ньютонсофт - лишняя зависимость
440 2647928
>>47913

>Ну такой чек нужно делать на каждый вызов логгера


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

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

>В остальном ничего не поделаешь - лог есть лог. Если он нужен то придется в него писать.


Так в том-то и беда, не ясно что понадобится. Если пытаться предсказать все случаи жизни, то придется писать всё. Тут по идее всю работу должны выполнять тесты, а логирование нужно только для приблизительного указания ошибки.
441 2647938
>>47928

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


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

Ну разве что у тебя шарп 10 и зерологгер то тогда будет некоторая экономия.

>не ясно что понадобится


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

тесты не заменяют логи. тесты, диагностика, логи - все делают разные вещи.
442 2647960
>>47938

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


А как иначе? Я тоже задумывался этим вопросом.

Ну создастся кусок стринга в примере ниже, но как я понимаю, метод проверит допустимый уровень логгирования и тупо выйдет на старте.
logger.LogDebug("The message: {v}", value);

А что даст logger.IsDebugEnabled? Он же не удалит строку кода. Кстати я не нашел данной функции для Serilog. Это что-то для NLog? Это можно считать аналогом IsEnabled? Т.е. это тупо проверка уровня до запуска метода.
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug("The message: {v}", value);
}

Какая разница? Все равно будет выделена память под "The message: {v}".
443 2647965
>>47960

>logger.LogDebug("The message: {v}", value);


посмотри на сигнатуру метода LogDebug. у тебя произойдет передача value (и боксинг при необходимости) даже если этот лог никому не нужен.

>будет выделена память под "The message: {v}".


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

в общем чтобы избежать накладных расходов нужно проверять
if(logger.IsDebugEnabled) logger.LogDebug("The message: {v}", value);
тогда LogDebug не будет вызван и не будет лишних аллокаций

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

или же засахарить костыли чтобы было вида
logger.Debug()?.Log(...)
444 2648042
>>47965

>или же засахарить костыли чтобы было вида


logger.Debug()?.Log(...)

Это что-то кастомное? Я просто с бейсика. Допустим Debug это расширение, но оно вернет bool, а как из этого перейти к Log?
445 2648112
>>47341
Насколько задрочено тебе нужно - настолько и делай

У нас каждый пердеж и выше летит в NLog
446 2648121
>>48042

>Допустим Debug это расширение, но оно вернет bool


это лисапединг
Debug() вернет логгер если IsDebugEnabled или null, если нет
и если он вернул null, то выполнения ж дальше не будет.
447 2648125
>>47938

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



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

Этот жабагадюкинг не стоит переживаний и траты внимания.
448 2648130
>>48125
ага ага. вот из за таких софт и стал тяжелым и тормозным
потому что есть какой нибудь
logger.Trace(..., тут что то тяжелое вычисляется)

а ему пох, ведь "все равно в лог записано не будет, а то что будет тормозить - так наш софт никому и не нужен вот"
449 2648146
Э, а почему в вашем языке больше не надо писать using System, чтоб вывести что-то в консоль?? Я не понимаю, вот я смотрю туториал и там это используют, а мне VS пишет что можно обойтись...
450 2648148
>>48146
А, ну и ещё в туториале челу приходится дописывать Console.ReadLine(); чтоб терминал не закрывался, а у меня и так не закрывается
Неужели тутор за 2019 год уже устарел??????????? Где мне учиться тогда(
451 2648149
>>48146
Потому что implicit usings
452 2648150
>>48148
Это фишка студии, не более
453 2648153
>>47601
Пилишь класс MyAppSettings с пропертями
Пилишь SettingsManager

Затем конструкция уровня
var manager = new SettingsManager();
if(!manager.LoadIfExists<MyAppSettings>(out settings)
{
settings = new MyAppSettings()
{
//инит дефолтных настроек
}
manager.Save<MyAppSettings>(settings)

}

В самом SettingsManager придумываешь где будешь хранить свои конфиги и какие пути будут юзать чтение и запись

В SettingsManager.LoadIfExists чтение и дженерик десериализация с JsonSerializer, с возвратом bool на успешность существования и загрузки конфига и out настроек

В SettingaManager.Save дженерик сериализация и запись в файл

Юзаешь в любом своём проекте, по надобности наследуясь от MyAppSettings и расширяя конфиг.
454 2648163
>>48130

> ага ага. вот из за таких софт и стал тяжелым и тормозным



> потому что есть какой нибудь



> logger.Trace(..., тут что то тяжелое вычисляется)



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

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

Можно как юнитидебилы в каждом Update геодату игры полностью пересчитывать
455 2648165
>>48121
А, понял.
456 2648173
>>48130

>logger.Trace(..., тут что то тяжелое вычисляется)


А если у меня просто

>logger.LogDebug("The message");


... то проверка не имеет смысла?
457 2648178
>>48163
достаточно просто не писать в лог когда не нужно и вообще вызывать логгер, когда не нужно
а не строить из себя знатока "таак, тут не тяжелое, так тут пох на боксинг, а тут вообще пох"

>>48173
тут да - не имеет.
но обычно есть какие то данные
458 2648179
>>48148

>А, ну и ещё в туториале челу приходится дописывать Console.ReadLine(); чтоб терминал не закрывался, а у меня и так не закрывается


У меня закрывался. Мб у тея еще что мешает закрытию?
459 2648182
>>48178

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



Ну так убери лишние вызовы, нахуй код говном с If засирать
wallhaven-m9ve7k.jpg519 Кб, 2560x1440
460 2648185
>>48179

>To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.


Вот такая штука есть, оказывается.
461 2648188
>>48182
да.вообще убрать логгирование
и нанять оракула - пусть он разбирается что где произошло.
462 2648194
>>48188
Ты, видимо, просто тупой
Хотя чего ждать от человека, который в пример приводит

> потому что есть какой нибудь


> logger.Trace(..., тут что то тяжелое вычисляется)

Image 1.png221 Кб, 693x476
463 2648200
>>48194
этот пример приведен в доке от джетбраинс (пик)
и для "мудрого" поясню - как раз тупо вообще задумываться на тем какой будет оверхед, умно не допускать оверхеда вовсе.
464 2648264
>>48148

>Неужели тутор за 2019 год уже устарел?


А ты как думал? Да даже за 2021-й год уже устарел. У нас в шарпе принцип: "Маши крыльями или сдохнешь". Так что ищи только самый свежачок, который только на нглийском, лол.
465 2648393
>>48153
спасибо, пойду пилить
466 2648521
>>48264
Ангельский не проблема. Я решил начать через видеокурс C# Fundamentals for Absolute Beginners от Microsoft + параллельно почитываю "Pro C# with .NET 6". Видеокурс от 2019 года, да. Но для базы должно пойти?
467 2648566
Всем ку, что это за фигня (1 скрин)? При дебаге такая фигня не вылезает, но если сделать публикацию (2 скрин), то вылезает. Пустой конструктор ставил, не помогло
468 2648661
>>48566
Первое, нахуй newtonsoft.json
Второе, если возможно, пили пустой конструктор в классе который пихаешь в сериализатор
Третье, лучше код показывай
469 2648668
>>48661
Если не можешь менять базовый класс можешь либо ебаться с конвертером, либо накормить сериализатор параметрами
TypeNameHandling = TypeNameHandling.None,
NullValueHandling = NullValueHandling.Include,
MissingMemberHandling = MissingMemberHandling.Ignore,
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
ObjectCreationHandling = ObjectCreationHandling.Replace,
470 2648677
>>48661
Вытаскиваю json (пик 1). Класс, который пихаю в сереализатор (пик 2), пустой конструктор есть. 3 пик - json файл. При дебаге всё нормально работает, а при публикации вылезает эта ошибка.
471 2648698
>>48677
ну так переключи на релиз и собери
и увидишь суть.
472 2648706
>>48698
В релизе тоже всё работает
473 2648709
>>48698
Ошибка вылезает после публикации
474 2648772
>>48677

>пик 1


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

private T Deserialize<T>(string text) where T: AppSettings
{
using (var reader = new StringReader(data))
{
using (var jsonReader = new JsonTextReader(reader))
{
return (T)serializer.Deserialize(jsonReader, typeof(T));
}
}
}

>пик 2


навесь аттрибут [JsonConstructor] на конструктор

>пик 3


Твоя модель настроек не совпадает с json

Пили базовый класс AppSettings с конструктором и пунктом 2
от него наследуй SmtpSettings:AppSettings
от него наследуй LetterSettings:AppSettings

>пик 1


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

//Юзаем так:
var settingsService = new AppSettingsService();
SmtpSettings smptSettings;
LetterSettings letterSettings;

//Грузим конфиги
if(!settingsService.LoadIfExists<SmtpSettings>(smptConfigPath, out smptSettings)){
//создать новый конфиг и сохранить, если обосрались на чтении
}
if(!settingsService.LoadIfExists<LetterSettings >(smptConfigPath, out letterSettings)){
//создать новый конфиг и сохранить, если обосрались на чтении
}

//получаем данные с конфига
var host = smptSettings.Host;
var header = letterSettings.Header;
474 2648772
>>48677

>пик 1


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

private T Deserialize<T>(string text) where T: AppSettings
{
using (var reader = new StringReader(data))
{
using (var jsonReader = new JsonTextReader(reader))
{
return (T)serializer.Deserialize(jsonReader, typeof(T));
}
}
}

>пик 2


навесь аттрибут [JsonConstructor] на конструктор

>пик 3


Твоя модель настроек не совпадает с json

Пили базовый класс AppSettings с конструктором и пунктом 2
от него наследуй SmtpSettings:AppSettings
от него наследуй LetterSettings:AppSettings

>пик 1


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

//Юзаем так:
var settingsService = new AppSettingsService();
SmtpSettings smptSettings;
LetterSettings letterSettings;

//Грузим конфиги
if(!settingsService.LoadIfExists<SmtpSettings>(smptConfigPath, out smptSettings)){
//создать новый конфиг и сохранить, если обосрались на чтении
}
if(!settingsService.LoadIfExists<LetterSettings >(smptConfigPath, out letterSettings)){
//создать новый конфиг и сохранить, если обосрались на чтении
}

//получаем данные с конфига
var host = smptSettings.Host;
var header = letterSettings.Header;
475 2648775
>>48772
Я обосрался в десериализации, там new StringReader(text))
Принцип такой короче
476 2648780
>>48772

>Твоя модель настроек не совпадает с json


Так я беру только "SmtpSettings", "Letter" - это для другого класса. Или это плохо и лучше разделить на разные json'ы?
477 2648787
>>48780
Или тут про другое? Кароч я уже не соображаю, что тут происходит
478 2648790
>>48780
Я бы разделил
Если хочешь хранить все в одном месте то делай соответствующую модель, например
AppSettings
{
public SMTPSettings SmtpSettings{get;set;}
public LetterSettings LetterSettings{get;set;}
}
479 2648792
>>48772
В любом случаее спасибо, завтра переделаю как Вы показали, надеюсь заработает. А пока навесил [JsonConstructor], но всё равно так же ошибка вылезает.
480 2648796
>>48792
Поэтому сразу предложил тебе через десереализатор с параметрами отсюда
>>48668
481 2648799
>>48790
Блять блин, а чё эта ошибка-то вылезает, вроде конструктор пустой есть, [JsonConstructor] навесил, что ещё ему надо
482 2648805
>>48799
Показывай модель настроек
изображение.png87 Кб, 622x477
483 2648818
>>48805
Так, что за модель? Это xml, который я прикрепил или что?
484 2648825
>>48818
Модель в данном случае это класс настроек с публичными пропертями, содержащими настройки
изображение.png73 Кб, 617x647
485 2648827
>>48825
Понял
486 2648832
>>48827
Я newtonsoft не особо пользую
Попробуй ему кормить чисто json для smtp
487 2648836
>>48832
А чем тогда newtonsoft лучше заменить, я просто первый раз с json в c# работаю и не в курсе, что в моде, а что лучше обходить стороной
488 2648839
>>48827
и где тут ньютонсофт
на словах ты ньютонсофт
а аттрибут используешь из System.Text.Json что совсем другая либа

>>48836
System.Text.Json хватит за глаза раз он у тебя есть.
489 2648847
>>48836
Мигрируй на System.Text.Json, по умолчанию интегрирован с проектами core3. 0
Вызовы простые
JsonSerializer.Deserialize<Type>(jsonString);
JsonSerializer.Serialize(object)

Как уже сказал, полюбому отказывайся от JObject
490 2648849
>>48847
один фиг при публикации выдаёт ошибку
491 2648850
>>48849
И что ты пытаешься ему кормить?
изображение.png11 Кб, 428x237
492 2648852
>>48850
Да проблема в том, что при дебаге всё ок, а вот когда нажимаю опубликовать вот это происходит. Мб просто вытащить из релиза bin и себе мозг не ебать
493 2648854
>>48839
Упс, вот это сюда
>>48849
494 2648859
>>48852
Короче, ванговать сложно, но ошибка, скорее всего, максимально тупая и мы все вместе посмеёмся

Переходи на System.Text.Json, перепиливай на подгрузку файлов и сериализацию/десериализацию через сериализатор

Можешь оставить какой-нибудь канал для связи, будем говнокодить напару
495 2648869
>>48859
Да, перепилю ибо у меня код сам по себе говно-гавна, мне уже тут посоветовали как сделать лучше. Если есть желание то вот телега: @calciigluconas
496 2649091
>>48852
Попробуй вообще убери конструктор из класса. По идее для poco классов, он просто дефолтный юзает и все.
497 2649386
>>48849
Написано же деление на ноль. Что за пидарские вопросики?
498 2649455
>>48859

>Переходи на System.Text.Json


В этой залупе практически ничего нет. Придется на каждый пук писать конвертер.

>>48852
А что не так?

>>48849
Он так ругается, когда нет дефолтного конструктора без параметров. Он у тебя вроде есть (если у шарпистов это называется дефолтным конструктором)
499 2649462
>>49455

>Придется на каждый пук писать конвертер.


так часто пукаешь что ли?

тащить доп зависимость из-за того что лень написать 0-1 конвертер...
muhahaha.webm661 Кб, webm,
744x416, 0:10
500 2649579
Держите перекат, писюнчики

>>2649578 (OP)
>>2649578 (OP)
>>2649578 (OP)
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 22 мая 2023 года.

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

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