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

C# 8 дотнета тред #54 /csharp/

 Аноним OP 14/01/24 Вск 16:41:55 #1 №3002293 
image.png
image.png
dot-Net-8.jpg
Постновогодний тред лучшего языка на планете.

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

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

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

4. С# для игор
https://dotnet.microsoft.com/en-us/apps/games/engines

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

Шапка: https://pastebin.com/HT7Hi6FD
Предыдущий: >>2920885 (OP)

ВНИМАНИЕ, в тред повадился срать джавадебил. Шарпочане, игнорируйте, а лучше репортите. Главное - не кормите.
Аноним 14/01/24 Вск 17:15:13 #2 №3002344 
Джавадебилы смачно соснули с проглотом.
Аноним 14/01/24 Вск 17:21:58 #3 №3002354 
>>3002344
Как там дела с работой на сишарпе? Когда уже продадите кабанчикам новый кросплатформенный c# 3000 который конечно же лучше джавы?
Аноним 14/01/24 Вск 18:48:30 #4 №3002503 
>>3002354
отлично с работой. пишем на последнем шарпе, а на старой жава которую "нельзя обновлять у нас тут все ыньтырпрайз и все сломаица"
Аноним 14/01/24 Вск 22:14:03 #5 №3002798 
>>3002354
>новый кросплатформенный c#
Да как нехуй делать. Пришел в середине 22-го года работать в контору. Был комплекс работающий на виндовых серверах, МССКЛ-е и на Core2.1.
Кабан сказал: "Ебать-ебать, надо импортозамещаться. Линукс-хуинукс, другая БД, очереди и вот это все".
Мы: "Ок, но надо поднимать до .net6, обновлять все фреймворки и т.д. Ну и на тайпскрипт до кучи. Иначе не заработает"
По итогу спокойно все перепилили и кайфуем. В этом году думаю и до .net8 очередь дойдет.
Аноним 14/01/24 Вск 22:48:57 #6 №3002865 
Я вот тоже захотел игру сделать.
На подобии кликера. Ну там грабить корованы, но только в 2д.
Хорошая ли идея использовать Blazor? Я не совсем понимаю как это все должно работать на фронте.
Представляю себе так: blazor webassembly. На экране у юзера происходят действия, проигрывается анимация, юзер что то нажимает что то делает. При действиях кторые происходят редко например покупка чего то отправляются http запросы на сервер. А вот при нажатиях, например при игровых кликах, сборе чего либо, на клиенте происходит сбор этой информации и отправка её пачками например раз в 10 секунд. Так как мне кажется держать открытым подключения например в SignalR очень затратно и обрабатывать сервером ебищем кликов, хуй с ним 1 человек, а если 100 человек и каждый кликает.
И вот у меня вопрос, стоит ли ебатся с blazor webassembly ? Или взять например pixijs и на нем сделать клиент а серверную сторону уже на C#?
Я просто хз эти javascripты.
Аноним 14/01/24 Вск 23:14:50 #7 №3002908 
изображение.png
Пытаюсь реализовать чистую архитектуру + cqrs. Такой вопрос: можно ли в слой Application добавлять сторонние библиотеки, например: FluentValidation, мапперы там всякие? Я читал, что туда лучше не лепить всякие зависимости и т.д. Щас полистал githab и там кто как реализует. Кто-то ставит библиотеки в Aplication слой, кто-то нет я уже успел туда FluentValidation поставить. В общем я запутался...
Аноним 14/01/24 Вск 23:19:36 #8 №3002923 
>>3002798
>импортозамещаться. Линукс-хуинукс, .net6
Обосрался.
Аноним 14/01/24 Вск 23:23:43 #9 №3002933 
>>3002865
>А вот при нажатиях, например при игровых кликах, сборе чего либо, на клиенте происходит сбор этой информации и отправка её пачками например раз в 10 секунд.
Практически всё надо проводить через сервер, иначе у тебя моментально заведутся читеры.
Не надо заниматься преждевременной оптимизацией, дотнет может спокойно десятки, если не сотни, тысяч запросов в секунду обрабатывать. Пиши всё как есть, оптимизировать будешь, когда поймут проблемы.
Аноним 14/01/24 Вск 23:26:49 #10 №3002940 
>>3002933
Но с этим то ладно, а что с выбором blazor webassembly ?
Нахуй его и на pixijs сделать?
Аноним 14/01/24 Вск 23:28:36 #11 №3002945 
>>3002940
Я не компетентен в этом вопросе. Жди, пока кто-то другой ответит.
Аноним 14/01/24 Вск 23:43:47 #12 №3002958 
>>3002908
По чистой архитектуре - у тебя вообще в Application не должно быть внешних зависимостей. Только логика и интерфейсы какие-то, которые будут на инфраструктурном слое реализованы(всякие там IZalupaRepository и прочее).
Единственная нормальная зависимость - это доменный слой, который уже точно ни от чего не зависит.

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

Другое дело - иногда чисто следовать всем заветам чистой архитектуры - сложно. А иногда - не нужно, в контексте того, что проект не настолько здоровый, чтобы в случае надобности - переписать нужные куски.
Аноним 14/01/24 Вск 23:45:20 #13 №3002961 
>>3002908
>можно ли в слой Application добавлять сторонние библиотеки
Как архитектор скажет, так и будет.
>я уже успел туда FluentValidation поставить
Ну ты там и так уже насрал засунув контракты в Application, так что одним говном больше, одним меньше.
Аноним 14/01/24 Вск 23:49:06 #14 №3002966 
>>3002958
>>3002961
Спасибо. Завтра переделаю. Проект крохатный.
Аноним 15/01/24 Пнд 09:15:09 #15 №3003173 
Кто шарит за WPF

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

То есть что я хочу - есть три столбца. пользователь меняет текст в ячейке и теперь в последнем столбце должен проставится чекбокс чтобы визуально было видно что вот в этой строке было изменение.
Хочу по умному через триггеры, а не говнокодом.
Аноним 15/01/24 Пнд 10:50:47 #16 №3003208 
джава лучше сисясарпа
/тхеад
Аноним 15/01/24 Пнд 13:49:08 #17 №3003473 
2024-01-1512-59-14.png
>>3003173
>сделать по простому
По простому — вещь относительная. Если у тебя подготовлена инфраструктура, то будет просто, а если нет, то делай через события.

Если ты делал все по MVVM-паттерну, то ты можешь в своей модели, являющейся строкой таблицы, реализовать интерфейс IChangeTracking.
Он по сути заставит твою модель реализовать булевое свойство IsChanged, к которому и будет привязываться твой чекбокс, сигнализирующий об изменении.

А дальше ты в нужных свойствах модели в блоке set указываешь
IsChanged = true;

Далее, как я понял встанет вопрос о сбросе флага, если к примеру база данных будет сохранена. Поэтому интерфейс помимо IsChanged требует реализовать метод AcceptChanges(), который сбрасывает флаг IsChanged до дефолта т.е.
public void AcceptChanges() => IsChanged = false;

Аналогичный вопрос на so:
https://stackoverflow.com/questions/2363801/what-would-be-the-best-way-to-implement-change-tracking-on-an-object

Как я понял, чтобы все флаги резетнуть при сохранении базы данных, нужно будет пройтись по всем экземплярам и запустить AcceptChanges(). Я не эксперт, но выглядит как хуйня.
1. А что если у меня каждое свойство должно иметь свой собственный идентификатор? Т.е. я должен выводить каждое такое свойство в отдельный класс, реализующий IChangeTracking.
2. Мне не нравится, что надо каждый раз обходить все данные, чтобы сбросить флаг.
3. Что если возникнет такая ситуация:
- В базе данных число 356
- Пользователь вводит число 128, и флаг IsChanged меняется на true
- Пользователь снова вводит число 356
В таких случаях маркер изменения должен сброситься т.к. оно равно исходному значению.

Почему к примеру не создавать временную точку при изменении данных ячейки? И создать точку сохранения базы данных. Далее какой нибудь мультибиндинг сравнивает обе временные точки и выдает булевый вердикт — являются ли данные новыми или нет.
Мне кажется, что такой вариант экономичнее, но у меня нет практики, чтобы утверждать подобное.
Аноним 15/01/24 Пнд 14:02:36 #18 №3003493 
>>3003173
Ты занимаешься какой-то хуйней. Твоя строка таблицы биндится к какому-то объекту. При изменении текста изменится проперти этого объекта, вот там в сеттере и поменяй другое проперти, к которому ты забиндил чекбокс.
Аноним 15/01/24 Пнд 15:17:47 #19 №3003591 
изображение.png
Почему при onklick="FetchData" все работает, а при простом вызове FetchData() вылезает ошибка?
Аноним 15/01/24 Пнд 18:08:20 #20 №3003788 
>>3003591
дык потому что
Аноним 15/01/24 Пнд 20:10:14 #21 №3003947 
>>3003591
Какая ошибка?
Аноним 15/01/24 Пнд 20:29:46 #22 №3003960 
>>3003947
Что за глупые вопросы
Аноним 15/01/24 Пнд 21:34:07 #23 №3004050 
2024-01-1521-33-32.png
>>3003788
>>3003960
Рядовой "Шутник"?
Аноним 16/01/24 Втр 00:29:36 #24 №3004315 
>>3004050
ну автор первоначального вопроса не посчитал нужным указать что там за ошибка, значит ему и решение ошибки не нужно. Так что глупо спрашивать его об ошибке
Аноним 16/01/24 Втр 10:49:37 #25 №3004612 
Используете вы операторы верхнего уровня?
Я вообще не могу воспринимать код с ними. у меня какая-то агрессия и зубы скрипят
Аноним 16/01/24 Втр 10:50:19 #26 №3004617 
>>3004612
Нахуя и ваще придумали и кому это надо?
Ну мб всем надо а я просто не выкупил прикола?
Аноним 16/01/24 Втр 11:15:21 #27 №3004647 
>>3004617
Эту хуйню придумали, чтобы код был похож на нодежс. Я не шучу. Когда дотнет стал терять популярность, какому-то менеджеру пришла в голову охуительная идея: давайте будем писать как на ноде, тогда все бросят ноду и перекатятся в дотнет. Ведь на ноде пишут только потому, что там нет void Main, в этом вся причина.
Аноним 16/01/24 Втр 11:21:14 #28 №3004651 
>>3004612
>>3004617
Ну типа, чтобы было легко для начинающих, но на самом деле запутывает и дезориентирует. Все равно приходится знать то, что скрыто. Уже миллион раз на это дерьмо попадался, когда не понимаешь почему не работает, пока тебе не расскажут как это работает под капотом.
Аноним 16/01/24 Втр 12:45:25 #29 №3004773 
>>3003591
Потому что петушарп.
Аноним 16/01/24 Втр 13:19:24 #30 №3004807 
>>3004612
>Используете вы операторы верхнего уровня?
Нет. В IDE по умолчанию стоит "Do not use..."
Аноним 16/01/24 Втр 14:24:51 #31 №3004887 
>>3002798
Импортозмещение с дотнетом? Перешли на продукт российского офиса майкрософт?
Аноним 16/01/24 Втр 15:10:39 #32 №3004944 
>>3004887
Импортозаместились опенсорсом как и все вокруг. Откуда столько вони?
Аноним 16/01/24 Втр 16:47:50 #33 №3005056 
У меня опять вопрос про архитектуру. Вот в этом видосе https://youtu.be/tZ8gGqiq_IU?list=PLzYkqgWkHPKC-n4ehnzcgkHJxd7bC-8gW&t=1194 чел пихает в доменный слой библиотеку ErrorOr. Библиотека написана на базовых классах .net, то есть её можно самому написать при желании. Можно ли в таком случае пихать библиотеку в доменный слой?
Аноним 16/01/24 Втр 16:49:17 #34 №3005059 
>>3004887
>Импортозмещение с дотнетом?
Проект и так на дотнете был, просто на Core2.1, что по меркам шарпа уже легаси. Просто подняли версию до самой свежей LTS на тот момент.
Импортозамещать нужно было все остальное, что требует лицензий.
Аноним 16/01/24 Втр 17:02:42 #35 №3005066 
>>3005056
>Можно ли в таком случае пихать библиотеку в доменный слой?
Хуй знает, такое себе. Я классы с ошибками в слой контрактов запихиваю всегда. Почему чел на видео так же не сделал - хуй знает, тем более что у него есть в проекте Contracts, плюс ошибки не связаны с сущностями. Может какие-нибудь DDD заморочки мешают это сделать.
Алсо, слегка обзмеился с библиотеки. Кто-то явно решил выебнуться и вместо общепринятого Result и его производных, обозвать свой тип ErrorOr. Хотя может это и я отстал от тенденций.
Аноним 16/01/24 Втр 17:09:28 #36 №3005071 
>>3005066
Этот ютубер и есть автор ErrorOr. А вот библиотеку в домен я класть не буду, выглядит странно, особенно когда прочитал, что в доменный слой вообще зависимости класть хуёво.
Аноним 17/01/24 Срд 02:31:02 #37 №3005999 
Вас не заебало из раза в раз приходить в джава тред и уходить в урине?
Аноним 17/01/24 Срд 05:45:44 #38 №3006116 
>>3005999
У говноеда жабоида галлюцинации
Аноним 18/01/24 Чтв 00:21:34 #39 №3007610 
Есть свойство А, при изменении которого меняется свойство B. При этом при изменении свойства B должно меняться свойство A.

Как такое разруливается?
Аноним 18/01/24 Чтв 00:35:47 #40 №3007625 
>>3007610
Меняй приватные поля которые стоят за свойствами
Аноним 18/01/24 Чтв 15:04:14 #41 №3008381 
изображение.png
Пожалуйста помогите, где здесь я допускаю ошибку?

Я пытаюсь сформировать ссылку с параметрами, и получить данные из этого запроса.

Если я просто указываю
("https://api.battlemetrics.com/servers/6803740")
все работает. Но последние цифры идут от пользователя, т.е. это переменная.

С нижеприведенными параметрами httpClient.GetFromJsonAsync код становится не рабочим.

("https://api.battlemetrics.com/servers/" + nums)
($"https://api.battlemetrics.com/servers/{nums}" )
Аноним 18/01/24 Чтв 15:21:30 #42 №3008413 
>>3008381
Сука, какое нахуй может быть желание помогать если в проблемах "пук среньк не работаит", а не исключение с стэктрейсом
Аноним 18/01/24 Чтв 17:40:58 #43 №3008574 
Да как в этом ебаном wpf реализовать нормальную mvvm навигацию...
Аноним 18/01/24 Чтв 19:55:40 #44 №3008739 
>>3008574
Нужно во-первых разобраться какого рода у тебя контент.

У тебя может быть модель для каждой страницы. Соответственно, каждая страница имеет свой уникальный тип.
К примеру у тебя страницы настроек приложения: CommonSettings, AppearanceSettings, KeyboardSettings.
Все эти страницы могут иметь общий интерфейс, к примеру IMySettings.

Далее, у тебя во вьюмодели есть свойство текущей страницы
IMySettings CurrentPage, куда ты и кидаешь экземпляр нужной страницы. Как ты это будешь делать на стороне вьюмодели — твое дело. К примеру это можно сделать при помощи команды, которая извлекает из словаря страниц нужную по строковому названию. Это название передается кнопкой команде при помощи CommandParameter.

Еще раз. Кнопка во вью вызывает команду ChangePageCommand с параметром CommandParameter="AppearanceSettings". Команда ищет в словаре страниц экземпляр модели IMySettings по ключу "AppearanceSettings" и пихает в свойство CurrentPage энтот экземпляр.

А что дальше? А дальше ты создаешь во вью ContentPresenter, к которому к свойству Content привязываешь свойство CurrentPage из вьюмодели. Но ничего не произойдет (максимум отобразит тип текущего экземпляра в CurrentPage), потому что ContentPresenter не понимает каким образом эти данные отображать.

И тут в игру вступают шаблоны данных, или DataTemplate.Эти шаблоны ты настраиваешь в своем ContentPresenter, каждое каждое вью соответствует определенному типу модели.
К примеру ты создаешь CommonSettingsPage : UserControl, который будет соответствовать типу CommonSettings.

<DataTemplate DataType="{x:Type models:CommonSettings}">
<views:CommonSettingsPage />
</DataTemplate>

И так далее для всех страниц. С этого момента ContentPresenter уже автоматом подбирает соответствующую вью под текущий экземпляр модели в CurrentPage.

Собсно вот, это простой пример.
Аноним 18/01/24 Чтв 20:11:47 #45 №3008752 
2024-01-1820-04-48.png
>>3008739
>ContentPresenter
Точнее ContentControl. Я их вечно путаю.

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

Есть еще ItemsControl, который позволяет вывести список разношерстных данных. К примеру так устроено окно свойств в вижуал студии. Посмотри на прикрил. Окно не знает что в него впихнут и в каком порядке. Тут настроен шаблон данных не для всей страницы, а для каждого типа: double, string, Brush, Thickness, CornerRadius и т.д.

Далее список просто отображается в соответствии с шаблоном каждого итема. Там же можно настроить группировку, сортировку, поиск и т.д.
Аноним 19/01/24 Птн 12:43:37 #46 №3009729 
2024-01-1912-26-32.png
2024-01-1912-38-45.png
Почему конвертер Point отказывается использовать культуру при парсинге строки?

Скрин 1. Я создал вьюмодель с тестовыми свойствами разного типа: Double, Thickness, Point
чтобы показать, что проблема только с Point
Скрин 2. Я создал вью и привязал данные вью модели. Тут два блока. В первом я привязал данные как есть, без редактирования культуры. Во втором блоке я привязывался к тем же значениям, но с указанием конкретной культуры: ru-RU.
Собсно на превью окна слева можно заметить, как разделители поменялись. Т.е. конвертация всех значений в string отрабатывает нормально.

Далее я запускаю приложение и пытаюсь изменять значения в каждом текстбоксе. Первый блок (тот, что без изменения культуры) по всем трем значениям отрабатывает хорошо. Во втором блоке без проблем обратно конвертируют Double и Thickness. А вот Point выдает исключение (в окне указал красным проблемный элемент):

System.Windows.Data Error: 7 : ConvertBack cannot convert value '36,6;48,7' (type 'String'). BindingExpression:Path=TestPointValue; DataItem='MainViewModel' (HashCode=48832851); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String') FormatException:'System.FormatException: The input string '6;48' was not in a correct format.
at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, ReadOnlySpan`1 value, TypeCode type)
at System.Convert.ToDouble(String value, IFormatProvider provider)
at System.Windows.Point.Parse(String source)
at System.Windows.PointConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)
at MS.Internal.Data.SourceDefaultValueConverter.ConvertBack(Object o, Type type, Object parameter, CultureInfo culture)
at System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'
Аноним 19/01/24 Птн 12:46:02 #47 №3009733 
>>3009729
Ах да, если я в последний текстбокс буду вносить данные как если бы там не была указана культура, то ошибки обратной конвертации не возникнет.

Т.е. вместо '35,6;48,7' я буду писать '35.6,48.7' то будет все норм.
Аноним 19/01/24 Птн 13:26:24 #48 №3009809 
2024-01-1913-25-10.png
>>3009733
Ну и в чем я не прав?
Аноним 19/01/24 Птн 16:05:21 #49 №3010005 
>>3009733
>Т.е. вместо '35,6;48,7' я буду писать '35.6,48.7' то будет все норм.
Попробуй 35.6;48.7 ради эксперимента
Аноним 19/01/24 Птн 17:09:42 #50 №3010056 
>>3008381
не пробовал просто строку в отдельной переменной конкатнуть затем кинуть в запрос?
Аноним 19/01/24 Птн 18:18:26 #51 №3010213 
2024-01-1918-17-13.png
>>3010005
Не работает. Нужны символы InvariantCulture.

При этом в Thickness принцип тот же и все распознается.
Основная проблема в том, как распознается разделитель данных на основе культуры. Пытался посмотреть исходник, но там что-то мудреное из internal классов.
Аноним 19/01/24 Птн 18:38:10 #52 №3010248 
изображение.png
>>3010056
Пробовал, та же картина.
Аноним 19/01/24 Птн 18:43:54 #53 №3010255 
>>3010213
Зачем используется какой-то там TokenizerHelper, если сепаратор списка можно получить так:
cultureInfo.TextInfo.ListSeparator
Аноним 19/01/24 Птн 23:47:42 #54 №3010609 
.png
>>3008381
УМВР
Аноним 20/01/24 Суб 21:41:55 #55 №3011633 
Подскажите либу распознавания речи для нет кора. Главное чтобы была мультиязычность. Гуглю и то ли гугл стал особенно плохо релевантное выводить либо этих либ нет, поэтому спрашиваю у анона
Аноним 20/01/24 Суб 21:45:20 #56 №3011640 
>>3011633
Машин лёрнинг модели, тысячи их ёпта.
https://huggingface.co/models?pipeline_tag=automatic-speech-recognition&sort=trending
Парсинг сайта Аноним 21/01/24 Вск 19:03:22 #57 №3012768 
Двач 1.png
Двач 2.png
Объясните нубу, пожалуйста, почему у меня вывод не как на пикче 1 получился, а как на пикче 2?


static void Main()
{
//

Dictionary<string, List<List<string>>> result = Parsing(url: "https://www.readfootball.com/tables.html");
if(result != null)
{
foreach(var item in result)
{
Console.WriteLine(item.Key);
Console.WriteLine("___________________________");
item.Value.ForEach(r=> Console.WriteLine(string.Join("\t", r)));
Console.WriteLine(item.Value);
}
}

}

private static Dictionary<string, List<List<string>>> Parsing(string url)
{
try
{
Dictionary<string, List<List<string>>> result = new Dictionary<string, List<List<string>>>();
using (HttpClientHandler hdl = new HttpClientHandler {AllowAutoRedirect = false, AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.None })
{
using (var clnt = new HttpClient(hdl))
{
using (HttpResponseMessage resp = clnt.GetAsync(url).Result)
{
if (resp.IsSuccessStatusCode)
{
var html = resp.Content.ReadAsStringAsync().Result;
if (!string.IsNullOrEmpty(html))
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var tables = doc.DocumentNode.SelectNodes(".//div[@class='block_content']//div[@class = 'two-table-row']//div[@class]");
if(tables != null && tables.Count > 0)
{
foreach(var table in tables)
{
var titelN = table.SelectSingleNode(".//div[@class = 'head_tb']"); //Заголовок таблицы на сайте
if (titelN != null)
{
var tbl = table.SelectSingleNode(".//div[@class = 'tab_champ']//table");
if (tbl != null) //Тут уже берём строки
{
var rows = tbl.SelectNodes(".//tr");
if (rows != null)
{
var res = new List<List<string>>();

foreach (var row in rows)
{
var cells = row.SelectNodes(".//tr");
if (cells != null)
{
res.Add(new List<string>(cells.Select(c => c.InnerText)));
//Console.WriteLine(e);
}
}
result[titelN.InnerText] = res;
}
}
}
}
return result;
}
else
{
Console.WriteLine("Нет таблиц");
}
}
}
}
//Console.WriteLine("Hello, World!");
}
}
}

catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return null;


}
}



Код один в один же написан, что не так?
Аноним 21/01/24 Вск 19:06:13 #58 №3012776 
Двач3.png
>>3012768
Блять. Вот код в тектовом
Аноним 21/01/24 Вск 19:06:45 #59 №3012777 
>>3012776
>>3012768
https://www.youtube.com/watch?v=n6aFRvhVkg8&t=31s&ab_channel=c%23%D1%83%D1%87%D0%B8%D0%BC%D1%81%D1%8F%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B5 по этому видео делал если что
Аноним 21/01/24 Вск 19:28:55 #60 №3012803 
>>3012776
Хребет бы за такой код ломал
Аноним 21/01/24 Вск 19:38:45 #61 №3012807 
>>3012777
>>3012776
>>3012768
Нашёл проблему. Там было в конце td, а не tr
Аноним 21/01/24 Вск 19:52:15 #62 №3012813 
>>3012776
Это троллинг?
Аноним 21/01/24 Вск 19:57:21 #63 №3012815 
>>3012803
Что не так, чел не насрал вместо одного метода десяток классов с однострочными методами как дядя хуйло в клин коде завещал?
Аноним 21/01/24 Вск 20:09:52 #64 №3012821 
>>3012815
Он насрал миллион скобок.
Аноним 21/01/24 Вск 20:11:58 #65 №3012823 
>>3012815
Вот сука первое на что падает глаз это диспоуз хттпКлиента и куча лишней вложенности которая нахуй не нужна
Аноним 21/01/24 Вск 20:33:44 #66 №3012844 
.png
>>3012768
Я бы как-то так переписал...
Аноним 21/01/24 Вск 20:38:24 #67 №3012847 
>>3012844
Все эти continue не нужны, их можно заменить на ?. с финальной проверкой на null. Кроме последнего, его надо просто выкинуть, инвертировав if обратно.
Аноним 21/01/24 Вск 20:38:51 #68 №3012848 
>>3012844
блок с tbl можно выкинуть
форич по строкам на линку
Аноним 21/01/24 Вск 20:39:58 #69 №3012849 
>>3012847
Точнее последний цикл, где res, надо через Linq переписать.
Аноним 21/01/24 Вск 20:40:05 #70 №3012850 
Если коротко то ты >>3012776 учись писать лучше (на старте писать хуёво не зазорно), а ты >>3012815 не защищай хуйню
Аноним 21/01/24 Вск 20:47:02 #71 №3012857 
>>3012815
много уровней - не знает про инвертирование if
Async().Result - сразу кастрировать
высрал портянку где код делает все - и запрос в сеть и парсинг
грязный метод - срет в консоль вместо кидания ошибки
возращает нулл при ошибке
создает хттпклиент на месте
уебищный шрифт
Аноним 21/01/24 Вск 20:47:11 #72 №3012858 
Бля падаю на самом простом нахой.
Че мне прописать что бы на сайте были категории?
Пример
zlypa.com/bmv/kek.html
zlypa.com/lada/4ebyrec.html
Категории хранятся в бд.
Что поменять или добавить что бы один контролёр отвечал за категории?
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
Аноним 21/01/24 Вск 20:51:05 #73 №3012864 
>>3012858
Осуждаю фронт на шарпах но вот https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-8.0
Аноним 21/01/24 Вск 20:52:36 #74 №3012866 
>>3012864
Пишу фронт на блейзере че таково то епт
Аноним 21/01/24 Вск 20:56:25 #75 №3012871 
>>3012864
Да я читал это всё, я не могу додуматься как это всё применить.
Собственно по этому тут и спрашиваю
Аноним 21/01/24 Вск 20:59:08 #76 №3012876 
>>3012871
а зачем усложнять себе жизнь магическими URI и попыткой их роутинга?
Аноним 21/01/24 Вск 20:59:37 #77 №3012877 
image.png
>>3012866
Это конечно имхо но фронт спа на чём угодно а бэк уже на шарпах.

>>3012871
Могу только в разрезе применения апи написать пример, но я очень сомневаюсь что там есть отличия
Аноним 21/01/24 Вск 21:05:20 #78 №3012890 
>>3012876
Ну хочу что бы было так.
Дефолтная же структура сайта site.com/cat/article.html
Аноним 21/01/24 Вск 21:09:46 #79 №3012896 
>>3012866
> Пишу фронт на блейзере че таково то епт
То что КАЖДАЯ, блядь, попытка делать фронт на шарпах заканчивается тем, что тебе теперь надо ОХУЕТЬ как изучить как это у майков работает и вникнуть как сделать то что на обычном жс за 2 минуты.

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

Ну и в результате - каждый раз - проще было писать клиент сразу на чем угодно, но не на шарпе.
Аноним 21/01/24 Вск 21:11:05 #80 №3012898 
>>3012890
ну и зря
ты можешь сделать кастом роутинг
но останешься без урлбилдера
Аноним 21/01/24 Вск 21:18:30 #81 №3012907 
>>3012898
Да действительно хуйня получится, я тогда не смогу нормально сделать /admin/ , придётся чета снова выдумывать.
Ну сделаю тогда просто контроллер Category
Аноним 21/01/24 Вск 21:23:29 #82 №3012914 
>>3012896
Даже не знаю, сейчас после обновы много положительных отзывов слышал о блейзере.
Думаешь стоит учить джава скрипт + фреймоврк тупо для пет проджекта?
Аноним 22/01/24 Пнд 15:51:55 #83 №3013925 
Как устроен ссаный биндинг? Кто нибудь пояснит мне?
Вот я привязываю свойство. По каким критериям происходит обновление, если я к примеру в это свойство кидаю новый экземпляр объекта?

И почему в некоторых случаях обновление происходит даже если я меняю свойство внутри объекта, а не объект в привязываемом свойстве?
Аноним 22/01/24 Пнд 17:48:21 #84 №3014111 
>>3013925
INPC и dp же
Аноним 22/01/24 Пнд 18:25:03 #85 №3014230 
>>3014111
Вот смотри, у меня есть dp-свойство MyBrush. Туда я помещаю экземпляр GradientBrush.

Потом я беру и в этом экземпляре меняю цвет градиента:
MyBrush.GradientStops[0].Color = Colors.Red;

После чего срабатывает событие изменения MyBrush. Почему?
Я не менял сам MyBrush, я менял свойства находящегося там экземпляра. Я понимаю, если бы я привязался к MyBrush.GradietnStops[0].Color (невозможно, но представим). Тогда была бы хоть какая-то логика: меняется свойство -> вызывается событие связанное с изменением конкретно этого свойства -> обновляются привязки.

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

В классе GradientBrush есть событие Changed, которое и срабатывает при любом внутреннем изменении чего либо, но почему оно влияет на вызов события изменения свойства MyBrush?
Аноним 22/01/24 Пнд 19:47:16 #86 №3014361 
>>3014230
Тебе бы основы подтянуть, анон. Почитать про то, чем классы отличаются от структур, о передаче по ссылке и по значению
Аноним 22/01/24 Пнд 20:12:01 #87 №3014386 
>>3014230
https://learn.microsoft.com/en-us/archive/msdn-magazine/2008/september/foundations-dependency-properties-and-notifications

Читай главу
The Freezable Difference
Аноним 22/01/24 Пнд 21:55:37 #88 №3014593 
>>3002293 (OP)
>https://docs.microsoft.com/ru-ru/dotnet/maui]
даже шапку сделать не можете куда вам с великой джавой тягаться?
Аноним 23/01/24 Втр 01:07:10 #89 №3014879 
>>3014593
>>https://docs.microsoft.com/ru-ru/dotnet/maui]
>даже шапку сделать не можете куда вам с великой джавой тягаться?
Жабоёб прям даже не знает до чего ещё доебаться.
Аноним 24/01/24 Срд 00:50:39 #90 №3016426 
>>3014386
Прочитал, интересная статья. Там описано, что Freezable переопределяет событие OnPropertyChanged. Теперь я понял почему возникает событие Changed, если я что-то внутри изменил и почему у этого события нет пояснения что конкретно было изменено.

Но я все еще не понимаю кто в биндинге привязывается к событию Changed. Вернемся к моему примеру, я тут подробнее расписал класс:

public class MyClass : INotifyPropertyChanged
{

. . private Brush myBrush;

. . public Brush MyBrush
. . {
. . . . get {
. . . . . . . . return myBrush;
. . . . . }
. . . . . set {
. . . . . . . myBrush = value;
. . . . . . . PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MyBrush)));
. . . . . }
. . }

. . public event PropertyChangedEventHandler? PropertyChanged;

}

Когда я привязываюсь к MyClass.MyBrush, привязка отслеживает событие MyClass.PropertyChanged, она не отслеживает MyBrush.Changed. Ей должно быть вообще плевать что в MyBrush хранится и что с ним происходит.
Почему, когда я делаю это:
MyBrush.GradientStops[0].Color = Colors.Red;
Срабатывает не только событие MyBrush.Changed, но и MyClass.PropertyChanged?

Надо, короче, запруфать это безобразие.
Аноним 24/01/24 Срд 01:09:20 #91 №3016447 
>>3016426
>Срабатывает не только событие MyBrush.Changed, но и MyClass.PropertyChanged
не подтверждаю такое поведение.
перечитывется {Binding MyClass.MyBrush - да, но INPC для MyClass не дергается
Аноним 24/01/24 Срд 12:13:02 #92 №3016852 
Сап, уважаемые. Вытянул волчий билет, как думаете ИБ во многих конторах есть?

Мимо опыт есть
Аноним 24/01/24 Срд 12:35:46 #93 №3016875 
2024-01-2411-36-03.png
2024-01-2412-23-35.png
123405040.mp4
>>3016447
Зато срабатывает конвертер
Пикрил 1 - мой конвертер, который просто извлекает цвет из второй точки градиента. В методе конвертации и обратной конвертации я печатаю сообщение, сигнализирующее о срабатывании метода.

Пикрил 2 - привязываю градиент из MyBrush к бэкграундам двух прямоугольников. К одному из них привязка осуществляется через конвертер из пикрил 1

Далее видеорил, где я нажатием кнопки меняю вторую точку градиента. Как видно, каждое изменение точки градиента почему-то запускает метод Convert. Разве конвертер не запускается при событии MyClass.PropertyChanged?
Аноним 24/01/24 Срд 12:40:46 #94 №3016882 
>>3016447
>перечитывется {Binding MyClass.MyBrush
А как ты это определил?
Аноним 24/01/24 Срд 12:44:13 #95 №3016887 
>>3016875
В конвертере опечатка. Там действительно меняется вторая точка градиента, просто скрин взял неактуальный:
return ((LinearGradientBrush)value).GradientStops[1].Color;
Аноним 24/01/24 Срд 14:56:48 #96 №3017036 
>>3002293 (OP)
Что делать если мне нравится платформа .NET, но все говорят что он никому не нужен и лучше учить PHP для быстрого вката в индустрию чтобы потом перейти на современный Go?

Решил продублировать тут чтобы узнать мнение у работающих уже на сишарпе.
Аноним 24/01/24 Срд 15:17:04 #97 №3017083 
>>3016852
Тебе в МВП
Аноним 24/01/24 Срд 15:31:19 #98 №3017102 
>>3016882
Твой Convert пишет потому что Binding MyBrush это бинлинг к фризабле и конечно при любом изменении внутри фризаблы он перечитывается.

INPC у MyClass при этом нерушим - некому его вызывать
Аноним 24/01/24 Срд 15:33:38 #99 №3017108 
>>3017036
Ты определись что ты хочешь "работать с тем что тебе нравиться" или "быстро вкатиться". Это немного разные задачи.
>>3017036
>но все говорят что он никому не нужен
Кто эти 'все'? Они с тобой сейчас в одной комнате?
Аноним 24/01/24 Срд 16:03:49 #100 №3017155 
>>3017102
>Binding MyBrush это бинлинг к фризабле
А какого черта конвертер прилип к содержимому свойства MyBrush, а не к событию MyClass? Ничего не понимаю.

В моем понимании конвертер должен отработать только когда сработает обновление привязки, а оно сработает только если вызовется событие MyClass.PropertyChanged.

Ерунда какая-то.
Аноним 24/01/24 Срд 16:29:44 #101 №3017199 
>>3017108
Мне хочется писать на том что нравится, дотнет почти все мои хотелки закрывает. Но и слезть с маминой шеи хочется быстрее.
>Кто эти 'все'? Они с тобой сейчас в одной комнате?
В дискорде)
Аноним 24/01/24 Срд 16:46:17 #102 №3017226 
>>3017155
>А какого черта конвертер прилип к содержимому свойства MyBrush, а не к событию MyClass
Смотри же свой биндинг
{Binding MyBrush, Converter={StaticResouce GradientStopCnv}
то есть ты создал биндинг к MyBrush да с конвертером.

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

MyBrush будет вызывать INPC и обновление если ты сделаешь MyClass.MyBrush=new(...), потому что сработает INPC у MyClass - то есть классический подход к нотификации

Но MyBrush является Freezable и биндинг подписывается дополнительно на ченжед. И когда ты меняешь что-то внутри MyBrush, то биндинг ловит события ченджед и ПЕРЕЧИТЫВАЕТ свойство MyBrush попутно дергая конвертер, который находится в том же биндинге. А механизм INPC вообще никак не затрагивается.
Аноним 24/01/24 Срд 16:48:46 #103 №3017233 
>>3017155
ну и не забывай - кистей не должно быть во вьюмоделях если у тебя они из MVVM
Аноним 24/01/24 Срд 18:48:46 #104 №3017445 
>>3017233
>ну и не забывай - кистей не должно быть во вьюмоделях если у тебя они из MVVM
А как же мне хранить настройки, темы и прочее? Почему нельзя хранить?

>>3017226
>MyBrush будет вызывать INPC и обновление
INPC это интерфейс, а вызывать будет PropertyChanged, на которое биндинг и подписан. Когда событие вызывается, биндинг смотрит на аргументы события и если там значится имя ожидаемого свойства, то тогда привязка обновляется.

> если ты сделаешь MyClass.MyBrush=new(...), потому что сработает INPC
Вот именно, любое говно, проходящее через сеттер просто вызовет событие. Все еще непонятно про чем тут статус Freezable.

>Но MyBrush является Freezable и биндинг подписывается дополнительно на ченжед.
Вот это я и пытаюсь выяснить. В статье этого факта не увидел. Оказывается идет дополнительная подписка, что вроде как похоже на правду. Но для чего? Все, кто получил экземпляр кисти и так подписан на Changed, а в данном случае в MyBrush интересует только изменение экземпляра.

И еще одна странная особенность. Почему то это не работает с ConverterBack.
Ради эксперимента я связал два свойства через конвертер. В первое свойство помещается экземпляр кисти, далее конвертер получает этот экземпляр в методе Convert, клонирует его и отправляет во второе свойство. Я ожидаю, что если во втором свойстве вызвать событие Changed, то это вызовет метод ConverterBack. Но нет.
Аноним 24/01/24 Срд 19:08:23 #105 №3017470 
>>3017445
>Почему нельзя хранить?
потому что вьюмодель ничего не знает о виде. Пиши их держа в уме установку - вьюмодели можно безопасно вынести в сборку, где нет ссылки на System.Windows и другие WPF штуки. Ну и можно в любой момент выбросить WPF и сделать консольный гуи без переделок вьюмоделей

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

> проходящее через сеттер просто вызовет событие. Все еще непонятно про чем тут статус Freezable.
вот только ты НЕ вызываешь сеттер, поэтому механизм INPC бездействует. А работает дополнительный механизм подписки на ченджед, который присущ Freezable. Таким образом, биндинг перечитывает MyBrush, но сеттер с его INPC вообще не причем

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

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

>отправляет во второе свойство
это сеттер, то есть INPC

>вызовет метод ConverterBack
хз как у тебя сеттер вообще должен вызывать ConverterBack
ConverterBack вызается в виде из контролов при двустороннем биндинге
Аноним 24/01/24 Срд 20:24:44 #106 №3017616 
2024-01-2420-11-29.png
>>3017470
>хз как у тебя сеттер вообще должен вызывать ConverterBack
пикрил — то что я имею ввиду

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

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

>System.Windows
Ну это жестко. Слишком жестко. Это мне че, переписывать все библиотеки? У меня жизни не хватит. Но суть понял.

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

Конечно, на каком-то этапе ты можешь хранить RGB данные, но там куча всего нужно: трансформации, градиенты, текстуры. По сути нужно переизобретать свою собственную кисть и потом ее конвертировать в оригинал. А сколько таких данных? Кошмарное количество.

Идея понятна, но такой подход для богатеньких.
Аноним 24/01/24 Срд 20:28:36 #107 №3017619 
>>3017470
>в статье прямо говорится что фризабле используют другой механизм уведомлений.
Вот как только я подпишусь на изменение свойства фризабле класса, вот тогда пусть этот способ и использует. А пока что я подписался на изменение свойства в котором этот класс хранится.

Я не знаю как мне еще донести свою мысль.
Аноним 24/01/24 Срд 21:22:18 #108 №3017725 
>>3017616
>пикрил — то что я имею ввиду
ну значит ты не понимаешь как ты подписался. Потому что ConverterBack вызывает биндинг, а для этого этот биндинг должен быть,причем биндинги требуют dp, то есть твой MyBrushB должно быть минимум dp, а вот MyBrushA уже просто свойством

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

>переписывать все библиотеки
вьюмодели обычно в приложении, а не в либах.
Сам я использую feature namespace, то есть у меня вьюмодели и вид лежат вместе, а не в тупых папках Views/ViewModels
Но я знаю что никогда не буду переписывать вид на другой
И даже в этом случае я пишу вьюмодели как будто WPF не существует.

>Идея понятна, но такой подход для богатеньких
Какой такой. У тебя будет тот же код, просто он будет в слое вида, а не во вьюмоделях.

>>3017616
> А пока что я подписался на изменение свойства в котором этот класс хранится.
ну может где то и подписался, но в твоем посте с картинками и видео - этого нет. Там просто биндинг на свойство.
Аноним 24/01/24 Срд 22:03:49 #109 №3017826 
>>3017725
>MyBrushB должно быть минимум dp, а вот MyBrushA уже просто свойством
Оба свойства - dp

>она слушает все.
Пиздеж, ща проверю. Вряд ли обновится привязка если я вызову кастомное событие внутри кастомного класса.

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

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

> А пока что я подписался на изменение свойства в котором этот класс хранится.
Это продолжение темы почему привязка не должна подписываться на события экземпляра свойства. Это превышение ее полномочий.
Короче, я устал писать одно и то же. Мы похоже не понимаем друг друга.
Аноним 24/01/24 Срд 22:31:59 #110 №3017904 
>>3017826
>Оба свойства - dp
я обычно никогда биндинги вручную не пишу, но вообще там же еще есть триггеры "обновления назад" типа смена фокуса вызывает обновление привязки, не забывай об этом.
может в биндинге из кода нужно вручную вызвать обновление ибо никакой смены фокуса нет.

>если я вызову кастомное событие внутри кастомного класса.
ты о чем вообще
биндинг слушает INPC и в случаее фризабле еще слушает фризабловый ченджед

>Результат вообще не одинаковый
одинаковый - в обоих случаях кисть будет полностью перечитана
ну да, необдуманное использование вызывает много перерисовок. Ну на то они и фризабле что подразумевается иммутабельность с которой жить проще - какой смысл знать тебе в привязке что на 3 слоя ниже поменялось свойство Foo? Что тебе делать с этим знанием? Это вообще интернал объект и все, что ты можешь - перечитать всё заново.
Не меняй ты внутренности кисти, а меняй ты всю кисть - никогда бы и не знал про фризабле тонкости.

>Возможно тебе не приходилось
мне как приходилось. WPF это мой основной доход
>У меня шейпы, кисти, да даже банальный Point это все систем виндовс.
верно. но это знает вид, а вьюмоделям до этого дела нет.
вьюмодель хранит данные, допустим список имен "вася, петя, коля" то есть "ЧТО отображать", но ей плевать какой там будет шрифт, фон, цвет шрифта, размер итема в списке, выравнивание, отступ и так далее - этим занимается ВИД с его ответом на вопрос "КАК отображать"
А потому если класс имеет суффикс ViewModel, то в нем ничего этого быть не должно

>Это превышение ее полномочий
полномочия биндинга - подписаться на INPC + ченджед для фризабле. Не нравится? пиши свой биндинг или не меняй фризабле изнутри и будет тебе счастье и покой.

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

ты сам выбираешь стул
ты уже выбрал один стул - WPF, теперь выбирай где присесть
Аноним 25/01/24 Чтв 00:42:57 #111 №3018065 
>>3017904
>я обычно никогда биндинги вручную не пишу, но вообще там же еще есть триггеры "обновления назад"
Я биндил через xaml. По умолчанию "Two Sided", но я пробовал ставить явно. Не хочет работать. В обратную сторону работает только INPC, т.е. когда я меняю экземпляр кисти, но вот на события Changed не реагирует.
Короче, для меня вот эта магия остается непонятной.
Т.е. с одной стороны отслеживается оба события INPC + ченджед для фризабле, а с другой стороны только одно INPC.

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

>но это знает вид, а вьюмоделям до этого дела нет.
Но как-то информацию в вьюмодели надо хранить. Где хранить к примеру координаты чего либо? Или вот есть задача сделать векторный редактор. Нужно хранить список выделенных объектов. Где эти кривые хранить?
История действий, слои, корзина и прочее — все должно относиться ко вьюмодели, но при этом должно хранить информацию о кривой, которая относится к неймспейсу System.Windows

>но ей плевать какой там будет шрифт, фон, цвет шрифта
Если это не приколоченный гвоздями интерфейс, то в любом более или менее нормальном приложении, "Appearance" это один из разделов настроек, в котором хранятся и кисти, и размер шрифта и название шрифта. Хотя я не видел, чтобы эти данные были сложными, в основном это простейшие типы, максимум Color.
Аноним 25/01/24 Чтв 02:30:40 #112 №3018130 
>>3018065
>но вот на события Changed не реагирует
ну технически это верно. что он может поменять в иммутабле объекте? ничего же
А INPC - там обычное свойство с сеттерами.

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

>Нужно хранить список выделенных объектов. Где эти кривые хранить?
в стейте. то есть внутри контрола как угодно храни.
все контролы хранят внутри себя и наружу только некоторые свойства выставляют.

>хранить информацию о кривой
ага, информацию. но не саму кривую. И то не факт.
вьюмодели - не вид и не должны знать о рисовании.
А контролы не обязаны требовать вьюмодель для хранения чего то.
А если у тебя вьюмодель ВНУТРИ контрола, то это уже не вьюмодель из MVVM (где по правилам нужно отделять мух от котлет), а стейт - где нет никаких ограничений ибо это все относится к виду (и то что это INPC - не делают его не видом)
Потому я упомянул вьюмодели в разрезе MVVM - вот им про вид знать нельзя, а стейтам можно конечно.

>"Appearance" это один из разделов настроек, в котором хранятся и кисти, и размер шрифта и название шрифта.
да какая разница. главное что вьюмодель не содержит в себе части вида.
то есть в настройках у тебя будет AppearanceViewModel где у тебя будет свойство цвет #fafafa и конвертер, а не объект Brush
название шрифта и конвертер, а не сам шрифт
Аноним 25/01/24 Чтв 03:50:55 #113 №3018143 
Можно в винформах делать формы под линукс (дебиан, если важно)?
Если нет, то где можно, чтоб, как в винформах, программировать мышкой и изображения легко получать через copyfromscren?
Аноним 25/01/24 Чтв 12:13:48 #114 №3018445 
>>3018143
Можно было компилировать WinForms приложения под Linux. Чем проще приложение, тем лучше оно работало. Нынче Майкрософт похоронила Mono. Т.ч. ты ещё заебёшся искать старый Monodevelop и библиотеки.

И в Monodevelop не было редактора форм. Создавать и редактировать формы придётся в Visual Studio.
Аноним 25/01/24 Чтв 13:03:33 #115 №3018529 
2024-01-2512-42-33.png
>>3018130
>ага, информацию. но не саму кривую.
Да понятно, но вот за это я MVVM и не люблю. Казалось бы у тебя уже есть объект кривой с данными: имя, трансформации, стиль контура, стиль заливки. Но ты должен создать модели с аналогичными свойствами по суди дублируя всю библиотеку. А там только для одного стиля контура кривой ебнешься сколько параметров: контур сплошной или пунктирный, какой формы будет наконечник кривой, каким образом будут стыковаться сегменты, какая толщина кривой, какая у нее кисть. Десятки параметров. Сами кисти тоже имеют кучу свойств. Вроде уже есть готовые структуры Matrix, Point, но ты должен написать свои аналоги.

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

Это пиздец. Это натурально перелопачивать всю систем виндовс.

>И то не факт.
Если мы говорим о графическом редакторе, то там интерфейс пронизан данными о кривых (пикрил). Это не может не проходить через вьюмродель.
Аноним 25/01/24 Чтв 13:44:21 #116 №3018588 
bandicam 2024-01-25 13-33-36-749.mp4
>>3018143
MAUI, Avalonia. Первый от майкрософт, второй сторонний.
По идее на всех можно мышкой сверстать интерфейс.
Сам я ими не пользовался, но если они как WPF, то там тоже есть список UI-элементов, которые ты можешь перетаскивать на окно мышкой и компоновать, есть окно свойств. Собсно я когда с формсов переходил на WPF, первый месяц так и делал.

Вроде как тут обычно топят за Avalonia, но она не идет из коробки.
Аноним 25/01/24 Чтв 15:23:42 #117 №3018780 
Сап ребятки-котятки. Есть ли какой-то материал, который объясняет операторы и операции с ними? Интересуют числовые. Прочитал в книге материал и не понял немного (пытаюсь мыслить логикой обычной математики). Хз, может надо передохнуть с мыслью и сесть заново перечитать мб так понятнее будет
Аноним 25/01/24 Чтв 15:26:37 #118 №3018787 
>>3018529
>но вот за это я MVVM и не люблю
это не проблема MVVM. Это ты пытаешься впихнуть все в MVVM зачем то и использовать их как хранилище состояния.
MVVM он служит для того чтобы быть отделенным от вида, а если он у тебя привязан к нему, то это стейт в виде.

>Это не может не проходить через вьюмродель.
может. весь твой редактор может быть выполнен как угодно и наружу выставлять мизер.
отделяй мух от котлет.
у тебя не вьюмодели из MVVM, а стейт твоего редактора.
Аноним 25/01/24 Чтв 16:25:38 #119 №3018885 
https://github.com/dotnet/runtimelab/issues/2398
Почему так? Зачем шарпухи насрали себе в шаровары своими асинк/эвейтами, что теперь невозможно как-либо выйти из ситуации, потому что кодовая база любого проекта засрана ими? Почему белые разрабы джавы оказались умнее индусов майкрософта и просто элегантно ввели гринтреды без каких-либо поломок и изменений в коде?
Аноним 25/01/24 Чтв 19:04:06 #120 №3019191 
>>3018885
Написано же, что таски с эвейтами быстрее, чем грин треды.
Аноним 25/01/24 Чтв 19:17:40 #121 №3019217 
>>3018780
Ты лучше конкретно напиши действие какого оператора или что конкретно ты не понял. Т.к. с логики любого кто уже разбирается в коде там все элементарно и трудно будет посоветовать какой-то конкретный источник.
Аноним 25/01/24 Чтв 20:09:20 #122 №3019328 
Почему методы-обработчики событий несмотря на то, что получают в качестве параметра sender обычно не является статическими? И можно ли их делать таковыми, если метод никак не обращается к данным экземпляра?
Аноним 25/01/24 Чтв 20:13:18 #123 №3019347 
>>3018787
>то это стейт
Это какой-то термин?
Аноним 25/01/24 Чтв 21:28:51 #124 №3019575 
>>3019347
угу, это метафора - хранящееся состояние.

Вот делаешь ты сложный контрол и можешь хранить состояние в code-behind, но это может быть сложно или лапша и вообще у тебя там много вложенных контролов. И ты начинаешь делать классы для хранения состояния. И в итоге (но не факт, просто тебе может быть так привычно) у тебя получается иерархия которая похожа кодом на вьюмодели из MVVM как близнецы (и даже имеет окончания VIewModel и навигацию и т.д.).
Только семантика другая - хранить состояние, а поэтому можно завязываться на вид, а также не являются прослойкой между видом и моделью.
вьюмодели тоже стейт же.

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

Не нужно все пихать во вьюмодели приложения. Не все дружелюбно ко вьюмоделям. И потому вьюмодель приложения из MVVM не должна хранить кишки. Она хранит свой стейт
берем, допустим, AvalonEdit как сложный редактор. Вьюмодель будет содержать string Text {get; set;}, разные команды, высокоуровневые абстракции. А все хранение текста на низком уровне и работа с ним - будет в AvalonEdit. И при смене состояния AvalonEdit через code-behind будет изменено состояние вьюмодели.

Вот пилишь ты свой редактор. Он не кросс. Ты сделал то, что ты вьюмоделями называешь с кистями и линиями. А потом тебе задача - дополнительно на линуксах пусть рисует через GTK (а на винде WPF). И весь твой код хранящий линии тебе придется дублировать. И получается что хранить тебе нужно не линии и кисти, а данные и прослойка которая отделяет тебя от движка рисования.
ну да лишняя работа, но тут 2 стула - либо ты сидишь на одном и "ничего лишнего не нужно будет" или же ты абстрагируешься как то.

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

Так что может ты и делаешь этот MVVM внутри контрола, но я то откуда знаю. Я пишу приложения, а в контролах мне такого не требуется. Контрол это вообще низкоуровневый код может быть но и его достаточно.
Аноним 25/01/24 Чтв 21:30:51 #125 №3019579 
>>3018529
MMVM, конечно, кривое говно из жопы индуса, но тут ты не прав. Бизнес-логика - это одно, presentation layer - совсем другое. Ок, сегодня у тебя вью повторяет все свойства структуры Point, завтра понадобится показать новое свойство и ты соснешь.
Рассматривай MVVM как классическую MVC, в которой дебилы из микрософт объединили модель и контроллер в одну неведомую хуйню. Ты пишешь контроллер, который не возвращает джейсон, а устанавливает сам себе свойства.
Аноним 26/01/24 Птн 11:49:14 #126 №3020307 
Как работать с БД в WPF/Avalonia? Конкретнее как получать id? Раньше при написании приложений на питоновском tkinter просто делал невидимый столбец с айдишником (речь ест-но о табличном контроле). Подумал также сделать в Avalonia но теперь думаю, не является ли это костылем. Видел на просторах SO про некий способ с адаптером и привязкой к классу, но ест-но писавший о нем не дал примера к коду. Зря ли я загоняюсь или есть момент когда все эти невидимые столбцы могут выстрелить?
Аноним 26/01/24 Птн 11:49:37 #127 №3020309 
image.png
>>3002293 (OP)
индусища...
Аноним 26/01/24 Птн 11:51:27 #128 №3020313 
>>3018885
Для вас говноедов уже отдельный загончик завели: https://2ch.hk/pr/res/2973076.html . Так что не засирай тред, съеби в загончик и варитесь там в говне с такими же любителями со всех сторон барикад. Мешаешь уважаемым людям WPF обсуждать.
Аноним 26/01/24 Птн 12:48:16 #129 №3020369 
>>3020307
Я не совсем понимаю зачем делать столбцы невидимыми. Контрол только отображает данные, либо их редактирует. Скрыв столбец, ты избавляешься от первого и второго. Так зачем этот столбец учитывать в таблице?

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

Если ты контрол со столбцом id используешь для привязки другого контрола, то так тоже не делают. Обычно привязываются напрямую к дата контексту. Если эти данные надо как-то интерпретировать или объединить с другими данными, то используют ValueConverter (может это называли адаптером?)
Аноним 26/01/24 Птн 12:51:05 #130 №3020373 
>>3020307
>>3020369
Или в БД в принципе отсутствует свойство id? А для чего оно нужно, если ты его по итогу скрываешь?
Аноним 26/01/24 Птн 13:01:29 #131 №3020385 
>>3018885
всего то через 13 лет как первопроходец шарп задал эту тему (которую потом стащили куча языков к себе)

Умные разрабы жавы ЛОООЛ. 13 лет думали умные
и бесконечное число лет будут делать гетсет искаропки

уйди говноед.
Аноним 26/01/24 Птн 15:39:19 #132 №3020614 
изображение.png
Всем привет. Кто-нибудь в курсе как или где изменить сообщение при ошибки Json конвертации? На данный момент имею то, что на скрине. Вот этот ответ на stackoverflow не помог https://stackoverflow.com/questions/75473675/is-there-a-way-to-override-the-serialization-error-message. Проект на .net8
Аноним 26/01/24 Птн 15:58:45 #133 №3020661 
>>3020614
что значит не помог? И вообще зачем тебе трогать её?
Аноним 26/01/24 Птн 16:14:37 #134 №3020673 
>>3020373
У меня есть кнопки для редактирования строк таблицы.
Заранее говорю что смотрю по Авалонии.
Почему раздумаю: в SO пишется что обработчики (Events) гораздо лучше чем команды (Commands) т.к. меньше бойлерплейта.
Но в отличие от команд я не понимаю как в обработчиках передать id без его скрытия в таблице в условно невидимом столбце, видимо EventHandler перегружать надо, и тогда только смогу напрямую прокинуть в DeleteHint сам ID, без мудрения с родительскими контролами и невидимостью.
Есть первый вариант для кнопок изменения/удаления (команды):
Использовать команды для этих кнопок (сами столбцы в TreeDataGrid в XAML нормально не сделать, в примерах только через создание FlatTreeDataGridSource)


Source = new FlatTreeDataGridSource<Hint>(Hints)
{

Columns =
{
new TextColumn<Hint, string>("Text", x => x.HintText, (r, v) => r.HintText = v, options: EditOptions),
new TextColumn<Hint, string>("Comment", x => x.Comment, (r, v) => r.Comment = v, options: EditOptions),
new TemplateColumn<Hint>("", new FuncDataTemplate<Hint>((a, e) => DeleteButtonInit(a.Id), supportsRecycling: true)) //тут перекидываем id в кнопку, DeleteButtonInit создает кнопку
},
};

public Button DeleteButtonInit(int id) //создание кнопки с командой для удаления
{
Button btn = new Button();
btn.Content = "Delete";
btn.Command = DeleteHintCommand;
btn.CommandParameter = id;
return btn;
}

public void DeleteHint(int id) //само удаление
{
var removed = new Hint(id);
using (var DataSource = new HelpContext())
{
DataSource.Hints.Attach(removed);
DataSource.Hints.Remove(removed);
DataSource.SaveChanges();
}
Hints.Remove(removed);
}


Второй вариант - event

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

new TemplateColumn<Hint>("", new FuncDataTemplate<Hint>((a, e) => DeleteButtonInit(), supportsRecycling: true))

public Button DeleteButtonInit() //создание кнопки с обработчиком для удаления
{
Button btn = new Button();
btn.Content = "Delete";
btn.Click += DeleteHint;
}
private void DeleteHint(object sender, RoutedEventArgs e) //сам обработчик
{
Button btn = (Button)sender;
var id = btn.Parent.Parent[0]; //тут еще не до конца разобрался как невидимый столбец подцепить, но вкратце его можно выцепить через родителоьский контрол (для этого и невидимость)
var removed = new Hint(id);
using (var DataSource = new HelpContext())
{
DataSource.Hints.Attach(removed);
DataSource.Hints.Remove(removed);
DataSource.SaveChanges();
}
Hints.Remove(removed);
}
Аноним 26/01/24 Птн 16:30:31 #135 №3020692 
>>3020661
Значит, что я попробовал варианты ответов и ничего существенно не поменялось. Ответ такой же, разве что builder.Services.AddControllers().AddJsonOptions(options =>
options.AllowInputFormatterExceptionMessages = false);
немного меняет вывод "$.Id". Потрогать хочу, чтобы изменить вывод ошибки. Типо "Вы не ввели такое-то значение" и т.д.
Аноним 26/01/24 Птн 17:25:24 #136 №3020813 
>>3020692
1. проблема формата, если так нужно самому какую то логику делать то и мапь сам из string? с какими угодно ошибками
2. на фронте должны быть все ошибки заранее выкинуты и запрос даже отправлен не должен быть
Аноним 26/01/24 Птн 19:50:20 #137 №3021091 
javacs.png
>>3018885
Уноси свое проприетарное говно.
Аноним 26/01/24 Птн 20:28:42 #138 №3021140 
image.png
>>3020313
Покормил их же говном
https://hotforknowledge.com/2024/01/13/1brc-in-dotnet-among-fastest-on-linux-my-optimization-journey/
Аноним 26/01/24 Птн 22:19:09 #139 №3021259 
>>3020813
Это понятно, я когда фронт буду делать все проверки реализую. Но что если кто-нибудь захочет с постмана отправить, так сказать во вред или чисто из интереса посмотреть, что будет
Аноним 26/01/24 Птн 22:29:34 #140 №3021271 
>>3021259
То и будет. Ошибка абсолютно понятная которую только именно что васян подпивас не поймёт
Аноним 26/01/24 Птн 23:12:22 #141 №3021334 
>>3021271
Хмм. Понял, тогда так и оставлю. Просто я думал, что выносить наружу такие ошибки не очень, поэтому и хотел переписать вывод ошибки
Аноним 27/01/24 Суб 00:48:14 #142 №3021426 
>>3021091
Есть же OpenJDK
Аноним 27/01/24 Суб 01:02:46 #143 №3021434 
>>3021426
Но качают и ставят все оракловую.
Кто-то когда-то говорил еще про мелкие подводные.
Аноним 27/01/24 Суб 01:38:35 #144 №3021467 
>>3021434
Никто не качает оракловую ждк. Подводные высосаны из пальца теоретиками, которые дрочат спеки вместо написания кода.
Аноним 27/01/24 Суб 01:51:59 #145 №3021480 
>>3021467
Ну я качаю оракловскую жабу, опенждк ставлю только на линь т.к. она в репах лежит
Аноним 27/01/24 Суб 03:59:04 #146 №3021511 
>>3021140
Это один из самых бесполезных бенчмарков из всех существующих, потому что в реальном мире никто никогда так код не пишет, потому что это совершенно невозможно поддерживать.
Аноним 27/01/24 Суб 07:59:26 #147 №3021563 
>>3021480
А какое отношение твой долбоебизм имеет к теме?
Аноним 27/01/24 Суб 10:41:23 #148 №3021647 
>>3002293 (OP)
Подскажите быструю и простую key-value базу на шарпе, с открытым кодом.
Аноним 27/01/24 Суб 13:14:19 #149 №3021785 
Кто-нибудь шарит за бибу для Unity - Mirror?
Аноним 27/01/24 Суб 16:57:02 #150 №3022079 
>>3021467
Я больше чем уверен, ты только сегодня узнал, что вообще есть коммерческая ждк и есть где-то какая-то попенсорсная.
Аноним 27/01/24 Суб 16:57:43 #151 №3022082 
>>3021511
Что не так то?
Аноним 27/01/24 Суб 18:35:51 #152 №3022240 
Господа, как у вас принято писать приватные свойства, через подчеркивание или это моветон?
private int privateData;
или
private int _privateData;
Аноним 27/01/24 Суб 18:37:35 #153 №3022242 
>>3022240
Через подчеркивание конечно. Это официальный кодстайл от майков.
Аноним 27/01/24 Суб 18:42:06 #154 №3022252 
>>3022240
Пишу так как сами майки пишут аспнет кор, да и большинство вокруг кроме отбитышей так пишут
Аноним 27/01/24 Суб 18:42:58 #155 №3022254 
>>3022242
Спб, а можно ссылку на кодстайл, меня чет гугл унизил.
Аноним 27/01/24 Суб 18:48:52 #156 №3022265 
image.png
Еще вопрос, для приватный методов нужно использовать нижний регистр для первой буквы или это просто особенность winform?
Аноним 27/01/24 Суб 18:55:17 #157 №3022279 
>>3022265
Просто так повелось в винформах
Аноним 27/01/24 Суб 18:55:45 #158 №3022281 
>>3022265
Ну и в целом иногда обработчики событий так неймят
Аноним 27/01/24 Суб 19:03:00 #159 №3022299 
>>3022082
Ты видел, какой там код? Это пиздец, там такие лоулевел микрооптимизации, что страшно становится.
Ну и это изначально конкурс жабадебильных олимпиадников, кто задрочится сильнее, а не сравнение производительности платформ.

Чтобы сравнить джаву и дотнет, надо написать сначала наивные реализации с построчным чтением, складыванием в обычные словари/хэшмэпы и вычислением результата. Оно, конечно, будет очень медленно работать, но зато будет видно, как платформы справляются с обычным кодом.
Потом можно попробовать очевидные оптимизации типа буферного чтения по мегабайту и вычисления среднего/мин/макс на ходу без загрузки всего в память.
На этом, в принципе, можно и закончить.
Все остальные оптимизации надо просто писать на С.
Аноним 27/01/24 Суб 19:04:02 #160 №3022302 
>>3022242
а потом пришли primary конструкторы и послали в жопу кодстайлы )
Аноним 27/01/24 Суб 20:22:45 #161 №3022396 
>>3022265
Винформы просто генерируют имена обработчиков по имени объекта на форме, который эмитит это событие.

Нормальная конвенция по именам:

с префиксом _ - все приватные поля.
все методы - в PascalCase
переменные - в camelCase
Аноним 27/01/24 Суб 20:29:05 #162 №3022407 
>>3022265
Это особенность вижуалстудии. Винформы сами по себе ничего не генерируют, обработчик события можно назвать хоть капсом.
Аноним 27/01/24 Суб 23:01:40 #163 №3022688 
>>3022396
>>3022240
>>3022242
По умолчанию студия не делает поле с подчеркиванием. Не городите чушь.
Аноним 27/01/24 Суб 23:28:04 #164 №3022747 
.png
>>3022688
> По умолчанию студия
При чем тут вообще студия? Речь о кодстайле.
Аноним 27/01/24 Суб 23:31:20 #165 №3022766 
Аноны, пробовали ли вы уже деплоить что-либо с восьмым дотнетом? Решил перевести пет-проект на него, заранее поменял в докерфайле и компоузе 80 порт на 8080, контейнеры все поднялись, но у контейнера с приложением с какого-то хера проброшены порты, указанные в launchsettings вместо тех, что в докерных файлах или тех, что можно насильно указать в appsettings для Kestrel.

Это я рукожоп, баг в докере или теперь при конфигурации учитывается launchsettings, который всегда раньше нужен был для IDEшек?
Аноним 27/01/24 Суб 23:36:37 #166 №3022780 
>>3020673
>Но в отличие от команд я не понимаю как в обработчиках передать id без его скрытия в таблице в
id должен находиться в модели. Целевая модель должна находиться в списке выбранного во вьюмодели.

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

Еще я бегло посмотрел, а выглядит так, что ты кнопки создаешь не в xaml. Жуть какая. Ты создаешь кнопку при помощи xaml, привязываешь к ней соответствующую команду, а ее Visibility или IsEnabled при помощи ValueConverters определяешь по состоянию того или иного свойства вьюмодели.

Если тебе нужно отображать какой-то блок контролов, то делается это через контент презентер. Все упирается в данные вьюмодели.
Аноним 27/01/24 Суб 23:39:10 #167 №3022784 
>>3022766
Ты рукожоп. Работают сервисы на 8 корке в кубах без проблем с дефолтным 8080 и рутлесс правами
Аноним 27/01/24 Суб 23:44:32 #168 №3022794 
>>3022766
А вообще не понял как ты приплёл проброшенные порты.
Определись в начале где у тебя проблема, в том что кетрел слушает не тот порт или что докер не прокидывает нужный.
docker compose config и docker inspect тебе в руки
Аноним 27/01/24 Суб 23:56:18 #169 №3022825 
>>3022794
Докер прокидывает левый порт, но по идее конфиг приложения определяет какие прокидывать, не?

Приложение поднимается, в логах 8080 в режиме продакшна, в compose 8080:8080, но достучаться до него невозможно. Когда делаю curl до этого порта, то connection refused by peer. При попытке чекнуть порты у контейнера видно, что там прокинут 80 порт на тот, что указан в launchsettings из диапазона 5000-5300. Ощущение, что с докером чёт не так, удалять всё и делать docker builder prune --all пробовал, но результат не даёт. Чекал ещё ASPNETCORE_HTTP_PORTS в переменных контейнера, там тоже 8080, нихуя не понимаю вообще
Аноним 28/01/24 Вск 00:03:20 #170 №3022840 
>>3022825
Блять, запустил на другой тачке в докере всё то же самое, заработало. Хуйня ебаная.
Аноним 28/01/24 Вск 00:22:50 #171 №3022870 
>>3022825
Ты всё свливаешь в одну кучу, учись траблшутить.
В твоём случе путь должен быть примерно таков:
1. чек что внутри контейнера софт слушает порт и отвечает (тем же курлом ВНУТРИ контейнера)
2. чек docker compose config что порты правильно прокинуты
3. запуск docker compose down && docker compose up, чек docker container inspect что всё правильно
4. чек iptables-save, рестарт докер демона
5. рестарт хоста
Аноним 28/01/24 Вск 00:46:53 #172 №3022900 
>>3022870
Здраво звучит, спасибо, анон. Про curl внутри контейнера и docker compose config знаю, по последнему как раз видел, что в compose оказывались порты, которых быть не должно. Решилось в итоге рестартом хоста
Аноним 28/01/24 Вск 03:26:07 #173 №3022977 
>>3022825
> но по идее конфиг приложения определяет какие прокидывать, не?
Для начала - тебе вообще нахуй не нужно прокидывать порты, просто обращайся по имени контейнера сразу на порт контейнера.

Дальше - у тебя есть приложение, которое слушает определённый порт внутри своего контейнера. Есть контейнер, который хуй знает как реализован в твоём сетапе. И есть какая-то машинерия проброса портов, которая опять же на всех операционках реализована и работает по разному (и шансы что-то раздебажить у тебя есть только на линуксе). Так что если хочешь подсказку куда смотреть, скажи операционку и в чём ты запускаешь докер, и мб тебе помогут.
Аноним 28/01/24 Вск 03:56:58 #174 №3022980 
>>3022977
Ну вариантов то не много. Бсд сразу нахуй т.к. там докер через пизду прибит, макось туда же, в винде на сколько знаю то что называется докер десктоп работает внутри всл2, ну и база в виде лини.
Всё сводится к тому что кроме лини вариантов то и нет
Аноним 28/01/24 Вск 03:59:35 #175 №3022982 
>>3022980
> в винде на сколько знаю то что называется докер десктоп работает внутри всл2
С линуксовыми контейнерами. Для виндовых контейнеров никакие вслы, конечно же, не нужны.
Аноним 28/01/24 Вск 04:02:41 #176 №3022983 
>>3022982
Виндовые контейнеры, уж извините, это совсем мазохизм в чистом виде
Аноним 28/01/24 Вск 04:34:07 #177 №3022987 
>>3022983
Чего это вдруг? Там урезанная довольно быстрая винда.
WSL2 тоже довольно быстрый, кстати. В некоторых тестах даже обгоняет соответствующий линукс. В большинстве, конечно, отстаёт, но в большинстве из этого большинства всего в пределах 10%.
Аноним 28/01/24 Вск 04:40:21 #178 №3022988 
>>3022987
Просто нет причины заниматься извращенствами когда весь прод с ног до головы на лини а в винде для разрабов завезли всл.
Единственные причины держать винду в проде как вижу это лдап/ад и дикие вендор локи
Аноним 28/01/24 Вск 04:56:19 #179 №3022993 
>>3022988
Ну запусти .Net Framework 4.8 на линуксе, лол.
Аноним 28/01/24 Вск 05:08:41 #180 №3022994 
>>3022993
4.7.2 под моно нормально ворочался, а вообще ретрограды должны страдать.
Всего то прошло 6 лет с 2.1 лтсного кора, продолжим насиловать труп фреймворка!
Аноним 28/01/24 Вск 08:41:58 #181 №3023024 
>>3022994
> 4.7.2 под моно нормально ворочался
Я не верю, что он работал хотя бы с 80% скорости дотнета. Плюс какие были гарантии, что он вообще правильно код выполнял?

> Всего то прошло 6 лет с 2.1 лтсного кора
Использовать кор в то время для энтерпрайза было безумием. Там в каждой версии всё менялось, баги, проблемы с производительностью.
Стартап сайта даже в 6 дотнете выглядит не так, как в 7, взяли и перехерачили классы. Это трата времени на апгрейд.
Поэтому никто особо старые проекты с фреймворка не переводит, и хостить их гораздо проще на винде.

Я, собственно, сам новый дотнет только несколько месяцев назад начал использовать, и, конечно, хочу сказать, что стало гораздо лучше, и как хорошо, что громоздкий IIS с проблемами в настройке нахер больше не нужен.
Новые проекты надо делать исключительно на новом дотнете, но легаси-то никуда не девается.
Аноним 28/01/24 Вск 10:18:07 #182 №3023067 
>>3022988
Под виндой часто работают хосты на проде, где нужна какая-нибудь работа с криптографией по госту: в новых дотнетах относительно хуй на расширяемость клали в плане криптографических провайдеров. На гитхабе ишью шесть лет лежит: https://github.com/dotnet/runtime/issues/26053
Аноним 28/01/24 Вск 11:28:18 #183 №3023127 
>>3023024
>Я, собственно, сам новый дотнет только несколько месяцев назад начал использовать
Сочувствую. Я уже года 3 не касался .net framework-a.
Последние полтора года вообще исключительно .net6 и под linux только работаю.
Красота.
Аноним 28/01/24 Вск 11:46:44 #184 №3023155 
>>3022980
Замечание анона выше про упоминание оси справедливое, т.к. запустить контейнер пытался под макосью, потом сдался и с первого раза всё на линуксе запустилось
Аноним 28/01/24 Вск 17:25:52 #185 №3023833 
>>3023155
Я себе плохо представляю, как у дотнет девелопера вообще может появиться задача запустить контейнер докера под макосью.
Аноним 28/01/24 Вск 17:42:33 #186 №3023873 
>>3023833
Ну хер знает, у меня примерно пятая часть знакомых .net разрабов работают на маках. Но честно говоря, не интересовался ни разу была ли у них необходимость возиться с докером.
Аноним 28/01/24 Вск 18:03:03 #187 №3023912 
>>3023873
Но ведь vs под винду только? В чём они пишут, vs code? Оно же гораздо менее функциональное.
Аноним 28/01/24 Вск 18:24:17 #188 №3023944 
>>3023912
Джетовская идешка жи ест. Но мне она не по душе, хоть и вебшторм топчик и в студии стоит решарпер
Аноним 28/01/24 Вск 18:27:05 #189 №3023947 
>>3023944
>Джетовская идешка жи ест.
Ах, да, там райдер какой-то. Вечно в энтерпрайзе от всего остаёшь.
Аноним 28/01/24 Вск 18:30:29 #190 №3023954 
>>3023912
>В чём они пишут
В основном в райдере. VS под мак вроде как бы и существует, но майрософт сказали, что 24 августа 2024 забьют хер на неё.
Аноним 28/01/24 Вск 18:46:03 #191 №3023991 
>>3023954
VS под мак - это MonoDevelop.

И MonoDevelop - была вполне нормальной ИДЕ для тех задач, под которые оно пилилось.

Весь вуз сидел на ней и горя не знал.
Аноним 28/01/24 Вск 18:48:18 #192 №3023996 
>>3023991
У тебя в вузе маки стояли? Вот это проёб бюджетных денег.
Аноним 28/01/24 Вск 18:51:33 #193 №3024003 
>>3023996
Нет. В вузе я был нетакусиком, и на линуксе сидел, чтобы выебываться перед однокурсниками. А в то время - еще core не было и vscode тоже. Так что делал лабы на Mono и соответственно в MonoDevelop.
Аноним 28/01/24 Вск 20:16:18 #194 №3024201 
>>3023991
>Весь вуз сидел на ней и горя не знал.
Почему тогда к нам на работу не устраивались?
Аноним 28/01/24 Вск 20:27:25 #195 №3024225 
>>3024003
Ха, ты мне напомнил, как у нас линуксоиды делали лабы по ТБД на MySQL, а потом они у них в универе не запускались.
Аноним 29/01/24 Пнд 03:10:51 #196 №3024648 
>>3022240
Как же меня корёжит с этих подчёркиваний
Аноним 29/01/24 Пнд 03:24:05 #197 №3024650 
>>3024648
Не смотри
Аноним 29/01/24 Пнд 04:52:48 #198 №3024669 
>>3024648
Меня тоже корёжит. Изначально девы в мс тоже не использовали их в пику конвенциям, ну и я привык просто с маленькой буквы поля называть.
А потом им, видимо, вставили за это, поэтому пришлось делать по конвенциям.
Алсо, вот вам референс.
https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/identifier-names
Аноним 29/01/24 Пнд 06:20:46 #199 №3024694 
>>3024648
Меня гораздо сильнее корёжит когда код засран кучей this.
Аноним 29/01/24 Пнд 08:15:17 #200 №3024747 
image.png
Памахите - как правильно сделать?
Аноним 29/01/24 Пнд 08:55:25 #201 №3024752 
image.png
Вот упростил... то есть проблема в передаче ссылки (в с++ такое работает, а как тут надо?)

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

Как исправить ошибку?
Аноним 29/01/24 Пнд 09:37:00 #202 №3024776 
>>3024752
>Вот упростил... то есть проблема в передаче ссылки (в с++ такое работает, а как тут надо?)
Тебе же писали уже - выкидывай нахрен эти плюсовые приколы, в шарпе не пишут так.
>Как исправить ошибку?
Забыть плюсы и прочитать учебник/справочник по шарпам.
Аноним 29/01/24 Пнд 09:46:27 #203 №3024791 
image.png
>>3024752
Что мешает сделать просто вот так?
Аноним 29/01/24 Пнд 09:47:44 #204 №3024796 
>>3024791
то что это мне надо сообщить что поле изменилось вызвав OnPropertyChanged
Аноним 29/01/24 Пнд 09:52:09 #205 №3024805 
>>3024776
А как мне переписать Set из >>3024747
чтобы оно работало?

В модели DataModel не должно быть функционала вьювмодели.

Не копипастить же поля из модели DataModel в вьювмодель DataVM - говнокод же, когда одно и тоже в разных местах

Поэтому сделал что DataVM хранит весь DataModel

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

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

В таком случае опять приходим к копипасту - когда нужно вот эти 4 строки из Set писать в сеттеры - это же пиздец копипаста сколько, если полей 10, то это 40 строк говна сверху.

так что логично что нужно вызвать из сеттера метод который изменит поле DataModel
Аноним 29/01/24 Пнд 09:55:25 #206 №3024810 
>>3024805
>Не копипастить же поля из модели DataModel в вьювмодель DataVM - говнокод же, когда одно и тоже в разных местах
>
>Поэтому сделал что DataVM хранит весь DataModel
Ну т.е. ты пытаешься заменить говнокод с простым дублированием, на говнокод с хер пойми какой логикой. Такое себе.
Аноним 29/01/24 Пнд 10:01:35 #207 №3024816 
>>3024810
ну у меня сейчас получилось что модели наследуются от вьювмодели - это же неправильно.

начал искать как другие делают - а они копипастят
public string Id {
get => _model.Id;
set {
if (Equals(_model.Id, value)) return;
_model.Id = value;
OnPropertyChanged(nameof(_model.Id));
} }

Хотел избавится от этого говна с помощью такой функции - это же логично что копипаст надо скрывать. Да и ошибок меньше - тут надо же три места изменить после копипаста - а если не изменю (обычное явление при копипасте)?
Аноним 29/01/24 Пнд 12:11:32 #208 №3025012 
>>3024805
>>3024816
Как же я рад, что в свое время не пошел в десктоп.
Аноним 29/01/24 Пнд 16:46:26 #209 №3025489 
>>3024747
>Памахите - как правильно сделать?
Fody PropertyChanged

>>3025012
ага, небось пошел во фронтенд )
Аноним 29/01/24 Пнд 16:52:47 #210 №3025498 
>>3025489
Фронт в миллион раз современней и интереснее разработки под дескоп
Аноним 29/01/24 Пнд 17:06:37 #211 №3025517 
Есть ли смысл вкатываться в c# в 2024, ведь он нигодился ни для чего, кроме unity, а unity вроде как подыхает. (Хочу быть разработчиком инди-игр)
Аноним 29/01/24 Пнд 17:14:11 #212 №3025529 
>>3025498
Ага. 10000005000000 фреймворков и жаваскрипт)
Аноним 29/01/24 Пнд 18:12:24 #213 №3025629 
>>3025529
Всего 3 основных фреймворка. То ли дело майки с wpf, uwp, winui, maui, xamarin и тд. А жс прекрасный язык для ui. Постоянно совершенствуется. Когда там xaml обновлялся? Точно, в 2006 году. Хотели еще в 2009 новый стандарт выпустить, но так и не разродились, ресурсов не хватило, лол. Маленькая бедная компания, хуле, не смогли даже завести поддержку дженериков в xaml.
Аноним 29/01/24 Пнд 18:26:19 #214 №3025642 
>>3025489
>ага, небось пошел во фронтенд )
Не, чистый бекенд.
В начале карьеры немного замазался об реакт, но сейчас только бэк и ни шагу дальше API.
Аноним 29/01/24 Пнд 19:10:11 #215 №3025708 
>>3025629
хамарин вообще не десктоп
мауи это десктоп для хамаринистов
UWP не нужен

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

>Когда там xaml обновлялся
есть такое. Я бы хотел подобие jetpack compose, но шарп не котлин и можно лишь подобие combine ui
однако jetpack desktop показывает что не все так радужно
так что пока что хамл

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

>>3025642
у каждого свои радости. в десктоп софте не нужно заморачиваться над многими вещами типа безопасности и скалируемости.
Аноним 30/01/24 Втр 01:09:32 #216 №3026122 
>>3025498
>интереснее разработки под дескоп
что там интереснее - очередной говносайт для семь топоров клепать?
Аноним 30/01/24 Втр 01:58:44 #217 №3026139 
2024-01-3001-55-37.png
А можно ли добавить платформу в существующий проект? Вот к примеру мне понадобилась библиотека WPF, для этого мне нужна платформа Microsoft.WindowsDesktop.App.WPF, но при создании проекта я выбрал шаблон не содержащий её.

Можно ли исправить не пересоздавая проект?
Аноним 30/01/24 Втр 02:01:12 #218 №3026141 
>>3026139
Меняешь тип проекта в первой строчке цспроджа
или
Добавляешь платформу в референсы
Аноним 30/01/24 Втр 04:11:03 #219 №3026161 
image.png
Аноним 30/01/24 Втр 04:19:19 #220 №3026162 
Слушайте, вот я посмотрел шарп вроде охуенный. На нём можно делать вообще всё и по скорости он ебет джаву и го в ноль. Собственно вопрос, почему компании не пишут чисто на шарпе, а берут богомерзкие джавы и го? В чём подвох не пойму.
Аноним 30/01/24 Втр 04:45:50 #221 №3026163 
>>3026141
>Меняешь тип проекта в первой строчке цспроджа
Одно и то же. Разница только в строке
<UseWPF>true</UseWPF>
Но она ничего не решает.

>Добавляешь платформу в референсы
Где? Я ничего не вижу. Платформа это целая группа библиотек.
Аноним 30/01/24 Втр 04:47:04 #222 №3026164 
>>3026161
Молодец.
Аноним 30/01/24 Втр 04:53:02 #223 №3026165 
>>3026141
>>3026163
лан, один хрен проекты почему-то несовместимы.
В одном проекте платформа
Microsoft.NETCore.App

А в другом две
Microsoft.NETCore.App
Microsoft.WindowsDesktop.App.WPF

Так вот первый ругается, если в качестве референса указать второй проект. Я же не какой-то НетФреймворк подключаю, или пониженную версию.
Аноним 30/01/24 Втр 06:56:05 #224 №3026191 
Попытался в вижуал хрюдио переименовать проект и проиграл.
В проекте, который используется переименованный, выдаёт ошибку
Не удаётся преобразовать из "{namespace}.{class}" в {class}
Аноним 30/01/24 Втр 09:16:37 #225 №3026262 
>>3026191
Название проекта - дело важное. Незазорно просидеть пару часов, придумывая правильное название, прежде чем нажать "создать" в IDE. Если у тебя возникает необходимость его переименовывать после создания - значит плох ты как программист.
Аноним 30/01/24 Втр 13:46:23 #226 №3026595 
Я вообще перестаю понимать, что происходит. Создаю объект, заполняю его поля значениями, смотрю внутрь - там заполнены те поля, которые я НЕ ЗАПОЛНЯЛ. Причём заполнены правильно, на основе объекта, из которого я выдрал значения для нового объекта, но который лежит в листе в другой части программы и вообще никак не связан с новым объектом. КАК?!!!!!! Я не создаю его на основе какого-то объекта, я делаю совершенно новый объект, он никоим образом не должен иметь возможность получить что-то там по ссылке. Я в ахуе, я впервые с таким сталкиваюсь.
Аноним 30/01/24 Втр 13:52:32 #227 №3026612 
>>3026595
Забейте, оказалось, что кто-то не я выставил заполнение некоторых полей прямо в сеттерах у этого объекта. Я уже думал, что у меня крыша едет.
Аноним 30/01/24 Втр 14:13:02 #228 №3026638 
Что интересного можно написать на авалонии? Что-то ничего придумать не получается.
Аноним 30/01/24 Втр 19:09:17 #229 №3027100 
>>3026262
Майкрософт, залогинься
Аноним 30/01/24 Втр 23:17:19 #230 №3027454 
Хм.
Смотрите какую хуйю придумал чтобы наебать EFCore


Собственно. У меня была проблема. Есть сущность:

public class User{
public int Id { get; set; }
public int AppIdentificator { get;set; }
...
}


Собственно. Этот AppIdentificator по бизнес-логике, надо при удалении пользователя - переиспользовать. Типа - было 4 пользователя. Второго удалили. При добавлении нового - надо дать ему освободившийся.

И я долго ломал голову. КАК, блядь, сделать, чтобы оно работало с нормальной скоростью.

И в общем. Че я сегодня придумал.
ДОБАВИТЬ КЛАСС.

publc class AppIdentificator{
public int Id {get; set;}
public int? UserId {get; set;}
public User? User {get; set;}
}

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

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

Но теперь меня мучают сомнения. Ну не может же все быть так хорошо. Я 100% чет не учел. Может раскритикуете решение?

Нативные запросы - все еще быстрее, даже с учетом старой структуры, но мне на работе не разрешают писать нативные запросы, говорят, что не по понятиям это все дело, и надо с EF ебаться.
Аноним 30/01/24 Втр 23:50:21 #231 №3027482 
image.png
>>3027454
Я бы сказал что ты вывернул наизнанку.
Моё решение такое т.к. удалять юзеров из бд не принято (из опыта)
Аноним 31/01/24 Срд 00:35:33 #232 №3027518 
>>3027454
>int?
Не затрахивает потом каждый раз на налл проверять или писать "?." где вместо падения происходит заглушение и игнорирования проблемы?
Аноним 31/01/24 Срд 00:41:55 #233 №3027535 
>>3027518
Я правда не понимаю эту победу над null, ведь когда пишем чуть больше кода чем скрипт, это дико становиться неудобным.
Аноним 31/01/24 Срд 00:59:05 #234 №3027549 
>>3027535
А когда пишем СИЛЬНО БОЛЬШЕ кода чем скрипт это становится удобным
Аноним 31/01/24 Срд 01:09:53 #235 №3027555 
>>3027518
Не понимаю претензию. Наллабл типы имеют свои фичи и ясен пень их не нужно тащить туда где они не нужны и предполагается что весь спектр значений валиден. Это с условынм DateTimeOffset почти всегда можно сравнение делать с default. И в целом Nullable<> это прямое указание что "тут может быть налл"
Аноним 31/01/24 Срд 01:35:19 #236 №3027575 
>>3027549
>>3027555
Речь не о проблеме, был налл или нет, это вопрос динамической среды, меня конкретно напрягают нуллабл поля в классах. Как только ты ставишь вопросик, так начинается ебля с этим полем по всему коду, хотя где-то там в коде он был уже проверен.
Аноним 31/01/24 Срд 01:39:52 #237 №3027582 
>>3027575
Ну если ты уверен, что код проверен, то ставишь ! и всего делов.
Где проверен, так может быть распроверен. Как бы не иммутабельное.
В итоге количество "заткнись!" сильно меньше проблем NRE в рантайме.
Аноним 31/01/24 Срд 01:42:19 #238 №3027584 
>>3027582
Поддвачну

>>3027575
Наллабл струтуры это одно, ты же видимо больше воняешь про наллабл референс тайпс
Аноним 31/01/24 Срд 01:43:11 #239 №3027587 
А как при помощи regex получить текст справа от искомого символа не включая этот символ?
>[сообщение внутри скобок] сообщение справа от скобок

К примеру выражение '\](.*)' вернет такой кусок:
'] сообщение справа от скобок'
А мне нужно
'сообщение справа от скобок'
Аноним 31/01/24 Срд 01:45:58 #240 №3027589 
>>3027587
Ты должен брать не заматченый текст целиком а первую группу то бишь то что внутри первого (). Кури доку
Аноним 31/01/24 Срд 01:58:23 #241 №3027596 
>>3027587
(?<=\]\s)(.*)
Аноним 31/01/24 Срд 02:00:44 #242 №3027599 
>>3027589
>Ты должен брать не заматченый текст целиком а первую группу то бишь то что внутри первого ()
Ничего не понял.
Аноним 31/01/24 Срд 02:09:45 #243 №3027602 
2024-01-3102-05-02.png
>>3027587
https://habr.com/ru/articles/545150/

Позитивный просмотр назад '(?<=шаблон)'. Сдвигается вперед на указанный шаблон. Т.е. '(?<=\])' вернет результат:
>' сообщение справа от скобок'
Остается пробел, поэтому '(?<=\]\s)'
Аноним 31/01/24 Срд 02:09:49 #244 №3027603 
>>3027599
https://learn.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.match.groups?view=net-8.0
Не представляешь как я хотел хуями обложить
Аноним 31/01/24 Срд 02:19:30 #245 №3027607 
2024-01-3102-17-16.png
>>3027603
Ты про это? Я тестировал на онлайн площадках и не знал, что так можно. Спасибо.
Аноним 31/01/24 Срд 03:50:35 #246 №3027647 
Заглядывание назад и вперёд это тормозное говнище. Используй группы, как тебе уже написали.
Алсо, полезно знать, что фичи регулярок практически одинаковые во всех языках, и те же группы есть везде. Особенно это полезно при find & replace.
Используется так, например (развернуть присваивание):
Find: ([^=]+)\s☆=\s☆(.+?)$
Replace: $2 = $1
Всего групп может быть 9, $0 - это вся заматченная строка.
Звёздочку заменить на
Аноним 31/01/24 Срд 03:56:13 #247 №3027655 
>>3027582
>Ну если ты уверен, что код проверен, то ставишь ! и всего делов.
Лол я думал не стали завозить синтаксис "!.", но тоже такое себе по красоте.
Аноним 31/01/24 Срд 04:04:25 #248 №3027659 
По-любому тут есть те кто в андроид долбиться, скажите, где удобнее асинхронность - в котлине или шарпах?
Аноним 31/01/24 Срд 04:19:05 #249 №3027668 
>>3027575
> Как только ты ставишь вопросик, так начинается ебля с этим полем по всему коду, хотя где-то там в коде он был уже проверен.
Так ты не прокидывай один класс через разные слои абстракций, а на каждое взаимодействие между слоями пиши свой класс. Да, они будут на 90% одинаковые, и время тоже на это уходит, зато потом нет вопросов типа "почему половина полей приходят пустые?" или "почему это поле из тела пост-запроса не сохраняется в базу?"
Аноним 31/01/24 Срд 04:24:59 #250 №3027670 
>>3027668
Это просто будет гига-зоопарк одних и тех же сущностей. Тут наверное проще ! пописать.
Аноним 31/01/24 Срд 04:26:11 #251 №3027671 
>>3027670
Хотя ладно, я тупо отключил нуллабельность. Логи покажут где я насрал.
Аноним 31/01/24 Срд 06:22:49 #252 №3027687 
>>3027670
> Это просто будет гига-зоопарк одних и тех же сущностей.
Они как правило не одни и те же, а чуть-чуть разные. Тебе, чтобы использовать не до конца подходящую сущность, придётся писать костыли. Конечно очень легко в самом начале разработки, когда ты просто достал сущность из базы и переслал её на фронтенд, но с каждым таском что-то будет меняться, и этих костылей будет всё больше и больше.
Вон, там в php-треде у кого-то был специальный метод RemoveUnnecessaryFields. Могу ещё легко представить флаг в объекте типа AlreadyProcessedByPriceTransformer.
Это будет сплошным источником багов и неправильного понимания контрактов, и придётся постоянно весь код перечитывать, чтобы было ясно, как оно работает, и что где лежит.

Надо через не хочу сразу клепать эти классы, потому что потом всё равно придётся это делать, только это займёт куда больше времени и сама замена породит ещё баги.
Аноним 31/01/24 Срд 07:40:21 #253 №3027716 
>>3027687
Помню в далеком 2006 кодил под Invision Power Board и офигивал, что они там прокидывали один и тот же мега-ассоциативный массив с тонной вложений.
Зато было удобно кодить, выводишь этот массив и тебе все состояния и данные. Добавляешь данные и они у тебя из всех щелей доступно. Приходилось, конечно, isset'ом проверять, но никогда это не вываливалось проблем.
Аноним 31/01/24 Срд 07:44:17 #254 №3027718 
>>3027687
>но с каждым таском что-то будет меняться, и этих костылей будет всё больше и больше.
Кодинг и так напоминает бесконечное перекладывание данных туда сюда, а ты еще хочешь помножить этот ад.
Аноним 31/01/24 Срд 09:37:00 #255 №3027779 
>>3027670
Для этого придумали мапперы.
Аноним 31/01/24 Срд 10:51:03 #256 №3027845 
>>3027518
> где вместо падения происходит заглушение и игнорирования проблемы?
Не мои проблемы, пусть разбираются те, кто допустил попадание на мой участок null. А если будет падать, то виноват уже я буду
Аноним 31/01/24 Срд 14:45:37 #257 №3028145 
Поясните за Regex MatchCollection. Эта коллекция ридонли и не имеет конструктора. Она возвращается методом Regex.Matches, который обрабатывает string.

А что если я хочу распарсить файл целиком? Размер строки позволяет загрузить 2Gb, но не лучше ли файл читать построчно? Тогда нужен метод Regex.Match и в этом случае не смогу все это собрать в MatchCollection.
Аноним 31/01/24 Срд 14:49:50 #258 №3028156 
>>3027647
>Алсо, полезно знать, что фичи регулярок практически одинаковые во всех языках, и те же группы есть везде.
Ну я ради тестов открыл сайт, типа https://regextester.github.io, чтобы сразу получать ответ без компиляции программы, но на подобных сайтах не распознаются группы и именования групп, типа '?<myGroup>'.
Аноним 31/01/24 Срд 14:50:08 #259 №3028158 
>>3028145
Регулярки работают с целой строкой.
Аноним 31/01/24 Срд 15:03:28 #260 №3028180 
>>3028156
Потому что ты парашу какую то нашёл. regex101 это база
Аноним 31/01/24 Срд 15:10:09 #261 №3028185 
>>3028180
Круто! Есть подсветка синтаксиса и даже развернутое объяснение что и в каком порядке делается.
Аноним 31/01/24 Срд 15:36:31 #262 №3028217 
>>3026162
Golang is a web scale language.
Аноним 31/01/24 Срд 15:51:29 #263 №3028268 
>>3026162
По скорости разработки самый быстрый тупескрипт, поэтому он дико популярный в штатах. По скорости перекладывания джейсона все эти языки одинаковы.
Джава - это легаси в банках. Голанг форсит гугл, хотя сам язык говно. Шарп как язык заебись, но есть нюанс. Микрософт так сильно форсили шарп как язык для домохозяек, что теперь большой бизнес думает, что на нем только домохозяйки и пишут. Типа, несерьезная технология для мусорных стартапов, которые проще слепить на нодежс. Скажи спасибо дебилам менеджерам, загнали дотнет на парашу.
Аноним 31/01/24 Срд 15:55:51 #264 №3028282 
>>3027655
не буду спорить.
А вместо laterinit набор кучи аттрибутов вида MayBeNullWhen и #nullable disable ebable

>>3027659
это асинхронности разного вида. Лично для меконцепция тасков интуитивно сильно проще нежели концепция скоупов.

>>3028145
больно нужна тебе эта MatchCollection. Хуже списка матчей
Аноним 31/01/24 Срд 17:20:09 #265 №3028447 
Кто какими библиотеками для работы с Excel'ем пользуется? Щас попробовал closedxml, и что-то не очень зашёл. Как-то там топорно всё. Например: создал таблицу, а изменить ширину отдельного столбца в таблице не получается. Можно только прямым указанием номера ячейки или вообще глобально задать для всего документа. А мне надо по контенту, что находится в столбце менять.
Аноним 31/01/24 Срд 20:38:40 #266 №3028787 
Как протестировать нормально сетевое серверное приложение?

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

Но возникает проблема. 99% проблем - это проблемы связанные со стабильностью сети. Допустим - оператор чудит, а чужие клиенты про это не думают. Да и самому непонятно как мутить приколдесы типа - разрыва и восстановления соединения. Допустим, тут решили. Как тестировать проблемы связанные с особенностями TCP, типа то что тебе может прилетать из-за nodelay - частями. А может - наоборот из-за охуевшей скорости того как чужой клиент серит - прилететь здоровенный TCP-пакет, в котором сразу несколько сообщений и их надо правильно обработать.
А самая непонятная часть, это то что некоторые вещи начинают происходить в проде - через какое-то время + количество обрабатываемых подключений. Вот типа, ставишь на дев - там для тестов висят постоянно 100 клиентов, и годы идут, все как часы. Ставишь клиенту. Он хуярит 100к клиентов в первый же день, у него все ок, через полгода - уже млн клиентов разом, и чет у него ломается, а объяснить не может, типа - жалуются эксплуататоры, те жалуются - что чет медленно. Смотришь, 25% проца всего загружено и 30 гигов оперативки, что не так много для такой нагрузки. Тестишь своим клиентом - да все ок. Подключается чужой клиент - там видишь уже проблемы, но причина - да хуй его знает где она, потому что логи несутся со скоростью что пиздец, и просто понять что где - невозможно.

В общем. Я не знаю. Наверное тупо спрашивать это в шарпотреде, Большая часть-то тырпрайз или десктоп. Но я всю эту хуйню на .NET делаю. И вот просто хочется - прикрутить тестики, чтобы можно было на них погонять сценарии разные, чтобы не ждать отзывов от рассерженных пользователей. Просто как всю эту хуйню таки потестить - я не представляю.
Аноним 31/01/24 Срд 21:01:38 #267 №3028840 
>>3028787
Ты просишь тебе рассказать что такое нагрузочное тестирование в шарпотреде?
Аноним 31/01/24 Срд 21:08:33 #268 №3028845 
>>3028840
По большей части я хочу поныть.

А в контексте нагрузочное. Ну, я делаю своих клиентов 100к. Все ОК работает. Миллион на своей машине я не могу поднять. Не работать оно начинает с реальными клиентами, которые по 2g через операторов, которые зачем-то рубят канал рандомно при большой нагрузке, а вопросы - ко мне.

А от шарпотреда я хотел наверное каких-то советов, как делать тестирование нормально, чтобы оно приносило пользу. Потому что, ну наделаю я юнит-тестов, наделаю каких-то интеграционных. А через год аптайма на миллион+ клиентов, чет сломается и хуй знает почему.
Аноним 31/01/24 Срд 21:27:22 #269 №3028870 
>>3027718
Я ещё раз повторяю, что это меньшее зло. Это не добро, птички, любовь, это просто не так плохо, как альтернатива.
Аноним 31/01/24 Срд 21:47:13 #270 №3028897 
>>3028845
Если к тебе претензии что оно не работает на Х нагрузке и тебе не дают железо что бы сделать хотя бы Хх1.5 то нихуя тут не сделаешь. Я бы послал нахуй
Аноним 31/01/24 Срд 23:11:51 #271 №3028976 
>>3028845
Во первых на такие случаи у тебя в ТЗ должно быть прописано четкое SLA. Чтобы не было с нихуя ситуаций вроде "у бизнеса неожиданно пришел лям клиентов и все легло". Вернее ситуации, то такие будут, только если у тебя изначально договор был на "100К запросов в день и плюс 5% в месяц", а бизнесу вдруг выше прогнозов привалило, то это проблемы бизнеса.
Во вторых нормальное нагрузочное тестирование - это отдельная статья расходов и этим занимаются отдельные люди. Т.е. это даже не обычные тестеры, а специальные по нагрузке. У них для этого есть необходимые навыки, чтобы поднимать нужные стенды, вешать на них нормальный мониторинг, писать утилиты, пускать зонды и т.д. Это немалые такие бабки.
У нас к примеру на команду из 5-х разрабов и 2-х обычных тестеров, есть отдельные два тестера по нагрузке (с з.п. не меньше сеньорных разрабов) у которых свой отдельный кластер (уровня прода), на котором они постоянно гоняют разные профили нагрузки.

В соло ты такое не потянешь, это не то же самое как юнит тесты на сервис накидать, это по сути тебе новую профессию освоить нужно.
Поэтому всегда договаривайся с заказчиком на определенный уровень SLA в котором ты на 150% уверен, что твои разработки его потянут, если ему хочется выше, то пусть закладывает в бюджет расходы на нормальное НТ (это где-то от 50% до 100%) и нанимает (ну или ты сам нанимай) нагрузочников.
Ну и еще учись писать масштабируемые сервисы, чтобы в случае чего, можно просто было докупить железа и ебануть больше инстансов.
Аноним 01/02/24 Чтв 02:18:25 #272 №3029084 
>>3028845
Разработка масштабируемой отказоустойчивой системы стоит много денег, это задача уровня гугл. Требуй от кабана стенд для нагрузочного тестирования, где будет крутится лям пользователей, а не сто инвалидов на виртуалке. Заниматся тестированием должен отдельный чел, а не ты. Хайперфоманс - это вообще сложная тема, а не просто пукнул микросервисом в докер и дальше оно как-то само.
Аноним 01/02/24 Чтв 04:06:01 #273 №3029095 
>>3028787
Для этого есть специальные средства для анализа логов. Есть datadog https://www.datadoghq.com/product/log-management/ есть coralogix https://coralogix.com/ Есть logz.io https://logz.io/, SumoLogic, Splunk. Инструменты для трейсинга там хорошие, можно видеть какой конкретно сервис и url тормозит, все вызовы с таймингами. Можно с помощью машинного обучения детектить атаки.

Насчёт тестов - есть так называемый chaos engineering, где можно тестировать разные сценарии https://github.com/Polly-Contrib/Simmy

В целом, большинство твоих проблем из-за низкого уровня автоматизации. Если у тебя всё ручками управляется, а не скриптами, приходится коннектиться и вручную проверять - то это пиздец. Как бороться с проблемами сети? Да никак нахуй! Тебя вообще не должна ебать сеть. Стабильностью сети должен заниматься cloud provider, который предоставляет услуги. Это его задача защищать от ddos-атак, от всяких syn-flood'ов, ping-flood'ов, udp-flood'ов и прочего.

Ты не можешь купить готовый, managed service? Который будет автоматически масштабироваться под нагрузку. Ну и ебись тогда с сетью. Сделай свой собственный дата-центр ёпт.

Программист вообще не должен этим заниматься. Нахуй вы тогда платите хостинг-провайдеру, скажи мне? Если тебе приходится настолько мелкую хуйню как "клиенты с 2G-интернетом" исправлять, то у меня для тебя плохие новости. Либо твой хостер - мудак, либо ты.
Аноним 01/02/24 Чтв 12:58:02 #274 №3029421 
изображение.png
Всем привет. Как можно улучшить этот код? Проверки на null для каждой подчеркнутой строки ставить или можно как-то покрасивее это всё организовать. Код вытаскивает значение атрибута и значение поля.
Аноним 01/02/24 Чтв 13:03:03 #275 №3029439 
>>3029421
Я знаю, но тебе нихуя не скажу)
Аноним 01/02/24 Чтв 13:14:20 #276 №3029471 
Из новостей:
Microsoft намерена переписать с использованием языка Rust ключевые сервисы Microsoft 365, изначально написанные на языке C#

Что не так с сишарпом?
Аноним 01/02/24 Чтв 13:22:55 #277 №3029489 
>>3029471
Он медленный, даже медленнее джавы. То что там кто-то бенчмарки дрочит, так это не сишарп а вставки с указателями на си или плюсах. Вот и получается, что быстрый код - это код на плюсах. А раст лучше плюсов.
Аноним 01/02/24 Чтв 13:23:35 #278 №3029493 
>>3029471
>Что не так с сишарпом?
Всё так. Пляшем дальше.
Аноним 01/02/24 Чтв 13:24:53 #279 №3029497 
>>3029489
>А раст лучше плюсов.
Да ну? Раст это как токарный станок. А плюсы это как 3D принтер.
Аноним 01/02/24 Чтв 13:29:01 #280 №3029519 
17067820713170.jpg
периодически использую метод индийского мастера, когда надо переназначить пачку переменных в зависимости от значений другой пачки переменных, а как можно по другому сделать?
Аноним 01/02/24 Чтв 13:33:44 #281 №3029540 
>>3029519
>а как можно по другому сделать?
Оператор switch для этого придумали
Аноним 01/02/24 Чтв 14:25:26 #282 №3029704 
>>3029471
Ну так вперед на раст
Узнаешь
Аноним 01/02/24 Чтв 14:52:53 #283 №3029764 
>>3029704
>на раст
А вот тут было смешно. Ты предлагаешь с японского байка на самокат пересесть? Причём даже не на электросамокат, а на тот, на котором ты ногой от асфальта отталкиваешься и катишься до момента, покуда ещё раз ногой оттолнёшься.

Какой нахуй Rust?
Аноним 01/02/24 Чтв 14:58:54 #284 №3029774 
>>3029764
нет. я предлагаю узнать ответ что не так с си шарпом и так с растом
ответ прост - НИЧЕГО.
обычная оптимизация горячих частей на более быстром, но менее удобном языке. Используется в мире повсеместно и поэтому тупые вопросы "что не так с <язык>" понимающие люди не задают
Аноним 01/02/24 Чтв 16:43:05 #285 №3030015 
>>3029421
У тебя надо каждую вторую строчку менять. Например, если добавить какой-то другой атрибут, получишь исключение.
Аноним 01/02/24 Чтв 16:52:00 #286 №3030051 
image.png
image.png
>>3029471
Деврелы раста увидели вакансию на сайте и побежали покупать статью для линковки. Но что-то пошло не так.
Аноним 01/02/24 Чтв 16:55:34 #287 №3030066 
image.png
image.png
>>3029471
Почаны еще макросов не нюхали, наиграются на деньги кабана и дропнут этот легкочитаемый и любимый всеми язык.
самое забавное, на картинках простые функции, что будет когда начнут писать тырпрайз-монстров?
Аноним 01/02/24 Чтв 16:59:42 #288 №3030073 
image.png
>>3029489
Займись уже делом, зачем прозябаешь на двачах свою юность.
Аноним 01/02/24 Чтв 17:36:35 #289 №3030150 
>>3026638
напиши клиент яндекс музыки под линух, сам такой хуйней маюсь
Аноним 01/02/24 Чтв 17:44:49 #290 №3030163 
>>3030066
Какой отборный кал на скриншотах.
Мерзость же.
Аноним 01/02/24 Чтв 17:47:02 #291 №3030167 
>>3026638
>Что интересного можно написать на авалонии?
Судя то тому, что я вижу у некоторых разработчиков, на Авалонии можно написать всё. Реально кроссплатформенны GUI. Но всё же интерфейс на ней чуть менее отзывчивый, чем на WinForms.
Аноним 01/02/24 Чтв 18:31:16 #292 №3030277 
.png
>>3029421
Не особо вникая, не меняя логики
Аноним 01/02/24 Чтв 18:46:05 #293 №3030307 
.png
>>3029519
Можно так, если свич не хочется
Аноним 01/02/24 Чтв 19:24:13 #294 №3030378 
>>3030307
Так вот кто украл гигабайты и мегагерцы.
Аноним 01/02/24 Чтв 20:39:16 #295 №3030519 
К слову, про маппинги значений, как нормально сделать двусторонний маппинг?
Вот, например, есть у меня enum с n значений, и каждому значению биективно сопоставлена строка.
Мне надо написать метод, который конвертирует одно в другое, и метод, который конвертирует обратно.
Если писать через свитчи, это дублирование. Если заводить словарь, то его придётся разворачивать, а это убого.
Аноним 01/02/24 Чтв 20:42:00 #296 №3030524 
>>3030519
> Если заводить словарь, то его придётся разворачивать,
Если значений много, то быстре словаря ничего нет. И два словаря это решение.
Если значений немного, то вообще похую на реализацию.
Аноним 01/02/24 Чтв 21:03:12 #297 №3030568 
.png
>>3030519
Если на перформанс похуй - можно такое намутить)
Аноним 01/02/24 Чтв 21:15:04 #298 №3030588 
Я ждал, когда кто-нибудь наконец не предложит рефлексию.
Аноним 01/02/24 Чтв 21:36:10 #299 №3030625 
>>3030524
Я хочу, чтобы код нормально выглядел, был читаемым и поддерживаемым. Значений около 10, производительность вообще роли не играет, тут любой способ будет достаточно быстрым.

>>3030568
Мне это не нравится, потому что строковый код - это не свойство енама.
Я немного конкретизирую задачу, если интересно.
У меня есть две базы данных, в которых хранятся показания счётчиков. Формат хранения в базах разный, и даже имя одного и того же счётчика записаны по-разному.
У меня есть код, который берет название счётчика и трансформирует его в набор атрибутов, которые этот счётчик единственным образом идентифицируют. Один из атрибутов - это как раз перечисление.
Весь результат едет на фронт, где с ним что-то делается.
Соответственно, на фронте есть фильтрация, и поэтому мне надо обратно собирать идентификатор счётчика для каждой базы из этих атрибутов, и соответственно, это перечисление является частью идентификатора, только в закодированном виде.
Я сейчас написал просто 4 свитча, но мне не нравится дублирование сопоставлений.
Заводить словарь dic, а потом из него делать второй dic2 = dic.ToDictionary(x=> x.Value, x => x.Key) я не хочу, потому что это некрасиво.
Аноним 01/02/24 Чтв 21:36:42 #300 №3030628 
>>3022780
Крч понял что кнопки прям в гриде будут ужасно выглядеть, тем более их планируются делать больше одной, поэтому решил запилить их в контекстном меню. Но оказалось что TreeDataGrid умеет только при RowSelection доступно свойство SelectedItem, а при CellSelection нет. А выделять в TreeDataGrid целую строку меганеудобно. Теперь хз что делать, гайдов по созданию собственной selection model не нашел, придется ждать когда эту фичу в либу добавят. Бугурт
Аноним 01/02/24 Чтв 21:43:15 #301 №3030644 
>>3030628
>Но оказалось что TreeDataGrid только при selection-модели RowSelection может получить свойство SelectedItem, а при CellSelection нет.

Слоуфикс
Аноним 01/02/24 Чтв 22:05:20 #302 №3030668 
>>3030625

var myKey = types.FirstOrDefault(x => x.Value == "one").Key;

Вот это тебе не поможет?
Можно отделаться одним словарём, вместо двух.
Аноним 01/02/24 Чтв 22:28:00 #303 №3030715 
.png
>>3030625
> Я немного конкретизирую задачу.
))) Ха, диванон

Могу только вот такое предложить тогда)))
Аноним 01/02/24 Чтв 22:37:14 #304 №3030726 
>>3030715
Наверное надо пояснить за решение.
1. Производительность роли не играет, так что мы на нее забиваем.
2. Чтобы код был поддерживаемым - мы выносим всю эту муру с картами - в конфигурационные файлики. Если не хочешь, чтобы засиралась папка с проектом и не лазили всякие "ПРОДВИНУТЫЕ ПОЛЬЗОВАТЕЛИ" - делаешь файлик embedded.

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

Я бы оставил свич. Свич поймет и джун, и стажер, и вообще кто угодно.
Аноним 01/02/24 Чтв 22:40:17 #305 №3030729 
>>3030726
Минус решения - тебе надо при расширении своего enum'а лезть в этот файлик. Но это решаемо.
Аноним 01/02/24 Чтв 22:43:45 #306 №3030734 
>>3030715
Да. Это можно оптимизировать, загружая файл один раз и храня словарь этот. В идеале - сделать ленивую загрузку.
Аноним 02/02/24 Птн 00:01:20 #307 №3030827 
>>3030668
Это ничем не лучше разворота словаря.

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

Ладно, всем большое спасибо за советы и потраченное время.

Я просто думал, может это я дурак, каждый раз, когда приходится делать такой двунаправленный матчинг, пишу говнокод, а есть нормальный способ.
Аноним 02/02/24 Птн 14:10:00 #308 №3031438 
2024-02-0214-08-06.png
>>3030628
>TreeDataGrid
У авалонии есть TreeDataGrid. Вот прямо щас надо запилить такое на WPF, это какой-то пиздец.

Хочу себе лог вьювер запилить с поддержкой вложения. Миллиард этих вьюверов и все какой-то кал.
Аноним 02/02/24 Птн 18:22:48 #309 №3031953 
>>3031438
> лог вьювер запилить
Вот только логи обычно в кибане ковыряются
Аноним 03/02/24 Суб 01:12:09 #310 №3032484 
Реально не смог загуглить.
Может ли VS сделать две (и более) вкладки (окна редактирования) на один файл??
Аноним 03/02/24 Суб 01:17:26 #311 №3032487 
>>3032484
Window > New Window
Аноним 03/02/24 Суб 01:21:31 #312 №3032489 
image.png
>>3032487
Жесть, спасибо анонче.
Аноним 03/02/24 Суб 11:19:21 #313 №3032679 
>>3031438
>У авалонии есть TreeDataGrid

Так я о нем и писал. моя проблема - неясно как кастомный Selection Model пилить. В целом у меня нет прям супер претензий к держателям репы, в одном из issue ЕМНИП заявлено что это контрол де-факто в альфа стадии
Аноним 03/02/24 Суб 21:10:19 #314 №3033413 
>>3032679
Я вопрос поставить забыл. Я удивлен. В WPF такого нет. Нашел вариант на CodeProject, где используется обычный DataGrid, но там итем представляется как еще один DataGrid.
Аноним 03/02/24 Суб 21:21:55 #315 №3033431 
1706984514419.jpg
>>3002293 (OP)

> 14.01

Почему тред такой дохлый? Ваш язык совсем некому не нужен что-ли?
Аноним 03/02/24 Суб 21:51:03 #316 №3033489 
>>3033431
Все так, пилим десктопы, учим джаву чтобы перейти в нормальную современную разработку...
Аноним 03/02/24 Суб 22:03:32 #317 №3033502 
>>3033489
Я вот о перекате в раст подумываю. Уже даже чулки заказал...
Аноним 03/02/24 Суб 22:44:38 #318 №3033560 
>>3033431
Язык не вызывает вопросов. Что обсуждать?
Аноним 03/02/24 Суб 23:30:27 #319 №3033581 
>>3033560
У меня есть вопросы. Но в треде не смогут объяснить, че за беда.
Аноним 03/02/24 Суб 23:43:48 #320 №3033588 
>>3033581
Спрашивай. Гарантии решения нет, но чем сможем - поможем.
Аноним 03/02/24 Суб 23:57:20 #321 №3033598 
>>3033588
Ну окей.

Есть tcp-сервер на шарпе.

Есть железки, которые этот сервер обслуживает. Общение через GPRS(2G/3G)

Есть ОПСОС.

С железками, у которых связь 2G - происходит странная магия. После 25к подключенных железок - с ними начинает рандомно пропадать связь.

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

И самая страшная магия начинается вот в чем. Я включаю на уровне сокетов KeepAlive, и начинается сущий пиздец - 90% железок отваливаются. При этом, я вижу WireShark'ом, что кипэлайвы отправляются, но никто не отвечает на них.

Собственно. Вопросы-то в том, почему это началось после вот такой красивой цифры: 25к. До 25к - хоть 2g, хоть 4g, хоть что - стабильно все(ну, разрывы бывали, но в районе погрешности, типа 2-3 устройства отваливаюлись, но после 25к - резкий скачек до 10%)?
Почему - это именно с 2g? 3g и выше - нормально работают. Через Ethernet - тоже все ОК, хоть 100к подключений делай.
Почему KeepAlive, только хуже сделал? Причем значительно. Вроде как опсос говорит, что да, мы рубим, если канал неактивен, вот, кипэлайвом немного нагружаем канал, чтобы был активен, но после его включения - тотальный пиздец начался.

И может ли пиздеть опсос? Потому что на другом объекте - заменили симки - и проблемы исчезли.

И я понимаю, что это вопросы не касающиеся шарпов непосредственно. Потому и не хотел их задавать.
Аноним 04/02/24 Вск 00:08:30 #322 №3033607 
>>3033598
Провайдер может пиздеть - это аксиома.

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

Исходя из из твоего рассказа вероятность ИСТОЧНИКА проблемы на стороне провайдера на порядок-другой выше, чем проблема с твоей стороны.

Но это не означает что с твоей стороны нет проблем - бывает какая-то сущая мелочь, которую не замечаешь, а она всё решает.

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

Ах да, keep alive. Так мобильныйровайдер специально может душить, чтобы не резервировал слот в GSM.
Аноним 04/02/24 Вск 00:25:39 #323 №3033617 
>>3033598
На 2g может просто слотов не хватает. Там временное разделение. Погугли gsm timeslot. Тем более на медленном старинном 2g.
Аноним 04/02/24 Вск 00:48:39 #324 №3033635 
>>3033617
Хм. Погуглю. Вот за это спасибо.
Интересно - можно ли как-то на моей стороне с этим бороться.
Аноним 04/02/24 Вск 01:03:06 #325 №3033641 
>>3033607
Тоже спасибо. Наверное, придется выходить на связь с инженерами опсоса.
Аноним 04/02/24 Вск 02:04:15 #326 №3033689 
>>3033641
дамп пакетов сними и найди косяки что бы с голой жопой не идти в саппорт
Аноним 04/02/24 Вск 03:19:48 #327 №3033744 
>>3033502
Хоть язык и цепляет возможностью дропнуть сборку мусора, но яп несет тонну проблем.
-плохая читаемость кода.
-это чтение на максимум усугубляют макросы.
-множество брошенных васянских либ, ибо язык на живет на хайпе.
-макросная магия нередко не дает даже изучить эти васянские либы, все постижение идет чуть ли не через ишью
-проблемы с асинками.
-в целом если с хеллоувордами все ок, то дальше может столкнуться с косяками дизайна раста, это лафтаймы, это rc (местная сборка мусора) и прочие костыли.
-какое-то неадекватное комьюнити.
-непонятна ниша языка, для ембеддед нужны костылить чтобы писать, для прикладного нужно страдать и медленно разрабатывать, а системное слишком низкая ниша, да из-за наличие готовых либ, си или плюсы выглядят лучше.
-не забываем что языку уже не мало лет, эта стагнация тоже не приносит бонусов, а успешные менеджеры фонда, как-будто больше заинтересованы политикой и хайпом на продукт, чем на самим продуктом.

В общем, я предлагаю не вестись на хайп, а ждать что-то лучшее или хотя бы зрелости от этого самого раста. К примеру, тот же зиг сделал многие вещи из раста намного проще, поэтому варинт что могут высрать более удобный язык под большим финансированием гигантов, все же остается
Аноним 04/02/24 Вск 03:22:17 #328 №3033745 
>>3033431
Я наоборот люблю, когда медленно двигается, к вечеру не нужно портянку бессмысленного флуда читать.
Аноним 04/02/24 Вск 04:34:39 #329 №3033769 
>>3033744
Двачую, раст не нужен. Я прямо сейчас пишу на нем такой себе curl на минималках и это пиздец. Язык максимально душный, документации нихуя, примеры кода устаревшие, после сишарпа будто вернулся во времена перфокарт. Каждый мудак обязательно использует макросы, в итоге ты просто копипастишь куски кода и даже не понимаешь, как это работает. Ваш Result не Result, пришло время написать unwrap, напиши его снова. А вот тут вы передали владение ололо засрите весь код mut ссылками на вашу переменную.
Автор сишарпа и тайпскрипта просто гениальный гений, блять, на фоне этих долбоебов в чулках.
Аноним 04/02/24 Вск 04:49:22 #330 №3033770 
>>3033635
Используй шардинг на несколько симок, чтобы по каждой не превышать лимит в 25к. Разным клиентам выдай разные номера.
Аноним 04/02/24 Вск 10:22:56 #331 №3033846 
>>3033769
>Автор сишарпа и тайпскрипта просто гениальный гений
А то. Особенно если вспомнить, что он еще и создатель Turbo Pascal'я и Delphi. Хейлсберг наше всё.
Аноним 04/02/24 Вск 11:22:49 #332 №3033882 
>>3033846
>тайпскрипта
Оверсложные типы, отсутствие совместимости с дотнет. Сомнительное решение без будущего. Заменяется одним javadoc который не портит читабельность и не требует сопровождение двух языков.

Вообще, в ИТ многое идет не туда. Например отсутствие прокси языка у С++, нет прокси языка у кривого го.
Котлин, который пошел по пути бредовой мультиплатформы, вместо того чтобы стать языком универсалом, который мог бы собираться под рантайм го или рантайм дотнета.
Аноним 04/02/24 Вск 11:26:04 #333 №3033885 
>>3033882
> собираться под рантайм го или рантайм дотнета.
Поясню, чтобы не казалось бредом.
Они реально это обсуждали и допускали на уровне желаний.
Если с го были какие-то проблемы, до дотнет был достижим.
Аноним 04/02/24 Вск 11:29:06 #334 №3033887 
>>3033885
Так все люди изначально создававшие котлин ушли из жб. Я вообще хз зачем он нужен, тот же свифт гораздо любопытнее выглядит, но там ситуация как с шарпом - ряяя эпл вердерлок.
Аноним 04/02/24 Вск 11:37:01 #335 №3033894 
>>3033744
Ты случайно не тот шизик, который все растотреды засрал? Про маркетинг и фанбоев забыл
Аноним 04/02/24 Вск 13:13:36 #336 №3033955 
>>3033846
TurboPascal создал Филипп Кан, а парень, о котором ты говоришь, создал протоип Blue Label Pascal, который перекупил Филипп.
Аноним 04/02/24 Вск 18:48:52 #337 №3034617 
>>3033887
>тот же свифт гораздо любопытнее выглядит
кому любопытнее?
Аноним 04/02/24 Вск 20:20:24 #338 №3034780 
123
Аноним 04/02/24 Вск 20:37:31 #339 №3034813 
>>3034780
Ну чë, разбанили? Опять умирающий котофей, да?
Аноним 04/02/24 Вск 20:40:58 #340 №3034816 
.png
Анончик, анончик. Объясни мне за наследование. Не в плане че это. А в плане - когда оно нужно-то.

Типа. Допустим. Есть код как на прикриплейд.

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

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

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

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

Можете показать примеры, когда наследование - хорошо и правильно работает. И где почитать о том, как его готовить? А то я почему-то смотрю чужой код и в большинстве вижу, что такие же как я челы, по сути отказываются от наследования, и предпочитают интерфейсы.
Аноним 04/02/24 Вск 21:09:25 #341 №3034856 
>>3034816
>Мы меняем базовый класс. И потомки, теперь могут сломаться, придется лезть - чинить.
Ну так это и есть основная проблема наследования.
>Потому - сейчас, я кроме интерфейсов не использую концепцию наследования. Ну, иногда еще когда типа "красиво сделать" - делаю базовый класс абстакнтым, а нужные мне имплементации - приватными вложенными, и через статический метод - создаю.
Ну так правильно все делаешь. Не совсем понятно, что ты имеешь в виду под "приватными вложенными" и каким именно образом ты статику используешь. Но направление мысли верное - чем меньше бесконтрольного наследования - тем лучше.

Это хорошо еще, что в шарпе множественного наследования нет. Представь сколько хуйни было бы с ним.
Аноним 04/02/24 Вск 21:12:36 #342 №3034868 
>>3034813
Что за котофей? Сорян, не там затестил, у меня в /b бан
Аноним 04/02/24 Вск 21:21:23 #343 №3034885 
.png
>>3034856
> Не совсем понятно, что ты имеешь в виду под "приватными вложенными"
Я имею ввиду что-то типа прикриплейд.

Типа. Ну, типа, когда я не хочу наружу всю вот эту иерархию вытаскивать. Другие примеры: какие-нибудь валидаторы, типа я хочу сделать абстактный валидатор, а внутри прячу типа StringLengthValidator, StringPatternValidator и прочее, наруже будет просто Validator. Но опять, эту фигню я подсмотрел когда лазил в Functional Extensions for C#, и с тех пор иногда применяю.
Аноним 05/02/24 Пнд 04:24:47 #344 №3035427 
>>3034816
На любое гуи посмотри.
Там стоэтажное наследование, но иначе будет жесть

Предпочитать делеширование != всегда лучше делегировать
Аноним 05/02/24 Пнд 05:43:40 #345 №3035437 
Почему жыэс может забить хуй на пропущенные точки с запятой, а сисярп нет?
Аноним 05/02/24 Пнд 07:02:29 #346 №3035449 
>>3035437
Потому что есть спеки
Аноним 05/02/24 Пнд 07:17:31 #347 №3035457 
>>3034816
Понимание таких вещей приходит с опытом. Пиши как умеешь и не парься, со временем научишься. Или уйдешь в менеджеры, весь епам так делает.
Аноним 05/02/24 Пнд 07:20:56 #348 №3035461 
>>3035427
В том и дело, что я смотрел на гуи. И там наследование часто используется ВЕСЬМА СПЕЦИФИЧНО. Т.е. те элементы, которые вроде как казалось бы должны быть в одной иерархии - не в одной, а те что как-бы должны отличатся - в одной. В результате - приходится всячески извращаться, чтобы от поведения родителя избавиться, либо добавить нужное поведение которое уже реализовано в параллельной иерархии.

И на фоне этого есть ЖСовские фреймворки, где композитный подход многие используют, в котором нужное поведение своему компоненту ты делаешь как-то так:

<validator v-model="valid">
<presenter :data-source="page.data">
<template #top>
<my-top-bar :actions="page.actions"/>
</template>
<template #bottom>
<paginator v-model="page.meta"/>
</template>
</presenter>
</validator>
Аноним 05/02/24 Пнд 07:43:13 #349 №3035475 
>>3035461
Ты занимаешься какой-то хуйней ради хуйни. Просто пиши код, который решает задачу.
Аноним 05/02/24 Пнд 07:44:49 #350 №3035477 
>>3035461
не путай разметку (то есть читай описание структуры в текстовом виде, которую можно транслировать во что угодно) со своим вопросом по ООП

это вещи вообще из разных миров.
Аноним 05/02/24 Пнд 07:49:49 #351 №3035483 
>>3035477
Та можно было бы и без разметки.

const validator = useValidator();
const paginator = usePaginator();
const topBar = useTopBar();
...

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

Я это все пишу на фоне опыта того как, допустим, я делал TreeList для Xamarin, которого нет из коробки. Это была сущая боль. Это были страдания. Литры пролитых слез и бессоных ночей.
А потом - такой же TreeList на Vue - за полчасика хуяк-хуяк и закрыл таску.
Аноним 05/02/24 Пнд 07:58:51 #352 №3035495 
>>3035483
А потом ты бы пописал на jetpack compose и вообще ссал бы кипятком от возможности создания франкенштейнов без разметки вообще.
и что с того
мы подходы к гуи обсуждаем или вопрос был по ооп? ты как то определись.

я тебе говорю про конкретные вещи
возьми контролы КНОПКА, КОМБОБОКС, КАРТИНКА и так далее
хоть в своем любимом браузере блин. Они не элементы хмл, они контролы в объектной модели

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

Конечно жс в общем то не имеет наследования (там прототипная шняга), но мы же про стандартный ООП говорим.

Вообще делегирующий подход есть - jetpack compose использует как раз делегирование, а не наследование. Но шарп на это не способен. И вообще это не делегирование ради делегирования, а DSL
Аноним 05/02/24 Пнд 08:01:31 #353 №3035498 
>>3035483
вернее не то чтобы не способен.
в шарпе тоже можно сделать как в том же swift combine
и даже сделали же что то ( я видел видосы) в мауи
правда где оно в итоге вместо хамла - я хз.

Но это не то делегирование что "замена наследованию"
это через ектеншены, что немного не то
хотя семантически можно сказать что делегирование.
Аноним 05/02/24 Пнд 09:59:47 #354 №3035626 
>>3002293 (OP)
Шарпаны, дайте совет по ASP.NET core. Мне нужно, чтобы после UseEndpoints выполнился другой MiddleWare, который обрабатывает 404 и при этом возвращает тип IApplicationBuilder. Как такое сделать?
Аноним 05/02/24 Пнд 10:05:23 #355 №3035628 
>>3035626
Фильтры загугли
Аноним 05/02/24 Пнд 10:12:33 #356 №3035630 
>>3035628
Спасибо за наводку, анонче!
Аноним 05/02/24 Пнд 10:44:19 #357 №3035645 
image.png
Положняк по пикрилу?
Аноним 05/02/24 Пнд 10:47:03 #358 №3035648 
Вкатываться в .net видимо не имеет смысла. Джунских вакансий вообще нет
Аноним 05/02/24 Пнд 12:10:28 #359 №3035717 
image.png
Я пишу код для себя.
Аноним 05/02/24 Пнд 12:58:50 #360 №3035761 
>>3035717
Ну и норм. Я тоже когда-то писал код для себя. Потом в какой-то момент подумал, а какого фига, я это делаю просто так, если за это можно еще и деньги получать.
Аноним 05/02/24 Пнд 14:59:00 #361 №3035889 
>>3035648
Их уже даже в 1с нет. Вкат полностью умер.
Аноним 05/02/24 Пнд 15:00:48 #362 №3035892 
>>3035645
Только по приколу для пет проекта
Аноним 05/02/24 Пнд 15:02:13 #363 №3035893 
>>3035717
>>3035761
Счастливые времена.
Аноним 05/02/24 Пнд 15:16:53 #364 №3035910 
>>3035893
Да и сейчас можно пойти на завод набраться опыта, но вам же веб подавай со смузи.
Аноним 05/02/24 Пнд 16:03:05 #365 №3035968 
Сап гайз. Такой вопрос возник туповатый, хочу поучить с# ради юнити никаких планов особо не строю, попался на видос https://www.youtube.com/watch?v=w8rRhAup4kg
но возник вопрос. Препод в видосе создает консольное приложение (.NET Framework) на платформе .net 4.7.2 и на основе его учит, когда есть уже net 8. Стоит ли повторять 1 в 1 или создать на net 8?
Аноним 05/02/24 Пнд 16:15:20 #366 №3035994 
>>3035968
>Стоит ли повторять 1 в 1
Пожалуй, стоит.
Не спрашивай почему - чуствую так.
Аноним 05/02/24 Пнд 16:45:20 #367 №3036068 
>>3034816
Зачекай букву l из солида
Предпочитай композицию
Наследование реализуй в каких нибудь банальных ситуациях типа налседования от класса Person и когда тебе реально нужны реализации в базовом классе.
Также с помощью наследования можно ебонуть мощную поддержку дженериков, переопределяя по сути одним дженериком метод базового класса и при этом сохраняя инвариант.
Также мощь наследования можно понять с помощью гоф паттернов, там какие то поведенческие паттерны выдают приколы через наследования. К примеру с помощью visitor можно ахуенно избавиться от ветвлений для однородных объектов и абстрагировать логику
Аноним 05/02/24 Пнд 16:48:02 #368 №3036082 
Ребят, есть у кого ссылка сливов на курсы ITVDN ASP.NET Core? Их бля почистили с трекеров
Аноним 05/02/24 Пнд 17:46:18 #369 №3036230 
>>3035648
в итоге олды уйдут на покой, а джунов не будет
и твое место займет бомж из соседней мусорки, что книжку по шарпу бородатых годов нашел и прочитал.
Аноним 05/02/24 Пнд 17:51:57 #370 №3036240 
>>3036068
Визитор - это антипаттерн, его не надо использовать.
Аноним 05/02/24 Пнд 17:53:49 #371 №3036245 
>>3036240
кто тебя покусал и внушил тебе такую чушь?
Аноним 05/02/24 Пнд 18:00:09 #372 №3036262 
>>3036240
Почему?
Как я и сказал это один из способов избавиться от ветвлений и абстрагировать логику
Если бы об этом знали разрабы киберпанка то их бы не поливали гавной
Аноним 05/02/24 Пнд 18:03:11 #373 №3036270 
>>3036262
А еще это классическое решение проблемы двойной диспетчеризации

ну да, вместо решения этой проблемы можно пойти...на завод грузчиком
Аноним 05/02/24 Пнд 18:04:55 #374 №3036279 
>>3035910
Ты о чём? Счастливые те времена потому что можно свои проекты пердолить и переписывать десятки раз.
Когда прогаешь на дядю всё же энтузиазма на свои проекты порой не хватает
Аноним 05/02/24 Пнд 18:11:56 #375 №3036296 
>>3036262
Когда ты используешь визитор и медиатор, твой код оказывается разорван на мелкие кусочки. Особенно медиатор в обработчиках ивентов на микросервисах, это полный ебаный пиздец. Потом тебе надо обойти все 100500 мест кода и сложить этот пазл обратно чтобы понять, как эта хуйня вообще работает.
Логику не надо никуда абстрагировать. Такой хуйней занимались во времена GOF, когда пердолили абстрактные фабрики абстрактных фабрик, чтобы посчитать сумму в массиве. В 2024 пишут простой и понятный код.
Аноним 05/02/24 Пнд 18:14:57 #376 №3036303 
>>3036296
а ну покажи решение двойной диспетчеризации не через визитор и без хрени типа dynamic и рантаймовых исключений

а мы посмотрим
Аноним 05/02/24 Пнд 18:19:22 #377 №3036312 
>>3036303
Покажи бизнес-задачу, где это надо.
Аноним 05/02/24 Пнд 18:36:06 #378 №3036336 
>>3036312
А вот и пришли сразу к ТЕЬЕ ЛИЧНО НЕ НУЖНО
а как дышал, как дышал)
Аноним 05/02/24 Пнд 18:39:02 #379 №3036341 
>>3036336
Покажи, где нужно. Ты же у мамы умненький.
Аноним 05/02/24 Пнд 18:43:06 #380 №3036345 
>>3036341
тебе нигде. ты же калькуляторы пишешь - и те с помощью chatgpt

тут вот чел выше граф редактор делает - вот ему вполне можно применить визитор если он не хочет в рантайме исключения типов ловить.
Аноним 05/02/24 Пнд 18:49:59 #381 №3036371 
>>3036345
Каждый школьник-вкатунец пишет то свой редактор, то свою субд. Судя по багажу знаний, ты пишешь целую операционку с нескучными обоями.
Аноним 05/02/24 Пнд 18:53:50 #382 №3036378 
>>3036371
ну пишет и пишет. имеет право
ты спросил куда применить - я тебе показал реальный пример
а то что ты там сидишь в своем формшлепском мирке - твои проблемы
жаль тебя....ну или нет.
Аноним 05/02/24 Пнд 19:44:43 #383 №3036449 
https://www.youtube.com/watch?v=pWkTMIOcOgY
Аноним 05/02/24 Пнд 20:29:52 #384 №3036540 
>>3036449
удивительно что нужно пояснять очевидные вещи
Аноним 05/02/24 Пнд 20:57:24 #385 №3036582 
>>3035968
>Препод
Препод из Ромки, как из говна пуля.
>Стоит ли повторять 1 в 1 или создать на net 8?
Если ты хочешь учить шарп конкретно для Юнити, то стоит. Потому, что там под капотом mono по факту, а он по сути и есть попенсорсный .NetFramework
Если ты хотел юзать в геймдеве фишечки из современного шарпа - забудь. И вообще привыкай писать все просто и прямо как топор. За использование того же linq тебе к примеру сразу огурец в жопу вставят.
Аноним 05/02/24 Пнд 21:50:14 #386 №3036733 
>>3036582
>За использование того же linq тебе к примеру сразу огурец в жопу вставят.
Почему?
Аноним 05/02/24 Пнд 23:12:25 #387 №3036887 
>>3036733
А ты возьми и забенчмаркай и сравни хотя бы обычный foreach против .foreach() или поиск в обычном цикле или .Where() (ессно не на последнем .Net-е, а на том самом который к юнити прикручен)
Если ты хочешь, чтобы твоя игра была не дергающимся говном, а выдавала стабильные, хотя бы 60FPS, то все современные "бестпрактис" по написанию понятного и поддерживаемого кода идут строго нахрен. В геймдеве в почете скорость.
Аноним 05/02/24 Пнд 23:15:47 #388 №3036895 
>>3036887
Лол, форич как метод это не из линку, а от лист<т>
Аноним 05/02/24 Пнд 23:27:20 #389 №3036914 
>>3036895
По смыслу он прав.
Аноним 05/02/24 Пнд 23:49:49 #390 №3036947 
>>3036582
Спасибо
Аноним 06/02/24 Втр 07:25:21 #391 №3037177 
>>3036947
Никогда не спрашивай и не слушай на двочах
Тут модер жаба-даун, перебанил половину комьюнити /pr, от чего сидит срёт сам и шизиков развлекает.

Просто открой официальные доки, пришлось потратить 3 секунды гугла, какое нахрен моно и фремйворк 4.
https://docs.unity3d.com/2023.3/Documentation/Manual/CSharpCompiler.html
Аноним 06/02/24 Втр 07:25:37 #392 №3037178 
>>3036887
Я как-то смотрел видосик, там чел сравнивал производительность в задаче посчитать сумму массива. Петушиный linq выдал 40 единиц (миллисекунд, кажется, я точно не помню), а simd - 0.6 единиц, лол. Я вообще не понимаю, нахуй кому в 2024 нужен тот linq. Его в свое время сделали, чтобы впарить мартышкам новую версию вижуал студии, а для разработки это говно без задач.
Аноним 06/02/24 Втр 09:10:56 #393 №3037220 
>>3037178
Что блять?
Ты сравнил ассемблерную векторную команду с LINQ на полном серьёзе?
Ты совсем поехал?

Ну то есть ты сейчас жалуешься, что микроскопом гвозди плохо забиваются.
Аноним 06/02/24 Втр 09:23:33 #394 №3037233 
>>3037220
Поридж, если ты собираешься делать игры, тебе придется думать о таких вещах. Вплоть до того, где какие байты лежат и сколько раз проц ходит в память. Если ты напердолишь абстрактных фабрик и прочих бест практик из книжек, твоя поделка выдаст 5 фпс и обмякнет. Добро пожаловать в программирование.
Аноним 06/02/24 Втр 10:01:05 #395 №3037261 
>>3037178
Как там в 2015, дурачок? На последнем дотнете линк считающий сумму массива точно так же развернется в векторизованный код.

Только кто юзает линк в хай перформанс местах? Ты?
Аноним 06/02/24 Втр 10:27:23 #396 №3037278 
image.png
>>3037233
>Поридж, если ты собираешься делать игры, тебе придется думать о таких вещах. Вплоть до того, где какие байты лежат и сколько раз проц ходит в память. Если ты напердолишь абстрактных фабрик и прочих бест практик из книжек, твоя поделка выдаст 5 фпс и обмякнет. Добро пожаловать в программирование.
Аноним 06/02/24 Втр 11:17:36 #397 №3037311 
>>3037177
>Просто открой официальные доки, пришлось потратить 3 секунды гугла, какое нахрен моно и фремйворк 4
Угу. У джавы вон тоже вроде как 21-я версия последняя, а сидят все на 8-й (утрирую конечно) Вот и в юнити так же. Вроде как можно и новое, но по факту, чтобы твоё игроподелие нормально работало везде - хер ты из пределов .Net standarta и frameworkа вылезешь.
Аноним 06/02/24 Втр 16:15:21 #398 №3037690 
>>3037261
Не развернется
Аноним 06/02/24 Втр 19:53:32 #399 №3038082 
>>3037233
> делать игры
> на языке с гарбедж коллектором
Ты там ебобо? Мож РТОС на шарпе еще хочешь?

Давай теперь ты покажешь мне как ты на ассемблере напишешь что-то в духе:

users.Where(x=>x.Role == Roles.Admin)
.Join(posts, x=>x.AuthorId, y=>y.Id, (z, z1) => new {z.Namy, z.Email, z.BirthDate, z1.PostText, PostDate = z1.Date})
.GroupBy(x=> x.BirthDate.Year)
.OrderBy(x=>x.Key)

И потом вернись сюда и сравни количество кода и простоту внесения изменений.
Аноним 06/02/24 Втр 19:59:50 #400 №3038096 
>>3037233
>Поридж, если ты собираешься делать игры, тебе придется думать о таких вещах. Вплоть до того, где какие байты лежат и сколько раз проц ходит в память. Если ты напердолишь абстрактных фабрик и прочих бест практик из книжек, твоя поделка выдаст 5 фпс и обмякнет. Добро пожаловать в программирование.
Я не собираюсь игры писать, я пишу b2b ентерпрайз приложения. В моей сфере фичи гораздо важнее, чем байтоебля, у нас нет времени тратить годы на написание быстрого, но неподдерживаемого кода.

Мне тогда непонятно, на кой хер юнити нужен сишарп, если там из сишарпа ничего не используется?
Аноним 06/02/24 Втр 20:49:01 #401 №3038211 
>>3038096
> если там из сишарпа ничего не используется?
Как и в анриле - просто язык, а не платформа. В юнити и реализация тасок своя на базе корутин.
Жс тоже порой как ембеддед яп юзается и там тоже нет никаких привычных стандартных объектов, повезёт если реализация стандарта полная
Аноним 06/02/24 Втр 21:39:39 #402 №3038272 
Господа шарписты, а расскажите, пожалуйста о мобильной разработке на C#.
Какое место на рынке мобильной разработки занимает шарп?
Почему какой-либо организации может прийти в голову делать приложение на Xamarin, а не на каком-нибудь Flutter?
В чём могут быть преимущества такого выбора?
Аноним 06/02/24 Втр 21:48:07 #403 №3038281 
>>3038272
Я низнаю я не праграмист. Спраси у шляпки
Аноним 06/02/24 Втр 21:49:14 #404 №3038284 
>>3038272
>Господа шарписты, а расскажите, пожалуйста о мобильной разработке на C#.
Есть мнение, что Xamarin сам не компилит, а транслирует код в Java. Но это неточно.

>Какое место на рынке мобильной разработки занимает шарп?
На уровне статпогрешности.

>Почему какой-либо организации может прийти в голову делать приложение на Xamarin, а не на каком-нибудь Flutter?
>В чём могут быть преимущества такого выбора?
При переносе десктопного продукта (а скорее только лишь какого-то компонента этого продукта) на мобильную платформу.
Если бизнес-логика сложная, то есть ситуации когда проще и дешевле портануть продукт на Андроид C# код, чем переписывать его на другом языке. Это когда надо быстро, это когда надо это сделать "ещё вчера".
Аноним 06/02/24 Втр 21:50:03 #405 №3038286 
>>3038281
Ну какого хуя ты тут трёшся тогда, приживал?
Аноним 06/02/24 Втр 21:52:53 #406 №3038289 
>>3038272
>Какое место на рынке мобильной разработки занимает шарп?
Если не учитывать геймдев со всякими юнити, годотом и т.д., то практически никакое.
Аноним 06/02/24 Втр 21:53:44 #407 №3038291 
>>3038286
Я хачю стать начальникам праграмистав им ни нада знать язык дастатачна бить плёткой
Аноним 06/02/24 Втр 22:03:56 #408 №3038306 
>>3038272
> Какое место на рынке мобильной разработки занимает шарп?
На самом деле не так мало. Сильно меньше чем другие, но немало.
> Почему какой-либо организации может прийти в голову делать приложение на Xamarin, а не на каком-нибудь Flutter?
Потому что штат шарпистов, и искать еще кого-то в хуй не уперлось.
> В чём могут быть преимущества такого выбора?
У тебя дохуя уже всего может быть написано на шарпе. Те же всякие хуйни для рассчетов, анализов и прочего, которые по тем или иным причинам должны выполняться на клиентской машине. Лезть, искать документацию (которой никогда нет), искать людей которые знают как проводить эти расчеты(которые уволились 10 лет назад), залазить в исходники неродного языка, это долго дорого и тяжко.
Плюс - экосистема майков. Она буквально лучшее что есть в мире программирования.
Плюс - до недавних времен - поддержка от майков, которая тебе возьмет, какие-то там штуки подкрутит - и у тебя летает приложение, что пиздец.
Плюс, иногда требуется как раз не чтобы нативно выглядело, а наоборот, чтобы на всех платформах одинаково+-. Особенно часто эта хуйня начинается, когда у компании торкает за корпаративный стиль, чтобы все продукты в одной стилистике, с одним набором иконок и прочего говна.
Короче, причин может быть много.
Аноним 06/02/24 Втр 22:12:17 #409 №3038316 
>>3038291
аххахаха
Аноним 06/02/24 Втр 22:50:45 #410 №3038354 
>>3038284
>Есть мнение, что Xamarin сам не компилит, а транслирует код в Java. Но это неточно
абсолютно неправильное мнение. все исполняется на clr рантайме, поэтому пустое приложение и весит так много
и стартует так долго

потому лучше выучить котлин
ну это если не нужно кроссплатформа
но срать на яблочников. они это любят.
Аноним 06/02/24 Втр 23:23:56 #411 №3038374 
Почаны. Как быть с тем, что я хочу с одной стороны - типы в своем коде.
С другой - плагины с хотрелодом?

Типа делать какую-то общую сборку Core с интерфейсами и заставлять плагины их использовать?
Вообще, где почитать про реальные примеры с плагинной архитектурой, не на детских примеров, а допустим - какой-то плеер или там игрулька, в которой я хочу иметь возможность подкрутить что-то в dll и не пересобирать все полностью, а чтобы НА ЛЕТУ прилетели изменения.
Аноним 06/02/24 Втр 23:30:32 #412 №3038379 
>>3038374
AssemblyLoadContext?
Аноним 06/02/24 Втр 23:31:57 #413 №3038380 
>>3038354
>абсолютно неправильное мнение. все исполняется на clr рантайме, поэтому пустое приложение и весит так много
>и стартует так долго
>
Не, мнение не из за скорости. Я имею в виду что есть мнение, что C# на этапе компиляции транслируется в Java на уровне исходного, а дальше всё как обычно.

Откуда такое мнение? Есть две причины.

1. Написать компилятор уровня C# не по силам "стартапам" уровня Xamarin. Какой бы Мигель не был гений, но это пиздецовски сложная задача.

2. Если распаковать APK и заглянуть внутрь...
Аноним 06/02/24 Втр 23:35:34 #414 №3038387 
> Есть мнение
Такое ощущение, будто внутри Xamarin происходит какая-то магия, и никто точно не знает, как он работает.
Аноним 06/02/24 Втр 23:41:13 #415 №3038394 
>>3038380
>но это пиздецовски сложная задача.
Что там Котлин? Обозвали препроцессор языком и довольные.
А как щёки надували - "мы компилятор напишем". Написали? Сдулись.
Аноним 07/02/24 Срд 00:42:51 #416 №3038459 
>>3038380
>Я имею в виду что есть мнение, что C# на этапе компиляции транслируется в Java на уровне исходного
что значит есть мнение? тебе говорят как оно устроено, а ты есть мнение
так то есть мнение что земля плоская, но какой смысл об этом упоминать в среде астрономов

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

>>3038394
котлин няшный вышел. но он не транслирует себя в жаву
как и на рантайме дотнета тоже не один язык - но все они транслируют в IL
Аноним 07/02/24 Срд 00:49:56 #417 №3038465 
>>3038459
Ну хуй знает. Может быть ты прав, может быть нет.
Углубляться лениво.
Аноним 07/02/24 Срд 01:15:34 #418 №3038478 
>>3038465
Уходи в лес. Есть мнение что 5g вышки облучают
Ты не выживешь
Аноним 07/02/24 Срд 02:10:59 #419 №3038557 
>>3038478
>Уходи в лес.
А я по-твоему где? Уже давно там.
Аноним 07/02/24 Срд 09:08:11 #420 №3038633 
>>3038374
https://metanit.com/sharp/tutorial/14.3.php
https://metanit.com/sharp/tutorial/18.3.php
Это если вкратце, а за более подробным на МСДН
Аноним 07/02/24 Срд 16:32:27 #421 №3039398 
изображение.png
Здравствуйте. Есть код, который вытаскивает значение атрибута поля и его месторасположение на листе в Excel. Как мне получить значение поля с типом данных поля или как скастить? А то при использовании GetValue() возвращается объект, который я могу преобразовать только в string. А нужно, чтобы был тип данных поля, иначе в Excel всё будет строкой, а там формулы...
Аноним 07/02/24 Срд 17:01:58 #422 №3039432 
Нужна ваша помощь с впф. Есть некая рамка и изображение в ней. Суть в том, что изображение в несколько раз больше рамки и пользователь должен иметь возможность это изображение перетаскивать внутри неё, чтобы выбрать тот кусочек, который хочет. И звучит то вроде просто, но у меня никак не получается это реализовать. Если просто прописать размеры больше рамки рендерится все равно будет только видимая часть и при перемещении через translate transform все остальное будет прозрачным. Есть идеи как такое можно реализовать?
Аноним 07/02/24 Срд 18:20:03 #423 №3039513 
>>3039398
Там по моему для ячейки можно достать атрибут, который укажет какой excel-тип данных у неё. Тебе надо написать свой резолвер который будет преобразовывать значение в зависимости от него. Простым кастом тут не получится.
Аноним 08/02/24 Чтв 03:35:18 #424 №3040079 
2024-02-0802-56-22.png
>>3039432
Зависит от контейнера в котором находится изображение. Некоторые обрезают по габаритам, а некоторые нет.

Какие контролы не обрезают: Canvas. Но у него есть существенный минус — его локальное пространство бесконечно. Контент не видит границ родителя, как у Grid к примеру. Ты можешь сколько угодно менять размер Canvas, но содержимое под эти размеры никак не сможет адаптироваться, если ты этому контенту сам не передашь информацию.

Все остальные контролы обрезают. Причем может сложиться ощущение, что Border или Grid не обрезают, если размер контента не больше габаритов родителя. К примеру Grid имеет габариты 100х100, а изображение внутри 30х30. Так вот если ты при помощи RenderTransform сместишь изображение за пределы грида, то изображение не обрежется. Но если ты поставишь размер изображения 300х300, то оно обрежется оставив до габаритов родителя т.е. 100х100. При этом изображение все так же может выходить за пределы грида, только вот в уже обрезанном состоянии. А все потому, что RenderTransform в отличии от LayoutTransform пересчитывается постфактум на этапе рендера, когда грид УЖЕ обрезал твое изображение.

Какие уловки можно в этом случае провернуть? Самый тупой это картинке установить Margin в минус. Чем меньше значение (относительно нуля), тем больше ход твоего изображения. Но это ебень, лучше использовать канвас. В твоем случае уж точно.
Можно попробовать тыкнуть палкой LayoutTransform, но я тебе ничего не смогу сказать по этому поводу.

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

Еще информация для справки. Если ты собираешься что-то тягать, то конечно же ты можешь использовать любой контрол и даже заставить двигаться Image. Уж не знаю какой ты способ выбрал: то ли отслеживать MouseMove рамки, то ли картинки, но есть еще один вариант. Если ты в качестве перетягиваемого элемента будешь использовать Thumb, то у него в событиях есть лютая годнота в виде DragDelta — это относительное смешение мыши при перетягивании. Все что остается, это данное значение запихнуть в Matrix.Move, который тоже смещает на относительную величину.
Но есть нюанс. Нюанс с вращением. Если Thumb повернут трансформациями, то дельта будет рассчитываться относительно повернутого объекта. Это может быть как гемором так и фичей. Например, если ты делаешь какой нибудь слайдер, то ты можешь сделать логику для перемещения Thumb по оси X, а если тебе нужен вертикальный вариант слайдера, то ты просто устанавливаешь контролу трансформацию с поворотом на 90 градусов, при этом визуально ползунок будет двигаться по оси Y, но внутри он все так же работает по оси X. Очень удобно.

В этот Thumb ты помещаешь ImageBrush, в котором и будет находиться твое изображение. Причем возможности ImageBrush гораздо шире того же Image. Там можно контролировать масштаб, положение и тайлинг изображения. В свойствах есть же есть так называемый ViewBox, это виртуальная область визуализации и все что выходит за его пределы — обрезается. Такой ViewBox много где используется, например в SVG.
Не знаю, нужно тебе или нет, просто информирую.

А еще погугли что такое Adorner. Возможно рамка, которая показывает область обрезки изображения (как и сами манипуляторы масштабирования/премещения) лучше делать через адорнер-слой.
Аноним 08/02/24 Чтв 03:38:54 #425 №3040080 
>>3040079
>это относительное смешение мыши при перетягивании
смеЩение* мыши
Аноним 08/02/24 Чтв 03:41:47 #426 №3040081 
>>3040079
Вот пример инструмента масштабирования при помощи адорнеров.
https://youtu.be/ddVXKMpWGME
Аноним 08/02/24 Чтв 03:49:00 #427 №3040082 
>>3040079
Ах да, я прикрепил картинку, а текст удалил.
На пикрилейтед рамка со скругленными углами обрезает по контуру прямоугольник внутри. Именно что обрезает. Делается это с включенной опцией ClipToBounds.
Аноним 08/02/24 Чтв 17:44:32 #428 №3040661 
>>3040079
> Но есть нюанс. Нюанс с вращением. Если Thumb повернут трансформациями, то дельта будет рассчитываться относительно повернутого объекта.
MouseMove также будет относительно рассчитываться
Аноним 08/02/24 Чтв 18:10:01 #429 №3040733 
>>3040079
Спасибо за такой подробный ответ, много нового для себя открыл. Про thumb впервые услышал, а ведь куча костылей была мной написана. Удивительное дело конечно, столько пользоваться технологией и все равно натыкаться на вроде бы базовые вещи, которые тем не менее ты не знал.
Вообще, решение я в итоге нашел, костыльное до жути, но тем не менее - засунул картинку в scrollviewer и прокрутил на середину.
Аноним 08/02/24 Чтв 19:34:40 #430 №3040882 
1.jpg
>>3040661
>MouseMove также будет относительно рассчитываться
Ты имеешь ввиду метод GetPosition()? Но он рассчитывается относительно указанного контрола.

Смотри пикрил. Левый вариант — это GetPosition(). Когда ты перетягиваешь курсор из точки А в точку B. Ты получаешь смещение относительно нуля габаритов рамки. Тебе нужно произвести дополнительные вычисления, чтобы определить путь A-B. Я уже молчу про то, что MouseMove работает всегда, и тебе надо как-то детектить не просто перемещение мыши, а именно что перетягивание. Тебе придется добавлять собите MouseClick, добавлять переменную последней позиции мыши и кучу всего.

Правый вариант — это как работает DragDelta. В аргументах события тебе УЖЕ передаются координаты смещения относительно точки A.
Кроме того, там есть события DragStarted и DragCompleted для детектинга начала и конца перетаскивания. Есть DragEnter это когда откуда-то еще в твой контрол что-то перетягивают. Так реализуют функционал Dtag n Drop.
Аноним 08/02/24 Чтв 20:26:50 #431 №3040929 
>>3012850
Это код из видео просто
Аноним 08/02/24 Чтв 21:45:26 #432 №3041113 
.png
Хм. Решил прикола ради 10к коннектов погонять на своем самописном сервере.

И прикриплейд смущает. После остановки клиентов - висит в оперативке вот это вот.

НО. После того как ради прикола запустил еще раз клиенты, но с 10 клиентами - память начала уменьшаться. Полчаса до этого - диспечер задач показывал, такое потребление.

Почему так? Почему оно не освобождается сразу? Если в студии запускать с инструментами дебага - там сразу график вниз падает.
Аноним 08/02/24 Чтв 21:47:18 #433 №3041117 
>>3041113
>Почему оно не освобождается сразу?
никому другому в системе память не нужна
Аноним 08/02/24 Чтв 21:54:03 #434 №3041138 
А. В дополнение >>3041113
Еще смущает вот что. 14 гигов. Типа на этом сервере гоняю XMLки. До этого гонял бинарный протокол типа модбаса, но проще, 10к меньше 2 гигов потребляли.
Это все из-за XML'ок и сериализаторов? Чи как? Чи шо?
Аноним 08/02/24 Чтв 21:55:18 #435 №3041142 
>>3041138
ну дык тебе зачем профайлер даден?
ПОСМОТРИ
Аноним 08/02/24 Чтв 22:00:46 #436 №3041154 
>>3041113
в общем читай познавай только голову перевяжи
https://habr.com/ru/articles/754248/
Аноним 08/02/24 Чтв 22:13:21 #437 №3041175 
.png
>>3041142
Я не понимаю, куда смотреть
Ну. Типа. Я просто взял NetworkStream и скормил его XmlSerializer.

С модбас-подобным правда я использовал MemoryPool и обычные сокеты, без этого самого NetworkStream
Аноним 08/02/24 Чтв 22:17:11 #438 №3041181 
>>3041175
ну это надо смотреть кто удерживает все эти byte[]
Аноним 08/02/24 Чтв 22:22:11 #439 №3041185 
>>3041181
Ну. Если клацнуть на эту строчку - сокеты больше всего.
Больше не скажу, потому что упала студия.
Потому и не смотрю этот профилировщик. На работе есть dotTrace, там хоть не падает от каждого чиха. А вот в студии - сколько не пробовал - каждые второй сеанс - все пиздец, и падает студия(
Аноним 08/02/24 Чтв 22:24:47 #440 №3041186 
>>3041185
ты так говоришь будто я тебя заставлял смотреть именно в ЭТОТ профайлер )
я заставлял лишь голову повязать чтобы она не лопнула от ума когда статью на хабре прочтешь.
Аноним 08/02/24 Чтв 22:27:54 #441 №3041188 
>>3041186
Я уже прочитал. Меня все же смущает разница между другим сервером который без стрима и с бинарным протоколом. Разница в разы по потреблению.
Аноним 09/02/24 Птн 14:18:07 #442 №3041724 
>>3041154
Интересное чтиво, оптимизация которая тупо затрудняет мониторинг памяти. Вроде в го или жабе с таким же боролись и добились освобождению сразу, жалко в статье не раскрыта идея как победить "это" в шарпах.
Аноним 09/02/24 Птн 15:45:22 #443 №3041848 
>>3041724
AppDomain вроде как освобождает всю память.
Аноним 09/02/24 Птн 21:15:12 #444 №3042286 
Кто пробовал несколько микросервисов соединить в рамках одного процесса?
Какие подводные?
Какие альтернативы, если клиент не хочет докера, но при этом - хочет чтобы ОДНОЙ КНОПКОЙ, КАК ДЕСКТОП...
Аноним 09/02/24 Птн 21:23:43 #445 №3042307 
>>3042286
Это как? Типа нескольких сборок, которые загружаются одним общим экзешником, но взаимодействуют не через вызов методов, а через сокеты?
Аноним 09/02/24 Птн 21:29:05 #446 №3042312 
>>3042307
В ближайшем приближении - ды.
Понимаю, что в общем целом - такое себе решение. Но если уже есть пачка микросервисов, и никто не думал о том что должны будут частью монолита - это видится самым простым решением, если времени не так много на спринт.
Аноним 10/02/24 Суб 00:26:40 #447 №3042457 
>>3042312
Вы там совсем ебанулись.
Аноним 10/02/24 Суб 00:41:18 #448 №3042461 
>>3042286
Не выебывайтесь и если так приперло напишите мастер процесс который будет запускать/обновлять/гасить весь зоопарк
Аноним 10/02/24 Суб 01:20:19 #449 №3042479 
>>3042286
Батник напиши, который их запускать будет
Аноним 10/02/24 Суб 03:28:25 #450 №3042512 
Господа-аноны девелоперы, есть вопрос для тех, кто шарит за фриланс. Ввиду некоторыхпсихучет обстоятельств, работа в офисе для меня закрыта.
Долго и много учил C#. Хорошо знаю основу языка, умею работать с базами данных (реляционными и нереляционными), разбираюсь в WPF, а также ASP.NET Core (а еще разбираюсь в разных подходах вроде MVVM, MVC, MVP). Могу как в CodeFirst так и в DBFirst. Знаю как завернуть приложение в контейнер с помощью Docker'а и запустить на каком-нибудь облаке. На Indeed видел вакансию - Angular, .NET, подумал, но пока JS не учил, пользовался только готовыми вещами с bootstrap для своих мелких демопроектов. Еще в дизайне я говно.
Так вот первый вопрос, с текущим набором навыков можно ли начать фрилансить? Если нет, то что нужно доучить?
Если вы пользуетесь зарубежными фриланс биржами или другими сервисами по поиску удаленной работы, то какими? Как вы выводите доход со счета сервиса на российскую карту?
Спасибо что дочитали до конца. Заранее спасибо за ответы.
Аноним 10/02/24 Суб 09:34:37 #451 №3042594 
>>3042512
С такими навыками - иди джуном, попробуй как-то год продержаться. Потом пытайся перепрыгнуть на мидла, и ищи удаленку.
Аноним 10/02/24 Суб 13:53:35 #452 №3042757 
>>3042286
>Какие альтернативы
Искать новую работу и постараться в следующий раз не вляпаться в такое дерьмо, где просят переделать всю архитектуру в последний момент потому, то "клиент не хочет...". Такие вещи как бы перед началом работ, а не после согласовываются.
Аноним 10/02/24 Суб 17:56:02 #453 №3043007 
>>3042757
У нас гибкая разработка, вы нам не подходите.
Аноним 10/02/24 Суб 18:06:23 #454 №3043013 
>>3042757
Смотри, няша.
Вот ты продуктовая компания. Вы собрали с разных бизнесов хотелки, продумали архитектуру. Все отлично. Разрабатываете.
Вот вы выпустили первую версию. Вторую версию. Третью версию... Большинству клиентов нравится то что есть. Вы развернулись в облаке каком-то, они подрубаются и пользуются. Отлично все.

Тут приходит кто-то из маркетинга, говорит: "Там короче клиент, хочет наш продукт, НО У НЕГО ТРЕБОВАНИЕ, чтобы запускалось без докеров и одной кнопкой, КАК ДЕСКТОПНОЕ. На его мощностях. Оч важный клиент. Оч много денег платит. В общем, я ему уже пообещал, что мы через 2 недели покажем ему на его мощностях развернем, сделайте че-нибудь быстрое"
Твои действия?
Аноним 10/02/24 Суб 18:42:16 #455 №3043049 
>>3043013
>ты продуктовая компания
>У НЕГО ТРЕБОВАНИЕ, чтобы запускалось без докеров и одной кнопкой, КАК ДЕСКТОПНОЕ. На его мощностях.
Сказочная ситуация. Кабан бы послал нахуй менеджера с одним таким клиентом. Не по техническим требованиям, а по тому что к хуям ломаяется схема получения денег с клиента за услугу. Можно вообразить такую ситуацию в мелкой компании вообще без клиентов.
Аноним 10/02/24 Суб 18:44:20 #456 №3043056 
>>3043049
Если клиент крупный, и при этом - старый и лояльный, никуда кабан его не пошлет. Проще попросить поднажать, придумать решение, и вообще.
Как-бы бизнес это еще и про отношения. Особенно всякий B2B.
Аноним 10/02/24 Суб 18:46:04 #457 №3043060 
>>3043056
Если клиент крупный, то проще клонировать ему всю инфраструктуру, чем преписывать непонятно на что.
Аноним 10/02/24 Суб 18:48:25 #458 №3043068 
>>3043013
В таких местах где продакт и тимлид такое пропускают в бэклог с дедлайном вчера либо должны платить сильно выше рынка, либо нахуй там работать
Аноним 10/02/24 Суб 19:18:17 #459 №3043108 
>>3043013
>Вот ты продуктовая компания.
Спасибо нахуй. Наелся подобного.

>>3043013
>Оч много денег платит. В общем, я ему уже пообещал, что мы через 2 недели покажем ему на его мощностях развернем, сделайте че-нибудь быстрое"
>>3043056
>Если клиент крупный, и при этом - старый и лояльный, никуда кабан его не пошлет. Проще попросить поднажать, придумать решение, и вообще.
Когда бизнес позволяет своим продажникам принимать такие охуительные решения (без согласования с разработкой) или еще хуже владелец сам принимает такие решения, то можно с большой уверенностью сказать, что конторе пиздец. По крайней мере в её обычном виде. Это просто сигнализирует о том, что кабан потерял берега и вместо спокойного и методичного зарабатывания бабла и продвижения на рынке, решил погнаться за длинным рублем и катит свой же бизнес в яму.
Аноним 10/02/24 Суб 19:26:31 #460 №3043124 
>>3043108
>за длинным рублем
за быстрым рублем
Аноним 10/02/24 Суб 19:27:01 #461 №3043126 
>>3043013
> НО У НЕГО ТРЕБОВАНИЕ, чтобы запускалось без докеров и одной кнопкой, КАК ДЕСКТОПНОЕ
А такое и правда бывает? Я с таким встречался только на первой работе. Как раз было десктопное приложение, которое должно было быть БЕЗ БД И БЕЗ ИНСТАЛЛЯТОРОВ, УСТАНОВКА ПРОСТЫМ КОПИРОВАНИЕМ. С тех пор за 20 с лишним лет больше такого не видел.
Аноним 10/02/24 Суб 19:44:07 #462 №3043151 
>>3043126
Ну. Вот недавно прилетело как раз. Типа, ну хочет клиент, чтобы можно было просто далее-далее-далее, появился ярлычок на рабочем столе, клацнул, запустил. Надо придумать, как сделать. Я думал-думал, и учитывая, что на все про все - две недели разработки - ниче лучше, кроме как слинковать все это в один проект я пока не придумал.
Аноним 10/02/24 Суб 19:50:48 #463 №3043160 
>>3043151
Написать заявление и уйти на больничный?
Аноним 10/02/24 Суб 20:19:38 #464 №3043187 
>>3043151
>Типа, ну хочет клиент, чтобы можно было просто далее-далее-далее, появился ярлычок на рабочем столе, клацнул, запустил.
Смотри, если ты упорешься и все таки это сделаешь, то крайнем останешься все равно ты. Просто потому, что у клиента все равно будут проблемы и придет он к вам, а их переадресуют тебе и с каждой итерацией ты будешь все больше и больше виноватым. И не тот маркетолог, который пообщещал такие сроки, а именно ты, т.к. взялся за работу и не сделал или сделал плохо. Тебя просто сольют в итоге, как того, кто "завалил проект". Реально сам видел, когда зав.глав.кабана увольнял джуна с такой формулировкой, когда он не смог за пару недель переписать проект с одной библиотеки на другуй (обе которых он до этого не трогал даже.)
А вот если сразу отмазаться от такого задания, ну хуй с ним, побудешь плохим пару дней, зато потом переключаться на другого лоха который взялся и не смог.
Аноним 10/02/24 Суб 20:41:54 #465 №3043217 
>>3043187
Как же ты прав, анон. Сам в такую ситуацию попадал из-за омежности и страха сказать нет. Сейчас понимаю, что лучше сразу пересилить себя, чем потом оправдываться и быть крайним.
Аноним 11/02/24 Вск 19:25:28 #466 №3044101 
шарпаны, а есть ли способ затащить в объект поля, которые будут компилироваться с определенным компиляционным символом типа атрибута Conditional("DEBUG"), но для полей, проперти и т.д.?
сейчас я делаю вот это:
#if DEBUG
int _debugValue = 5;
#endif
препроцессорные куски неистово бесят.
Аноним 11/02/24 Вск 19:42:35 #467 №3044132 
>>3044101
Раковая хуйня, осуждаю
Аноним 11/02/24 Вск 20:00:36 #468 №3044167 
>>3044101
Для какого кейса тебе это нужно?
А вообще моё мнение такое - если нужно активно использовать код, который работает только в Debug сборке, то нужно выделить для него абстракцию (сигнатура метода, интерфейс, абстрактный класс), сделать две реализации этой абстракции (одну денежную, другую релизную), и только в одном месте с помощью директив препроцессора указать, какую из них для какой конфигурации нужно использовать. Так у тебя весь код не будет увешан директивами препроцессора.
Аноним 11/02/24 Вск 20:28:13 #469 №3044202 
>>3044132
>>3044167
вот я задал вопрос, посидел, подумал и понял что это действительно раковая хуйня, спасибо.
Аноним 11/02/24 Вск 20:46:22 #470 №3044214 
Как в HttpClient выбрать IP адрес через который делать запросы?
Вот к примеру у меня vps ubuntu с 2мя ip, как мне выбрать через какой ип делать запрос?
Аноним 11/02/24 Вск 21:01:07 #471 №3044228 
>>3044214
Погугли хттп протокол. Если коротко то хост передаётся в хедерах после установки коннекта с ипом. Дальше думаю сам раскуришь, один фиг тебе с этими знаниями всю жизнь работать
Аноним 11/02/24 Вск 21:11:01 #472 №3044242 
>>3044214
Добавить SocketsHttpHandler и в нём забиндить сокет к нужному локальному IP.
См. https://stackoverflow.com/questions/65930192/
Аноним 12/02/24 Пнд 21:33:09 #473 №3045924 
Стоит ли отказаться от лямбд на высоконагруженных участках кода?
Просто я вижу, как у меня весь GC засран акшонами. Они появляются, сразу исчезают, их GC пытается вилкой чистить.
Но блин, как же с ними удобно-то.
Аноним 12/02/24 Пнд 22:37:25 #474 №3046088 
>>3045924
лямбды что ничего не захватывают - они создаются как методы класса
те что что то захватывают - хз не помню

а вот как раз методы постоянно создают делегаты
Аноним 12/02/24 Пнд 23:33:15 #475 №3046155 
.png
.png
.png
>>3046088
У меня примерно такой код на одном участке, который из одной апишки в другую гоняет
И в профилировщике - я вижу примерно картину как на прикриплейд со сборками мусора постоянными.
Если смотреть, то создаются и постоянно исчезают Action. Что странно, ведь моя лямбда должна быть Func<Task>, а ее вообще там не видно.

Перепроверил переписав без лямбд. В общем, дохрена этих Action'ов создает HttpClient. Значит не в моем коде дело. Теперь вопрос - нахуя он это делает и че мне с этим делать? Да, оно чистится, но меня смущает, что постоянно дергается GC.

Или я тупой и вообще не понимаю что происходит и так и надо.
Аноним 13/02/24 Втр 01:03:31 #476 №3046209 
>>3046155
ничего ты с этим не сделаешь. ну в этом и суть рантайма - чистить мусор и не заморачиваться ручным управлением

ну да, мелкие сделали херь с делегатами методов.
Аноним 13/02/24 Втр 12:28:47 #477 №3046668 
Сап, шарпач, кто-нибудь пробовал генерировать клиенты по OpenAPI-спекам из Сваггера? Имеется:
- Апи №1; общая либа с модельками запросов и ответов; апи №2, пользующееся апи №1
- Огромная лень писать клиент самому

Попробовал сгенерить клиент через Kiota (github.com/microsoft/kiota), столкнулся с тем, что второе апи пользуется в контроллере моделькой запроса из общей либы, но в сгенеренном клиенте все модели создаются заново с теми же названиями, и получается херня какая-то.

Собственно, вопрос: есть ли генераторы клиентов, которые могут использовать существующие модели или хотя бы наследоваться от них?
Аноним 13/02/24 Втр 12:35:33 #478 №3046681 
>>3046668
>получается херня какая-то.
Не похуй ли? Как раз весь смысл генерации в том, чтобы кнопку нажать и пользоваться.
Если у тебя есть потребность лезть руками в генереный код, то ты очень не прав, прям пиздец как не прав.

>есть ли генераторы клиентов, которые могут использовать существующие модели или хотя бы наследоваться от них?
Даже если и есть, то все равно они накрутят поверх свои обертки и ты не сможешь ими пользоваться.
Аноним 13/02/24 Втр 12:57:34 #479 №3046721 
изображение.png
изображение.png
Наваял вот такое. Функция получает название типа поля в строковом виде, значение поля в строковом виде, а потом парсит. Сделал так потому что property.GetValue() возвращает объект. Как можно улучшить этот код? Щас напрягает то, что куча предупреждений об возможном null. Или код вообще говно и лучше ещё подумать...
Аноним 13/02/24 Втр 14:13:45 #480 №3046812 
>>3046721
Нормальный код. Чтобы студия не заебывала про null, напиши перед свичем проверку if null throw ArgumentNullException. Сравнивать лучше через InvarianCultureIgnoreCase. Можно, конечно, заменить на Dictionary, но он занимает место в памяти, так что чисто вкусовщина. Мне больше нравится свитч, так ты сразу видишь все варианты, а со словарем хуй поймешь что там лежит.
Аноним 13/02/24 Втр 16:11:09 #481 №3046981 
>>3002293 (OP)
Посоветуйте книжек или уроков С# через разработку игорей или для создания чего либо по Информационным Системам

Так то нужно написать программу для диплома по Информационным Системам. Вот и думаю как можно совместить эти направления, ведь у меня времени только год с лишним.
Появилось время и надо заняться, иначе опять пустая РАБота все силы сожрёт и не до уроков и мечты свалить в другой город.
Аноним 13/02/24 Втр 16:38:22 #482 №3047030 
image.png
image.png
>>3046721
В реальности я бы написал как пик 1, но если хочется выебонов то пик 2
Аноним 13/02/24 Втр 16:47:06 #483 №3047040 
>>3046721
property.GetCustomAttributes(true).Where(a=>a is LocationAttribute).Cast<LocationAttribute>();
Аноним 13/02/24 Втр 17:10:31 #484 №3047095 
>>3046812
>>3046981
Спасибо за ответы!
Переписал на первый вариант. Более цивильней выглядит + предупреждение о null ушло на хуй
Аноним 13/02/24 Втр 17:17:49 #485 №3047111 
>>3047040
Хуя тут. Спасибо. Теперь ещё компактнее код можно сделать.
Аноним 13/02/24 Втр 20:09:29 #486 №3047419 
>>3047030
>В реальности я бы написал как пик 1
>>3047095
>Переписал на первый вариант.
Вы, блять, серьезно?
Аноним 13/02/24 Втр 20:15:05 #487 №3047435 
>>3047419
Ну а что не так, анон? Свитч не позволяет использовать typeof, и за счет решение с ифом менее подвержено ошибкам.
Аноним 13/02/24 Втр 21:16:11 #488 №3047502 
image.png
>>3047435
>подвержено
Хуевержено.
Не благодари:
(enum в неймспейсе System находится)
Аноним 13/02/24 Втр 21:49:39 #489 №3047542 
>>3047502
А чем такое решение лучше, яем первый вариант другого анона?
Аноним 13/02/24 Втр 22:08:04 #490 №3047566 
>>3047542
Читаемость, удобство обслуживания, меньше вероятность проебаться, возможность заинкапсулировать какую-то доп. логику в экстеншене для enum.
Это не говоря уже о том, что портянка из if...else..if...else ни одного нормального код ревью не пройдет.

Плюс, при необходимости, все это очень легко преобразовать в что-нибудь вроде Dictionary+Resolver, а содержимое словаря потом вообще в конфиги вынести.
Аноним 13/02/24 Втр 22:20:18 #491 №3047575 
.png
>>3046721
Я бы так сделал, лул.
Хотя не делал бы. Я вообще не понимаю, нахуя это делать. Ну да ладно, раз ты делаешь - значит надо.
Аноним 13/02/24 Втр 22:39:21 #492 №3047587 
.png
>>3047575
Чуть допиленная версия.
Аноним 14/02/24 Срд 00:02:54 #493 №3047697 
>>3047566
>портянка из if...else
Наркоман, ты написал точно такую же портянку из матчей.
>содержимое словаря потом вообще в конфиги вынести
А потом сидишь и два часа пытаешься понять, какого хуя простейший код не работает. Или работает у тебя, а на проде падает, это самая веселуха. С ифами все было просто и понятно, с конфигами джун-долбоеб насрал абстрактными фабриками и хуй проссышь, откуда данные берутся.
Аноним 14/02/24 Срд 14:27:38 #494 №3048183 
изображение.png
Всем привет. Имеются вот такие магические числа. Знаю, что это плохо и надо от них избавляться, но как? По идее надо это в enum сложить, но я не ебу как всё это обзывать. Те цифры, что на картинке - смещение на одну строку вниз и на две соответственно. Так и писать?
Аноним 14/02/24 Срд 14:29:22 #495 №3048185 
>>3048183
всё. ты выгорел. на завод.
Аноним 14/02/24 Срд 14:47:57 #496 №3048209 
>>3048185
Я уже на заводе
Аноним 14/02/24 Срд 15:01:29 #497 №3048228 
>>3048183
Может быть расширение для report написать с осмысленным названием. Типа .report.NextRow...()
Аноним 14/02/24 Срд 15:07:23 #498 №3048239 
изображение.png
>>3048228
А если у меня название метода CreateReportBody, то может так и оставить? Думаю, что будет понятно, что там смещение на сколько-то. Хотя я хуй знает. А что за расширение?
Аноним 14/02/24 Срд 15:28:08 #499 №3048274 
Есть публичный абстрактный класс System.Windows.Media.PathSegment

Но за каким-то хреном конструктор у него Internal, в итоге я не могу реализовать этот класс, потому что возникает ошибку:
CS1729 "PathSegment" не содержит конструктор, который принимает аргументы 0.

Это что за извращениие?
Аноним 14/02/24 Срд 17:32:15 #500 №3048488 
>>3048274
Реализуют интерфейсы, а не классы. Классы наследуют.

Потом, написано же в доках:
>Although this class is abstract, it is not publicly extensible.
Аноним 14/02/24 Срд 19:16:00 #501 №3048707 
readonly.JPG
посоны, будет ли компилятор считать дженерик ридонли структуру типа пикрелейтеда безопасной и не срать защитными копиями, если констрейнтом тоже структура и все они будут тоже ридонли?
Аноним 14/02/24 Срд 19:46:46 #502 №3048724 
image.png
>>3048707
Да, jit все ненужные проверки выкинет
Аноним 14/02/24 Срд 21:41:03 #503 №3048888 
>>3048724
охуенчик, спасибо
Аноним 14/02/24 Срд 22:14:01 #504 №3048927 
>>3048488
А как вообще бороться с подобным? Я хоту создать свой собственный сегмент.
Аноним 14/02/24 Срд 22:17:59 #505 №3048930 
>>3048927
Никак, код овнер так сказал, значит так надо
Либо через рефлексию, но за такое нужно битой по хребту пиздить
Аноним 14/02/24 Срд 22:20:35 #506 №3048931 
>>3048927
Форкнуть WTF.
Аноним 15/02/24 Чтв 00:54:23 #507 №3049089 
image.png
Есть кто реально на линуксах работает, есть какие-то подводные?
В rider работает hotreload?
Аноним 15/02/24 Чтв 03:08:20 #508 №3049129 
>>3048927
Я думаю, там какой-то код есть, который умеет работать только с существующими сегментами, а если ты сделаешь свой, то всё наебнётся.
Это говнокод, конечно, но его везде можно найти.
Аноним 15/02/24 Чтв 03:30:42 #509 №3049133 
>>3048930
>>3048931
>>3049129
Какие же они изверги.

Может сделать свой контейнер, который будут содержать как готовые классы сегментов, так и мои собственные. Только хз как их объединить. Может сделать коллекцию DependencyObject.

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

Непонятно как это потом обновлять. Одно дело, когда пользователь кидает весь список, а другое дело, когда меняет точку в каком-то сегменте.
Аноним 15/02/24 Чтв 03:35:59 #510 №3049135 
>>3049133
> Одно дело, когда пользователь кидает весь список, а другое дело, когда меняет точку в каком-то сегменте.
У меня только вариант - подписываться на изменение коллекции точек моего кастомного сегмента и модифицировать точки связанного элемента.

Да, наверно так и поступлю.
Аноним 15/02/24 Чтв 03:45:10 #511 №3049137 
>>3049089
>hotreload
А кто-то им вообще пользуется?
Просто по моему это хуйня почти без задач, годная разве что когда что-нибудь мелко-консольное пишешь. Более-менее объемный сервис хер ты на горячую изменения сможешь применить и быть уверенным, что оно не пойдет по пизде и все равно потребует полного перезапуска.
Аноним 15/02/24 Чтв 03:46:24 #512 №3049138 
>>3049135
>>3049133
Не, не будет работать. Эти сегменты по любому должны принадлежать только одному родителю. Не считая того, что там целый зоопарк иерархии, типа сегменты должны находиться в PathSegmentCollection, а те в PathFigureCollection, а та в Shape.

Какая же хрень ... как же задрали все эти велосипеды. Хочешь МVVM - сделай свою библиотеку Windows. Хочешь шейпы — сделай свою библиотеку Media. Удобно, пиздец.
Аноним 15/02/24 Чтв 05:59:25 #513 №3049154 
>>3049137
я пользуюсь - есть заметная разница один микрочеликовый плагин перезагрузить или все приложение+плагины.
хз что бы без хотрелоада делал, вскрылся бы наверное
Аноним 15/02/24 Чтв 12:25:03 #514 №3049383 
>>3049137
Есть задачи, с сильным вложением действий и каждый раз ждать 10 минут чтобы дойти до нужной точки, это вымораживает.
Аноним 15/02/24 Чтв 15:32:10 #515 №3049589 
Всем привет. Я тут делаю пагинацию и у меня возникла одна проблема. Я хочу сделать keyset пагинацию или что-то типо того, почитал вот это: https://learn.microsoft.com/ru-ru/ef/core/querying/pagination#keyset-pagination. Но проблема в том, что id у меня типа Guid. Что делать в таком случае? Добавлять ещё одно поле в бд как по мне полная хуйня? Или в с Guid в принципе невозможно сделать пагинацию такого типа
Аноним 15/02/24 Чтв 16:09:23 #516 №3049633 
>>3049589
keyset пагинация по факту и предназначена для работы со структурированными данными. Либо упорядочивай по guid-u (при генерации ключей например), либо по другому признаку. Если его нет, то вводи.
Вообще, в принципе, получать неупорядоченные данные из БД такое себе,

Но сразу говорю, что генерировать упорядоченные guid-ы такой себе способ. Спорно и не очень распространено. Просто по тому, что если тебе нужна упорядоченность по ключу, то проще взять какой-нибудь long и быстрее и эффект тот же.
Но упорядочивать по Id тоже плохая идея, он не для этого нужен.
Проще для этого (упорядочивания) временную метку использовать.
Аноним 15/02/24 Чтв 16:17:22 #517 №3049652 
>>3049633
Насколько я понял надо добавить какое-то поле long типа и по нему упорядочивать, правильно? Я ещё видел реализацию через DateTime
Аноним 15/02/24 Чтв 16:36:57 #518 №3049678 
>>3049652
Это зависит от того, как у тебя данные в БД вставляются. Если строго по одному, то DateTime норм способ. Не надо дополнительный sequence вводить, просто юзаешь DateTime.(Utc)Now при создании записи и все. Если же предполагается вставка пачками, тогда лучше использовать что-то отдельное с последовательностью.
Аноним 15/02/24 Чтв 16:43:01 #519 №3049694 
>>3049678
Понятно, спасибо.
Аноним 15/02/24 Чтв 18:09:36 #520 №3049932 
>>3049633
>Но упорядочивать по Id тоже плохая идея
Почему? Всегда так делал подводных не встречал.
Аноним 15/02/24 Чтв 20:21:39 #521 №3050149 
>>3049154
Попизди мне про перезагрузку плагинов средствами студийного релоада.
А с в контексте сервисов - там во-первых сразу x2 с какого-то хуя оно берет и разваливается к хуям.
Аноним 15/02/24 Чтв 20:23:36 #522 №3050153 
>>3049383
Про юнит и интеграционные тесты я так понимаю тебе не рассказывали...
Ну да. Ведь лучше хуевый хотрелоад, чем за 0,0000000000001 секунды оказаться в нужном месте с помощью тестов.
Аноним 15/02/24 Чтв 20:29:48 #523 №3050167 
>>3049589
Берешь, и как нормальный человек добавляешь: Created, который генерируется при вставке, по нему сортируешь, а дальше паггинируешь как хочешь.

Да. Как нормальный человек делаешь:
public abstract class BaseDbEntity {
public Guid Id { get; set; }
public DateTime Created {get; set;}
public DateTime Updated {get; set;}
public DateTime? Deleted {get; set;}
public bool IsDeleted {get;set;}
}
Аноним 15/02/24 Чтв 20:58:06 #524 №3050200 
>>3050153
Ой, ребенок, ты даже близко не представляешь что это. Я понимаю, что в рамках круда это не нужно, но просто не умничай, а то веет тупостью.
Как вы ламеры уже достали, про юнит тесты он рассказал, ну просто гений же.
Аноним 15/02/24 Чтв 21:39:52 #525 №3050247 
си шарп плохой язык
Аноним 15/02/24 Чтв 21:40:15 #526 №3050249 
>>3050167
IsDeleted не нужон
DateTime тоже раковая хуйня, в бд только с Offset
Аноним 15/02/24 Чтв 21:54:52 #527 №3050272 
>>3050249
Прочитал, что офсет медленный. Поэтому и пошёл что-то другое искать
Аноним 15/02/24 Чтв 22:02:36 #528 №3050295 
>>3050247
А какой лучше?
Аноним 15/02/24 Чтв 22:03:35 #529 №3050298 
>>3050295
Си решетка
Аноним 15/02/24 Чтв 22:31:51 #530 №3050359 
Сися-шарп - звучит гордо!
Аноним 15/02/24 Чтв 23:02:46 #531 №3050445 
>>3050295
ну великая Джава допустим
Аноним 15/02/24 Чтв 23:05:03 #532 №3050453 
>>3050445
Два кобола.
Аноним 15/02/24 Чтв 23:31:27 #533 №3050489 
>>3050445
Чем?
Аноним 15/02/24 Чтв 23:32:36 #534 №3050491 
>>3050489
Чем шарп.
Аноним 16/02/24 Птн 02:45:23 #535 №3050621 
Один метод, статический, принимает переменную через параметры.
Второй метод, не статический, обращается к свойству родительского класса.

В чем их различия с точки зрения аллокаций? Или аллокиции вызывает сам факт использования переменной и разницы нет никакой?
Аноним 16/02/24 Птн 02:55:24 #536 №3050623 
>>3050621
Посмотри в байткод
Аноним 16/02/24 Птн 04:50:24 #537 №3050628 
lyKfI9W9-1g.jpg
Какая же залупень, господи ...
Казалось бы, недавно ИТТ выяснили, что Freezable классы пукают событием Changed по любому поводу, и биндинги за каким-то хреном на этот Changed подписываются, хотя их никто не просил.

И что бы вы думали? Пытаюсь я, значит, забиндить класс PointCollection к ItemsControl.ItemsSource и хуюшки. Никакой реакции на изменение итемов коллекции. Событие Changed происходит, а обновление биндингов - нет.

Просто ссаный бардак. И вроде бы ты уже разобрался с ситуацией, вроде бы даже смирился с ней, и вот тебе на. Мне кажется, что мысли женщины последовательнее, чем ссаная впф отрыжка майкрософт.
Аноним 16/02/24 Птн 16:00:13 #538 №3051132 
>>3050628
какого изменения ты вообще ждешь?
ItemsSource следит за событиями обсервабле коллекции, а твой PointCollection их не производит не будучи этой самой обсервабле. Зачем тут то биндингу следить за фризабле - никому непостижимо.

это у тубя в голове (твой череп на фото???) чет не то, раз для тебя вообще норма фризабле коллекцию изнутри менять.
Аноним 16/02/24 Птн 21:12:20 #539 №3051591 
>>3051132
>их не производит не будучи этой самой обсервабле
Запускает событие Changed. И биндинг на этот Changed подписывается, это мы уже обсуждали.

>Зачем тут то биндингу следить за фризабле - никому непостижимо.
Вот я тоже самое писал, но тут сидел чел и доказывал обратное.

Заходишь ИТТ и получаешь примерно такой диалог:
— Нахера биндинги подписываются на событие Changed содержимого в свойстве?
— Ну это же фризабле, ты что дурак?

Через неделю:
— Почему биндинги не подписываются на событие Changed?
— А нахера им подписываться, ты что дурак?

>раз для тебя вообще норма фризабле коллекцию изнутри менять.
Мне надо добавить/убрать точки кривой. Как по твоему это еще делается?
Аноним 16/02/24 Птн 21:43:19 #540 №3051640 
>>3051591
Сеттер фризибле свойства разве возможно вызвать? Ну типа чтобы событие сработало, поток должен провалиться внутрь сетера и дернуть делегат. Если этого в происходит, то и хендлеры никто и никогда не вызывает.

Если я правильно понимаю о чем идет речь.
Аноним 16/02/24 Птн 21:56:04 #541 №3051669 
Вопрос с подвохой.

Есть код:
// SomeClass.cs
while(true){
Thread.Sleep(1000);
MyEvent(this, EventArgs.Empty);
}


// SomeOtherClass.cs

for(int i = 0; i < 1000; i++){
new Thread((_) => someClass.MyEvent+= (_, _) => Console.WriteLine(Thread.CurrentThread.Name)).Start();
}

Что будет выведено в консоль?
Аноним 16/02/24 Птн 22:03:49 #542 №3051685 
>>3051640
Ты путаешь Freezable класс с режимом IsFrozen. Если IsFrozen == true, то менять содержимое не сможешь, но если false, то можешь. Первое устанавливается, если ты инициализируешь класс в xaml, к примеру.

>Если этого в происходит, то и хендлеры никто и никогда не вызывает.
Я повторяюсь. Событие Changed происходит.
Раньше, когда я демонстрировал случай с ValueConverters, биндинги реагировали на это событие, вопреки логике т.к. биндингам нет дела до содержимого свойства, их интересует событие PropertyChanged INPC класса, в котором это свойство находится.

Короче происходит какая-то аномальная дичь, объяснение которой у меня нет, а хотелось бы.
Аноним 16/02/24 Птн 22:58:32 #543 №3051751 
>>3051685
биндингам нет дела. а вот контролам есть
1 ты меняешь внутри фризабле что то и получается событие Changed
Опустим глупость подхода менять иммутабельные по семантике коллекции и оставим их психиатрам будущего
2 биндингу плевать на то, что ссылка осталась прежней, он вызывает подписку в контролах "значениетамченжед"
3 itemsControl вызывает мфк view = CollectionViewSource.GetDefaultCollectionView для нового source
Который, как известно, вернет одну и ту же ссылку для одной и той же коллекции
4 и далее делается проверка
if (_collectionView == view)
return;
5 занавес.
Аноним 16/02/24 Птн 23:14:24 #544 №3051759 
>>3051669
Братиш, зачем тебе это знать?
Аноним 17/02/24 Суб 00:06:20 #545 №3051795 
>>3051751
>Опустим глупость подхода менять иммутабельные по семантике коллекции
А как? Как менять цвет кисти, к примеру? Как менять трансформации? Да любой контрол наследует фризабле.

>2 биндингу плевать на то, что ссылка осталась прежней, он вызывает подписку в контролах "значениетамченжед"
И что? Мой пример с биндингом показал, что конвертер срабатывает даже если ссылка на объект не изменилась. Причем это тоже была коллекция, только она называлась GradientStopCollection. Для понимания ситуации, есть свойство:

public GradientStopCollection MyGradientStops
{
. . .get => _gradientStops;
. . .set {
. . . . . . _gradientStops = value;
. . . . . .OnPropertyChanged(nameof(MyGradientStops));
}
}

Я привязываюсь к этому свойству и туда же цепляю ValueConverter.
GradientStopCollection содержит итемы GradientStop, а те имеют свойства Offset и Color.
Так вот, я меняю свойство Offset одного из итемов GradientStopCollection, и срабатывает метод Convert(). Почему? Экземпляр в MyGradientStops не изменился, а значит не было вызвано событие OnPropertyChanged, но конвертер отработал.

Вероятно конвертер или контрол подписались на событие GradientStopCollection.Changed. Зачем-то. Но на PointCollection.Changed подписываться не хотят.
Аноним 17/02/24 Суб 00:21:36 #546 №3051808 
>>3051795
>И что? Мой пример с биндингом показал, что конвертер
Да епрст. Конвертер срабатывает потому что
1 биндинг видит твое Changed и орет об этом
2 значение вычитывается потому что собственно биндинг его и вычитывает чтобы передать в ЗначениеТамЧенжед в контроле
3 контрол видит что ссылка на новое значение равна старой и ничего не делает
Аноним 17/02/24 Суб 00:22:00 #547 №3051809 
>>3051808
2 и поэтому срабатывает конвертер
Аноним 17/02/24 Суб 15:23:31 #548 №3052125 
Посоны, дайте пример задачи или реализации или какой-то хуйни, где можно попрактиковать многопоточность (но не просто асинками)
Аноним 17/02/24 Суб 17:03:19 #549 №3052409 
>>3051808
Ах вот оно че. Понял.
Аноним 17/02/24 Суб 17:17:46 #550 №3052439 
>>3052125
Напиши какой нибудь 3д-рендер с трассировкой лучей, или распарси книгу. В общем любая задача, где есть куча независимых друг от друга данных.

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

Даже туториалы этим страдают — там всегда описывается идеальный случай в вакууме.
Аноним 17/02/24 Суб 18:24:49 #551 №3052574 
изображение.png
Где можно почитать поподробнее про код с dockerfile'а? Почему нельзя сразу же скопировать все файлы в папку? И почему используется build и restore, если publish по сути выполняет те же функции?
Вообще стоит влезать в подробности, если ты знаешь, как работает env и композник?
Аноним 17/02/24 Суб 18:38:54 #552 №3052584 
>>3052574
В доке докера как ни странно. А всё что ты перечислил относится к кэшированию. Если начиная с первого шага контекст и команды совпадают то шаги будут взяты из кэша до первого расхождения. Потому делается всё что бы пакеты и зависимости переиспользовались.
В целом тот докерфайл что у тебя на скрине вроде и работает как должен но очень сомнительный
Аноним 18/02/24 Вск 05:49:47 #553 №3053369 
реально ли на шарпаче написать что-то типа сервиса, которое будет дергать удаленное апи яндекса, а потом трансформировать данные и сливать допустим в какие-нибудь гуглдоки?
если да, то где про такое почитать можно?
Аноним 18/02/24 Вск 06:01:12 #554 №3053374 
>>3053369
Нереально, конечно, ведь шарп не полон по Тьюрингу.
Чë за странные вопросы?
Аноним 18/02/24 Вск 07:57:48 #555 №3053390 
>>3053369
Ну гуглишь готовые либы на шарпе для гугла и яндекса, если их нет или не нравятся пишешь свои, склеиваешь костылями.
Тупой вопрос уровня "а как какоть"
Аноним 18/02/24 Вск 08:48:07 #556 №3053395 
>>3053369
>как написать веб сервис на C#
>как вызвать веб апи на C#
>ооп С#
>google docs C#
https://www.google.com
Аноним 18/02/24 Вск 10:11:02 #557 №3053427 
К меня есть пачка wsdl.
Как мне сгенерировать на их основе веб-приложение?

На жаве просто при создании проекта: генерейт веб-сервис фром WSDL

Да, не ради любопытства или чтобы доебаться спрашиваю. Ну, вот клиент предоставил WSDL дохуища, говорит - это апи которое от вас требуется, чтобы интегрироваться. И я начал руками это говно реализовывать, понял что дохлый номер, не предназначена эта говнина чтобы руками это делать.
Но хуйнуть сервис на жаве - наш техлид не позволяет, кричит, что надо все на .NET делать, а то разведем так зоопарк и вообще.
Аноним 18/02/24 Вск 10:49:03 #558 №3053449 
>>3052574
> Почему нельзя сразу же скопировать все файлы в папку?
Можно. Пизды получишь от админов билд-сервера только через пару дней и справку о профнепригодности.
Аноним 18/02/24 Вск 14:05:22 #559 №3053540 
2024-02-1814-02-24.png
Смотрю на исходники ArgumentOutOfRangeException, там дохрена методов публичных статичных методов:
https://source.dot.net/#System.Private.CoreLib/src/libraries/System.Private.CoreLib/src/System/ArgumentOutOfRangeException.cs,2975f0aa875d4a32

Но когда я использую класс System.ArgumentOutOfRangeException на практике, то мне выдает очень скромный список доступных методов (пикрил).
Аноним 18/02/24 Вск 14:13:54 #560 №3053547 
>>3053540
>.NET 8,9
Ясно
Аноним 18/02/24 Вск 20:37:48 #561 №3053946 
Как теперь во феншую делать фоновые нитки с какой нибудь долгой операцией? Или всё по старому - просто запускаешь тред или лонг ран таск?
Аноним 18/02/24 Вск 21:07:34 #562 №3053979 
>>3053946
Просто таска как повсеместно в аспе
Аноним 18/02/24 Вск 21:08:17 #563 №3053980 
>>3053946
>с какой нибудь долгой операцией
Зависит от того насколько требовательная операция.

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


Если операции слишком требовательные, чтобы работать вместе с другими, то в этом случае используется Thread.
Аноним 18/02/24 Вск 21:11:49 #564 №3053981 
>>3053980
Не понял, асинк же это про другое, когда нужно линейное выполнение асинхронных операций без блокировки UI нити. Мне же надо что бы крутился постоянный фоновый процесс, грубо говоря сервис.
Аноним 18/02/24 Вск 21:15:39 #565 №3053982 
>>3053981
Таски это абстракция над тредами, да они могут в одном треде исполнятся, но могут и в разных
Аноним 18/02/24 Вск 21:33:25 #566 №3053992 
>>3053946
Если таких операций немного - тред лучшее решение. Особенно, если там никаких доступов к разделяемым ресурсам.
Аноним 18/02/24 Вск 21:43:34 #567 №3053999 
>>3053992
Тред это же совсем каменный век. Обычно рекомендуют Task.Run(... LongrRunTask)
Аноним 18/02/24 Вск 22:21:36 #568 №3054009 
.png
Допустим, есть код типа прикриплейд.
Большую часть времени - все вроде ок работает.
НО. Бывают случаи, когда возросла нагрузка, и написали дохуя всего. Запустилось дохуя этих вот тасок. Тредпул - сразу в небеса. Процессор - тоже охуевате. Там еще эксепшины в части тасок понлетели - и все страшно вообще стало.

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

Я вот ради интереса заглянул в DotNetty и там какой-то свой эвент-луп, какой-то свой тред экзекутер. И поведение как раз то что нужно мне. Но там оно так страшно и по жававским канонам написано, что я с трудом понимаю, что там за что отвечает и как оно вообще работает. Может быть где-то есть другие примеры как сделать управляемой обработку каких-то потоковых задач, которые еще и асинхронные, а надо чтобы они все как-бы конкурентно обрабатывались нормально.
Аноним 19/02/24 Пнд 07:48:18 #569 №3054118 
>>3054009
>Запустилось дохуя этих вот тасок
ну запустилось и уперлось в тредпул. Ну да для И/О задач там свои настройки

но чем тредпул отличается от своего екзекутора то

свой нужен для других задач когда ты хочешь точно контролить выполнение чего то этакого чего пулу не доверить. Что то долгое или альтернатива контексту синхронизации.
Аноним 19/02/24 Пнд 19:36:53 #570 №3054943 
Я сегодня совершил страшный грех, шарпаны.
В общем. Надо было срочно сделать хуевину, для дебага и диагностики работы.
И я СДЕЛАЛ СТАТИЧЕСКИЙ КЛАСС, и в нужных мне местах - просто дергаю нужные мне методы, которые наполняют диагностической информацией всю мою хуйню.
Как мне дальше жить с этим?
Аноним 19/02/24 Пнд 19:45:18 #571 №3054957 
>>3054943
И чë? Я по дефолту пишу статические классы. Нестатические пишу только тогда, когда без них вообще никак не обойтись.
Аноним 19/02/24 Пнд 19:50:28 #572 №3054965 
>>3054957
>>3054943
А мог потратить пару минут и ебнуть синглтон, выглядит не так всрато
Аноним 19/02/24 Пнд 19:52:12 #573 №3054970 
>>3054965
Статическое классы выглядят всрато только потому, что все себя в этом убедили.
Аноним 19/02/24 Пнд 19:53:58 #574 №3054974 
>>3054965
Мне сказали: СРОЧНА, НАДО ДИАГНОСТИКУ.
Если делать синглтон классический - разницы особой не было бы.
А если делать то что на DI я бы все еще прокидывал бы в конструкторы этот самый синглтон, там 5 лет разработки шизом, который все через конструкторы передает.
Аноним 19/02/24 Пнд 19:58:19 #575 №3054982 
>>3054974
> Если делать синглтон классический - разницы особой не было бы.
Ну так и сделал бы.
У нас впф апа, так там никаких новомодных di. Только папочка с полутора сотней синглтонов половина дублирует функционал, потому что проще написать с нуля, чем разбираться в уже написанном
Аноним 19/02/24 Пнд 20:20:52 #576 №3055009 
>>3054974
велосипеды изобретаешь
https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.DiagnosticSource/src/DiagnosticSourceUsersGuide.md
Аноним 19/02/24 Пнд 20:31:48 #577 №3055023 
>>3054982
>У нас впф апа, так там никаких новомодных di.
и правильно
имею фреймворк с тотальными нарушениями принципов
1 мультиоконность, (в жопу однооконные приложения по типу телеграм - кстати даже они сдались и дали возможность вынести чат в окно ))))
2 при этом диалоговые окна принадлежат к конкретно окну кто родитель, а не блочит все окна
3 DI использую от майков, но использую его на уровне вьюмоделей как сервислокатор (или фабрику)
4 везде лайфтаймы. никаких weak, только !!!СТРОНГ!!!.Вплетено в основу всего. Все, что куда то подписывается, обязано разобраться в каком лайфтаме оно живет.
окна и контролы тоже завязаны на лайфтаймы (хотя WPF в этом отношении брррр со своими "а тут у нас Unloaded не вызывается ха ха")
5 Везде протаскивается Context (как в андроиде) который определяет контекст вьюмодели и потому нет никакой проблемы вызвать диалоговое окно без бубна "а как найти окно родителя". При этом оно конечно не завязано на сборку вьюх ибо MVVM не должна иметь этой зависимости.

и точно такой же фреймворк где я пытался делать по правилам - aggregation root, не использовать di как сервис локатор, вьюмодель живет без контекста

Угадайте какой используется для реальной работы, а какой заброшен нахрен
А потому что пока там в виларибо всякие там чистый код мудрят, в вилабаджо уже на заработанные деньги устроили оргию
Аноним 19/02/24 Пнд 20:44:36 #578 №3055036 
>>3055009
Диагностика нужна такая, чтобы ее мог проанализировать не только я или другой программист, а условный Петрович и принял решение.
В духе:
- Петрович, тут пришел плохой пакет, это не сервер сломался, а кто-то бяку шлет.
- Петрович, там у тебя место на диске заканчивается, ты это, сделай чего-нибудь, а то все наебнется
- Петрович, кто-то в БД полез кривыми руками и поломал справочники, запусти-ка восстановление справочников
Аноним 20/02/24 Втр 00:42:38 #579 №3055388 
Тут есть настройка для студии чтобы она по умолчанию file-scoped неймспейсы делала?
Аноним 20/02/24 Втр 00:45:25 #580 №3055390 
>>3055388
С решарпером дефолтное поведение
Аноним 20/02/24 Втр 09:58:11 #581 №3055615 
>>3055388
в .editorconfig пропиши в секции [*.cs] строку:

dotnet_sort_system_directives_first = true
Аноним 20/02/24 Втр 09:58:48 #582 №3055617 
>>3055388
>>3055615
Сорян, перепутал. Строку:

csharp_style_namespace_declarations = file_scoped
Аноним 20/02/24 Втр 13:13:13 #583 №3055871 
>>3055617
Спасибо.
Аноним 20/02/24 Втр 16:57:10 #584 №3056257 
>>3053981
>Не понял, асинк же это про другое
Знал бы я про что ты ведешь речь, ведь задача не описана.

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

Если у тебя сервис, тогда вероятно уместнее использовать треды.
Аноним 20/02/24 Втр 17:12:21 #585 №3056275 
Screenshot 2024-02-17 155311.png
Имею 2 года опыта на шарпах и хочу уже устраиваться в биг компанию на пару лет чтобы иметь хорошую строчку в резюме + интересно поработать в большой компании а из больших компаний на выбор только озон по сути
Везде гошка нужна либо быть помидором на шарпах
Аноним 20/02/24 Втр 17:38:47 #586 №3056313 
>>3056275
Я с годом опыта на шарпах смог устроиться в большой банк писать всякий бэкэнд на шарпах на мидлплюсплюс позицию. Правда у меня до этого было лет 10 всякого байтоебства на низкоуровневой дрисне.
Аноним 20/02/24 Втр 17:44:42 #587 №3056320 
>>3056313
С таким бэкграундом ты и на го и на питон смог бы устроиться без проблем имхо

А какой цвет банка если не секрет?
Аноним 20/02/24 Втр 18:46:25 #588 №3056384 
>>3056320
>А какой цвет банка если не секрет?
Секрет. Топ-6 РФ, не зеленый.
Аноним 20/02/24 Втр 19:01:41 #589 №3056418 
>>3056384
Мда, моя галера только в топ 15
Аноним 20/02/24 Втр 20:28:24 #590 №3056589 
.png
>>3055388
Аноним 20/02/24 Втр 20:29:30 #591 №3056593 
Объясните, как майки кодят тот же ASP, если студия с ума сходит, если открыть в ней такого размера проект?
Аноним 20/02/24 Втр 21:05:08 #592 №3056639 
>>3056593
Просто у них нормальные пакарни, а не нищенские ноуты за 50к, как у тебя.
Аноним 20/02/24 Втр 21:12:48 #593 №3056645 
У меня один вопрос. Он исходит из необходимости использования OpenGL. И вот, на Си, понятное дело - все летает, На Яве более менее, но...

Почему OpenTK такое кривое тормозное говнище?
Аноним 20/02/24 Втр 21:22:31 #594 №3056659 
.png
>>3056639
Какого рода пекарня нужна-то?
Что не презентация майков - у них макбуки позапрошлого поколения.
Аноним 20/02/24 Втр 21:29:05 #595 №3056662 
>>3056645
Попробуй ансейф.
Аноним 20/02/24 Втр 21:55:27 #596 №3056705 
>>3056593
https://learn.microsoft.com/en-us/visualstudio/ide/filtered-solutions
Аноним 21/02/24 Срд 16:37:36 #597 №3058000 
Новичок в треде. Скиньте покурить чего-нибудь по теме замерке производительности участков кода.
Аноним 21/02/24 Срд 16:49:44 #598 №3058019 
>>3058000
Benchmarkdotnet
Opentelemetry
Две разных штуки но подходят под твои слова
Аноним 21/02/24 Срд 20:49:44 #599 №3058339 
Посоны, как разгрузить сбор статистики?

Вот сейчас у меня вот так:

Task<IActionResult> OnSendMessage(Message msg)
{
await _messageHub.Broadcast(HttpContext.User, msg);
await _statistcQueue.Enque(HttpContext.User, msg);
return Ok();
}

И с этим как-бы проблемы.
Во-первых. Даже не смотря на то что статистика сама обрабатывается в фоне - все равно какое-то время надо подождать, пока в очередь можно записать.
Во-вторых. Если много статистики - у меня под капотом - пулл обработчиков начинает раздуваться, и в определенный момент - NpgSql - начинает матом ругаться, что больше нельзя выделить подключения.
В-третьих. Судя по профилированию - 20% всего времени приложения - занимается обработкой этой статистики, и если я симулирую активную хуйню с рассылкой сообщений - видно что тормозит все это дело, и эти 20% были бы не лишними.
Аноним 21/02/24 Срд 21:01:51 #600 №3058360 
Как в Avalonia по координатам нажатия мыши получить сам контрол?
Есть кастомный составной контрол и надо получить контрол как параметр при нажатии на него. Такое чувство что фреймворк ппц сырой.
Аноним 21/02/24 Срд 22:24:04 #601 №3058515 
>>3058339
1. зачем рассылка в хаб?
2. запускай заливку статы в бд максимум в 2 потока раз в 30сек или когда будет минимум 1к записей в очереди/баге
3. вставляй батчами по 1-2к записей

Я если чество вообще не представляю как ты статой смог выбрать весь пул коннектов. Для твоей задачи нужно бэкграйнд воркер сделать который будет заниматься разбором очереди
Аноним 21/02/24 Срд 22:37:03 #602 №3058549 
>>3058515
> Я если чество вообще не представляю как ты статой смог выбрать весь пул коннектов
Ну. Смотри.
Вот мой тест:

HttpCleint http = new HttpClient();

var tasks = Enumerable.Range(0, 10000)
.Select(async (x) =>
{
await Login(http, x);
while(true){
await SendMessage(http, x, new Message{ body= $"Hello from {x}"});
}
});

await Task.WhenAll();


Вот код который обрабатывает очередь:

async Task Run(CancellationToken stopToken)
{

while(stopToken.IsCancellationRequired)
{

// ждем пока в очереди что-то появится
var workItem = await _queue.Dequeue();

// берем из пула ворекра (в случае если пул пустой - создаем нового)
var worker = _workerPool.GetWorker();
try
{
// тут будет создан контекст для подключения к pgSql
// выполнена вставка и сохранение
// освобожден контекст
await worker.ProcessWokrItem(workItem);
}
// возвращаем воркера
finaly{ _workerPool.Return(worker)}

}
}
Аноним 21/02/24 Срд 22:41:59 #603 №3058566 
>>3058360
по каким еще координатам?
лови клик на контроле и всего делов
роутедевент для чего придумали.
Аноним 21/02/24 Срд 22:43:01 #604 №3058569 
.png
>>3058549
Балин. Неправильно написал код который обрабатывает очередь.
Вот правильный.
Аноним 21/02/24 Срд 22:44:25 #605 №3058572 
>>3058569
и это неправильный. где await у GetWorker()
Аноним 21/02/24 Срд 22:46:41 #606 №3058575 
>>3058569
Я специально не жду, чтобы очередь не забивалась... Типа при большой нагрузке - там она разбухает и оператива в небо улетает...
Аноним 21/02/24 Срд 22:46:43 #607 №3058576 
>>3058569
Зачем тебе пул воркеров? Тебе одного хватит который будет здоровыми батчами инсертить. Если потом будет переезд на кликхаус то всё к этому и сведётся т.к. кх ненавидит инсерты по 1 записи.
И не захватывай ctx.User полностью, бери из него только то что нужно, что бы гц мог собрать всё а в памяти оставались только записи статы которые можно хоть десятками тысяч хранить в памяти без распухания кучи
Оверинжинеринг.
Аноним 21/02/24 Срд 22:49:28 #608 №3058577 
>>3058576
> Зачем тебе пул воркеров
Чтобы если динамически нагрузка возрастала - больше обработать можно было... И при этом не тратить время на создание нового воркера каждый раз.
Аноним 21/02/24 Срд 22:50:29 #609 №3058579 
>>3058577
Ну удачи. Я по крайней мере свой подход не с потолка взял
Аноним 21/02/24 Срд 22:54:19 #610 №3058584 
>>3058579
Ну. Я пробовал батчить кстати.
И вот с батчами - сложность в том, что непонятно, а какой размер-то должен быть, чтобы мы решили: ПОРА таки в БД это отправлять.
Плюс, а если у нас наоборот - нагрузка медленная - эта статистика не наберется на батч. Делать хитрую логику: ну, если прошло 5 минут с последней вставки - то так и быть - вставляем что есть, а если не прошло, то вставляем при достижении лимита - мне как-то не нравится.
Аноним 21/02/24 Срд 22:58:04 #611 №3058589 
>>3058584
Чел, у тебя буквально один цикл в котором

если с прошлой вставки больше 120сек или в очереди больше 5000к сообщний
то пишем
спим 1 сек

И скажи эта логика сложнее всей той ненадёжной жрущей ебалы которую ты защищаешь?
Аноним 21/02/24 Срд 23:01:49 #612 №3058594 
>>3058589
Я не защищаю же. Я ж потому и спросил, что возникают проблемы если нагрузка дюже большая.
Просто отвечал на вопрос: "Зачем тебе пул воркеров"
Ладно. МБ правда, сделаю вот так вот. И заменю каналы на обычную конкурентную очередь.
Аноним 22/02/24 Чтв 11:25:26 #613 №3058882 
Посоны, 5 лет пишу на шарпе. Делаю всякие микросервисы, допилисывал СРМ-ки, интеграцию, погружался в юнити. Короче, мне с дот нетом удобно.

Хочу в мышинное обучение. Знаю, что самым распространённым является богомерзкий змей, но есть ещё прекрасный, как я слышал, ML.Net. Т.е. я не хочу уходить из инфраструктуры и синтаксиса дотнета, но понимаю, что для питона много всего, а для МЛ Нет нет нихуя.

Что делать?
Аноним 22/02/24 Чтв 11:29:14 #614 №3058886 
>>3058882
В питон идти, расширять кругозор. Моё имхо.
Аноним 22/02/24 Чтв 12:18:22 #615 №3058940 
У меня обратная ситуация. 3 года пердолинга на питоне, пришел архитектор, решили всё под один стек привести, мою часть с питона на шарп переписать. Стоит переквалифицироваться или искать другой проект/работу?
Аноним 22/02/24 Чтв 16:05:26 #616 №3059325 
>>3058940
Какие у тебя претензии к шарпу?
Аноним 22/02/24 Чтв 17:43:06 #617 №3059443 
ML на питоне пишут, потому что на других языках не умеют. Это же не программисты, а дата саентисты, они не умеют программировать.
Ну теперь там инфраструктура, конечно. Это с положительной обратной связью система.
Аноним 22/02/24 Чтв 20:26:00 #618 №3059669 
>>3056593
>>3056659
А что за проблема?? Только вкатываться начал. не пугайте.
Аноним 22/02/24 Чтв 22:47:00 #619 №3059866 
>>3059325
К языку претензий нет, просто не хочется с 0 начинать.
Аноним 22/02/24 Чтв 23:31:01 #620 №3059887 
>>3058940
Выкинуть архитектора.
Переписуны это зло и мракобесие.
Аноним 23/02/24 Птн 04:27:02 #621 №3059965 
>>3058882
Норм, я на неделе пощупал мл.нет без особых знаний по мл. Гайды на мсдн нормальные. Собрал модель мультиклассификатора, обучал на рабочих данных. Показал начальству и объяснил, те кипятком ссали.
Сказали выделять рабочее время и допиливать.
Заебумба.
Аноним 23/02/24 Птн 10:19:52 #622 №3060058 
.png
>>3059669
Проблем - куча.
Вот самый простой пример. Студия не может понять, че же за типы такие. Хотя у меня включен анализ всех проектов в решении.
Перестает работать переход к определению и реализации.
Не дай бог ты решишь переименовать какое-то свойство, все, потом бегай по всему коду и руками переименовывай.

Но да. Надо уточнить, что это вот в таких больших солюшинах. На работе всего 100 проектов в солюшине и пекарня с i5 и 16 гигами вроде пока справляется.
Если ты только вкатываешься, проблемы у тебя не скоро возникнут.
Вообще, по интервью бывших разрабов с гугла - у них там еще хуже, и потому какие-то ебанутые решения придумывают, но чтобы не врать - не буду пытаться вспомнить, че они там напридумывали, чтобы на макбуках-хромбуках с этим работать.
Аноним 23/02/24 Птн 12:39:02 #623 №3060200 
>>3060058
Тебе же дали ответ как майки со своими репами работают что бы разом всё не прогружать
Аноним 23/02/24 Птн 12:44:11 #624 №3060207 
>>3060200
Ну, мне ответ-то дали.
А я уже отвечаю на вопрос - какие собственно проблемы.
Ну и да. Все равно. А как мне, если я не разраб из майков-то понять вообще, че мне надо выгрузить, че мне не надо? Надо не вот эти вот обходные пути придумывать, а какую-то ленивую подгрузку делать. Типа вот я открыл кестрелл, оно видит, что кестрелл - ссылается на вот это. Это подгрузил. Пока я не полез туда - не подгружать остальное. Как полез - подгружать. Было бы намного лучше я думаю. А как это реализовать - пусть разрабы студии придумывают.
Аноним 23/02/24 Птн 12:52:34 #625 №3060218 
>>3060207
Чел, там и так ленивая загрузка есть.
1. В репе везде разложены пресеты что нужно грузить а что не нужно
2. Есть волшебная кнопочка загрузить зависимости проекта
Аноним 23/02/24 Птн 12:59:31 #626 №3060221 
.png
>>3060218
Вот, я даже твой slnf нашел для кестрела. И жмакнул на это "загрузить зависимости проекта"
Не работает.
Че дальше?
Аноним 23/02/24 Птн 14:02:41 #627 №3060313 
.png
Хм. Хмммм.
Я тут думаю вот над чем.
А как скейлить монолит со стейтфулл протоколом? Не http.

Пока что я вот что придумал только.

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

Но я тут вижу проблему. А если хост - упадет? Как его скейлить?
Аноним 23/02/24 Птн 14:22:46 #628 №3060339 
image.png
>>3060221
Хуй знает в чём твои проблемы. Просто прошёлся по мдшке с инфой как начать разработку и всё работает (кроме решарпера который увидел фантомные ошибки, но оставим это на его совести)
Аноним 23/02/24 Птн 16:28:24 #629 №3060551 
>>3060058
>На работе всего 100 проектов в солюшине
Монорепы - зло.
Аноним 23/02/24 Птн 16:41:26 #630 №3060577 
>>3060551
Ты не представляешь, насколько я согласен с этим.
Но тут чисто организационный момент. Руководство сеет шизу, что надо для каждого репозитория - писать отдельное письмо султану и просить доступы. к конкретному репозиторию, поясняя откуда ты узнал про этот репозиторий, зачем тебе доступ и т.д.. Соответственно, уже разрабы - не хотят в этой хуйне участвовать и начинают делать в духе: "Otdel1Repo" внутри которого все проекты, а в проектах уже суперсолюшины.
Аноним 23/02/24 Птн 17:06:17 #631 №3060626 
>>3060577
>Руководство
Согласен - шиза (вангую, что какая-то продуктовая контора, где владелец считает свой продукт самым-самым и трясется, что конкуренты украдут его "уникальные" разработки). Но разрабы тоже лопухи, что повелись и решили это таким способом. Можно ж было либо по группам проекты/права раскидывать, ну или напридумывать шаблонов для запросов.
Аноним 24/02/24 Суб 11:24:31 #632 №3061615 
Есть интерфейс, есть два класса - враппера, которые этот интерфейс должны реализовывать. Проблема в том, что у внутренних классов два метода, которые должны быть обернуты в один и тот же метод интерфейса, принимают разные аргументы. Как быть с этим?
Аноним 24/02/24 Суб 11:31:31 #633 №3061618 
>>3061615
Нихуя не понял, но есть перегрузки и явная реализация
Аноним 24/02/24 Суб 16:17:53 #634 №3061851 
>>3061615
>принимают разные аргументы
Перегрузка, не?
Аноним 24/02/24 Суб 18:35:33 #635 №3062060 
image.png
image.png
Почему вывод не "1 2 3"?
Аноним 24/02/24 Суб 18:36:19 #636 №3062064 
Смотрите. Есть код вида:

static object _syncRoot = new object();

void OnEvent(Context ctx)
{

lock(_syncRoot){
if(!_globaContext.HasAnyOtherUser(ctx.BoundResource)){
_globalContext.BindResourceToContext(ctx, ctx.BoundResource);
}
}
}

void OnApplicationComplete(Context ctx){
lock(_syncRoot){
if(_globacContext.HasAnyOtherUser(ctx, ctx.BoundResource)){

_globalContext.FreeResource(ctx);

}
}
}

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

В общем. Из-за этого начинается ужас страшный.
И я не знаю как решить эту проблему на самом деле потокобезопасно.
Единственный костыль, что я придумал - вынести это вот выделение ресурса - в собственный поток обработки, который в бесконечном цикле бегает по объектам, если остались объекты, которым какие-то неуправляемые ресурсы нужны - то не удаляем, если не остались - удаляем. А если есть те, кому не дали еще этот ресурс - создадим и дадим. Но это какая-то шляпа если честно. А как иначе - я ХЗ.
Аноним 24/02/24 Суб 18:44:04 #637 №3062067 
>>3062060
Точнее, 0 1 2
Аноним 24/02/24 Суб 18:47:12 #638 №3062071 
>>3062060
Захват переменной. Решарпер/идея тебе бы сразу по рукам надавали за такое
Аноним 24/02/24 Суб 18:59:22 #639 №3062083 
>>3062060
Потому что майки - пидорасы и не додумались дать возможность явно указать - хочешь захыватывать ты по ссылки или по значению. Нет. Надо спрятать, надо чтобы было неявно, надо, чтобы ты как ебан - делал фактории лямбд.
Аноним 24/02/24 Суб 19:44:33 #640 №3062162 
.png
>>3062064
В общем. Для наглядности накидал пример в студии.
Аноним 25/02/24 Вск 19:10:11 #641 №3063273 
image.png
image.png
А как тогда проверить 0.1 + 0.2 == 0.3?
Округлить сначала?
Аноним 25/02/24 Вск 19:17:22 #642 №3063277 
>>3063273
Другое тип чисел юзай который работает в 10чной системе
Аноним 25/02/24 Вск 19:21:15 #643 №3063279 
Почему на мои вопросики не отвечают? Вроде раньше отвечали, а тут - чет прям не отвечают(
>>3062162
Аноним 25/02/24 Вск 19:23:14 #644 №3063284 
>>3063273
Перевести до целых чисел (умножив на ту точно которая нужна,
в данном случае на 10), это проблема IEEE 754 для всех языков.
Аноним 25/02/24 Вск 19:29:22 #645 №3063292 
>>3063273
Самый лучший способ - не использовать в принципе числа с плавающей точкой.
Либо целые, либо свой тип с фиксированной точкой.
Аноним 25/02/24 Вск 19:38:37 #646 №3063300 
>>3063273
>А как тогда
1) Сравнивать всегда по диапазону с нужной точностью (больше-меньше)
2) Округлять до нужной точности с переводом в целый тип
3) Не использовать float . Очень часто те же бабки, если не подразумевается всяких рассчетов с ними кроме суммирования, просто хранятся в формате int*100.
Аноним 25/02/24 Вск 19:45:07 #647 №3063307 
>>3063273
> А как тогда проверить
У тебя во второй пикче ответ написан.
Взять некое минимальное число, которое будет символизировать предел точности, назвать его греческой буквой Эпсилон.
Или взять искаропки предоставляемый средой https://learn.microsoft.com/ru-ru/dotnet/api/system.double.epsilon?view=net-8.0

Вместо сравнения двух даблов, ты вычитаешь один из другого, берешь абсолютное значение (отбрасываешь минус если есть) и проверяешь больше ли это чем эпсилон? Если это больше эпсилона, то два дабла не равны, иначе равны.
Аноним 25/02/24 Вск 20:50:55 #648 №3063452 
>>3063273
Если тебе надо, чтобы 0.1 + 0.2 было равно 0.3, используй decimal.
Аноним 25/02/24 Вск 22:49:40 #649 №3063599 
>>3063277
>>3063284
>>3063292
>>3063300
>>3063307
>>3063452
Спасибо



>>3063292
А фиксированная точка это у каких типов?
>>3063277
> тип чисел юзай который работает в 10чной системе
Это какая?


Я нуб просто, даже не джун пока
Аноним 26/02/24 Пнд 12:54:44 #650 №3064177 
>>3063599
> А фиксированная точка это у каких типов?
Раньше были типы типа денег, с фиксированными двумя разрядами после точки, но в шарпе денежный тип decimal тоже с плавающей. Не знаю, что там имелось ввиду, о чём тот анон говорит.
мимоджун
Аноним 26/02/24 Пнд 13:19:25 #651 №3064213 
>>3064177
>>3063599
Сорт оф структура внутри которой два целочисленных типа. Один для дробной, другой для целой.
Чем то похоже на бигинт по концепции кастомного числового типа

мимо
Аноним 26/02/24 Пнд 13:22:35 #652 №3064218 
>>3064177
Просто берешь без задней мысли умножаешь количество денег на 100 и кастишь в int64, имея всегда в уме, что последние две цифры это копейки/центы/пенсы и т.д. В тех редких кейсах когда точность роляет или нужны хитрые бухгалтерские округления, кастишь к decimal, делишь на 100, вычисляешь и потом обратно.
Главное int32 не бери - точно не хватит.
Аноним 26/02/24 Пнд 13:37:51 #653 №3064241 
1708943870023.png
>>3063307
> Или взять искаропки
Искаробочный ЕПС слишком мал. Лучше делать свой, под свои задачи. Пикрелейтед.
Аноним 26/02/24 Пнд 14:27:37 #654 №3064328 
>>3001731
> Там XAML, если от него не тошнит, то норм.
Меня тоже от хамла тошнит. Посоветуйте кроссплатформенный UI фреймворк для дотнет фреймворка, чтобы я мог делать фронт пока делаю бэк?
Аноним 26/02/24 Пнд 16:55:35 #655 №3064497 
1570832994416.png
>>3064241
>как даблы правильно сравнивать.
Ты проиграл еще здесь: x2 - x1
Аноним 26/02/24 Пнд 17:47:45 #656 №3064575 
>>3064497
Не я проиграл, а например вот они: https://it.wikireading.ru/29415
А чо? А в смысле?
Аноним 26/02/24 Пнд 18:19:01 #657 №3064663 
>>3064575
Не знаю где доступно это объясняют. Возможно тут https://en.wikipedia.org/wiki/Round-off_error
Если упрощенно сказать, то при вычитании из большого флоата малого, младшие биты улетят в трубу.
Ну и упрощенно говоря, в пример, Float.Max - 1 миллион == Float.Max. Подумаешь лям туда, лям сюда.
Аноним 26/02/24 Пнд 19:14:58 #658 №3064797 
>>3064663
Но у нас же тут даблы, а не синглы (флоат).
Аноним 26/02/24 Пнд 19:23:12 #659 №3064820 
>>3064797
И че?
Аноним 26/02/24 Пнд 19:45:02 #660 №3064870 
>>3064820
У них должно быть два ляма туда - два ляма сюда.
Аноним 26/02/24 Пнд 19:45:29 #661 №3064873 
>>3064870
Двойное "подумаешь".
Аноним 27/02/24 Втр 02:53:07 #662 №3065416 
Делаю систему команд. Заметил, что в логике исполнения команд у меня перед самим исполнением идёт множество проверок (наличие прав, например), если не проходит проверку - то отправляется сообщение об ошибке. Во многих командах часто идут одни и те же проверки.
Попытался решить эту проблему так: создал класс CommandCondition, который содержит в себе условие и метод при невыполнении условия; и при создании команды отправляю список этих условий. Если же проходит, то вызывается метод Execute у команды.
Код: https://pastebin.com/d7tnkcVq

Проблема в том, что мне в некоторых командах нужно отсылать параметры, которых нет в CommandContext. Пока что лучше, чем хранить в condition и action массивы object[], ничего не придумал. Что можете посоветовать, чтобы передавать динамические параметры?
Аноним 27/02/24 Втр 07:51:43 #663 №3065477 
>>3065416
Нет ли в этом вопросе проблемы X/Y? Ящитаю, выполнение проверок - это не зона ответственности команд. Ты впихуиваешь невпихуемое. Думой над архитектурой. Тебе нужен синглтон менеджер проверки прав.
Аноним 27/02/24 Втр 16:00:35 #664 №3065893 
Чем C# лучше Java
Аноним 27/02/24 Втр 16:18:11 #665 №3065920 
>>3065893
Ничем. Мы просто дураки, не нужно с нами водиться, а то и сам отупеешь
Аноним 27/02/24 Втр 16:46:57 #666 №3065969 
Тут есть любители поковыряться в исходниках ASP.NET? Где там искать реализацию TSL?
Аноним 27/02/24 Втр 17:02:32 #667 №3065985 
>>3065969
Дальше F12 не ухожу, обычно на 2-3 класса вглубь хватает
Аноним 27/02/24 Втр 18:43:49 #668 №3066151 
>>3065893
Современной удобной инфраструктурой. Майки вовремя опомнились и перестали поддерживать легаси.
Аноним 28/02/24 Срд 09:46:13 #669 №3066691 
>>3026638
Шустрый клиент для XMPP но в стиле телеги.
Аноним 28/02/24 Срд 11:09:30 #670 №3066746 
Есть для c# нормальная незабагованная библиотека для работы с com портами? SerialPort не предлагать, я вообще не понимаю как такой кал могли написать в составе стандартной библиотеки.
Аноним 28/02/24 Срд 11:58:04 #671 №3066789 
>>3066746
бамп
Аноним 28/02/24 Срд 12:49:49 #672 №3066828 
>>3066151
После ухода авалонии из фонда, я чет сомневаюсь что мягкие хотят честно играть в попенсорс.
Аноним 28/02/24 Срд 13:46:11 #673 №3066876 
>>3066828
> ухода авалонии из фонда
Кто все эти люди?
Давай в подробностях.
Аноним 28/02/24 Срд 14:34:17 #674 №3066917 
>>3066876
Поди те же долбоёбы что написали SerialPort
Аноним 28/02/24 Срд 20:04:16 #675 №3067367 
>>3066876
Кроссплатформенный GUI
Аноним 28/02/24 Срд 20:38:43 #676 №3067411 
Подскажите, как переконвертировать коллекцию<T> в коллекцию<U> ? Например, у меня из файла подгружается коллекция общих элементов, а из них формируется в одном месте коллекция лист-айтемов, а в другом коллекция меню-айтемов. Сейчас делаю по старинке через форыч, но вроде где-то видел, что можно линком в одну строку пакрасате сделать?
Аноним 28/02/24 Срд 21:01:13 #677 №3067429 
>>3067411
x.select(x=> new y).tolist()
Тупые вопросы, лучше в доку с таким
Аноним 28/02/24 Срд 21:02:52 #678 №3067433 
>>3067429
Не нашёл в доке. Да я тупой, будьте толерантны. Спасибо!
Аноним 28/02/24 Срд 21:33:03 #679 №3067457 
.png
Пацаны.
Вот как мне сделать что-то типа такого с тем что собирается?

Типа, чтобы была папка с экзешниками типа "корень". Подпапка bin в которой лежат всякие dll и прочие штуки.
Ну и data - для всяких ресурсов приложения(звуки там, картиночки, шрифты, ну вы поняли).

Типа да. Я знаю, что я могу сделать app.exe типа просто неким хостом, собрать дотнетом в единый исполняемый файл, а потом лезть в папку bin и data.
Но я бы хотел, чтобы типа мне не нужно было ебаться со всем этим поздним связыванием и прочим, а просто чтобы запустил, оно собралось, я кайфую. А все это позднее связывание - заставляет так изъебываться на самом деле с тем как проект собирать, копировать куда-то выходные dll и прочее-прочее.
Аноним 28/02/24 Срд 21:58:16 #680 №3067472 
>>3067457
Пишешь таргет в мсбилде на перенос дллок, в поиск путей с дллками добавляешь свой путь
Аноним 28/02/24 Срд 22:01:11 #681 №3067478 
>>3066876
Без честного развития опенсорса, и заигрывание в ЕЕЕ, дотнету будет шляпа.
Аноним 28/02/24 Срд 22:15:58 #682 №3067495 
Авалония закрывает исходные коды и вводит новую модель монетизации

Чë, испугались?
Аноним 28/02/24 Срд 22:24:08 #683 №3067510 
1709148248815.png
>>3067367
А это та самая авалония? Говнище полное. До сих пор на Ето.Формсах гуи ебошу и кайфую. Никакого тебе хмл-говна. Взял и описал форму прямо в конструкторе, красивым декларативным способом, в который шарп нынче научился.
Аноним 29/02/24 Чтв 01:30:52 #684 №3067625 
>>3067510
Удваиваю это.формы.
К слову, синтаксис инициализаторов в шарпе был давно, чуть ли не с 4.0.
Аноним 29/02/24 Чтв 05:28:28 #685 №3067674 
>>3067367
Ничего не имею против авалонии кроме шрифтов под виндой
Какое отношение они имеют к мелкософту? (ну кроме того что мс решили родить мауи, а не взять авалонию под крыло - что лично я осуждаю, но что подчеркивает что мс до авалонии дела нет. Дело есть у джетбраинс, но они не мелкософт)
Аноним 29/02/24 Чтв 05:32:13 #686 №3067675 
>>3067510
>красивым декларативным способом
Это то что раньше в дедовские времена студия сама генерила от вкидывания контролов
Что тут красивого
Красиво это jetpack compose
Аноним 29/02/24 Чтв 10:02:33 #687 №3067772 
>>3067478
Ну майки вроде как заценили как бустанулся дотнет при переходе на попенсурс модель, но это не отменяет вероятности прихода очередного эффективного который решит, что нужно возвращаться к корням.
Ну и опять же у майрософта столько бабок, что они вполне могут начать косплеить гугол и однажды сказать что, "ребяна, нахуй все, нам надоело, в жопу ваш дотнет" и слить его куда-нибудь, а то и вовсе закрыть.
Аноним 29/02/24 Чтв 11:06:10 #688 №3067833 
>>3067772
Там же вроде MIT, то есть последняя версия все равно останется у комьюнити, не? Понятно что потом могут создавать всякие трудности типа у нас названия API закопирайчены, но с высокой вероятностью пойдут нахуй или просто будет переименовано.
Аноним 01/03/24 Птн 00:40:35 #689 №3068863 
Как сделать файловый ввод в переменную типа int? Любая попытка преобразовать данные из файла приводит к неработающей программе.
Аноним 01/03/24 Птн 00:44:30 #690 №3068867 
>>3067833
Они уже начали EEE, там у линуксоидов что-то с хотрелоадом. Ой, ну такая же мелочь, казалось бы? Ну наверное надо идти на винду, на правильную IDE, где все работает правильно.
Какие еще подводные там есть, хз.

Начал некоторые проекты, почитал нытье на эту тему и решил переписать. Сами шарпы, конечно, не виноваты, продукт годный, но не хотелось бы играть в квази-опенсорс
Аноним 01/03/24 Птн 00:54:34 #691 №3068875 
>>3068867
> Какие еще подводные там есть, хз.
Есть один, который никто почему-то не замечает. Дебаггер дотнета проприетарный и работает только в студии и вскоде (хоть и на линуксе).
Аноним 01/03/24 Птн 01:13:04 #692 №3068886 
>>3068875
Спасибо за инфу.
Аноним 01/03/24 Птн 02:19:05 #693 №3068930 
Тема: Invoke против CancellationToken

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

Или же токен отмены используют в случаях, когда запросы состояния возникают очень часто?
Аноним 01/03/24 Птн 02:23:10 #694 №3068932 
>>3068863
Можешь подробнее описать проблему? Ничего не понятно.
Тебе надо распарсить строкове значение в int?
Опиши какие данные поступают из файла и что в итоге ты ожидаешь. Опиши какое исключение возникает.
Аноним 01/03/24 Птн 02:29:08 #695 №3068934 
>>3067510
Это пока тебе не понадобилось сделать сложный интерфейс.

>Взял и описал форму прямо в конструкторе
В wpf тоже самое. Может перетягивать контролы и менять их свойства в окошке свойств.

Ну а на скрине говнище ебаное, прибитое гвоздями. Любая задача чуть сложнее интерфейса калькулятора и ты закопался, либо просто не стал делать.
Аноним 01/03/24 Птн 03:47:59 #696 №3068945 
>>3068930
А ты попробуй в 10 методах, да по уровням использовать свою переменную - вот тогда и узнаешь.
Аноним 01/03/24 Птн 08:59:06 #697 №3069052 
>>3068867
>Они уже начали EEE, там у линуксоидов что-то с хотрелоадом.
Это как раз таки не ЕЕЕ, а то самое "нам надоело - ебитесь сами". Они по той же причине выпилили и на маках свою IDE.
Там на самом деле много такого в духе "мы вам итак кросплатформенность завезли, но мы не подписывались совсем все дорабатывать". Та же System.IO крайне ограничена при работе с файловой системой линукса, а официального ничего особо и не предвидится. Есть только mono.posix, который х.з. уже сколько лет в состоянии rc и не собирается из него выходить.

Проблема в том, что даже несмотря на то, что там все под MIT, если майки реально забьют на шарп, то если его не возьмет под крыло какой-нибудь "фоундэйшен", то он просто загнется (собственно как и любая другая платформа)
Аноним 01/03/24 Птн 11:29:35 #698 №3069171 
Что лучше: Vosk, Picovoice, MS.Speech, System.Speech? Из требований возможность работы полностью офлайн и возможность бескостыльной работы вне Windows. Пока лидирует Vosk т.к. Picovoice требует акк хотя бы для первоначальной настройки, с MS.Speech и System.Speech непонятно как это будет работать вне Windows, в частности неясно как языковые пакеты ставить вне винды т.к. на сайте Майкрософт я вижу только MSI
Аноним 01/03/24 Птн 12:59:28 #699 №3069252 
>>3068934
> Любая задача чуть сложнее интерфейса калькулятора и ты закопался, либо просто не стал делать.
Этот фреймворк делался как интерфейс для специфичного дизайнерского софта, которым пользуются в основном ювелиры. (Rhinoceros 3D - 3D computer graphics and computer-aided design (CAD) application) И до сих пор тот софт на ето.формсах работает.

И никто там не закапывается.
Аноним 01/03/24 Птн 15:36:39 #700 №3069355 
>>3069052
Сначала охватили аудиторию, а потом начали закручивать все везде, кроме винды. Ну да, устали они.
Заработать репутацию очень сложно, потерять очень легко.
Аноним 01/03/24 Птн 15:47:57 #701 №3069381 
>>3069355
А начали они вообще с анально вендорлокнутого виндой нетФреймворка
Аноним 01/03/24 Птн 16:34:59 #702 №3069442 
>>3068867
Я ещё не видел ни одного языка, где хотя бы на одной системе хот релоад работал как надо.
Всегда отключаю по возможности, потому что нет никаких гарантий, что код после хот релоада ведёт себя так же, как после колд.
Аноним 01/03/24 Птн 16:42:03 #703 №3069451 
>>3069252
Не показатель вообще ничего
Аноним 01/03/24 Птн 16:48:29 #704 №3069455 
>>3069451
> врёти! оволонея лутше!
Кекекс плез.
Аноним 01/03/24 Птн 16:57:36 #705 №3069464 
>>3069455
вообще то да. Как захочешь сделать кастомный контрол так сразу поймешь

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

а ето фомс описание выше - ну это же реально древность. так в QT описывают или дизайнер винформс сам пишет.
Хамл не особо лучше, но все же он изначально задуман как lookless
А тут просто кроссплатформенный винформс да еще с описанием ручками

новомодно это jetpack compose
там тоже кодом. но есть НЮАНСИЩЕ
Аноним 01/03/24 Птн 17:02:32 #706 №3069468 
>>3069464
Для зумеров туда завезли хамл и мввм с обсервабле коллекшонами. А мне и дидовский метод пойдёт, я дед.
> захочешь сделать кастомный контрол так сразу
dotnet new etofile -p
Аноним 01/03/24 Птн 17:05:14 #707 №3069469 
>>3069468
>Для зумеров туда
когда возникла технология зумеры еще под столк пешком ходили

>dotnet new etofile -p
и че дальше? магическим образом возникнет магический контрол? ню ню

> дидовский метод пойдёт, я дед
каждому свое. у каждого свои радости. Я вот не использую EF и гит (а божественный меркуриал) и мне норм.
Аноним 01/03/24 Птн 17:34:29 #708 №3069511 
>>3067510
В авалонии тоже можно описывать форму прям кодом, XAML продвигается для аналитиков и дизайнеров, чтобы не тыкали программистов цвет кнопки поменять

Говорилось что фишка XAML в том чтобы мимокроки могли делать чисто косметические изменения в форме без программистов, хз где есть такое
Аноним 01/03/24 Птн 19:11:38 #709 №3069593 
Ебать мой хуй, как же я люблю писать энтерпрайсный код!
Аноним 01/03/24 Птн 20:27:24 #710 №3069686 
>>3069593
Я тоже!
Но меня заставляют писать системный на заваоде(
Аноним 01/03/24 Птн 20:59:08 #711 №3069727 
>>3069469
>а божественный меркуриал
Как же я грустил когда пришлось окончательно поменять меркуриал на гит. Хотя я уже и привык, но все равно иногда так хочется.
Аноним 01/03/24 Птн 21:01:04 #712 №3069730 
>>3069686
А я в банке пишу системный (ну почти) софт. Я доволен.
Аноним 02/03/24 Суб 05:24:38 #713 №3070128 
>>3069252
>которым пользуются в основном ювелиры
Там диапазон от ювелирки до архитектуры. Я знаю про рино. Я в нем работал долгое время, собсно я так в шарп вкатился.
Основная претензия к этой программе в том, что у нее внезапно устаревший интерфейс. Я много кого хотел пересадить на рино, ибо в России он не очень популярен, но все смотрели на скриношоты UI, говорили фу какой кал и скачивали фьюжин (несмотря на то, что это кал по функционалу). А после выхода пластисити можно рино закапывать. На ней мамоны по типу меня еще посидят какое-то время, потому что привыкли, но притока новых пользователей не будет.

>И никто там не закапывается.
Когда я слышу о винформсах, то обычно речь идеть об эгоизме самих разработчиков, которым лень чет там пилить, и естественно под эту лень они выдумывают массу причин. В итоге разработчики "не закапываются", потому что при возникновении проблемы они эту проблему шлют нахуй, а пользователю это просто не интересно и он идет искать что-то еще.
Аноним 02/03/24 Суб 10:20:23 #714 №3070219 
>>3070128
> устаревший интерфейс
Интерфейс устаревший у рино, и в самом етоформсе по умолчанию не включены темы, но они есть. Авторы сами любители нативного лука, поэтому темы не включены искаропки.
> Когда я слышу о винформсах
Там платформонезависимые окна, когда ты их описываешь, у них свой набор виджетов, без визуализации. Визуализацией занимаются отдельные пакеты-адаптеры, имеющие префикс eto.platform, таким образом, винформсы и WPF в рамках етоформс - это отдельные платформы. Ты можешь сделать приложение, которое на выходе будет отрисовано WPF, причём при создании шаблона по умолчанию именно адаптер WPF создаётся для винды. Так же авторами фреймворка учитывается, что у разных платформ есть свои отдельные виджеты и свойства, и для этого есть возможность пробросить через платформенный адаптер нативные колбэки и хэндлеры изнутри наружу и наоборот.

Да, название фремворка запутывающее, как будто ты поверх винформс должен работать, но это не так.
Аноним 02/03/24 Суб 11:17:31 #715 №3070293 
>>3070219
Точно так же работает и хамарин и мауи, но всё не описывается кодом
Причем разве это код вообще. Он не императивный
Аноним 02/03/24 Суб 11:20:10 #716 №3070297 
>>3070293
> разве это код вообще. Он не императивный
Хорошо-хорошо, это не код. Успокойся. Опусти нож.
Аноним 02/03/24 Суб 11:27:22 #717 №3070303 
>>3070297
Просто точно такой же код может написать дизайнер идешки
Он не императивный

В MVU(I) подходах он императивный. Но это не про шарп
Аноним 02/03/24 Суб 11:35:19 #718 №3070311 
1709368519117.png
>>3070303
Я не понимаю, что ты хочешь донести. Обесни по русски.
Аноним 02/03/24 Суб 11:43:54 #719 №3070323 
>>3070311
я хочу донести что показанное "смотрите как можно описывать уи в ето.формс" по факту просто является обычным кодом (с упором на некоторые фичи шарпа) описания как деды описывали, только за них дизайнер писал.
И что как бы на смену этому и пришел хамл (ну чтобы кодом не описывать)
так что это не будущее. это прошлое.

далее работают что етоформс, что замарин по одному принципу, но первый описывает кодом, а второй хамлом. Что лучше? да 2 стороны одного говна

А вот реально другое - MVU подход. там уи описывается кодом, но, в зависимости от возможностей языка, делается это с некоторой долей императивности
То есть сам код является не только описанием "что во что вложенно + аттрибуты), а именно выполняемым
Для понимания задача - по флагу показать кнопку или картинку. В WPF это решается через ContentControl
а императивно буквально так
if (showImage){
Image
}else{
Button
}
ну то есть самый обычный код.

я не говорю что это лучше. Это просто по другому. Но это хотя бы не из древности
Аноним 02/03/24 Суб 11:57:57 #720 №3070348 
>>3070323
Я тебе скинул скрин 5 секунд в гугле по слову "императивность", ознакомься.

То что у тебя своё определение императивности - делает твои посты нечитаемыми.

> на смену этому и пришел хамл
В етоформс есть хамл.

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

Но я всё ещё не понимаю, причем тут императивность? Почему ты так оббазвордился императивностью? В шарп завезли декларативность, может ты всё это время путал императивность с декларативностью?
хамл, жсон и т.п. - это декларативные языки описания структур данных. В шарп завезли инициализаторы, которые по сути именно делают декларативное описание создаваемого инстанса. Делаешь несколько вложенных инициализаторов и получаешь функционально те же яйца, что и хамл, только в профиль.
Аноним 02/03/24 Суб 12:14:32 #721 №3070372 
>>3070323
И вообще, в этом коде у тебя смешана логика и данные, что в современных гайдах не приветствуется.
> if (showImage){
> Image
> }else{
> Button
> }
Правильно по зумерски ебануть во вьюшку оба элемента и прибиндить их видимость к чекед-свойству вьюмодели которое прибиндить к чекед свойству чек-элемента. Не?
Аноним 02/03/24 Суб 12:15:36 #722 №3070374 
>>3070348
>То что у тебя своё определение императивности
это у тебя какое то свое. я тебе описал ИМЕННО ТО ЧТО В ГУГЛЕ и вообще во всем мире
то есть инструкции описывающие UI ВЫПОЛНЯЮТСЯ буквально построчно сверху вниз
А НЕ ПРОСТО ОПИСЫВАЕТСЯ иерархическая структура контролов и их аттрибутов

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

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

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

Ну и основная претензия к этому всему - крайняя ограниченность кастомизации в угоду кроссплатформе и нативности гуи на конечной платформе.

>>3070372
>у тебя смешана логика и данные
нет не смешана. не путай логику модели (или даже вьюмоделей) и логику UI
Аноним 02/03/24 Суб 12:16:22 #723 №3070375 
>>3070374
> инструкции описывающие UI ВЫПОЛНЯЮТСЯ буквально построчно
Ложь.
Аноним 02/03/24 Суб 12:16:52 #724 №3070376 
>>3070375
ты явно потерял нить беседы. перечитай.
Аноним 02/03/24 Суб 12:17:09 #725 №3070378 
>>3070374
> и логику UI
В юи нет логики, в нем есть только дерево элементов.
Аноним 02/03/24 Суб 12:17:26 #726 №3070380 
>>3070376
Нахуя перечитывать чушь?
Аноним 02/03/24 Суб 12:21:17 #727 №3070389 
>>3070378
>В юи нет логики
это утебя в голове нет логики
банальный триггер OnMouseOver = изменить фон кнопки является логикой UI - и ТЫ НЕ ПОВЕРИШЬ, но в реальности это выполняется код который меняет фон кнопки

>>3070380
ну так и запишем. читает жопой и слился.
Аноним 02/03/24 Суб 12:36:54 #728 №3070417 
>>3070372
>прибиндить их видимость к чекед-свойству вьюмодели которое прибиндить к чекед свойству чек-элемента. Не?
закат солнца вручную. Логика элемента то обрабатывается хоть он и не виден (только логику связанную с рисованием движок может скипнуть, а все что наворотил пользователь - нет)
Аноним 02/03/24 Суб 13:08:12 #729 №3070459 
.jpg
>>3067472
Попробовал.
Эта срань работает криво. Если путь для поиска пути задавать относительный, то в случае запуска в виде демона/сервиса - приложуха не стартует(
Эх.
Мдя...
Аноним 02/03/24 Суб 16:33:06 #730 №3070631 
>>3070459
Использую абсолютные пути. Узнать из какого места произошел запуск нет никаких проблем
Аноним 02/03/24 Суб 16:38:50 #731 №3070641 
>>3070631
> Использую абсолютные пути
Так а как я узнаю абсолютные пути, если приложуху пользователь куда хочешь может положить по желанию?
А без этого - хостовый процесс - не сможет запустить уже мой проект, чтобы я там что-то подгружать начал и разрулил если надо пути.
Аноним 02/03/24 Суб 16:47:02 #732 №3070650 
>>3070641
Ты дурак? Так и гугли c# get startup path
Аноним 02/03/24 Суб 17:06:12 #733 №3070681 
.png
>>3070650
Давай. Показывай как надо сделать. А то я чет не понимаю.
На пальцах. Шаг за шагом.
Аноним 02/03/24 Суб 17:38:28 #734 №3070711 
image.png
>>3070681
Аноним 02/03/24 Суб 20:42:07 #735 №3070953 
>>3070711
Чел. Я же говорю о случае, если ты запускаешь свой проект из другого места.
Вот допустим, если я захочу свою хуйню запускать как виндовый сервис, она будет дергаться из system32. И тогда вся эта срань по пизде пойдет, если путь до папки с dll'ками полностью не прописать.
А прописывать полностью - бред, потому что пользователь, который скачал и себе хочет установить - не .NET-хуй, и ему разбираться, куда там че прописать не всралось, а положить скачанное он может в любую папку.
Ну да ладно.
Аноним 02/03/24 Суб 20:48:21 #736 №3070962 
>>3070953
Ещё раз повторяю, код никак не привязан к месту из которого вызывается всё что ему нужно это что бы дира dlls была в дире где лежит основная дллка, всё, не важно больше ничего
Аноним 02/03/24 Суб 20:48:57 #737 №3070963 
image.png
>>3070953
Хуй знает что тебе ещё нужно
Аноним 02/03/24 Суб 20:59:56 #738 №3070970 
>>3070962
Для хостового процесса .NET, который ищет откуда брать сборки - важно.
Если указан относительный путь где искать сборки - оно не разруливается.
Вот ишью с этим https://github.com/dotnet/runtime/issues/72571

Если не так, показывай по шагам, че делаешь.

>>3070963
И ты показывай. А то просто постишь скриншот, хуй знает чего с каким-то выводом в консоль.
Аноним 02/03/24 Суб 21:36:16 #739 №3070990 
image.png
image.png
>>3070970
Не хочешь верить значит иди нахуй. Я даже заебался и как сервис в винду запульнул этот экзешник.

У всех эта хуйня работает с тем же цефом для выбора x32|x64 либ, а у тебя не работает, во дела то!
Аноним 02/03/24 Суб 21:40:22 #740 №3070992 
>>3070990
Покажи содержимое runtimeconfig, чел.
Аноним 02/03/24 Суб 21:46:22 #741 №3070994 
image.png
>>3070992
Аноним 02/03/24 Суб 21:47:28 #742 №3070995 
>>3070994
Ничего не понимаю тогда.
Ты либо троллишь, либо чего-то не договариваешь.
Аноним 02/03/24 Суб 21:49:51 #743 №3070997 
image.png
>>3070995
Заебал ты меня, я всё надеялся что ты в гугл пойдёшь и первой ссылкой увидишь AppDomain.CurrentDomain.AssemblyResolve в связке с Assembly.GetExecutingAssembly().Location
Но видимо ты решил не гуглить совсем
Аноним 02/03/24 Суб 21:58:06 #744 №3071000 
>>3070997
Чел. Это позднее связывание. Я про него еще в первом посте написал.

> . Я знаю, что я могу сделать app.exe типа просто неким хостом, собрать дотнетом в единый исполняемый файл, а потом лезть в папку bin и data.

И я написал, что не хочу этого делать. Я хочу чтобы у меня все dll - были во время разработки - как обычно через референсы указаны, чтобы я мог просто дергать их как человек. Но после разработки - переложить их в папочку bin/libs/dlls, чтобы более чистый вид был. Можно конечно для этих целей собирать все в один экзешник, но опять же по памяти - там начинается хуерга что как сервис оно стартует хуево(оч долго, и на том же линуксе систимде - начинал вонять по этому поводу).
Короче. Ты мне напиздел получается.
Аноним 02/03/24 Суб 22:01:16 #745 №3071002 
>>3071000
Так и работает, дурачина. Я руками сейчас беру и перекладываю дллки в dlls после билда, до этого они беруться из рута.
Никаких отличий в использовании вообще нет, просто добавляется хук на поиск.

В проекте нет абсолютно никаких отличий от стока кроме ручного переноса дллок если нужно и доп резолвера
Аноним 02/03/24 Суб 22:04:17 #746 №3071004 
image.png
>>3071000
В доке прямо написано что вызывается когда не удалось найти дллку в стандатрных местах
Аноним 02/03/24 Суб 22:10:06 #747 №3071007 
image.png
image.png
Хуй знает, может в твоём представлении перенос файлов после сборки меняет сорсы или что то в этом духе. Или я какой то не такой как ты думаешь код написал
Аноним 02/03/24 Суб 22:10:45 #748 №3071008 
>>3071007
И я заебался на середине затирать юзернейм, так что можешь в телегу написать если подгорело
Аноним 02/03/24 Суб 22:18:01 #749 №3071011 
>>3071007
>>3071004
>>3070997
Хм. Ладно.
Признаю. Был не прав. Косо пробежался по первому куску кода и не заметил, что тут какой-то обработчик события накидывается. Подумал, что просто загружаются сборки из папки.

В свое оправдание - в нормальном .Net Framework - такой ебельди делать не надо было. Просто в config дописываешь <probing privatePath="bin"/> и как человек радуешься.
Аноним 02/03/24 Суб 22:19:10 #750 №3071012 
>>3071011
> в нормальном .Net Framework
У тебя две части противоречат друг другу
Аноним 02/03/24 Суб 22:21:28 #751 №3071014 
>>3071012
Ой, да не надо. Единственный минус фреймворка, это то, что из-за его раздутости - были дублирующие штуки и приходилось догадываться, из какого пространства имен нужное тебе.
В остальном - это было лучшее в плане девелоперского экспириенса, что вообще возможно. Я только из-за него этим программированием и занялся.
Аноним 02/03/24 Суб 22:31:34 #752 №3071015 
.png
.png
>>3071012
Опять же. Вот пример как оно делалось в те времена.
Все. Никаких там ресолверов и прочего. Просто указал подпапку и радуешься.
Аноним 02/03/24 Суб 23:13:06 #753 №3071058 
>>3070953
>Вот допустим, если я захочу свою хуйню запускать как виндовый сервис
Тогда тебе должно быть лихо похуй, что там у тебя внутри каталога с приложением твориться, максимум конфиги в отдельный каталог положить, если ты не сподобился вынести их в консул или еще куда-нибудь наружу.
Аноним 02/03/24 Суб 23:59:26 #754 №3071090 
>>3071058
Мне и было похуй, пока пользователи не начали ругаться, дескать, ря, много дллок, хуй найдешь нужный экзешник, говно сделал, пидорас, уууу, уууу, уууууу
Аноним 03/03/24 Вск 00:05:52 #755 №3071103 
>>3071090
Извини, а нахуй юзеры лезут в папку с софтом? Всё что они должны видеть это инсталлер и ярлыки на рабочем столе
Аноним 03/03/24 Вск 00:27:53 #756 №3071128 
Есть строка
>Ехал Грека через реку, видит Грека в реке рак, сунул Грека руку в реку, рак за руку Греку цап.

Есть набор ключевых слов
>Грека, рак

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

1. Если я воспользуюсь методом string.Split, то я разобью строку на массив нонейм отрезков, при этом я не знаю в каких элементах содержится слово "Грека" или "рак".

2. Или взять Regex
>(?:Грека|рак)
Я получу ключевые слова, но потеряю отрезки текста, не являющимися ключевыми словами. А мне надо разбить предложение, а затем снова собрать.

3. Самый контролируемый вариант получается при использовании метода string.IndexOf, когда я узнаю индекс вхождения искомой строки. Но у меня чувство, что при таком способе каждый раз я изобретаю велосипед.
Аноним 03/03/24 Вск 00:35:53 #757 №3071139 
>>3071128
Начнём с того что в результатах регулярки есть индексы символов в строке по которым попадание
Аноним 03/03/24 Вск 00:56:45 #758 №3071172 
>>3071139
Ааааа, спасибо. Точно, что-то такое видел.
Аноним 03/03/24 Вск 09:46:34 #759 №3071408 
>>3071103
Ну, опять же, мне вот лень было делать хуевину чтобы задавать настройки, все настройки - лежат в appsettings.json. Отдельно задачу - сделать возможность настраивать все это из UI тоже никто не ставил.
Так что периодически - надо лазить.
Я оправдываю свою лень - тем что в линуксе вон никто не выебывается, идут в /etc/conf и всем ок, так что и тут потерпят)
Аноним 03/03/24 Вск 10:02:01 #760 №3071417 
>>3071408
так то линукс. там народ привык к мучениям и пердолингу
А тут пока найдешь где оно в профиле в этих роаминг локал хрен разберешь в чем разница и куда вообще идти. Умные люди делают менюшку в софтине которая откроет блокнот с настройками.

но ты мучай людей, мучай.
Аноним 03/03/24 Вск 10:04:38 #761 №3071422 
>>3071090
Делай как все, dll-ки во внутренней папке, снаружи папки Run.exe
Аноним 03/03/24 Вск 10:21:24 #762 №3071426 
>>3071422
Ну, я примерно такое и собирался сделать.
В первом посте скриншотик того как хотелось бы >>3067457

>>3071417
> Умные люди делают менюшку в софтине которая откроет блокнот с настройками.
Нууууу. У меня таки софтина - это скорее сервисная хуйня для работы с большим спектром железяк. Обычно работает как демон. И обычно, когда у клиента новые железяки появляются, с которыми с первого раза что-то не получилось - ему надо залезть в папку и поставить нужный флажок, посмотреть, помогло ли, если помогло - радоваться, если не помогло - крыть меня хуями, чтобы я выяснил в чем дело, добавил новый флажок (потому что вся эта хурма у меня за флажками, чтобы в случае если оно только хуже сделает - можно было тупо отключить), и потом он новый флажок поставит и все заработает. Такие вот дела. Переработать это все чтобы было по человечески - никто времени не дает. Я уже, если честно, сам не помню за что там все флажки и настройки отвечают, лул.
Аноним 03/03/24 Вск 10:30:58 #763 №3071429 
>>3071426
Забавно. Можно флажками сжечь устройство?
Аноним 03/03/24 Вск 10:36:21 #764 №3071432 
>>3071429
В теории - да. На практике - ни разу вот прям чтобы сжечь не было, самый хуевый случай это как раз бесконечный ребут.
Аноним 03/03/24 Вск 11:07:18 #765 №3071456 
1709453236793.png
1709453236818.png
1709453236819.png
1709453236820.png
1709453236820.png
1709453236821.png
>>3070389
> ну так и запишем. читает жопой и слился.
Ето-господин не мог слиться, слилась авалония-шавка.

Вот как делается UI без логики. Учитесь, зумерки.
>>3070417
> Логика элемента то обрабатывается хоть он и не виден
Нет логики в элементе. Учись проигрывать.
Аноним 03/03/24 Вск 11:24:11 #766 №3071468 
>>3071456
>Ето-господин не мог слиться
однако он слился ибо читает ЖОПОЙ
и ЖОПОЙ же думает
я не говорил что авалония императивная

я сказал что есть И императивные подходы к выражению UI, а не только декларативные
и императивный подход НЕ ОТМЕНЯЕТ биндинги, шавка ты етовформовская бестолковая и там тоже можно вот так через визибилити сделать.
Разница декларативного UI и императивного в том что в императивном случае ТАМ ВЫПОЛНЯЕТСЯ КОД при построении UI. И если в декларативном твой код спрятан в контролы, биндинги, code-behind, то в императивном стиле он прямо описывает UI ВЫПОЛНЯЯСЬ!!!!
То есть код не является описанием структурности, использую которую потом движок построит UI, а код является самим кодом построения UI. Пошло выполнение if по ветке фалсе - и элемент просто не появился в визуальном дереве. Ключевое слово - пошло выполнение.

ты жопой прочитал. не разобрался о чем речь, но жопа твоя запылала

и ты притащил решение...ТАКОЕ ЖЕ как оно делается в авалонии, в впф и даже в винформс с биндингами лол. Что нового ты показал? ты показал СТАНДАРТНОЕ решение и кичишься этим.

>Нет логики в элементе
Кто сказал? А если это мой контрол где в code-behind может быть сколь угодно сложная логика, подписки там всякие и тому подобное. Я могу спокойно подписаться на INPC соурса (и конечно реагировать на события) и меня совсем не радует разбираться виден ли мой контрол или нет.
Аноним 03/03/24 Вск 12:05:26 #767 №3071486 
>>3071456
хоть это и оффтоп ибо про императивность я просто упомянул, но все же покажу что такое MVU подход

смотрим (там правда котлин, но не суть)
https://pastebin.com/UNkWhr83
смотри описание структуры - оно очень похоже на описание твоего ето.формс и вообще просто описание кодом
но по факту - все это МЕТОДЫ, которые буквально вызываются и выполняются

и там второй пример табконтрол
никакого биндинга типа ItemSource (хотя конечно делается как 2 пальца в кастомных контролах)
поскольку код выполняется, то вкладки создаются
tabs.forEachIndexed
потому что в общем то это не табконтрол, а просто колонка, где ты сам рисуешь
и ты можешь конечно обернуть все это в функцию и и назвать ее TabControl

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

но это котлин, а котлин - это мощь в выразительном плане, поэтому может оперировать методами и скоупами

В других же языках приходится делать контролы классы и тогда код уплывает в метод этого класса, но принцип остается тот же - следим за местами обновления стейта и просим контролы себя обновить.
пример swift combine https://pastebin.com/Xcqv8Rj2
там тоже есть if

Шарп тоже так может как свифт, что то даже в MAUI делали такое. https://github.com/dotnet/maui/discussions/12820
И даже дебильное шарповское new можно убрать через static using

И вот это реально другой подход со своими плюшками и недостатками. А ты показываешь древность и радости полные штаны.
Аноним 03/03/24 Вск 12:38:49 #768 №3071517 
>>3071417
>так то линукс. там народ привык к мучениям и пердолингу
Хуйню не неси. Регулярно лезу в конфиги графических программ на шиндовс. А в играх так вообще норма менять настройки через конфиг, потому что некоторые недоступны через графический интерфейс.
Аноним 03/03/24 Вск 14:25:21 #769 №3071656 
>>3071517
>Регулярно лезу в конфиги графических программ на шиндовс
твои личные страдания. обычно виндософт таким не страдает
игры вообще исключение
Аноним 03/03/24 Вск 14:34:21 #770 №3071682 
>>3071456
даже вот оно вроде живо
https://github.com/adospace/reactorui-maui
поверх мауи, который суть хамарин, который по той же фигне делает что и ето.формс

но где такое в ето.формс?
Аноним 03/03/24 Вск 16:24:32 #771 №3071786 
2024-03-0316-12-20.png
2024-03-0316-15-53.png
2024-03-0316-13-08.png
2024-03-0316-11-41.png
Поясните за бардак в культуре. Вот я ставлю в серилоге (пикрил 1)
>formatProvider: CultureInfo.InvariantCulture
И создаю тестовые логи данных различных типов (пикрил 2). И получаю результат (пикрил 3). Часть действительно в InvariantCulture, всем остальным записям насрать.

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

Что происходит?
Аноним 03/03/24 Вск 16:33:20 #772 №3071793 
>>3071656
>обычно
С чего ты вязл, что обычно? Может это твой случай уникальный. Любой более или менее сложный софт требует правки конфигов из файлов. К примеру вижуал студия.

опять на дваче капчу ушатали, как будто тут народу по сотне тысяч человек в день.
Аноним 03/03/24 Вск 16:49:25 #773 №3071797 
>>3071468
> Кто сказал? А если это мой контрол где в code-behind может быть сколь угодно сложная логика, подписки там всякие и тому подобное.
Если там такое будет, мы тебе не перезвоним.
>>3071486
> дебильное шарповское
> котлин
> котлин
Долго жаваблядок держался, но всё таки мы его вытащили на чистую воду. Репортим.
Аноним 03/03/24 Вск 16:54:57 #774 №3071802 
>>3071682
> но где такое в ето.формс?
Мне это не нужно.
У меня паттерн MV, в нём отброшено всё лишнее. Есть только модель и только вьюшка. Модель ничего не знает о вьюшке, вьюшка знает о модели. Всё работает идеально, как швейцарские часы, даже объяснять лень.
Аноним 03/03/24 Вск 17:19:45 #775 №3071838 
>>3071793
>К примеру вижуал студия.
ни разу не лазил в текстовые конфиги студии. Не знаю зачем это делать в принципе.

>>3071797
>Если там такое будет, мы тебе не перезвоним.
так будет в любом контроле. Даже листобокс реагирует на изменения, просто дело до отрисовки не доходит ибо контрол не виден. Но подписки отлично работают пожирая процессорное время и оперативу.
В кастомных контролах заморачиваться о "а вдруг я collapsed заморачиваться просто нет смысла"

>Долго жаваблядок держался
ты вельми ДУРАЧОК. я тыщу раз говорил что пишу на шарпе (основной доход), но под андроид пишу на котлине в силу нативности подхода. И котлин обладает огромной выразительной мощью, что в шарпе и не снилась, но отвратительным рантаймом.

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

>У меня паттерн MV
а те кто пишут хамлом у них не так? что ты бред несешь ленивец
нихрена нового ты не притащил.
плюсы ето.формс - кроссплатформа
минусы - ограниченность нативными контролами + как ты сам показал, убогое выражение кодом "как деды писали"
Аноним 03/03/24 Вск 17:38:49 #776 №3071870 
>>3071786
Итак, у моего приложения текущая культура вот такая:
>CultureInfo.CurrentCulture: "ru-RU"

Если я глобально, для приложения ставлю "en-US":
>CultureInfo.CurrentCulture = new CultureInfo("en-US");
то конвертация во всех случаях выглядит хотя бы адекватно,
>Test of 'Point' data: "100.8,5"
>Test of 'Array' data: [90.3, 70.8, 5, 34]
>Test of 'PointCollection' data: ["10.4,30.5", "25.5,17.9", "9.3,100.7"]
но тогда я сру себе в приложение, я не могу с этим дальше работать.

Если же я в конфигурации логгера устанавливаю
>formatProvider: CultureInfo.CurrentCulture
то при конвертации массивов, элементы по прежнему перечисляются через запятую как будто бы все еще стоит "en-US", хотя сами числа используют формат "ru-RU". Получается бредик:
>[90,3, 70,8, 5, 34]

Серилог виноват? Как это пофиксить?
Аноним 03/03/24 Вск 17:39:42 #777 №3071871 
>>3071838
>ни разу не лазил в текстовые конфиги студии.
Сниппеты, к примеру.
Аноним 03/03/24 Вск 17:43:08 #778 №3071877 
>>3071871
Есть решарпер/supercharger для такого
Аноним 03/03/24 Вск 17:47:18 #779 №3071886 
>>3071877
Я тебе для примера написал. Не для всех софтов есть подобные решения.
Аноним 03/03/24 Вск 17:54:21 #780 №3071903 
>>3071426
Ну так ты хотя бы просто конфиги в отдельный каталог Config вынеси, тогд пользователю не придется их искать среди кучи dll-ок. Он будет заходить в каталог приложухи и сразу видеть куда ему дальше лезть нужно.
Аноним 03/03/24 Вск 18:07:41 #781 №3071918 
>>3071903
Конфиги в директории с приложением должны быть в состоянии ридонли.
А вот пользовательские редактируемые конфиги должны быть в AppData. И если пользователь случайно повредил их, либо нажал кнопочку "Reset to Default", то оригинальные файлы из папки приложением копируются в AppData.

Если "все яйца хранить в одной корзине" тобишь хранить редактируемые конфиги в папке с приложением, то их поломка приведет к поломке приложения, пока пользователь не переустановит его заново.
Аноним 03/03/24 Вск 18:08:46 #782 №3071922 
>>3071870
Бамп вопросом
Аноним 03/03/24 Вск 18:23:54 #783 №3071955 
>>3071870
ну видимо он числам делает ToString(), а уж те по текущей культуре форматятся
Аноним 03/03/24 Вск 18:30:56 #784 №3071978 
>>3071918
>А вот пользовательские редактируемые конфиги должны быть в AppData.
Ну че-ел. Так-то если дальше рассуждать, то конфигов на диске не должно быть вообще. Они должны лежать где-нибудь в энвайронменте/БД/консуле/жопе твоей мамки и т.д. Плюс должен быть прикручен механизм бэкапа/восстановления и прочая красота и свистоперделки. Плюс это все должно быть в контейнерах, контейнеры в кубере, утка в яйце и т.д.

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

>>3071918
>пока пользователь не переустановит его заново.
Во вторых если программа предполагает модель работы как фоновый сервис, то она в принципе должна подчиняться принципу, что её можно в любой момент снести и накатить заново.
Аноним 03/03/24 Вск 18:33:53 #785 №3071984 
>>3071955
Это я приблизительно понял.
Для сложных типов использует ToString(), который зависит от текущей культуры приложения. Но вот примитивные типы он конвертирует используя культуру, установленную в конфиге.

Проблема в том, что символ разделители элементов списка как будто захардкожен и всегда через запятую.
>[90,3, 70,8, 5, 34]

Я не знаю как это пофиксить. Я не могу использовать InvarantCulture в конфиге, потмуо что не будет работать адекватно ToString(), и не могу использовать CurrentCulture, потому что разделители итемов списка "сливаются" с разделителями дробной части чисел.
Аноним 03/03/24 Вск 18:43:01 #786 №3072009 
>>3071984
Конечно, я могу различить разделитель дробной части "," от разделителя итемов ", " по наличию пробела, но это какая-то дичь.
Аноним 03/03/24 Вск 18:45:36 #787 №3072020 
>>3071984
ну что он там использует для сериализации структур? жсон же (сам я любитель нлог)
ну а что у нас там в стандарте жсон?
Аноним 03/03/24 Вск 18:47:34 #788 №3072031 
>>3071984
>>3071922
Позырь вот тут:
https://blog.revolution.com.br/2023/07/17/log-formatters-in-c/
Конкретно раздел:
Creating a custom formatter
Аноним 03/03/24 Вск 19:20:33 #789 №3072088 
>>3072020
Не, я вывожу стандартным способом, в строку.

>>3072031
Я щас это изучаю, но боюсь, что это имеет отношение как раз к форматированию элементов, а влиять на формат вывода списков я не смогу.
Аноним 03/03/24 Вск 19:24:56 #790 №3072097 
>>3072088
>Я щас это изучаю, но боюсь, что это имеет отношение как раз к форматированию элементов, а влиять на формат вывода списков я не смогу.
Там просто как раз кастомный форматтер делается, плюс мелькает параметр ListSeparator, так что я думаю если даже это не то, то близко.
Аноним 03/03/24 Вск 19:38:30 #791 №3072124 
Кто где хостит свои ASPNETы? Именно с самой самой последней версией фреймворка.
Аноним 03/03/24 Вск 19:52:06 #792 №3072138 
>>3072124
На локалхосте.
Аноним 03/03/24 Вск 20:02:16 #793 №3072163 
>>3072124
Свои в докере под кроватью
На работе в кубах
Аноним 03/03/24 Вск 20:46:50 #794 №3072240 
>>3072097
Да там ссаный джисон конфигуратор, а я его не люблю.

Можно перед идентификатором параметра поставить символ собаки
>if (_log.IsDebug()) { _log.Debug("Test of 'Point' data: {@p}", new Point(100.8, 5)); }

Тогда элемент разбивается вот на такое:
>Test of 'Point' data: Point { X: 100.8, Y: 5 }

Т.е. сериализуется элемент. И если это какой нибудь Rect, то мы получаем вот это:
>Test of 'Rect' data: Rect { IsEmpty: False, Location: Point { X: 0, Y: 0 }, Size: Size { IsEmpty: False, Width: 30, Height: 49 }, X: 0, Y: 0, Width: 30, Height: 49, Left: 0, Top: 0, Right: 30, Bottom: 49, TopLeft: Point { X: 0, Y: 0 }, TopRight: Point { X: 30, Y: 0 }, BottomLeft: Point { X: 0, Y: 49 }, BottomRight: Point { X: 30, Y: 49 } }

Вместо этого:
>Test of 'Rect' data: "0;0;30;49"


Смотрел IFormatProvider, но он конвертирует конкретно итем.
ITextFormater отвечает за сборку строки лога целиком.
Аноним 03/03/24 Вск 20:46:55 #795 №3072241 
>>3072124
Если про конкретно где - то ни скажу.

Если про тех часть - контейнеры на альпайн, без рантайма. Сравнение показало, что self contained с обрезкой неиспользуемого выходит экономнее, а это таки оказалось важно, когда контейнеров куча.
Аноним 04/03/24 Пнд 11:22:39 #796 №3072853 
Куда вкатываться?
В Golang, в Java или в C#?
Где вероятность найти работу выше для джуна?
Аноним 04/03/24 Пнд 12:16:04 #797 №3072884 
Поцоны, заранее извиняюсь за поток сознания.
Платиновый вопрос - как совладать с шифрованием в бэкенде?
В тырнетах советуют архитектурно это вынести это на уровень репозитория, но как мне вынести это в репозиторий если он работает с моделью в которой у меня шифрованные байт массивы. Ладно, это можно вынести на уровень сервиса, ок.
Вопрос два - что там с производительностью? Мне нужно сделать поиск, сортировку и фильтрацию. Если без шифрования я мог сделать это на уровне бд (энтити запросом), то сейчас мне получается нужно доставать все эти данные, разшифровать и уже делать то что я хочу, но мне интуитивно (да, замеры я никакие не делал) кажется это будет явно более накладно делать на уровне приложения чем на уровне базы.
Как вообще происходит вот эта сортировка/фильтрация в больших интернет магазинах к примеру? У них дохулион товаров, и допустим юзер юзает какие-то фильтра на них, я не верю что фильтра в этот момент применяются к абсолютно всем товарам в базе на каждый запрос каждого юзера. Сервер делает какую-то индексацию во временные таблицы раз в сутки ночью и потом на запросы берет данные оттуда?
Где-то можно почитать как это считается правильно реализовать роботу с шифрованными данными + большими объемами?
Аноним 04/03/24 Пнд 13:00:32 #798 №3072934 
>>3072853
> Где вероятность найти работу выше
На кассе в пятёрочке.
Аноним 04/03/24 Пнд 16:43:07 #799 №3073231 
>>3072884
>как совладать с шифрованием в бэкенде?
Нахуй не нужно. Просто прячешь все за межсетевой экран и дальше уже не твоя забота. Максимум хэшированием и соленьем сенситив инфы заморачиваешься и все.
Аноним 04/03/24 Пнд 19:46:11 #800 №3073446 
>>3072853
Раз ты спросил в шарпотреде, значит, уже всё решил.
Аноним 04/03/24 Пнд 20:57:27 #801 №3073488 
Посоветуйте, как сделать дропдаун с кастомным попапом (таймпикер со своими свистоперделочными кнобами). 15 лет назад я легко делал такое в дельфи, а нынче вышел из криосна и нихуя непони.
Аноним 04/03/24 Пнд 21:49:05 #802 №3073536 
>>3073231
Почему не нужно?
А если у меня такой проект/такое требование?
А если внезапный слив данных?
И что ты имел ввиду здесь под сетевым экраном? Локальную сеть для бд и сервера?
Аноним 04/03/24 Пнд 22:35:33 #803 №3073570 
>>3072884
> Мне нужно сделать поиск, сортировку и фильтрацию
Вводи сурогаты, по которым можно произвести этот самый поиск-соритровку-фильтрацию, либо не шифруй то, по чему искать-фильтровать-сортировать собрался.
Как-бы шифровать надо чувствительные данные: пароли, эмейлы, логины, телебоны, номера карт и т.д., что и так не должно палиться по хорошему.
Про производительность. Если ты не собираешься базу на 100500 миллионов записей доставать и дефишвровать-шифровать, то разницы значительной ты не заметишь.

> Как вообще происходит вот эта сортировка/фильтрация в больших интернет магазинах к примеру
В кеш скдадывают и отдают из кеша. Чего нет в кеше - лезут в БД и кладут потом в кеш. Максимум - делается индекс. Потому что все уже наелись этих ебанутых БД с 100500 миллионами таблиц и гигатоннами логики в триггерах и хранимках. БД - просто хранилище. Если надо быстрее - выкидываем и берем ту что быстрее.

Опять - никто не шифрует в интернет магазине товары, нахуй. Это не то что представляет ценность. Все равно, что шифровать блоги в БД, нахуй. ЗАЧЕМ, блядь? Вот зачем? Чтобы хвастаться, что у тебя все зашифровано?
Аноним 05/03/24 Втр 00:44:07 #804 №3073661 
>>3073446
Скорее всего он спросил это во всех тематических тредах. Щас ждет в каком треде ему наиболее любезно ответят.
Аноним 05/03/24 Втр 07:46:13 #805 №3073825 
17095725823440.jpg
17095725823481.jpg
>>3072853
Ты опоздал лет на 10
Аноним 05/03/24 Втр 08:46:27 #806 №3073858 
>>3071786
> Поясните за бардак в культуре. Вот я ставлю в серилоге (пикрил 1)
> Что происходит?
Серивлог происходит.

Серивлог лютый кал. Возьми лучше Nlog, хватит срать себе в логи.

Nlog гибок в настройке, на 3 головы выше и точно так же умеет в структурное логирование.
Аноним 05/03/24 Втр 11:36:04 #807 №3073927 
Кстати, еще вопрос - насколько всрато с точки зрения производительности хранить медиафайлы в байт массиве в связке entity-mssql? Или если перефразировать - нормально ли в принципе хранить медиафайлы в байт массивном поле или есть для этого какие-то специальные хранилища в котором выше производительность?

>>3073570
>Вводи сурогаты, по которым можно произвести этот самый поиск-соритровку-фильтрацию.
Можно поподробнее примеры как это делать?
>Как-бы шифровать надо чувствительные данные: пароли, эмейлы, логины, телебоны, номера карт и т.д., что и так не должно палиться по хорошему.
Уже само собой есть.
>Опять - никто не шифрует в интернет магазине товары, нахуй. Это не то что представляет ценность. Все равно, что шифровать блоги в БД, нахуй. ЗАЧЕМ, блядь? Вот зачем? Чтобы хвастаться, что у тебя все зашифровано?
Понятное дело что если данные логически открыты для пользователей, то нахуя их шифровать в базе. Вот только у меня проект такой что в нем есть доступ только для авторизованных пользователей и у стороннего мимокрока вообще никакого доступа быть не должно как и в принципе открытых данных.
Аноним 05/03/24 Втр 15:11:53 #808 №3074154 
>>3073927
> или есть для этого какие-то специальные хранилища в котором выше производительность?
Да, есть, файловая система называется
Аноним 05/03/24 Втр 19:36:42 #809 №3074454 
>>3073927
> Можно поподробнее примеры как это делать?
Вот у тебя есть колонка: Любимый дилдак.
Там значения: Dragon Super XXXL, Horse Master XL, AssCracker 9000
Эти данные ты хочешь зашифровать.
Тогда, ты берешь и добавляешь сурогат FavItemFilterValue, FavItemSortValue и т.д., для которых сохраняется порядок, возможность отфильртовать и прочее.
И свои операции - ты производишь уже по этому сурогату.
Вся задача сводится к тому, чтобы написать функцию, которая будет оригинальное значение в некий хеш с нужными свойствами переводить.
Пример такого подхода есть в реализации опенвики.
Аноним 05/03/24 Втр 21:20:55 #810 №3074559 
1709662855075.png
1709662855109.png
>>3074454
> Вся задача сводится к тому, чтобы написать функцию, которая будет оригинальное значение в некий хеш с нужными свойствами переводить.
Как то так?
Аноним 06/03/24 Срд 02:45:25 #811 №3074804 
>>3002293 (OP)
Шарпаны, а вызывать асинхронные методы в конструкторе (через Task.Run например, с последующим ожиданием выполнения) - это сильно зашквар?
Аноним 06/03/24 Срд 05:12:21 #812 №3074830 
Как понять что мне отвечает клопус а не редиректит на сойнет на распутной прокси?
Аноним 06/03/24 Срд 05:12:44 #813 №3074831 
>>3074830
Не туда.
Аноним 06/03/24 Срд 09:32:32 #814 №3074975 
>>3074804
Это даже не асинхронный метод, ты просто гадишь в тредпул. И да, в конструкторах так делать не надо, потому что пользователь не ожидаем там такой хуйни. Чисто технически все будет норм работать, но тебе нассут на ебало.
Аноним 06/03/24 Срд 09:56:03 #815 №3074987 
>>3074975
Это одноразовая акция, делается только на старте приложения и пока конструктор у этого класса не отработает ни один другой сервис не сможет построиться.
Мне лень просто прописывать в классе какой-либо инициализатор, а потом заставлять все хостед сервисы сидеть и ждать когда он пробздиться. А так за меня все DI сделает.
Аноним 06/03/24 Срд 11:45:35 #816 №3075083 
>>3074804
Да. Один раз сделаешь и не отмоешься
Аноним 06/03/24 Срд 15:07:22 #817 №3075320 
akhuyu-9.jpg
>>3073858
То же говно с Newtonsoft.Json
В JsonSerializerSettings есть свойство культуры, но сериализатору и десериализатору ПОХУЮ.

>var settings = new JsonSerializerSettings() { Culture = CultureInfo.CurrentCulture };

>var myArray = new double[] { 10.4, 17.9, 100.7 };
>string jsonString = JsonConvert.SerializeObject(myArray, settings);
>Debug.WriteLine(jsonString);
результат:
>[10.4,17.9,100.7]
Аноним 06/03/24 Срд 15:37:36 #818 №3075372 
>>3075320
И еще непонятно в чем отличие
CultureInfo.CurrentUICulture от CultureInfo.CurrentCulture

Если думаете, что первое как-то влияет на отображение данных в GUI, то хуй там плавал.
Аноним 06/03/24 Срд 16:21:10 #819 №3075441 
>>3075320
и правильно что пох. ради тебя он не будет создавать невалидный жсон

хочешь как надо - напиши свой конвертер
Аноним 06/03/24 Срд 16:32:53 #820 №3075447 
>>3075372
>>3075320
Пришел к такому варианту. Если установить культуру для текущего треда, то можно отдельно для интерфейса установить текущую культура, а для всего остального инвариантную.
>Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture;
>Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Тогда в лог будет записываться с инвариантной, ну и парситься нормально.

Еще бы сделать так, чтобы это вручную не писать в каждом проекте, чтобы это было по умолчанию.

>>3075441
Да всем похуй на культуру, конечно. Логеру похуй, десериализатору похуй, а пользователю надо показывать данные в текущей культуре. Какие-то плагины вовсе отказываются работать, если у операционной системы не EN-культура.
Аноним 06/03/24 Срд 16:40:00 #821 №3075459 
2024-03-0616-37-49.png
>>3075447
>Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture;
Не работает... Это говно не работает.
Работает пикрил.

Кто нибудь знает стандарт как надо делать правильно?
Аноним 06/03/24 Срд 16:46:05 #822 №3075466 
>>3075441
А для чего CultureInfo придумали, чтобы все клали хуй?
Аноним 06/03/24 Срд 16:53:59 #823 №3075476 
В 2к25 должна быть только одна локаль.
Аноним 06/03/24 Срд 17:05:40 #824 №3075486 
>>3075447
>>3075459
>>3075466

Короче прочитал я про CurrentUICulture, которая якобы должна влиять на пользовательский интерфейс, но по факту в WPF никак не влияет. И еще непонятно почему одни меняют так
>Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
а другие так:
>CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
Аноним 06/03/24 Срд 17:42:33 #825 №3075512 
>>3075320
Ты поехал что ли? Представление чисел в джейсоне не зависит от культуры, оно всегда одинаковое.
Аноним 06/03/24 Срд 17:53:42 #826 №3075527 
>>3075512
Я им не особо пользовался.
Аноним 06/03/24 Срд 20:53:38 #827 №3075716 
.png
Ситуевина.
Есть сервис(всмысле демон, винсервис), написанный на .NET. Он там своей работой занимается, выполняет ее. Примерная архитектура - прикриплейд.
В общем. Все было заебись.
Возникла охуительная идея - приделать к нему веб-морду.
И вот тут уже стало не забись.
Собственно, в чем проблема. Проблема в том, что сервис писался без всех этих ДИ и прочего. Там своя логика инициализации, самописный DI, свои логи. В общем, все самописное.

И теперь надо это как-то с ASP.Net сдружить.
И я реально не знаю как сделать правильно. Типа можно хуйнуть наружу какую-нибудь статику и через нее общаться. Но это выглядит как залупа жи с точки зрения АРХИТЕКТУРЫ.
Аноним 06/03/24 Срд 20:59:23 #828 №3075721 
Шашарпы, вы так и не ответили, почему на голом шарпе с опенгл не может получиться майнкрафта лучше того, который на яве.
Аноним 06/03/24 Срд 21:23:37 #829 №3075790 
1709749417543.png
>>3075716
Дизайн-паттерн "адаптер" загугли. Вдруг подойдёт?
Аноним 06/03/24 Срд 21:26:09 #830 №3075794 
>>3075790
Я тоже думал об этом.
Но хотелось бы, чтобы оно было все в одной сборке и одним процессом, и постепенно как раз таким хреном отказаться от клиента.
Аноним 06/03/24 Срд 21:46:12 #831 №3075808 
>>3075794
Адаптер может быть встроен и в сборку.
Аноним 07/03/24 Чтв 23:27:02 #832 №3076797 
Как сделать цикл, который бы двигался в заданном направлении по триггеру?

Для примера цикл от 0 до 10
>for (int i = 0; i < 11; i++) {}

Обратный цикл от 10 до 0
>for (int i = 10; i >= 0; i--) {}

Нужен гибрид этих двух циклов
Если флаг IsReversed = false, то цикл движется от 0 до 10
Если флаг IsReversed = true, то цикл движется от 10 до 0

Что-то более элегантное чем это:
>int start = 0, end = 11;
>if(IsReversed) (start, end) = (end, start);
>int incr = IsReversed ? -1 : 1;

>for (int j = start; j != end; j+=incr) {}

Например условие 'j != end' можно перескочить и цикл станет бесконечным.
Аноним 07/03/24 Чтв 23:27:54 #833 №3076799 
>>3076797
>for (int i = 11; i >= 0; i--) {}
фикс
Аноним 08/03/24 Птн 00:02:08 #834 №3076822 
.png
>>3076797
Написать иф с двумя циклами. Либо через Linq.
Аноним 08/03/24 Птн 00:44:52 #835 №3076844 
.png
>>3076797
Я БЫ СДЕЛАЛ ТАК!
Аноним 08/03/24 Птн 01:53:14 #836 №3076872 
.png
.png
Можете мне объяснить вот такую ситуевину.
Почему код с первой картинки - работает медленнее и начинает кидать исключения если выполняется часто, а после - делает приложение недоступным в течении минут 10-20.
А второй, ебанутый код - работает отлично и никаких исключений не кидает и при этом эти нагрузку выдерживает.
Контекст - pgSQL,

Мне как-бы понятно, что дело в том, что насоздавались подключения, все такое. Но почему даже после того как все исключения обработались - минут 5 ни один новый запрос к базе не удается выполнить-то в первом примере кода? И как быть в таком случае?
Второй код - работает, но его проблемы очевидны, например, если какой-то люто долгий запрос к базе будет, все должны будут ждать, плюс, сам по себе - костыль и страшно смотрится.
Да, я знаю, что могу увеличить число подключений к БД, поднастроить как к базе подключаться и настройки все эти, проблема в том, что второй код - работает и работает просто неприлично хорошо.
Аноним 08/03/24 Птн 12:46:50 #837 №3077390 
хамарины адб андроид студии хуюдии.
Поясните, я просто хочу на своём ПК эмулировать андройд устройство и управлять и в C# как в селениуме.
Что мне устанавливать то нахой?
Аноним 08/03/24 Птн 16:20:56 #838 №3077715 
Можете на примере моего кода объяснить про буковку O из SOLID

Вот у меня была библиотечка простая, чтобы с TCP работать. Был класс TCPServer (https://github.com/BakaVaka/NetLib/blob/master/src/BakaVaka.TcpServerLib/TcpServer.cs)

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

И единственное удобное решение для меня оказалось - переписать класс TCPServer в некий NetServer который будет и UDP и TCP принимать. А для прикладного уровня все так и остается, только на уровне конфигурирования - заменить класс TCPServer на NetServer
Но ведь это прямо против того что озвучивает OCP. Но если бы я пытался наследоваться там, и делать какой-то UdpAndTcpServer : TcpServer - это же было бы просто пиздец какой говной.
А задачи изначально и не стояло, что будет какой-то там UDP. Задача стояла: вот тебе 2 дня, по TCP прими пакетик, распарсь, обработай и отдай ответ правильный.
В общем. Я прошу пояснить, как я должен был проектировать, не зная о том, что будет через год, чтобы не обосраться с буковкой O.
Аноним 08/03/24 Птн 16:46:53 #839 №3077748 
>>3076872
Сто лет уже не работал с EF, но я подозреваю, что у тебя подключения не разрываются после использования, а так и висят, пока таймаут не наступит.
Вероятно в настройке DI надо более ручками прописать цикл жизни dbContext. Хотя, как я уже говорил, ничего уже не помню.
Аноним 08/03/24 Птн 16:51:55 #840 №3077750 
>>3077715
Забей хуй
Аноним 08/03/24 Птн 17:02:07 #841 №3077760 
>>3077748
Если про те что к БД - оно понятно что не разрываются. Как-бы суть в том, что они в обоих случаях не разрываются.
Непонятно какого хрена они не переиспользуются, даже после того как контексты задиспозились. И это какая-то специфичная проблема Postgres, потому что раньше с MSSql работал и там вообще ниче делать не надо было, все само как-то разруливалось.

Ну и да. Можно настроить автоматическое закрытие после диспоза, но это ПИИИИИИЗДЕЦ как убивает производительность. Не. ПИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИИЗДЕЦ как. Плоюс, полностью проблему не решает при высокой нагрузке, просто меньше время недоступности базы будет.
Аноним 09/03/24 Суб 06:01:03 #842 №3078244 
>>3077760
Попробуй на монгу перейти.
Аноним 09/03/24 Суб 12:33:15 #843 №3078512 
изображение.png
Вопрос про MVVM в GUI (Avalonia) приложениях.
Ситуация такая: при запуске проги она должна создавать новую SQLite БД с таблицами, если уже существующей не найдено. Сам код для SQLite находится на уровне Model. Чтобы реализовывать такой функционал, приходится дергать код из model в пределах App.axaml.cs.
Насколько сильно такой подход противоречит сути MVVM?
Аноним 09/03/24 Суб 12:37:29 #844 №3078519 
>>3078512
Авалония не может в корректную работу с СУБД. Переходи на Ето.формс. Там всё прекрасно с МВВМ.
Аноним 09/03/24 Суб 12:45:09 #845 №3078528 
>>3078519
И как там сделать такой функционал не ломая MVVM?
Аноним 09/03/24 Суб 13:46:36 #846 №3078588 
.png
>>3078512
> при запуске проги она должна создавать новую SQLite БД с таблицами
Так и дергай при запуске проги, лул.

Обычный подход это что-то в духе прикриплейд. Прям в мейне, инициализируешь, радуешься.
Аноним 09/03/24 Суб 17:41:35 #847 №3078895 
>>3078512
> Чтобы реализовывать такой функционал, приходится дергать код из model в пределах App.axaml.cs.
> Насколько сильно такой подход противоречит сути MVVM?
Приложуха по своей природе является точкой входа, она в любом случае видит всех. Не понимаю, в чем у тебя проблема? Ну дёргаешь ты модель из точки входа. И чо? Как это нарушает остальную работу объектов? Они-то друг друга уже не видят, после того как точка входа отработала.
Аноним 09/03/24 Суб 18:12:35 #848 №3078927 
>>3078519
>Авалония не может в корректную работу с СУБД. Переходи на Ето.формс. Там всё прекрасно с МВВМ.
Лопата плохо варит кофе - в этом выражении столько же смысла, сколько и в твоем.
Аноним 09/03/24 Суб 18:16:45 #849 №3078937 
>>3078588
Охуенная тема, братан
Аноним 10/03/24 Вск 00:14:27 #850 №3079467 
Все наверное слышали за защекоинноткоин
Я за фот эти фронтенд штуки ваще не шарю.
Как делают приложения такова типа? ну что бы без перехода по страницам, в одном окне кнопочки, менюшки, всплывающие окошки.
React + что то на бекенде?
В самом этом защекоине просто отсылаются post запросы в эвентах
Хочу такое же сделать.
Что учить?
Ну простую страничку я то сделал SignalR со счётчиком, кляцаешь и +1. А как вот эти выебоны с менюшками то делать?
Блять ненавижу фронт но что делать то(
На парсерах, регерах далеко не уедешь(
Аноним 10/03/24 Вск 00:15:08 #851 №3079469 
>>3078895
>>3078588

Да, я позже это понял, видно слишком умными акронимами обнюхался и соображать перестал. Спасибо что подтвердили беспочвенность моих шизоопасений
Аноним 10/03/24 Вск 00:28:04 #852 №3079484 
image.png
image.png
>>3079467
Или вот пример.
Я говорю в том что приложение максимально быстро работает.
Жмём кнопку мгновенно переходит по кнопке, адрес меняется, но контент сменяется очень быстро, так же как и при нажатии кнопки назад.
Метанит например грузит всю пагу долго в сравнении.
Корочи как такое делать то?
Аноним 10/03/24 Вск 00:30:26 #853 №3079486 
>>3079467
Ты крайне криво выражаешь что ты хочешь.

Ну да ладно.

Если про обычный подход к SPA, то делают вот так:

У тебя веб-сервер(похуй что, хоть nginx, хоть .NET'овский какой, хоть, аппач). Его цель - отдать статичный контент
Точкой входа является index.html
В этом index.html что-то в духе:

<body>
<div id="app">loading...</div>
<script src="/js/app.js"/>
</body>

Т.е. один html документ, остальная логика по работе с фронтендом лежит в app.js, который может быть хоть ванильным JS, хоть фреймворком каким-то. Этот app.js после загрузки - подсунет в #app - содержимое приложения, все эти менюшки, карточки и прочее. Ну, собственно, будет с домом работать, делать всплывающие менюшки, плюс - наебывать браузер играясь с путем, чтобы можно было ссылки шарить и вело себя +- как классическое статичное веб-приложение.

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

Собственно. Так и делается.
Простейший путь для .NET'чика - взять ангуляр + .NET и сделать по гайду.
Аноним 10/03/24 Вск 00:34:29 #854 №3079489 
>>3079486
>Ты крайне криво выражаешь что ты хочешь.
Ну да я не шарю вот за эти штуки
До недавнего времени я генерил тоннами html страницы и засирал ими просторы интернета, но видимо пришло время изучать фронтенд ебучий
Аноним 10/03/24 Вск 05:36:58 #855 №3079566 
Ребята, вот тут без шуток очень интимный вопрос.
Где вы исполняете код во время разработки? Я имею ввиду, нужно проверить работоспособность какого-то участка кода и при этом не срать в Program.cs.
Аноним 10/03/24 Вск 06:06:15 #856 №3079568 
>>3079566
Отдельный проект из пары файлов.
Аноним 10/03/24 Вск 06:29:35 #857 №3079570 
>>3079568
Можно сделать как-то чтобы на него ссылка в решении не добавлялась?
Аноним 10/03/24 Вск 10:01:02 #858 №3079709 
.png
>>3079566
Аноним 10/03/24 Вск 10:53:29 #859 №3079760 
>>3079486
>Простейший путь для .NET'чика - взять ангуляр + .NET и сделать по гайду.
Еще как вариант - блазор
Аноним 10/03/24 Вск 10:56:39 #860 №3079766 
>>3079566
>Я имею ввиду, нужно проверить работоспособность какого-то участка кода и при этом не срать в Program.cs.
Приведи пример
Аноним 10/03/24 Вск 11:33:59 #861 №3079822 
>>3079766
Ну вот мне надо прототип фичи какой-то реализовать используя уже написанные классы и ресурсы остального проекта, или проверить как дотнет себя в той или иной ситуации ведёт.

>>3079568
Я так уже делаю, но хотелось бы без пустого проекта в решении.
Аноним 10/03/24 Вск 11:48:53 #862 №3079839 
>>3079822
ТЕСТЫ, МАТЬ ТВОЮ, ДЛЯ КОГО ПРИДУМАЛИ?
Я вот срсли не понимаю, какого хуя все так тесты не хотят писать. Ты его написал. Зафиксировал поведение. Кайф. Если начнешь рефакторить и чет наебнешь - хуяк, тесты красные, пиздец, сразу идешь и чинишь.
Опять же - у тебя под боком все лежит, кайфуй, пользуйся.
При этом - тесты ты можешь встроить в CI. Какой-то хуйлан прислал ПР на 500к строк, тесты упали, ты даже не смотря эту хуйню шлешь хуйлана переделывать.
Короче. Единственно верный ответ - нормальный проект с тестами. Бери. Пользуйся.

А прототип своей фичи сразу делаешь там где он должен будет быть, и проверяешь его как раз своими тестами. Можешь тесты писать до написания фичи, можешь после.
Аноним 10/03/24 Вск 12:37:07 #863 №3079908 
>>3079839
Нихуя, спасибо)
Аноним 10/03/24 Вск 12:50:26 #864 №3079938 
>>3079839
>Я вот срсли не понимаю, какого хуя все так тесты не хотят писать.
Потому, что на написание нормальных тестов тоже нужно время, а его обычно никто не выделяет (как и на написание документации)
Аноним 10/03/24 Вск 12:53:26 #865 №3079940 
>>3079822
>Ну вот мне надо прототип фичи какой-то реализовать используя уже написанные классы и ресурсы остального проекта, или проверить как дотнет себя в той или иной ситуации ведёт.
Так а в чем проблема? Создаешь отдельный класс(ы) в отдельном файле(ах), фигачишь туда нужную тебе логику и используешь. Потом удаляешь когда надоест.
Аноним 10/03/24 Вск 14:54:33 #866 №3080152 
>>3079938
1. Ты в любом случае отлаживаешь. Вот часть этого времени - можешь на тесты переложить. В долгосрочной перспективе - это окупится в любом случае.
2. Чел все равно хочет тестировать, но сейчас для тестов пользуется костылями, так пусть пользуется инструментами, которые лучше для этого подходят.

Опять же, мой личный опыт показывает, что если нормально аргументировать, руководство таки согласно выделять время на тесты, но почему-то уже разработчики - не хотят их писать.
Аноним 10/03/24 Вск 19:03:55 #867 №3080665 
Почему в wpf у списков есть событие selectionchanged, но нет события selectionchanging, где можно было бы например отменить выбор.
Аноним 10/03/24 Вск 20:07:16 #868 №3080763 
>>3080665
ну вот удаляешь ты элемент текущий (а то и вообще список чистишь) и selected автоматически меняется, а ты бац и отменяешь....и где теперь твой бог?
Аноним 10/03/24 Вск 20:52:51 #869 №3080799 
>>3080763
Бог сделает так, чтобы в итоге не было выбрано ни одного элемента.
жидкуери и ажакс в представлении asp.net core Аноним 11/03/24 Пнд 07:06:57 #870 №3081103 
image.png
Приветики, столкнулся с проблемой: необходимо отправлять значение из PartialView в HttpPost метод в контроллере и делать это без обновления всего представления. Кое-как написал скрипт jQuery ajax для отправки id продукта и количества продукта в метод(работаю со всем этим впервые).
Проблема в том, что данные в метод не отправляются. Описал свою проблему на stackoverflow, там скинули код, который у них работает, но у меня все также – метод не принимает никаких значений. Вообщем хз че делать, есть подозрения что с библиотеками что-то не так(хотя для тестирования скрипта, предоставленного в SO, подключал уже ссылку на ajax). Может кто-то знает, как это решить, буду благодарен)
Аноним 11/03/24 Пнд 08:57:31 #871 №3081152 
>>3079566
Прототипы очень удобно писать в linqpad. Единственный минус — надо премиум версию, чтобы работал автокомплит и нугет.
Аноним 11/03/24 Пнд 09:16:15 #872 №3081166 
>>3081103
upd: решил проблему
Аноним 11/03/24 Пнд 10:35:23 #873 №3081213 
>>3081103
А как вы, в ваших асп.нетах используете компоненты?
просто создаете свой view component и прокидываете ему параметры из контроллера среди прочих данных?
Аноним 12/03/24 Втр 02:20:11 #874 №3082437 
>>3079566
>>3081152
Сосачую линкпад.
Пробей себе лицензию, потому что в бесплатной версии нет интеллисенса.
Аноним 12/03/24 Втр 02:41:13 #875 №3082444 
>>3081213
Это просто View называется.
В контроллерах есть специальный метод View() с кучей перегрузок, в большинстве он принимает объект, который называется модель. Соответственно в методе-обработчике запроса в конце ты просто пишешь View(myOxuennbI
С другой стороны, в соответствующем шаблоне *.cshtml вверху пишется @Model <тип модели>, чтобы движок мог давать подсказки и помечать ошибки.
Дополнительно к этому есть словарь (хэшмэп, но не настоящий, не бросает исключения если ключ не найден, например) ViewData и динамический объект ViewBag (второй появился позже и, видимо, для выпендрёжа), их тоже можно заполнить в контроллере, а потом использовать в представлении.
Аноним 12/03/24 Втр 08:09:52 #876 №3082494 
>>3082444
нет. я именно про View components, которые этакие виджеты/контролы в асп.нет, чуть мощнее partial view

В пхп есть замечательный фреймворк Nette, который отходит от принципов навязанных MVC и вводит компонентную модель - то есть ты заводишь компоненты, в контроллерах их достаешь, изменяешь их состояние, а потом в виде компонент с текущим состоянием сам себя рисует.
Более того, компоненты там вклиниваются в процесс запроса, то есть компонент сам может доставать и прокидывать через запрос нужные ему persistent параметры
Также есть сигналы - сделать запрос компоненту только, а не всему пайплайну контроллеров
Также может рисовать себя частично

В асп.нет же, как я вижу, View components - просто partial views со своим code-behind и все. В запросе не учавствует, параметры ему в контроллере собирай (и сам их считай) и дотаскивай вместе со всеми. Ну примитив какой то.

Ну ладно пользуясь тем, что там DI и скоуп рождается на запрос...можно навернуть костыль чтобы к компоненту можно было обратиться из контроллера и изменить его состояние, а он себя отрисует.
Но все равно как то уныло.
Аноним 12/03/24 Втр 08:49:49 #877 №3082511 
>>3075721
Может конечно. Слишком много денег и времени на это нужно чтоб его с ссаной явы переписать
Аноним 12/03/24 Втр 15:30:57 #878 №3083079 
Как создавать иерархию вью моделей для обычных моделей? Вот есть у нас модель книги, она содержит модель страницы, а страница в свою очередь модели абзацев. Как это перенести во вью модели сохранив иерархию и добавив возможность все это дело редактировать?
Аноним 12/03/24 Втр 16:21:11 #879 №3083221 
>>3083079
да как хочешь
никто не ограничивает никак.
можешь какую угодно иерархию - раз
можешь оборачивать модели - два
а можешь не оборачивать, а копировать во вьюмодели данные, а потом обратно - три
но не можешь разгадать гребанную новую капчу с двача - ноль
Аноним 12/03/24 Втр 20:34:14 #880 №3083655 
.png
Помогите придумать как сделать нормально.

Собственно. Ситуация.
Есть сущность, к которой надо биндить объект. Условно, сессия.
Объект, который биндится, после диспоза - должен освободить эту условную сессию.
НО, в системе может возникнуть другой объект, к которому надо прибиндить эту сессию. Тогда я насильно диспозю первый объект и перебиндиваю.
Проблема. Если в это время шла работа какая-то через эту сессию с тем объектом, все может внезапно накрыться пиздой.

Как хотелось бы? Хотелось бы, чтобы если перебиндили - как-то подменялся объект на новый. Но как это сделать по человечески - я не могу придумать.
Аноним 12/03/24 Втр 20:54:34 #881 №3083700 
>>3083655
Ознакомься с референсными объектами, на основе подсчёта ссылок.
https://learn.microsoft.com/en-us/windows/win32/com/managing-object-lifetimes-through-reference-counting
Аноним 12/03/24 Втр 21:15:04 #882 №3083733 
>>3083655
Ты хочешь диспозить объект в рэндомный момент.
Не делай этого. Чудес не бывает. Меняй подход

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

С просто диспосабле тебе нужно токен занятости и при вызове диспоз просто планировать его. Когда его все отпустят токе тогда и делать запланированный диспоз
Аноним 12/03/24 Втр 21:41:04 #883 №3083803 
>>3083733
>>3083700
Окей. Надо наверное немного контекста.

Сессия - не просто так.
Есть клиенты на хреновом канале связи, который периодически может отваливаться. На моей стороне - я не могу задетектить отвал мгновенно(потому что закрывается он с большой задержкой, которая не от меня зависит). Но клиенты - долбят часто и таким образом - сами переподключаются.
Собственно, с этими клиентами хочет связываться уже другое ПО. И для него - все должно быть как-бы прозрачно, будто НЕ ЕДИНОГО РАЗРЫВА.
И вот для этого - придумал вот такой класс как "сессия", которая держит текущее подключение. Если клиент переподключится - я хочу просто заменить соединение на актуальное чтобы со стороны выглядело, будто разрыва не было, просто была задержка. Задержки - ок.
Аноним 13/03/24 Срд 05:01:23 #884 №3084099 
Как в блейзоре веб асембле запустить асинхронный цикл?
Ну например что бы он что то проверял в цикле и если шо отправлял запррос на сервер.
Аноним 13/03/24 Срд 12:39:30 #885 №3084445 
>>3084099
https://learn.microsoft.com/en-us/dotnet/api/system.timers.timer?view=net-8.0
Аноним 14/03/24 Чтв 23:34:09 #886 №3086555 
photo2024-03-1420-48-53.jpg
photo2024-03-1420-48-48.jpg
Можете как-то это объяснить?
Аноним 14/03/24 Чтв 23:48:09 #887 №3086560 
>>3086555
Проследуй в загончик. https://2ch.hk/pr/res/2973076.html Там тебе пояснят
Аноним 15/03/24 Птн 00:26:51 #888 №3086574 
image.png
>>3086555
Хз. У меня вполне бодро работает. Профилировщик в студии только сразу на 20% срезает производительность.
Аноним 15/03/24 Птн 06:29:54 #889 №3086629 
>>3086555
>.net 6.0
>>3086574
>.net 8.0
Аноним 15/03/24 Птн 10:37:00 #890 №3086816 
>>3086629
И хули ты ебало скрючил?
Аноним 15/03/24 Птн 10:51:17 #891 №3086822 
>>3086816
- дедушка, а правду говорят, что жависты ебобо?
- правда, внучек, правда
Аноним 15/03/24 Птн 15:38:51 #892 №3087123 
>>3086629
Я проверял на 8.0, там точно такая же ситуация, как приду домой могу скриншот кинуть.
Аноним 15/03/24 Птн 15:54:47 #893 №3087148 
2024-03-1515-52-58.png
Кто нибудь делал vsct расширения для студии? Как сделать вот такой выпадающий итем? У меня получаются только обычные кнопки.
Аноним 15/03/24 Птн 21:34:42 #894 №3087542 
Корочи шарпачи смотрите.
Сделал я Blazor WebAssembly приложение.
Просто для теста. Так же в приложение добавил телеграм бота который просто в ответ на сообщение отвечает ссылку на моё приложение.
Дак вот как я думал оно будет работать:
Само приложение будет крутится в запущённом виде на сервере. Ну собственно как оно крутится в дебаге.
Сама страничка приложения будет обрабатывается на клиенте и не трогать сервер. Пользователь будет жать на кнопки и будет рад.
А на сервере будет крутится Bot.StartAsync(); для работы бота.
Но оно мне скомпилила все в ВАСМ и теперь бот хостится на клиенте. То есть если кто то зашёл в приложение то бот начинает работать.

А мне надо что бы бот работал на сервере а пользователь работал только с ВАСМ приложением, приложения изредка отправляет запросы на сервер для синхронизации. И то когда я в кода приложения определю когда отправлять запрос.
Это мне получается Блейзер Гибрид нужен? Точно не Сервер так как мне не надо держать всегда подключение открытым через СигналР.
Аноним 15/03/24 Птн 22:44:51 #895 №3087615 
.png
.png
>>3086555
Не могу.
Аноним 15/03/24 Птн 22:45:53 #896 №3087616 
>>3087615
Блин. Второй тест - проебался с выводом, но там через рекурсию.
Аноним 15/03/24 Птн 22:47:13 #897 №3087617 
>>3087615
Тебе нужно жениться
Аноним 15/03/24 Птн 22:56:02 #898 №3087630 
.jpg
>>3087617
Я знаю...
Аноним 15/03/24 Птн 23:11:36 #899 №3087647 
binarytreeincomplete[1].png
>>3087615
Блин, чем ты занят?
Одно дело повторить дебильный код, который тестирует производительность вызова методов.
Совсем другое просто так писать ещё один дебильный код который тестирует непонятно что.

Бинарное дерево хранится в виде массива значений. Время генерации — время создания массива. Наносекунды.
Аноним 15/03/24 Птн 23:16:23 #900 №3087652 
>>3087542
Hybrid — это про то, что у тебя до того, как скачался wasm, оно работает в режиме Server, а потом в режимe Client.
К твоей задаче это никакого отношения не имеет.
Аноним 15/03/24 Птн 23:20:12 #901 №3087657 
>>3087652
Hybrid это для запуска вне браузера, то о чём идёт речь это дефолтное приложение с режимом рендеринга Auto.

https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-8.0

Это то что ему как раз надо, можно всё приложение сделать как WASM компонент и оно будет крутится в браузере автономно.
Аноним 15/03/24 Птн 23:25:53 #902 №3087667 
>>3087647
Ну. Смотри. На мои вопросы не отвечают. На работе - главный затрахал. Коллеги - постоянно ругают мой код, дескать он непонятный.
Че мне делать остается, кроме как в пятницу вечером фигней страдать на бордах?


А тестирует тот код мою память по вузовской программе, :p.
Аноним 15/03/24 Птн 23:26:19 #903 №3087669 
>>3087657
>>3087657
Но мне ведь не всё приложение надо что бы работало на клиенте.
А только часть, и при необходимости подгружала и загружала данные с сервера.
Аноним 15/03/24 Птн 23:29:21 #904 №3087675 
>>3087669
Если ты про то чтобы апи крутилось на сервере, а фронтенд в WASM то тут всё так и будет, создай дефолтный проект Blazor и заметишь что у тебя в решении два проекта, один из них это Client.
Аноним 15/03/24 Птн 23:35:02 #905 №3087681 
>>3087675
Бля точно, пздц они перемудрили с названиями
Аноним 15/03/24 Птн 23:39:00 #906 №3087686 
>>3087681
Ну это в традициях майков, если чё по блазору надо то спрашивай.
Аноним 15/03/24 Птн 23:51:56 #907 №3087700 
>>3087686
Спасибо и сразу спрошу)
Какая логика у таких приложений?
Вот мне нужно при запуске приложения / запросить данные с сервера.
В WASM я бы запросил из через апи обратившись к контролеру.
А как тут это сделать?
Создать компонент в серверной части с нужным мне кодом? Ну там с обращением в бд и всё такое и встроить его в приложение?
Аноним 16/03/24 Суб 00:08:09 #908 №3087705 
image.png
>>3087700
Твой первый проект это серверное приложение, тот что с .Client это ассембли которое собирается в WASM и запускается в браузере в зависимости от рендермода компонентов(смотри документацию).

Если для тебя допускается подождать пока загрузится и закэшируется рантайм дотнета в браузере то можешь сделать что-то типо такого в App.razor(пик1). Это явно разделит твой клиентский и серверный код на два рантайма, в ином случае смотри документацию по Interactive Auto рендермоду.

Данные передаешь по HttpClient.PostAsJsonAsync в апишные контроллеры или по SignalR.

Могу тебе посоветовать годный канал по этой теме, в ютубе "IAmTimCorey Blazor Auto"
Аноним 16/03/24 Суб 00:16:00 #909 №3087711 
>>3087705
>Данные передаешь по HttpClient.PostAsJsonAsync в апишные контроллеры или по SignalR
Тогда зачем это всё? В чём разница этого приложения и простого WASM блейзор +webapi приложения?

Мне по сути нужно изредка отправлять запросы. Большая часть данных на странице рендерится у клиента и только некоторые данные на ней получаются с сервера.
При использовании SignalR вообще весь смысл теряется, так как WASM нужен был для экономии ресурсов сервера и что бы не держать подключения открытыми.
Аноним 16/03/24 Суб 00:26:38 #910 №3087722 
>>3087711
>Тогда зачем это всё? В чём разница этого приложения и простого WASM блейзор +webapi приложения?

Смысл в разных рендермодах, в частности Auto который делает для клиента бесшовное переключение с серверного рендера на WASM когда рантайм передан. Ну а ещё удобно то что по дефолту в одном решении. Универсального транспорта, который бы абстрагировался от текущего рантайма, пока что не завезли.
Аноним 16/03/24 Суб 00:56:12 #911 №3087743 
>>3087722
>в частности Auto который делает для клиента бесшовное переключение с серверного рендера на WASM когда рантайм передан
Это в каком смысле?
Типо клиент первый раз зашёл на сайт и пока ему передается WASM сайт работает с сервера а когда передался то переключается на WASM ? Ну дак это же только 1 раз то будет.

Я думал будет как то так: Заходит клиент на сайт грузит всё приложение с логикой. Потом к примеру находит на /game там WASM приложение делает запрос к апи получает инфу и строит страницу.
То есть при посещении страницы WASM клиент получает инфу и уже на ней строит страницу.
Только что будет когда я поменяю логику в WASM ? Её перезагрузит сразу?
Аноним 16/03/24 Суб 01:38:23 #912 №3087758 
>>3087647
> Одно дело повторить дебильный код, который тестирует производительность вызова методов.
Почему на одном языке дебильный код, тестирующий производительность вызова методов, выполняется в 10 раз дольше, чем на другом — нормальном — языке?
Аноним 16/03/24 Суб 03:56:16 #913 №3087779 
Вот снова про Блейзор
Приложение на хостинге.
Запрашиваю своё ип со сторонего сайта.
@rendermode RenderMode.InteractiveWebAssembly -- получаю свой ПИ адрес
@rendermode RenderMode.InteractiveServer -- получаю ИП адрес сервера.

@rendermode RenderMode.InteractiveAuto -- получаю ИП адрес сервера. И вот тут как то не логично. Правильно ли я понял если связь сервером нарушится то я получу ип адрес клиента? Или как это работает?

Далее вот еще у меня есть эндпоинт
app.MapGet("/time", () => DateTime.Now.ToShortTimeString());

Я делаю запрос на него.
@rendermode RenderMode.InteractiveWebAssembly - в браузере виден запрос на https://localhost:7039/time всё ок.
@rendermode RenderMode.InteractiveServer - Вылетает эксепшен.System.NullReferenceException: "Object reference not set to an instance of an object." Я так понял что он не знает по какому адресу обращатmся. Но как по мне тоже не логично, он ведь должен знать что есть локальный эндпоинт /time


Также вот еще
builder.Services.AddScoped(sp =>
new HttpClient
{
BaseAddress = new Uri("https://localhost:7039/")
});
Тут для разработки локалхост. А можно как то установить текущий адрес моего сайта? ну к примеру сайт на домене zalypa.com и что бы атвоматом ставило? Мне и ручками не в падлу прописать но всё же
Аноним 16/03/24 Суб 03:59:50 #914 №3087780 
>>3087779
>>3087779
@rendermode RenderMode.InteractiveAuto -- получаю ИП адрес сервера

НО иногда я получаю ип адрес клиента.
Аноним 16/03/24 Суб 04:07:45 #915 №3087783 
>>3087780
Отчего это зависит то?
Аноним 16/03/24 Суб 10:59:43 #916 №3087883 
>>3087780
>>3087779

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

По дефолту включен пререндер. С ним у тебя при рендере компонента он сначала рендерится на сервере.
https://learn.microsoft.com/en-us/aspnet/core/blazor/components/prerender?view=aspnetcore-8.0

@rendermode @(new InteractiveAutoRenderMode(prerender: false))
Чтобы выключить.

Инжекти NavigationManager для того чтобы работать с адресами.
https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-8.0
Аноним 16/03/24 Суб 11:41:26 #917 №3087923 
1683877327135.png
1588948133421.png
1603028438462.png
Xunit. Нужно сохранить имя тесткейсов. Сделал класс обёртку, чтобы не потерять имя, так как в доке написано, что Xunit смотрит на ToString().
Но по итогу, в обозревателе они остались слипшиеся (Test3), но в логе имена прекрасно отображаются.
Как сделать, чтобы тесткейсы разделялись в обозрвевателе тестов? (как на пике 1)

https://pastebin.com/Tm1iyiL2
Аноним 16/03/24 Суб 19:30:40 #918 №3088502 
Хм.

Не прошу решения. Но прошу направить мысль.
Допустим. У меня есть 100к подключений. Долгоживущих, все дела.
Я хочу подключиться к 10к из них и "пообщаться".

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

Я правда не пойму что хуевастенько работает. Типа если верить профилировщику, 89% времени работы приложения выполняется некий GetNext() и какие-то вуду-штуки с AsyncMethodBuilder'ами.
Аноним 16/03/24 Суб 19:41:36 #919 №3088531 
>>3088502
Объясню сразу в чем хуевастенькость.

Такое ощущение, что часть из вот тех общателей 10к вообще не обрабатываются.
Я вижу какую картину. Вот 100к подключений я с помощью докера и прочих изъебств намутил к своему серверу. Они стам сидят-пердят, ниче полезного не делают.
Вот, я беру, хуячу 10к других челов. Выбираю рандомно из 100к 10к тех с кем общаться и кто не занят.
Ок.
И где-то процнтов 30 +- нормально начинают обмениваться пакетами. А остальные - висят и будто до них вообще не доходит очередь.Ну. Т.е. они подключились, ок-да. Отправили пакет. Даже первый ответ получили. Отправили следующий и ждут. Ждут. Ждут.

Думаю о том, что надо имплементировать свой эвент-луп и свой тредпул, и обходить самому тех кто подключился.
Аноним 16/03/24 Суб 21:53:31 #920 №3088787 
.png
C++ тред похоже мертв. Спрошу тут.

В общем. Я нубан.
Работаю шарпером на заводе.
Вот, недавно подпустили к проекту, на котором матерые C++'еры работали, но на шарпе.

Увидел там нечто похожее на прикриплейд.
Можете объяснить, нахуя и зачем так делать?
Аноним 17/03/24 Вск 01:12:01 #921 №3088880 
>>3088787
> C++ тред похоже мертв. Спрошу тут.
Ты конечно молодец, спросил в предыдущем плюсотреде, из которого все перекатились в новый ещё два месяца назад.
Аноним 17/03/24 Вск 01:21:36 #922 №3088884 
>>3088880
Та как узнать-то?
Вот на доброчане, царствие ему небесное, ссылку всегда оставляли на новый тред.
Аноним 17/03/24 Вск 02:17:31 #923 №3088906 
>>3088884
ОП хуй неправильно перекатил, не вставил тему в название треда
Аноним 17/03/24 Вск 07:21:22 #924 №3088960 
>>3088787
>Можете объяснить, нахуя и зачем так делать?
1 вариант - там что-то критичное, что без этого не работает никак или работает в разы хуже. Возможно дергают какую-то нативную библиотеку, которая очень древняя и никто уже не может/хочет её переписать и т.д. В моей практике такое было при работе с ЭЦП и криптопровайдерами, там без вариантов.
2 вариант - ретроградные байтоебы, привыкшие на всем экономить и считающие, что позволять компилятору и CLR самой заниматься менеджментом памяти - не тру.
Аноним 17/03/24 Вск 15:41:02 #925 №3089456 
Можно ли в шарпе "заинклудить" библиотеку внутрь библиотеки?
Что я имею ввиду.
Вот у меня есть библоитека myLib.dll. Она использует Newtonsoft.Json. Я хочу чтобы Newtonsoft.Json.dll была включена ВНУТРЬ библиотеки myLib.dll, в идеале, чтобы при использовании моей библиотеки - никто даже не знал про этот Newtonsoft.Json.dll
Можно ли такое намутить?
Аноним 17/03/24 Вск 15:42:39 #926 №3089460 
>>3089456
Наверное криво объяснил.
Короче. После билда библиотеки - я получаю 2 файлика в выходной папке: myLib.dll и Newtonsoft.Json.dll. Я хочу чтобы на выходе - был один файлик. myLib.dll
Аноним 17/03/24 Вск 15:55:13 #927 №3089476 
>>3089456
>Newtonsoft.Json.dll
Не по теме, но зачем?
Аноним 17/03/24 Вск 16:31:55 #928 №3089505 
>>3089476
Им удобно пользоваться и он выдает более предсказуемый результат и реже надо свои обработчики писать.
Аноним 17/03/24 Вск 16:59:14 #929 №3089541 
>>3079822
git
Аноним 17/03/24 Вск 17:05:53 #930 №3089561 
>>3089456
Клонируешь себе исходники ньютонсфта и вкорячиваешь их в проект с myLib с правкой неймспейсов.
Вопрос только нахуя так делать (скрывать наличие библиотеки) ?
Аноним 17/03/24 Вск 17:13:55 #931 №3089575 
>>3089561
> Вопрос только нахуя так делать

Ну. Я вот начитался гайдов. И решил сделать себе ПЛАГИННУЮ АРХИТЕКТУРУ с горячей перезагрузкой.
Собственно. И мне не нравится, что если у плагина - зависимости, то надо их руками подгружать руками постоянно. Я хотел бы, чтобы плагин был максимально самостоятельным. Одна dll положенная в нужную папочку и все. А сейчас - приходится при "установке" плагина - еще и разруливать все его зависимости, либо складывать их к основному приложению, что сам подход с: просто закинть одну dll в нужную папочку - делает ебаным и тогда уже можно забить на эти плагины и делать как обычно.

В случае если плагин без зависимостей - там на самом деле круто выходит. Чет дописал в плагине, собрал только плагин, оно перезагрузило плагин и все ок работает без необходимости останавливать и пересобирать все это дело. Но вот если пара зависимостей - уже ебано.
Аноним 17/03/24 Вск 18:09:08 #932 №3089685 
>>3089575
1. Ты похоже пытаешься сделать слишком комплексные плагины.
2. Если ты изначально подразумеваешь, что тебе нужен будет функционал ньютонсофта, то подключи его в основной проект и не парься.
3. В большинстве продакшена от ньютонсофта стараются отказываться в пользу System.Text. Да он может быть не так удобен, в нем может не быть некоторых фишек из ньютона, но он потихоньку становится новым стандартом и через несколько лет ты ньютон мало где уже встретишь.
Аноним 17/03/24 Вск 18:21:52 #933 №3089724 
В связи с последними санкциями, майки не ебнут про простым русским программистам? Не пидорнут с нугета, не начнут болочить апдейты вижлы? Или это только для компаний? пока
Аноним 17/03/24 Вск 18:23:20 #934 №3089735 
>>3089685
> Ты похоже пытаешься сделать слишком комплексные плагины
Ну. Да. А так нельзя делать разве?
У меня как-бы основное приложение это демон. Сидит в системе и не особо заметно, работает в фоне.
А все остальное - я хотел делать через плагины.
Пару плагинов тестовых - таки написал, но они как раз были маленькие, чтобы просто проверить как это работает. Сбор статистики работы там, вот это вот.
Собирался сделать плагин для "визуализации", который бы позволял при желании - еще окошко рисовать и в трее иконку и какое-то управление. Плюс - плагин, для работы со всем этим делом через веб-апи, чтобы опять же, при желании - можно было через браузер поуправлять демоном и посмотреть че там происходит.
И я даже сделал первый крупный. Но мне не нравится, что приходится руками зависимости все эти рулить. Плюс, я в этом деле новичок и боюсь, что вдруг там какие-то конфликты будут, чи шо. Вот как .NET будет вести себя. если я загружу две Assembly разных версий? Он это поймет или нет?
Аноним 17/03/24 Вск 18:54:21 #935 №3089820 
>>3089724
Уходи.
Аноним 17/03/24 Вск 19:44:41 #936 №3089861 
>>3089820
Из рф? На жаву? Давай более развернуто
Аноним 17/03/24 Вск 22:37:00 #937 №3090031 
>>3089861
на завод уходи
какая тебе жава. там IDEA которую делает жетбраинсы, которые русских послали.
так что на завод. будешь там дворником
Аноним 17/03/24 Вск 23:45:44 #938 №3090092 
>>3090031
сторожем
Аноним 18/03/24 Пнд 01:23:21 #939 №3090169 
>>3088531
во-первых, а как ты тестируешь 100к подключений? как ты подключаешь?
во-вторых, 100к на докере - не дохуя ли? Не так давно была проблема 10к на целых серверах, а ты уже 100к на каком-то докере
в-третьих, эти 100к не сидят-пердят, ядро вообще-то ебенит не в себя, обрабатывая пакеты
в-четвертых, возможно у ядра есть ограничения на создание соединений
в-пятых, очень мало данных: может у тебя цп не успевает, может памяти не хватает и в своп уходит?
Аноним 18/03/24 Пнд 06:56:12 #940 №3090260 
Всем сап!
Понадобилась помощь антонов двач выручай.
Я сам по себе далёк от программирования, тем более на сишарп, но по работе потребовалось выполнить передачу данных на прибор по UDP-протоколу. Китайские друзья предоставили код на сишарпе для выполнения этого действия, но я совершенно не понимаю, как мне запускать этот код и как им пользоваться.
Реквестирую подробный гайд как создать проект, добавить туда файл с этим кодом и запустить его используя Visual Studio Code.
Аноним 18/03/24 Пнд 07:10:39 #941 №3090267 
>>3090260
Ютуб завален видосиками по созданию проектов на шарпе в vscode, посмотри любой из них и дописывай в Program.cs что угодно.
Аноним 18/03/24 Пнд 07:41:16 #942 №3090294 
>>3089735
>Плюс - плагин, для работы со всем этим делом через веб-апи, чтобы опять же, при желании - можно было через браузер поуправлять демоном и посмотреть че там происходит.
Я х.з. как с этим сейчас, но в Core3.1 точно были проблемы с созданием новых API из подгружаемых сборок.
>Собирался сделать плагин для "визуализации", который бы позволял при желании - еще окошко рисовать и в трее иконку и какое-то управление.
Я не десктопщик, но вот есть у меня подозрение, что с этим ты прям соснешь-соснешь. Как минимум будет ебля с контекстом синхронизации и UI-потоком. Под это дело проще какой-то дополнительный клиент запускать, чем плагинами мутить.
Аноним 18/03/24 Пнд 07:47:34 #943 №3090300 
>>3089724
Ты лучше бойся, что все это заблочат с этой стороны ебанутые РКН-щики. Это как раз более вероятно.
Аноним 18/03/24 Пнд 20:23:52 #944 №3091362 
vopross.png
>>3002293 (OP)
Ребята, у меня вопрос.
Не смейтесь, я литерали даун, нужна помощь в элементарной математической программе. Надо чтобы в консоль бесконечно и последовательно печатались числа фиббоначи. Сижу уже час, мой код не делает то что нужно и я где-то на подсознательном уровне понимаю что мой код и не должен работать, но я слишком тупой чтобы написать правильный. Что я должен в нём изменить чтобы всё работало?
Аноним 18/03/24 Пнд 21:51:07 #945 №3091474 
.png
>>3091362
С тебя сто тыщ миллионов денег.
Аноним 19/03/24 Втр 01:27:24 #946 №3091677 
>>3091474
Что это блять за цикл?
Аноним 19/03/24 Втр 05:39:33 #947 №3091711 
Пипец. WPF не умеет в скрытие приложения в notification area — то, что у нас называют треем. Чертовы майкрософт.

Везде предлагают использовать библиотеку Widows.Forms, но как ее юзать, если у меня .NET, который Core?
Аноним 19/03/24 Втр 08:33:11 #948 №3091774 
>>3091711
Во первых винформс тыщу лет работает на core
Во вторых ты где то не там гуглишь. Решению для wpf миллион лет и оно переехало на core
Аноним 19/03/24 Втр 09:45:02 #949 №3091823 
>>3091711
>WPF не умеет в скрытие приложения в notification area
Always has been
Аноним 19/03/24 Втр 09:45:59 #950 №3091824 
>>3091474
в iter зачем?
Аноним 19/03/24 Втр 14:28:25 #951 №3092165 
>>3091824
убери и увидишь
Аноним 19/03/24 Втр 14:57:04 #952 №3092216 
>>3092165
Ты меня на слабо что-ли взять пытаешься? Думаешь я не уберу?
Аноним 19/03/24 Втр 15:03:46 #953 №3092224 
>>3092216
Убери, чё как чушпан? Убирай, давай!
Аноним 19/03/24 Втр 15:12:01 #954 №3092231 
>>3091474
Это был хороший цикл, может быть даже лучший, который у меня был.
Аноним 19/03/24 Втр 15:22:21 #955 №3092250 
1710850940580.png
>>3091474
Охуенный код в стиле "наеби соседа", от себя я бы добавил, чисто для удобства дебага перед сборкой бинарника и отправкой соседу, пикрелейтед:
Аноним 19/03/24 Втр 15:23:57 #956 №3092253 
>>3091677
> Что это блять за цикл?
Это:
>>3091362
> нужна помощь в элементарной математической программе. Надо чтобы в консоль бесконечно и последовательно печатались числа фиббоначи
Аноним 19/03/24 Втр 15:34:48 #957 №3092274 
1710851687585.png
>>3092250
... но если всё таки, вдруг, код нужен не соседу, а преподу в вузеке, то надо добавить что-то типа этого:
Аноним 19/03/24 Втр 17:07:59 #958 №3092419 
Шарпачи, вопрос по Блейзор и ЖС
Жпт чат говорит что бы мне взаимодействовать с ЖС библиотекой её нужно загрузить.
Мне нужно взаимодействовать с библиотекой
https://telegram.org/js/telegram-web-app.js
Её вроде как нельзя грузить себе, она должна загружаться с ТГ сервера.
Например хочу выполнить функцию close() что бы закрыть мини апку. В самом ЖС я бы сделал вроде как вот так window.Telegram.WebApp.close() и моё приложение закрылось бы, а как мне это всё скрестить с Блазером?
Помогите плиз с 1 примером.
Аноним 19/03/24 Втр 17:09:07 #959 №3092422 
image.png
>>3092419
Ссылка
https://core.telegram.org/bots/webapps#initializing-mini-apps
Аноним 19/03/24 Втр 17:19:23 #960 №3092449 
>>3092274
Так у тебя в переменных обычный int будет и ты очень быстро получишь переполнение.
Аноним 19/03/24 Втр 17:20:59 #961 №3092453 
>>3092419
https://learn.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-8.0
Аноним 19/03/24 Втр 17:41:46 #962 №3092506 
>>3092449
> и ты очень быстро получишь переполнение
Учитывая, что каждое следующее число после чтения инпута, то не очень быстро. Даже если положить книжку на клавиатуру.

...Но это не важно, ведь в условии задачи, сформулированной аноном, не говорится ничего о том, что в решении задачи нужно что-то предпринимать против переполнения.
Аноним 19/03/24 Втр 17:43:04 #963 №3092509 
>>3092506
> не очень быстро. Даже если положить книжку на клавиатуру.
Ладно, я проверил и я спиздел. Всё равно быстро.
Аноним 19/03/24 Втр 17:49:41 #964 №3092523 
2024-03-1917-42-40.png
2024-03-1917-42-45.png
Как бороться с этой штукой? Достала.
В какой-то момент перестает видеть связь между xaml и кодбихайндом. Подсвечивает ошибку InitializeComponent и любые попытки обратиться к компоненту xaml по имени.

Пытался чистить .vc, не помогало. Только после чистки obj сработало.
Аноним 19/03/24 Втр 17:57:23 #965 №3092539 
2024-03-1917-51-34.png
2024-03-1917-53-52.png
>>3091774
>Во первых винформс тыщу лет работает на core
У меня конфликт с моим проектом. Пикрил. Мой проект на net 8, а либа Windows.Forms подписана как Framework.

>>3091823
Встроенного решения не нашел. Предлагают сторонние библиотеки, но я не хочу ради этой мелочи добавлять.
Аноним 19/03/24 Втр 17:59:34 #966 №3092544 
>>3092523
> Как бороться с этой штукой
> Только после чистки obj сработало.
Сам же ответил. Чистить обдж, чистить вилкой. Для удобства можешь через dotnet clear
Аноним 19/03/24 Втр 18:04:30 #967 №3092559 
>>3092539
> Встроенного решения не нашел. Предлагают сторонние библиотеки, но я не хочу ради этой мелочи добавлять.
Вот же пишут по первой же ссылке из гугла
>NotifyIcon is not implemented in WPF as it is in Forms, but you can still use the Windows Form NotifyIcon, it resides in the System.Windows.Forms namspace.
Ты можешь использовать иконку из формсов в ВПФ-приложении. И это не стороннее решение. Всё встроено в дотнет искаропки.
Аноним 19/03/24 Втр 18:07:23 #968 №3092566 
>>3092559
>Always has been
@
>NotifyIcon is not implemented in WPF

>Ты можешь использовать иконку из формсов в ВПФ-приложении.
Не могу, я прикрепил скриншот. У меня NET8, а библиотека Windows.Forms на Framework.
Аноним 19/03/24 Втр 18:12:47 #969 №3092582 
>>3092566
> а библиотека Windows.Forms на Framework.
Значит у тебя что-то недоустановлено.
Попробуй в отдельной папке создать новое приложение винформс, увидишь, оно у тебя создастся как нет8.
Аноним 19/03/24 Втр 18:17:07 #970 №3092594 
1710861426512.png
1710861426539.png
>>3092566
Вот пожалуйста, всё создаётся и запускается на восьмёрке.
Аноним 19/03/24 Втр 18:18:54 #971 №3092598 
2024-03-1918-15-35.png
>>3092582
Да, вижу. Но как объединять платформы?
Через добавление референсов доступна библиотека только на Framework, а она не совместима.

Платформы объединять я не знаю как.
Аноним 19/03/24 Втр 18:25:34 #972 №3092612 
>>3092598
Щас погодь, я попробую воспроизвести у себя. Если я правильно понял, мне нужно:
1. Создать ВПФ приложение.
2. Попытаться подключить класс NotifyIcon из формсов.
3. Выскочит ошибка и ничего не получится.

Всё верно?
Аноним 19/03/24 Втр 18:27:38 #973 №3092619 
>>3092598
>>3092594
Нашел как
https://stackoverflow.com/questions/72058558/how-can-i-add-system-windows-forms-to-wpf-application-when-adding-via-reference

- Removed reference/dependancy entirely
- Right-click project, Unload
- Right-click project, Edit project file
- Add the following:
<PropertyGroup>
<TargetFramework>net6.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
- Reload project file
- Add "using system.windows.forms" to the top.
Аноним 19/03/24 Втр 18:33:07 #974 №3092636 
>>3092612
Да, я нашел как >>3092619
Короче надо выгрузить проект, добавить в свойства проекта
> <UseWindowsForms>true</UseWindowsForms>

Потом снова загрузить проект, и тогда будет доступна библиотека
> using System.Windows.Forms;

Единственное, что выскочит неоднозначность некоторых элементов, типа Application. Пришлось писать так
> public partial class App : System.Windows.Application{}

Библиотека System.Windows.Forms загружается по умолчанию во все документы.
Аноним 19/03/24 Втр 18:33:57 #975 №3092642 
1710862436381.png
>>3092619
Лол, я литералли сделал то же самое и уже собирался показывать результаты. Единственный нюанс. Блять, и это уже опередили.
Аноним 19/03/24 Втр 18:36:36 #976 №3092650 
2024-03-1918-34-27.png
>>3092642
А есть вариант как глобал юзинги отредактировать? Я знаю про отключение полностью, но мне кажется, что тут надо просто исключить строку с винформсами.
Аноним 19/03/24 Втр 18:38:38 #977 №3092655 
>>3092636
Чтобы не ебаться с неоднозначностью сделай солюшен из двух проектов, один - либа нет8(!) на винформсах, в которой всё подключено и реализован твой трей, а второй проект - твоя приложуха на ВПФ, в csproj запихиваешь ссылку на либу и всё будет собираться одним заходом.
Аноним 19/03/24 Втр 18:39:38 #978 №3092656 
>>3092650
Есть, но сейчас тебе это не нужно.
Никакие отключения тебе не помогут. просто логически раздели решение на два проекта: >>3092655
Аноним 19/03/24 Втр 18:39:51 #979 №3092657 
>>3092642
>>3092650
Нашел.

<ItemGroup>
<Using Remove="System.Windows.Forms"/>
</ItemGroup>


>>3092655
Хорошая идея.
Аноним 19/03/24 Втр 18:40:53 #980 №3092661 
>>3092657
> Нашел.
> Using Remove
Опасная хуйня, нирикаминдую.
Аноним 19/03/24 Втр 18:43:11 #981 №3092667 
>>3092612
2 взять готовую либу типа
https://github.com/hardcodet/wpf-notifyicon
или эту не пробовал
https://github.com/nullsoftware/TrayIcon

а не заниматься херней
Аноним 19/03/24 Втр 18:47:47 #982 №3092681 
>>3092667
Да не хочу я для такой мелочи либу качать. Мне не нужны какие-то сложные нотификации со вплывающими сообщениями или динамическими иконками.
Аноним 19/03/24 Втр 18:50:19 #983 №3092688 
>>3092681
Двачую.
Аноним 19/03/24 Втр 18:51:29 #984 №3092691 
>>3092667
> а не заниматься херней
Это не херня.
Анон вручную напишет реализацию простой иконки и разберётся, как это работает. И прокачает скилл.
Аноним 19/03/24 Втр 19:04:41 #985 №3092714 
>>3092691
зачем? вот я не знаю и не вижу смысла знать как она делается в этих формсах, когда формсы давно забыты мной и нахрен не нужны.
Аноним 19/03/24 Втр 19:17:50 #986 №3092763 
>>3092714
> формсы давно забыты мной
Но они не забыты майками и регулярно обновляются, допиливаются, обогащаются фичами. Почему-то у майков они не легаси и не депрекатед. Например, туда завезли МВВМ. Так что, это всё твоё субъективное мнение.
> и нахрен не нужны
Тебе. Не забывай добавлять это слово, манипулятор мамкин. Они не нужны тебе. Говори за себя, а не за всех.
Аноним 19/03/24 Втр 19:18:33 #987 №3092767 
>>3091474
>>3092250
>>3092274
Пасиба за помощь пацаны, как стану миллионером, сто тыщ денег каждому занесу
Аноним 19/03/24 Втр 19:21:15 #988 №3092774 
>>3092767
Тебе спасибо. Благодаря тебе, вот этот анон >>3091474 напомнил мне, насколько гибок сишный for. Там такие циклы можно пилить, что охуеть просто!
Аноним 19/03/24 Втр 19:25:29 #989 №3092784 
>>3092763
так они и винапи допиливают. пиши на голом винами, чего уж там.
тот, кто озаботился вопросом иконки в трее пишет на WPF, так что ему от поддержковости винформсов ни холодно ни жарко.

да они многим не нужны. зачем писать на том, что тебя ограничивает. MVVM целый ух ты ж. А в остальном все так же переопределять OnPaint?
Аноним 19/03/24 Втр 21:47:44 #990 №3092993 
>>3092784
> пиши на голом винами, чего уж там
И напишу.
И ты никак мне не помешаешь.
> А в остальном все так же переопределять OnPaint?
Может быть и переопределять. Я мокрописечки не писал, мне это никогда не требовалось. Поэтому я даже не знаю, надо ли это делать сейчас.
> зачем писать на том, что тебя ограничивает
Во-первых, любой язык ограничивает. Любая среда/платформа ограничивает. Мы просто выбираем то, в чём ограничений меньше лично для нас. И поэтому наш спор - спор о вкусах, и он принципиально неразрешим. Все останутся при своём всё равно.
Во-вторых, развитие рождается из преодоления ограничений. Когда нет ограничений - нет и развития. Эта истина доказана не только в кодинге, и не столько в кодинге, сколько в куче других областей человеческого знания.
Аноним 19/03/24 Втр 22:08:22 #991 №3093009 
>>3092993
>Любая среда/платформа ограничивает
но мы не выбираем другой язык. мы внутри одного языка и плафтормы. просто выбираем гуи фреймворк. И винформс МЕНЕЕ ГИБКИЙ
Аноним 19/03/24 Втр 22:15:38 #992 №3093013 
>>3093009
Говори за себя, одноязычник, не мычи.
Аноним 19/03/24 Втр 22:22:11 #993 №3093014 
>>3093013
померяемся количеством языков? сбежишь в ужасе

впрочем причем тут языки если мы говорим про один язык. тебе просто хотелось сманеврировать, но вышло уныло
Аноним 19/03/24 Втр 22:38:26 #994 №3093022 
>>3093014
> тебе просто хотелось сманеврировать
НЕТ ТЫ
Аноним 19/03/24 Втр 22:40:53 #995 №3093026 
>>3093022
для зумеров - WPF потеснил винфорс именно благодаря своей концепции lookless контролов. То есть позволял простыми средствами сделать прогрессбар в кнопке в комбобоксе круглый без смс сиськи
а не пердолится в онпаинт или же покупать платные контролы.

винформс чисто по природе никогда не сможет в это. вот просто никогда.
Аноним 19/03/24 Втр 22:53:27 #996 №3093030 
>>3093026
> для зумеров - WPF потеснил винфорс именно благодаря своей концепции lookless контролов. То есть позволял простыми средствами сделать прогрессбар в кнопке в комбобоксе круглый
Еще раз:
>>3092993
> Я мокрописечки не писал, мне это никогда не требовалось. Поэтому я даже не знаю, надо ли это делать сейчас.
Аноним 19/03/24 Втр 22:54:06 #997 №3093031 
>>3093026
Ты уверен, что зумер здесь я, а не ты?
Аноним 19/03/24 Втр 23:05:55 #998 №3093034 
Откуда берутся проекты, в которых 5+ уровней наследования? Как люди это делают?
Я сколько не пытался, даже в ебанутых случаях, когда решаю сделать: MyObject от которого все наследоваться будут - не выходит больше 3х.
Можете рассказать о своем опыте написания систем, с 5+ уровнями наследования?
Аноним 19/03/24 Втр 23:16:21 #999 №3093039 
>>3093030
> мне это никогда не требовалось
твоя личная ситуация.

>>3093031
абсолютли. количество активных языков что я использую более 5
количество которых изучал и зарабатывал на них деньги - более 10
так что прячь свой зумерский ...цензура... и смирись

>>3093034
в гуи это норма
Аноним 20/03/24 Срд 02:37:02 #1000 №3093166 
Как вкатились в шарп?
>Ограничится доступ к среде разработки программ Visual Studio, а также к Visual C++, Visual Studio Code.
https://tass.ru/ekonomika/20287331
Аноним 20/03/24 Срд 02:45:31 #1001 №3093169 
>>3093166
Community версию никто трогать не будет, а облачные сервисы и так хуй оплатишь.
Аноним 20/03/24 Срд 02:45:37 #1002 №3093170 
>>3093166
Не понял, они же уже всё приостановили, отменили, запретили и ограничили ещё в 2022.
Аноним 20/03/24 Срд 07:09:55 #1003 №3093242 
>>3093166
Для разработки на шарпе достаточно dotnet sdk + vim
SDK лежит на гитхабе под MIT, бери. Если такой шизик и боишься, что закроют - качай, собирай и пользуйся.

А вообще, если так уж боишься - бери русский-православный ДРАКОН и ищи вакансии)))
Аноним 20/03/24 Срд 10:34:35 #1004 №3093428 
>>3093034
>Можете рассказать о своем опыте написания систем, с 5+ уровнями наследования?
Пример из EF

ListConcreteRepository
наследуется от:

EfListProjectionRepositoryBase<TDbContext, TItem, TItemId, TParameters>
наследуется от:

EfListProjectionReaderRepositoryBase<TDbContext, TItem, TParameters>
наследуется от:

EfListProjectionReaderRepositoryBase<TDbContext, TSourceItem, TTargetItem, TParameters>
наследуется от:

EfRepositoryBase<TDbContext, TItem>
Аноним 20/03/24 Срд 12:41:53 #1005 №3093538 
>>3093242
> бери русский-православный ДРАКОН и
ДРАКОН не самостоятелен. Я же написал об этом в клаус-треде. Он по факту сам ни во что не компилируется, он из нарисованных схем генерирует текст на си.
Аноним 21/03/24 Чтв 07:11:12 #1006 №3094490 
И снова Блазор.
Как принять строку параметров в которой есть /#tgWebAppData=query_id
# - решётка руинит все, я даже не могу попасть по адресу /zalupa#WebAppData
Этот параметр выставляет телеграм при передаче параметра WebAppData

Если без этой модной хуйни а просто разобрать вот так param = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(uri.Query);
Там тупо пусто в uri.Query нихуя нету, # - решетка все отсекает.

Можно конечно через ЖС достать, но бля неужели как то полегче нельзя то?
Аноним 21/03/24 Чтв 14:53:22 #1007 №3094803 
>>3094490
Для чего тебе нужен этот адрес?
Аноним 21/03/24 Чтв 16:22:57 #1008 №3094915 
>>3094490
Может быть, надо экранировать решетку?
Аноним 21/03/24 Чтв 17:29:50 #1009 №3094986 
Посоветуйте книжку c# для продвинутого уровня
Аноним 21/03/24 Чтв 19:09:35 #1010 №3095123 
>>3094986
Насколько продвинутого?
Аноним 21/03/24 Чтв 20:44:30 #1011 №3095209 
>>3094986
CLR via C#
Аноним 21/03/24 Чтв 21:24:09 #1012 №3095248 
>>3094986
Зачем тебе книги?
Аноним 22/03/24 Птн 03:10:42 #1013 №3095496 
>>3095248
На пути от джуна к мидлу
>>3095123
На ютубе не так последовательно рассказывается
>>3095209
Спасибо
Аноним 22/03/24 Птн 07:45:05 #1014 №3095542 
>>3094803
>>3094915
Веб асембли просто не сразу подхватывает адрес через ParseQuery(uri.Query) и загружает его через некоторое время. Что мне кажется не очень логично. Страница отобразилась, данных нет, и через 1-2 сек они подгружаются.
Аноним 22/03/24 Птн 11:05:48 #1015 №3095688 
image.png
image.png
Анон шарящий в Blazor помоги плиз.
Вот я хочу создать проект в котором у меня WebAssembly клиент и сервер к нему.
Все страницы полностью WebAssembly и загружаются на клиент. Юзер будет работать в клиенте изредка клиент будет делать запросы к WebApi и обновлять данные.
Дак вот я создаю проект Auto Создаётся клиент и сервер. Я чет пытаюсь перенести всё в клиент но не получается. Ошибка 2 эндпоинта "/" у меня, нихуя не понимаю что менять что убирать.
2 проекта в одном решении как ты говорил легче в разработке, 1 кнопкой можно запускать.
Можно сделать так. Простой WebAssembly проект отдельный, его разрабатываем, и отдельный Web Api проект на который приходят запросы. Но как мне кажется не сильно удобно.
Вот сейчас у меня тестовый Auto проект я захожу на страницу с WebAssembly но соединение с сервером у меня есть хз почему. Я предполагаю что App.razor грузится с сервера а тело страницы с WA. Как перенести я хз.
Подскажи плиз как сделать что бы было по красоте то.
У меня всё упирается в то что бы снизить максимально нагрузку на сервер. Мини игра будет играться на клиенте а результаты отправлять на сервер. Если играть на сервере то уж очень дохуя нужно будет делать расчётов и держать подключения не резонно так как нет денег на дорогой сервер а я рассчитываю что будет дохуя людей.
Подсоби плиз.

И я не совсем понимаю во что Auto проект компилируется. Предполагаю что BlazorWebASPS.dll отдаёт BlazorWebASPS.Client.dll клиенту. Сложна вкатываться в новую технологию то(
Аноним 22/03/24 Птн 14:08:53 #1016 №3095867 
>>3095542
Можешь показать что у тебя в App.razor?

>>3095688
Контроллеры ты можешь и в свой серверный проект добавить, да и вообще что угодно из ASP.NET, создай проект с шаблоном Web API и глянь че там в builder и app добавляется в Program.cs, можешь потом Swagger для удобства подключить.

Соединение у тебя есть по двум возможным причинам:
1. У тебя в браузере не был закэширован рантайм и приложение в режиме Auto запустилось на серверном рендере, если сильно нужно и клиент готов подождать можешь настроить приложение для режима WebAssembly.
2. При дебаге через студию поддерживается как минимум одно подключение для непосредственно дебага, попробуй через Publish собрать проект и посмотреть что там будет.
Аноним 22/03/24 Птн 15:15:05 #1017 №3095943 
>>3095867
Бля ну я тупень, на релизе подключений нет. А я уже отдельно вебАпи начал пилить(
Ладно всё равно всё надо перенести в чистый проект.
Просто пиздец как всё не понятно и не логично.
Проект веб асембли компилится в одно, Ауто вроде как и веб асембли и сервер компилится в другое, сервер в третье, небось гибрид еще в четвёртое.

>Можешь показать что у тебя в App.razor?
Не покажу уже(
Я уже забыл как я там пытался все перенести, и отменил все действия.

Думаю всё таки отдельно проект с WebApi и отдельно под него клиент на WebAse,bly буду делать что бы когда что то я не так сделал в проекте то пришлось бы переписывать половину.
Аноним 22/03/24 Птн 15:39:49 #1018 №3095973 
>>3095943
Зато ты получил ценный опыт о том, как важно держать данные отдельно от кода, и как важно делать код, который ничего не знает о соседних участках кода.
Аноним 22/03/24 Птн 16:12:09 #1019 №3096028 
>>3095943
Да ещё чтоб код не проёбывать можешь что такое Git глянуть.
Аноним 22/03/24 Птн 16:26:14 #1020 №3096054 
изображение.png
Всем привет. Пытаюсь реализовать восстановление пароля, а конкретно хочу сделать ссылку, которая будет выслана на почту, чтобы потом при переходе по ней открывалась страница с формой восстановления пароля. Использую cqrs. Вопрос: как генерировать url вне контроллера ручками прописывать? А если поменяется порт и т.д? Вся логика перенесена в handler. На переполнении стека вычитал про new UrlHelper(HttpContext.Current.Request.RequestContext), но оно не работает вне контроллера.
Аноним 22/03/24 Птн 16:29:26 #1021 №3096062 
>>3096028
но только после меркуриала.
Аноним 22/03/24 Птн 17:45:56 #1022 №3096149 
>>3096054
>Использую cqrs
зочем
Аноним 22/03/24 Птн 17:53:08 #1023 №3096155 
Кто нибудь тут баловался с YooMoney API? Там что, для регистрации приложения реально работающий сайт нужон? И что делать если нету...
Аноним 22/03/24 Птн 18:01:03 #1024 №3096165 
>>3096054
Так aspnet когда поднимает сервер берет порт и доменное имя из конфигов, конкретно из launchSettings.json. Создавай конфигуратор на этом файле и пропихивай в хендлер/сервис.
Аноним 22/03/24 Птн 19:26:15 #1025 №3096292 
АЖ ТРЕСЕТ НАХОЙ
Вот есть нжинкс конфиг

В нём локации
location / - работает нормально
location /api/ - нихуя не работает, приложение по site.com/api/test/ не открывается. Когда вешаю это приложение на / то site.com/api/test/ открывается.
Я уже блять по разному /api /api/ api/ api пробывал нихуя.
Как пофиксить эту поебенить?
Смысл в том что по / и остальным адресам где нет /api/ открывается одно приложение а с /api/ другое
Аноним 22/03/24 Птн 19:54:04 #1026 №3096363 
Существует ли паттерн, похожий на билдер, но при этом подразумевающий возможность возвращать промежуточный результат при необходимости?
Аноним 22/03/24 Птн 20:34:50 #1027 №3096445 
>>3096149
Приколная структура получается
Аноним 22/03/24 Птн 20:35:45 #1028 №3096447 
>>3096165
Бля, точно. Спасибо. Я что-то вообще забыл про это
Аноним 22/03/24 Птн 20:48:43 #1029 №3096462 
>>3096363
Паттерн Сеттер.
Аноним 22/03/24 Птн 20:49:46 #1030 №3096465 
>>3096363
Типа такого?
> builder.build(out buildresult br).configure(out configresult cr).connect(out connectionresult cnr);
> if (!cr.isConfigured()) { rebuild(); }
Аноним 23/03/24 Суб 06:34:26 #1031 №3096670 
Есть десктопное приложение, в котором пользователь может создавать проекты. Сейчас проект представляет собой просто папку с файлами и джсонкой. Хочу теперь эту папку архивировать и зашифровать, чтобы только моя апа могла смотреть файлы. Как этого добиться? Архивирование то не проблема, а вот шифрование уже вызывает трудности
ASP NET core Аноним 23/03/24 Суб 13:41:23 #1032 №3096819 
При выполнении кода пишет Подключение не защищено
Как эту хуету отключить?
Аноним 23/03/24 Суб 15:11:54 #1033 №3096894 
Как в Web API контроллере принять файл с хтмл формы?
Аноним 23/03/24 Суб 15:31:11 #1034 №3096924 
>>3096894
IFormFileCollection files = Request.Form.Files;
Аноним 23/03/24 Суб 16:39:52 #1035 №3097019 
Поясните по хардкору
MAUI это замена всем хамаринам\wpf\winform\UWP и прочему и теперь это "всё в одном"? А то формально то winforms в 2006 еще приуныл, wpf в 2012, UWP как в 2015 вышла так и не взлетела. MAUI 2022 поэтому считается актуальной или всё еще нужно духов wpf всяких призывать?
Аноним 23/03/24 Суб 16:46:36 #1036 №3097024 
>>3097019
Даже винформы бывает нужно
Прдожди года 4, MS высрет еще́ один фреймворк для гуя, а MAUI станет легаси.
Аноним 23/03/24 Суб 17:13:33 #1037 №3097053 
>>3097019
Maui это абстракция над нативными гуями, в случае винды это winui. Так как winui кривая тормозящая поделка, то и maui будет ничем не лучше. Wpf в целом неплохой выбор, его даже обновляют временами. добавили диалог выбора папки в net 8. Также и uwp, хоть и забросили, но это все еще самый производительный и стабильный фреймворк для винды. Впрочем и то и другое нахуй не нужно, когда есть Avalonia UI.
Аноним 23/03/24 Суб 19:23:48 #1038 №3097275 
Насколько хорошая идея писать себе сахар в Extensions? Или лучше в Utils классах, просто думаю может получиться ситуация где оттестированные методы из какой-либо либы от джуновских надстроек потом не разберёшь.
Аноним 23/03/24 Суб 19:35:50 #1039 №3097290 
>>3097053
> и другое нахуй не нужно, когда есть Avalonia UI
Вопрос закрыт последним постом в ищье:
https://github.com/AvaloniaUI/Avalonia/issues/3023
Аноним 23/03/24 Суб 19:37:41 #1040 №3097293 
>>3097290
Собственно что такого? Авалония кроссплатформенна, поэтому имеет свой дизайн контролов, а не подстраивается под системный. Но на том же гитхабе есть набор fluent стилей.
Аноним 23/03/24 Суб 19:41:34 #1041 №3097299 
>>3097293
> имеет свой дизайн контролов, а не подстраивается под системный
Темы - это системная задача, это задача ОС. Я хочу в ОС выставить серобуромалиновую тему и ожидаю, что все приложения станут серобуромалиновыми, но тут я открываю мокропиську наговняканную на говнолонии, а у неё вендовый срюент, хотя я сижу на линухе.
Аноним 23/03/24 Суб 19:46:44 #1042 №3097309 
>>3097299
Нет, внешний вид приложения это задача приложения. Задача ОС отобразить окно, все остальное ее не касается.
Аноним 23/03/24 Суб 19:59:42 #1043 №3097333 
>>3097309
Пошёл нахуй, зумер.
Аноним 23/03/24 Суб 20:00:13 #1044 №3097335 
Вместе со своей говнолонией.
Аноним 23/03/24 Суб 20:01:33 #1045 №3097338 
>>3097333
>>3097335
Нихуя себе разрыв.
>>3097333
> , зумер.
Довольно иронично, учитывая, что сама идея того, что приложения должны подстраиваться под ос, сугубо зумерская.
Аноним 23/03/24 Суб 20:04:35 #1046 №3097343 
>>3097338
> сама идея того, что приложения должны подстраиваться под ос, сугубо зумерская
> зумер аппелирует к невежеству
Забавный зумер.
Аноним 23/03/24 Суб 20:10:11 #1047 №3097349 
>>3097343
А, так ты шизик, тогда вопросов нет
Аноним 23/03/24 Суб 20:16:05 #1048 №3097362 
>>3097349
> зумер натужно пытается хотя бы загазлайтить
Глупый зумер.
Аноним 23/03/24 Суб 20:37:19 #1049 №3097412 
Вы бы вместо срача ради срача лучше по MAUI ответ нормальный дали а не "ну порой всё нужно бывает" это новая мета или никто нахуй не пользуется, на работе нужна или там шаманы духов легаси wpf вызывают еще? Какой стек вообще сейчас по шарпу
Аноним 23/03/24 Суб 20:52:38 #1050 №3097433 
>>3097412
> MAUI ответ нормальный дали
> никто нахуй не пользуется
ЗЫС.
> Какой стек вообще сейчас по шарпу
99% посетителей пилят бэк.
Фронт весь в вебе на жс.
Аноним 23/03/24 Суб 20:57:01 #1051 №3097437 
Как Blazor WebAssembly узнаёт что надо перекачать клиент?
Вот к примеру юзер зашёл на сайт, клиент закачался, начал пользоваться сайтом. Потом закрыл сайт. Есть ли время жизни у клиента? Если юзер через минуту зайдет то что будет? Клиент снова будет закачан либо будет использован старый? Как я могу подать сигнал что нужно перекачать клиент? У меня только Blazor WebAssembly приложение + web api
Аноним 23/03/24 Суб 20:58:52 #1052 №3097438 
>>3097437
Клиент умирает вместе с закрытием вкладки браузера. Сборка хешируется на клиенте. Узнает от обновлении по хешам, которыми браузер обменивается с сервером во время загрузки странички.
Аноним 23/03/24 Суб 21:00:19 #1053 №3097439 
>>3097438
Чётко, спасибо.
Аноним 23/03/24 Суб 21:06:10 #1054 №3097443 
>>3097439
Уточню, что я про 8 блазор говорю, там все именно так. Но первое утверждение для любого васма верное.
Аноним 23/03/24 Суб 21:21:34 #1055 №3097454 
>>3097443
А как можно передавать инфу о юзере из страницы в страницу?
Вот есть у меня класс User. В нём хранятся данные пользователя, ну там счёт очки деньги и тд и тп, как только юзер зашёл на главную его профиль загрузился. Потом он к примеру переходит в страницу shop, в параметре компонента передать User ? Далее он в shop что то купит, будет отправлен post запрос на сервер, там будет списание проверка и в ответе придёт новый User в замен старого. А если юзер нажмёт кнопку назад? Как передать в прошлый компонент параметр?
Аноним 23/03/24 Суб 21:52:24 #1056 №3097485 
>>3097454
Через параметр нормально. Можно через синглтон вью модель - на васме все сингл тон, так что можешь не париться за лайф тайм сервисов.

Создай евент, подпиши на него все компоненты, которые как-то взаимодействуют со стейтом юзера. В хендлере этого евента вызывай StateHasChanged(). Дергай эвент, когда модель юзера меняется. Таким образом, любой компонент, который тронул юзера, сообщит всем остальным компонентам, что им нужно перерисоваться.
Аноним 23/03/24 Суб 22:27:51 #1057 №3097507 
>>3097454
Вот у тебя сервис UserService:
User User {get; set;} = null!;
Action UserHasChanged {get; set;} = null!;


В OnInitializedAsync() индекса ты делаешь:
var response = await httpClient.GetAsync("/getUser");
UserService.User = await response.Content.ReadAsJsonAsync<User>();
if (UserService.User is null) { //приложухой пользоваться не даешь - показываешь оверлей, что у тебя что-то сломалось, приходите позднее }


Компонент, который что-то делает с юзером инициализируется OnInitialized(), там у тебя:
UserService.UserHasChanged += () => {
CurrentUser = UserService.User;
StateHasChanged();
};

[Inject] UserService UserService {get; set;} = null!;
ComponentName.User CurrentUser {get; set;} = null!; // к этому проперти у тебя привязаны контролы в этом компоненте. (можно привязаться к UserService.User, но тогда new для юзера делать нельзя)


Пользователь внес изменения и нажал Ок:
<Button Text="Ok" @onclick=@(OnOkClicked)>
ComponentName.OnOkClicked()
{
UserService.UserHasChanged?.Invoke(); //все инициализированные компоненты, подписанные на этот делегат обновят ссылку на юзера и стейт своих контролов
// опционально закрываешь текущий оверлей, который ответственный за показ компонента ComponentName
}



Правда, если используешь NavigationManager() и прыгаешь по пейджам, то у тебя не SPA и этот подход тебе не подходит. Переделывай на SPA или пользуйся квери параметрами или на каждой страничке переспрашивай юзера у сервера и в кнопке Ок пости юзера обратно.
Аноним 23/03/24 Суб 22:38:28 #1058 №3097511 
>если используешь NavigationManager() и прыгаешь по пейджам, то этот подход тебе не подходит
Уточню, что для васма это может быть не точно - там скойпед сервисов нет, а синглтону плевать на NavigateTo(). Так что, лучше затести этот момент сам.
Аноним 23/03/24 Суб 22:41:14 #1059 №3097514 
>>3097485
>на васме все сингл тон
Наверное вопрошающий не воспользуется этой информацией в рамках своей задачи, но Transient там работает как и должен.
Аноним 23/03/24 Суб 23:16:47 #1060 №3097539 
>>3097507
SPA в смысле у меня одна страница "/" и на ней только компоненты меняются? Вроде как нет, у меня будут разные страницы.

Я вот сейчас подумал можно попробовать сделать типо сервис AddSingleton с хранилищем User как ты писал выше. А потом все действия проходят через методы этого User. Например покупка чего лобо User.buy("zalupa"), делаю запрос на апи, покупаю возвращаю обновлённого юзера, обновляю юзера и после делаю StateHasChanged(), на странице все должно поменятся, и если юзер переходит на другую страницу то снова дёргаю с AddSingleton.

Я еще плохо понимаю как относится к этому веб ассембли, вроде похоже на обычное приложение а вроде и нет.
Спасибо за советы.
ПЕРЕКАТ Аноним 23/03/24 Суб 23:17:59 #1061 №3097540 
>>2821627 (OP)
>>2821627 (OP)
>>2821627 (OP)
Аноним 23/03/24 Суб 23:28:55 #1062 №3097547 
>>3097539
Бля и я забываю что можно создавать свои классы, и ебеню все в @code{}
Аноним 23/03/24 Суб 23:33:55 #1063 №3097550 
>>3097539
Ну в общем в рамках васма - у тебя в любом случае spa и NavigationManager погоды не сделает. Стейты сбрасываться не будут и ты можешь без проблем пользоваться статическими классами. Но это лучше затестить.

Поправите, если я хуйню пишу.
Аноним 24/03/24 Вск 04:50:14 #1064 №3097630 
Продолжаем сидеть тут. Даун-перекатчик >>3097540 не только проебал шапку, но и тег не поставил.
Аноним 24/03/24 Вск 07:53:40 #1065 №3097655 
>>3097275
Если работаешь один над проектом, то нормально. Если не один, то никто кроме тебя пользоваться не будет и получится, что все в разнобой.
Аноним 24/03/24 Вск 09:01:56 #1066 №3097668 
>>3097655
Жиза, меня это очень обижает. Будто коллеги мне доверяют моему коду...
Аноним 24/03/24 Вск 09:28:23 #1067 №3097674 
>>3097630
Давайте правильно перекатим, пожалуйста, у меня тред тормозит. Сжальтесь!
Аноним 24/03/24 Вск 09:35:05 #1068 №3097677 
Есть ли какой то паттерн или названия для моего случая?

Есть данные которые отправляются на Апи. Клиент может с разным RPS отправлять данные. К примеру клиент отправляет 1 RPS, но сервер тормозит и не принимает так быстро, запросы падают в очередь, очередь продвигается по мере ответов сервера.
Так то в голове я примерно представляю как это сделать но мб уже готовое есть.
Аноним 24/03/24 Вск 11:30:13 #1069 №3097723 
>>3097677
Да. Kafka.

А называется по умному это очередью сообщений. Довольно необычно, да. я понимаю.
Аноним 24/03/24 Вск 12:22:41 #1070 №3097761 
.jpg
ПЕРЕКАТ!!!

>>3097760 (OP)
>>3097760 (OP)
>>3097760 (OP)
comments powered by Disqus

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