Этого треда уже нет.
Это копия, сохраненная 2 апреля 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
.png331 Кб, 1044x1122
C#/Сишарп/.NET Тред #21 /csharp /csharp/ 1797054 В конец треда | Веб
Существует множество различных платформ и языков программирования, однако среди них нет более элитного, чем C#. Это поистине язык богов, сочетающий в себе простоту использования с поистине неограниченными возможностями. Знание C# — прекрасный детектор современного, умного и успешного человека. Изучение платформы .NET безошибочно указывает на успешного в будущем человека.
ITT элита продолжает обсуждает будущее этого прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.

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

1. Ресурсы:
- http://stackoverflow.com/questions/tagged/c#
- http://www.tutorialspoint.com/csharp/
- http://professorweb.ru
- https://metanit.com/
- http://net-informations.com
- http://habrahabr.ru/hub/csharp/

2. Онлайн-компиляторы:
- https://dotnetfiddle.net/ - возможно лучший вариант. Встроено немного убогое, но все-таки автодополнение и проверка синтаксиса.
- http://ideone.com/
- http://csharppad.com/
- http://www.tutorialspoint.com/compile_csharp_online.php
- http://rextester.com/l/csharp_online_compiler

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

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

5. Какую ИДЕ выбрать?
Для Windows самым очевидным вариантом будет Visual Studio (https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx). Студия распространяется в двух редакциях: бесплатная коммьюнити-версия и платный энтерпрейс эдишн. В большинстве случае будет достаточно Community-версии: она поддерживает и C#, C++, VB.NET и F#, а так же имеет возможность установки дополнений
Для мака и никсов самый юзабельный вариант - MonoDevelop ( http://www.monodevelop.com/download/ ).
Для vim можно использовать OmniSharp ( https://github.com/OmniSharp/omnisharp-vim ).
Кросплатформенный полуредактор/полуIDE VS Code ( https://www.visualstudio.com/en-us/products/code-vs.aspx )
Также существуют плагины для Atom'а и Sublime Text, но функциональность там достаточно сильно урезана.
Кроме того, в данный момент JetBrains активно пилит свою IDE для шарпа (Project Rider), вероятно в ближайшее время станут доступны первые EAP. IDE заявлена как кросплатформенная, со всем решарпер-функционалом, поддержкой отладки, моно и .net core.
SharpDevelop - еще одна IDE для C#, отличается малым размером (около 20мб) и опциональной портабельностью, при этом имея дизайнер WinForms и WPF, а также интеграцию с FxCop, StyleCop и прочими ништяками. Если хочется что-то по быстрому набросать, а выкачивать гигабйты нет желания, то возможно SharpDevelop будет лучшим вариантом.

6. С# для мобильной разработки
Если нужны инструменты для разработке под мобилы, смотри сюда - https://docs.microsoft.com/ru-ru/visualstudio/cross-platform/cross-platform-mobile-development-in-visual-studio?view=vs-2019.
Из актуальной литературы
- Xamarin Mobile Application Development
- Xamarin Essentials

7. Дополнительные инструменты для разработки на C#
LINQPad - сорт оф REPL, с возможностью быстрого подключения к БД и удобной визуализацией данных
dnSpy - декомпилятор, малоизвестный форк ILSpy, где реализована возможность модификации IL-кода прямо в EXE и DLL файлах, отладка IL-кода и много других фич для reverse engineering'а. Плюс няшные темы как в студии
dotPeek - бесплатный декомпилятор от JetBrains
scriptcs - для запуска C# кода как скриптов, возможность использовать как REPL

8. Расширения для студии
ReSharper - одно из известнейших. Рефакторинги, умный автокомплит, настраиваемый стиль кода. Платный, но можно стянуть с торрентов
Supercharger - показывает "карту" с классами, методами и всем остальным сбоку от кода с возможностью прыгать по ним
Indent Guides - показывает вертикальные линии на каждом уровне отступов.
Format document on Save - форматирует код каждый раз при сохранении документа
Code alignment - Выравнивает код по указанным символам. Удобно, например, при инициализации словарей или в перечислениях

Обзор Roslyn: https://github.com/dotnet/roslyn/wiki/Roslyn Overview
Новые возможности C# 8.0: https://docs.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-8

ПРИНИМАЮТСЯ ПРЕДЛОЖЕНИЯ ПО ШАПКЕ

Код этой шапки: https://pastebin.com/YJFQKsNm

Прошлый тред тонет здесь: >>1724425 (OP)
2 1797055
9. Что почитать?
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет.
- C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- Pro C# 7: With .NET and .NET Core (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.

10. Более хардкорный материал
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.

11. Хочу еще хардкорней
- C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата.
- Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода.
- .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам

12. Литература по WPF
Из более-менее актуального можно выделить пару книг:
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)

13. Литература по ASP.NET
- Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
- Pro ASP.NET MVC 5 Platform (Adam Freeman)
- Beginning ASP.NET for Visual Studio 2015 (William Penberthy)

14. Литература по асинхронности, параллелизму и всему такому
- Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции
- Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная
- Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg

15. Литература не по шарпу, но так или иначе связанная с языком
C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity
Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.

16. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"

17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
- Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick
- Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун
- Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках
- Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы
- Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST
- Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID

18. Я не умею читать, что посмотреть?
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://goo.gl/meyyxO
- Коллекция видеоуроков, по всему дотнетовскому и смежным темам (250 часов, на русском) - https://nnm-club.me/forum/viewtopic.php?t=891636
- Набор курсов по C# от O'Reilly Media (28 часов, на английском) - http://rutracker.org/forum/viewtopic.php?t=5082978
2 1797055
9. Что почитать?
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет.
- C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- Pro C# 7: With .NET and .NET Core (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.

10. Более хардкорный материал
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.

11. Хочу еще хардкорней
- C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата.
- Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода.
- .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам

12. Литература по WPF
Из более-менее актуального можно выделить пару книг:
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)

13. Литература по ASP.NET
- Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
- Pro ASP.NET MVC 5 Platform (Adam Freeman)
- Beginning ASP.NET for Visual Studio 2015 (William Penberthy)

14. Литература по асинхронности, параллелизму и всему такому
- Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции
- Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная
- Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg

15. Литература не по шарпу, но так или иначе связанная с языком
C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity
Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.

16. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"

17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
- Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick
- Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун
- Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках
- Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы
- Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST
- Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID

18. Я не умею читать, что посмотреть?
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://goo.gl/meyyxO
- Коллекция видеоуроков, по всему дотнетовскому и смежным темам (250 часов, на русском) - https://nnm-club.me/forum/viewtopic.php?t=891636
- Набор курсов по C# от O'Reilly Media (28 часов, на английском) - http://rutracker.org/forum/viewtopic.php?t=5082978
3 1797064
>>1796560 →

>var x = new Main();


>x.GetInformation():


The type or namespace name Main could not be found (are you missing a using directive or an assemble reference?)

>Ты, кстати, хули с маленькой буквы названия метода написал?


Main у меня главный метод, а остальные просто методы.

>>1796765 →

>Добавь модификатор static методу GetInformation


Появилась изначальная ошибка An object reference is required for the nonstatic field, method, or property
4 1797089
>>797064

>добавил статик


>... for non-static method



Хуево ты добавил значит. Просто говнокод свой в тред скинь и тебе покажут.
5 1797090
>>797064

>добавил статик


>... for non-static method



Хуево ты добавил значит. Просто говнокод свой в тред скинь и тебе покажут.
Capture.PNG19 Кб, 493x665
6 1797095
>>797064
кодстайл сишарпа подразумевает именование методоа с большой буквы.
7 1797106
>>797089
>>797090

using System;
namespace testProject
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("hello");
var fin = @"C:\text.txt";
Title title = Title.Load(fin);
// var x = new Main();
// x.getInformation(title);
getInformation(title);
}
private static void getInformation(obj title)
{
var titles = thuExtr.Finder(title); // ошибка на thuExtr: An object reference is required for the non-static...
}
private TFinder thuExtr;
}
}
sage 8 1797110
Еще живы шарписты? За лето три челика пришли к нам грести, бывшие дотнетчики все. С радостью сели на ноду, а один в фронтенд.
image.png28 Кб, 486x584
9 1797113
>>797106
вот так попробуй, а лучше создай отдельный класс, чтобы самому себе голову не ебать
10 1797117
>>797113
Добра и сотни нефти!
11 1797118
>>797113
фикс. не Program.GetInformation(). а x.GetInformation()
12 1797138
>>797106

>var titles = thuExtr.Finder(title); // ошибка на thuExtr: An object reference is required for the non-static...



Т. е. из прошлого опыта ты не смог понять в чём ошибка? Зачем вообще код берешься писать, ты же проф не пригоден.
13 1797139
>>797110
Я и на шарпе и на жопаскрипте пишу. Проблема твоих галерщиков теперь в том, что обратно на дотнет они не пересядут, чего не скажешь о тех кто пишет на шарпе.
14 1797270
>>797139
Не представляю каким нужно быть говноедом чтоб добровольно с него перейти на js.
15 1797303
вот сделали бы они WPF кросс и не было бы нужно никакого говноэлектрона
прошляпили
16 1797342
>>797303
Xamarin же есть с тем же самым Xaml.
17 1797345
>>797270
На самом деле они плакали внутри, но продолжали улыбаться, потому что больше их нигде не брали.
18 1797369
>>797342
Это который под мобилки? Как мне на десктопы с ним?
19 1797378
О какой то maui на подходе
Будет почитать
20 1797381
>>797369
https://github.com/dotnet/maui
Xamarin превращают в MAUI, но он станет доступен только в .NET 6
21 1797383
>>797381
отож
а щас под десктопы только авалония и хоть проект неплохой но это ж кактус
22 1797696
В общем, хочу сделать платформер простой по типу марио. Подключил SFML. В общем, как реализовать теперь логику-то платформера? Ну, т.е. врагов, камеру, это вот все. Чет не совсем понимаю как оно должно выглядеть. Вот ссылка на балавство с самим SFLM, чтобы увидеть экран с квадратиком после того как откроется окошко - enter. Управление квадратиком - wasd.

https://www.dropbox.com/s/k9nncr0abswujed/SimpleGame.zip?dl=0
23 1797703
>>797696
Что такое SFML? Гугл выдаёт что угодно, кроме того что нужно.
Выкидывай на гитхаю/гилтаб/битбакет. Нафиг зип качать, вдруг там вирусяка.
24 1797827
>>797703

> Что такое SFML?


https://www.sfml-dev.org/

> Нафиг зип качать, вдруг там вирусяка


Качать необязательно, на дропбоксе есть возможность посмотреть содержимое, а исходники будут с подсветкой синтаксиса.
25 1797828
>>797827
Фигасе дропбокс прокачался.
26 1797999
Задача: написать под винду клиент/сервер-ное приложение.
Общение происходит по защищённому каналу. TLS ? Посылают друг другу XML-ки.

Какие есть библиотеки/фреймворки чтобы это как можно быстрее нашлёпать особо не вникая в то как это работает?
27 1798016
>>797999
В общем, есть такой класс, Socket, берешь его и делаешь.
28 1798026
>>798016
Да блин. Сокеты это слишком низкоуровнего.

Мне бы что-то такое типа
server = new Server(TLS, portnumber, certificate,
client_connected_callback, client_message_callback);
server.Serve();

client = new Client(TLS, portnumber, certificate, server_connected_callback, server_message_callback);
client.ConnectToServer(serverAddress);

Ну нету у меня много времени чтобы думать над архитектурой и писать всё с уровня сокетов.

Хочу готовую архитектуру клиент/сервера, которую делали люди с мозгом и знаниями, а не на коленке как я.
29 1798041
>>798026
Нуууу, я как-то писал как раз подобное, но в треде все закидали тапками и сказали чтобы не выебывался .net для веба и вообще если кому приспичет он сам на сокетах напишет.
Могу только это посоветовать, https://github.com/chronoxor/NetCoreServer, там чутка напильником допилить. Можно еще https://github.com/jchristn/WatsonTcp посмотреть, но мне он не подошел.
30 1798046
>>797999
ну так кестрел + хттпклиент
или тсплистенер и тспклиент
или 100 других костылей
31 1798096
>>797999
Если все правильно понял, я бы по такой задаче колотил gRPC. Там и описание транзакций легко сделать, и пользоваться клиентом удобно, и шифрования всякие хорошо поддерживает.
.png20 Кб, 1121x390
32 1798110
>>798096
Это все хорошо, когда ты делаешь поверх Http, блин, я не знаю что у чела за задача, но вот мне нужно было так же реализовывать сервер для работы с устройствами, которые по проприетарному протоколу обмениваются информацией, и знаешь что, на джаве для этого есть нормальные готовые решения, а вот на офигенном шарпе - нет. пришлось свой велосипед городить. А я - тот еще архитектор, кек.
image.png42 Кб, 473x384
33 1798201
>>797827
Не хочет исходники показывать.
.png29 Кб, 1335x701
34 1798228
>>798201
Странно. У меня все показывает.
35 1798243
>>798110

>а вот на офигенном шарпе - нет. пришлось свой велосипед городить


значит никому не нужно было
вот тебе нужно ты сделал
выкладывай в общий доступ
dotnet.png32 Кб, 328x1010
36 1799109
Вечер, котаны.
По работе пришлось столкнуться с .NET веб проектом на C#.
Помоги разобраться что это, чем его адекватно открыть и как редактировать?
Отдельно интересуют .dll библиотеки, как их править?
Структура проекта на пике.
37 1799121
>>799109

> Помоги разобраться что это, чем его адекватно открыть и как редактировать?


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

> Отдельно интересуют .dll библиотеки, как их править?


Взять код этой библиотеки и править его, потом собрать и подсунуть сюда новую dll, ну или лезь в il и там правь, кек.
38 1799131
>>799121

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


Беда в том что при "открытии папки" в VisualStudio никаких треугольников нет. Впрочем, как и .cs файлов в каталогах проекта.

>основные файлы лежат в корне, остальное эт ресурсы и какие-то переиспользуемые штуки


Похоже что на каждую страничку ресурса есть свой .ascx файл, которые лежат в QA.

>Взять код этой библиотеки и править его, потом собрать и подсунуть сюда новую dll


Декомпилировать, поправить, заново собрать и подсунуть?
Оно всегда так работает, или есть какой-то "правильный" путь редактирования dll-лок? )

>ну или лезь в il и там правь


Что такое il?

В интернетах искал разные варианты создания .NET проектов, веб сайт/веб приложение / итд, и ни один из вариантов не похож на то что есть у меня.
39 1799170
>>799109

> inetput\wwwroot\Navigator


> Navigator.dll


Это собранный и опубликованный проект. Требуй исходники. Будут тебе и *.cs, и треугольники.
40 1799208
>>797696

>хочу сделать платформер


просишь сделать за тебя
41 1799249
Знает кто НЕ ИНДУССКИЕ туториалы по asp.net core но чтобы БД была postgresql? Везде ебаный microsoft sql server но он почему то на 8 винде не ставится
42 1799262
>>799249
По первой ссылке в гугле. Подойдет?
https://metanit.com/sharp/entityframeworkcore/7.1.php
Но я бы все таки разобрался что не так с SQL Server - работать должно.
43 1799333
>>799249

>но чтобы БД была postgresql?


А какая разница? как бы задача всяких там ентитифреймворков и состоит в том, чтобы абстрагироваться от реальной бд.
44 1799478
>>799249
Двачую анона выше, что именно ты хочешь? Степ бай степ пока от монитора не ослеп – так смысл, если еф инкапсулирует от тебя внутренности базы. Конечно, не идеально, и с постгре я имею ебанутые имена для сущностей не уверен, что причина в постгре, так как с ним я использую скаффолд, а с mssql code first, но все же
Просто подними базу, запили коннекшн стринг и дальше работаешь как гречневый программист
45 1799611
Не могу вкатиться уже месяца 2 где то, прошел 4 собеса, два из которых вроде как успешно, но работать так и не начал, т.к. те компании ответили, что пока что нету денег и времени на вкатышей на проекте, но обязательно напишут, когда появятся. На последнем тех собеседовании охуел от сложности вопросов, позиция была трейни, но вопросы совсем охуевшие, зп предлагали тоже нищенскую. Платформа и язык нравятся, милы глазу и приятно работать, уходить в другое более популярное не хочу, но шит, что бы найти хоть какую то работу походу надо будет пробовать что то другое, кто то может помочь каким то лайфхаком по поводу поиска работы?
46 1799638
>>799611

>но вопросы совсем охуевшие


че за вопросы?
47 1799650
>>799638
по SOLID и других подходах кучу вопросов было практических, т.е. таких, на которые без опыта коммерческой разработки не ответишь толком. Подкапотные детали мультитрединга и linq спрашивали, и по разных парадигмах программирования вопросы были, но более общие. Была практическая часть, надо было алгоритм сортировки сначала написать оптимальный а потом еще и актуализировать под требование определенное.
Ну на все остальные вопросы которые задавали я вроде норм отвечал, но на конкретно те, которые тут перечислил, в лучшем случаем 2/3 ответил + практическое почти что скипнул, просто в конце теоретически свой подход и идею объяснил.
И это на трейни позицию, которая, как оказалось, с шарпом почти не связана, на проекте занимаются какими то приставками под смарт тв, язык там похож на питон, и вообще предлагали чето около 350 в месяц. Впечатления не очень
48 1799733
>>799208
Не прошу. Достаточно было бы либо коротко объяснить, либо дать ссылки где есть примеры с подобием архитектуры, потому что все что я находил это либо прямо в мейне херачат, либо это видео где чел просто набирает текст ускоренно, а потом говорит что получилось, даже не поясняя зачем он что-то делал.
49 1799870
>>799611
Единственный вариант - закидывать своё резюме везде куда можно. Сотню в месяц. Только резюме надо вылизать. Не более двух страниц и без вырвиглазного форматирования и всё главное должно быть в самом начале. Причём кидать и в другие города на удалёнку.
Попутно решать задачки на leetcode и проходить туториалы от майкрософта.
50 1799894
>>799650
За 350 в месяц это даже мало спрашивали.

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



Вполне ответишь, главное придумать подходящий пет-проект и начать его реализацию с применением этих принципов и паттернов проектирования. Я сначала книгу по паттернам прочитал, потом начал делать такой проект. Вообще это намного сложнее чем выучить базовые конструкции и внутреннее устройство языка, над продумыванием архитектуры я сидел несколько недель, написав за это время пару десятков строк кода, а таких строк нужно было несколько тысяч. В итоге я почему-то нарушил самое главное правило - head first. Начал реализацию с конкретизированных классов, а не общих, но когда дошел до общих, то понял насколько было бы легко если бы я с них начал.
Сейчас понимаю, что для полного понимания нужно как минимум 2-3 таких проекта.
51 1799909
>>799894

>За 350 в месяц это даже мало спрашивали.


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

'
52 1799965
>>799170

>Требуй исходники.


А в таком виде я с этим хоть как-нибудь работать смогу?
53 1799979
>>799965
Можешь использовать какой-нить дизассемблер:
https://github.com/icsharpcode/ILSpy
https://www.jetbrains.com/decompiler/

Берёшь dll, прогоняешь через тулзяку и получаешь проект с C# файлами. Системные дизассемблировать не надо. Судя по скрину тебе нужны только ChartCreator, DatabaseMgr, Navigator, Utility.
Потом надо будет все эти проекты собрать в один Solution.

У тебя там даже .pdb файлы есть. Можно дебажить и декомпилировать те функции на ходу.
54 1799995
>>799965

> А в таком виде я с этим хоть как-нибудь работать смогу?


https://www.red-gate.com/products/dotnet-development/reflector/
Рефлектор, декомпилирование *.dll, лазанье в IL, муторное и нудное воссоздание проекта. Новичками не под силу.

Можешь стили да картинки подменить.

Логика скорее всего в Navigator.dll, DatabaseMgr.dll, ChartCreator.dll, Utility.dll. Остальные dll -- сторонние подключаемые библиотеки.
55 1800013
>>799995
Red Gate платный. Два выше - бесплатные. И лазить в IL вообще не нужно. Декомпилятор может целый проект за тебя воссоздать (код может быть УГ, но читаем).
56 1800024
>>800013
https://github.com/0xd4d/dnSpy
оставлю это тут
пусть полежит
57 1800223
>>799909
Время идет. Число желающих растет с неизмеримой скоростью (конечно же благодаря курсам по программированию и байками, что вкатиться очень легко).

А это нихера не легко. Начинаешь читать требования к позиции джуна (вакансии по треййни очень редки). Так что бы во всем этом разобраться, уходит как минимум год.
58 1800224
Почему вы решили вкатываться в Си Шарп, а не фронтенд, мобилки(iOS или android)?
59 1800231
>>800224
в ВУЗе преподавали C#. И практически все предметы связанные с программированием, преподавались с его использованием.

ИМХО, по синтаксису C# приятней того же Python и JavaScript. Хотя, TypeScript мне понравился.
60 1800291
>>800223

>Начинаешь читать требования к позиции джуна


а там мидл
61 1800306
>>800291
и вообще там фулл стак)
62 1800331
Господа, вкатываюсь в неткор, и возник такой вопрос: как мне лучше организовать шаред код в солюшене, в котором есть проекты как на неткоре, так и на винформс? Если я сделаю простой Shared Project, будет ли будет ли код из него работать со всеми проектами?
63 1800345
>>800306
и это ведь даже не прикол, мидловский стек за зарплату джуна постоянно натыкаюсь
64 1800368
>>800224
На шарпе можно под мобилки писать.
65 1800401
>>800224
Шарп самый универсальный в плане легкости и качества. Да, ты можешь на плюсах писать под любую платформу, но это сложно. Да, ты можешь на жопаскрипте писать под любую платформу, но это не качественно.
66 1800404
>>800331
У тебя какое-то разделение неясное. Винформы есть как на неткоре, так и на нетфреймворке.
67 1800441
>>800401
будто на шарпах легко

хочешь под линь - WPF идет лесом. Привет авалония XAML
хочешь мобилки - да еб...й xamarin XAML
будущий мауи тоже будет xamarin XAML
68 1800473
Что надо знать/учить чтоб устроиться интерном?
69 1800515
>>800441
И? Если какой-то дегрод не осилил XAML, то это не значит, что XAML хуевый. И WPF это тоже XAML, если ты не знал.
70 1800523
>>800515

>это не значит, что XAML хуевый


О чем ты вообще товарищ?
Я говорю что это РАЗНЫЙ xaml
при этом xamarin xaml говно по сравнению с UWF и тем более WPF xaml

и для "будет 1 хамл для всех" выбран самый уебищный из них
71 1800584
>>800523
Что за бред ты несёшь? Какой смысл делать РАЗНЫЙ xaml если есть уже наработки из wpf, понятно, что есть отличия, но называть это совершенно разными xaml'aми слишком громко. Любой кто писал на WPF, сможет с легкостью писать на xamarin.
72 1800594
>>800584

>Какой смысл делать РАЗНЫЙ xaml


это вопрос к мелкософту

>понятно, что есть отличия, но называть это совершенно разными xaml'aми слишком громко.Любой кто писал на WPF, сможет с легкостью писать на xamarin.


вот тебе вопрос на засыпку "А портировать WPF на мауи так же с легкостью сможет? "

зы: А сейчас нет никакого мауи (и долго не будет) и если желание на линукс запустить то где кушать эту универсальность? авалония? опять же попробуйте портировать ))
73 1800681
>>800473
Вот мне уже тоже интересно, а то мне тут в треде доказывают что на позицию трейни в SOLID надо ахуенно разбираться, и в concurrency и вообще уже быть готовым опытным
специалистом.
74 1800782
Посоветуйте, пожалуйста, какого-нибудь видео контента по языку, чтобы было чем занять себя в перерывах между чтением. На ютубе вроде бы много всякого разного, но чет ниче не понравилось
75 1800813
>>800473
По идее ничего. На то он и интерн, чтобы его обучать.
77 1800827
>>797345
зыс
78 1800939
>>799611
Палю годноту https://kontur.ru/education/programs/intern/backend
Реальный вариант джуну любого возраста получить работу.
79 1801000
>>800813
Так-то оно так, но кому нужен будет ученик? Работника же ищут, полагаю что-то базовое знать нужно
80 1801003
>>800473
Я когда интернов собеседовал давал всякие задачки на графы решать. Но по тонкостям языка особо не гонял, интерны обычно языки плохо знают.
81 1801070
>>799650

> предлагали чето около 350 в месяц


> Впечатления не очень


Да говно какое-то, я 350 в секунду получаю на фрилансе.
82 1801075
>>801070
он имеет ввиду 350 баксов, джунам щас не платят нихуя, а если он хохол то это ему доплачивать предлагали
83 1801081
>>800224
Ну, это. Были плюсы и си в вузе, я паралельно пробовал джаву, а на втором курсе препод показал Шарп и я просто пиздец влюбился. Настолько охуенная стандартная библиотек, тут тебе и с сетью удобно работать, и асинхронность, и многопоточность удобные, и можно писать было графические приложения как человек, а не всеми этими вызовами винапи, в общем, у меня шишка встала, я охуел как это классно. И сахарок, куча хуйни можно сделать очень коротко и лаконично. А потом я еще начал познавать ООП, сначала плевался, но потом, пиздец охуел как оно удобно, если научиться готовить. Сейчас переодически приходится писать еще на плюсах, и я каждый раз ловлю себя на мысли, что да, я и на нем мог бы, но на шарпе я сделаю это быстрее, красивее и еще мне не нужно искать какую-то приблуду, все почти есть из коробки, а то чего нет - давно стандарт индустриальный и ты это быстро найдешь.
В противовес фронтенд, там тоже типа писать можно сейчас наплохо, но там каждый нагородил своих велосипедов, которые ты костылями между собой объединяешь и получается кряхтящий-пердящий франкинштейн. Выбрали бы что-то одно и использовали, например решили, все у нас будет Ангулар для интерпрайза и ECMA какая-нибудь одна + jquery для мелких проектов. Нет, блядь, у нас будет 100500 фреймворков, которые делают одно и то же, у нас будет 100500 стандартво, зависящих от хуй пойми чего, а сверху ебанае бабелем, чтобы хуй кто въехал, в то что мы там понаписали. Короче, как по мне - эта анархия нахуй не нужна. Когда стандартизуют нормально, тогда можно будет думать о фронтенде, но сейчас, это какой-то цирк с конями, а судя по коду фронтендеров, даже люди с опытом, там просто копипастят код со стэковерфлоу, потому что блядь, вот ушел на карантин фронтендер из комманды, где я тусую, ну, подумал, доделаю его таски, все равно делать нехуй, открываю, сначала нихуя не понимаю, потом чуть разобрался, гуглю и вижу что его же код это первая строчку в гугле. Блядь, решил пробежаться, а там на 90% код состоит из ответов со стэковерфлоу, пиздец же. И это человек с 8 летнем стажем работы. Просто ctrl+c ctrl+v. И я даже не в упрек ему, типа вот настолько охуенно программировать фронтенд, когда человек который этим почти 10 лет занимается большую часть кода просто копипастит, меняя переменные.
83 1801081
>>800224
Ну, это. Были плюсы и си в вузе, я паралельно пробовал джаву, а на втором курсе препод показал Шарп и я просто пиздец влюбился. Настолько охуенная стандартная библиотек, тут тебе и с сетью удобно работать, и асинхронность, и многопоточность удобные, и можно писать было графические приложения как человек, а не всеми этими вызовами винапи, в общем, у меня шишка встала, я охуел как это классно. И сахарок, куча хуйни можно сделать очень коротко и лаконично. А потом я еще начал познавать ООП, сначала плевался, но потом, пиздец охуел как оно удобно, если научиться готовить. Сейчас переодически приходится писать еще на плюсах, и я каждый раз ловлю себя на мысли, что да, я и на нем мог бы, но на шарпе я сделаю это быстрее, красивее и еще мне не нужно искать какую-то приблуду, все почти есть из коробки, а то чего нет - давно стандарт индустриальный и ты это быстро найдешь.
В противовес фронтенд, там тоже типа писать можно сейчас наплохо, но там каждый нагородил своих велосипедов, которые ты костылями между собой объединяешь и получается кряхтящий-пердящий франкинштейн. Выбрали бы что-то одно и использовали, например решили, все у нас будет Ангулар для интерпрайза и ECMA какая-нибудь одна + jquery для мелких проектов. Нет, блядь, у нас будет 100500 фреймворков, которые делают одно и то же, у нас будет 100500 стандартво, зависящих от хуй пойми чего, а сверху ебанае бабелем, чтобы хуй кто въехал, в то что мы там понаписали. Короче, как по мне - эта анархия нахуй не нужна. Когда стандартизуют нормально, тогда можно будет думать о фронтенде, но сейчас, это какой-то цирк с конями, а судя по коду фронтендеров, даже люди с опытом, там просто копипастят код со стэковерфлоу, потому что блядь, вот ушел на карантин фронтендер из комманды, где я тусую, ну, подумал, доделаю его таски, все равно делать нехуй, открываю, сначала нихуя не понимаю, потом чуть разобрался, гуглю и вижу что его же код это первая строчку в гугле. Блядь, решил пробежаться, а там на 90% код состоит из ответов со стэковерфлоу, пиздец же. И это человек с 8 летнем стажем работы. Просто ctrl+c ctrl+v. И я даже не в упрек ему, типа вот настолько охуенно программировать фронтенд, когда человек который этим почти 10 лет занимается большую часть кода просто копипастит, меняя переменные.
84 1801087
Помогите код написать, только вкатываюсь в C#, Составьте программу – временной интервал. Заданы моменты начала и конца
некоторого промежутка времени в часах и минутах (в пределах одних суток). Найти
продолжительность этого промежутка в тех же единицах измерения.
85 1801091
>>800331
Берешь и прописываешь в файлике солюшна все версии фреймворка, какие нужно поддерживать и пишешь с использованием директив препроцессора в местах где код отличаться должен будет. Все. Что сложного-то?
86 1801103
>>801087
Где заданы, куда заданы, в чём заданы, блять. Харкни в ебало тому кто тебе эту задачу дал и пошли его нахуй.

var start = TimeSpan.FromHours(2) + TimeSpan.FromMinutes(10);
var end = TimeSpan.FromHours(5) + TimeSpan.FromMinutes(26);
var duration = end - start;
87 1801115
>>800331
Есть вариант написать библиотеку таргетируя .net standart - по идее должен работать с проектом и на фреймворке, и на коре.
Таблица совместимости тут:
https://docs.microsoft.com/en-us/dotnet/standard/net-standard
Но лучшим решением было бы перенести формы на кор или .net 5, если это возможно.
.png45 Кб, 1045x627
88 1801116
>>801087
Блин, хотел выпендрется, но подумал, лучше нормально сделаю.
В общем, вот. Статический метод GetInterval вернет тебе как раз разницу, а у нее уже можно хоть часы, хоть минуты смотреть.
.png3 Кб, 522x62
89 1801124
>>801115
Да хосподи, что мешает вам делать вот так вот? 99.9% кода, если это действительно какой-то общий код, будет совместимо, тем более если не выеживаться и не использовать повсеместно сахарок. В 2,5 местах на весь проект пропишет проверку на версию фреймворка и пойдет дальше.
sage 90 1801241
>>801116

>GetInterval с тернаркой для подсчёта разницы


Говнокод. Используй Math.Abs, если тебе нужно всегда положительное число.
91 1801253
>>800345
а хули ты хотел? Галера на тебе деньгу должна зарабатывать, а ты батрачить должен, как раб. Тебе задачки-задрочки, а барину мертвый американский президент. Все по чесноку.
>>799650

>чето около 350 в месяц


в шепутиарий. Тупо с подачки РАБотать. Порадовал перед сном
>>801075

>джунам щас не платят нихуя


смотря о каком языке речь. Даже ссаный пыхер джун в фул стэке 800 минимум зарабатывает
92 1801330
>>801253
ссаный сеньор пыхер так и застрянет на 1-2к, а шарпист может и 4+ делать.

джуну надо не выёбываться, а брать что угодно, впахивать пару лет и потому начинать выбирать нормальную работу.
93 1801334
Заметил одну особенность, на /g/ форчана, если спросить какой нибудь вопрос по программированию, тебя просто покроют хуями и назовут ретардом.
Тут, тебя покроют хуями, назовут ретардом, но помогут.
94 1801336
Должен ли джуниор уметь решить эту проблему?
https://github.com/jellyfin/jellyfin/issues/2959
Недавно начал учить гитхаб, на этот issue стоит good first issue, но чет совсем не понимаю что конкретно делать.

>Remove the logic to auto-launch the web browser from the server (StartupWizard.cs BrowserLauncher.cs, etc)


Посмотрел на код там, непонятно где логика чтобы браузер запускался именно с сервера, или они хотят чтобы вообще нахуй удалили это?
Думаю, я еще далеко не джуниор, может быть даже не trainee.
95 1801343
>>801081
надеюсь Blazor не загнется и будем писать фронт на нём
96 1801348
>>801330

> пыхер так и застрянет на 1-2к


>а шарпист может


Маня, проснись, ты дрыщешь. Никому нахуй сейчас этот шарп не нужен. Исключение - мамонты, которые случайно вступили в это чудо.
>>801343
хммм, выбор между 3 либами, которые дрочат сотни тысяч людей и высер мелкософтов с аудиторией 10 аутистов-разработчиков... Что же выбрать...
97 1801399
>>801348
так про любую технологию можно сказать, когда она только вышла.
98 1801486
>>801348

>Никому нахуй сейчас этот шарп не нужен.


судишь по говноконторкам из рф. ну да да. такой то обхват )))
99 1801725
>>801336
Быстрый поиск по репо выдал вот это внутри jellyfin/Emby.Server.Implementations/EntryPoints/StartupWizard.cs

Там ещё много чего, что они просят. Один из пунктов обновить вот этот файл (возможно там ещё такие файлы есть), чтобы при запуске дебага браузер авто открывался - jellyfin/Jellyfin.Server/Properties/launchSettings.json
100 1801751
>>801336
Почему ты решил обратить внимание на этот ишью?
.png15 Кб, 654x350
101 1802062
Бьют ли за такой код в реальном проекте по рукам?
102 1802073
>>802062
Next желательно чтобы был read-only.
CancellationToken надо в следующий вызов передавать.

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

Если это библиотека, то надо к асихнронному вызову в конце добавить ConfigureAwait(false), потому что библиотека откуда угодно вызываться может.
103 1802087
>>802073
Ну, про CanellationToken я просто тупанул. Да, понимаю что надо передавать дальше.
А если я это делаю чтобы разгрузить класс который разросся? Просто неудобно стало в файле на ориентироваться, приходилось по полминуты скроллить чтобы до нужного куска добраться, либо поиском пользоваться, ну я и думал о двух стульях - сделать partial или вот так вот. И теперь вот думаю, а не зря ли сделал так. Хрен знает короче.
104 1802173
>>802062
Какой же макакий пиздец
С асинка в односвязном лукапе проиграл
105 1802226
>>802173
Ну и как тогда?
Мне нужно сконфигурировать большую задачу, внутри нее подзадачи, которые как раз конфигурируются и в этих подзадачах могут быть await'ы, порядок их выполнения не важен, эти подзадачи не связанны друг с другом, так же после того как задача сконфигурирована, я должен дождаться ее выполнения внутри какого-то метода, потом, если нужно - извлечь нужную мне информацию, которая была получена в ходе выполнения. Задачи могут меняться от настроек сверху, но не во время выполнения задачи, какие-то могут быть отключены, какие-то новые - добавлены пользователем. Вот и как это сделать правильно?
106 1802281
>>802226
Не слушай этого проигравшего, который в линкдлисте какой-то лукап углядел. Тут всё зависит от задачи и конкретной архитектуры системы. Где-то это вполне нормальный подход, а где-то у виска пальцем покрутят.
Если рассматривать только код с твоего пика, то там ничего вырвиглазного нет.
107 1802282
>>802226
Вообще для прогона разнородных задач можно использовать Hangfire - http://https://www.hangfire.io.
108 1802395
>>802226
Ты, вроде, как монаду вычислений пытаешься переизобрести.
109 1802490
>>802226
И зачем тогда тебе ждать выполнения задачи перед запуском другой? Сделай статичный контейнер для задач, при вызове экзекутАсунк задачи запускаются и добавляются в контейнер, при добавлении последней задачи пишешь await Task.WhenAll(taskContainer);
110 1802599
>>802226
листы List<Task> и Task.WhenAll и всего делов
111 1802818
Просмотрел джуниоровские вакансии на hh.ru. Там, где есть веб, больше чем в половине требуется ASP.NET, и в остальных ASP.NET Core. Поясните, мне их что, обе учить? А то выучу я более современную, а меня ведь как джуниора поставят на какое-то легаси, а там всё на asp.net.
112 1802828
>>802818
Очевидно, что нужно учить более новое, так как если тебя посадят на новый проект, то сроки будут гореть и времени переучиваться с старого на новое у тебя не будет, а если тебя посадят на легаси парашу, то у тебя будет уйма времени и простор для эксперементов, потому что единственный плюс легаси говна это то что оно есть и работает. Внёс нужное изменение, а потом вникаешь в старое легаси и рефакторишь потихоньку.
113 1802849
Сап программач, перекатываюсь к вам из плюсов(вкатываюсь в доп технологию). Что посоветуешь, и что нужно знать прежде чем начать писать код.
114 1802970
>>802849
Если писал на плюсах профессионально, то прочитай про то как сборка мусора работает, как работают таски с асинк-эвейтами, ну и наверное чутка про события будет полезно, хотя их сейчас стараются не использовать, ну и про те моменты что отличаются, типа как наследование тут работает, что ссылки, что значение это вот.
А, ну и про LINQ, оно довольно просто, опять же если на плюсах что-то серьезное писал, то разберешься быстро, но помогает сильно упростить жизнь.
Да, последнее, про кодстайл не забуть. За кодстайл на самом деле больше всего вломить могут.
115 1803171
Сап. Хз где спрашивать, спрошу у вас, вы к винде тут ближе всех.
Есть задача - программно прочитать файл из директории, которая синхронизирована с дропбоксом. Файл локально на устройстве есть, виндой открывается без проблема. Но когда пытаюсь что-либо с ним сделать - сосу бибу, файла словно не существует. Даже copy в консоли выдаёт ошибку. Че делать? Хули оно выёбывается?
Если тредом ошибся, пните в нужную сторону.
116 1803241
>>803171
телепаты говорят что хоть они и телепаты но без знания ЧО ЗА ОШИБКА БЛ... ничего сказать не могут
d327074128fcca1552abb094fca91d87.jpg91 Кб, 563x668
117 1803246
Хочу к НГ вкатиться на галеру с околонулевым опытом, пока есть финподушка - согласен работать за еду.
В 2016-2017 в рамках стажировки чё-то да учил, прочитал "C# для школьников" да "Библию C#" (до "С# Программирование на языке высокого уровня" Павловской так и не дошёл, написал пару простейших приложений, но на тот момент склонялся к вебу и вёрстке больше - сейчас с ужасом понимаю свою ошибку.

Какой мой план действий? Перечитываю вышеперечисленное, а так же в оп-посте, заполняю гитхаб старыми и новыми проектами, курю алгоритмы?
118 1803273
>>803241
Файл не найден.
119 1803283
>>803246
Советую тебе осознать, что не существует работы за еду в бэке, да и во фронте она редко случается. Никто не будет нанимать человека который будет отнимать время у опытных сотрудников, приносить 0 пользы и при этом еще денег на еду просить.
В остальном всё от тебя зависит, читай книги, осваивай алгоритмы, озеленяй гитхаб и может удастся втиснуться на вакансию джуна.
120 1803296
>>803171
дропбокс, onedrive, и прочие обычно делают вид что есть файл, когда его щёлкаешь дважды, он скачивается в бэкграунде и юзеру кажется что файл реально существует локально. Читай доку к дропбоксу.
121 1803338
>>803283
Гитхаб с туду листами нахуй никому не впился на собесе. Тестовое главное сделать.
122 1803376
>>802818
учить новое. В общих чертах они схожи.
123 1803378
>>803338
Если у тебя годные проекты на гитхабе, то тестовое можно не выполнять.
124 1803600
>>797054 (OP)
Анон, поясни вкатывальщику, чем шарписты на работе занимаются?
125 1803631
>>803600
дрочат друг другу
A80EA83A-6281-449F-8B3E-20EF70D48944.jpeg394 Кб, 750x937
126 1803638
>>803283
Я теперь все больше ощущаю, что проебал полимеры
Давали шанс тогда выучить, ещё и МРОТ получил бы
Пока что я могу и и бесплатно постажироваться

>>803378
Пример?
127 1803651
>>803638

>Пример?


Любой проект который написан с использованием требуемого от кандидата стека. Главное чтобы это было что-то отличное от туду листа и не копипаст чужого кода.
На предложение решить тестовое пишешь: "У меня есть проект написанный с использованием необходимого стека технологий, прощу зачесть его в качестве выполнения тестового, либо оплатить выполнение тестового."
Так ты сразу даешь понять, что достаточно квалифицирован для того чтобы просить деньги за тестовое + экономишь время не тратя его на решение тестового.
128 1803845
>>803600
Копипастят код со стэковерфлоу, потом оборачивают это в паттерны и типа вот охуенно все сделал.
Сейчас у шарпа оч разросся стек, зависит сильно от того куда пойдешь. Скорее всего будешь делать микросервисы, либо поддерживать легаси.
129 1803962
test
ghjgh.jpg566 Кб, 1920x1440
130 1804051
Сап ананасы, куда щас можно пойти работать зная Шарп?
131 1804062
>>804051
В юнити и веб
132 1804073
>>804062
а че в вебе? конкретней
133 1804074
>>804073
>>803845

ASP.NET, если тебе технически конкретнее
134 1804154
Какое направление лучше выбрать в шарпе? Веб?
135 1804157
Никак понять не могу. Вот мы переопределяем метод Equals() следующим образом: public override bool Equals(object obj) => obj?.ToString() == ToString(). А в каком случае тут может быть полезен этот знак вопроса? Зачем его тут писать?
136 1804161
>>804157
Чтоб в случае передачи аргументом null у тебя не возникло исключение при вызове .ToString() - метод тогда вернет false просто.
137 1804174
>>804161
Спасибо, теперь понял
138 1804274
>>804161
Он вернёт null, а не false
139 1804310
>>804274
Как жир метод возвращающий bool вернет null? Что за магия?
140 1804312
>>804310
никак не вернет
null улетит в сравнение == и уже результат этого и будет bool
141 1804318
>>804310

> .ToString() - метод тогда вернет false просто.



ToString возвращает string или null, а не bool. А Equals возвращает в данном случае результат сравнения двух вызовов ToString т. е. будет сравнение между null и тем что вернёт this.ToString().
К примеру, можно перезаписать this.ToString() таким образом чтобы он null возвращал, тогда при Equals(null) мы получим true, а по твоим словам ""метод вернёт false просто"
142 1804327
Подскажите, AvaloniaUI достаточно доделан, чтобы делать на нём окошки под Linux?
143 1804339
>>804327
смотря что делать. но в общем то да.
для меня там со шрифтами проблема (под виндой)
и был трабл с канвас по макосью
144 1804564
>>804157
obj?.ToString() == ToString()

Это короткая запись вот этого

obj != null && obj.ToString() == this.ToString()

Всякие Скалы/Котлины тоже так делают.
Советую освоить https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/
С ними жизнь станет в принципе легче. Там и твой ?. и ?[] имеются. И мой любимый ??, про который вечно все забывают.
145 1804655
Привет /pr/! Изучаю C#, думаю между бэкэндом и геймдевом. Геймдев как направление жив? Больно будет изучать Юнити? Как там с трудоустройством?
146 1804902
>>804655
С геймдевом в РФ наверное никак. В Минске и Киеве может ещё как-то. За рубежом норм. Иногда удалёнка проскакивает.
image.png69 Кб, 848x510
147 1804905
Как вам такой шарп?
Font = Jokerman
148 1804923
>>804905
Ебать ты Джокер
149 1804927
Нахуя нужны другие языки и технологии, если .NET 5 позволяет писать кросс-платформенные консольные, веб-приложения, (бэкенд и фронтенд), игры (Unity), мобильные приложения (Android и iOS), причём с прекрасным высокоуровневым синтаксисом и великолепным перфомансом (не С/C++/Rust, конечно, но лучше всего остального)?
150 1804928
>>804927
Потому что никому не нужен ваш всратый клон джавы, кроме анальных корпораций, которые не знают как запустить сервер на nginx
151 1805033
>>804928
сам понял что сказал?
152 1805060
>>804927
Шарп уже занял свою нишу в бюджетных организациях и энтерпрайзах с виндовыми серверами (коих полторы штуки). В остальном тобой перечисленном есть варианты куда лучше и современнее - дарт, реакт нейтив, котлин, го.
153 1805063
>>805060

>с виндовыми серверами (коих полторы штуки)


9-15% рынка приходится на IIS, не мало.
154 1805135
>>797054 (OP)
Можно ли сделать как-то так,
чтобы на вход одного метода подавался
либо FileStream, либо MemoryStream,
и возвращался соответственно либо FS, либо MS?
Или надо обязательно два метода запиливать?
20200305031119.jpg80 Кб, 535x623
155 1805142
>>805135
Можно разрешаю.
15985611876240.jpg164 Кб, 950x632
156 1805275
Котаны, насколько плохая практика использовать в словаре ссылки в качестве ключа? Если при этом в классе не переопределяются GetHashCode и Equals.
157 1805306
>>805275
Нормально, главное память не засри.
158 1805323
>>805060

>дарт


смотри "реакт нейтив"

>реакт нейтив


Как там дела с потоками обстоят? С нормальной то есть. А ну да. Для приложений формочек оно же не нужно.

>котлин


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

>го.


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

В итоге получаем кучу языков, где все не слава богу. Из которых только котлин куда ни шло, но займет место жавы(не жс) в гуишных приложухах, то есть "андроид онли"
159 1805372
Дотнет или джанго, что лучше брать фронтенд-макаке для своих поделок в перспективе хочу фуллстечить и перекатиться на апворк?
160 1805380
>>805372
"для себя" все упирается в любовь к языку же
161 1805385
>>805380
У меня особо нет времени чтобы пощупать и то и другое, да и любовь к языку весьма расплывчатое понятие и приходит где то спустя пол года владения оным.
Если сравнивать по скорости входа что будет попроще дотнет или джанго?
А если в плане качества и вариативности проектов?
162 1805396
>>805372

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



Тогда бери очевидный PHP, на шарпе и петухоне фриланса нет, исключением будет только реальный опыт работы.
163 1805399
>>805385
тогда смотри на перспективу. У нас ты на шарпе не найдешь работы, а на питоне море конкуренции.

пхп всегда в цене )))
164 1805406
>>805396
>>805399
Да вот что то не хочу я пхп учить) Попахивает говном
165 1805407
>>805142
А можно ли сделать как-то так,
чтобы вообще нихуя не надо было запиливать,
и чтобы оно всё уже было запилено,
и допиливалось по мере появленадобности,
своевременно, высококачественно, безошибочно,
актуально, и ещё и быстро, и ещё и с трепетом?
166 1805411
>>805407
да. главное готовь бабло
167 1805413
>>805411
Я те чё, бля, печатный станок?
Его, этот станок, самозапиливать надо автоматизированно, тогда и бабло будет с него высераться, бесплатно и без смс.
168 1805414
>>805406
Тогда учи что хочешь, долбоеб.
169 1805514
Ребятки, можете привести реальный пример использования yield return?
Ну, т.е. я прочитал про него, вроде как понял что эта фигня нужна чтобы вернуть IEnumerable<T> лениво. Вроде прикольно. А вот как это использовать-то в чем-то реальном не понял. Просто вот я придумал такую вот фигню, допустим я делаю запрос, в ответе мне приходит длинный json, я его десерелизую там как раз IEnumerable<IResponse>, я хочу теперь по всем респонсам пройтись и что-то в зависимости от респонса сделать, но не могу понять могу ли я использовать yield, а если могу, то как и когда? Для примера, вот код, с абстрактным апи, которое возвращает абстрактные фотки https://ideone.com/q5abi5 . Где где тут можно использовать этот yield и как?
170 1805541
>>805514

>реальный пример использования yield return?



Когда нужно возвращать из метода IEnumerable и тебе лень/неэффективно/нечитабельно писать свой IEnumerator.

Как пример:

public IEnumerable<HttpResponseMessage> ExecuteRequest(HttpRequestMessage request)
{
yeild return ExecuteRequestWithMainProvider(request);
yeild return ExecuteRequestWithReserveProvider(request);
yeild return HttpResponseMessage.Empty;
}

var response = ExecuteRequestAsync(request).First(resp=>resp != null);

В итоге ты получишь либо ответ на запрос от одного из провайдеров, либо пустой ответ, который будет означать, что ни один из провайдеров не смог выполнить запрос.
171 1805548
>>805541
Хм. Вроде понял. Спасибо.
172 1805665
>>804927
Именно, тем же вопросом уже пару лет задаюсь.

Когда работаешь с жабой, то складывается впечатление, что это продукт для студентов. Обеднён синтаксисом, инструментарием, какие-то выдуманные школьником наименования. Под каждую платформу надо плясать с бубном по два дня. И потом оно всё равно падает, и сеньоры/архитекторы объясняют, что ты забыл прочитать какой-то доп документ на 1000 страниц или потому что ты забыл поставить какой-то магический флаг о котором знают 2,5 анона или надо версию очередного супер JVM форка установить.

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

Го/Скала - прикольно, если уж пришлось завязаться на JVM, то можно и окунуться.

React и прочие смузи поделия - это вообще клоунада. Калькулятор, крестики-нолики и сайты визитки вполне пойдёт клепать. Эти программизды считают что выполнение простых миллисекундах операций за 1-10 сек - это норма.

С/C++/Rust - своя ниша, они будут ещё долго нужны.
173 1805678
>>805665
Ну не надо на жаву гнать. Шарп хоть мне и больше нравится, но некоторых фишек жавы мне не хватает в нем.
174 1805679
>>805142
А можно сделать что-то вроде public static void Method(var param1),
где param1 - (string)"путь к файлу" для создания FileStream из него,
или же byte[] для создания MemoryStream,
а var - это нечто вроде - похуй на тип param1, это может быть как string, так и byte[]?
Как выразить это не знаю, но сдаётся мне, что надо букву T куда-то приписать, и вот этот от where, ещё, в довесок.
175 1805700
>>805678
А каких например?
176 1805701
>>805679
пиши с перегрузками. не мудри
иначе T без where и потом typeof(T)== в теле
177 1805704
>>805678
Хз, я как-то уже будучи сеньором переключился на жава проекты на пару лет внутри большой корпорации. Там было достаточно архитекторов и жава сеньоров, у которых можно было спрашивать как делать правильно. Мой код всегда проходил через их код ревью без проблем. Но я продолжал материться на протяжении всех двух лет. В итоге не выдержал и вернулся назад в дотнет.
178 1805707
>>805679
Просто делаешь перегрузки вида

public static void Method(string filePath)
{
HandleStream(File.Open(filePath);
}

и

public static void Method(byte[] buffer)
{
HandleStream(new MemoryStream(buffer));
}

А HandleStream уже будет:

private static void HandleStream<T> (T stream)
where T : Stream
{

}
179 1805726
Новые энтерпрайзы и стартапы пишутся сейчас на .нет кор? Или технология родилась мертвой?
180 1805732
>>805700
Ну, например возможности нормально пометить что может бросить метод. В шарпе ты либо будешь пилить атрибуты свои, либо в коментах писать, а коменты многие не пишут, либо забывают в них написать что метод может кинуть исключение.
Возможность в одном блоке несколько типов исключений ловить.
Свич в последних версиях удобный, хотя в шарпе тоже стал получше.
Перечисления который без всяких методов расширения позволяет дополнительные штуки из себя получать. В шарпе вот енамы по дефолту - чисто для хранения констант, а иногда нужно все равно логику какую-то от этих констант иметь, допустим у тебя в перечислении цвета.
enum Color{
RED,
GREEN,
BLUE,
PRIMARY,
SECONDARY
}

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

Это первое что вспомнилось, и чего мне таки не хватает в шарпе немного.
181 1805742
>>805726
А какой смысл "новые" писать на шарпе и не на нет кор?!
Вопрос должен быть другой "многие ли переводят на кор свои ентерпрайзы"

я вот знаю один такой - антиплагиат
про SO можно и не говорить - они само собой
182 1805756
>>805732

>возможности нормально пометить что может бросить метод.



Но ведь checked exceptions нынче считаются антифичей
183 1805811
>>805732

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


>Возможность в одном блоке несколько типов исключений ловить.


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

switch with pattern matching = awesome! (пик рилэйтед)

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


>Using enums for control flow or more robust abstractions can be a code smell. This type of usage leads to fragile code with many control flow statements checking values of the enum.



SOLID все дела. Не стремитесь создавать швейцарский нож из всего подряд! Single Responsibility - делай одну вещь и делай её хорошо.
Enum позволяет
- упростить читаемость кода;
- повысить производительность;
- помогает избегать всяких магических значений по всей системе;
- предоставляет контракт для взаимодействия между разными частями системы.

>без всяких методов расширения


>логику какую-то


Open–Closed principle - вместо добавления кучи магии для весьма сомнительных бенефитов делай расширения, если нужно добавить особую логику. Шарп всё правильно делает.
Для твоего примера с кодом цвета добавь какой-нибудь HashMap (Dictionary<Color, ColorCode>). У тебя будет разделение логики по смыслу и не надо будет тащить одного монстра везде подряд, даже если он там нафиг не сдался. Особенно (!) если ты enum для поля в БД используешь.

Для особых случаев с enum можно вот сюда посмотреть
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/enumeration-classes-over-enum-types

Type-Safe enum
https://www.meziantou.net/smart-enums-type-safe-enums-in-dotnet.htm
183 1805811
>>805732

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


>Возможность в одном блоке несколько типов исключений ловить.


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

switch with pattern matching = awesome! (пик рилэйтед)

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


>Using enums for control flow or more robust abstractions can be a code smell. This type of usage leads to fragile code with many control flow statements checking values of the enum.



SOLID все дела. Не стремитесь создавать швейцарский нож из всего подряд! Single Responsibility - делай одну вещь и делай её хорошо.
Enum позволяет
- упростить читаемость кода;
- повысить производительность;
- помогает избегать всяких магических значений по всей системе;
- предоставляет контракт для взаимодействия между разными частями системы.

>без всяких методов расширения


>логику какую-то


Open–Closed principle - вместо добавления кучи магии для весьма сомнительных бенефитов делай расширения, если нужно добавить особую логику. Шарп всё правильно делает.
Для твоего примера с кодом цвета добавь какой-нибудь HashMap (Dictionary<Color, ColorCode>). У тебя будет разделение логики по смыслу и не надо будет тащить одного монстра везде подряд, даже если он там нафиг не сдался. Особенно (!) если ты enum для поля в БД используешь.

Для особых случаев с enum можно вот сюда посмотреть
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/enumeration-classes-over-enum-types

Type-Safe enum
https://www.meziantou.net/smart-enums-type-safe-enums-in-dotnet.htm
184 1805847
>>804927
а можно узнать, как этот NET 5 защитить от хакеров, не от взлома, а от декомпиляции. Ведь байт код net - это по сути опенсоурс.
185 1805853
>>805847
Только запутыванием логики, т.е ты пишешь программу которая будет переписывать твою программу так чтобы ахуели все, даже ты в конечном итоге.
Обфускация как вариант, но так себе работает если ты не сам ее писал. Еще есть варианты писать критичный код на С или С++ и через pinvoke вызывать.
Ну или обрабатывать критичные вещи на своем сервере отдавай только ответ.
186 1805862
>>805732
>>805811
Для того чтобы хранить код цвета в перечислении, что мешает объявить его вот так:

enum Color{
Red = 0xFF0000,
Green = 0x008000
}
187 1805872
Тупой вопрос. Читаю сейчас про EF Core и там в дб контексте постоянно для конфигурации дб используются выражения вроде:

>modelBuilder.Entity<User>().HasOne(p => p.Company).WithMany(t => t.Users).HasForeignKey(p => p.CompanyInfoKey);


И собственно вопрос в том, что правильно же я понимаю, что строчки в методе OnModelCreating будут выполнятся только один раз, а потом их из кода можно удалить, потому что они уже привели базу данных к нужному мне виду?
188 1805888
>>805853
все это я уже знаю, ничего нового. Для десктопа не айс NET
189 1805896
>>805888
Все языки которые не компилируются в нативный код такие.
Но что ты такое хочешь спрятать если боишься что у тебя сопрут?
Просто по факту если захотят спереть и нативный код сопрут, так что защита чего угодно сейчас на компе дело условное.
190 1805921
>>805896
говнокод мой увидят))
ты пишешь десктоп приложение, защищаешь его крутым мега-протектором за 300$, а любой школоло качает de4dot, и декомпилит за 2 сек. твою прогу, меняет авторство на свое, и вуаля - клон твоей программы бродит по сети, со смешным ценником в 100 руб.)
191 1805961
>>805921
И зачем ты говоришь о том чего не знаешь, долбоебина? Бесплатный обфускатор + аутентификация по сети и твоё приложение в безопасности. У моего знакомого коммерческий проект, он в нём использует такую схему, единственный раз когда его программу перепродавали был в тот момент когда кто-то купил лицензию, установил её на виртуалку а потом образ этой виртуалки перепродавал. Но он это быстро вычислил и аннулировал лицензию, в следующий раз они уже такое проворачивать не стали.
192 1805994
>>805961

>аутентификация по сети и твоё приложение в безопасности


аутентификация по сети вообще ни на что не влияет. А обфускация повышает "да чет лень ковырять ломать"

компиляция в натив которую обещают еще больше повысит этот порог
193 1806008
>>805994

>аутентификация по сети вообще ни на что не влияет.


Обновления сам делать будешь?
При её помощи можно добавлять дополнительные слои вида:
При закрытии программы можно шифровать ключевые файлы, а ключ к их расшифровке хранить на сервере и получать его при следующем запуске программы.
В общем, очевидно, что ты один из тех кукаретиков, которые не разбираются в вопросе, а говорят так как чувствуют.
194 1806020
>>806008

>Обновления сам делать будешь?


хрякер перепродает текующую версию. он влзломал продал и забыл. зачем ему возня с обновами. Если нужны будут обновы то ему снова бабла занесут и все.

>При закрытии программы можно шифровать ключевые файлы


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

зы: вот если бы ты сказал что буду получать по сети сам исполняемый байткод, впрочем даже это не защита
195 1806027
>>806020

>я всё взламать магу!!!


>RDR2 до сих пор не взломан



>ему снова бабла занесут и все.



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

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


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

>>RDR2 до сих пор не взломан


он скомпилирован в байткод? или все же в натив? зачем ты это сюда принес
197 1806066
>>805726
В моем окружении все новое пишется на нет кор (и всем очень нравиться), старое тоже все пытаются перевести, если не слишком много трудозатрат.
198 1806067
>>806027

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


тут вопрос кому им

я покупаю софт который привязан к моей машине (учетке) и отвязываю его.
Далее продаю его куда дешевле, но многим и мои вложения окупаются
а народ экономит

зызызы:
и в тот же рдр2 можно "купить" за сколько там рублей было. 450 вроде. лень смотреть.
Я бордерлендс3 "купил" за 100 руб, правда игра говно, но это уже другой разговор
199 1806070
>>805872
Проверять я конечно не буду, но рискну предположить, что этот код может использоваться при миграциях и валидации соответствия мапинга базе данных. Но смысла удалять не вижу - вдруг захочется еще одну такую же БД сгенерировать для другой среды.
200 1806087
Здарова, котаны.
Джун .нета в треде. Скажите, .net/asp.net сильно отличается от .net core/asp.net core? Писал учебный проект на коре, реальный предлагают на обычном. Много там переучиваться?
201 1806095
>>806087
Отличия не принципиальны. Если проект уже существующий - почти не заметишь разницы поначалу, если новый - немного нужно почитать как намутить ASP.NET Core апликацию с ее IoC, стартапом и конфигурацией.
202 1806100
>>806095
Проебался в глаза.
Проект уже существующий, по всей видимости, трудностей быть не должно. Сам так начинал карьеру.
203 1806106
Когда я использую протокол UDP, то при большом размере файла (больше 64 кб) я не могу отправить его с помощью метода
serverSocket.SendTo(file, clientEndPoint);
Как я понял, дело в ограничении размера транспортного сегмента/датаграма, он не может быть больше 64 кб (а часто даже не больше 1 кб).
Но почему тогда при использовании протокола TCP и метода
clientSocket.Send(file);
такого ограничения нет и мне позволяют хоть 20 мб переслать за раз?
asp-net-mvc-1-[1].jpg9 Кб, 400x239
204 1806107
Требуется помощь!
У меня есть веб приложение на асп.нет с айдентити.
Я хочу добавить в это приложение веб сервис, который будет возвращать какие-то значения, которые привязаны к пользователю. Не могу понять, как это вместе связать. Апи-контроллер и Авторизацию.
Подскажите, плес, господа программисты!
205 1806119
>>805961

>+ аутентификация по сети


поорал блядь. Твоя аутентификация так же легко выковыривается.
206 1806123
>>806119
да какая разница. мне просто нужен пользователь авторизованный. как это вместе объединить-то?
207 1806131
>>806008
у хакера твой код. Что ты там собрался шифровать, лолка? Трудно твой метод шифровки заккоментить, чтобы вообще ничего не шифровалось?
208 1806140
>>806131
блядь, ничего я не собрался шифровать, мне похую. чтобы самому не писать авторизацию, я использовал то, че уже есть. че ты доебался-то до меня, пидрила обоссаный?
209 1806141
>>806140
ты тугодум, посмотри, на какие я посты отвечал
210 1806144
>>806107
по http протоколу можно запилить, возврат в json, на клиенте уже распарсишь и все.
211 1806150
>>806144
можно поподробнее описать
212 1806155
>>806107
Когда ты авторизируешься, тебе дают токен, который прикладывается к каждому запросу. В этом токене хранятся данные о текущем пользователе. В коре я это делал так -
return User.FindFirstValue(ClaimTypes.NameIdentifier);
Если ты в обычном .NET то хз, ищи что-то подобное.
213 1806159
>>806008

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



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



разбирается он в вопросе блядь, трололо.

ДО:

string auth(){
httprequest
.......
return {auth : "ok", key: "qwertyuiop"}
}


ПОСЛЕ:

string auth(){
// httprequest заккоментили просто, и вернули что надо.
// .......
return {auth : "ok", key: "qwertyuiop"}
}


Что ты тут своей аутентификацией сделаешь долбоебушка?
214 1806163
Товарищи погроммисты, помогите разобраться с вакансией. Наша компания выставила вот такую вакансию https://kazan.hh.ru/vacancy/38910125
Почему нет откликов? Зарплата не устраивает? У нас в требованиях нет ничего сверхсложного или отталкивающего. Что не так?
215 1806174
>>806163

>Фарт


>Fart


>Пук


Вам срочно нужно менять имя. Ну и криптовалюты это конечно полный зашквар.
216 1806178
>>806174
Сменили уже. Это старое имя. Сейчас компания называется по-другому
217 1806188
>>806163
По мне норм вообще и стек очень узкий - сходил бы на собеседование если бы сидел без работы и жил рядом.
218 1806197
>>806159

>Что ты тут своей аутентификацией сделаешь долбоебушка?


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

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

Конечно можно проверять бинарник на модификацию, запрещать отладчик и так далее. но это уже не "простая обфускация"
219 1806212
>>806163
1 8??? часовой график работы с 9 до 20 это как? выбирай 8 часов из этого промежутка?
2 Непонятно про рост зарплаты. Вроде бы хотя фуллстек, но 100к это так и останется?
3 я как дотнетчик терпеть не могу фронт. Впрочем я и не зову себя фулл стек.
220 1806228
>>806212

> выбирай 8 часов из этого промежутка?


Да

> 100к это так и останется


Переиндексация имеется. И причем здесь фуллстек-не фуллстек?
221 1806233
>>806197

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



достаточно одной лицензии, чтобы отломать такую защиту
222 1806242
>>806228

>Переиндексация имеется. И причем здесь фуллстек-не фуллстек?


да не причем в общем то. Проще проехать чем развивать тему.

Ну а так я предпочитаю видеть зарплатную вилку. И понимать, что "я джун и 100к это хорошо" или "я не джун и 100к это как то не то"
ну и тому подобное
223 1806249
>>806242

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


> от 100 000 руб. на руки


Верхнего предела нет. Если ты стоишь 250 000, то мы и предлагаем столько
224 1806291
>>805732

>Возможность в одном блоке несколько типов исключений ловить.


вроде ж в шарпе 9 можна будет
225 1806294
>>806249
Человек видит цифру 100к и сразу считает, что это и есть цена, которую вы готовы платить. Поставьте потолок тоже, те же 250к. Хот лучше две вакансии в таком случае сделать: миддл и сеньвор, с двумя вилками.
226 1806297
>>805862
Если очень хочется, то тоже можно. Но анон говорил про добавлении логики и данных в простой enum в принципе.
227 1806301
>>805847
обфускаторы есть
228 1806303
>>806291
И щас можно, только извратно:
catch (Exception e) when (e is ArgumentException || e is InvalidOperationException)
229 1806307
>>805847
Обфускаторы. Но нахуя? Проще сорцы тоже выложить.
230 1806308
А кто нибудь щупал уже шарп 9?
Что блин конкретно попало в него в итоге?
А то рекордсы и в 8 обещали
231 1806319
>>806308
Из мяса - паттерн матчинг импрувменты и рекорды.
https://github.com/dotnet/csharplang/tree/master/proposals/csharp-9.0
232 1806361
А asp.net это популярная платформа? Я как-то совсем немного пытался вникнуть в неё и она выглядела настолько странно и костыльно по своей логике.
233 1806403
>>805994

>компиляция в натив которую обещают еще больше повысит этот порог


а когда эта компиляция в натив будет?
234 1806404
>>806106
Потому что это разные протоколы и работают они по разному. Что за тупые вопросы?
235 1806410
>>806163
Зато тут кукарекуют что работы нет, лол.
236 1806419
>>806119
Так иди RDR2 взламывай, чего ты тут сидишь, орун комнатный?
237 1806420
>>806131
Да. Я же всё по коду размазал и ему половину программы придётся менять чтобы эту шифровку убрать.
238 1806426
>>806419
а что в RDR2?

>>806420
какой же ты тупой, я хуею. Там только возврат от твоего сервера фиксится, и возвращается нужное значение, хоть 100500 шифровок налепи далее.
239 1806429
>>806107
Создай блин проект с авторизацией и посмотри, кек. Посмтри какая структура у идентити и как он привязывает что-то к себе.
Если коротко, то добавляешь пару табличек в БД, у которых внешним ключом будет id пользователя из identity, потом в контроллере достаешь этого пользователя, соответственно и его id, и возвращаешь какие-то данные которые с этим id связаны. Все. Не понимаю что сложного
240 1806431
>>806361
Да, популярная. В чем костыльность и странность ощущается?
241 1806434
>>806163
1. Название поменяйте на .Net разработчик, либо .Net developer, программист ассоциируется с бюджетным дерьмом и нормальный разраб даже дальше читать не будет.
2. Требований слишком много, тут тебе и крипта, тут тебе и бэк с ОРМ, тут тебе и JS с TS, Ангуляром и даже CSS препроцессорами, тут тебе и оптимизация SQL запросов и работа с базами данных. И за всё это 100к. Зачем вы нужны, если джун-фронтендер со знаниями того же React/Angular/CSS с препроцессорами, зарабатывает всего на 30к меньше? А бэкендер может и столько же зарабатывать, а если в ДС/ДС-2 то больше.
3. У вас там в требованиях мидл/сеньор. На них всегда дефицит, и они не пойдут к вам с такими требованиями и такой зарплатой. За такое минимум 150к нужно предлагать, да и то вряд ли вы найдёте человека который удовлетворит ваши запросы, так как уж слишком большой охват технологий, такое просто физически помнить невозможно.
242 1806444
>>806403
хз
но можешь пожевать этот кактус https://github.com/dotnet/corert
243 1806446
>>806434
Так они хотят жнеца, плавца и на дуде игреца. А если не игрец, то обещают научить. Но да, денег мало на такого фуллстека.
244 1806447
>>806426

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



Хуею с дегенерата. У меня при шифровке генерируется массив байт, этот массив байт отправляется серверу для получения ключа расшифровки. Как думаешь, сколько времени у тебя уйдет на расшифровку алгоритма шифрования?
245 1806453
>>806447
сложно имея одну лицензию - получить твой ключ и вписать статично в возвращаемое значение? Хотя так никто не делает, ведь ты ключ заанишь. Делают по другому - где ты расшифровываешь все - подставляется нужное значение, и комментится твое шифрование.
246 1806454
>>806447
слышишь знающий - а ну давай сюда твой файл, супер защищенный)
247 1806479
>>805961
>>806008
>>806197
>>806447

Абсолютно все защиты сходятся на паре маленьких if, твое шифрование, авторизация по сети, ключи все это ломается на изи если защиту делали не сотня людей которые наклепали тысячи таких if в различных местах от разных параметров и в ключевых местах работы программы. Так игры и защищают в основном, тупо потому что затем взломщику надо найти эти тысячи if и исправить их, а это ой как не просто может быть, особенно когда такой триггер срабатывает на редких событиях.
И опять же это защита через логику работы когда ты делаешь взлом крайне и крайне дорогим и трудоемким.
В идеале ключ используется каким-то образом в работе программы и без правильного ключа она тупо работает не правильно, но это надо на этапе архитектуры закладывать и крайне тяжело поддерживать.
248 1806495
>>806479
троль поверил, что его защита с бесплатным обфускатором, и его ключем, который приходит с сервера - не ломаемая)) Одно дело - когда продал 20 копий, и твоя прога нах никому не нужна, другое - если счет идет на тысячи.
249 1806517
>>806479
>>806495

Да-да, вот только программа довольно популярна, приносит хороший доход и уже пережила несколько попыток взлома. Я понимаю, что школьникам, которые качают игры с торрентов, хочется мнить себя охуительными хакерами и фантазировать о том как они взламывают мир за секунду, но это никак на реальность не влияет, над этим можно только смеяться.
250 1806519
>>806517
ссылки на супер защищенную прогу, с помощью бесплатного обфускатора, я так понял - не будет? Горе-защитник)
251 1806527
Чет уверен - что там конфузер какой-нить, который отлетает на раз, а дальше опен-сурс, где вертишь шифрование - как тебе угодно)
252 1806541
Анон не знает о сайте https://forum.tuts4you.com/, где даже vmprot вскрывают на изи, а он собрался защищать прогу на уровне исходных кодов, че с него взять :)
253 1806556
>>806527
>>806519
>>806541
Хуею с припизднутого зумерка, который насмотрелся сериала Я робот, зашел на форум по реверс инженеригу и возомнил себя хакером. Ты долго еще в тред срать будешь, пытаясь защитить свой влажный манямирок?
254 1806561
>>806517
Я вот разработчик одного бота для ММО который тоже приносит доход и единственная эффективная защита это вычисление логики на сервере, т.е я передаю сырые данные на сервер, там произвожу вычисления и результат даю пользователю, естественно у меня там авторизация, конфузер и прочее дерьмо типа partial классов чтобы при декомпиляции был 1 файл на 100500 строк, но и это не особо помогает, есть те кто его крякает и дописывают логику.
Поэтому я каждые полгода что-то серьезно меняю и логику защиты в том числе и им приходится снова искать способы взлома т.е мы играем в кошки мышки где я чутка впереди так как минимум неделя у них на взлом уходит.
Но мне это не особо вредит так как люди сами хотят платить.
255 1806565
>>806561
Так кидай ссылку на бота в тред, сейчас этот зумерок обосранный его взломает за пару минут.
256 1806574
Нужно написать инспектор объектов, а точнее свойств.
Я это уже сделал, но оно крайне плохо работает на больших объектах потому что рефлексия медленная штука и я знаю что можно сделать ее быстрее если перевести на делегаты, но вот проблема я не совсем понимаю как мне сделать делегат из объекта тип которого только в рантайме узнаю, т.е на вход к инспектору идет object, может кто подскажет что делать в этом случае, как сделать делегат если узнаешь тип только в рантайме через gettype
257 1806625
>>806565
Не выйдет я его через приват форума продаю где только проверенные, суть в том что на ботов идёт охота и это своего рода защита от бана пользователей
258 1806627
>>806574
ничего не понял

получаешь на вход объект, узнаешь его тип и далее рефлексей достаешь что тебе там надо
если нужно читать значения и рефлексия не устраивает, то генеришь всякие propertyReader
на каком этапе то затык?
259 1806630
>>806625
игра хотя бы какая? 3д?
260 1806652
>>806627
Getvalue работает в 10-20 раз медленнее чем вызов того же метода через делегат.
https://mattwarren.org/2016/12/14/Why-is-Reflection-slow/
Вот хочу получать get свойства через делегат, но при этом никакого хард кода Типа(type) потому что на входе может быть один объект из которого я затем делать дерево буду. Но как делать такое без хардкода хз.
261 1806658
>>806652

>Но как делать такое без хардкода хз.


еще менее понятно стало

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

готовых либ много если поискать
вот первые попавшаяся
https://github.com/mgravell/fast-member
https://github.com/buunguyen/fasterflect
https://github.com/KeRNeLith/ImmediateReflection
.mp41 Мб, mp4,
576x1024, 0:17
262 1806742
Есть форма, которая создается и показывается сторонним пакетом. Вопрос: как можно наиболее эффективно ее закрыть, или не дать ей появиться? Пока просто в цикле проверяю Application.OpenForms[Application.OpenForms.Count - 1] и закрываю. Но может есть более рациональное решение?
263 1806799
>>806742
Устранить причину её появления.
264 1806805
>>806799
Ну мне нужен этот пакет, вот и извращаюсь.
265 1806809
>>806805
дык исправь его
266 1806868
>>806809

>дык исправь его


Это окно рекламы("купите полную версию всего за 599$"), сомневаюсь, что это так просто.
267 1806873
>>806868
исправить просто
сложно найти 599$ а исправить просто
а еще есть один иранский сайт
и наконец никто не запрещает подправить байткод
.mp41,7 Мб, mp4,
540x960, 0:16
268 1806881
>>806873

>сложно найти 599$ а исправить просто


Через это что ли https://www.jetbrains.com/ru-ru/decompiler/ ?

>а еще есть один иранский сайт


Что еще за Иранский сайт?
269 1806886
>>806881

>Через это что ли https://www.jetbrains.com/ru-ru/decompiler/ ?


ну тоже неплохо, но тебе нужно править байткод же
https://github.com/0xd4d/dnSpy

>Что еще за Иранский сайт?


downloadly.ir
.mp41,5 Мб, mp4,
540x960, 0:10
270 1806891
>>806886
Ок, спасибо, завтра буду разбираться как это делается.

>downloadly.ir


Там этого нету.
271 1806981
Я правильно понимаю, что range operator (array[2..10]) эквивалентен методу Span.Slice()? Значит сплайсы больше не нужны?
272 1806983
>>806981
слайсы*
273 1806997
>>806434

> За такое минимум 150к нужно предлагать


Да мы предлагаем. У меня самого з/п не меньше. В вакансии же написано "от 100"

Ладно, в общем сегодня предложу руководству сделать две вакансии
274 1807010
>>806981
Ну если это твой пет-проект, то конечно не нужны, но реальность такова, что большая часть кода это код под .Net 4.5 без поддержки новых фитчей языка.
275 1807037
>>807010
Да ладно? Никогда бы не подумал, что если какая-то фича не доступна, то придётся пользоваться тем, что есть. Я спрашиваю, у слайса есть какое-то своё применение, или range operator его полностью заменяет? И нужен ли вообще тип Span в таком случае? Просто в том примере применения типа Span, что я видел, приводится как раз слайс массива на несколько частей, чтобы не выделять память на новые массивы, в которые бы пришлось копировать элементы старого.
276 1807043
Qqq
277 1807051
>>807037

>Span


Служит для оптимизации работы с памятью, а не для того чтобы заменить цикл for var i = 2; i < 10; i ++
А ренж оператор это обычный сахарок, который сделан по типу петухоновского.
278 1807071
>>806163
Сходил бы к вам. А, нет, не сходил – у вас опыт от трех лет, а у меня только год и я из другого города
279 1807146
Аноны, имеется приложуха на asp.net core. Там имеется partial view, где происходит аплоад файла. Так вот, эта partial view работает на всех вьюхах, кроме одной единственной, там она даже кнопка "browse" выглядит без стилей и загрузка нифига не работает. Отчего так бывает?
280 1807175
>>799249
1. Удаляешь nuget пакет EntityFrameworkCore.SqlServer
2. Устанавливаешь nuget пакет Npgsql.EntityFrameworkCore
3. Меняешь в Startup.cs UseSqlServer на UseNpgsql
всё
281 1807465
>>806163
https://kazan.hh.ru/vacancy/39244462
https://kazan.hh.ru/vacancy/39244069

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

Большое всем спасибо. Вы реально помогли
.mp41,4 Мб, mp4,
576x1024, 0:18
282 1807472
>>806886
>>806881
Ух ты, анончик, спасибо большое! Нашел нужный кусок, затер, все превосходно работает. Но почему это достигается исключительно через правку байткода? Компилировать даже никак не измененный кусок не хочет - тонны ошибок.
283 1807487
>>807472
если ты про "дотпик экспортит в проект, а оно не собирается", то это потому что у тебя нет оригинального проекта *.csproj с как оно там собирается
Ну и баги декомпиляции, когда оно декомпилится в лабуду
284 1807492
>>807487
Нет, я про dnSpy, но я так понимаю причина та же, ок.
285 1807523
>>806658
Попробовал проверить эти либы на скорость и результат мягко говоря так себе.

На 10 лямов вышло вот так.

Classic: 30,6128 ms.
Reflection: 1287,4855 ms.
Delegate: 56,0964 ms.
Fasterflect not cached: 1167,4195 ms.
Fasterflect cached: 1255,3272 ms.
ImmediateReflection: 1396,9336 ms.
fast-member: 1771,6747 ms.

Вот код на 1 лям итераций без fast-member так как его сам компилировал
https://dotnetfiddle.net/4QwGjL

Я же хотел найти способ как в случае Delegate, но чтобы без хардкода типа.
286 1807530
>>807523

>но чтобы без хардкода типа.


да блин без какого хардкода? раскрой тему что есть хардкод блин

В остальном же
1 кто же меряет стопвотчем
2 да еще онлайн
3 да еще забывая сделать реста
4 и при этом еще считая в тесте время генерации гетера.
287 1807531
Подскажите годную книгу для вебмакаки ну или курс какой нибудь, чтобы посмотрел/почитал повторил и пошел говнякать бэкенд для своих проектов?
288 1807553
>>807530
Пиздец ты тупорылое животное, очевидно, что без вот такого хардкода:

var delegateMethod = (DelegateMethodName) Delegate.CreateDelegate( ...
289 1807554
>>807531
Для своих проектов есть Node.JS, если хочешь статическую типизацию, то есть Typescript, ебаться с .Net для своих проектов не имеет смысла.
290 1807565
>>807553
то есть без кодогенерации. с помощью магии?
291 1807627
Такой вот тупейший вопрос. Как сделать так чтобы окно консольки всегда было поверх других окон, пока не закроешь его?
Я гуглил и все что нашел это страшные штуки с kernel32, маршалингом и передачей IntPtr. А я в шапр-то убежал из-за того что как увидел это в с++ подумал - ну его нахуй.
В общем, неужели нет более удобных способов заставить окошко консольной программы быть всегда сверху других окон?
Зачем надо? Я сделал простенький таймер рабочего времени в виде консольного приложения, ну чтобы не забывать выйти покурить, если зарабатываюсь, ну и именно такой простенький таймерок в консольке мне норм, но хочется чтобы он всегда висел сверху, чтоб не забывать про него.
292 1807640
>>807627
сложно переместить таймер с консоли на форму?
293 1807641
>>807640
и не трахать себе мозг?
294 1807642
>>807627
Нет, только через kernel
295 1807667
>>807640
У меня на работе линукс просто и я слышал что там вроде были формы, но вроде их только под винду же завезли.
>>807642
Ну блин, проблема на самом деле не в кернеле, а в том что на деле я на линухах сижу и думал что может быть с переходом на core MS завезли какой-то общий апи для работы с консолькой, чтобы такие вот штуки можно было просто делать. Грустненько.
296 1807850
>>807554
Так я для последующего перекачеввния на фриланс/развития как фуллстек собираюсь учить
297 1807897
Анон, не знаю, поможешь нет.

Хочу сделать себе скриптовый язык на шарпе в своем мини движке на с++ (не спрашивайте зачем, мне просто интересно и для скилла).

Я так понимаю, во всяких юнити юзают для этого mono - а что почитать по данной теме?

Второй вопрос - и это можно только через mono? А например .net core нельзя?
298 1807906
>>807897
не "во всяких юнити юзают для этого моно"
а все упирается в "на чем работает юнити"
299 1807913
>>807906
само юнити или игры?

Но ведь .net core как раз же развивают в сторону мультиплатформы и отвязки от винды
300 1807914
>>807913
сам движок юнити это моно

>Но ведь .net core как раз же развивают


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

Но речь не об юнити, а о том как сделать у себя скриптинг С#. Как например сделано в годоте, bsf и т.д.
302 1807922
>>807917

>над которым уже сделана шарп оболочка для скриптинга


а шарп в чем выполняется? ему нужен рантайм. и этот рантайм есть юнити.

но вообще в теории я бы
1 притащил бы рантайм и юзал бы этот рантайм для ваших шарп скриптов
2 редоставил либу на дотнет, чтобы ее можно было вызвать из шарпа и она прокладка для доступа к моему софту
ну или заранее подгрузил ее в исполнение, чтобы о ней даже не думали
303 1807923
>>807922

> и этот рантайм есть юнити.


и этот рантайм есть юнити == и этот рантайм есть моно
304 1807925
>>807917
то есть ты как рантайм можешь взять что угодно
для тебя без разницы. разница будет для скриптующего если он захочет либу какую то подключить, а ее нет под выбранный рантайм. но уже почти дотнет5 так что все уже есть
image.png117 Кб, 770x282
305 1807950
Начал проходить курс от skillbox по разработке игр на Unity. Ну и сначала ж там идёт C#. Дошло дело до массивов и домашнее задание состояло в том, что бы нарисовать в консоли треугольник паскаля. Ну я закономерно сфейлился. Только по туториалу на ютубе понял суть, это норма?
306 1807964
>>807950
проблема таких "задач" в том что они на дрочку математики, а не программирования.

Я эту задачу тоже не решу, потому что не ебу как там считается этот треугольник Паскаля на бумажке.
На гугление я потрачу 10-20 минут
На попытку вникнуть в формулы - 20-30 минут
На программирование - 1-2 минуты.

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

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

Меня вон даже числа Фибоначи бесят - нахуя рекурсию на них показывают? Есть более простые способы показать рекурсию. Я вообще программирование начал изучать в 10 лет - какой блядь Фибоначи, какой матан? Спокойно на нормальных примерах разобрался и с рекурсией и со многим другим.
307 1807980
>>807964
Так в том то и дело, что суть треугольника и откуда берутся цифры эти я понял за пол минуты, а вот запрограммировать не смог. Т.е. опыта жонглировать данными в массивах еще нет, а они такое задают....

Там по сути то берутся 2 вышестоящих числа, складываются и получается нижнее под ними. И если человеку это легко объяснить, то машине капец тяжело, т.к. для неё понятий "ну там возьми 2 числа сверх" она не знает что такое сверху, сбоку и т.д... нужно думать в цифрах индексов массивов...
308 1807990
>>807850
Фриланса на .Net тоже нет, исключением будет только если у тебя уже есть как минимум 2 года коммерческой разработки, но это тогда не фриланс уже будет, а обычная удаленная работа. Если тебе фриланс нужен, то учи PHP.
309 1807996
>>807950
Конечно норма, потому что все эти курсы дерьмо, всю информацию ты сам будешь гуглить и учить, а твои преподы/менторы просто запустят твой говнокод, скажут "ну да, это треугольник" и пойдут дальше. В общем, можно тебя поздравить с проебанными деньгами.
310 1808007
>>807996

>Конечно норма


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

>В общем, можно тебя поздравить с проебанными деньгами.


Ты думаешь я реально записался к ним на курс? они же просят 4 258 рублей в месяц и дают еще кредит на 36 месяцев. Т.е. их курс по Unity стоит 153к рублей. Я что больной столько платить? Просто скачал на торренте курс.
311 1808010
>>808007
Ну тогда ничего необычного нет. Очевидно, что по началу тебе придётся гуглить и искать ответ, у тебя ведь нет практического опыта. Тупость определяется со временем, путём возвращения к задачам которые ты уже решал, либо к похожим на те которые ты уже решал. Вот если в таком случае у тебя сложность возникает, значит ты тупой и программирование это не твоё.
312 1808015
>>808010

>Ну тогда ничего необычного нет. Очевидно, что по началу тебе придётся гуглить и искать ответ, у тебя ведь нет практического опыта.


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

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


В жизни еще не слышал такого точной формулировки как определить тупость. Теперь в реал-тайме смогу оценивать тупой или нет. Уже было что возвращался к старым задачам и без проблем их снова решал.
А когда было ДЗ - написать игру в числа с любым кол-вом участников так я вообще недовольный своим кодом стёр его и написал заново красиво и лаконично.
313 1808139
>>808007

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


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

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

Также и современное программирование - сейчас большинство решений есть в готовом виде, все алгоритмы давно уже написаны, все компоненты давно созданы, все статьи написаны. Если ты не Дональд Кнут, то вряд ли ты что-то новое придумаешь. Да и если придумаешь - не факт что оно кому-то нужно. Вон boost из мира с++ - там сидят крутые боги программирования - а много кому их решения нужны? На шарпе, жабе, расте, и т.д. даже близко ничего такого нет - но это никак не мешает

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

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

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

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

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

Способ стать хорошим программистом всего один - писать код и только писать код. Ну и размышлять и анализировать написанный код - где можно лучше, где получилось криво. Конечно же еще читать умные книжки, смотреть чужой код. Никакие говнокурсы не сделают из тебя сеньора.
313 1808139
>>808007

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


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

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

Также и современное программирование - сейчас большинство решений есть в готовом виде, все алгоритмы давно уже написаны, все компоненты давно созданы, все статьи написаны. Если ты не Дональд Кнут, то вряд ли ты что-то новое придумаешь. Да и если придумаешь - не факт что оно кому-то нужно. Вон boost из мира с++ - там сидят крутые боги программирования - а много кому их решения нужны? На шарпе, жабе, расте, и т.д. даже близко ничего такого нет - но это никак не мешает

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

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

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

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

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

Способ стать хорошим программистом всего один - писать код и только писать код. Ну и размышлять и анализировать написанный код - где можно лучше, где получилось криво. Конечно же еще читать умные книжки, смотреть чужой код. Никакие говнокурсы не сделают из тебя сеньора.
314 1808154
Парни с рідої України. Немного скушновано вечерами, кто-то че-то посоветует по фрилансу? Стоит ли вкативается помимо основной работки по ASP.NET, тоетсь по бекенду в подработки?
315 1808181
Привет, посоны. Есть те, кто вначале вкатывался на Java, а потом ему тошно от от этого ЯП стало и перешел на C#? Почему конкретно вы выбрали C# вместо Java?
316 1808184
>>808181
У шарпа синтаксис приятней за счёт удобства и лаконичности, в остальном различий мало.
317 1808285
Суп шарпач. Посоветуйте, как можно сделать заполнение вёрдовских документов на основе шаблонов из этих же вёрдовских документов? Interope требует наличия на клиентской машине офиса, например. Вручную искать нужные теги в xml плохой вариант, так как при верстке шаблона заглушки могут и пополам перебиться
318 1808291
>>808015
ай малаца!
319 1808298
>>808285

>Interope требует наличия на клиентской машине офиса, например.



Отправляешь на сервер целевой ворд документ и шаблон, в ответ получаешь заполненный ворд документ.
320 1808310
>>808139

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



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

Мир заселён тупыми и ленивыми людьми чуть более чем на половину. И вместо того чтобы повышать общий интеллект всей цивилизации мы просто пытаемся выдать всем по рабочему месту (для галочки в администрации, чтобы потом красивые отчёты показывать).
321 1808385
>>808298
Нету сервера
322 1808443
>>808385
Ну тогда устанавливай офис на клиентских машинах.
323 1808556
>>808285
Если можешь работать с новыми версиями (docx), то можно посмотреть в сторону OpenOffice/LibreOffice. Берёшь их либу, клепаешь док и этот док потом в вёрде запросто откроется.
Есть как официальные либы под дотнет, так и куча сторонних - https://github.com/oldrev/maltreport
324 1808570
>>807950
дай хоть ссыль на курс, а то я уже подзабывать задачки стал
325 1808573
>>808570
leetcode.com - там все нужные задачки есть, причём не только алгоритмические.
326 1808698
https://screeps.com/
MMO для программистов
327 1808776
>>807950
деньги на ветер.
Мог бесплатно на сайте Microsoft пройти курс по C# (правда там ООП нет). Прочитать Metanit, а задачи порешать на Code Wars.

Куча бесплатных ресурсов по изучению программирования, но люди так и продолжают платить за воздух.
328 1808803
Парни, имеет ли смысл создавать свойство, установить которое можно с проверкой на исключение, а потом использовать его в конструкторе класса? Вот, например, есть у меня свойство Name, я описываю, например, то, как его можно сетнуть и внутри сеттера выбрасываю исключение, если имя задается как-то неправильно. Так вот, при создании экземпляра класса я передаю в конструктор имя, и, если оно было передано неправильно, у меня срабатывает исключение, которое поймать можно, но сам экземпляр созданный уже не будет в области видимости вызывающего кода. Надеюсь, вы поняли, че за ебанину я тут написал. Сам вопрос в том, стоит ли вообще так делать?
329 1808814
>>808803
Ты когда нибудь видел ситуацию в которой ты ввел имя русскими буквами, вместо английских и у тебя крашился браузер? Вот ты предлагаешь делать такое же поведенин. Очевидно, что лучше либо предупреждать о неправильном вводе, либо не продолжать выполнение программы и ждать правильного ввода.
330 1808824
>>808803
Судя по твоему описанию у тебя не дойдет до передачи в конструктор, так как ты не смог сформировать свойство которое передаешь оно же выбросило исключение.
Так делать можно, но исключения из любой дырки это плохо, выброс исключения дорогая операция и не всегда имеет смысл быть. Поэтому для обхода исключения выдумывают всякие штуки из функциональных языков типа Option, OperationResult, Either и еще куча различных мини типов которые хранят как ошибку, так и положительный результат.
Если ты делаешь либу то пользоваться надо исключениями так как их все ожидают, а если для себя можешь попробовать иную концепцию.
331 1808828
>>808814
>>808824
Спасибо за ответы. Чет как-то и не подумал в вызывающем коде сделать проверку на ввод
AnalDestructor2010 332 1808850
Посоны, что за пакет в нугете Microsoft.jQuery.Unobtrusive.Validation? Как им пользоваться? Я думал что он мне автоматом в проект закинет либы для клиент-сайд валидации. Но что-то после установки ничего не поменялось.
333 1808971
>>797054 (OP)
Вопрос по Visual Studio.
Я во многие папки (неймспейсы) кидаю docx файл с рабочей документацией.
VS мне этот файл автоматически добавляет в проект, чем замусоривает рабочую область. Как указать, чтобы файлы с такими то расширениями не добавлялись?
334 1808985
В чём отличие System.Data.SqlClient и прочих data providers от Microsoft.Data.SqlClient? Какой использовать?
335 1808993
>>808971
ПКМ -> Exclude Form Project
336 1808996
>>808985
system.data.sqlclient это легаси, Microsoft.Data.SqlClient это обновленная версия. Какую использовать зависит от проекта.
337 1809010
>>808993
Хотелось бы решение на совсем, а не каждый раз кликать мышкой, как макака.
338 1809038
>>809010
С такими вопросами, боюсь, что для тебя это единственный вариант.
339 1809069
>>808971
<None Remove="\*.docx" />

но лучше не используй. Лучше пкм как макака, потому что тот, кто кидает доки не в папку доков должен страдать
340 1809075
>>809069
и те, кто использует docx для доков вместо md
341 1809096
>>809069
Спасибо.

>>809075
По поводу формата и места хранения доков. У меня пет-проект для основной работы. Доки - в основном это всякие формулы и их вывод, т.к. в коде потом хуй поймёшь, откуда это взято, скрины из учебников, графики и т.п. Удобней ворда для этого нет.
Хранить в отдельной папке доков пробовал, но не канает, т.к. теряется, надежней в папке рядом с исходным кодом.
342 1809113
>>809069

>> <None Remove="\*.docx" />


Чет не работает, ошибку выдает.
343 1809126
>>809113

я надюсь ты используешь новый формат csproj, а именно
<Project Sdk="Microsoft.NET.Sdk">

и поместил <None Remove="\*.docx" /> в одну из <ItemGroup>
344 1809127
>>809113

><None Remove="\.docx" />


и какого хрена
кто сьел символы

нужно так

<None Remove="
\.docx" />
345 1809129
>>809113
да гребанная макака со своим парсером
вот пример

https://pastebin.com/QZkKiW7c
346 1809131
>>809129
Разобрался, работает, спасибо.
347 1809142
>>809096

>Удобней ворда для этого нет.


пока не начнешь держать его в контроле версий.
348 1809209
>>797054 (OP)
Почему нет обобщённого интерфейса ICloneable<T>?
Есть только ICloneable, который возвращает object.
Если мне нужно производительное клонирование, стоит ли самому определить интерфейс ICloneable<T> и использовать его?
349 1809261
>>809209
он проблемный.
Если он наследник ICloneable - плохо, а если не наследник тоже плохо
Нельзя повесить ограничение на T (этим страдает и ICloneable) и проблемы с наследованием
в итоге забросили как есть

>стоит ли самому определить интерфейс ICloneable<T> и использовать его?


если он нужен то конечно.
350 1809280
>>797054 (OP)
В LINQ есть .LastOrDefault, я думал он начинает проход с конца коллекции, а он просто переназначает переменную result, нахуй такой оверхед нужен? Может быть есть другой LINQ метод который начинает обход с конца коллекции?
351 1809289
>>809280
Какой еще оверхед. Он выдает последний элемент если коллекция не пуста или дефолтное значение если пуста.

LINQ основан на IEnumerable, а у него как бы нет конца
абстракция же об которую много копий сломано

можешь покопать либу MoreLinq но это вряд ли там есть ибо у IEnumerable нет конца
потрать 10 минут и напиши реализацию
352 1809291
>>809261
Хмм, что-то не очень понятно. Может есть пример какой?
Обобщённый интерфейс же в любом случае реализуется программистом, т.е. в любом случае будет возвращать инстанс типа T, каким бы T ни был, даже если при этом будет ковариантность, всё равно всё будет работать. Если он не реализован нормально, то код просто не скомпилируется. А если реализован, то программист знает, что делает.
353 1809292
>>809289
У IEnumerable есть метод Count() и есть метод ElementAt(), откуда следует, что конец у него есть, как и начало.
354 1809298
>>809292
нет. это всего лишь методы которые предлагают пробежав по итерабле добраться до нужного места

просто в случае бесконечной коллекции он будет очень долго считать, но свою работу будет делать )

тут абстракция протекает. Ничего не поделать - таков мир абстракций. они часто протекают.
355 1809305
>>809298
Вероятно, в этом случае нужен интерфейс IIndexable, который будет иметь Lenght() и this[int i] для тех коллекций, которые это допускают.
Коллекции, которые так не могут, или могут, но плохо (связные списки, например), не будут его реализовывать.
356 1809312
>>809289

>Какой еще оверхед.



Коллекция из 10 элементов, если последний удовлетворяет условию, то LINQ пробежит всю коллекцию, потому что начинает пробег с начала коллекции. Но если начинать с конца, то можно сразу получить результат, т. е. это -9 операций.
Просто как раз возникла ситуации в которой нужный элемент будет ближе к концу коллекции, а в большинстве случаев именно последним, сначала написал с линковским .Last, но потом решил заглянуть в сорсы этого .Last и увидел, что лучше написать обычный цикл for var i = arr.Length - 1 ...
Я то думал, что в LINQ такое учитывается, а теперь придётся каждый раз сорсы смотреть...
357 1809318
>>809312
в LINQ есть оптимизации на тему "если это коллекция то неча по ней бегать а возьмем Count"
но в корне лежит именно IEnumerable как что-то по чему можно пробежать.
и есть велосипеды которые делают как раз то что ты хочешь, то есть при их наличии и правильно подключенном неймспейсе будет подставлен более оптимальный вариант
но лучше другие имена давать таким методам

тут нет идеального решения. слишком общая абстракция.
358 1809329
>>797054 (OP)
Я новичок в шарпе, и у меня вопрос: зачем вообще нужны свойства? Чем function(object.Property) object.Property = value лучше, чем function(object.Property()) и object.setProperty(value)? Это при том, что недостатки очевидны: теперь безобидно выглядящий код может делать любую херню и работать сколь угодно долго.
359 1809334
>>809329
Притом, например, в Котлине вообще убрали поля и оставили только свойства. Что в них вообще хорошего?
360 1809338
>>809291
ну вот навскидку
у нас есть класс
Foo : ICloneable<Foo> и вот мы делаем наследника
Bar : Foo

и тут если мы захотим клонировать только Bar то нам придется так
public new Bar Clone() => new Bar();
и мы сможем использовать Clone везде где у нас Bar (пофиг нам на клонируемость Foo допустим она нам не нужна)

но если вдруг стала нужна и где то принимают Foo и делают его клон, то получают в результате не Bar и значит у нас только один вариант в Bar

Foo ICloneable<Foo>.Clone() => new Foo();
Bar ICloneable<Bar>.Clone() => new Bar();

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

то есть у ICloneable<T> есть побочные эффекты, которые не способствуют его введения в общую библиотеку
361 1809345
>>809329
тем и лучше, что не нужно писать гет сет руками (привет жава) и свойство это самостоятельный объект который можно юзать в рефлексии
362 1809347
>>809345
Возможность не писать гет/сет руками появилась намного позже самих свойств. И с учетом expression-bodied statements это всего две лишних строчки на свойство, стоит ли игра свеч?
Поля нельзя юзать в рефлексии?
363 1809349
>>809329
Потому что некоторые данные класса нужно не только получать, но и устанавливать. Установка (изменение) некоторых данных класса иногда требует проведения проверки или вызова события, например, на отрисовку нового значения в форме.
Это можно легко решить написанием двух методов типа Get_some_value() и Set_some_value(). Но это выглядит уродливо, и глазу приятнее просто написать Point.X = 100500, чем Point.Set_X(100500). В обоих случаях при выходе Point за пределы рабочей области, например, предусмотрена дополнительная логика.
364 1809350
>>809347

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


я про гетпроперти() сетпроперти() МЕТОДЫ как они в жаве
где это тупо методы по конвенции
и появилось же. то есть очевидно же что свойство тупо удобнее методов в своем определении
конечно в шарпе это вылилось в необходимость все таки писать {get;set;} чтобы отличалось от поля, но шарп когда появился
котлину было проще оглядываться (и даже при этом они нах*ртили там с конструкторами и теми же полями)
365 1809351
>>809347

>Поля нельзя юзать в рефлексии?


Понял, это тупой вопрос. Но всё равно, можно было сделать свойства как самостоятельные объекты и при этом оставить синтаксис методов, которыми они фактически и являются, а не полей.
366 1809353
>>809349
"Приятно глазу" - это вкусовщина, мне приятнее вариант с методом, потому что присваивания переменной - это операция занимающая всегда плюс-минус одно и то же время и вообще, самая простая и привычная программисту операция. А установка свойства может делать любую херню.
Слово get в названии геттера использовать необязательно, так что фактически имеем разницу между obj.Prop() и obj.Prop.
367 1809354

>1809351


>Поля нельзя юзать в рефлексии?


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

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

> как самостоятельные объекты и при этом оставить синтаксис методов


а кому нужен этот синтаксис методов. свойства не запрещают тебя писать в старом стиле. но чет никто не хочет загромождать методами при наличии свойств. сахар он вкусный
368 1809355
>>809350
Я имел в виду, что когда Хейлсберг придумывал (заимствовал?) свойства, возможности не писать геттер и сеттер руками еще не было, значит он руководствовался чем-то другим, когда их вводил в язык.
369 1809356
>>809354

>сахар он вкусный


Ты просто говоришь так, как будто синтаксис полей очевидно лучше синтаксиса методов, хотя количество символов, например, практически одинаковое.
370 1809359
>>809354
Я имел в виду, что можно было оставить преимущество для рефлексии и мешать поля со свойствами синтаксически.
371 1809361
>>809359

>мешать


не мешать
372 1809363
>>809353
Нет причин, требующих использовать свойства. Делай как нравится. В C++ времён моего универа, вроде бы свойств и не было, и все так и делали, писали геттеры и сеттеры.
373 1809368
>>809359

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


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

тут вопрос "а зачем нужны поля, ну оставили бы одни свойства" - ну поля это все таки поля. к ним вызов другой, а не как к методам со всеми вытекающими
374 1809378
>>809338
Спасибо, познавательно.
375 1809408
>>809010
В .csproj файле
<ItemGroup>
<None Remove="*.docx" />
</ItemGroup>
376 1809410
Можете пояснить, зачем нужен Span? Это типа массива на стеке?
377 1809422
>>809408
В глаза ебусь.
378 1809554
>>809410
позволяет унифицировать работу с набором байт где бы они не находились реально - в массиве, на стеке, в анманагед не опускаясь в ансейф
379 1809612
>>809329
В основном сахар.

Часто используются для сериализации всяких JSON строк. Забабахал дефлотный { get; set; } и забудь про этот DTO объект.

Ещё очень удобно использовать для read-only данных. Через функцию можно напихать любого кода, который может переписать значение переменной. Но если у тебя у свойства только { get; } то записать тебе туда после инициализации класса ничего не получится.

И есть еще всякие { get; private set; }
В общем удобно. Тошнило от написания такого же функционала в Жаве.
380 1809651
>>809356
в WPF есть биндинги на свойства. Например тут мы биндимся на свойство и привязка работает в обе стороны

...Text={Binding PropertyName, Mode=TwoWay}

А в случае методов что?

...Text={Binding getPropertyName, Mode=TwoWay}

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

далее есть Fody который в свойства вписывает вызов INotifyPropertyChanged ну чтобы ручками не писать. Он то знает где свойства чтобы в них вписывать
а с методами он должен угадывать что метод вида сетФу(бла, бар) это именно сеттер, а не просто метод в который лезть нельзя

ну можно аннотацию добавить да

А можно просто использовать настоящее свойство, как точка где собрано в куче имя и геттер и сеттер и сущность свойство для рефлексии, чтобы не гадать, ну и писать коротко, когда сеттеры и геттеры еще не нужны
381 1810029
>>809353
Больше кода - меньше кислорода.
382 1810644
Пацаны, как себя вести по мужицки с временем?
Все перевел на DateTimeOffset

Что делать с таймзонами оффсетами в следующих случаях?:

1. Приходат дейттам с оффсетом/таймзоной - все гуд, сохраняем как есть.
2. Приходит дейттайм БЕЗ оффсета/зоны - шо робить? По умолчанию сериализатор ставит оффсет рантайма. Это норм? Можно ли настроить, чтоб ставил конкретную зону в разных случаях,
383 1810657
>>810644

>Это норм?


Зависит от приложения.

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


Можно. Указав в настройках десериализации, либо написав свой конвертер для свойства с временем.
AnalDestructor2010 384 1810690
Как правильно в разоре сделать отображение картинки, только в том случае, если она есть на сервере? Сделал так, но выглядит как говно
@if (File.Exists(System.IO.Path.Combine(env.WebRootPath, "images", Model.ImageName)))
{
<img src="/images/@Model.ImageName" />
}
385 1810695
>>810690
Очевидный словарь вида string,bool если файл есть, то ключ будет возвращать правду, если нет то ложь
386 1810707
>>810695
Но надо будет поддерживать валидность тогда.
Что-то типа https://stackoverflow.com/questions/23459715/use-filesystemwatcher-in-asp-net

Или через IFileProvider, если кор.

А вообще - и так неплохо, разве что вынести логику в контроллер и использовать IFileProvider
387 1810708
>>810657

>Можно. Указав в настройках десериализации


Как? Не нашел такого кейса. Такое ощущение, что никто вообще не парится о дейтаймах без тамзоны и всегда ожидают с...
388 1810714
>>810708
var settings = new JsonSerializerSettings()
{
DateParseHandling = DateParseHandling.DateTimeOffset,
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};

Вот так, например.
389 1810719
>>810707
Суть в том чтобы убрать лишнее обращение к жесткому диску, так как это дорогостоящая операция, дешевле читать из памяти.
390 1810723
>>810719
У IFileProvider есть вотчер. И походу он кеширует, надо уточнить.
391 1810729
>>809329
Потому что есть кодстайл, по которому у тебя в принципе не должно быть полей торчащих наружу, и ты вызывая Point.X=abcd понимаешь что вызываешь метод Point.Set_X(abcd).
Зачем оно нужно, затем чтобы не заставлять программистов кучу копипастного кода писать, т.к. в 95% случаев у тебя свойство будет prop{get;set;} и миллион строчек с Get/Set_Prop просто забивают кодовую базу. Посмотри проект на джаве какой-нибудь, для сравнения, очень весело продираться через 500 строчек геттеров-сеттеров, к логике особенно если долбоеб их никак не группировал, а херачил как попало по мере необходимости.

Ну и да, тебя почему-то не удивляет то что в C++ у тебя оператор битового сдвига используется для манипуляции с потоками, как-то живут и ничего. Иди в С++ тред поплачь о том, что ты вот ожидаешь что будет битовый сдвиг, а там пидоры писавшие стандартную библиотеку переопределили его и теперь ты вот не можешь хелловорлд написать.
image.png46 Кб, 1160x516
392 1810730
>>810714
Ниробит ((
393 1810731
В общем, тупой вопрос.
Смотрите, я делаю консольное приложение. Хочу чтобы там можно было использовать комбинации клавишь, типа Shist+Ctrl+C - скопировать строчку целиком в позиции курсора, alt+стрелочка - передвинуть строчку в направлении стрелочки ну и т.д. Так вот, я чет не понимаю, есть ли способ это реализовать стандартными средствами работы с консолью в .net или таки придется пилить свою абстрактную клавиатуру и в ней реализовывать все это? Не очень сложно, но просто я опасаюсь что оно будет конфликтовать с тем что в стандартной либе есть. Может быть проще в данном случае отказаться от шарпа и херачить на чем-то другом, например плюсах?
394 1810737
>>810730
Конечно не робит, потому что offset в JSON строке не указан. Читай документацию и разбирайся, мне лень тебе разжевывать.
395 1810738
>>810737

>offset в JSON строке не указан



Это было в вопросе и есть главной проблемой

>>810644

>2. Приходит дейттайм БЕЗ оффсета/зоны - шо робить? По умолчанию сериализатор ставит оффсет рантайма.

397 1810744
>>810738
Ты совсем тупенький? Как по твоему программа должна узнавать какой часовой пояс тебе нужен, если в JSON строке он не указан? Если тебе нужен всегда один offset то ты либо можешь написать свой конвертер для данного свойства, парся строку с использованием конструкции вида: DateTimeOffset.Parse(reader).ToOffset(TimeSpan.FromHours(нужное тебе смещение));
Либо использовать перечисление DateParseHandling.None и парсить дату из строки уже после десериализации. Можно отдельное свойство сделать которое будет возвращать тебе DateTimeOffset дату из строки-свойства.
398 1810754
>>810744

>Ты совсем тупенький?


Почему обижаешь? Неужели я так неясно сформулировал вопрос?

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



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



Возможно, тут было не понятно в каких случаях, имел ввиду явно указать офсет при десериализации, да.
399 1810762
>>810754
Значит тебе конвертер нужен и аттрибут JsonConverter(typeof(тип твоего конвертера))

>Неужели я так неясно сформулировал вопрос?



Я тебе изначально решение в первом же ответе дал, но ты даже не хочешь пробовать, ты будто ждёшь что тебе готовое решение выкатят.
400 1810775
>>810762
Ты посоветовал сеттинги и конвертер. Сеттинги я и сам дрочил до этого - ничего не получилось. Я и уточнил.
А конвертер да, не хотелось так заморачиваться.
Ок, пасиба в общем.

В принципе, я могу просто надеяться на рантайм, что он в ЮТС будет и все будет чикипуки...
401 1810858
>>810729
Нормально же спросил, чего ты такой злой.
402 1811322
>>797054 (OP)
Есть где-то ".cs"-файл, который позволяет шифровать-дешифровать данные,
а также подписывать - эти данные (а не только их хэш),
и данные произвольной длины,
при помощи RSA-ключей (одного ключа - приватного, а другого ключа - публичного)?

Мимо глянувший на описания дефолтных методов работы с RSA, и безуспешно пытавшийся что-то с этим сделать.
403 1811330
Есть шанс сейчас полностью выбрать один из двух стеков java (+kotlin) или C# (.Net Core)
Я совершенно не ньюфаня, просто предоставляется возможность полностью погрузиться в одну из платформ, но внятной и глубокой информации по этому выбору нет (везде что-то поверхностное).
Есть у кого интересные мысли по поводу той или иной технологии, любое мнение будет полезно.
404 1811338
>>811322
Так и не понял чего ты хочешь. Исходники библиотеки стандартной открыты.
Вот можешь смотреть сколько хочешь.
https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/rsa.cs

Если там нет чего тебе надо - допили.
405 1811343
>>811330
Ну, я вот ньюфаня.
Так вот, мое мнение.

Зависит от того где стек применяться будет.

Если это мобилки, то я бы все равно выбрал Java+kotlin, потому что при всех историях о том что net.core+Xamarin пригоден для реальной разработки, оно не совсем так, потому что комьюнити для мобилки на .net милипиздрическое -> ответов на тупые вопросы и нормальной поддержки от тех кто сторонние библиотеки пилит - хуй няйдешь. Банально, я 2 года назад вынужден был на xamarin.forms пилить приложение, так вот, заказчик хотел treeView, и этой простой хуйни нет из коробки, чтобы запилить ее так чтобы она и на андроидах и на ios выглядело нормально, потребовалось в разы больше усилий, чем если бы просто 2 проекта паралельных делалось, просто потому что хуй найдешь готовые решения(тогда даже ебучий синкфьюжн не сделал еще этого). Вооооот. И там такой хуйни навалом было. Еще и баги самого Xamarin, о, а как заставить это одинаково на андроиде и IOS выглядеть - да хуй знает, будет смотреться как говно инородное. А если не формы, то это фактически не особо отличалось бы от нативной разработки, только работало бы все хуже и единственный плюс это язык. В общем, для мобилок - 2 года назад Xamarin был хуетой, ХЗ как сейчас, с того времени не работал с ним. А вот с Java на мобилках покодил и блядь, ну серьезно, я чувствую себя ебанатом из-за того что изначально согласился на Xamarin, надо было продавливать нативную разработку, но это была первая работа и я не знал что можно так.

Веб - тут примерно одинаково. Выбирай по принципу что больше нравится. Как по мне для веба asp.net (core) охуенная хуйня. Все есть из коробки, то чего нет ставится парой нугетов, на любой вопрос ответ за 2 секунду гуглится, кестрел охуенен, ненси тоже, примеров - жопой ешь, майки еще и за эти годы исправились и теперь у них более-менее нормальная документация и примеры, а не как раньше: Console.WriteLine - печатает строку в консоль.

Декстоп. Если онли винда, то .net(core) будет получше(все есть, xaml - охуенно, все новые фишечки тебе завозят, короче ляпота). Если предполагается что гуй будет еще и на линуксах-хуинуксах, то тут как с замарином, оно вроде как есть, а по факту хуйня и больше боли вызывает и, наверное, Java окажется опять лучше, хотя я кроссплатформу на Java на писал, потому хуй знает, может быть и у джавы там не все так хорошо.

Если какие-то служебные утилиты, типа сервисов и консольных штук, то тут как с вебом, и там и тут все есть. Тут выбирай сердцем, кек.

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

Воооот. Но я нуб, который всего 3 года опыта работы имеет, можно не брать мое мнение в расчет.
405 1811343
>>811330
Ну, я вот ньюфаня.
Так вот, мое мнение.

Зависит от того где стек применяться будет.

Если это мобилки, то я бы все равно выбрал Java+kotlin, потому что при всех историях о том что net.core+Xamarin пригоден для реальной разработки, оно не совсем так, потому что комьюнити для мобилки на .net милипиздрическое -> ответов на тупые вопросы и нормальной поддержки от тех кто сторонние библиотеки пилит - хуй няйдешь. Банально, я 2 года назад вынужден был на xamarin.forms пилить приложение, так вот, заказчик хотел treeView, и этой простой хуйни нет из коробки, чтобы запилить ее так чтобы она и на андроидах и на ios выглядело нормально, потребовалось в разы больше усилий, чем если бы просто 2 проекта паралельных делалось, просто потому что хуй найдешь готовые решения(тогда даже ебучий синкфьюжн не сделал еще этого). Вооооот. И там такой хуйни навалом было. Еще и баги самого Xamarin, о, а как заставить это одинаково на андроиде и IOS выглядеть - да хуй знает, будет смотреться как говно инородное. А если не формы, то это фактически не особо отличалось бы от нативной разработки, только работало бы все хуже и единственный плюс это язык. В общем, для мобилок - 2 года назад Xamarin был хуетой, ХЗ как сейчас, с того времени не работал с ним. А вот с Java на мобилках покодил и блядь, ну серьезно, я чувствую себя ебанатом из-за того что изначально согласился на Xamarin, надо было продавливать нативную разработку, но это была первая работа и я не знал что можно так.

Веб - тут примерно одинаково. Выбирай по принципу что больше нравится. Как по мне для веба asp.net (core) охуенная хуйня. Все есть из коробки, то чего нет ставится парой нугетов, на любой вопрос ответ за 2 секунду гуглится, кестрел охуенен, ненси тоже, примеров - жопой ешь, майки еще и за эти годы исправились и теперь у них более-менее нормальная документация и примеры, а не как раньше: Console.WriteLine - печатает строку в консоль.

Декстоп. Если онли винда, то .net(core) будет получше(все есть, xaml - охуенно, все новые фишечки тебе завозят, короче ляпота). Если предполагается что гуй будет еще и на линуксах-хуинуксах, то тут как с замарином, оно вроде как есть, а по факту хуйня и больше боли вызывает и, наверное, Java окажется опять лучше, хотя я кроссплатформу на Java на писал, потому хуй знает, может быть и у джавы там не все так хорошо.

Если какие-то служебные утилиты, типа сервисов и консольных штук, то тут как с вебом, и там и тут все есть. Тут выбирай сердцем, кек.

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

Воооот. Но я нуб, который всего 3 года опыта работы имеет, можно не брать мое мнение в расчет.
406 1811347
>>811343

>...можно не брать мое мнение в расчет


Зря, хорошее мнение и опыт, мне было интересно. Благодарю.
407 1811391
>>811343
интересно как ты с жавакотлином собрался под иос кодить )
А про "выглядеть одинаково" тем более. Одинаково выглядят только вебприложухи. А хамарин он же нативные контролы под капотом юзает.

>>811330
В плане удобства хамл на голову выше стоит того пиздеца что городишь в андроид (а то и на 3 головы). но хамарин сыроват. там еще много багов которые нужно править. В андроид только с их aac (архитетуре компонентс которые) и котлином стало удобоваримо. Товарища выше от жавы почему то не тошнит, стойкий товарищ )

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

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

Но это не так важно. Если хочешь вкатиться на работу, то смотри, что популярнее в твоем городе. Там, где я сейчас живу, вакансий джавы в 1.5-2 раза больше шарпа.
А в родном мухосранске наоборот, примерно 1-2 на джаве и 10-15 на шарпе.
409 1811495
Приветствую олдов. Наметил тут себе план чтения на ближайший год. Дайте ревью какое-то. Все ли в том порядке расставлено? Что еще посоветуете в дополнение к этому?
1.Эндрю Троелсен, Филипп Джепикс - Язык программирования C# 7 и платформы .NET и .NET Core.
2.Джозеф Албахари - C# 7.0. Справочник. Полное описание языка.
3.Роберт Мартин - Принципы, паттерны и методики гибкой разработки на языке C#.
4.C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development Fourth Edition.
5.Бен Уотсон - Высокопроизводительный код на платформе .NET.
6.Роберт Мартин - Чистый код.
7.Что-то по работе с базами данных.
8.Что-то по алгоритмам и структурам данных.
9.Что-то по работе с git.
10.Стив Макконнелл - Совершенный код.
11. Роберт Мартин – Идеальный программист.
410 1811549
411 1811680
>>811495
Советую почитать какой-нибудь максимально короткий гайд по языку, за пару вечеров, типа метанита.
А дальше ставить себе задачи и решать их, изучая по ходу официальную документацию, стековерфлоу и т.п.
Практика - 80%, теория - 20%.
412 1811701
>>811680
Толсто
413 1811716
>>811680

>советую как можно меньше читать, и находить ad hoc решения на stackoverflow


Отличный совет. Макака готова.
414 1811726
>>811716
Если это первый язык то да, а если 6+ то очень рабочая схема
415 1811730
>>811726

>чистый код, что-то по базам данных, алгоритмам, git


>6+ язык


Вытекаешь. Никто и не говорит что для 6 языка нужно заново изучать информатику. Видно же что он только вкатывается.
416 1811733
>>811495
А Рихтер?
417 1811846
>>810714
А как ты угадал что у него Newtonsoft?
418 1811853
>>811846
Лучше пока не придумали
419 1811866
>>811853
Вкусовщина какая-то.
420 1811876
>>811866
Так ты сравни возможности, а потом о вкусах говори.
421 1811884
МС рил объединит все в NET 5, или это маркетинг и на деле просто под кор чуток подстроятся?
422 1811896
>>811884
NET 5 - новая версия кора, из Framework туда особо ничего нового не переносили напрямую. Все дальнейшие усилия по разработке будут направлены на NET 5. Назвали его так - чтоб оказать, что он уже может примерно все, что мог Framework, чтоб избежать путаницы с .NET Core 4 vs .NET Framework 4, чтоб избавится от дополнительного слова в названии (Core), поскольку это единственный актуальный фрейморк.
423 1811910
Поясните мне в чем суть рекордов и зачем я их должен использовать? Ну, т.е. я типа понимаю, что это, но какой юзкейс?
Скажем, вот я работаю с EF, правильно ли я понимаю, что если я объявлю модель рекордом, то ничего там менять не смогу и чтобы внутри контекста было изменение я должен буду явно вызвать апдейт в который передам новое значение? Просто если так, то там же куча всего должно поломаться, т.к. на текущий момент будет кинуто исключение что объект с этим ID захвачен контестом и ссылки не совпадают.

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

В общем, я не против этой фишки, но не совсем понимаю область ее применения, может быть кто-то объяснит тупому, зачем оно надо вообще?
424 1811913
На шарпе можно написать шаред либу, которую можно будет запустить и на линуксе и на винде?
Если да, то приблизительно как это делают?
425 1811914
>>811896
То есть, они выкинули Core, по сути?
426 1811916
>>811913
Создаешь проект типа netstandard и пилишь свою либу.
427 1811921
>>811876
Сравнивал, тесты по производительности делал, в проде в огромных приложениях использовал. Заявляю: "Лучше пока не придумали" - это вкусовщина.
428 1811922
>>811914
Нет, они выкинули framework, выкатили следующий релиз кора, назвали его просто дотнетом и сказали: готов!
429 1811924
>>811914
Они его переименовали.
430 1811929
>>811922
>>811924
А всякие xaml, wpf и прочее куда дели?
431 1811935
>>811929
Всё это уже и так есть в .NET Core 3. Ещё одно отличие .NET 5 в том, что туда добавят Xamarin (сейчас он отдельно от Кора).
432 1811936
>>811913

>запустить


тебе точно либу, а не исполняемый файл?

dotnet new classlib -n mylib
cd mylib
dotnet build

Можно сделать self-contained сборку, чтобы дотнет устанавливать не пришлось.
dotnet publish --self-contained true --runtime ubuntu.18.04-x64
433 1811950
>>811936
Селфконтейнер сборка - хуйня. В некоторых случаях она все ломает нахуй. Например, если тебе нужно запилить демона, который на винде будет как виндовый сервис работать. Винда это время распаковки считает будто сервис не отвечает вовремя на запрос и вырубает к хуям. Такие вот дела.
434 1811959
>>811921
С чем сравнивал то?
Вот тебе сравнение:
https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to

Больше половины функционала не поддерживается и предлагаются использовать костыли, а для чего-то даже костылей нет.

Newtonsoft самая популярная библиотека, использовать что-то другое будет человек, который хочет показать всем "смотрите, я не самое популярное решение использую, я не такой как все!".
435 1811960
Только начинаю вкатываться в программирование.

Читаю тред, не понял что такое Net 5, Net 4, фраемворк. Это типо расширения для языка? Или что? Можете объяснить незнающему.
436 1811967
>>811960
Это набор стандартных библиотек разных версий.
437 1812041
>>811936
Не правильно сказал, именно либы имел ввиду. Но спасибо за пример, интересный вариант тоже.
438 1812152
Только копаю в сторону шарпа и еще не совсем понимаю asp.net.
В общем, достижимо ли создать на шарпе встроенный веб сервер (portable)?

Сам сервер нужен для скачивание статических файлов по http, с какими-то предварительными настройками (запустил файл, дал ссылку человеку, потом закрыл). Можно ли с какой-нибудь сборкой kestrel или другим сервером сделать подобное, с "--self-contained"?
439 1812155
>>811950
Веб и консольные приложения нормально запускались.
А почему демон во время запроса распаковывается? Процесс же уже запущен должен быть.
440 1812159
>>811959
Популярное не всегда значит "самое лучшее". То что там в списке помечено как "не поддерживается" или "имеется свой вариант" либо очень редко используется, либо в дефолтной библиотеке просто используется по другому.

Aspnetcore и куча библиотек к нему по умолчанию System.Text.Json используют, и чтобы подключить Newtonsoft иногда приходится кучу телодвижений сделать. Но по большей части это дело вкуса. У нас в команде много кто новой библиотеки вообще ещё не видел и тащат Newtonsoft просто потому, что не вкурсе альтернатив.

Newtonsoft проигрывает в производительности, особенно на больших объектах и на хайлоаде.
441 1812198
>>811680
Двачую, практика — лучший учитель.
А маняпаттерны всякие, это знание из разряда изобразить 10 типов сортировок, которые нужны в основном чтобы проходить собеседования.
442 1812200
>>811733
Точно, забыл про него совсем
443 1812205
>>812159

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



Вот тебе два примера:

>Newtonsoft.Json can serialize or deserialize numbers represented by JSON strings (surrounded by quotes).



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

>Newtonsoft.Json accepts non-string values, such as a number or the literals true and false, for deserialization to properties of type string.



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

>Newtonsoft проигрывает в производительности, особенно на больших объектах и на хайлоаде.



Нет ни одного нормального бенчмарк. Все они используют самый примитивный функционал, даже не удосужившись прочитать вот этот раздел:
https://www.newtonsoft.com/json/help/html/Performance.htm
+ Text.Json не поддерживает поля, т. е. даже для простейшего DTO тебе нужно будет создавать объект с свойствами, что скажется на дальнейшем его использовании так как вместо быстрого считывания поля ты получишь вызов метода.
В итоге и здесь стандартное решение сосёт, а всего лишь нужно прочитать документацию и оптимизировать самые нагруженные участки кода.
444 1812212
>>812205

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


вернее базовый. И ньютонсофт ясен пень хуже в скорости работы и в аллокациях, но лучше по фичам.
Кому что важно, тот нужное и выбирает. System.Text.Json тоже не самый шустрый. Он просто искаропки и там есть документ модел
System.Text.Json создавался как "меньше фич, зато быстрее + блазор". Потому там даже аттрибуты свои

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


ну это уже экономия на спичках серьезно. В dto то экономить ))) это нихера не hot path
445 1812213
>>812205

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


> В итоге и здесь стандартное решение сосёт


Плюсую. У меня на работе есть один евангелист Text.Json, который чмырит Newtonsoft и старается отовсюду его убрать доубирался настолько что поломал код, потому что в некоторых классах были поля, а не свойства. Хорошо, что проект был нерабочий, и мы его только пилим перед запуском. Пообещал выкинуть отсюда, если он додумается сделать тоже самое на другом проекте, который отвечает за огромнейшие деньги
446 1812218
>>812213
правильно делает. понапривыкли делать софт который жрет тонны памяти и еле ползает
Стикер512x512
447 1812219
>>812218
Мы вам перезвоним
448 1812220
>>811716
Что не так? Самый главный язык для разработчика - английский. Его в любом случае на практике надо осваивать. Хоть даже и на стековерфлоу
449 1812224
>>812220
А английский язык тут вообще причем?
450 1812227
>>812224
Я искренне надеюсь что ты не пользуешься русским сегментом стэковерфлоу
451 1812233
>>812227
Да причем тут вообще язык ОБЩЕНИЯ когда речь шла о языке ПРОГРАММИРОВАНИЯ
452 1812245
>>812233
В этом то и суть. Первый язык программирования практически ни на что не влияет в среднесрочной перспективе. В качестве первого языка программирования можно учить все что угодно, как угодно.
453 1812260
>>812245
вообще непонятно о чем ты. не по теме все
ну да ладно
пойду ру стекоферфлоу почитаю
454 1812269
>>812260
В шепутиарий
455 1812276
>>812212

> хуже в скорости работы и в аллокациях



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

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



Также можно и назвать твой базовый функционал и использование Text.Json, да и вообще любую оптимизацию.
456 1812293
>>812276

>если писать столько же кода


одинаково пишу. При переходе разницы не заметил.

>использование Text.Json, да и вообще любую оптимизацию


не стоит утрировать и сравнивать реально полезную оптимизацию и экономию на спичках

Сколько можно сэкономить сменив жсон либу? Можно очень сильно разгрузить GC и это очень заметно при нагрузке. Да и памяти поменьше в несколько раз

А экономия замены свойств на поля в дто (задача которых переносить инфу, а не быть основными деталями жестких алгоритмов) - 0.000001%?
457 1812303
>>812293

>Сколько можно сэкономить сменив жсон либу?



Тебе же уже сказали - нисколько.
Достаточно выполнять рекомендации стандартной документации:
https://www.newtonsoft.com/json/help/html/Performance.htm
458 1812334
>>812303

>Тебе же уже сказали - нисколько.


это фантазеры сказали. Реальность говорит иное

>Достаточно выполнять рекомендации стандартной документации:


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

А вообще что говорить. Берем первый попавшийся бенч и сравниваем ньютон и мою любимую в плане скорости SpanJson (System.Text.Json похуже будет, а SpanJson побогаче по фичам и быстрее всех)

первый прогон
Newtonsoft: скорость 1 аллоцировано 34.16 MB
спанжсон: скорость 0,24 аллоцировано 5.46 MB

разницу в памяти и скорости видишь?

читаем те рекомендации. ручной разбор, не хранить жсон в стринге, конвертеры это не к нам. но вот контрактрезолверы да
у нас var serialized = JsonConvert.SerializeObject(element);
что непорядок судя по советам
делаю в тесте контракт резолвер (прямо из советов) и пропихиваю его

var serialized = JsonConvert.SerializeObject(element, _jsonSerializerSettings);

и запускаю.
я тут ожидал что будет лучше но стало хуже

Newtonsoft: скорость 1 аллоцировано 49,72 MB
спанжсон: скорость 0,20 аллоцировано 5.46 MB
458 1812334
>>812303

>Тебе же уже сказали - нисколько.


это фантазеры сказали. Реальность говорит иное

>Достаточно выполнять рекомендации стандартной документации:


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

А вообще что говорить. Берем первый попавшийся бенч и сравниваем ньютон и мою любимую в плане скорости SpanJson (System.Text.Json похуже будет, а SpanJson побогаче по фичам и быстрее всех)

первый прогон
Newtonsoft: скорость 1 аллоцировано 34.16 MB
спанжсон: скорость 0,24 аллоцировано 5.46 MB

разницу в памяти и скорости видишь?

читаем те рекомендации. ручной разбор, не хранить жсон в стринге, конвертеры это не к нам. но вот контрактрезолверы да
у нас var serialized = JsonConvert.SerializeObject(element);
что непорядок судя по советам
делаю в тесте контракт резолвер (прямо из советов) и пропихиваю его

var serialized = JsonConvert.SerializeObject(element, _jsonSerializerSettings);

и запускаю.
я тут ожидал что будет лучше но стало хуже

Newtonsoft: скорость 1 аллоцировано 49,72 MB
спанжсон: скорость 0,20 аллоцировано 5.46 MB
459 1812392
>>812152
Ты можешь использовать HttpListener если совсем по-простому. Можешь сделать и на Nancy или Asp.Net - гугли self-hosted Nancy/ self-hosted Asp.Net. Первая и использует HttpListener под капотом, на счет второго - не знаю.
Я с упаковкой дела не имел, но оно наверняка должно работать и упаковано.
460 1812397
>>812334
Так ты бы сразу и сказал, что речь о бенчмарках, а не о рабочем коде. Потом такие клоуны пишут продакшн код, пилят костыли к своим "в бенчмарках результат лудше!!" и на выходе получают результат в разы хуже, как по читаемости кода так и по его производительности.
461 1812449
>>812220
Ты точно с ответом не промахнулся?
462 1812477
>>811950
Пиздабол. Только недавно делал сервис под винду на основе worker. Добавляешь nuget пакет, windows service или как-то так, и все работает
Но я сам могу спиздеть, так как запускал на той тачке, где уже стоял рантайм. А так – служба была сингл-файлом из-за чего пришлось подпердолить конфигурацию, так как appsettings.json я хотел иметь в корне с программой, а не в недрах temp, куда по-настоящему распаковывается этот сингл-файл. Служба устанавливается командой в консоли, потом все работает в штатном режиме
463 1812535
>>812397

>Так ты бы сразу и сказал, что речь о бенчмарках, а не о рабочем коде


ааа ясно. ЭТА ДРУГОЕ (С)

заменить свойства на поля - оптимизация. А заменить либу жсон которая при большой нагрузке СИЛЬНО ЗАМЕТНО экономит память и GC меньше дергается - да какая то это оптиизация )))

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

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

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

но тебе рекомендую взять асп.нет коре и хостить как локальный сервер и не парить мозг
465 1812720
Прошу людей, которые уже довольно долго варятся в шарпе, ответить на такой вопрос. Если бы вы сейчас изучали этот язык, то какую бы область применения выбрали? Веб?
466 1812733
>>812477
Ну дык я так же делал и как раз на основе воркера. Нужно было маленький Http-сервер в виде виндового сервиса замутить. Так вот, самому хотелось в виде одного файлика, потому что ну красивше же, чем эти миллиард dll, а вот хуй, одним файликом сервис в винде не отзывался на запрос и постоянно стопался типа сервис не ответил, я даже лайвтайм и прочее сделал чтобы оно максимально на классическую службу было похоже. Почти два дня бился, а потом забил и оставил с кучей dll'ок и работало нормально. Я ХЗ что я упустить мог, но просто обидно, потому что сам хотел чтобы сервис был одним экзеншником + настройки.
467 1812756
>>812535

>СИЛЬНО ЗАМЕТНО экономит память и GC меньше дергается



Так ты показывай проект с newtonsoft и этот же проект с аналогом, а потом сравнение работы с JSON'ом, а не твои тесты высосанные из пальца.

>заменить свойства на поля - оптимизация.



Это обычный пример того, что не всё так очевидно как тебе кажется. Функционала у newtonsoft больше, очевидно что если использовать все настройки по умолчанию, то и работать он будет не так быстро как аналоги с необходимостью пилить свои велосипеды. При этом в данном случае этот функционал даже велосипедами не добавляется, т. е. вызов метода вместо считывания поля у тебя будет в любом случае, хочешь ты того или нет, вот и спрашивай себя потом, сколько раз ты наступишь на подобные грабли прежде чем поймешь, что лучше бы ты проверенное временем решение использовал, а не вёлся на бенчмарки для даунов.
468 1812758
>>812547
>>812392
Мне бы, конечно, лучше asp.net, не больше роутинг, как шаблоинизатор нужен.
Просто файл буду на разных компах размещать. Я понял asp.net сделать embedded не получиться?
469 1812775
>>812756

>Так ты показывай проект с newtonsoft и этот же проект с аналогом.


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

>Функционала у newtonsoft больше


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

>т. е. вызов метода вместо считывания поля у тебя будет в любом случае


ты вообще о чем? ты все про свойство против поля в дто? спанжсон умеет в поля
но я в очередной раз повторюсь что выгода от этого просто минимальна потому что дто которые приходят из жсон или уходят в жсон в 99.99999% случаев не учавствуют в hot path, где эта замена была заметна даже под электронным микроскопом.

>>812758
смотря что ты понимаешь как ембедед. если у тебя десктоп прила и ты такой "хочу чтобы открыть порт и там вебсервис еще и вот можно ли асп.нет коре сделать чтобы он не был в центре всего приложения, а просто как сервис внутри моей прилы". то да можно
470 1812780
>>812775

>где я тебе в опенсорсе найду один и тот же проект под 2 разные либы



Представь себе, люди переписывают код под другие либы с целью оптимизации. Почему ты не можешь найти примеров с ньютонсофт и аналогами? Правильно, потому что при правильном использовании ньютонсофт оказывается либо таким же, либо лучше по скорости чем аналоги.
471 1812792
>>812775
Ембеддед обычно говорят когда веб-сервер встроен в приложение (микросервис). Ты запускаешь, поработал, выключил.
Такое достижимо с asp.net?
472 1812798
>>812780

>Представь себе, люди переписывают код под другие либы с целью оптимизации


в опенсорсе? нахера им это. опенсорс это всего лишь код
это просто код просто код. просто код который код.

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

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

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

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

>>812792

>Такое достижимо с asp.net?


да. его можно запустить как тот же хттплистенер и погасить без var host = new WebHostBuilder() который заблочит поток.
Точно можно. Я даже видел как. Я даже сам запускал. Я даже записал. но блин найти не могу ааааааа
image.png129 Кб, 938x618
473 1812802
Чем можно подобное деобфусцировать?
Мне практически ни для чего не надо, я просто любопытный.
474 1812816
>>812792
А в инете хрен найдешь. А так кто то из этих знатоков то ли toub то ли еще кто то вроде на гитхабе показал как
я случайно нашел
а щас не могу найти даже в инете
475 1812835
>>812802
Это не обфусцированный код, а просто IL ассемблер. Очевидный ILSpy
476 1812844
>>812835
А я его уже попробовал.

>PE file does not contain any managed metadata.



Оно и логично, ведь это не библиотека, а тупо ряд объектов с внутренностями. Может, нужно попердолить заголовок чтобы он походил на PE?
image.png1,8 Мб, 1705x1281
477 1813012
>>812152
Как уже сказали и сам Kestrel (web server for dotnet) и Aspnetcore - это просто либы.

Если у тебя есть веб проект
dotnet new web --name WebApp

Компилишь его под что угодно и добавляешь сам дотнет в сборку
dotnet publish --self-contained true --runtime ubuntu.18.04-x64

Запускаешь приложение на Debian-like линуксовом дистрибутиве
./WebApp

У тебя запустился веб сервак на машине, на которой дотнет может быть даже не установлен, и готов принимать запросы.
image.png363 Кб, 1399x317
478 1813013
>>813012
Вторая пикча почему-то отклеилась.
479 1813018
>>812397
У нас есть тесты нагрузки, когда реальную систему бомбят 2-5к виртуальных юзеров (открывают браузеры на куче машин, щёлкают по кнопочкам, вводят текст в формочки). Перевели с Newtonsoft на System Json и нагрузка упала (не в разы, но заметно). Никакой старшной логики не было. Стандартные serialize/deserialize.
480 1813025
Если кому интересно, чтобы все длл в один файл засунуть
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true --self-contained true

Он куда-то распаковывает при старте, куда непонятно, но второй запуск быстрее
481 1813075
>>813018

>Пeревели с Newtonsoft на System Json


А дoстaточно было сделать сeриализацию/дeсeриализацию напрямую из потока + в самых нагруженных местах добавить ручную дeсeриализацию/сeриализацию. Вот я про это и говорю, мaкaки смотрят на говнобeнчмарки и бегут всё скорее переписывать, вместо того чтобы почитать документацию к инструменту который они уже используют.
482 1813094
>>813075

>сeриализацию/дeсeриализацию напрямую из потока


а если оно УЖЕ из потока в поток то куда поточить еще?
Хватит держать всех вокруг за идиотов, особенно тех, у которых реальная нагрузка

>в самых нагруженных местах добавить ручную дeсeриализацию/сeриализацию


то есть в итоге ВЕЗДЕ
норм ага.
нормальная такая оптимизация - парсить вручную ))))
483 1813126
>>813094

>нормальная такая оптимизация - парсить вручную ))))



Нет, лучше переписать всё на новую либу, потратив в 10 раз больше времени)))
image.png3 Кб, 218x186
484 1813128
>>812844
>>812802
Крч обвязал я BinaryFormatter.Deserialize вокруг ньютонсовтовского конвертера, десериализует больше, чем нихуя. Я близко
485 1813154
>>813126

>Нет, лучше переписать всё на новую либу, потратив в 10 раз больше времени)))


Ну если у тебя безумные жсоны с которыми ты работаешь в полуручном режиме из-за их безумия то да
486 1813194
>>813154

>легче потратить в 10 раз больше времени


Ясно. Вся суть возбужденных бенчмарками шизиков.
image.png37 Кб, 434x375
487 1813328
>>813128
проссал проблему, там просто куча объектов на друг друге, а поток обрабатывает только первый.
Вот только с последним намечается проблема
488 1813332
>>813194
Ты наверняка какой-то старый хуй, который командует какой-то тимой в своей конторе, у которого все приложения висят по 1-10 сек на любой чих и считает что это норма.
489 1813337
>>813328
Хотя не, эту проблему решил
490 1813339
>>813332
Когда нужна скорость, на сярпе не пишут
491 1813340
>>813332
Любой опытный программист сначала изучает уже используемый инструмент, ищет пути его оптимизации, оценивает трудозатраты на оптимизацию и на переход к использованию другого инструмента и только после этого делает выбор между оптимизацией текущего решения и новой библиотекой.
492 1813341
>>813126
Переписка заняла буквально 4 часа одним девом. Переезд с фреймворка на кор тоже упрощается, если используется системная либа. Но опять же - дело вкуса. Кому что больше нравится или подходит под конкретную ситуацию.
493 1813351
>>813339
Вот эти вот вскукареки вылазят из каких то мухосрансков периодически и глобально разом за всю планету делают такие заявления. MS, GM, Amazon, Fidelity, Stackoverflow - у этих дотнет в хайлоаде используется, никто не жалуется.
494 1813352
>>813340
Ты щас 2+2=4 сказал.
495 1813455
>>813352
Видимо для тебя это не 2+2 = 4, раз вместо того чтобы переписать код на ньютонсофте ты пишешь новый с использованием другой библиотеки.
496 1813463
>>813455
Сказал чувак не знавший ни ситуации, ни задачи, ни условий, в которых весь проект крутился. Но который незамедлительно принёс своих осуждений. Ещё и тонко так вставил что в конторе, где крутятся сотни приложений, обрабатывающих тыщи запросов в минуту, имеется огромный состав всяких видов архитекторов, нет опытных программистов.
Человеку только дай волю, он всех вокруг заплюёт и засмеёт.
497 1813464
>>813463
У него все норм или "ему все норм" и он думает, что у всех так и все идиоты, которые не умеют готовить ньютонсофт

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

Л - логика
498 1813476
>>813464

>свел все к рекомендации "перепиши в ручной код"


Ты о чём?? Тут анонов 5-6 разных в дискуссии участвовало. Я не понял, на какой именно коммент ты ссылаешься.

>то по его мнению "нужно все равно брать ньютонсофт..."


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

Ты наверное в комментах запутался и начал мимо отвечать.
499 1813479
>>813476
не не запутался. Это не ответ тебе, а дополнение к твоему коменту про чувака. я ж написал "он в итоге свел", "у него" и т.д.

я тот чувак, который основной его оппонент, который бенчи выкладывал.
500 1813482
>>813464
А, понял, ты вот этот чувак >>813094

Я думал ты ко мне в третьем лице обращаешься, лол.
.png17 Кб, 734x380
501 1813544
Можно ли такого же поведения добиться без объявления делегата который сам себя возвращает?
502 1813576
>>813544
Он не обязательно должен сам себя возвращать. Без возвращения делегата никак не добьешься.
503 1813644
Как рантайм сделать один объект членом динамического объекта object? Если что, получается он у меня после десериализации.
504 1813684
>>813644
dynamic test = new ExpandoObject();
test.Prop1 = 1;
test.Prop2 = 2;

Можно динамический объект как словарь определить
var test = new ExpandoObject() as IDictionary<string, Object>;

Вот ещё https://stackoverflow.com/questions/15819720/dynamically-add-c-sharp-properties-at-runtime
.PNG10 Кб, 312x480
505 1813754
Нубский вопрос:
Написал метод для события одного из контролов. Тк метод единый, но его нужно использовать в разных формах - запихнул его отдельную библиотеку. Да, все ок работает, если вручную присваиваю(+=) свой метод к событию. Но можно как-то сделать так, чтобы мой метод из dll отображался и выбирался в конструкторе? Так было бы красиво и удобно(сразу и в одном месте видно как и какие события обрабатываются).
506 1813780
>>813754
Не видел этой фигни с 2008 года! Спасибо за ностальгию!
507 1814215
3 Года опыта с плюсами. Как думаете за какой срок смогу осилить этот ваш До-диез?
508 1814218
>>814215
не менее 10 лет.
509 1814228
>>814218
А что так мало?
510 1814230
>>814228
Ну это оптимистичная оценка. Всего 3 года плюсов. Ущерб мозгу нанесен сильный, но если постараться, то поправимо за такое время.
511 1814234
>>814230
Толстишь так будто я написал что имею 3 года опыта с жаваскриптом.
512 1814249
Вроде четвертый год работаю (ASP.NET) в конторе, у нас уже считаюсь более или менее опытным.
Ни разу в жизни не использовал (даже не знаю, как использовать) делегаты, синхронизацию, сериализацию, рефлексию и прочую хрень, о которой только и пишут на форумах.
Не написал ни одного интерфейса.
Спасает знание некоторых базовых вещей и владение SQL. Понимаю, что если контора накроется, то сосну на рынке, но пока в зоне комфорта.
513 1814262
>>814249

> делегаты


Мне понадобились только в винформах, чтобы интерфейс дергать. Делегат использовал для события. Хотя есть EventHandler и EventArgs, но ими я не пользовался так что тоже каминаут сделал

> синхронизацию


Что имеешь ввиду? Многопоточку и асинхронность вообще?

> сериализацию


Ну данные же ты куда-то сохраняешь, с хмл поди да работал хоть на полфедора

> рефлексия


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

Зато потом в js, где нет рефлексии, долго плевался
514 1814268
>>814262

>Многопоточку и асинхронность вообще?


Да
515 1814269
Как в WPF сделать, чтобы кнопки (и другие элементы управления) были стандартного Windows 10 стиля, как на пике один, а не такими как на пике 2?
516 1814271
>>814269
Может, копнуть в сторону UWP
Может, сделать свой собственный диалог. У тебя везде такие кнопки? Кажется, ты какой-то системный диалог вызываешь
517 1814275
>>814271
А, не, обычные Button нормальные, а это MessageBox. А там никак такие же не сделать что ли?
518 1814277
>>814215
Бамп
519 1814280
>>814249
Ну такое возможно в асп.нет
Но надо ж расти
520 1814323
>>814249
Единственное что это значит, что тебе учиться не у кого. Также первые 5 лет работал. Баги были нормой, запросы к БД и файловой системе по несколько секунд тоже. Но потом попал в компанию, где были настоящий архитектор и сеньоры. И у них был местный хайлоад, куча проектов с миллионом строк кода, БД с миллиардами записей в таблицах.
И оказалось что норма - это
- писать код без багов по пол года а то и больше
- полностью загружать и отрисовывать страницу с запросами ко всяким огромным БД и сторонним сервисам за <1сек
- иметь полное покрытие системы юнит и интеграционными тестами, которые на лету создают нужные сервисы и БД в памяти или на специально выделенном сервере
- выдавать несколько рабочих фич в прод за спринт
- не возвращаться к закрытым таскам
- автоматизировать the crap out of всего подряд, чтобы нажал кнопку и всё работало, а программист только тратил время на написание кода.

Учись в общем.
521 1814329
>>814215
Ну был тут один плюсовик, так этот даун несколько часов только осваивал различия инициализации объектов в плюсах и шарпе. Поэтому вот этот анон >>814218 конечно преувеличил, но примерно где-то так оно и будет.
522 1814330
>>814249
Я за чуть больше чем год всё это в одном пет-проекте использовал, даже страшно представить тот говнокод с которым ты работаешь.
523 1814331
>>814215
Подруга фигачила с++ 8 лет, потом за неделю пересела на шарп. Правда она в МС работала.
Вообще такие вопросы не имеют смысла. Можно 15 лет сиплюсплюсить и быть дегенератом, который не понимает ни как ЦПУ, ни как РАМ работают, иметь постоянные утечки и хвастаться криптокодом, который он сам через неделю перестаёт понимать. Такой и в шарп 10 лет запросто въезжать будет.
Если у тебя есть хорошая база и понимание того, как компы в принципе работают, то за 2 месяца в любом языке станет комфортно.
524 1814334
>>814329

>преувеличил


>но примерно где-то так оно и будет


чел, ты...
525 1814358
>>814275
Хотя обычные Button тоже не выглядят как стандартные. Сраный Qt выглядит нативно а виндовый WPF не выглядит.
526 1814376
>>814234
Так с жаваскриптом было бы проще, современный язык, как и шарп. Это тебе не std::говно_говна<МоёГовно> простоЧтобыПамятьНеУтекла = std::make_говно<МоегоГовна>();
527 1814378
>>814334
Уроки иди делать, чел. Желательно по русскому и литературе.
528 1814496
Кто нибудь знает, есть ли разница в производительности, когда в EF core инклюдишь navprop'ы по строкам и по expression'ам? Лень самому бенчмарк писать
529 1814501
>>814376
Всё ещё толстишь. Подскажи мне: почему я всё ещё тебя кормлю?
>>814378
Я своё уже отучил. Почему тебя это так беспокоит?
530 1814504
Анон вот что делать. Задача : получить данные из стороннего апи, привести их к виду который нужен нам и сохранить. Проблема - сторонне апи - говно которое кучу мусора отдает, и не имеет методов для получения небольшого куска информации, что нужен мне. Ну и выходит что я делаю запрос, половину БД со стороны в виде JSON'а получаю, потом делаю всю эту SQL-работу, джойню, фильтрую, селкучу, чтобы достать пару нужных мне значений и запихнуть их в нашу базу. В итоге просто с нихуя жрется куча памяти и работает медленно, потому что блядь для одного сука объекта, у которого мне нужно несколько блядских полей приходит JSON 100мб веса, блядь нахуй. Вот и как тут быть? Как с этим работать чтобы такая, казалось бы тривиальная задача не была такой тяжелой?
Ей богу, дали бы эти пидоры возможность к своей БД подключиться, один маленький селект и все, но нет, хуй там, мы дали открытое апи - пользуйся.

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

>что делать


Донести до них, что они долбоебы
Так им и передай, что даже мимокрок анон с двача так считает

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

а значит остается одно - донести до этих долбоебов что они долбоебы
532 1814591
>>814504
У них в АПИ никаких фильтров вообще не предусмотрено?
Для того чтобы сильно свою систему не грузить, можно свой JSON конвертер сделать, который вытащит только нужный блок из стрима.
Ну и кэшить их ответы естественно.
.jpg10 Кб, 225x225
533 1814635
>>813780

>Не видел этой фигни с 2008 года! Спасибо за ностальгию!


Я что-то не так делаю?
534 1814655
>>814635
Нынче всё скриптуют и кодогенерируют. Руками через drag-n-drop софт разве что для демонстрации или для пет проекта делают.

Ну и вообще десктоп приложение делать в 2020 странно. Для чего-то простого есть CLI приложухи. Смысл для десктопа только если у тебя игры, работа со звуком/графикой, всякие IDE, пет проекты или древняя версия ОС.

Тем более что веб приложения сейчас двойным щелчком по исполняемому файлу могут запускаться и даже выглядеть как десктоп. Но зато сразу из коробки куча вшитого функционала и безопасность.
535 1814714
>>814655

>Руками через drag-n-drop софт разве что для демонстрации или для пет проекта делают.


>Смысл для десктопа только если у тебя игры, работа со звуком/графикой, всякие IDE, пет проекты или древняя версия


>пет проект


Ну так как я пишу первый серьезный проект для себя - значит я все таки все правильно делаю?
536 1814746
>>814714
Для себя можно хоть на чём учиться. Лишь бы учился. Но конкретно по твоему вопросу ничего сказать не могу, т.к. свойства объектов через UI в студии уже больше 10 лет не трогал.
537 1814783
>>814655

>и даже выглядеть как десктоп


и тормозить как говно и требовать знания говножс
538 1814788
>>814783
Да уж лучше блять говножс, чем мегасупердуперговноxaml или упаси господь QML с его псевдожс
539 1814793
>>814788
хамл кстати шикарен
а жс сразу идет лесом когда нужны потоки
ах да. они же не нужны
всем нужны говнокалькуляторы )
540 1814796
>>814793
Хамл шикарен только среди остальных инструментов для десктопного гуи, потому что из конкурентов у него только винформс, qtForms, gtk++ и прости господи чистый WinAPI. есть еще электрон вроде, но он тоже на js)))) Как человек, пиливший ГУЙ на всем вышеперечисленном и на вебовских технологоиях, ящитаю, что впизду и нахуй делать UI на десктопе, просто боже упаси. Веб в разы удобнее и профессиональных живых инструментов с активным коммьюнити гораздо больше.
541 1814797
>>814796
Каждый кулик свое болото хвалит
542 1814806
>>814323
К нам в проект пришел опытный прогер и переписал запросы к БД, работающие секунд 15-20 так, что они стали работать за 4-5 секунд и это считалось невероятным успехом.
209587431905.mp491 Кб, mp4,
1644x894, 0:10
543 1815120
Почему кнопки и все остальные элементы управления в Winforms нативные, точно такие же как и во всех системных окошках, а в WPF какие-то свои? Можно ли как-то сделать чтобы WPF рендерила такие же нативные элементы?
544 1815202
>>815120
ну так стили и шаблоны.
если не жалко времени
545 1815270
В какую сторону копать C# + SQL? Чтобы писать код на шарпе, который бы взаимодействовал с базами данных.
546 1815274
>>814793

> хамл кстати шикарен


Да ну нахуй. В чем этот хамл шикарен? Бойлерплейт нечитаемый

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

открою тебе тайну - хамл это хмл и хтмл это хмл
так в чем разница в читабельности

Разница лишь в том, что они описывают. хтмл только элементы, а хамл это выражение кода в хмл

И все что не выражено в хмл выражается в коде на языке программирования. И лучше когда все находится в одном месте (хамл с нулевым code-behind) чем хтмл+лютый code-behind
548 1815311
>>815270
Entity Framework / dapper + 100 микроорм. Фломастеры
549 1815315
>>815311
Спасибо. А что из этого лучше/для каких целей?
550 1815318
>>815315
ну так 2 основные концепции

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

dapper же просто маппер который позволяет смапить результат SQL запроса на обьекты и потому очень быстр, но уже sql юзаешь - для тех кому не влом писать больше кода, но полный контроль над происходящим

актив рекордс в дотнете не прижился

Ну и что то среднее это Linq2Db c его linq вместо sql, ну и куча разных либ которые каждая по своему видят как должно быть.
551 1815331
>>815315
Другой ответ хороший, но я пьян и хочу дополнить джуновьей мудростью. EF нормальная штука, если ты сам хозяин базы данных - ты ее формируешь под свои требования, потому запросы у тебя почти всегда будут тривиальны. Но если база данных уже существует, и тебе под нее подстраиваться нужно, высока вероятность что ты каждый раз будешь проверять, какие запросы генерирует EF. В половине случаев ужасаться. А иногда просто не сможешь запрос нужный написать используя linq. В случае таких БД лучше сразу выбирать dapper.
552 1815332
>>815318
Большое спасибо, добра!
553 1815349
Сап анончики, что за оператор такой "?"
Видел в коде подобную конструкцию
public int? A {get; set;}
Гугл говорит немного про другую хуйню.
554 1815355
>>815349
int? - это nullable int. По сути int, который может принимать значение null. С другими базовыми типами так же можно делать.
555 1815357
и нужно. вообще правильно вбивать такое в каждый проект
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
556 1815523
>>815349
Про nullable типы уже сказали (Type? это под капотом Nullable<Type>), а как операторы:

Ternary (conditional) operator:
var result = condition ? result1 : result2;
Если condition == true, то result = result1. Иначе result = result2.

Null-coalescing operator:
var result = result1 ?? result2;
Если result1 != null, то result = result1. Иначе result = result2.

var result ??= result1;
Если result == null, то присваивает ему result1. Иначе ничего не делает.

Null-conditional operator:
var result = thing?.member;
Если thing != null, то result = thing.member. Иначе result = null (и не возникает исключения, как если бы ты пытался обратиться к thing.member при том что thing == null).
557 1815542
Хочу сделать сорт оф настолку в вебе, все что мне нужно из функционала это: лобби игры для нескольких игроков, передвигающиеся .пнг пикчи фишек разных по нажатиям кнопок, ну и там логика всяких счетчиков/значений и т.д., было бы плюсом завезти какие-то анимации для этих же передвигающихся пикч.
У меня вопрос - какой стек мне нужен для этого, а точнее хватит ли мне asp.net или для этого придется дрочить еще всякие js'ы. Сам легко могу такое сделать на wpf'e/winforms, а в вебе не разбираюсь.
Вот хороший пример приблизительно того что я хочу https://monopoly-one.com/ , только там игровое поле на html коде, а мне достаточно/нужно .пнг фон.
558 1815560
>>815542
ну любой сайт это серверная сторона что выполняется на сервере
и то что выполняется в браузере
и вот что в браузере это жс
ну или блазор если смелый
559 1815599
Там у Троелсена оказывается девятое издание по C# 8 и .NET Core 3 вышло.
560 1815617
>>815523
>>815355
Спасибо
561 1815623
>>815310
Вот сейчас я ради интереса ковыряю wpf и пытаюсь сделать кнопку из квадрата. Я уже полчаса гуглю, как это дерьмо заставить менять цвет в ответ на событие фокуса
Каждый ебаный элемент имеет в себе сотню ебаных свойств, а иде бесполезна более чем полностью. При том, что я в бленде сижу, специализированное по для интерфейсов, блядь. Хочешь поменять стиль – вот тебе 400 строк стилей всего элемента, ебись, блядь, ковыряй триггеры, дрочи этот котях

В рот ебал этот хамл. Десктоп загнулся и поделом ему с такими инструментами. Но майки тащат это сучье дерьмо в maui. Да, там будет флюент синтаксис, но наверняка найдется какой-нибудь дед-пердед, которому и хамл вкусный, и ебись потом с его контролами. Впрочем, не уверен, что майки в этот раз смогут сделать что-то популярное для мобилок
562 1815662
>>815599
ну и нахуй оно нужно?
563 1815699
>>815623

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


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

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

А десктоп загнулся потому что макаки не умеют в нативную разработку и им похер "лагает, тормозит, половина одного потока", зато крос
564 1815705
>>815699
десктоп загнулся, потому что он нахуй никому не нужен, когда есть универсальный веб интерфейс, доступный с любой ОС с любого устройства, лишь бы был браузер, да еще и с мгновенным обновлением версий
565 1815709
>>815705
А я разве не так сказал? Я это и сказал что притащили вебинтерфейс в десктоп и похуй на то что оно тормознутое говно и жрет безмерно памяти и не выглядит нихуя нативно. Просто макакам писать легче.

потому что МАКАКИ
566 1815716
>>815709
это и писать удобно и использовать удобно, причём тут макакство. интерфейс хуйня, ведь вся магия происходит в десктопе, а жрёт ли приложуха 2мб на чистом винапи или 400мб вкладка в моём браузере - меня не ебёт, когда у меня 24гб DDR4. Зато мои гугл доки доступны мне с любого устройства из любой точки мира, мне не нужно покупать специальное ПО. мне не нужно после переустановки винды ставить себе кучу приложений, потому что я использую веб сервисы. нахуя вот ты скажи мне нужны не-ОС десктопные приложения, кроме игор, браузеров и инструментов разработки?
567 1815719
>>815716

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


самофикс
568 1815720
>>815716
Ну то есть ты привел доводы со стороны макак - "нам писать проще, одно на все платформы" и так далее
То есть подтвердил то, что я сказал.

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

Потому и приходится покупать новые мощные машины и смарты чтобы поделки макак хоть как то работали.
569 1815721
>>815699
Есть rectangle, который должен менять цвет по наведению. До кучи – по нажатию на него должна вызываться команда

1) в темплейт кнопки засунул прямоугольник. На событие фокуса он не реагирует
2) просто ректангл с триггером, не реагирует аналогично

А я всего лишь хотел сделать кастомный топ-бар. Вот как с этим работать? Не осилил, да. Ну да, я не осилил. Рассчитываешь, что декстоп должно быть удобнее писать, а тебе как будто специально палки в колеса вставляют
570 1815724
>>815720
я размышляю с точки зрения человека, для которого разработка и использование ПО - это не спортивные дисциплины, а методы и средства решения задач. если мне захочется побайтоёбить - то я буду делать там, где без этого не обойтись, а не потому что нуу гыгы тупые макакеры на своём говнякте тащат 200мб а я вон пишу 100 строк на винапи на обработку нажатия кнопки через WM_ коды потому что я нимакакер гыгык))0 void* bThread = CreateThread() я многотопочный)00
571 1815732
>>815599
И много он там добавил? Или как всегда скопипастил всё в кучу, а новое размазал крупицами по всей книге?
Image 1.png105 Кб, 777x500
572 1815748
>>815721

>цвет по наведению


по наведению чего? мыши что ли? так пролет мыли это не получение фокуса. Ховер эффект это триггер на IsMouseOver
Онклик для элементов что не имеют его делается через InputBindings

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

А потом имеем тот пиздец что на пике
573 1815753
>>815748

>Но кого волнует мнение пользователей


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

>А потом имеем тот пиздец что на пике


ну и причём тут ведроид с его дебильной джабой как основным ЯП разработки?
574 1815763
>>815753

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


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

на десктопах проблема меньше выражена ибо устройство мощнее, но по факту есть ноуты и они не такие мощные и на них это говно ЗАМЕТНО лагает. но макак это не ебет. Софт есть - есть и макаке насрать на то как его говно работает у пользователя
575 1815765
>>815721
вот тебе пример такого ректангла
https://dumpz.org/aBr4rF5R5mpK
576 1815810
>>815753

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


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

Но когда переделывают норм софт на жс версию это пиздец. Даже на моей машине (i9 7900x 64gb 3200 и сплошные ssd - да да уже старье) начинает лагать это уже ни в какие ворота.

К примеру, у меня стоит софтина Xmind 7 и летает. А вот ее новая версия переделана под электрон или что то такое и тормозит просто адски. Я не знаю какой там квантовый комп нужен для нее.
Туда же. но выражено меньше - personal brain
про скайп и так все знают - ну он у меня не тормозит (я его и не запускаю так то) так что ладно
логитеч вебкам панелька, кракен панельнка - все это переделали и заметна неотзывчивость.

комп мощнее чем мой древний 2 поколения назад феном х4 925, а по ощущениям все работает с той же скоростью. Потому что процветает макачество. Тенденция такая.
Аноним 577 1815838
Я тут немного не по теме, но все же буду благодарен если поможете: как откатить пуш и удалить некоторые коммиты в локальном репозитории? Я сейчас случайно залил хуйню которую не стоило заливать.
578 1815847
>>815810

>ак бери вебсервисы, кто тебе запрещает


никто мне не запрещает, но ты выше писал

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


ну вот я и говорю, что я страдаю от привязки к ОС, конкретному устройству, установке ПО и прочему, а не от того, что приложуха жрет 200 мб в вкладке браузера вместо 2мб сразу в оперативке.

>К примеру, у меня стоит софтина Xmind 7 и летает. А вот ее новая версия переделана под электрон или что то такое и тормозит просто адски. Я не знаю какой там квантовый комп нужен для нее.


братишка проста тупа садись на условно бесплатный https://miro.com/app/dashboard/
для всего сейчас есть веб сервисы, нахуй тебе это десктопное говно?

>Потому что процветает макачество. Тенденция такая.


ну так а конкретно js и веб приложения vs десктопные приложения тут причём? из того, что ты говоришь андроид говно, электрон говно следует вывод, что тебе не нравятся говнокодеры, а не жс.
579 1815861
>>815847

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


1 не работают без инета.
2 имеют жалкий аналог функционала, что мне нужен
3 требуют закачивания или размещения моих рабочих файлов где то еще
4 оно тормоз.
5 оно неудобно. просто неудобно. абсолютно неудобно. может у вас простые требования, но мне для работы НЕУДОБНО шопездец

пункты 1,2,3 решают что оно мне не подходит. и не нужно кормить меня "ты просто не понимаешь", если оно не делает то, что мне нужно так как нужно.

то есть

>для всего сейчас есть веб сервисы


только твое мнение. Для тебя есть набор сервисов который удовлетворяет набор твоих требований и твои нужды

>ну так а конкретно js и веб приложения vs десктопные приложения тут причём?


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

>андроид говно, электрон говно


про андроид я ничего не говорил. я говорил про смарты, на которых не стоят квантовые процы и сто гигов оперативы. и я не обязан постоянно менять свой смарт чтобы поспевать за жрущим ГОВНОМ типа электрона ( а вот его я как раз считаю лютым говнищем)
тем более что смарты не на что менять. Вот я хочу не лопату с норм железом, акб и так далее и за адекватную цену. принесешь? а нету нихуя
580 1815890
Являются ли дженерики реализацией полиморфизма или только интерфейсы? Какого хуя, везде написано, что реализация инкапсуляции в шарпе это гет сет, а чо, блядь, обычная функция это не инкапсуляция разве, блядь?
581 1815892
>>815890
get;set; преобразуется в обычные функции:
_private _uVariable;
public Set(value) {_uVariable = value}
pulic Get() => _uVariable

Синтаксический сахар для инкапсуляции.
582 1815895
>>815892

>get;set; преобразуется в обычные функции


Да не, вот просто, сама по себе любая функция разве по сути не является инкапсуляцией?
public hui Pizda(double height) {}
583 1815901
>>815895
функция является - ведь она может делать внутри себя что-то и потом незаметно ее внутренняя логика может стать другой, а снаружи этого не видно.
точно также и внутренняя логика свойства может стать другой и снаружи этого не заметят
это и есть инкапсуляция.
584 1815927
>>815901
А про дженерики и полиморфизм?
585 1815947
>>815927
Так вот же они
586 1815967
>>815765
>>815748
Спасибо, анон, но я уже удалил проект. Может, вернусь
Все же впф позволяет сделать красиво, но уж очень замудрено. Веб сам собой осваивается, а как понять хамл – хз
587 1815971
>>815699

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


Бля, там кодом обычно проще было бы набрать и разбираться проще, чем пялить в эти бесконечные
<hui dlina = 5>
<v pizde> glubina = 25, shirina =5 </ v pizde>
</hui>
Почему, блядь, где то свойства описываются в <> где то между <> </>, плюс, все это такие сопли порождает, что я ебал, как посмотришь на этот хамл, так голова сразу болеть начинает
588 1815979
>>815947

>Так вот же они


Чо?
589 1815987
Вопрошаю уже который раз и ирл и в интернетах. Нихуя никто ответить толком не может, только ко-ко-ко одно. Может тут пояснит кто.
Нахуя нужны команды в WPF, чо они дают вообще, по сравнению с формами? На формах как было, блядь, есть кнопка, при нажатии вызывается метод. В wpf при нажатии срабатывает команда, которая дергает привязанный к ней метод, и чо? Нахуя эта прослойка в виде команды вообще нужна тогда, блядь? В чем профит?
590 1815990
>>815979
Майкрософт собирает джуну ЯП в энтерпрайз:
— Вот, положила тебе в C# async-await, EF и дженерики с полиморфизмом.
— Мам, нафига??
— Ну как же, берешь запрос к БД через репозиторий на EF, запускаешь Async метод и await'ишь.
— А дженерики с полиморфизмом?
— Так вот же они!
591 1815991
>>815987
сразу из головы чё помню. команды можно биндить, что удобно при использовании юзерконтролов, что в лишний раз энфорсит каноничный MVVM на самом деле ивенты тоже можно, но там такая хуйня костыльная маму ебал
592 1816000
>>815890

>Являются ли дженерики реализацией полиморфизма или только интерфейсы?


>реализация инкапсуляции в шарпе это гет сет



Твоя проблема в том, что ты такие абстрактные понятия как "полиморфизм" и "инкапсуляция" пытаешься вложить в что-то одно. Это не так работает. Эти понятия слишком общие для того чтобы вкладывать их либо в только интерфейсы, либо только в геттеры и сеттеры. Их так и нужно воспринимать как что-то общее, полиморфизм когда ты что-то одно применяешь ко многим, инкапсуляция когда ты что то используешь в общедоступном и скрываешь главную его реализацию от пользователя.
593 1816001
>>815971
А потом такие говорят, что html и css это легко, лол.
594 1816008
>>815987
Для того чтобы у тебя в коде было всё структурированно, что в свою очередь облегчает поддержку и расширение этого кода.
Это как сказать "зачем нужно по папкам всё раскладывать, если можно всё в одну скидывать и функционал не изменится? желательно чтобы этой одной папкой был рабочий стол!"
У команды общий интерфейс, у каждой команды есть общая логика, твой же метод в винформс может принимать любую форму, ограничившись лишь больной фантазией того кто его реализует.
Команда может принимать аргументы, которые ты прописываешь прям в XAML коде, т. е. ты смотришь на XAML и уже примерно можешь представить что эта команда делает, тоже самое в winforms достигается только непосредственным просмотром кода метода в котором еще нужно будет попотеть чтобы понять откуда какие данные берутся.
595 1816013
>>814783
Но ведь можно PWA на Blazor запилить и вообще выкинуть жс. Будет нативное веб приложение, которое маскируется под десктоп и работает быстро.
596 1816026
>>815991

>команды можно биндить


В чем великая суть вместо название события = метод писать бинд = комманда?
597 1816029
>>815990
Требую пояснительную бригаду
мимо даже не джун среди джунов
598 1816032
>>816008

>твой же метод в винформс может принимать любую форму


Да с хуяли это вдруг? В винформах событие дергает метод, про делегаты слышал вообще?
599 1816033
>>816008

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


Вот щас бы сидеть смотреть откуда на хуй аргументы взялись в этом xml, ага? Я уж лучше открою и гляну нормальный код, а не это html спагетти
600 1816049
>>816032
Ты совсем тупенький? Реализация твоего метода в формах это черный ящик, в случае с командой мы как минимум знаем что у неё есть методы CanExecute и Execute, а также ивент CanExecuteChanged
>>816033
Смотреть и гадать не надо, потому что есть общая структура. Ты просто пытаешься судить о том, чем не пользовался, непонятно зачем. Чтобы лишний раз подкрепить своё "это не я ленивый и не хочу учить новое, это технология хуевая"? Так это можно и без постов делать.
601 1816050
>>815971

>Бля, там кодом обычно проще было бы набрать и разбираться проще


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

>где то свойства описываются в <> где то между <> </>


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

>>815987

>Нахуя нужны команды в WPF, чо они дают вообще, по сравнению с формами?


Биндинг биндинг. чтобы ты в MVVM не писал горы хендлеров событий в code-behind (который в идеале пустой) ибо декларативщина

>>816033

>Вот щас бы сидеть смотреть откуда на хуй аргументы взялись в этом xml,


как раз это и понятно ибо декларативное описание супротив императивного кода. хтмл точно такое же декларативное описание. когда там пишешь аттрибут data-хх ты ж не жалуешься.
602 1816058
>>815987
А ну да. Это ж еще команда, которая имеет CanExecute. Не нужно бегать по форме и дисаблить всех нуждающихся. Не нужно также заводить отдельный флаг "эту операцию можно выполнить"
потому что команда содержит в себе еще и эту инфу и вид про это знает
603 1816061
>>815927
дженерики это просто шаблон чтобы за тебя создали конкретный тип. это не полиморфизм.
604 1816064
>>816026
Суть в том, чтобы свести весь UI и всё поведение пользовательского интерфейса к XAML, MVVM и биндингу, чтобы не определять события в коде. Алсо событие - не dependency property, так просто ты его не забиндишь. Ты можешь указать какое то конкретное событие твоего юзер-контрола, но оно будет вне контекста основной view-model'и контейнера/приложения, и следовательно ничего у тебя там не будет
605 1816067
>>816029
ну анекдот бородатый про гвозди чё ты ёптубля
606 1816069
>>816067
Так я нуфаг
607 1816096
>>816049

>в случае с командой мы как минимум знаем что у неё есть методы CanExecute и Execute, а также ивент CanExecuteChanged


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

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


Почему не хочу? Я хочу. Только вот это все нахуй не надо, а только порождает код ради кода очередной
608 1816101
>>816061

>void Method<T>(T arg) where T:baseClass



Всё еще не полиморфизм?
609 1816109
>>816096

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


>неосилятор с двача: НИНУЖНО ЯСКОЗАЛ ЛИШНИ КОД КАК ВСИГДА ЛИШЬ БЫ МНЕ СЛОЖНЕЕ ПОНЯТЬ БЫЛА РЯЯ!!



Ты хоть сам понимаешь насколько жалко твои претензии выглядят со стороны? Умножение тоже нахуй не нужно, ведь не нужно никакие таблицы учить, просто складываешь всё последовательно и получаешь тот же самый результат!
610 1816112
>>816050

>чтобы ты в MVVM не писал горы хендлеров событий в code-behind (который в идеале пустой)


И чо, я без команды не могу приколотить к событию метод, который во вьюмодел лежит? Рили?
МС дала им код бихайнд, который ко вьюхе приколочен в качестве вьюмодели по сути. Нет, не хочу его юзать, хочу отдельный файл вьюмодел создать. Почему? Нахуя? Так нада! В итоге, блядь
Window1.xaml
Window1.cs - пустой
Window1ViewModel.cs - с кодом
611 1816115
>>816058

>Не нужно бегать по форме и дисаблить всех нуждающихся.


Нужно бегать и дисаблить с помощью canexecute команду, те же яйца, только в профиль, блядь
612 1816116
>>816101
не.
хотя... погоди (чешет яйца)
не. все же не.

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

а дженерики просто шаблон чтобы за тебя сгенерили типизированные классы/методы, чтобы ты не был goшником
13.jpg61 Кб, 756x530
613 1816119
>>816061

>дженерики это просто шаблон чтобы за тебя создали конкретный тип.


Пихаю туда разные типы данных, получаю одинаковое их поведение

>это не полиморфизм.


ясн
614 1816122
>>816064

>чтобы не определять события в коде.


Какие, блядь, события в коде ты определяешь? Нахуярил OnButtonClick = ButtonClick и забыл, блядь, то же самое, что и биндингом твоим
615 1816124
>>816112
ну вот у тебя допустим вьюмодель на формсах и ты хочешь сделать чтобы на онклик дергался метод во вьюмодели
тебе нужно
1 прописать хендлер онклик в коде бехайнд где достать дернуть метод вьюмодели
2 навесить на вьюмодель событие что "теперь эту кнопку можно кликать" чтобы в том же коде-бехайнд прописывать "на изменения вот этого можно сделать енаблед вот эти контролы"
умножаешь это на 20-30 контролов на форме и смотришь на количество кода что ты РУКАМИ захерачил в кодебехайнд

в случае WPF такого кода у тебя будет написано НОЛЬ

>>816122

>Нахуярил OnButtonClick = ButtonClick


где этот ButtonClick? во вьюмодели? так не пойдет. вьюмодель НИХЕРА НЕ ЗНАЕТ про вид. в этом ее суть
616 1816126
>>816109

>просто складываешь всё последовательно и получаешь тот же самый результат!


Я тебя удивлю, но кудахтер только складывать и умеет.

>Ты хоть сам понимаешь насколько жалко твои претензии выглядят со стороны?


Где жалко то? Я, блядь, чего не открою поглядеть, везде, нахуй, контрол - бинд - команда - метод. Нигде команды, нахуй по другому не используются
617 1816128
>>816119
это за тебя генерятся типизированные классы. просто замена ручному кодированию. Это не полиморфизм
618 1816132
>>816116
Это всё часть одного и того же, как я уже писал выше, частой ошибкой является желание натянуть абстрактные понятие типа полиморфизма на что-то одно. Оно на то и абстрактное для того чтобы воплощаться в разных формах. Обощенные классы в данном случае облегчают применение полиморфизма и являются его частью.
619 1816135
>>816126

>Я тебя удивлю, но кудахтер только складывать и умеет.



И зачем ты это высрал? Умножение человеку нужно или для тебя 5*5 и 5+5+5+5+5 это одно и тоже, поэтому таблицу умножения учить не нужно?
620 1816137
>>816124

>где этот ButtonClick? во вьюмодели? так не пойдет. вьюмодель НИХЕРА НЕ ЗНАЕТ про вид. в этом ее суть


Который? ButtonClick()? Вот этот? Во вьюмодели конечно. Нахуя вьюмодели про вьюху знать для этого?
15315684005740.jpg85 Кб, 600x403
621 1816141
>>816135

>5*5 и 5+5+5+5+5 это одно и тоже


А чо разное?
622 1816144
>>816137
еще раз
вот у тебя кнопка. у нее есть событие онклик
у тебя есть вьюмодель
как свяжешь онклик с вызовом метода вьюмодели БЕЗ НАПИСАНИЯ хендлера в котором ты вызываешь метод вьюмодели?
623 1816148
>>816132

>Это всё часть одного и того же, как я уже писал выше,


ну так ты ошибаешься.
624 1816150
>>816141
Да, в первом у тебя одна операция, во втором 5. Первый у тебя займет 3 символа, второй 9. Первый читается быстрее. Ой, да это прям как впф против винформс!
625 1816152
>>816137

>Нахуя вьюмодели про вьюху знать для этого?


ага. то есть вьюмодель должна теперь в сигнатуру свою добавить sender и eventargs, хотя для вьюмодели это просто метод без параметров
626 1816153
>>816148
Ну если тебе так комфортнее думать, то не буду тебе мешать, жаль только что это реальность никак не изменит.
627 1816154
>>816153
ок. закончили на этом. каждый пусть думает что хочет. все то весь мир не считает это полимфоризмом и один ты. ты конечно прав
628 1816158
>>816128

>Это не полиморфизм


Что есть полиморфизм?
20200305031119.jpg232 Кб, 1667x409
629 1816165
>>816154

>все то весь мир не считает это полимфоризмом


>весь мир



Это ты так свой манямирок называешь?
Хуею с клоунов, которые базовых определений не знают, но с видом знатока натягивают свою умственную отсталость на весь мир.

Вот, почитай на досуге:
https://en.wikipedia.org/wiki/Parametric_polymorphism

На пикриле выделил часть которая от тебя потребует большего внимания, чем другие.
Безымянный.jpg17 Кб, 420x104
630 1816166
>>816144
Вот так, например
631 1816168
>>816150
Разговор, блядь, про команды, при чем тут впф против винформ?
632 1816171
>>816168
При том, что твой винформ слишком монструозный и не структурированный. Тебе это уже несколько раз повторили, даже привели простую аналогию. Но ты всё равно продолжаешь кричать "Я ИСПОЛЬЗУЮ ЗНАЧИТ НОРМАЛЬНО!! А ТО ЧТО ВЫ ГОВОРИТЕ МНЕ НЕ НУЖНО!!!", продолжая закрывать глаза на отсутствие адекватной и удобной структуры у винформс приложений.
633 1816173
>>816165
ну если тебе чисто в теорию, а не полимфоризм в шарпах. то да признаю
634 1816176
>>816168
в WPF не только команды, а и БИНДИНГИ для команд.

напомню первоначальный вопрос
"Нахуя нужны команды в WPF,"

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

нахуя команды нужны были бы в формсах - я не ебу.
635 1816177
>>816173

>а не полимфоризм в шарпах


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

"Являются ли дженерики реализацией полиморфизма или только интерфейсы? Какого хуя, везде написано, что реализация инкапсуляции в шарпе"

вижу слово "в шарпе"

а оказывается шарп не причем. ясно ясно.
637 1816187
>>816180
Может тогда объяснишь всем, почему в шарпах это не полиморфизм, а что-то другое, одному тебе известное?
638 1816189
>>816187
ок ок. ты смотрел с колокольни "все виды полимфоризма" я же рассматривал только ad-hoc (собственно о нем я и писал)
каждый думал о своем. Я это признал. что еще?
639 1816190
>>816171
Ебаный рот этого казино, блядь. Я все понял, походу мы все тут не поняли друг друга.
Я спрашивал чисто за команды. В целом, мне лезть на винформ нахуй не надо. Я и на впф покодю

>напомню первоначальный вопрос


"Нахуя нужны команды в WPF,"

вот затем и нужны чтобы отвязаться от событий заменив их на определение команды и возможность на нее биндится.
>>816166
Вот так, например. Событие? Событие, все ок. Нахуй тут команда нужна?
640 1816195
>>816190
я же выше писал пример когда у тебя события и хендлеры в кодебехайнд и сравнение с впф

ты предложил делать не хендлеры а сразу хендлером пусть будет метод вьюмодели
но тут есть несколько но
1. это добавит в сигнатуру сендер и аргс которые логически во вьюмодели нахер не нужны. Для нее это просто метод
2 проблему флага "можно кликать" это не решает. ты все равно вынужден писать ручной механизм переключение статуса enabled для контролов в зависимости от состояния вьюмодели
3 биндинг может быть на команду которая находится хуй знает где в иерархии, до которой банально не добраться без ручной реализации хендлера где тебя ждет путешествие вверх по деревью контролов ( у вьюмодели спрашивать бесполезно - она про родителей не знает)

в итоге нулевого кода не будет. А там где ты сокращаешь код - ты вносишь мусор во вьюмодель
641 1816196
>>816190
Конечно ты можешь реализовать костыли и присобачить их к финформс чтобы убрать эти проблемы как можешь
но это и будет ответом на твой вопрос "а в чем выгода"
642 1816197
>>816190
А еще есть фокус, где можно ли работать с командой или нет зависит от фокуса. например кнопки на тулбаре в офисе меняют вклвыкл в зависимости куда фокус у тебя. И это все само работает, а не ты руками бегаешь прописываешь что должно быть активно или выключено в каждый текущий момент

но это уже лишнее. и так хватает
643 1816252
>>816166
Умник, блять, и чё тебе это даст, если ты пилишь не вермишель ебаную в MainWindow.xaml, а как белый человек раскидываешь компоненты по юзер-контроллам? Твой клик будет искаться в UserControl.cs, хуй ты оттуда достанешь по человечески главную вьюмодель
644 1816257
>>816190

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


Эна воно как. в общем так
1 команда это обьект который связывает в себе и хендлер и canexecute, что уже очень полезно ибо не размазывается
2 Команда у вьюмодели это свойство. со всеми вытекающими для биндинга. не забывай про OneWay
3 У команды ясный интерфейс ICommand, который не зависит че там в итоге будет вызвано и как. У метода же никакого такого интерфейса нет. Ну да ты можешь требовать сигнатуру вида Action/Action<T>, но это анальное ограничение и в случае интефейса ты можешь сделать свои реализации команд, а с методом нет
4 гладиолус
645 1816259
>>816190
да одного того что хендлер и флаг связаны воедино хватает для того чтобы создать класс объединяющий их а наречь его команда. Только одной этой причины БОЛЕЕ ЧЕМ достаточно так то
646 1816354
шарпаче у нас есть хоть один коммерческий мидл/сеньор?
647 1816494
>>816354
1/3 треда точно
648 1816519
>>816354
4+ года опыта
Дотягиваю до мидла?
649 1816528
>>816519
ну так то это не годами измеряется. тут выше отписывались что столько пишут, а толком ни с чем не сталкиваются
650 1816571
Помогите пожалуйста. Знаю C# на уровне "писал ООП хуйню на вебформсах для местной конторы", т.е основные знания в с# и дотнете есть. Сейчас хочу вкатиться в ASP.Net Core, но в бэкенде вообще не шарю (тем не менее знания html/css/js и совсем немного php (не 7, т.е без ООП) есть). Когда захожу на какой-нибудь метанит и читаю статью как сделать систему авторизации на основе куки, то уже путаюсь что и как. С чего начать курить backend?
651 1816590
>>816195

>А там где ты сокращаешь код - ты вносишь мусор во вьюмодель


Как будешь оповещать вьюмодель о том, что в модели изменилось какое-нибудь свойство, которое ко вьюхе приколочено? Во вьюмодели, естественно чисто обертка.
652 1816594
>>816252

>если ты пилишь не вермишель ебаную в MainWindow.xaml


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

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


Нахуй мне ее доставать, поехавший? Мне похуй, где этот клик будет искаться, метод приколочен, он и сработает из вьюмодели при клике.
653 1816607
>>816590

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



Я подписываю вьюнмодель на PropertyChanged модели и обновляю соответствующие свойства.
654 1816615
>>816259

>да одного того что хендлер и флаг связаны воедино хватает для того чтобы создать класс объединяющий их а наречь его команда.


Да вот хуй. Какие вы, блядь, хендлеры руками все время прописывать хотите? Все за вас уже сделано на хуй. Присобачил на событие в xaml свойствах контрола метод из vm и все работает, блядь, изкаробки. Какие, блядь, хендлеры, где вы эти делегаты руками пишите, блядь?
Флаг, блядь, хуяг. Дался вам этот флаг? Ну заблочишь ты выполнение команды и чо? Кнопка то в окошке все равно нажиматься будет и юзер, будет сидеть и жать ее не понимая, хули нихуя не срабатывает, тогда как, если ее дисаблить, то он сразу увидит, что нажать ее нельзя и начнет думать, а почему
655 1816627
>>816607
Реализовывать INotifyPropertyChandeg у каждой модели, еще и {get;set} уже не написать, а надо расписывать и дергать PropertyChanged. И это я еще выходит, по твоему мусор вношу, ага, блядь.
656 1816643
>>816615

> Присобачил на событие в xaml свойствах контрола метод из vm и все работает, блядь, изкаробки


1 а ну покажи это. а мы посмотрим
2 флаг IsEnabled для кнопки к которой ты привязал как поддерживается? или кнопка всегда активна и похуй что кликать нельзя в данный момент?

>еще и {get;set} уже не написать,


Fody поможет.
657 1816644
>>816627
Я не он если что
Так зачем в каждой модели?
Не в каждой модели, а только в тех моделях в которых которым нужно будет оповестить кого бы там нибыло об изменениях
Большинство моделей просто проставляются со стороны вьюмоделей, а оповещать обратно им не к чему.
658 1816714
>>816615

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


что за бред. кнопка переходит в состояние disabled когда команду юзать нельзя. Никогда таких кнопок не видел что ли?
659 1816734
>>816643

>1 а ну покажи это. а мы посмотрим


Ну на, смотри
>>816166

>флаг IsEnabled для кнопки к которой ты привязал как поддерживается? или кнопка всегда активна и похуй что кликать нельзя в данный момент?


Элементарно. Создаешь свойство булево, биндишь на свойство IsEnabled в кнопке. Все. Понадобилось, сбросил его в вм, кнопка неактивна, пользователь это видит и как дурак жать и орать, что хули ничо не работает не будет. Нужна стала, взвел его и вот, пожалуйста, нажимай кнопку. Проблемс?

>Fody поможет.


Щас бы еще под каждый пук дополнительную либу прикреплять.
660 1816751
>>816152
Не, лучше под каждый пук нахуярить команд, которые только и делают, что этот метод вызывают, ага?
ButtonClick(object sender, RoutedEventArgs e)
Или
Command ButtonClickComand;
ButtonClickComand = new Command();
ButtonClickComand += ButtonClick();
чтобы
ButtonClick();
Охуеть, блядь.
661 1816758
>>816751

>которые только и делают, что этот метод вызывают, ага?


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

>>816734

>Ну на, смотри


куда смотреть?

> Создаешь свойство булево, биндишь на свойство IsEnabled в кнопке


1 то есть все таки отдельное поле...с отдельным биндингом
2 я уже говорил что команда это свойство и как любое INPC свойство может быть перебиндено в рантайме. Метод на такое не способен
3 Фокус манаджмент в принципе работать не будет.

>под каждый пук дополнительную либу прикреплят


не прикрепляй. нравится руками писать пиши. когда надоест подключишь либу которая будет писать за тебя. это кому что нравится
662 1816767
>>816751

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



Да, лучше.
663 1816775
>>816767
В какую одну, поехавший? В твоей кривой аналогии, ты блядь, под каждый файл отдельно папку хуяришь, которые так же в одной общей лежат. От так заебись, сразу лучше стало, ага?
664 1816777
>>816775
В моей аналогии я не скуплюсь на строчки, если они помогут мне структурировать проект и облегчат работу с ним в будущем.
665 1816782
>>816758

>куда смотреть?


Вот в этот пост, ты издеваешься?>>816166

>1 то есть все таки отдельное поле...с отдельным биндингом


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

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


Пример приведи, когда это нужно.

>Фокус манаджмент в принципе работать не будет.


Что это и зачем нужно?
666 1816786
>>816777
А с чего ты взял, что это тебе поможет структурировать там что-то? Тыскозал что ли? Еще раз, только внятно поясни, как лапша из четырех дополнительных строк в случаях команд поможет тебе структурировать проект?
667 1816794
>>816594

>Какую вермишель? По каким юзер-контролам чо ты там раскидываешь, как белый человек?


????
Ты весь UI в MainWindow.xaml пишешь, или что? Кто тут поехавший то бялдь???

>Нахуй мне ее доставать, поехавший?


Чтобы он сработал из вьюмодели фактически из DataContext содержащего кнопку контрола, нужно забиндить метод, а не просто указать имя. С указанием имени нихуя у тебя не сработает.
668 1816818
>>816782

>Вот в этот пост, ты издеваешься?


а где в этом посте связь события с методом вьюмодели? хендлер на скрине в code-behind и никакого отношения к вьюмоделям не имеет.

> Лучше парочку полей под нужды


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

>Пример приведи, когда это нужно.


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

>Что это и зачем нужно?


это привязка команды в зависимости от фокуса. Посмотри хотя бы на меню визуал студии и тулбары. Это подходящий пример. В зависимости от того где ты щас находишься пункты и кнопки либо активны либо нет.
Городить руками весь этот огород..да ну нах
669 1816819
>>816794

>Ты весь UI в MainWindow.xaml пишешь, или что?


Еще раз, я не какой то неибаца wpf программист, поэтому и спрашиваю у вас, что и как. Я писал небольшие wpf приложения, да, весь UI у меня был в MainWindow.xaml. А как надо, можешь рассказать? Без троллинга.
>>816794

>нужно забиндить метод, а не просто указать имя. С указанием имени нихуя у тебя не сработает.


Да?
MainWindow1.xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Click="Button_Click"/>
</Grid>
</Window>

MainWindow1.cs:
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Добрый вечер");
}
}
}

Берешь этот код и охуеваешь, что все работает без бинда, просто, с указанием имени. Если MainWindow1.cs тебя не устраивает, то можешь создать MainWindow1ViewModel.cs положить код туда, только в xaml DataContex не забудь прописать, работать будет аналогично
669 1816819
>>816794

>Ты весь UI в MainWindow.xaml пишешь, или что?


Еще раз, я не какой то неибаца wpf программист, поэтому и спрашиваю у вас, что и как. Я писал небольшие wpf приложения, да, весь UI у меня был в MainWindow.xaml. А как надо, можешь рассказать? Без троллинга.
>>816794

>нужно забиндить метод, а не просто указать имя. С указанием имени нихуя у тебя не сработает.


Да?
MainWindow1.xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Click="Button_Click"/>
</Grid>
</Window>

MainWindow1.cs:
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Добрый вечер");
}
}
}

Берешь этот код и охуеваешь, что все работает без бинда, просто, с указанием имени. Если MainWindow1.cs тебя не устраивает, то можешь создать MainWindow1ViewModel.cs положить код туда, только в xaml DataContex не забудь прописать, работать будет аналогично
670 1816823
>>816819

>что все работает без бинда, просто, с указанием имени.


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

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


ну я же просил показать пример связки события контрола и вьюмодели в хамле
так покажи как это сделать
не нужно показывать связь с code-behind
671 1816825
>>816818

>хендлер на скрине в code-behind и никакого отношения к вьюмоделям не имеет.


А что, вьмодель у нас это не просто отдельный cs файл на который мы перенаправляем DataContex?

>это привязка команды в зависимости от фокуса


Как это работает? Сменил я фокус и что? Как дальше это все командами подхватывается не городя руками?
672 1816829
>>816823

>и не является MVVM аж нисколько


Это схуяли, блядь? Model-View-ViewModel. Где там про bind? Это просто построение программы, что вся логика убирается в модель и связывается с вьюхой через вьюмодел, чтобы в любой момент можно было безболезненно выкинуть нахуй вьюху текущую и напялить другую
673 1816835
>>816825

>вьмодель у нас это не просто отдельный cs


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

>Сменил я фокус и что?


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

>Model-View-ViewModel. Где там про bind?


вообще то ICommand они КАК РАЗ ДЛЯ ПОДДЕРЖКИ БИНДА В MVVM и придуманы. Для не mvvm придуманы routedcommand

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

1 невозможно забиндить событие на метод вьюмодели без промежуточного хендлера в code-behind. Тот кто пишет что можно - фантазер. Конечно можно использовать кастомный биндинг но это уже не стандарт
2 Метод отдельно флаг отдельно - удобно только в простых решениях, когда команды не передаются куда то, не собираются в списки комманд (для рендеринга контекстного динамического меню например) и т.д.
3 метод не INPC. Его не сменить на лету. Притянутый за уши!!! пример - кнопка стартстоп, где триггерами целевая команда меняется в зависимости от чего то. Можно сказать что можно в методе решить что делать с помощью if, но это уже спорный момент и слишком примитивный пример
4 CommandTarget и работа с фокусом принципиально невозможны
5 невозможно забиндить хендлер на метод который находится уровнями выше (подобие Relative Source AncestorLevel). Впрочем это продолжение пункта 1 - все придется делать или через code-behind или ебашать RoutedCommand, что не MVVM
674 1816843
>>816819
Ну а теперь ты разбиваешь свою дрисню на юзер контролы или их вообще пилит отдельный член команды и охуеваешь, что юзер контрол увидит твою хуйню только в своём юзер контроле, а все состояния, данные и прочая хуйня в совсем другом месте, стыдливо прикрываешь попу и перестаёшь тут нахуй бычить, если рассматриваешь всё это с точки зрения

>ну гыгыг вот хеловорлд выводится в MainWindow.xaml чё тут еще надо)))0 тупые сук ахаха ))))

675 1816846
>>816829

>вся логика убирается в модель


Ясно. Братан можешь дальше не продолжать
676 1816849
>>816835

>вообще то ICommand они КАК РАЗ ДЛЯ ПОДДЕРЖКИ БИНДА В MVVM и придуманы


Ну, очередные костыли накрутили и рады. Там, блядь, весь wpf костыль на костыле и костылем погоняет. Нахуй мс поддерживает эту парашу, которая даже на момент выхода была неудобным говном я хз.
677 1816850
>>816849

> Нахуй мс поддерживает эту парашу


Не поддерживает с 2013 года
678 1816858
>>816835

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


Покажи код такой кнопки
679 1816867
>>816843

>перестаёшь тут нахуй бычить


А кто бычит вообще? Я как удав спокоен, это двачи, тут и на хуй могут послать, ты чего обидчивый такой?

>юзер контрол увидит твою хуйню только в своём юзер контроле


юзер контрол в юзер контроле? чо,блядь? Попроще можно? Юзер контрол это вообще что в данном случае? Если я кнопку и текстблок нахуярил вместе в проекте типа юзер контрол и затем вставил его на свое окно - ты это имеешь ввиду? Вот джва таких юзерконтрола, общаются они между собой через вьюмодель, верно? Чтобы все работало, нужны бинды, верно? я все правильно понял?
680 1816868
>>816846

>Ясно. Братан можешь дальше не продолжать


Чо не так?
681 1816917
>>816849

>Там, блядь, весь wpf костыль на костыле и костылем погоняет


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

А до этого хотя бы изучи RoutedCommand ну чтобы меньше говнокодить хоть немного
682 1816920
>>816850

>Не поддерживает с 2013 года


но не потому что WPF плохой
просто из за наступления макак с их "веб на десктоп" приоритеты сдвинулись

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

>но не потому что WPF плохой


А потому что WPF бесполезный
684 1816938
>>816868
Мдель это именно модель. в ней не должно быть бизнес-логики. Даже дата-репозиторий, дёргающий данные, не является моделью. VM в WPF - прокси между данными (model) и вьюхой (view)
>>816867

>чо,блядь? Попроще можно?


Боюсь проще некуда, если ты не понимаешь, зачем нужно разбиение вьюх как и всего прочего на отдельные компоненты, модули, контролы. Мне кажется, тебе просто не хватает опыта, чтобы это понять. Мы тут вдвоём втроём? пытались тебе объяснить с разных позиций, что наговнокодить можно и событиями, но по-человечячи если делать - биндинги - крута, но твоё невежество непробиваемо. Я тоже на самом деле когда только изучал WPF, думал ротебать этих биндингов и комманд особенно чё бля ёпту я щяс нахуй как привяжу события блять System.Interactivity блядь подключу блядь всё блядь будет нахуй. Но потом по мере работы всё больше и больше понимал, какая же это хуйня и как же элегантно выстраивается архитектура приложения на биндингах, вот так руки и выпрямились
правда потом я понял, какое же десктоп ненужное говно, и в итоге хуй знает зачем просто овладел этим проклятым wpf
ом и щас выше доказываю, какая же он ненужная хуйня
685 1816939
>>816923
тебе да. я же отлично на нем зарабатываю.
686 1816944
>>816938

>Мдель это именно модель. в ней не должно быть бизнес-логики. Даже дата-репозиторий, дёргающий данные, не является моделью. VM в WPF - прокси между данными (model) и вьюхой (view)


Да ты что, солнышко, блядь. Знаешь зачем эта вся хуйня сделана? Чтобы ты мог вырвать, нахуй свою вьюху для wpf и прилепить без проблем вьюху от asp.net mvc, просто выкинув нахуй в и вм и приляпав через контроллер вьюху asp.net mvc чилить сидеть дальше. Как ты это сделаешь, если у тебя в вм логика?
687 1816945
>>816938

>Мдель это именно модель. в ней не должно быть бизнес-логики.


>VM в WPF - прокси между данными (model) и вьюхой (view)


Так, в модели логики не должно быть, вм это прокси между моделью и вьюхой...эммм, а где тогда бизнес логика должна быть?
688 1816946
>>816944
пошли человека в хамарин где для одного слоая вьюмоделек разные виды под андроид и под айос
а если он скажет "у нас wpf же хуле мне твой хамарин", то напомни ему про тесты
ну а если тесты ему не нужны, то какой смысл дальше говорить
689 1816950
>>816944

>Как ты это сделаешь, если у тебя в вм логика?


Вынесу логику в сервисы, тогда VM будет работать как контроллер
690 1816989
>>816950
В хуервисы, где у тебя в аббревиатуре мввм буква "с" для сервисов твоих? Что, по сути, сервис твой? Service.cs в методах и функциях которого логика? И чем это отличается от ModelForLogic.cs в который я положу свои методы и функции для логики?
691 1816991
>>816989

>где у тебя в аббревиатуре мввм буква "с" для сервисов твоих?


вот же на - MVsVM

>И чем это отличается от ModelForLogic.cs в который я положу свои методы и функции для логики?


Ничем, клади
692 1816998
Ну елы палы.

вот путь развития от макаки до белого человка
Сказ в 3 частях. UI фреймворк не принципиален главное суть

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

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

Немного подумав о том, что можно сделать учитывая данный фреймворк, у нас рождается MVP, то есть модель-вид+презентер
В презентер уезжает взаимодействие с моделью. То есть как теперь
а) модель есть модель
б) вид отправляет запросы в презентер и в виде остается только рисование (непосредственная работа с контролами) то есть (КАК РИСОВАТЬ)
в) на презентер возлагается запросы к виду, ну какая там еще визуальная логика и дергание вида с просьбой отобразить данные
презентер знает про вид через интерфейс. То есть презентер ничего не знает про контролы, а у него вид с интерфейсом "отобрази такое" (ЧТО РИСОВАТЬ)
то есть: вид дергает по клику презентер - презентер достает юзера из базы - презентер вызывает меод вьюхи "покажи юзера" и дает ему юзера - вьюха рисует

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

3 тут вам достается фреймворк который умеет в биндинги.
И так мы приходим к MVVM. Но зачем? почему не остаться в MVP? зачем менять P на VM? а вот:
1 презентер вынужден знать про вид, а значит вид должен дать ему контракт чтобы его презентер вызывал (который ничего не знает про контролы в общем то, а дает команды "изобрази это")
биндинги же позволяют ничего не знать про вид, а следить. то есть вьюмодель вообще не знает про вид ничего. Она знает про саму себя, а вид(ы) сами следят за ней и рисуют себя
2 можно строить иерархии вм, биндинг все разрулит.
3 Раз нет прямой связи вид - вюмодель - вид, то можно строить независимые иерархии контролов вида и иерархии вм
4 за счет шаблонов и биндингов рисование гуи получается декларативным и обычно ни строчки кода в code-behind

Больше свободы, больше изолированность (кто про кого знает), большая декларативность, отличная тестируемость - дернул команду, смотри состояние вьюмодели, нет ограничений как в MVP
692 1816998
Ну елы палы.

вот путь развития от макаки до белого человка
Сказ в 3 частях. UI фреймворк не принципиален главное суть

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

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

Немного подумав о том, что можно сделать учитывая данный фреймворк, у нас рождается MVP, то есть модель-вид+презентер
В презентер уезжает взаимодействие с моделью. То есть как теперь
а) модель есть модель
б) вид отправляет запросы в презентер и в виде остается только рисование (непосредственная работа с контролами) то есть (КАК РИСОВАТЬ)
в) на презентер возлагается запросы к виду, ну какая там еще визуальная логика и дергание вида с просьбой отобразить данные
презентер знает про вид через интерфейс. То есть презентер ничего не знает про контролы, а у него вид с интерфейсом "отобрази такое" (ЧТО РИСОВАТЬ)
то есть: вид дергает по клику презентер - презентер достает юзера из базы - презентер вызывает меод вьюхи "покажи юзера" и дает ему юзера - вьюха рисует

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

3 тут вам достается фреймворк который умеет в биндинги.
И так мы приходим к MVVM. Но зачем? почему не остаться в MVP? зачем менять P на VM? а вот:
1 презентер вынужден знать про вид, а значит вид должен дать ему контракт чтобы его презентер вызывал (который ничего не знает про контролы в общем то, а дает команды "изобрази это")
биндинги же позволяют ничего не знать про вид, а следить. то есть вьюмодель вообще не знает про вид ничего. Она знает про саму себя, а вид(ы) сами следят за ней и рисуют себя
2 можно строить иерархии вм, биндинг все разрулит.
3 Раз нет прямой связи вид - вюмодель - вид, то можно строить независимые иерархии контролов вида и иерархии вм
4 за счет шаблонов и биндингов рисование гуи получается декларативным и обычно ни строчки кода в code-behind

Больше свободы, больше изолированность (кто про кого знает), большая декларативность, отличная тестируемость - дернул команду, смотри состояние вьюмодели, нет ограничений как в MVP
693 1817004
>>816991

>вот же на - MVsVM


Ты бухой? Где там буква "с"?
изображение.png4 Кб, 384x119
694 1817007
>>817004
Ты придурок или притворяешься? MVsVM же в казахстане делали, у них там латиница, конечно у них там будет s, а не c.
695 1817010
>>817007
Идиот!
696 1817031
>>816945
В либе, очевидно.
MVVM - это паттерн о UI целиком и полностью. И логика в нем только для интерфейса, бизнес-логику ты пишешь отдельно. Вот например:
Ты пишешь калькулятор на WPF, который может только в сложение двух чисел (специально очень простая задача, чтобы ты понял), a+b=c. У тебя вьюшка - это то, как программа выглядит, модель - твои данные, а вьюмодель связывает вьюшку и модель. Но модель никакого сложения не производит, у тебя сложение в отдельной либе. И когда тебе нужно получить c - ты делаешь следующее:
c = MyLiba.Addition(a, b).
Нахуя? Чтобы когда тебе внезапно понадобится сделать этот калькулятор в вебе или на андроиде (а в реальном мире это нихуя не внезапная потребность), ты не сидел и не дублировал логику из моделей WPF, а спокойно вызывал свою либу и радовался жизни.
мимо
697 1817096
>>817031

>У тебя вьюшка - это то, как программа выглядит, модель - твои данные


Какие данные? Где в твоём примере данные? У тебя из вм дёргается либа. Где модель то?

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


Ну, вот твоя либа и есть модель по сути. Что ты её добавишь в проект, если переедешь на ведроид, что я в проект добавлю тупо свою модель и все работать будет искаробки, что у тебя, что у меня. Так почему ты так уверенно говоришь, что твоя либа это не модель нихуя?
698 1817103
>>817096

>Так почему ты так уверенно говоришь, что твоя либа это не модель нихуя?


Либа - это модель. А если точнее, либа - это модели + бизнес-логика. Скажем, ты дергаешь из SQL юзеров. У тебя будет класс DataAccess, модель UserModel и, скажем, класс ModifyUser. Но это все - по сути кишочки твоей программы, отношения к UI не имеющие. UserModel в либе и в WPF - не одно и то же.
В такой программе у тебя вьюшка - вьюшка, модель - UserModel (НОВАЯ, а не из либы), а вьюмодель через либу просит юзеров или че-то с ними делает.
Нахуй дублировать модели? Как минимум, модель в WPF относится к UI, а не к бизнес-логике. Во-вторых, модель в твоем UI и в твоих кишочках может различаться. Простой пример - ты дергаешь юзеров вместе с датой создания аккаунта. Она нужна в гуе? Нет. В итоге у тебя либа берет юзеров с датой, а гуй получает без даты.
Удобно, например, когда ты этих юзеров получаешь через WebAPI: ты хочешь, чтобы через API можно было получить всю инфу о юзере, но для гуя тебе дата реги не нужна. Вариант 1: создать новый вид запросов к API, но это пиздец, да и не всегда ты владелец этого API. Вариант 2: делать запрос на всю инфу, как предлагаешь ты. Но если юзеров ты запрашиваешь много, то дохуя памяти будет просто так уходить на инфу, которая и не используется. Или вариант 3: ты делаешь запрос на всю инфу и обрезаешь ненужную, приводя первоначального юзера в удобоваримый для твоего гуя вид.
699 1817234
>>816354
Мидл на галере 2+ людей. Недавно летом матрицу сдал(внутрений собес на должность мидла). А на проекте давно уже делаю задачи любой сложности.
700 1817247
Хочу через год начать вкатываться на unity разработки. Как думаете, хватит ли года, чтобы изучить с# на приемлимом уровне, чтобы хватало для unity?
701 1817265
>>817247
это ж субъективно. зависит от того сколько языков ты знал до этого. срок может быть и пару недель даже
702 1817401
Вопрос чисто теоретического толка.
Могу ли я в шарпике убить нафиг GC и писать код без всех этих проверок ненужных, выделяя/освобождая память ручками?
703 1817422
>>817401
Проще сменить язык.
704 1817431
>>817422
Да я знаю. Но это же чисто теоретический вопрос.
705 1817444
>>817431
Тогда можно
706 1817482
>>817103

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


И поэтому ты предлагаешь эту кучу юзеров одного класса перегонять в другой? То есть, мало того, что у тебя будет их в два раза больше, пока перегоняешь, так еще и время на это тратится, ведь пользователей дохуя. Браво, блядь, а потом начинается, мам, тормозит
707 1817483
>>817482
вы о чем вообще спорите?
708 1817506
>>817483
На выбор есть несколько тем:
wpf - говно, правда или вымесел?
команды нинужны, стоит ли писать лишние строчки кода, чтобы в любой момент изящно запретить юзеру нажимать кнопку?
мввм - является ли логика моделью?
709 1817509
>>817506

>мввм - является ли логика моделью?


логика это всегда модель. логика UI это уже не модель
710 1817523
>>816938

>Мдель это именно модель. в ней не должно быть бизнес-логики.


>>817509

>логика это всегда модель. логика UI это уже не модель


Анус ставишь?
711 1817528
>>817523
твой? ставлю.

а так это очевидные вещи
вид отображает
вьюмодели содержат модель (не путать с другой моделью) для отображения
а модель - собственно логика приложения

и нет никакой сложности определить к чему относится тот или иной код и где он должен быть логически расположен.
712 1817530
>>817528
Ты не туда воюешь, это мне вчера тут орали и доказывали, что я еблан и в модели логики быть не должно
713 1817533
Хммм.
Хммммммм.
Как же у вас все замудрено.
А как называется следующая картина:

У нас есть сущность, она хранится в БД, она ничего не знает о бизнес-логике, просто представляет из себя строку в БД. Есть класс который бизнес логикой этой записи владеет, он знает что, допустим, возраст нельзя указать отрицательный или имя должно быть длиннее 2 символов. Ну и есть какая-то страничка, которая данные введенные отдает классу с бизнес-логикой, и соответственно рисует что-то в зависимости от того что скажет класс с бизнес логикой. Что тут чем является?
714 1817536
>>817533
Нажал на вьюхе кнопку, сработал метод в вм, который взяв данные отправил их в модель, которая поглядела валидные ли данные. Далее метод из вм хуярит эти данные в БД, если они валидны. Все.
715 1817538
>>817530

>что я еблан и в модели логики быть не должно


ну если почитать у вас тут просто безумие какое то

>>817533

>она хранится в БД, она ничего не знает о бизнес-логике,


знает или не знает, но она является моделью в MVVM.
В MVVM вообще все что не вид, то есть модель. Это концептуальное разделение основных слоев. Это не отрицает разбиение модели на слои типа слой бизнеслогики, слой персистенс, утилиты и т.п.
MVVM всего лишь описывает как выделить визуальную часть
тема нейм 716 1817623
стоит учить c#? а да кста, я вдобавок новый на дваче)
717 1817639
>>817623
Опишу как у меня было.
В школе я был тупенький, на уроках информатики давали паскаль. Ну, мне нравилось, я учил. Единственный во всем регионе сдавал информатику. Потому лучшие баллы, кек, по информатике в регионе, мне даже грамоту выдали за это, лол.
Так вот, поступил я в шарагу на кодера. Там давали Си. Ну и год дрочили си. И сказать честно я нихуя не понимал как писать сложные программы. Ну, т.е. простые, которые нормально в одном файле можно держать - пожалуйста, а банально какую-нибудь складскую программу по учету товаров, еще и с ГУЕм - не представлял.
Так вот, на втором курсе шараги у нас пошел шарп. И он был охуенен. С ним я быстро наращивал сложность программ, понимание как строить что-то сложное начало приходить, потому что не нужно было думать о куче мелких вещей. К концу второго курса я с такими вот днищескиллами смог найти работу .net-джуном.
Так вот, когда на 4м курсе нужно было писать диплом и научник настойчиво попросил делать это на С++, проблем с переходом к С++ уже не было никаких, потому что умея строить сложные программы, плюс имея коммерческий опыт разработки, переключиться на другой язык не так сложно, достаточно немного погуглить про моменты которые отличаются, типа управления памятью и прочим.

Короче, мораль. С# позволяет очень быстро нарастить сложность программ и не думать о примитивных вещях, сосредотачиваясь на том как модули взаимодействуют друг с другом. Когда ты это умеешь, остальное лишь вопрос пары минут гугления.
718 1817701
Если я умею в формы, то могу ли я говорить, что умею в qt? Вроде немного поглядел, покрутил, одно и то же, контролов накидал, к событиям привязался, не?
719 1817702
>>817623

>стоит учить c#?


Для чего? Вопрос уровня, стоит учить поэму Блока "12"?
720 1817704
>>817701
Нет, особенности работы с qt у qt ведь не только аналог винформс есть, у них там еще QT QML слишком сильно отличается от форм. Да и различия самих крестов с решёткой тоже дают о себе знать
721 1817708
>>817704
Не, я может коряво объяснил. Вот есть формы, есть кути. По сути и то и другое для визуализации чисто. Кути же для питухона того же есть, например. Если смотреть с точки зрения визуализации тогда, сам алгоритм работы же похож? Накидал на форму контролов, обрабатываешь баттонклики? Или в кути по другому все?
722 1817713
>>817708
это абсолютно разные подходы
723 1817718
>>817708
Ну попробуй ёпта скачай qt express или как там он называется. Желаю тебе удачи и чтобы qt editor с 1 раза собрал все либы
724 1817727
>>817713
Объясни, плес, в чем именно?
>>817718

>Желаю тебе удачи и чтобы qt editor с 1 раза собрал все либы


Кто? И что, он не может собрать свои либы, а виноват я или что?
Я просто спрашиваю. В чем подход другой? Чем отличается от форм? От wpf отличается? Чем? Я знаю, конечно, что можно с головой погрузиться, но до того, как прыгну, мне охото понять, в какую жопу я собираюсь шагнуть
725 1817728
>>817727
во всем. Начиная от набора контролов и заканчивая тем что в кутях слоты
в общем если ты знаешь формы это значит что qt ты будешь как слепой котенок
то же самое можно сказать и про WPF
726 1817731
>>817728
Интересно. Если не лень, можно простой пример? Вот в формах есть баттон, нажал, событие или биндинг обработали - метод выполнился.
А в кутях как? Не так что ли все работает?
727 1817735
>>817727
Ну QT я бы назвал даже не фреймворком, а полноценным SDK со всеми его статическими и динамическими либами, бесплатными и платными изданиями и своими IDE. Вот их IDE - qt creator, можешь конечно попытать счастья в VS, но последний плагин под вижак я помню был на 15 студию, но если начнешь осваивать - я бы рекомендовал именно с qt creator. Так вот qt creator работает то ли на чистом cmake, то ли на своём враппере cmake, а cmake дело тонкое, чуть что не там файлы - ты нихуя не поймёшь, только в штаны насрёшь с ебанутых ошибок компилятора. Еще веселее было, когда у меня в qt creator'е какая то хуйня с локалями была, и эти ебаные ошибки выдавались даже не на русском/английском, а вот так
dwadj038%T#$)t50w48t_)TY_@_$@u-6t824u huyna.h line 22
awd_(UT$W
TU)$_)_____$*TU$)U_)$WIJ OERH GT)H$W) huyna.cpp line 90

Это раз. Два - это отличия qt и winforms.
Я уже лет 5 не трогал qt, да и тогда трогал его только в академических целях, сделал 2 лабы на формах и QML и плюнул нахуй на эту дичь, ибо ну его впизду.
Так что мои понимания отличий поверхностные и неактуальные.
У крестов из под коробки нет событий, но их концепция в целом нужна в GUI приложений. Так вот эта система в qt реализована на слотах и сигналах, это как минимум первое отличие. Суть примерно та же, реализация совсем не та же.
Генератор кода, насколько я помню, в qt был слабее, чем в winforms, приходилось много бойлерплейта писать. Не сказал бы, чтобы крестовые нюансы прям сильно вставляли палки в колёса, но в целом шарп гораздо слаще крестов, поэтому ванлайнеры решётки превращаются в среднюю такую боль на крестах.

Контролы местами другие и работают по другому. Уже не помню точно, но вроде у text input'ов не было слотов событий, которые есть у аналогичных контролов в винформс и подобное.

WPF есть смысл сравнивать только с Qt QML, но к тому моменту qt меня так заебал, а qml показался таким ебанутым по сравнению с xaml, что я окончательно забил
728 1817739
>>814269
Это MessageBox?
В старт приложения добавь
System.Windows.Forms.Application.EnableVisualStyles();
(ну и референс на System.Windows.Forms)
729 1817748
Допустим есть API1, в нем данные в одном виде, нужно раз в час делать запрос, получать данные, смотреть есть ли данные у моего приложения и если нет - приводить их к пригодному для моей модели виду.
Так вот, как это в плане архитектуры должно выглядеть?
Допустим я сделал так:
У меня есть класс Worker, этот воркер раз в час делает запрос к API1 сравнивает что пришло с тем что есть и недостающее пихает в мою базу.

Но что если однажды нужно будет добавить новые данные, допустим из API1 нужно будет не один запрос, а 2 делать и как-то аггреригрвать результат? Или если апи изменится и отдавать будет не в том формате? Или я решу свою базу заменить выводом в консоль? В общем, как примерно было бы сделать такую штуку более гибкой, чтобы в случае чего не приходилось полностью переписывать класс Worker?
730 1817815
>>817748
наверно просто по букве S из SOLID'а разбивай все процессы на отдельные классы
731 1817817
>>817735
Какого хуя тогда всем этот куту нужен? Блядь, ну хуйня же? Нет, мы тут на куту пишем, а ты ничтожество, раз не знаешь, что событие это сигнал называется. Да ну? ДА! Это одно и тоже? Нет!! Этадрукое
732 1817818
>>817817

>всем этот куту нужен?


кому всем? на шарпах он нахер никому не нужен.
733 1817826
>>817818
на плюсах спрашивают. это от обиды, что у них впф нет?
734 1817836
>>817826
откуда нам, шарпистам, знать что в голове у плюсовиков
для шарписта плюсовик нездоровый человек
735 1817838
>>817817

>Какого хуя тогда всем этот куту нужен?


Если ты не ERP макака на галере, а делаешь продукт, который продаешь третьим лицам, то на шарпе особо не попишешь, ибо вскрывается на раз-два декомпилятором. Если пишешь на крестах, то qt там наверно самый продвинутый sdk для UI ну или електрон))0
736 1817839
>>817836

>для шарписта плюсовик нездоровый человек


Который может юзать указатели, так что соси
737 1817840
>>817839
нинужно
738 1817841
>>817838

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


Ща бы сидеть вскрывать все говно, что твои макаки наговнокодили, ага. Главное идея и реализация. Я уверен код фейсбука был уббог, код вконтакта был убог
739 1817843
>>817841
Ну я рассуждаю по проприетарному софту типа автокадовских и адобиевских программ. Я думаю одна из причин, по которой они пишут на невиртуализируемых языках - это дополнительная сложность крякинга
740 1817845
>>817839
который юзает плюсы, а не более адекватный язык

>Который может юзать указатели,


что они дают чего нельзя сделать в шарпе (ОСОБЕННО с ансейф)?
741 1817848
>>817845
без интеропа дохуя чего
742 1817850
>>817848

>без интеропа дохуя чего


конкретнее пожалуйста.
743 1817911
>>817850
ну ты прям вообще чё сам не понимаешь?
744 1817936
>>817911
конечно не понимаю. это ж не я заявляю, что есть дохуя чего чего нельзя сделать на шарпе (и это с ансейф!!!), но можно на плюсах ибо есть указатели
745 1817937
>>817936
насколько я помню, unsafe в шарпе не такой функциональный, как ты его себе воображаешь. ты не можешь например взять произвольный адрес и кастануть его к void*, а потом оттуда читать/хуячить в память напрямую. это можно делать с IntPtr и прочие вещи, но это очень долго и сложно
746 1817939
>>817937

>но это очень долго и сложно


и, как заметили выше и не один раз, не нужно.
747 1818030
>>817739
Во, спасибо.
748 1818057
>>817839
Так и шарпист может, так что сосёшь ты. Иди джавистов тралль.
749 1818069
Почему программа выводит test, а не начинает ждать освобождения syncObject? В методе Write мы ведь пытаемся залокать уже локнутый объект.

class Program
{
private static Object syncObject = new Object();
private static void Write()
{
lock (syncObject)
{
Console.WriteLine("test");
}
}

static void Main(string[] args)
{
lock (syncObject)
{
Write();
}
}
}
750 1818072
>>818069
Потому что ты локаешь в том же потоке дважды. Второй лок видит, что он уже захватил этот ресурс и едет дальше

вызови Write через Task.Run(() => Write()); и позырь чо буде
751 1818077
>>818072
Тот же результат.
https://ideone.com/aJuVzM
752 1818081
>>818077
Возмжно таск наследует лок из скоупа, в котором он был создан. Поставь эксперимент, где ты таск создаёшь вне lock'а в main
753 1818087
>>818077
у монитора приписка есть

Obtain the monitor lock of obj. Will block if another thread holds the lock
Will not block if the current thread holds the lock
754 1818089
>>818087
форматирование поплыло из за зведочек в коментах к монитору.
755 1818102
>>818077
тут он повисает на втором локе, но из первого быстро выходит и сразу заходит во второй
поставь
Thread.Sleep() после Task.Run и увидишь что он будет ждать
756 1818120
>>818102
А, точно.
757 1818147
>>817843
Для них выбор продиктован требовательностью к производительности. На кряки и по большому счету наплевать, потому что основной доход у них от организаций, которым выгодней заплатить за лицензию, чем разорится на судах и выплате компенсаций.
758 1818176
Такое дело - добавил локализацию через AddDataAnnotationsLocalization, заполнил словарь, установил ErrorMessage у атрибутов и все работает. Вопрос как мне добавить поддержку локализации ErrorMessage для своего кастомного ValidationAttribute?
.png40 Кб, 1851x409
760 1818513
Кстати, я тут в фитчах 9 версии языка только сейчас обратил внимание на т.н. "Top-level statements and functions". И я что-то не совсем понимаю как оно работать должно. Допустим я вот такой еблан, что всегда делал Program не просто точкой входа но и синглтоном, т.к. в любом случае он будет, а следовательно почему-бы не запихнуть туда еще и какие-то общие штуки, типа ресурсов и прочего. Ну, собственно, как оно должно работать в этом случае? Я так понимаю что под капотом оно все еще будет собираться в некий класс Program и в нем все еще будет метод Main, но к нему-то мне обращаться не нужно было, а вот к другим методам, например настройкам приложения которые я получил из аргументов - нужно.
В общем, на самом деле я давно хотел чего-то подобного. Вернее я хотел чтобы был вариант писать как в сишчке - без классов(хотя бы на уровне файла), потому что иногда они не нужны. Но пока единственное применение что я вижу в текущей реализации это какие-то совсем маленькие программки, потому что в больших - ну будет у нас один файл с этими "Top-level statements and functions". Ну и что? Погоды оно не сделает. А вот если бы можно было как на прикриплейд, то другое дело. Даже вижу кейсы для использования вот так вот. Например нужно константы хранить, оно довольно удобно ложилось бы на это все, каждый раз делать статичный класс для констант - ну реально же как-то неоч, а константы так или иначе много где нужны и разбить их по файликам бывает необходимо и получается что куча ненужного мусора в виде: public static class ProgramConsts{...}; public static class ServerConsts{...}; public static class SettingsConsts{...}; и т.д.

В общем, не знаю я. Было бы классно если бы тогда в 10 шарпе позволили без классов писать, пусть и с какими-то ограничениями.
761 1818535
>>818513

>это какие-то совсем маленькие программк



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

>куча ненужного мусора в виде: ...



Мусор получится если ты всё это в один файл закинешь, а потом заставишь остальных гадать где какие константы лежат и вообще где они используются, а в твоём варианте сразу понятно к каким классам эти константы относятся. Можно вообще папки(неймспейсы) использовать для этого и везде у тебя будет твой Constants класс, просто с обращением через Server.Constants или Settings.Constants. Рефлексией можно будет легко собрать все константы, пройдясь по всем неймспейсам и вложенному классу Constants.
762 1818560
>>818513
Я так понимаю это сделали чисто чтобы привлекать новичков, которых раньше при выборе языка могли отпугивать все эти class Program static Main, а теперь как во всяких Питонах/JS, понятно и младенцу.
763 1818741
Аноны, можно ли как то в один проект перенести файлы другого безболезненно? Знаю что можно вручную копировать, но может vs позволяет это сделать быстрее и проще.
764 1818757
>>818741
Используйте SDK-style csproj всегда и везде и проблем будет меньше (или больше)
765 1818762
>>818741
а вообще из одной студии нельзя копировать в другую (тупизм)
но если открыть в одном солюшене, то можно
766 1818791
>>818513
Это тупая трата времени с их стороны. Пользы от нее ноль. В Programs обычно мало кода и по факту просто уберут вложенность

Лучше бы сбегали в другие языки, например котлин, и оттуда выдирали удачные подходы.
767 1818793
Спасайте, уже мозги вытекают. Допустим есть стандартная учебная база блоги и посты.
class Blog(int Id, string name, IList<Post> posts)
class Post(int Id, DateTime time, Blog blog)
мне надо через ЕФ Кор выбрать 5 блогов по времени последнего поста (это получилось) и два первых и два последних поста для этих блогов. Вот с этим, он меня посылает, то таблица 't' не сущестует, то could not be translated, то еще какая шляпа. Можно как-то написать такой запрос, не вытягивая на клиент все посты?
768 1818801
>>818793
Вот тебя нужно послать в тему по EF, как наглядный пример того, что ORM не нужны )
query.png6 Кб, 707x105
769 1818808
>>818801
Да не. Я конечно понимаю, что возможности орм сильно ограничены по сравнению с SQL, но в данном случае дело скорее во мне, а не в орм.
Получилось пока как на пике, не понятно почему нельзя написать Posts...Take(2).Union(Posts...Taske(2) что б на стороне базы объединение произошло.
770 1818813
>>818791
Так повыдирали же. record-классы например
771 1818817
>>818793
На стороне базы делаешь таблицу с сортировкой по дате создания, а через EF берёшь Take(2) и TakeLast(2)
772 1818824
>>818813
как будто оттуда.
это известная концепция, просто шарп дотянул до 9й версии занимаясь всякой второстепенной ерундой

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

>TakeLast(2)


А есть хоть один провайдер в котором реализовано TakeLast?
>>818817

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


Можно по-подробнее? Что за таблица? Я же могу свою таблицу Posts отсортировать. У меня проблема в том, чтобы выгрести и инфу о блогах и часть их постов за один запрос.
774 1818916
Сап аноны, нужен совет, мне нужно писать диплом и я подумываю что бы взять на тему создание собственной СУБД, как думаете с этим вполне реально разобраться?
775 1818934
>>818916
Если у тебя диплом в этом семестре, а ты всерьез задаешь такой вопрос типа реально-нереально разобраться, то не факт, что ты успеешь сделать какую нибудь васянскую ERP систему на винформах
776 1818966
>>818934
Не, диплом у меня в след семестре, просто решил заранее решить этот вопрос, что бы потом не бегать с горящей жопой
777 1818973
>>818966
Ну вот одумайся, пока не подписался. Я тоже выёбывался и в этот раз тоже выебнулся и брал ебанутую тему, потом либо просто проёбывал дедлайн, либо в последний день лютую хуйню делал лишь бы работало и приносил.
778 1818974
>>818973
>>818966
Такшо если ты темой создания своей БД прям не "горишь", то лучше брось эту затею
779 1818979
>>818974
Раз это так запарно то лучше поищу другую тему, гугля что нибудь интересное для диплома я читал, что многие предлагают делать сайты или интернет магазины,такой вариант можно рассматривать или можно еще что то проще найти
780 1818987
>>818979
Сайт или интернет магазин - это банально классика. Гораздо проще, чем свою БД пилить.
781 1819039
>>818979
У меня знакомые постоянно просят дать сайт, на котором можно прослушивать звонки знакомых или читать их смс. Если сделаешь такой - очень благодарен буду!
782 1819079
>>819039
У тебя Яровая в знакомых?
783 1819131
>>819039
И еще поиск соцсетей человека по фотографии. А то финдфэйс закрылся, а вещь-то полезная. Это же не сложно, а люди спасибо скажут. Тыжпрогаммист
784 1819453
>>797054 (OP)
Где можно найти инфу о том, какие изменения исходников сборки требуют перекомпиляции зависящих от неё сборок?
785 1819459
>>819453
Например, если я добавлю приватное поле в reference-тип, это потребует перекомпиляции клиентов или нет?
786 1819530
Просветите слоупока - .NET 5 это преемник Core и Framework сразу или кого-то из них одного?
787 1819535
>>819530
По сути коры, но считается, что он объединяет в себя и то и то
788 1819566
Имеется объект Type type = typeof(ClassA) и класс ClassB<T>, который требует дженерик. Как мне получить ClassB<ClassA>?
789 1819574
>>819566
примерно
typeof(ClassB<>).MakeGenericType(type)
790 1819576
>>819574
Благодарю
791 1819586
>>819459
>>819453
Если у тебя этот тип используется на стороне клиента, то у него поле не станет private до тех пор пока не перекомпилируешь код.
792 1819587
>>819530
И то и то, создается как раз для того чтобы не было двух веток, а была только одна - .Net c циферкой
793 1819681
майки решили переписать дотнет с нуля, но детские болячки решили оставить. а жаль
794 1820153
>>818793
Если у постов нет дат, но ID - автоинкремент, то можно просто по ID искать 2 минимальных и 2 максимальных значения. Ничего сложного.
795 1820169
>>818916
А я бы на твоем месте не слушал тех кто отговаривает.
СУБД как тема диплома - интересно. Другое дело, что если это будет стандартная СУБД в который ты просто сделаешь индексы, хранимки, триггеры и прочий дефолт, то тебя могут спросить: "А что тут нового-то?", ну, это если вуз не совсем шарага.
Разобраться - реально, я правда по другой теме писал диплом, но однокурсник запили колоночная СУБД, буквально за неделю реализовал, еще неделю занимался оформлением диплома, изучение необходимой для реализации литературы, по его словам, заняло месяц.
796 1820179
>>818793
В глаза ебусь. >>820153
Ну так в чем проблема?
Сортируешь по возрастанию/убыванию даты и достаешь первые 2. Take должен во всех провайдерах работать и во что-то типа Select Top 2.../ ... limit 2 ну и т.д.
797 1820195
>>818824

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


А не абстрагируясь ты получаешь кучу копипастного кода и возможные проблемы в будущем.
Для примера, вот чел на работе писал нативные запросы к MySQL, было это давно и на джаве, так вот, чел ушел, продукт остался. В итоге клиенты не могут нормально поставить себе новый MySQL потому что он там чет подхитровыебанное писал для оптимизации запросов, никто лезть разбираться из кодеров сейчас не хочет. Юзал бы он ОРМ, достаточно было бы одну dll'ку заменить на ту что умеет с новыми версиями MySQL работать и никаких бы проблем с этим не было. А ведь есть клиенты которые купили какую-нибудь про-версию MS SQL и хотят ее использовать, вот ты будешь писать нативные запросы к каждой СУБД? А есть ли у тебя время чтобы каждой возможной СУБД написать запросы? А что будешь делать когда уже все СУБД поддерживаешь, и нужно буквально в одном месте один новый запросик делать? А если по солиду все это реализуешь, то в итоге у тебя самого выйдет новая ОРМ, так нахуя ты велосипед изобрел, когда есть нормальные решения?
798 1820238
>>820195
нЕТ ТЫ НИ НАПНИМАЕШЬ ВЫ ФСЕ МАКАКИ МАКАКИ ВЫ ХАТИТЕ ПРОСТО ЧТОБЫ БЫЛО И УДОБНО НЕЕЕТТТ СУКА Я ЗАПЩИРАЮ МАКАЧИТЬ МАКАКА НЕЛЬЗЯЯЯ НАДО ВСЁ НАТИВНО ДЕЛАТЬ СУКА ТЫ ЧТЬО БЯЛЯТЬ НЕ ПАНИМАЕШЬ ОТ ВАС СУКА СОФТ ТАРМАЗИТ ВСЁ ТАРМИАЗИТ МАКАКИ БЛЯТЬЬБББ
799 1820283
>>820195

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


а абстрагируясь ты получаешь проблемы орм уже сейчас. 2 стула как ни крути.

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


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

ну а про то что новый мускуль не поддерживает старые запросы это шутка такая чтоль?
800 1820296
Вкатили на ворлдскилз. Компетенция - "программные решения для бизнеса".
Анонасы, посоветуйте гайды по visual studio, а также sql menegment. В шараге гайдов не дали, сижу, пержу, ищу сам.
801 1820303
>>820296

> посоветуйте гайды по visual studio


Может тебе еще клавиатуру для кодинга подсказать чтоб программировать на 30% быстрее? Как тебя на ворлдскиллз отправили с такими вопросами?
802 1820306
>>820283

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


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

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


Не знаю что там поддерживается или не поддерживается, потому что когда я пришел работать, никаких СУБД кроме MS SQL я не знал, а на работе для новых проектов использовали уже pgSQL. Суть в том, что при обновлении все ломается, а при откате на старый MySQL - работает, лезть в код этого проекта никто не хочет, потому что там хрен пойми как все работает. Один вот попытался, в итоге месяц возился-возился, а результатом возни было добавление в руководство строчки про то что работает на с такой-то версией MySQL работоспособность с другими - не гарантированна.
803 1820370
>>820306

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


ну так это ваши проблемы что написано все через жопу
пишите нормально

зы: даже с вашей орм в случаях оптимизации придется костылить sql.

Хотя в наше время идут по пути "юзер богатый и докупит железа"
804 1820371
>>820303

>> посоветуйте гайды по visual studio


>Может тебе еще клавиатуру для кодинга подсказать чтоб программировать на 30% быстрее? Как тебя на ворлдскиллз отправили с такими вопросами?


Туда всех с нулевыми знаниями берут блять
805 1820408
Приветствую. Нужна помощь.
Надо соединить бек(asp.net core web api) и фронт (react+ts). Общее представление есть, хотел бы может какие то ресурсы/гайды или типа того что бы посмотреть примеры именно react+ts. Или может у кого будет вообще советы по коммуникации двух сторон.
Перечитал подходящие главы из книги ASP.NET Core and React(Carl Rippon), но в ней много неточностей и непонятной инфы.
806 1820420
>>819530
.NET 5 - это по факту .NetCore 4, очередной ребрендинг, с намеком что вот теперь то это основная ветка дотнета.
Из менее маркетологических причин - начали сливать библиотеки в единую платформу, мол теперь CoreCLR - для серверов, Mono - для AOT, но крутится на них общая FCL
807 1820432
>>820408
Зырь финт ушами.
Берешь докер.
Бек в контейнер для бека, там вся неткор хуйня
Фронт в контейнер с нжинском
В конфиге нжинкса делаешь чтобы запросы от клиента пересылались в контейнер с беком.

А, как я придумал. Я молодец? Я молодец!
808 1820443
>>820432
фронт в контейнере. 0_0 это как?
809 1820447
На ASP.NET есть что ни будь типо Telescope лары? Я что то погуглил, так ничего похожего и не нашел
810 1820573
>>820408
Никаких сложностей то и нет, если проблемы не искать. На фронте можешь сделать набор методов, которые будут принимать подходящие для запросов параметры, делать запрос по домену бэка + константа с адресом + аргументы твои через, например, https://www.npmjs.com/package/axios, возвращать промисы. На беке просто делаешь веб апи контроллеры и получаешь запросы от фронта. Если нужно коммуникацию в другую сторону - дефолтный signalr.
811 1820588
>>820443
Всмысле как? Берешь фронт,собираешь его для прода, затем парой команд для докера копируешь в контейнер с настроеным nginx, затем создаешь из образа - контейнер и биндишь к порту, все у тебя фронт в контейнере, nginx там только чтобы принимать соединения. В другом контейнере у тебя лежит бекенд. Так вот, когда у тебя из фронта запрос в виде: env.prod.BASE_URL/api/v0/Item/1, если ты настроишь по гайдам, бек получит этот запро, отдаст фронту, а фронт уже через nginx клиенту. Это все делается просто-быстро. Да, можно не nginx а ноду или что-тебе больше нравится, просто nginx простой и довольно популярный.

Можешь конечно чуть больше поебаться и запихнуть фронт внутрь проекта с беком, настроить там все, но это та еще ебота на самом деле, первый вариант хоть и кажется мудренным, на самом деле проще и удобнее, потому что фронт отдельно - бек отдельно, ты можешь проверить большую часть фронта не запуская бек, можешь проверить свагером апи бека.
812 1820608
>>820443
Легко, фронт же должен отдаваться браузеру через какой-то хттп реквест. Т.е. нужен веб сервер. Обычно если фронт пилится на Vue/React/Angular, то там запущен сервак на ноде (сблеванул) и когда ты деплоишь новые сорцы (в твоём случае тайпскрипт), он компилит это в джаваскрипт и потом отдаёт эти статичные файлы (жс, цсс, хтмл, графику, шрифты) любому, кто сделал http request.

Dockerfile
FROM node:13.12.0-alpine
WORKDIR /app
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent

А потом запускаешь
docker build

Всё очень легко, всё делается за пол часа, всё гуглится с миллионом работающих примеров за минуты.
изображение.png16 Кб, 1013x171
813 1820635
Поясните, вот MVC или Razor Pages проект — это фронтенд или бэкенд? Или и то, и другое? Там ведь и работа с данными, и html-страницы.
814 1820637
>>820635
пик случайно приклеился
815 1820653
>>820635
Насчёт Razor pages не скажу. MVC проекты вполне себе пилятся на реакте/ангуляре. Смотри гайды на метаните
816 1820663
>>820635
все очень просто
все что делается (выполняется/работает) на сервере - это бэкенд
все что происходит в браузере - это фронтенд

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

>>820608
еще юзаешь докер? цивилизованные люди смотрят в сторону podman + buildah
817 1820724
>>820663

>еще юзаешь докер?


Докер + helm + k8s + DevSpace = вообще не думаешь об инфраструктуре, пишешь код и деплоишь за секунды.
818 1820727
>>820724
>>820663
Нормальные пацаны уже перекатились на serverless архитектуру.
819 1820747
>>820663
>>820724
На самом деле в нашем сетапе Докер только для компиляции образов (image building) делается. Так то можно хоть докер, хоть бульду buildah - ебучие бульдоги и ебучие собаководы! не могли нормальное лого для своего продукта сделать? пригорает., хоть kaniko, хоть podman. Они все умеют взять имеющийся докерфайл и сделать образ. Докерфайл можно за несколько минут в баш скрипт преобразовать, если очень хочется.
820 1820748
>>820747

>деле в нашем сетапе


вся суть. сделал образ и трава не расти
а вот будешь разворачивать по другому запоешь
821 1820752
>>820727

>Нормальные пацаны


Это ты так смузихлёбов назвал? Безсервеная архитектура хорошо для всяких stateless functions годится, когда надо чего-то быстро сделать - аутентификация, число посчитать, чего-то внутреннее для отладки, процесс какой-то запустить, аудит лог записать. Приложухи пусть пока будут на отдельно выделенном процессе (на кластере процессов) крутиться .
822 1820777
>>820752
В моем хлеву с gcp работают, там уже не только функциями ограничиваются - App Engine, Cloud Run, базы данных. Хотя под капотом оно примерно кубернец и докер, конечно.
823 1820783
>>820777

>gcp


У нас Azure и AWS. Мы их лямбды и функции тоже используем, но не как полноценные приложения, а для того, что выше перечислено было.
824 1820819
>>820447
ага меня тоже это удивляет. что то похожее это glimpse, но оно ж заброшено да и для асп.нет же (не коре, хотя на коре 2 ставится)
123.png79 Кб, 1738x826
825 1820820
Челы, может кто подскажет? В своих примитивных новичковых нуждах стал пилить приложение для винды, чтобы с удаленным сервером без использования браузера взаимодействовать.

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

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

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

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

Где я проебался? Почему один и тот же код работает в консольном приложении и отлетает с абсурдной ошибкой в форме?
826 1820823
>>820820
ниче не понял но на картинке он жалуется что ты шлешь GET с телом запроса (что конечно возможно, но не родным клиентом)
тело запроса принято слать как POST же
827 1820828
>>820819
>>820447

>Telescope


А чем вас встроенный функционал не устраивает? Кор отлично выплёвывает и запросы ко всяким АПИ и БД и тайминги и вообще всё что надо для телеметрии/мониторинга. Там уже всего встроено навалом, а ещё есть всякие Serilog, TelemetryClient, elmah и ещё куча независимых наработок.
И конечно есть
https://devblogs.microsoft.com/dotnet/introducing-dotnet-monitor/
https://docs.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-counters
https://github.com/Microsoft/MIEngine/wiki/Offroad-Debugging-of-.NET-Core-on-Linux---OSX-from-Visual-Studio

dotnet-monitor - вообще сюда копай
828 1820830
>>820823
Ну я скопировал всю инфу из запроса браузера. Там ГЕТ + набор header. Все тоже самое я ему и шлю. Кроме того, как я и сказал, этот же самый код работает из консоли.
829 1820832
>>820828
нужно не для телеметрии, а для разработки

у тебя есть ендпоинт все вроде норм, но показывает 404
как узнать что там порешал асп что выдал 404, куда он там зароутил и не нашел?
встроенным функционалом плиз

и тому подобное.
830 1820833
>>820832
Если у тебя Serilog/TelemetryClient, то в конфиге в проде меняешь флаг на Debug/Verbose/Trace где надо (он может и дефолтные системные события ловить) и смотришь что он выполняет, куда тыкается, какие рауты пытается запустить и прочее. Во всяких облаках это за тебя вообще абстрагированно во всякие красивые панельки, там даже свои собственные конфиги трогать не надо, оно за тебя всё загрузит.
Ну и dotnet-monitor.
831 1820837
>>820828

>встроенный функционал


это какой еще? У меня есть web-api в релизе, нужно реквесты проверять, чекать запросы. В телескопе из коробки есть широкий функционал, для asp.net нашел только (похожее) под AWS, и то платное

>выплёвывает


и куда пишет, если нет логгера? Все, что ты перечислил, это логгеры
832 1820840
>>820833

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


вот больше делать нечего в разработке как логи читать.
833 1820842
>>820840
В проде только на логи и надо полагаться. А то ещё додумаются перезапустить приложение в дебаге, пока в него живые юзеры стучатся. В разработке у тебя dotnet run с консолью, куда сразу всё выплёвывается и дебаг.

>>820837
Кто в прод приложение без логера выпускает?
834 1820844
>>820842
достал ты своим продом.
прямо как в том анекдоте
"а вот если бы у рыб были блохи"

кроме тебя НИКТО не говорит про прод. Более того, поясняют, что это нужно НЕ В ПРОДЕ епрст, а в деве

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

>Кто в прод приложение без логера выпускает?


логгер есть, но UI телескопа > текстовика с тувой хучей логов INFORMATION / WARNING etc.
836 1820848
>>820845

>я спрашивал за прод


С каких пор телескоп это прод?
837 1820852
>>820848
сырой "прод" висит, который дебажат 24/7. Прод он только потому, что конечник может чекать API, все еще в процессе разработки
838 1820870
>>820844

>достал ты своим продом.


>У меня есть web-api в релизе


релиз обычно = прод
839 1820873
>>820845
Kibana, Elmah, App Insights, https://newrelic.com, https://grafana.com. Там нормальный поиск и группировка всех логов и телеметрии. Некоторые могут помочь навесить алерты и информаровать о высокой нагрузке, куче ошибок и прочему.

Есть ещё такие поделия https://github.com/mo-esmp/serilog-ui
840 1820875
>>820870
вот только такие вещи как телескоп они не для релиза
разные подходы, разные ожидания от того что должно быть.
841 1820876
>>820844
Я на коре в хайлоад прод пилю уже 3 года и не жалуюсь на отсутствие инструментария. Отладка косяков даже в твоём ненавистном проде занимает от нескольких минут до нескольких часов. Локально вообще секунды-минуты любая проблема устраняется. Даже когда работаешь с каким-то магическим 3rd party API, который ведёт себя не по документации (которой и нет).
842 1820878
>>820873
спасибо
843 1820879
>>820876

>Я на коре в хайлоад прод пилю уже 3 года и не жалуюсь на отсутствие инструментария.


звучит как "я в блокноте пишу и мне норм. значит IDE никому не нужны"
или "я папки зипую и мне норм. ваши гиты не нужны"
844 1820885
>>820879
Нет, это просто значит что ты не знаешь/не понимаешь как работать с выданным тебе инструментом. У меня были коллеги, которые ломали гит репо, и потом жаловались что гит говно, потому что делает какую-то ерунду. Вот было бы так как в SVN/TFS/Perforce!

А на самом деле они не только не знали как с гитом нормально работать, а даже учиться не хотели. Но момент пожаловаться никогда не упустят.
845 1820888
>>820885
ты щас вообще о чем? причем тут вообще гит?
гит, конечно, говно, но в данном контексте он вообще не причем
846 1820891
>>820888
Ты по-моему профессией промахнулся.
847 1820897
>>820891
потому что называю вещи своими именами?
это не делает меня не программистом.
и желание иметь что-то что помогает мне в разработке больше чем тупая консоль, тоже не делает меня не программистом

так что мимо. Я свои слова могу обосновать, но это выйдет за рамки этого треда.
И уж точно говнистость гита не относится к сути моих слов ранее, потому что гит там упомянут просто до кучи
848 1820917
>>820820
Ты в заголовках указал тип контента, но при этом ничего не отправил с запросом.
849 1820920
Да и еще вопрос, тут за Serilog заговорили. Стоит ли его юзать, когда у Core есть ILoggerFactory? И еще такой вопрос насущный - логи где правильнее хранить, в ДБ или txt?
850 1820923
>>820920
а у коре сделали хранение логов в файлах? последний раз ставил чей то велосипед с нюгета
а вообще серилог это про структурные логи, хотя Nlog тоже могет
123.png91 Кб, 1014x581
851 1820926
>>820917
На данный момент я попробовал другой аддон. RestSharp кажется. С ним все примерно то же самое. Исключений нет, однако сервер выдает заглушку, типа у вас не доступа к этой странице. Опять же, запрос содержит точь-в-точь такой же набор заголовков, метод. Все это я просто скопировал из браузера и все работает в консоли.

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

Мне кажется, что форма чем-то выдает себя из за чего сервер отказывается ей отвечать, как браузеру.
852 1820958
>>820653
>>820663
А как разделить MVC проект на бэк и фронт? Модели и контролеры — бэк, а Views — фронт?
853 1820974
>>820926
Зачем ты используешь какую-то ерунду? Есть же нормальный HttpClient.
854 1820975
>>820958
что значит "разделить"?
Зачем это? Чего пытаешься добиться?
855 1820979
>>820897

>звучит как "я в блокноте пишу и мне норм. значит IDE никому не нужны"


>или "я папки зипую и мне норм. ваши гиты не нужны"


>своими именами


Сначала пожаловался, что у него инструментов не хватает или они не работают как ему нравится. Потом написал какую-то хрень про свои фантазии с блокнотами и гитами (именно что "своими именами", сам придумал, сам назвал). Затем, когда ему сказали что панелька в пхп вообще не сравнима с инструментарием в дотнете, его заклинило на гите.

>А для кора чет ничего нету нормального


Освой выданный тебе инструментарий сначала нормально, потом утверждай.
856 1820992
>>820975
Чтобы бэкенд-девелопер занимался бэкендом, а фронтенд-девелопер занимался фронтом.
857 1821016
>>820926
Оригин то зачем убрал? И если в заголовке тип контента, значит с запросом нужно отправлять данные, вообще так гадать сколько угодно можно, если хочешь чтобы помогли, то делай так чтобы проблему воспроизвести можно было.
858 1821051
Анон, помоги с WPF. Я не силен с этими биндингами. У меня есть грид
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height=""/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="250"/>
<ColumnDefinition Width="
"/>
</Grid.ColumnDefinitions>

Теперь я хочу чтобы было не 250, а бинд на мою переменную, которую буду изменять в коде, и вот эти изменения должны отражаться. (то есть нажал кнопку и вместо 250 будет 500)

Но в голове каша

написал так
public int PanelSize { get; set; }
<ColumnDefinition Width="{Binding PanelSize, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"/>
Но нихера не происходит при изменении PanelSize

Либо как-то по другому, можно без этих биндов получить этот Width?

Мне просто надо самым минимумом сделать, а не написанием огромных классов для маленькой задачи. Но и как получить ColumnDefinitions Width я тоже не шарю
859 1821076
>>820979

>Потом написал какую-то хрень про свои фантазии с блокнотами и гитами (именно что "своими именами", сам придумал, сам назвал)


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

>его заклинило на гите.


так это тебя заклинило. о нем РЕЧЬ ВООБЩЕ НЕ ШЛА. читай внимательнее, учитывай контекст

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


ну вот опять.
860 1821078
>>820992
да они и так будут ими заниматься. банально в силу их знаний они не смогут заниматься не тем.
861 1821089
перекат будет вообще?
862 1821099
>>821089
Если ты оформишь
863 1821100
>>821078
Так я и спрашиваю, что в MVC фронт, а что бэк?
864 1821101
>>821099
Значит не будет. Я из тех, кто "я только спросить"
865 1821111
>>821100
все что касается браузера - фронтенд
все, что касается сервера - бэкенд

для фронта нужно знание html/css/js, чтобы в браузере все работало как надо
для бэкенда нужно на чем то логику писать, базы данных знать, кеширование и так далее
V в MVC относится к серверному рендерингу шаблонов. Razor выполняется на сервере. То есть это бэкенд.
866 1821128
>>821051
Я последний раз ВПФ лет 5 назад использовал, потому элегантного и правильного решения не предложу.

Но как вариант вот тебе говнокодерское. Даешь твоему гриду имя. Достаешь из него твой ColumnDefinition, где-то хранишь, значение и при нажатии кнопки меняешь значение его свойства Width. Да, как я сказал - говнокодерство, но это намного проще сделать если тебе действительно нужен минимум.
867 1821134
Как протестить свои знания перед собесом?
868 1821149
>>821051
накинул тестовую форму правда PanelSize double
все работает.
869 1821151
>>821134
Основная проблема собесов так то не знания, а мандраж.
870 1821155
>>821151
Ну, я просто думаю что если быть уверенным в своих знаниях - с мандражом полегче будет справиться.
871 1821168
>>820974
Потому что слишком зелен и не смог разобраться, а в случае с этими расширениями все оказалось понятнее. Кстати, а в чем разница, если эти аддоны внутри себя используют те же базовые методы?

>>821016
C оригином выходит тот же самый ответ: Permission Denied. На самом деле, там нужен единственный заголовок, как на первом скрине. Из консоли я получаю страничку с инфой, которую далее обрабатываю.

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

Кажется дело в том, что через форму сервер почему-то сбрасывает сессию логина, то есть отвечает мне как незалогиненому пользователю - на скрине видно меню-форму для логина. А из консоли это меню сменяется на список с опциями и разделами, который пользователь может видеть после логина. Это уже хоть что-то. Спасибо, парни. Осталось понять, что с этим делать.
1.png201 Кб, 1913x837
872 1821206
>>820820
>>820926
>>821168
Отправил куки, как куки и все получилось. Авторизация не спадает и сервер отвечает, как и должен.

Конечно интересно было бы узнать, что это за НЕХ из за которой консоль работает не так, как форма. Но по крайней мере формально вопрос решен. Всем спасибо еще раз.
873 1821208
>>821206
да нет никакой разницы откуда ты запрос делаешь. Ты просто что то накосячил
874 1821266
>>821111

>V в MVC относится к серверному рендерингу шаблонов. Razor выполняется на сервере. То есть это бэкенд.


Но ведь это касается браузеров, там html, css и js, это UI веб-приложения. Как же это не фронтенд?
875 1821320
>>821266

Отделяй мух от котлет.

хтмл/css/js это фронтендерское. фронтендер (в данном случае верстальщик) это создает и отдает бэкендеру
а бэкендер делает из них шаблоны, прокидывает данные, собирает и рендерит в результат.

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

Так что где бы ни был хтмл создавать его фронтендеру. Для бэкендера это просто шаблон который нужно отрендерить и заполнить
876 1821326
>>821266
как то я сложно выразился. короче

дело фронтендера работать с "там html, css и js, это UI веб-приложения". Он это и создает. И если что то должно быть получено с сервера - дело бэкендера организовать это получение. И это либо полноценный рендер шаблонов либо просто статик хтмлки.

Ну блин не знает фронтендер про Razor, про асп.нет, про MVC
а бэкендер не знает про хтмл, стили, заебы браузеров и так далее.
Так что никто из них не сможет залезть в чужую область.
123123123123.jpg10 Кб, 329x331
877 1821380
Пацаны, а вам нравится всё, что добавляют в C# в последние годы? По-моему это пиздец. Особенно 8.0:
https://docs.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-8

Какой-то джаваскрипт нахуй, какие-то локальные стат методы, индекс-хуиндексы. Зачем всё это говно пихать в C#. Могли бы тогда отдельно выпустить Си Скрипт какой-нибудь. Я просто в ахуе во что код превращается со всеми этими конструкциями. Сейчас ещё джуны начнут это говно подхватывать. Сокращая код такими конструкциями ты его не делаешь более понятным.
878 1821406
>>821380

>локальные стат методы


полезно

>индекс-хуиндексы


тоже полезно
879 1821414
>>821380
Это обычный процесс - по ходу жизни простого инструмента он усложняется и предъявляет большие требования к квалификации. А потом появляется новый простой и удобный инструмент, за который садятся начинающие. Подобное с играми Paradox Interactive постоянно - со старта играть норм, а через несколько лет вкатываться - непонятно.
А касательно конкретных изменений 8 версии - мне нравятся новые функции свича, юзинг, индексы и диапазоны (хотя больше работаю на 7.3). Асинхронные потоки тоже интересно было бы потрогать. Остальное не особо интересно для меня, но так и должно быть с языком широкого назначения.
880 1821416
Чуваки, а есть вариант, чтобы после отправки post запроса попросить сервер не отвечать мне? Вот добавил я ип со страницы, нажал кнопку, после чего страница обновилась. Я делаю тоже самое, только мне не нужна перезагруженная страница в ответе. Лучше понял-принял или ничего.
881 1821422
>>821416
ну так не читай ответ. закрой соединение сразу после принятия хидеров
882 1821466
>>821380

>ты его не делаешь более понятным.


Потому что долбоебу вроде тебя лень учить новое и более удобное? Так это не джуны виноваты, а ты.
883 1821503
>>821422
Но я не хочу шатать сервер.
884 1821513
>>821503
ничего не поделать. есть хидер HEAD но ты же шлешь POST так что сервер вынужден сформировать тебе ответ. Да и в любом случае вынужден
885 1821517
>>821513
Прискорбно.

Нашел такую настройку, но она экономит ресурсы клиента.

>HttpCompletionOption.ResponseHeadersRead;

886 1821518
>>821517
ну так научи сервер не генерить ответ. дай ему флаг
887 1821527
>>821518
Не могу, я всего лишь модер. Админ проебался и неизвестно когда появится. А если такая настройка уже есть на сервере, можно ли об этом как-то узнать, на заходя на него? Вообще есть какой-то способ узнать об доступных API сервера извне?
888 1821688
>>821326

>а бэкендер не знает про хтмл, стили, заебы браузеров и так далее.


Так как он может этого не знать, если cshtml файл, он же View в MVC приложении, всё это в себе содержит? Или если это Razor Pages приложение, то cshtml @page файл.
889 1821751
>>821688
ну он знает хтмл, он же не идиот. Его ж невозможно не знать. Но знает его ровно на уровне "мне дали хтмл, я превращаю его в шаблон для razor". Но в верстке он никакой, и если где то плывет верстка - это не его проблема. Его задача рендеринг шаблонов и заполнение их данными.
890 1821797
>>821751
А что под шаблонами имеется в виду? cshtml?
891 1821833
>>821797
Да что угодно. Задача бэкендера чтобы вид генерился как надо. Для этого он использует шаблонизацию, проброс данных, таг хелперы. Даже если это стили или жс, или даже текст, что заполняются на лету.
Но не он же этот хтмл, стили и жс придумывает.
892 1821841
Как .NET-овские коллекции отслеживают инвалидацию итераторов?
893 1821842
>>821841
Отбой, нашёл. Кому интересно: https://stackoverflow.com/a/26889061
image.png420 Кб, 1620x1252
894 1821844
>>821406
>>821414
>>821466
Да, что-то я хуйню вчера сморозил. Сам ведь активно пользуюсь фичами из версии 6 и 7. А сегодня использовал новые свичи из версии 8. И мне понравилось.

Хотя насчёт локальных методов не уверен. У кого-нибудь есть хорошие примеры их использования? Просто, если метод сложный, то его всегда лучше разбить на простые методы и тогда смысл в локальных методах отпадает сам по себе.
895 1821846
>>821844

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


Ну так ты не останавливай мысль. Вот тебе наводящий вопрос

вот у тебя был 1 метод. ты его рефакторил и разбил на 3. куда положить 2 выделенных метода если они не нужны никому больше в классе кроме текущего метода?
896 1822092
Правильно ли я понимаю что каждый раз когда я передаю в метод или возращаю из него свою структуру, то я произвожу операцию копирования?
Типа у меня структура весит 1000 байт, передал в метод получилось я перегнал 1000 байт, вернул из метода еще 1000.
Сделал цепочку методов (10 штук) которые чекают что-то в структуре, но не меняют ее, получилось 10х1000 байт перегнал?
897 1822098
>>822092

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


Да. Чтобы этого избежать используют ref модификатор параметра либо ref структуры в новых редакциях языка. Если ты передаешь класс, т. е. ссылочный тип, то передается копия ссылки, если структуру, то передается полная копия данной структуры. Именно поэтому структурами рекомендуется объявлять сущности небольшого размера.
Но минус ref модификаторов в том, что их нельзя использовать в async методах.
898 1822734
>>820958
Да очень просто без задней мысли берешь и всё настраиваешь. Там я неправильно выразился, по сути тебе нужно делать web api, который вьюхи реакта/ангуляра будут просто дёргать для обмена данными. Именно дотнетовские вьюхи абсолютно не нужны.
899 1822750
>>822092
В общем случае да, если какие-нибудь вызовы не заинлайнятся.
900 1822793
Чому так(пик 1) долго, а так(пик2) быстро?
901 1823883
Приветствую! Кто может что то посоветовать по xUnit?
Нужны именно хорошие примеры или информативные источники, спасибо.
902 1823965
>>823883
когда то решил изучать его, но он мне не нужен, но вот что я в итоге отложил в заметках

"где доки?
А нигде. https://github.com/xunit/xunit/issues/1018
приходится читать статьи

Comparing xUnit.net to other frameworks
https://xunit.github.io/docs/comparisons.html

Введение в написание тестов и знакомство с xUnit
https://habr.com/post/357648/

Shared Context between Tests
https://xunit.github.io/docs/shared-context.html#class-fixture

TheoryData
https://andrewlock.net/creating-parameterised-tests-in-xunit-with-inlinedata-classdata-and-memberdata/
https://hamidmosalla.com/2017/02/25/xunit-theory-working-with-inlinedata-memberdata-classdata/"
903 1824002
>>823965
Благодарю!
904 1824016
>>821416
fire-and-forget называется
905 1824059
Почему в шарпе нет синтаксиса типа:
loop(10)
{
... что-то делаем
}

Приходится каждый раз писать статический метод loop(int, Action<int>), но у этого есть минус, если нужно выйти досрочно из цикла, потому если наужно таки выйти досрочно приходится делать метод loop(int, bool, Action<int>), в котором бы проверялось условие досрочного выхода, это неочень удобно.
906 1824073
>>824059
Потому что в С# используют LINQ
907 1824175
Есть тут мастер над архитектурой? Нужна помощь... сорри за большой пост, не бейте

Клиент игры. В разных местах UI игрок может посмотреть на коллекцию предметов, отфильтрованных по типу. В одном месте он может посмотреть на скины-оружие и покрутить их в 3д, в другом - посмотреть на портреты, а в третьем - на емодзи.

GameItem представляет конкретный игровой предмет и хранит: Id, Type[skin,weapon,portrait,emoji], Rarity[comon,rare,legendary], иконку, 3д модель

GameDatabase хранит все игровые предметы разбитые по типу: Skins, Weapons, Portraits, Emojis. Дополнительно он хранит список UniqueItems - это особые предметы, которые доступны в коллекции только, если они попали в инвентарь игроку (например, это может быть новогодний подарочный скин). И список ItemsPacks - это игровые наборы, которые хранят в себе до 5 игровых предметов.
В GameDatabase можно узнать: IsUniqueItem и IsItemPartOfPack по itemName.

BackendService хранит данные игрока и его инвентарь с сервера, стоимость и скидки на игровые наборы, список Discounted и Time-limited наборов. Предметы из Time-limited наборов доступны к покупке только ограниченное время, допустим 12 дней, потом они исчезают из коллекции.
В BackendService можно узнать: IsDiscountedItem и IsTimeLimitedItem по itemName.

Итак, к сути вопроса. Когда игрок открывает коллекцию, то мне нужно показать актуальные игровые предметы для него и скрыть те, которые сейчас недоступны. Для этого мне нужно обратиться как к GameDatabase, так и к BackendService. Кто и на каком уровне должен проводить фильтрацию и сортировку предметов для коллекции? Это явно не GameDatabase, который выступает простым хранилищем. Это либо BackendService, либо какой-то отдельный класс, объект которого будет создаваться для каждой коллекции свой, типа GameItemRepository(database, backend);

Можно добавить новый класс:
public class GameItemData
{
public string Name;
public bool Locked; (находится ли предмет в инвентаре)
public bool Discounted; (находится ли предмет в скидочном наборе)
public bool TimeLimited; (находится ли предмет в ограниченном по времени наборе)
}
Заполнять и возвращать эти данные будет BackendService:
backend.Store.GetSkinsAndSortBy(GameItemsSort.Rarity);

BackendService снаружи не знает о GameItem и о GameDatabase. Но внутри он хранит и использует ссылку на GameDatabase. Когда я буду заполнять коллекцию для UI, то буду работать и с GameItem, и с GameItemData.
907 1824175
Есть тут мастер над архитектурой? Нужна помощь... сорри за большой пост, не бейте

Клиент игры. В разных местах UI игрок может посмотреть на коллекцию предметов, отфильтрованных по типу. В одном месте он может посмотреть на скины-оружие и покрутить их в 3д, в другом - посмотреть на портреты, а в третьем - на емодзи.

GameItem представляет конкретный игровой предмет и хранит: Id, Type[skin,weapon,portrait,emoji], Rarity[comon,rare,legendary], иконку, 3д модель

GameDatabase хранит все игровые предметы разбитые по типу: Skins, Weapons, Portraits, Emojis. Дополнительно он хранит список UniqueItems - это особые предметы, которые доступны в коллекции только, если они попали в инвентарь игроку (например, это может быть новогодний подарочный скин). И список ItemsPacks - это игровые наборы, которые хранят в себе до 5 игровых предметов.
В GameDatabase можно узнать: IsUniqueItem и IsItemPartOfPack по itemName.

BackendService хранит данные игрока и его инвентарь с сервера, стоимость и скидки на игровые наборы, список Discounted и Time-limited наборов. Предметы из Time-limited наборов доступны к покупке только ограниченное время, допустим 12 дней, потом они исчезают из коллекции.
В BackendService можно узнать: IsDiscountedItem и IsTimeLimitedItem по itemName.

Итак, к сути вопроса. Когда игрок открывает коллекцию, то мне нужно показать актуальные игровые предметы для него и скрыть те, которые сейчас недоступны. Для этого мне нужно обратиться как к GameDatabase, так и к BackendService. Кто и на каком уровне должен проводить фильтрацию и сортировку предметов для коллекции? Это явно не GameDatabase, который выступает простым хранилищем. Это либо BackendService, либо какой-то отдельный класс, объект которого будет создаваться для каждой коллекции свой, типа GameItemRepository(database, backend);

Можно добавить новый класс:
public class GameItemData
{
public string Name;
public bool Locked; (находится ли предмет в инвентаре)
public bool Discounted; (находится ли предмет в скидочном наборе)
public bool TimeLimited; (находится ли предмет в ограниченном по времени наборе)
}
Заполнять и возвращать эти данные будет BackendService:
backend.Store.GetSkinsAndSortBy(GameItemsSort.Rarity);

BackendService снаружи не знает о GameItem и о GameDatabase. Но внутри он хранит и использует ссылку на GameDatabase. Когда я буду заполнять коллекцию для UI, то буду работать и с GameItem, и с GameItemData.
908 1824469
>>824059
foreach i in Enumerable.Range(0, 1)
Сука, тебе мало синтаксиса в шарпе? Блядь, я год работаю на нем и еще год в качестве хобби, и ощущение, что я новичок
909 1824470
>>824469
> (0, 10)
910 1824658
>>824469
Мало. Хоче чтобы был способ делать асинхронщину еще проще. Типа просто пишем: async Object и не нужно каждый раз писать Task<Object>. Оч бесит его писать, когда у тебя там что-то типа : async Task<IZalypa<IPizda<IJopa>>> Почему бы просто не писать IZalupa<Pozda<IJopa>>? А еще хотелось бы чтобы был синтаксис для анонимных функций который позволял бы выйти из основной функции сразу. Короче, много чего хотелось бы в плане синтаксиса.
911 1824802
>>824658
с этим тебе в котлин.
но потом и там будешь жаловаться
912 1824894
Пачаны обновите шапку, уже появилась в интернетах книга C# 8.0 in a Nutshell
913 1824908
>>824175
На такое только большим текстом и отвечать, что для двачей не формат.
Если коротко, то учи SOLID.
У тебя всегда должен быть только один source of truth для чего угодно. А сейчас ты хранишь предметы и на клиенте и на сервере (если я правильно понял). Если есть сервер, то он должен быть твоим источником правды и должен хранить текущее состояние твоей игровой сессии. Клиент своё состояние должен получать от сервера.

GameDatabase и BackendService - плохие названия в данном случае, потому что не отображают конкретное назначение. Нужно разбивать на более детальные классы: инвентарь, предложения (discounts и timeLimited), предмет (он должен содержать о себе всю нужную инфу, такую как unique, name, type), набор предметов (через всякие hashmaps можно быстро узнать, является ли предмет частью этого набора), игровой менеджер, персонаж, сервис для запроса к серверу (отправить новые данные, получить текущее состояние) и т.д..

Серверу пофиг, как ты там свой UI организуешь. Ему главное хранить текущее состояние объектов (игрового мира).

Сервер и клиент должны общаться друг с другом посредством контракта. Если изменение какого-то слоя на сервере (помимо самого контракта) влечёт за собой изменение клиента, то значит архитектура поехала и ты делаешь что-то не так. То же самое работает и в обратную сторону.
914 1824941
>>824658
async Task<T> тоже бесит, но что поделаешь
>>824802
В котлине все по дефолту асинхронное?
Разве асинхронность не вносит оверхед? Просто видел, что сравнивали какие-то фреймворки, и там синхронный вариант в некоторых задачах отказывался быстрее
915 1825098
>>824941

>В котлине все по дефолту асинхронное?


нет в котлине добавил функции suspend и она становится как async в шарпе, но при этом внешний вызов не требует писать await. код вообще не меняется.
916 1825106
>>825098

>внешний вызов не требует писать await



Так это разное поведение, с await ты ждёшь выполнения асинхронной функции, а без await выполнение кода продолжается не дожидаясь выполнения асинхронной функции.
917 1825111
>>825106
это корутина. без await она никуда не уйдет и будет ждать завершения корутины
а async/await нужен если у тебя не одна такая корутинка и нужно чтобы дальше пошло и можно было еще корутинок запустить, то есть аналог var task =

а если у тебя в шарпокоде нет var task= , то и await тебе не нужен
918 1825141
>>825111

>а если у тебя в шарпокоде нет var task= , то и await тебе не нужен



Как это не нужен? А если у меня есть асинхронный метод, который используется в разных участках кода, при этом в некоторых участках кода нужно ждать выполнение метода, а в других участках нужно просто запустить его выполнение и продолжить, т. е. у меня нет var но при этом где-то есть await, а где то его нет.
919 1825159
>>825141
вот в шарпе ты пишешь

awat Foo();
await Bar();

Это означает что у тебя в месте await поток освободит и даст поработать другому пока Foo() и Bar() работают. Но Bar() будет выполнено после Foo()

в котлин синхронно так
foo()
bar()
эти вызовы будут сделаны в одном потоке.

но если эти функции помечены как suspend, то этот код будет выглядеть вот так
foo()
bar()
то есть абсолютно так же
но будут вести абсолютно идентично тому, что выше на шарпе - в месте вызова foo() поток даст поработать другим и будет ждать результата foo(), а потом вызовет bar() и снова даст поработать другим пока bar() не отработал

а вот если тебе нужен аналог var task/future то тут уже понадобится async/await чтобы котлин не ждал выполнения этих корутин, а реально пошел дальше и вел себя как TPL в шарпе

причины необходимости "когда нужен var task" те же что и в шарпе, когда ты уходишь от обычного await и опускаешься до TPL. Иначе же писать await не нужно - котлин сам знает что это корутины и нужно подождать на них (дав поработать иначе) пока кодер сам не захочет не ждать (подключит async/await в привычном виде)
920 1825172
>>825159
В шарпе, написав/увидев await перед асинхронной функцией я понимаю, что выполнение кода может продолжаться в отличном от того, который выполнял код до await, потоке. Это нужно брать во внимание когда идёт синхронизация обращения к данным, как пример есть класс ReaderWriterLockSlim у него есть методы EnterReadLock и ExitReadLock которые должны последовательно вызываться из одного потока. И как мне в котлине знать, что вот этот как await а вот это нет?
921 1825182
>>825172
Ну код же не в блокноте пишешь. IDE показывает места где вызов функции есть вызов корутины.
922 1825183
Существует ли хоть какая-нибудь возможность иметь лицензию в программе и не обфусцировать ее, и так чтобы ее не взломали через денек?
923 1825187
>>825183
1 неуловимый джо - твой софт недостоен ковыряния
2 очень злой джо - твоя ца энтерпрайз где за факт взлома их так нагнут, что им проще купить, чем рисковать
3 Ключевой функционал унести на сервер.
4 CoreRT может сделать тебе нативный бинарник который ковырять сложнее (но это уже свой гемор)
924 1825202
>>825182
Ну т. е. ручками каждый раз наводить на вызовы и смотреть тип функции? Потом еще раз наводить, на всякий случай, вдруг вот на эту ты не наводил. Ясно.
Image 7.png9 Кб, 710x139
925 1825210
>>825202
да нет же
Image 8.png6 Кб, 468x150
926 1825214
>>825202
вот лучше пример. прекрасно видно что в данном месте происходит разрыв контекста (то бишь вызов корутины)
927 1825217
>>825214
Так это не удобно. Приходится на поля смотреть, когда ты думаешь о коде, то смотришь на код, а не на поля. И get("") воспринимается как обычный блокирующий вызов.
928 1825222
>>825217
нуу это уже критика из разряда "а где точка с запятой, как я отличу одну инструкцию от другой"
нет никаких проблем если пишешь на языке. даже не замечаешь этот аспект
в отличие от ConfigureAwait который не только замечаешь, а и бесит

к тому же такое доступно только в функциях suspend (как и в шарпе только в async) а не вообще везде. Если слово async/suspend замечаешь и не понимаешь что это значит что внутри будут вызовы других корутин...ну значит котлин не для тебя

да и в шарпе только анализатор подскажет что функция возвращет Task, а ты написал ее просто так ибо не знал, что она с Task
929 1825249
>>825187
Это мой домашний проект за который мне некоторые кидают донаты и я хочу дать им чуть больше функционала, потому что именно они его запросили и только из-за них я решил это сделать.
1) к сожалению ковыряют, я пробовал добавить тупо по ключам с HWID, раздал 10 ключей и отслеживал запуски, было более 40 штук, т.е 30 человек откуда крякнутую версию взяли.
3) не хочу содержать сервер и бороться с проблемами блокировок и прочей фигней, уже пытался в другом проекте так делать и это просто боль, по всему миру все друг друга блокируют и твой сервер может быть тупо недоступен для этих людей
4) у меня есть возможность в проге что-то типа плагинов делать, поэтому наверное такое мне не подойдет, сломает все к чертям.

Обидно что .net приложения очень легко ломать, от чего писать что-то сложное что можно продавать как премиум тупо отпадает желание.
930 1825255
Сап, почему не получается установить пакеты с NuGet Package Manager? Выбираю нужный пакет, последнюю стабильную версию, щелкаю на Install, затем OK и дальше выходят ошибки

>The type or namespace PackageName does not exist in the namespace Microsoft (are you missing an assembly reference?)

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

ребут студии помогает. иногда даже удаление .vs
932 1825304
>>825294
Пытаюсь слить несколько проектов в один. Все проекты до этого собирались, никаких проблем с установкой пакетов не было.
image.png86 Кб, 2233x390
933 1825316
Почему метод работает в .net core (3.1), но не работает в .Net Framework(4.8)? Как фиксить?
934 1825319
>>825316
А что за ошибка?
935 1825321
>>825319
Не может преобразовать стринг в чар. Да банально перегрузки этой нет. В коре у этого метода 10 перегурзок, а в фреймворке всего 6. Разные версии языка что ли?
936 1825322
>>825321
вообще то да. разные версии языка
но в данном случае разные фреймворки
938 1825326
>>825304
Версии проектов смотри. Некоторые пакеты с некоторыми проектами и некоторые проекты не будут совместимы.
939 1825328
>>825322
>>825324
И че делать?)))
940 1825330
>>825328
Воспользуйся этой сигнатурой: Split(String[], StringSplitOptions)

.Split(new string [] { "hui" }, StringSplitOptions.None);
941 1825360
>>825330
Спасибо!
942 1825540
Аноны, тут такая трабла, есть либа с приватным методом и ивентом. Они мне пиздец как нужны. По отдельности я их через рефлексию выцепил, вопрос, как мне подписаться на этот ивент с нужным типом делегата? Я хуй пойму, гугол не помогает
943 1825561
>>825540
Типа хочешь подписать приватный event на приватный же метод?
Если выцепил этот метод MethodInfo method
И выцепил событие EventInfo eventInfo
То
1) Создаешь делегат
handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, target, method) (target - инстанс на котором метод вызывается, ну или бери перегрузку без него, если метод статический)
2) Подписываешь его к событию
eventInfo.AddEventHandler(eventSource,handler) (где eventSource - инстанс который event поднимает)
944 1825564
>>825540
Ежели AddEventHandler не работает из-за проверки видимости ("бла бла бла нет публичного метода add")
То нужно рефлексией вытащить сгенерированный компилятором метод подписки, и вызывать уже его (обычно на событие ShitHappened метод будет зваться add_ShitHappened)
945 1825591
>>797696
Почему бы не использовать unity?
946 1825690
Аноны, сейчас пишу фронт на JS'е, но хочу пересесть на иглу бекэнда и тут выбор на какой стул сесть:
1) питон и джанго
2) шарп и дотнет
к обоим язык отношусь хорошо. Шарп привлекает чуть больше тем, что у него статическая типизация и по субъктивному моему мнение, он лучше для бекэнда заходит
Но на питоне вариант вкатиться прям на текущей работе, потому что стек в беке питон + го
947 1825788
>>825690
ты же понимаешь что этот вопрос не имеет смысла?
в теме про шарп будут выбирать шарп
а в теме про питон будут выбирать питон
948 1825853
>>825788
ну тут вопрос не про языки как таковые, а про работу на них в сфере бекенда в СНГ
949 1825942
>>825853
Зависит от локации. У меня дотнетный город (запад Украины) - много вакансий есть и на легаси, и на новье, но на пайтоне что-то тоже есть. По моим впечатлениям от комментов на дваче, в РФ с дотнетом потуже. Ориентируйся по сайтам поиска работы.
950 1825946
>>825561
Анон, спасибо тебе, недельную таску выполнил за пару суток
951 1825955
>>825942
спасибо
952 1826090
Кто-нибудь использует Lifetimes от JetBrains?
953 1826126
Побют ли меня клавой по ебалу за то что в своем микросервисе я нафигачил статики? Боюсь из-за этого отдавать свою часть работы, хотя уже все сделал.
Что учить? 954 1826143
Всем привет.Я полная нулина, сейчас вкатываюсь в C#, что нужно учить , что более востребовано сейчас, чтобы взяли на работу.При гуглении открывается статья на хабре 2013-го года.хелпуйте
955 1826148
>>826143
Смотри что в вакансиях твоего региона требуется, то и учи. Может быть у тебя там только для легаси шарп нужен, тогда изучая .net core ты по большей части время потратишь и будешь типа >>825316 вопросы задавать. А может быть у тебя там все на докерах-хуекерах сидят - нужно будет учить как деплоить докером. А может быть у тебя там извраты и они во встройки впихивают .net, тогда вообще весело будет. В общем, смотри вакансии, требования к ним и гугли незнакомые слова.
956 1826160
>>826126
В самом статике ничего плохого нет. Если это stateless класс, который легко покрыть тестами - то вообще никаких проблем. Если есть state, то надо убедиться что оно thread-safe. Если это классы внутри Startup scope, то вообще пофиг. Эти вещи нужны для инициализации всего приложения и покрываются интеграционными тестами.
957 1826169
>>826160
Ну, я использую статику чтобы разгрузить основной класс от всяких вспомогательных методов. Типа вот у меня есть метод JoinXwithY(X, Y), мне не хочется чтобы реализация этой штуки была в методе т.к. метод join в linq довольно здоровый выходит, я вынес это в метод, но если подумать, зачем этот код внутри этого класса - потому я выношу в отдельный статический класс. Ну или мне не нравится писать каждый раз string.IsNullOrWhiteSpace(str), я сделал метод расширения str.IsEmpty(), но ведь вдруг кто-то проебет класс с этими расширениями и получится что половина кода программы - красная. Ну или в сторонней библиотеке есть enum, а у меня с этими перечислениями связана логика, как-то оформить нормально в класс не совсем получается потому что получится что я как-то должен управлять новым классом чтобы знать что там за элемент перечисления, потому я делаю еще один статический класс в котором логика которая связана с работой этого enum(достать имя связанное с ним, какие-то константы и прочяя фигня), тут я бы, будь это не сторонняя штука, - таки замутил класс обычный, но вот что поделать - сторонняя библиотека.
958 1826174
>>826169
Мне лень вникать, но делать методы расширения для всяких удобств - норма.
959 1826317
>>826090
Использовал первоначальную реализацию (из решарперовского кода, когда еще Lifetime был классом), сомневаюсь что на двачах найдешь еще юзеров этого дела.
960 1826329
>>826169
Extension Methods - обычное дело. Под них целые nuget пакеты пилят.

>получится что половина кода программы - красная


Студия быстро найдёт, какой using добавить. А вообще, если расширяешь какой-то класс, то один из стандартов - это пилить свой класс в том же namespace, в котором находится основной класс. И не важно, что у тебя в приложении используются свои нэймспэйсы.
namespace System {
public static bool IsEmpty(this string str) { }
}

Главное внутри таких классов не делать чего-то, что невозможно будет покрыть тестами. Например new ExternalResource(). Это может быть и БД коннект, и хттп клиент, и работа с файловой системой, и подключение к хранилищу сертификатов.
961 1826364
Как получить IP адрес источника реквеста в HttpListener?
962 1826365
>>826364
Вопрос снят
963 1826757
>>825690
в треде .NET-а хочу с уверенностью сказать - садись на пыху и не еби мозги. Да, нет перегрузки, но явно лучше компилированного говна будет
964 1826917
>>826757
толсто
965 1826998
Хм.
Если я сделаю так:

int a = x%2;
a--;
if(a>0)
{
...
}

Как это оптимизирует среда? Будет ли просто проверка первого бита или как-то иначе? Просто не хочется качать жетбрейновские штуковины, потому что я не доверяю этим пидорам, да и прочие штуки качать, но интересно же. Может кто упарывался и знает.
966 1827007
Как ловить движение мышки из консольного приложения?
Только не говорите опять что ебучие винапи нужно. Я не переживу этого. О какой кроссплатформенности можно говорить, если постоянно для любой хуйни - винапи. Если так, то пиздец же.
967 1827030
Могу ли я как-то лениво читать из респонса HttpCleiny, Ну, скажем, мне приходит респонс в виде джейсона на 50МБ, и мне хотелось бы как-то лениво это обработать, по одному объектику, чтобы не создавать кучу ненужного хлама, пока остальная программа бы работала в штатном режиме. Можно ли как-то это сделать? Просто столкнулся с тем, что апи одно отдает json который при десерелизации в 14к объектов превращается и сразу после этого - бац - 800МБ оперативки сожрало, хотя мне-то надо только найти там один-два нужных мне объекта и отдать их куда нужно, а выходит что обычными путями такая вот дичь происходи. Скажем, читай я из файла, я бы мог по строчке брать, смотреть то ли это что мне надо - отдвать дальше и чистить память и затем читать следующую строчку и так пока до конца файла не дойду. Но с запросами по HTTP я что-то подобного не вижу.
968 1827063
>>827007
У любой платформы есть стандартные библиотеки вида user32.dll в винде, при помощи которых можно отследить движение мыши.
969 1827069
>>827030
С запросами тебе нужно работать с сетевым потоком, который ты будешь передавать в жсон-парсер. Для того чтобы взять только нужное, отбрасывая лишнее, нужно будет написать жсон-конвертер.
970 1827073
>>797054 (OP)
Давайте обсудим RSA...

Насколько я знаю, в RSA, (e, n) - публичный ключ, (d, n) - приватный ключ.
Соответственно...
Шифрование:

>c = m^e mod n, где с - cipher, m - message, e - public exponent, n - modulus


Дешифрование:

>m2 = c^d mod n, где с - cipher, m2 - decrypted message, d - secret exponent, n - modulus


>(m == m2) -> true


Подпись:

>s = m^d mod n, s - подпись (читай шифрование приватным ключём), m - подписываемое сообщение, d, n - компоненты приватного ключа.


>(m, s) - подписанное сообщение (сообщение и подпись)


Проверка подписи:

>m2 = s^e mod n; дешифрование, но публичным ключём.


>(m2 == m) -> true, если подпись s валидна.



Все эти формулы и вычисления, по модулю n, можно производить при помощи того же BigInteger: https://github.com/bazzilic/BigInteger/blob/master/BigInteger/BigInteger.cs
но при условии, что "m" - число со значением в диапазоне от 0 до (n-1).
На выходе, "с" и "s", со значением, в этом же диапазоне.

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

ну, и собственно вопрос... Как всю эту хуятину впроглить, чтоб оно фурычило годно, с байтарраями произвольной длины?
971 1827106
>>827030
Файл это FileStream
Сеть это NetworkStream
И тот и тот stream
Нет никакой разницы в последовательном чтении разве что в NetworkStream не сделаешь Seek назад
972 1827143
>>826317
Концепция то мощная и всяко лучше Dispose, но использовать ее - совсем другое дело. Я вот пытаюсь интегрировать в MVVM и, если по хорошему, то при создании каждой новой вьюмодели нужно создавать LifetimeDefinition который еще и хранить где то и точно так же не забывать вызывать как и Dispose и очищать.
И это в MVVM где WeakRef норма.
973 1827153
>>827143
Ну внутре решарпера у них свой компонентный фреймворк автоматически их порождает и диспозит вовремя, большой бонус в том что не надо в каждом элементе иерархии имплементировать dispose да не забывать диспозить дочерние компоненты, а просто передавать по цепочке лайфтайм.
Абсурд ситуации в том, что у MS внутри у себя похожим образом использует в качестве лайфтаймов CancellationToken (LifetimeDefinition ~ CancellationTokenSource), а nugetной версии JB прикрутили к лайфтаймам функционал этих самых токенов.
974 1827159
>>827153
ну жетбраинс проще. они сделали свой компонентный фреймворк. А я натягиваю сову на имеющийся глобус.

имхо MS просто нарушает семантику. Меня в асп.нет коре смутило что их лайтайм с событиями запуска это не события а CancellationTokenSource
Семантика нарушена, хрен поймешь, нужно идти гуглить (а еще попробуй нагугли почем так, ведь только мнения)
975 1827328
>>827153
Чем больше пишу, тем CancellationTokenSource у меня не эквивалент lifetime-ам. Уже много кода переписал и количество lifetime.Bracket/Execute/TryExecute просто зашкаливает. У CancellationTokenSource ничего похожего нет.
976 1827415
Книги не привык читать, посоветуйте плез видео доклады/лекции по конкурентости, паралелизму, тредам, контекстам, таскам и всей этой хуйне. Нашел единственную не формошлепскую джун вакансию и там требуют теоретические знания во всем этом.
977 1827416
>>827415
вот это посмотри.
https://www.youtube.com/watch?v=Sq_h5bVWJ0k
он и про модели многопоточности тоже глаголит
Я посмотрел, проникся и щас у себя внедряю.
978 1827488
>>827415
Ты до этого всего сам по видео никогда не дойдёшь, хоть засмотрись. Это всё надо самому пробовать и параллельно смотреть, почему оно именно так работает. Эти видео сеньорам хорошо заходят или просто интересующимся, когда хочется на диване поваляться, но запоминать толком ничего не планируешь.
979 1827504
>>827488
не соглашусь. Вот я использую другой подход, где первым шагом является разобраться в основе "что к чему куда", общее понимание "как все устроено". для этого читаю и смотрю все ПО ДИАГОНАЛИ что можно пока не придет понимание. Именно понимание. Если ничего не запомнил и хер с ним. Невозможно запомнить без практики.
Главное понять суть. Для этого меняю источники пока не сложится общая картина.

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

Если же не понять, то в итоге можно стать гугл-копипастер проггером, который видит закономерности че как используется, но не понимает, потому и копирует найденное, а не реализует "по принципу"

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

я соглашусь, что "ну для тебя это не первый язык". Да. Но я этот подход использую для любой области, где у меня нет базиса, и он себя оправдывает
980 1827518
>>827504
Я уже честно сказать забыл, как базы изучал (15 лет прошло), поэтому всё айтишное теперь можно просто брать и смотреть и понимать, что там происходит. Конкретно это видео >>827416 для новичка без нормальной базы будет просто развлекалово без какой-то практической ценности.

Немного подумал и согласился со сказанным. Я тоже в любой новой (не айти) области сначала кучу всего по диагонали пересматриваю, а потом уже пробую.
981 1827528
>>827518
ну для новичка нужно смотреть с 44:15
хотя там весь доклад крут
.gif1,5 Мб, 690x388
982 1827906
Зырьте какой забавный результат вышел.
Вот только я не понимаю почему.
983 1827990
Ребят подскажите, в MVC в модели описываются хоть иногда какие-то методы? Я не могу придумать как это использовалось бы.
984 1827992
>>827990
модель это вся логика приложения. там вообще все, что не вид и не связующее звено в виде контроллера

Или ты про классы сущности?
985 1827993
>>827990
Описываются.
Я просто думаю что ты немного путаешь модель с DTO. DTO может выступать моделью, но модель не ограничивается DTO'шкой. Валидаторы, запросы к базе и вообще бизнеслогика это все модель.
986 1827999
>>827992
Наверное про классы сущности, да. Не так выразился.
987 1828000
>>827993
Я почитаю про DTO, если это то, что имею ввиду - я отпишусь еще
988 1828016
>>827999
а это типичная проблема
анемичные модели (не путать с dto) и rich model
"не путать с dto" потому что назначение dto следует из названия. А анемичная модель не цель, а следствие.
В rich model в саму модель пихают логику. Противоположный подход - когда логику распихивают по сервисам, а сама сущность в итоге вырождается в dto по своему виду. Еще и базы данных способствуют тому, чтобы были get;set; для мапинга.

но анемичная модель, хоть и выглядит, как dto, но не dto, а значит может иметь методы.
Я противник rich model, даже валидация и та зависти от контекста.
но тупые get;set; тоже не дело. Я предпочитаю чтобы модель имела контракт (что особенно важно в мультипотоке, да и вообще защищает от ошибок), что делает ее неподверженной "ой забыл учесть", но добавляет проблем с базой данных.

То есть я не меняю логически связанные поле1= и поле2= а придумываю какой то метод которые позволяют не делать публичных сеттеров
989 1828023
>>828016
я кажется понял, что ты имеешь ввиду, а какие проблемы появляются с бд в таком случае?
990 1828025
>>828023
ну база данных любит публичные сеттеры.
А если у меня их нет, то мне приходится изворачиваться с сохранением и чтением.

Тут варианты
- либо иметь гет сет и валидаторы в нужных местах, что данная заполненность модели валидна в данном контексте (и что никто кривыми руками не сломает ничего после валидатора)
- либо любое изменение модели не нарушит ее стейт, то есть минимум публичных сеттеров и апдейты через методы.
991 1828026
>>828025
хмм.. спасибо
992 1828027
>>828016
И в чем проблема того чтобы то что выглядит, ведет себя и по сути является DTO называть DTO?

Да и в чем проблема порезать всю логику на сервисы. Скажем вот так вот:
IRepository<T>; IValidator<T>;
В репозиторий мы в конструкторе отправляем валидатор:
Repository<T>(IValidator<T> validator)

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

void Update(T entity)
{
if(!_validator.IsValid(entity)) throw new Exception("Что-то пошло не так :)");
Update(entity);
Commit();
}

При этом этот же валидатор может быть использован много где. Удобно же. А если нужно будет добавить новый валидатор в одном месте - никаких проблем, ты добавляешь новый, и просто инжектишь его в то место где надо, а в остальных все остается по старому. То же самое и с репозиториями, допустим для тестовых нужд тебе достаточно чтобы у тебя все это дело было в виде обычного списка, нет нужды реальную БД запускать и все это там как-то реализовывать - никаких проблем если вот так вот делать не возникает. В общем, я не знаю.
993 1828029
>>828027

>по сути является DTO называть DTO?


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

про валидаторы я вообще хз о чем ты.

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

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

Я сторонник анемичной модели. с ней тупо проще кодить. Так что у меня модели с гетсет, сервисы с логикой, валидаторы. И такое в подавляющем большинстве софта.
994 1828063
Прочитал про UnitOfWork и не до конца понял.
Ну, т.е. что я понял. Штука нужна чтобы контекст у всех репозиториев был общий Зачем оно надо - впринципе ясно. А вот что не ясно, так это как этим правильно пользоваться.
Допустим я хочу чтобы в моем контроллере я работал с репозиторием товаров. Правильно ли я понимаю что нужно в конструктор передавать этот самый UnitOfWork, из него тащить репозиторий, как-то работать там с ним.
А что если репозиториев много?
Да и вообще, если в контексте EF рассматривать, получается же что DbContext это же и есть этот самый UnitOfWork. Или это не так?
В общем, можете объяснить, если не сложно?
995 1828243
Помогите долбоёбу, пожалуйста, объясните на примере из говна и палок что такое регулярные выражения в этом вашем C#? Мне для лабы нужно написать прогу, которая высчитывала бы метрики Холстеда для кода на этом языке, а я черт знает сколько регулярок собственно в конкретном куске кода есть:

int a = 100;
while (a > 5)
{
System.Console.WriteLine(a);
a--;


Помогите, пожалуйста!
996 1828245
>>828243
Точку с запятой в конце не скопировал, блять, но я думаю, что вы это поняли. Прошу простить.
997 1828249
>>828243
Ты че-то напутал, чел. Тебе поди надо пересчитать сколько в данном куске кода используется переменных, операторов, пространств имен и прочих языковых выражений. Для автоматизации определения и подсчета можно использовать регулярные выражения. Вкратце про них можешь почитать по ссылке. Примеры кода можешь нагуглить сам: метрика Холстеда для c#.

https://metanit.com/sharp/tutorial/7.4.php
998 1828274
>>806517
Взломать можно всё, вопрос лишь в цене. Ваши гавноподделки и так ломать никто не будет, проще свою прогу написать с таким же функционалом и продавать, вот и всё. Вы вряд ли там пишите что-то такое, что никто бы не написал.
999 1828276
>>805060

> дарт, реакт нейтив, котлин, го



И на чем из этого можно 3д игру захуярить?
1000 1828277
>>805726
На Джанго и Руби он Рэйлс
1001 1828308
>>797054 (OP)
Какого хуя ещё нет возможности пилить код XAML в браузере?
1002 1828754
>>814323
Учись говоришь, на чем учиться, чем конкретным заниматься, как опыта набраться, если на работе не так уж и много чего юзаешь?
1003 1828856
>>828754
пиши велосипеды того что уже есть. в итоге получится говно, но навык очень сильно прокачаешь
1004 1828887
>>828029

>в дто логики быть не должно


>в анемичной модели она допустима


>Anemic domain model is the use of a software domain model where the domain objects contain little or no business logic - https://en.wikipedia.org/wiki/Anemic_domain_model



В DTO тоже никто не запрещает добавить конструктор (который всякие сериализаторы смогут спокойно вызвать) и/или добавить пару методов, например Equals для своей версии сравнения двух объектов ДТО или HasErrors, HasRecords, Count для какого-нибудь generic response.
1005 1828892
>>828754
Тоже самое было. Своё было пилить лень. Так и тупил несколько лет. Потом задолбало и начал ковырять свои проекты и читать кучу статей/смотреть видео. Потом методом перебора нашёл нормальную работу. Теперь норм.
1006 1828897
>>828063
https://www.youtube.com/watch?v=rtXpYpZdOzM
На, потрать один раз пол часа на просмотр и не делай больше никогда каши в своих проектах, от которой твои коллеги будут мечтать тебя убить.

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


Это вообще чума.
Контроллер должен быть туп как пробка. Он создаёт контракт для работы с твоим приложением. Это точка входа, которая описывает маршрут, по которому можно что-то запустить в твоём приложении, request/response models, возможные варианты ответов (200, 201, 204, 400, 401, 403, 404, 500). Стандартный такой набор, который почти любой контроллер должен иметь. Всё!

Остальное должно быть во всяких сервисах, хэндлерах, валидаторах, которые уже будут решать, откуда данные тянуть - HttpClient, DbContext, Redis, FileSystem, etc.
1007 1828903
>>828887
Все дело в семантике. Семантика это суть класса. Суть dto - передача данных. Анемичные модели не для передачи данных. Они используются как модели/сущности. Их можно использовать как dto, кидая их в сериализатор, но сериализовываться будет от хорошо до "дохера мороки".

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

И если вам захочется добавить конструктор чтобы "ну там вот оно было так вот я управляю там чем то", то это уже будет не DTO (семантика которого всего этого не иметь), а переход к POCO, который используется как DTO
HasErrors, HasRecords, Count также внесут семантику POCO
1008 1829330
Ананасы, как найти стажировку на шарпе? Всё перерыл, нихуя нет. Живу в ДС2, везде требуются питонщики, жависты, онанисты, пхпмакаки, а православный шарп в хуй не впёрся всем.
1009 1829401
>>829330
Если ты студент и тебя работодатель не нашел сам, то никак.
изображение.png17 Кб, 817x163
1010 1829499
В моем полумиллионнике никому не нужны шарписты без опыта. Как быть? Переезжать в Мааскву и пытать счастье там или может учить какой-нибудь другой язык? Мне кажется, зная c#, какую-нибудь джаву за полгода можно освоить минимально.
1011 1829509
>>829499
Зависит от того, что тебе удобнее. Если не против переехать - рабочий вариант. Можешь попробовать пойти на какие курсы при фирме с перспективой трудоустройства. Можешь за те же полгода сделать приличный пет-проект или пофрилансить для опыта. Можешь изучить другой язык, если хочешь. Я бы в таком порядке рассматривал возможности.
1012 1829513
>>829499
Хмммммм.
Хммммммммммммм.

А что значит за один проход?
1013 1829517
Есть ли риск просадки по производительности, если я буду оборачивать единичные float'ы и doubl'ы в struct'ы, чтобы гарантированно не складывать метры с килограммами, например?
.png4 Кб, 381x47
1014 1829526
>>829517
АТО! Риск просадки есть всегда. Вот звезды не так сойдутся и GC решит в самый ответственный момент почистить кучу и вот тебе просадка.
А конкретно со структурой. Если будешь делать ее нормально, через указатели и не будешь постоянно упоковкой-распаковкой заниматься, то ничего такого быть не должно.
1015 1829530
>>829513
Типа с конца листа надо начинать и к 0 индексу идти.
1016 1829534
Как нормально сконвертить IQueryable в IEnumerable? Если использую ToList() или AsEnumerable(), то данные меняются, как сделать, чтоб остались те же?
.png4 Кб, 683x119
1017 1829537
>>829534
Каким, образом-то они меняются? AsEnumereble просто возвращает сам себя. IQueryable это просто интерфейс который расширяет IEnumerable гарантируя по контракту что тот кто будет его имплементирует - реализует работу с провайдером и прочую залупу.
1018 1829702
>>829513

>за один проход


>RemoveAll



Проиграл с дебила.
1019 1829703
>>829517
Для этого структуры и сделаны, поэтому просадка будет минимальной.
1020 1829707
Челы, если мне нужен нормальный хеш со строки типа

>"<span class="post__detailpart"><a href="/pr/res/1797054.html#1812758" id="1812758" class="post__reflink">№</a><a href="/pr/res/1797054.html#1812758" class="postbtn-reply-href post__reflink" data-num="1812758">1812758</a><span class="post__number">468</span></span>"



Имею в виду, это же просто стринг, а не кастомный класс. Значит и переопределять .GetHashCode() не нужно, верно?
Сап программач 1021 1829710
В общем пишу свой консольный круд на .Net Core 3.1 и заметил что программа ведет себя неадекватно. Если выполнять прогу в обычном режиме, всегда возвращается false при сравнении строк, а когда выполняю в дебаге пошагово то все работает норм. Никто не сталкивался с таким?
Если нужно то могу шебмку с демонстрацией запилить.
1022 1829712
>>829710
Забыл добавить, чтобы вы мне не говорили что я строки не так сравниваю, такая фигня с обычной логикой тоже наблюдается. Всегда когда взаимодействую с определенным свойством. Например проверяю через || превышает ли длинна строчных свойств обьекта какую-либо константу.
1023 1829715
>>829710

>.Net Core 3.1


На фреймворке тестил?
image189 Кб, 927x664
1024 1829716
>>829707
Имплементации стандартного GetHashCode могут меняться и хеш может не совпадать с хешем такой же строки созданной в старой версии проги либо в другом модуле. Если тебе пофиг на это то юзай дефолт
1025 1829719
>>829715
Нет, но щас протестирую
1026 1829723
>>829716
Спасибо за инфу.

>they should never be used as key fields in a collection



Это именно то, что я и планирую с ними делать, лул.
1027 1829730
>>829715
>>829719
Та фреймврке так же
1028 1829731
>>829710
Показывай код, причин может быть несколько. Разница в дебаге и релизе в том, что в дебаге код компилируется без оптимизаций, т. е. твой говнокод в релизе мог быть обрезан в каком-то месте, поэтому результат отличается от результата в дебаге. Еще одной причиной может быть:

>в дебаге пошагово


Если ты используешь асинхронные функции, таски или потоки.
1029 1829733
>>829731
Никакой ассинхронщины.
Пикрил1 - собственно код обычного класса юзера. IsValid проверяет являются ли поля слишком короткими при этом не являясь заглушкой Nothing. Запускаю прогу, получаю пикрил2. Пошагово проматываю в отладчике до следующего юзера с заглушкой и получаю пикрил3. Входные данные одинаковые, результат другой
1030 1829734
>>829733
хм, скрин не удалило почему-то. Начинайте нумерацию с пикрил0 тогда
image50 Кб, 1342x356
1031 1829735
>>829733
Вот еще для наглядности перемотал пошагово на того же юзера
1032 1829737
>>829733
Ну так дебил, возврат метода один и тот же будет, просто в оптимизированном коде отрицание добавилось к той каше которую ты написал в сравнении, потому что анализатор убрал условие после которого ничего не происходит.
image60 Кб, 677x596
1033 1829740
>>829737
почему тогда когда я хочу собрать список невалидных юзеров я получаю валидных с заглушками?
1034 1829742
>>829740
Ты правда настолько тупой? У тебя middle name у всех @ что по твоему условию невалидное поле, но почему то в твоей тупой голове оно стало валидным, может тогда в коде отразишь? Или будешь дальше ждать когда коробочка магическая твои мысли прочтет?
image4 Кб, 664x32
1035 1829745
>>829742
Блять, каким хуем заглушка, на которую стоит проверка это невалидное, мать его, поле? Там есть всякие точечки и другие знаки вместо имен и я и хочу получить таких юзеров. Если пройтись до первого такого юзера отладчиком, он не попадает как невалидный, а если пустить выполнение дальше то все остальные попадают
1036 1829752
>>829735
Чему у тебя этот Nothing то равен?
1037 1829782
winget или chocolatey? Какой там менеджер пакетов для винды сейчас актуален?
image97 Кб, 1179x491
1038 1829944
1039 1830069
>>829733
>>829735
>>829944
Удачи, анон. Я сам сталкивался (правда во фреймворке, а не в коре) с тем, что условие, которое 100% должно выполняться, в дебаге работает, а в релизе просто проскакивается, как-будто этого кода вообще нет. Победить так и не смог.

В итоге пока этот код нужен был, приходилось юзать его в дебаге, что замедляло работу очень сильно. Хорошо хоть это был личный проект, а что бы я делал, будь это что-то серьёзнее - хз.
1040 1830167
Привет, аноны. Я начинающий шарпист, только освоил азы и поставил перед собой цель надрочиться до элементарной фрилансерской работы. Офис мне не нужен, мне нужен конкретно фриланс. Так вот, технологий хуева туча и встаёт вопрос. Что из всего этого многообразия учить, чтобы как можно скорее взять первый заказ и получить 10 рублей 5 копеек на киви и для этого не пришлось перерыть все фриланс сайты в интернете? Пока думаю над ASP/Xamarin, однако также интересен юнити. Слышал где-то, что на ASP спрос больше всего, это правда? Двач помоги новичку
1041 1830379
>>829782
ещё scoop, все актуальны, майки пока над своим официальным работают
image.png1,4 Мб, 2082x1021
1042 1830385
Господа шарписты и дотнет бояре. А вы уже используете Windows Terminal?
https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701
1043 1830394
>>830385
зачем он когда есть conemu
1044 1830473
Есть девайс. Читаю его регистры. Тереблю реле. Так вот. Чет код стал какой-то слишком объемный. Как можно порезать его нормально, чтобы было более абстрактно, а не: if((mask<<32)|incomingMessage > 0) DoCoolStuff(message.slice(0,64))
1045 1830476
>>830167
На шарпе из фриланса, доступного новичку - лабы в ВУЗе. Дрочи то что нужно для лаб в ВУЗах.
1046 1830523
>>830473

>if((mask<<32)|incomingMessage > 0)



Условия в if заменяй на переменные, названия которых будут объяснять то что происходит в коде. К примеру:
if (target < 32 && target > 1)
Делаешь:
var targetInAcceptableRange = target < 32 && target > 1;
if (targetInAcceptableRange)

Твой message.slice(0,64) можно поместить в переменную, которая опишет, что у тебя в этом слайсе с 0 по 64, чтобы можно было хотя бы представить что ты с ним в методе делаешь, если еще и метод назвать хорошо, то и код читать не придётся.
1047 1830569
>>830394
Пользовался conemu и cmder много лет. То же самое говорил, когда мне про новый WT задвигали. Теперь не знаю как без него жить. Очень удобно. Очень близко к zsh на маке + свои фишки.
1048 1830600
А такое

return candidate is { IsVirtual: true, ReturnsVoid: true, Name: "Dispose", Parameters: { Length: 1 } parameters }

в какой версии шарпа ввели?
1049 1830682
>>830600
Pattern matching уже давно есть.
1050 1830690
>>830682
для switch да. но для is
1051 1830695
Тупой вопрос.
Вот у меня куча запросов к стороннему АПИ. Допустим мне нужно по разным каталогам таваров по разным ценовым диапазона сделать запросы. Так вот, если делать это последовательно то оч медленно выходит. Я решил использовать PLINQ. И чет не совсем понимаю как мне потом аггрегировать результат. Не будут ли какие-то проблемы если я результат в List засовываю с помощью AddRange? Я просто пока что посмотрел на дебаге и все норм работает, но я в этом вашем паралельном программировании и прочих многопотоках не силен особо, но ждать пока 90 запросов каждый из которых возаращает по 1к+ответов - довольно долго, приписав AsParallel() в дебагере скорость в разы скаканула, но я боюсь, что в релизне могут быть подводные камни. Я знаю что можно залочить, но так же знаю что оно не всегда нужно. Вот мне и интересно, надо ли в этом случае и вообще как правильно-то этим AsParallel пользоваться.
1052 1830696
>>797054 (OP)
Посоветуйте книгу другую для новичка, на русском.
1053 1830702
>>830696
Для новичка я бы Шилдта или Албахари советовал, как справочник. Причем не обязательно последние версии.
А если практические знания, то как не хейтят тут, но метанит и professorweb - норм сайты чтобы с основами разобраться. Конечно там многие примеры - сферически кони в вакууме, но так-то у большинства обучающих материалов так, там хотя бы круды научишься делать.
1054 1830704
>>830702
Спасибо, почитаю.
1055 1830731
>>830695
var httpClient = new HttpClient() { BaseAddress = "blah" }; //этот клиент должен создаваться один раз как singleton

var tasks = listOfUrls.Select(url => httpClient.GetAsync(url));
var result = await Task.WhenAll(tasks);

Как-то так. У тебя хттп запросы и так асинхронно запускаются. Вместо того, чтобы запускать их по одному, запускай разом все и потом получай список ответов.
1056 1830773
>>830695
Неправильно, AsParallel используется для compute-bound операций, а у тебя i/o-bound, т. е. тебе будет достаточно асинхронности. Т. е. делай как этот >>830731 анон посоветовал.
1057 1830776
>>830696
Для новичка - Троелсен. У него и информация свежая, и изложение для новичка. Альбахири не читай, его нужно открывать когда ты уже пару книг для новичков прочитал и имеешь хоть какой-то практический опыт. Метанит и профессорвеб даже не открывай, это пустая трата времени, которая только в заблуждение тебя ввести может.
1058 1830843
>>830731

> await Task.WhenAll


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

Когда мне нужно выполнить асинхронно какой-то код, я просто создаю объекты Thread и выполняю их, руками контролируя выполнение и завершение потоков. Есть же семафоры, есть мьютексы. Никаких проблем никогда не возникало, грабли многопоточности как правило дают по голове один-два раза, а потом ты уже понимаешь, откуда идут проблемы и больше сам себе их не создаёшь. Так ли важно пользоваться всем этим синтаксическим сахаром?
1059 1830854
>>830843
Ты не различаешь асинхронности и многопоточности, первое тратит меньше ресурсов, легче контролируется и уменьшает шанс выстрелить себе в ногу. Создание Thread для выполнения асинхронных операций это пустая трата процессорного времени и памяти, так как всё могло бы происходить в рамках одного потока. Для этого как раз и создан класс Task и TPL в целом.
1060 1830858
>>830854

> Ты не различаешь асинхронности и многопоточности


Возможно, нужно почитать что-то на эту тему.

> Для этого как раз и создан класс Task и TPL в целом


Но раньше ведь жили без этого как-то.
1061 1830861
>>830858
Жили, но использовали не Thread, а делегаты и AsyncResult, но они сложны и раздували код настолько, что использовали их только создатели библиотек и по-настоящему опытные программисты.
1062 1830885
>>830861

> делегаты и AsyncResult


Я скорее даже не про ранний C#, а вообще. 20-25 лет назад тоже писали стабильное и быстрое ПО (лучше, чем сейчас), хотя у серьёзного программиста под винду были только плюсы и голый CreateThread из винапи. И ничего.
1063 1830888
Анон, как через entity framework юзать базу данных из ms access?

А то не могу нагулить, вечно на всяких стекфлоу тонны какой-то хуйни написаны вместо нормальных ссылок на гайды
1064 1830944
>>830888
Менее минуты поиска: https://www.youtube.com/watch?v=mI0un8jjqL8
1065 1831007
Есть один ASP.NET Core сервис. Раньше был на 2.2, мы перенесли его на 3.1
Фронтом ему выступает IIS из Win Server 2019.
Единственное, что было изменено в конфигах:
startupTimeLimit="3600"
в web.config

Раньше (на 2.2) при загрузке приложения из Application Pool оно почти мгновенно грузится (секунд 20-40) и сайт сразу же после этого становится доступен.
Сейчас, на 3.1, сервис грузится те же 20-40 сек, а потом 10 минут сайт недоступен. То есть я делаю запрос, запрос зависает. Запрос развисает через 10 минут, и следующие запросы выполняются мгновенно. Запрос один и тот же и крайне дешёвый (10-15 мс). Я открываю логи, которые ведёт сама программа: в 10 первых минутах запроса там просто нет, то есть он даже не приходит. Через 10 минут они прилетают все скопом.

Что делать, как быть? В чём проблема? Как чинить?
1066 1831013
>>830944
блин, я забыл написать что под net core. JetEntityFrameworkProvider не пашет
1067 1831064
>>831007
Всё, вопрос снимается. Один из IHostedService очень долго исполнял StartAsync. Не знаю почему на 2.2 этого не было видно
1068 1831194
>>830885
Раньше на алголе писали, и ничого!
1069 1831353
Анонче скинь пожалуйста пару тестовых заданий которые выдают джунам.
1070 1831359
>>830885
20-25 лет назад у нас все клиенты тяжёлые были и сетевые запросы редко использовались. Но мультипоточность и работа с сетью была жёсткой магией и писалась на тыщи строк на всяких плюсах. И эти проги постоянно падали или отжирали все имеющиеся ресурсы и тормозили.

>Возможно, нужно почитать что-то на эту тему.


Не "возможно", а обязательно к прочтению. Щас ни одна прога (даже иногда калькуляторы, лол) без async/await не обходятся. Не зная как оно работает ты себе не только в ногу, но и в голову начнёшь выстреливать. Надо кучу статей перечитать и самому много всего перепробовать.
1071 1831466
>>829733
Разворачивай проверку и делай дебаг каждого шага, если косяк только в релизе, то через старый добрый PRINT DEBUG смотришь.
Я подозреваю что у тебя там косяк с кодировками, на входе идет какой-нибудь utf-16, а строка у тебя в utf-8, выглядят одинаково, но по факту это разное.

>>830069
Значит этот код не участвует в работе программы или в нем вечная false проверка, в результате оптимизация убила эту ветку кода.
Просто так код не выкидывается из работы, плюс дебаг не работает на релиз версии потому что код который ты пишешь может стать нечто другим и там тупо не на что ставить breakpoint.
1072 1831496
>>831353
Ну. Мне вот дали протокол(что-то около 20 разных типов сообщений: регистрации, авторизации, проверки подлинности сервера, запроса канала и т.д.). Задание было в форме: Есть 100к роботов, они хотят общаться, но из-за того что они очень стеснительны - бояться общаться напрямую. Необходимо разработать приложение которое бы позволило им всем общаться через это самое приложение, а так же в случае необходимости - рассылать им всякое разное от людей. Форма диалога происходит в виде: Робот 1 присылает запрос о том что хочет выйти на связь с Роботом2, если робот2 сейчас подключен - создается зашифрованный канал, который передает сообщения, в случае если превышено время ожидания, либо один из роботов прислал сообщение о том что хочет разорвать общение, либо сообщение об ошибке, какнал закрывается. Так же необходимо было всякие проверки подлинности по этому протоколу, регистрации и прочую залупу.
А другому джуну что вместе со мной приходил - распарсить жсон попросили.
1073 1831500
>>831466

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


Вот меня эта хуйня реально бесит. Серьезно. У меня просто на работе стоят шпиенские программы которые захватывают файлы собранные и минут еще 10 держат, и приходится постоянно переключаться то на релиз то на дебаг чтобы дебажить и на релизе приходится либо молиться чтобы тут-то остановилось, либо везде долбить в консольку чтобы отлаживать. Вот какого хуя-то? Почему нельзя сделать было по-человечески, чтобы все эти оптимизации только с каким-то флагом компиляции включались, а изначально то что ты написал - то и будет. Аааа, жопа.
image.png18 Кб, 681x235
1074 1831509
>>831500

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


Вообще-то можно, но какой смысл тогда в релизе?
1075 1831534
>>831500

>Вот меня эта хуйня реально бесит


Прикол, сначала делают дизайн из костылей, а потом жалуются. Чё-то у меня за 10 лет такой хуйни не происходило.
1076 1832242
Господи. Опять мне перекатывать? Я же опать обосрусь и будет уже три хештега. Давайте, няши, чего вы такие-то ленивые?
1077 1832281
>>832242
как перекат делается? просто создаёшь новый тред? а то тут шапку надо хорошо так подправить.
1078 1832373
>>811338
Ну и пиздец.

> public virtual byte[] Encrypt(byte[] data, RSAEncryptionPadding padding) {


> throw DerivedClassMustOverride();


> }


>


> public virtual byte[] Decrypt(byte[] data, RSAEncryptionPadding padding) {


> throw DerivedClassMustOverride();


> }


Это так много мне говорит, что охуеть просто. Я весь в просвещении. Меня настигло сатори и я познал Дзен, это этой хуйни.
Спасибо анон. В качестве благодарности, нихуя так и не поняв - вкину вам сюда - неразрывный пробел: Alt+255, вакаба ваш говнокод не жрала.
1079 1832375
>>832373

>я познал Дзен, ОТ этой НЕВЕДОМОЙ хуйни



>вкину вам сюда - неразрывный пробел: Alt+255, ЧТОБЫ вакаба


Нутыпонел.
Рили, проще запилить свою RSA на BigInteger.cs, чем это вот, хуй знает как написанное - юзать.
1080 1832560
уже в шапку пора писать что нового в шарпе 9. немного осталось же
к тому же некоторый синтаксис из шарпа9 почему то работает в моей VS, где им и не пахло.
1081 1832955
>>832560
Потому что

>the current plan is that C# 9 will only be officially supported on .NET 5. However, in the current design records do not depend on any new CLR features, so many things may work in .NET Standard 2.0 in an unsupported fashion (similar to C# 8).

1082 1832982
>>832955
еще раз
как мой компилятор который не знает про шарп 9 (студия не превиев) компилирует код который использует фичи из шарп 9?
1083 1833066
>>831496
это вы в яндекс или в мейл собеседовались?
я на миддла просто мило попиздел с тимлидом о всякой дотнетщине и скинул ссылку на свой гитхаб, без всяких тестовых заданий
1084 1833131
>>833066
И что там у тебя на гитхабе? У меня есть большой проект, но он в приватном репозитории, так как приносит мне деньги.
1085 1833146
>>833066
Ну как. Там тестовое это выдавалось на время испытательного срока. Типа вот тебе задание, вот три месяца - справишься - берем, не справишься - посмотрим. Я сделал за неделю, меня взяли и сразу кинули в пекло, чел что парсил json не справился и его перевели отправили к тестировщикам. Воооооот.
1086 1833172
>>832982
.NET Standard 2.0 не требует превью и прочих net5 специфичных установок. Он у тебя уже давно есть.
1087 1833365
>>833172
да причем тут .NET Standard 2.0, который описывает по факту какие классы доступны и синтаксис языка, который должен разобрать компилятор и если он не знает, допустим, про инит свойства, то для него это будет "бэд синтакс"
1088 1833457
Извините пожалуйста, а как в ASP.NET Core сделать динамический роутинг? По типу /users/:id. Что, вот прям искаропки ничего нет или как?
1089 1833514
Аноны, я хочу подробно изучить работу сетей. Клиент - сервер. HTTP, шифрование и все в этом ключе с использованием шарпа. Подскажите, пожалуйста, качественные туториалы на эту тему
1090 1833558
>>833514
David Gourley, Brian Totty, Marjorie Sayer, Sailu Reddy, Anshu Aggarwal - HTTP_ The Definitive Guide-O'Reilly Media (2002)
1091 1833663
>>833457
Так хорошо начал, что захотелось даже граммотно с нормальными примерами ответил, но после

>вот прям искаропки ничего нет или как?


только и хочется сказать "ты дебил или как?" и бросить ссылкой

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1
1092 1833695
>>833558
Спасибо
1093 1833706
>>833365
Это чудо, чел. Звони в Ватикан.
1094 1834690
Сап, где в проекте находится папка с нугетсами?
В моем cs-ки, папка би и обж. Где нугетсы?
1096 1834755
>>834720
cпасибо
Интересно, если скопировать нугетсы с одного проекта на другой студия не будет ругаться?
.jpg2,1 Мб, 2670x3345
1097 1834780
Допустим есть БД, из нее достается какая-то запись и обрабатывается в виде задачи. Одновременно может обрабатываться много записей. Так вот, я хочу иметь возможность отменить обработку записи по ID этой записи.
В чем собственно проблема? Я не совсем понимаю как это сделать не всрато. Пока что придумал так: Вот словарик, в нем ключ - id, а значение - CancellationTokenSource, если я решаю отменить задачу - смотрю есть ли в словарике такой ID, и если есть - отменяю. Но это выглядит во первых всрато, во-вторых получается что нужно заботиться о том чтобы удалить CancellationTokenSource после того как задача завершилась. Есть ли какой-то более изящный, элегантный и вообще правильный способ это все организовать?
1098 1834855
Реально важный вопрос.

Как поменять тему в студии?
1099 1834879
>>834855
https://github.com/Microsoft/VS-ColorThemes
https://studiostyl.es

Как обновить шрифты надеюсь сам догадаешься.
1100 1834882
>>834780
Возьми https://www.hangfire.io и запускай задачи через него. Там можно задачу отменить и через UI и через API и по таймеру (timeout).
1540555803317.PNG18 Кб, 775x239
1101 1834889
Нуб на связи. Пишу простенький инвент для текст бокса и просто охуеваю с того, что некоторые строки кода просто не выполняются, будто их вовсе не существует. Причем одна строка может выполниться, а следующая точно такая же - нет. Я просто в охуе.
Пикрилейтед, там подписано, какие строки срабатывают, а какие нет. Причем без разницы, что там за инструкции, могу после замены текста поставить какой-нибудь тхреад.слип - один хуй он будет проигнорен.
1102 1834901
>>834855
https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.VisualStudio2019ColorThemeEditor

я с 2017й сохранил и накатил. там правильный (для меня) синий. но не без гемора все
1103 1834902
>>834780
решение как решение. нужно удалить - так удаляй
нет ничего всратого
1104 1834971
Аноны, помогите пожалуйста дураку.
Как создать sql базу данных локально? Я читал гайды на метаните, смотрел на ютюбе и я не понимаю, где она создаётся и что я вообще делаю.
Короче, скажите просто как сохранить поля класса, чтобы при следующем запуске он их считывал и выводил. Заранее спасибо.
1105 1834996
>>834971
База данных на локальном сервере хранится, тебе нужен denwer или MySQL сервер
Смотря какую базу используешь
1106 1834999
>>834889
Звучит как шиза, завтра попробую твою штуку посмотреть, или если поймёшь в чем дело то пиши
1107 1835003
>>834996

> База данных на локальном сервере хранится, тебе нужен denwer или MySQL сервер


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

> Смотря какую базу используешь


Ну вот я и хотел спросить, какие варианты есть, и как бы сделали вы?
1108 1835010
>>835003
MySql и sql всегда хранятся на сервере
Либо локальном либо удаленном, а приложение запрашивает к нему доступ
Внутри приложения никакой базы нет

Но

Существует база данных которая хранится просто в файле
Гугли SQLite
1109 1835016
>>835010

> SQLite


Да, попробую так, спасибо.
IMG20201002142430370.jpg42 Кб, 1242x538
1110 1835044
Гайс, хочу устроиться на 50к+ со старта без рабочего опыта на .net core бэка. Могу в mvc, api, ef/sql, di, git, проектирование бд, безопасность, кэш, немного в деплой, немного в design patterns. Это реально с поверхностным знанием html/css и с нулевым знанием js? А то смотрю, все вакансии требуют плюсом фронт в виде жса+ангуляра/реакта/вью, тобишь все фулстеков хотят, дрочить дальше чтоль?
1111 1835045
>>835044
Забыл добавить, что еще непротухшая профильная вышка есть.
1112 1835047
>>835044
Учи js, без него найти что то будет сложно
1113 1835058
>>835047
Зато если все разом перестанут учить жс, то сразу станет быстро найти работу на чём-то другом.
1114 1835072
>>834999

>Звучит как шиза


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

Единственное, что буквально только что перешел с 2017 на 2019, и изменил фреймворк до 4.7.2, до этого ничего такого не замечал.

>завтра попробую твою штуку посмотреть, или если поймёшь в чем дело то пиши


Спасибо.
Попробую тоже завтра-послезавтра на максимум упростить этот код, и надо будет в отдельном проекте попробовать и на разных студиях, может понятней будет.
1115 1835126
Анончи, есть на C# простенький скриптовый язык с поддержкой переменных и функций? Типа:
var value = calc1(45, 77);
var result = calc_total(value, 1);

Чтобы я уже дальше мог под себя его допилить.
1116 1835140
>>835126
Powershell.
1117 1835148
>>835072
при всех хз проблемах дропай bin/obj/.vs
и выключай разные там Fody
и выключай оптимизацию кода
1118 1835165
Имеется asp.net core приложение. Там есть кнопка "создать", по нажатию на которую создается сущность с дефолтными полями, помещается в БД, и происходит переход на страницу этой сущности по её id. И этот переход работает не всегда корректно. Когда выполняю прогу пошагово - работает, когда непошагово - не всегда работает. Заглянул в логи, обнаружил, что когда переход не работает, то после строки "Executed endpoint MyApp.API.Controllers.ThingController.GetThing (MyApp.API)" всегда отсутствует "Request finished in 130.0922ms 200 application/json; charset=utf-8". Есть ли способ насильно вызвать финиш реквеста?
1119 1835168
>>835165
ошибка, нужно не MyApp.API.Controllers.ThingController.GetThing, а CreateThing
1120 1835258
>>835168
А вот если перекат оформишь, то сразу заработает все как надо
проверено
1121 1835287
Почему студия не видит пакет? Как это пофиксить?
на
using Namespace.PackageName;
даёт ошибку что
Using directive is unnecessary.
The type or namespace name PackageName does not exist in the namespace Namespace (are you missing an assembly reference?)

При том что нужный пакет есть в packages.
1122 1835297
>>834889
Короче когда ты делаешь remove и insert
Метод text changed вызывается ещё раз поэтому все ломается)
1123 1835303
>>835297
То есть ты пишешь в поле - вызывается текст ченж- внутри события ты меняешь текст в поле и снова вызывается текст ченж)
1125 1835421
>>835287
версия пакета не подходящая
1126 1835440
>>835421
Как понять какая подходящая?
Я ставлю последнюю стабильную, сейчас попробовал прошлогоднюю установить, но та же самая проблема.
1127 1835452
>>835287
clean solution, ребут студии, удаление .vs - если пакет есть то поможет
1128 1835480
>>835452
Не помогло.
А можно ли как-то запретить установку пакетов или ограничить?
1129 1835494
>>835480
то что есть в референсах то нюгет и затянет если может
чего нет - то не затянет
ну и конечно еще есть опциональные зависимости - будет тянуть если условие соблюдается. например у тебя либа на разные дотнеты и каждому варианту свой набор зависимостей
1130 1835506
>>835494
В общем с нагетсами какая то фигня.
Делюсь лайфхаком, как я сделал:
Правая мышка по References, Add Reference. Дальше Browse и выбираю из папки с нагетсами нужный референс вручную.
Почему то через нагетс менеджер не устанавливается, хз почему так.
1131 1835509
Спасибо за ответы!
Добра и сотен нефти вам
1132 1835523
>>797054 (OP)
Почему, кстати, прчти все дотнетовские вакансии требуют жс, в отличие от джавовских?
1133 1835544
>>835440
Не совместима с версией используемого фреймворка. Также надо проверить что проекты в солюшене тоже друг с другом по версиям стыкуются.
А еще почисти на всякий слачай nuget cache (гугли команды) и сделай Clean Solution + Rebuild Solution.
1134 1835547
>>835523
Потому что основной используемый шаблон в дотнете был MVC, а там обазательно вьюшки с хтмл+жс+цсс.
А ещё раньше АПИ вообще не было, только веб формс.
Последние 3 года всех кого знаю пилят только АПИ точно также как и жава, а весь фронтенд в отдельном репо на всяких Ангулярах и Реактах.

В жаве же с фронтендом всегда туго было, поэтому на нём всегда только бэк пилили.
1135 1835550
>>835547
Но в итоге джависты освобождены от необходимости знать фронтенд, а шарписты - нет.
1136 1835559
>>835550
да глупости же. кто пишет апи или вообще веба не касается знать не знает фронтенд
вот я не знаю.
вернее я знаю его настолько чтобы знать что оно лютое говнище
1137 1835578
Хм. А нормальная тема делать контроллеры дженериками или абстрактными классами? Чет просто с одной стороны, а чому бы нет, наследоваться то можно, все настроить тоже, но при этом я почему-то во всех примерах что другие люди кодят не замечал чтобы хотя бы какой-нибудь примитивный CRUD делали дженериком, постоянно хреначат для каждой сущности копипастные методы. Я чего-то не понимаю?
1138 1835618
>>835578
Контракт должен быть железным. Если тебе нужно чтобы твой ресурс могли
GET /api/my-resource/:id
то весь этот контракт нужно прямо указать. Никакой магии, никаких зависимостей, каждый контракт полностью самодостаточен.
Да, код получается больше, но поддерживать, читать и расширять такой код куда проще чем магическая динамичность.
Ты ещё gRPC не видел, там ещё с контрактами жёстче.

Вообще, как и в случае с протобафом для gRPC, ты можешь руками (или при помощи какого-нибудь постмэна) построить свою OpenAPI доку и потом применить генератор, который тебе Controllers + Actions оттуда напили. Добавишь потом custom Api Conventions и можно пользоваться.

Если в одном месте прям свербит и хочется динамичности, то иди копай GraphQL, который можно на прямую в твою БД отправить и клиент сам сможет выбрать оттуда что ему нужно.
1139 1835642
>>835303
>>835297
>>834889
>>834999
>>835072

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


Да, все так, спасибо, тоже сейчас дошел до этого.

И как же мне теперь передвинуть курсор?
Главное до этого все работало, когда метод изменял исключительно последний символ, но теперь вообще не помню как я так изменял этот текст, чтобы ивент не вызывался второй раз.
1140 1835663
>>835303
>>835297
>>835642
Кароче можно так:
(sender as TextBox).TextChanged -= ChangeToDot_TextChangedEventForTextBox3;
(sender as TextBox).Text += "test";
(sender as TextBox).TextChanged += ChangeToDot_TextChangedEventForTextBox3;

нормальное решение, или уебанство?
1141 1835668
>>835663
события в шарпе сами по себе уебанство
и тех кто делает sender as нужно бить палками
1142 1835672
>>835668

>события в шарпе сами по себе уебанство


Почему? И как же такое без событий делать?(И зачем?)

>и тех кто делает sender as нужно бить палками


Почему и как надо? Изначально объявить объект текстбокса через sender as и уже к нему обращаться? Будет разница?
1143 1835678
>>835672

>Почему? И как же такое без событий делать?(И зачем?)


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

>Почему и как надо?


((TextBox)sender)
и везде так где сендер не ожидается нулл или другого типа. Получишь ошибку каста вместо невразумительного Null Reference Exception
если делаешь as - следующим делом проверяй на null. Иначе касти нормально
1144 1835680
>>835672
чет не ответил на "а как без событий"
ну тут никак если конечно не подключаешь reactive, а поскольку обычно нет, то да получается такая херь с +=/-=
1145 1835694
>>835680
>>835678
Спасибо. Поправил сендеры.
.png18 Кб, 579x399
1146 1835695
>>834889
Попробовал чутка причесать твой код.
1147 1835712
На контроллер передаются данные в FormData и вытаскиваются через FromForm в object. Как вытащить из этого object свойство? Приведение не хочет.
.png9 Кб, 556x237
1148 1835728
>>835712
Вот так вот.
1149 1835786
>>835694
ну так то в сендеры может и что то другое прилететь. вот у меня в WPF с табконтролом хрен знает что прилетало (кривая его реализация)
вот тогда нужен as и проверка на нулл
правда и тогда лучше is
image.png60 Кб, 1064x222
1150 1836276
https://devblogs.microsoft.com/dotnet/choose-a-net-game-engine/
Всё, Mono теперь .NET 5. Все движки, использующие Mono станут dotnet native.
1151 1836357
Я вот чет не знаю. Вот я нахреначил классов которые в конструкторе только IServiceScopeFactory принимают, либо IServiceProvider, воооот. И теперь достаю все что мне нужно. Ну и в чем казалось бы проблема. А в том что, как мне кажется, это какое-то говнокодерство. В общем рассудите, говнокодерство это или нет. Опять же, плюс в том что как бы получается что конструктор довольно простой, то что нужно классу в общем - достаю из провайдера, если такого нет - сразу ловлю исключение, то что нужно только в рамках метода - из scopeFactory. Пользоваться этим действительно оч удобно, но вот с точки зрения класса как какой-то самостоятельной сущности, ну хз. Опять же, в чем плюс, допустим я в Startup уже дал строку подключения и теперь если подключатсья к БД нужно только в рамках метода, мне не нужно передавать строку подключения в класс, не нужно над многими другими штуками думать. Короче, я не знаю. Вроде так писать удобно, но меня не покидает ощущение, что это как-то неправильно, типа вся эта взаимосвязь сущностей остается, но становится неявной и уже просто взглянув на то как объект представлен на диаграмме классов - остается только по названию методов и самого класса догадываться что оно собственно делает.
1152 1836362
>>836357
угу. использование IoC контейнера как сервис локатор считается антипаттерном. По возможности класс должен принимать, что ему реально нужно
1153 1836468
ТАкой вот вопрос:
Локально на проекте подключаюсь к задеплоиной БД, стянут последний мастер с фронта и бека. Есть функционал по добавлению роли для участника какого то клуба. Локально все работает, но вот на задеплоином сайте почему то вылетает ошибки: System.InvalidOperationException: Role IJ����� ������� does not exist.
at Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9.AddToRoleAsync(TUser user, String normalizedRoleName, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Identity.UserManager`1.AddToRoleAsync(TUser user, String role)

Как это вообще возможно и в чем может быть проблема??
.png141 Кб, 1928x1058
1154 1836478
Тут не любят когда я на дропбокс заливаю, потому вот вам скриншот.

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

Так вот, мне хочется проекте добавить возможность посмотреть статус работы чтобы на фронтенде рисовать красивый прогрессбар. Как это можно сделать красиво? Если скажем я сделаю класс: WorkStatusObserver в этом классе у нас будет словарь id-WorkProgress, в который буду добавлять на каждой итерации цикла объект WorkProgress пусть это будет простой объект, в котором при создании указываем максимальное значение и затем обновляя текущее и таким образом можно посмотреть % выполнения и обновлять его по ходу выполнения работы, это будет нормальным решением? Допустим этот класс(WorkStatusObserver) будет синглтоном, таким образом я буду из контроллера иметь возможность посмотреть сколько там осталось еще пока работа завершится. Норм это, или не?
1155 1836490
>>836468
Что-нибудь с CultureInfo или подобным.
1156 1836645
>>797054 (OP)
Есть серьёзный философский вопрос, поэтому задам его здесь.
Как изменить статичный четырехмерный объект?
1157 1836646
>>836645
Желательно приватный - private static obj = {[бла-бла - четырехмерие]};
1158 1836658
>>836645
obj = new Foo();
1159 1836665
Сааамый душный тред на всем дваче. Такое ощущение, что все анальщики-программисты тут
1160 1836720
Есть смысл вкатываться в .NET Core без .NET Framework?
Сам студент, хочу скатиться с джавы.
1161 1836743
>>836658
А если он из-за статичности этой, своей - неуправляемый и принципиально-неисправимый?
1162 1836747
>>836645
При помощи рефлексии
1163 1836751
1164 1836847
Привет. Нужно по интернету и одного веб-сервиса посылать какую-то работу на другой сервис для выполнения. Пример: веб-сервис 1, на нем есть, допустим, Class1 : IJob и Class2 : IJob ... Сам IJob содержит Task DoJob(); .
Нужно послать на сервис 2 объект класса ClassХ. Сервис 2 имеет такой же IJob, и должен запустить DoJob() полученного объекта.
Как примерно такое сделать? Может есть готовый фреймворк? Или вручную только сериализовать и рефлексировать? Или еще какой подход есть для таких задач?
1165 1836851
>>836847
На всякий случай уточню, сервис 2 ничего не знает про имплементации IJob в сервисе 1.
1166 1836939
Аноны, есть ли где-то список совместимых пакетов (именно версии интересуют) с определенной версией .NetFramework?
Чтобы было прямо указано что например с NetFramework 4 работает библиотека Xxxx версии 1.02, Yyyy версии 4.1 и тд.
1167 1836943
>>797054 (OP)
Кто нибудь проходил этот туториал? https://docs.microsoft.com/ru-ru/aspnet/core/tutorials/razor-pages/?view=aspnetcore-3.1
На 2 этапе возникает ошибка, на этом моменте https://docs.microsoft.com/ru-ru/aspnet/core/tutorials/razor-pages/model?view=aspnetcore-3.1&tabs=visual-studio-code#scaffold-the-movie-model ввожу в терминал dotnet aspnet-codegenerator razorpage -m Movie -dc RazorPagesMovieContext -udl -outDir Pages/Movies --referenceScriptLibraries а в ответ сначала было, что не может найти фреймворк 3.1, хотя он у меня установлен, а после когда поставил более старые либы, начал выдавать, что команда не найдена или не найден файл.
1168 1836944
>>836743
ты нормально то напиши что надо
может вместо static имелся ввиду readonly?
1169 1837007
>>836665
душевный фикс
1170 1837009
>>836720
Про .NET Framework желательно забыть как про страшный сон. Только кор или сразу dotnet 5.
image.png10 Кб, 561x225
1171 1837011
>>836939
В самом nuget прописано, на каких версиях оно работает
1172 1837012
>>836943
выдай сюда результат команды dotnet --info
1173 1837021
>>836944
А какая разница? Как ты собрался создавать экземпляр статичного класса?
image.png299 Кб, 944x858
1174 1837212
>>797054 (OP)
В общем есть задание, каждое кол-во времени создаются детали.
Как их лучше хранить? Думал в лист<стринг> сохранять "A","B" if timeHasCome, но потом парсить будет некрасиво.
1175 1837232
>>837212
Это же тупо задача из линейного программирования. Храни в массивчике и не парься.
1176 1837244
>>837212
Охуеваю с таких постановок задач. Пиздец, я пока читал - запутался, пришлось перечитать 10 раз чтобы понять что за 4 этап и что вообще от меня хотят.
Нет бы по человечески: G(w0) = F(w1)+ E(w2) + 8 + rand(-3, 3). Нет, блядь, каждый раз какой-то еблан берет и вот такую вот простыню напишет и ты больше времени не на решение а на формазизацию задачи тратишь. С этой хуйни еще в школе горело. Нахуй и в пизду.
1177 1837263
Ребятушки. Не бейте тапками.
В общем, хочу из одного IHostedService посылать запросы к своим же контроллерам. Но т.к. эта фигня делается исключительно чтобы в этом сервисе не нагружать и без того тяжелый сервис всеми этими контекстами с бд, не хочу чтобы это api торчало наружу. Что и где прописать чтобы исключить возможность запроса из вне. В идеале вообще сделать это апи доступным только изнутри приложения. Я гуглил, все решения это в мидлваре прописать контроллеру ограничения, но блин, а вдруг злоумышленник - ебучий сисадмин, который вертит на хую эти запросы к самому себе и режет их. Просто лично мне это было бы ну очень удобно, потому что в синглтон не хочется передавать IServiceScopeFactory, а из БД таки хочется достать данные. Конечно, я могу просто создать еще один синглточнчик в котором буду хранить строку подключения и создавать контекст так.
1178 1837266
>>837012

>выдай сюда результат команды dotnet --info


Пакет SDK для .NET Core (отражающий любой global.json):
Version: 3.1.108
Commit: c423b556b5

Среда выполнения:
OS Name: manjaro
OS Version:
OS Platform: Linux
RID: arch-x64
Base Path: /usr/share/dotnet/sdk/3.1.108/

Host (useful for support):
Version: 3.1.8
Commit: 05a0c8f6b1

.NET Core SDKs installed:
3.1.108 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
Microsoft.NETCore.App 3.1.8 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
1179 1837272
>>837263

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


Зачем? Проблема XY
1180 1837289
>>837272

> Зачем?


Чтобы не передавать в синглтон IScopeFactory или не делать дргой синглтон, который будет делать мне контексты к БД. Я же написал вроде. В контроллер, т.к. он scoped я могу спокойно передать нужный мне контекст, затем просто сделаю запрос к нему, получу нужные мне данные и буду работать дальше.
Ладно, чтобы было понятно. Есть сервис, он должен брать из БД табличку с расписанием, смотреть время, если пришло время для следующего запуска запросить из БД все объекты которые привязаны к этому расписанию и делать запросы на основании этих объектов к сторонним ресурсам, получив ответы - обновлять значения в БД. Ну и я вот хочу убрать из этого класса этот IScopeFactory, тогда в этом классе будет только методы Start/Stop/DoWork, в DoWork я и буду делать всю эту поеботу. Зачем оно надо? А вот надо, нужно смотреть цены на товаров раз в 12 часов в некоторых интернет магазинах и кидать оповещение если цена снизилась людям которые подписались на рассылку. Как это сделать иначе - я не придумал.
1181 1837304
>>837289
то есть вместо прямого очевидного и простого решения лезть в базу данных из своего вечноживущего сервиса ты хочешь нагородить сверхсложный огород пытаясь дергать внешний контроллер
1182 1837318
>>837304
Ну да. А что, это неправильно? Я просто не понимаю. То говорят что передавать контекст напрямоу плохо, то что ручками его собирать, то что IScopeFactory в конструкторе - говнокод. Я уже не знаю как делать чтобы правильно было. Делаешь очивидно и просто - уууу, в лоб зарешал, ууу. Пытаешься делать не так - уууу, нагородил огород. Короче, не знаю уже.
1183 1837349
>>837318
Нужно избегать использования Service Locator, потому что он скрывает знание "что конкретно нужно этому классу". Это такая неявная зависимость и приходится рыть код, чтобы понять что ему надо то. Может он раз в 100 лет попробует достать из локатора какую то зависимость, а у тебя ее нет в контейнере и все рухнет.

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

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

Я не пользуюсь и не знаю EF но по примерам складывается ощущение, что прямо на месте создают/достают из контейнера. Я хз такие практики - у меня от них глаз дергается.
1184 1837363
>>837012
Почему то команда dotnet aspnet-codegenerator не работает, хотя dotnet tool install dotnet-aspnet-codegenerator говорит, что уже установлен.
1185 1837440
>>837363
Установи его глобально, вроде -g флаг был.
1186 1837450
>>837440
Глобально установлен. Команда заработала, но отвечает хуйню Building project ...
It was not possible to find any compatible framework version
The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found.
- No frameworks were found.

You can resolve the problem by installing the specified framework and/or SDK.

The specified framework can be found at:
- https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=3.1.0&arch=x64&rid=manjaro-x64
RunTime 00:00:18.15
1187 1837455
>>837021
ничего не было сказано про статический класс, ты написал статический объект
а так, Zhopa.Xer = 2
1188 1837456
>>836943
>>837012
>>837440
Все решилось. Оказывается, asp.net core runtime ставится отдельным пакетом, а он у меня не был установлен.
1189 1837504
Сап, шарпач!
Курю мануалы по авалонии и возник вопрос.
Почему в построении интерфейсов назрели две крайности?
1. Таскаешь мышкой компоненты по форме, мышкой же размещаешь, мышкой же в инспекторе сбоку настраиваешь свойства.
2. Всю разметку печатаешь ручками в специальном языке разметки, при поддержке твоей ИДЕ тебе показывается конечный результат, в котором ничего нельзя подправить мышкой.
Я не нашел сбалансированного решения, наподобие как в автокадах всевозможных, когда ты можешь и мышкой таскать и в командном процессоре снизу показаны команды, которыми строится интерфейс и при желании и умении, ты можешь ручками продолжать его строить, вводя новые команды. Воркфлоу выглядит так, пишешь ему что-то типа button name="OK" text="{bind MyOKCaption} а потом можешь мышкой подвинуть появившуюся кнопку и в этом поле команда станет выглядеть например так button name="OK" text="{bind MyOKCaption} margin=point(16, 303)

Если такие CAD-style-решения есть, ткните носом, позязя.
1190 1837572
>>837504
ну авалонию делают любители. они не могут сделать полноценный редактор
да даже майки со своим WPF дизайнером не могут сделать такое

в итоге все ручками привычно
1191 1837573
>>837572
WPF так всё и работает, но я не представляю как этим пользоваться кто-то в здравом уме будет, потому что это своего рода костыли для долбоеба, который не может разместить элементы интерфейса по контейнерам.
1192 1837581
Хочу через рефлексию подобрать подходящий метод для вызова. Проблема в том, что стандартный GetMethod бесполезен.

Мне известен возвращаемый тип (стоит ли его учитывать; есть ли он вообще; является ли он generic) и известны типы параметров. На основе этого нужно подобрать подходящий метод.

Пока думаю делать так:
- первый проход по методам - строго сравниваем параметры (type == type)
- второй проход - используем IsAssignableFrom, но учитываем только generic типы
- третий проход - используем IsAssignableFrom

- проходим по получившемуся списку методов, подбираем первый подходящий возвращаемый тип и возвращаем метод
1193 1837583
>>837581
ну так GetMethodS и дальше выбирай из них
1194 1837586
>>837583
Это понятно. Может есть способ проще... Мне нужен такой же подбор по параметрам и возвращаемому типу, как это сделано в самом C#. Это нужно для скриптового языка.
1195 1837689
>>837586
ну а какая разница? знаешь типы, методы есть - выбирай из них. Для экономии времени можешь составить свой словарь "сигнатура - метод" и он будет моментально тебе находить по сигнатуре
1196 1837865
>>837504
Для drag-and-drop пользуйся win forms.
От создайния интерфейсов мышкой не зря отказались. Это вообще теперь industry standard - не пользоваться drag-n-drop разработкой. Такой способ только для быстрого прототипирования может подойти или для домашней поделки.
image.png34 Кб, 853x235
1197 1837892
загадка Жака Фреско: почему первый цикл райдер предлагает заменить на линк, а второй нет?
215985.jpg32 Кб, 768x576
1198 1837896
>>837689

>методы есть - выбирай из них


Легко сказать... Там столько подводных всплыло с дженерик-типами. Написал не слишком сложный поиск. Добавил ещё сортировку по "весу". Для скрипта должно хватить, если я всё учёл.
https://pastebin.com/YW9N8xbP
1199 1837911
>>837892
Потому что парсер наткнулся на этот кусок и дальше не стал строить дерево.

А вообще, как по мне заменять это на LINQ - плохая практика. я вот сам попервой нахреначил кучу хуйни так, а потом хуяк и этим пользоваться менее удобно оказалось и для понимания оно сложнее, особенно теми кто не особо за LINQ шарит, например бывшие джависты-пхпшники, они сразу начинают - ууууу, нипанятна.
1200 1837921
>>837504
>>837573
А че в html/css по другому как то интерфейс строят? Никто не жалуется.
1201 1837931
>>837244
Хуёво быть ботом.
1202 1837937
>>837921
В html/css никто не двигает элементы мышкой. Маржин и паддинг нужно устанавливать у родительского элемена, дочерние элементы уже выравниваются автоматически. Тоже самое и в WPF делают. Это удобно тем, что если у тебя, к примеру, 5 последовательных эелемнтов и ты их расположил двигая мышкой т. е. явным указанием маржина, а иногда и трансформирования, то если тебе нужно будет передвинуть один элемент, то менять эти маржины придётся у всех 5 элементов.
1203 1838301
Сап.
Есть одна БД, в ней около 10 таблиц, в каждой около 10 столбцов, все таблицы записаны в csv. Суть: нужно по запросу вида "таблицанейм.столбецнейм" получать столбец/строку из него. Я решил под таблицы написать модели и быстро осознал, что на каждую придется написать строк 100 чисто логики парсинга, и то полнейший костыльный пиздец выйдет. Так вот: как эту хуйню нормально запарсить?
Про библиотеки, которые это сделают за меня, я в курсе, но шараге на их существование (ровно как и на существование половины стандартных библиотек, лол) поебать. Нужно как-то свою реализацию написать.
1204 1838311
>>797054 (OP)
Как создать Json-объект?
Что-то наподобие

>new Object[]{"key1": value1, "key2": value2};


А?
1205 1838313
>>838301
У тебя проблема с тем, чтоб распарсить csv? Если сами файлы ошибок не содержат, то задача тривиальная.
1206 1838315
>>838311
new string(char[]{'"','k','e','y','"',':','v','a','l'})
1207 1838316
>>838313
У меня проблема с тем, что мне нужно вручную как-то забиндить распаршенные данные к моделям, при этом таблиц дохуя, столбцов дохуя, типы данных у столбцов разные. У меня нет идей, как это сделать нормально, а не через тысячу ифов.
1208 1838319
>>838315
Ты создал строчку.

Всё, я нашёл уже:

> Dictionary<string, object> yourObjects = new Dictionary<string, object>(){


> ["key1"] = 1


> , ["key2"] = "value2"


> }


> ;


>// yourObjects["key1"] = 1;


>// yourObjects["key2"] = "value2";


>Console.WriteLine(yourObjects["key1"].ToString());


>Console.WriteLine(yourObjects["key2"].ToString());

1209 1838322
>>838316
Парсишь csv сначала в словарь где ключ это название заголовка, а значение список из значений таблицы под этим заголовком. Переводишь все щначения при помощи tryparse
1210 1838324
>>838319
А ты что создал? Всегда думал, что ToString строку возвращает.
1211 1838331
Используется ли до сих пор ASP.NET, или все уже перешли/мигрировали на ASP.NET Core? Каков шанс, что при устройстве на работу джуном посадят на не-кор ASP.NET проект?
1212 1838335
>>838331
На коре только новые модули/сервисы, всё остальное на фреймворке. Никто не будет бежать переписывать всю кодовую базу на кор.
1213 1838381
>>838335
>>838331
Откровенно говоря, и старье переписывается. Но старого фреймворк кода еще горы, и джуны еще много лет будут за него садится. Знать нужно и фреймворк, и кор.
1214 1838675
>>835547

>Последние 3 года всех кого знаю пилят только АПИ точно также как и жава, а весь фронтенд в отдельном репо на всяких Ангулярах и Реактах.


Сейчас же в ASP.NET Core есть Blazor Server (WebAssembly на вебсокетах).
1215 1838918
>>838675
Он только только продакшн френдли стал. И он не для всех проектов подойдёт. Для тяжёлых клиентов надо однозначно Blazor выбирать вместо всяких реактов/ангуляров. Для остального надо думать.
1216 1839037
>>838324
Я содал словарь с разными типами.
Да, ToString() возвращает строку из числа и строки, чтобы показать её, эту строку - в консоли.
1217 1839138
>>838918

>И он не для всех проектов подойдёт.


Почему не для всех? По вебсокетам дешевле общаться и отзывчивость лучше. Есть автоматическое переподключение. Если вебсокеты недоступны, то переключается на SSE или Long polling. Можно пересылать данные и файлы в бинарном формате MessagePack.
1218 1839271
>>838311
var obj = new { key1 = "value1", key2 = "value2" }
1219 1839720
На с# можно написать шутер?
1220 1839723
>>839720
По типу варфейса, кс или пупк
1221 1839739
>>839720
Escape from Tarkov на C# написан.
1222 1839800
Когда дотнет 5?
1223 1839802
>>839720
В Юнити например
1224 1839849
>>839739
Это многое объясняет...
1225 1839888
>>839720
https://devblogs.microsoft.com/dotnet/choose-a-net-game-engine/
Открой статью, там ссылки на движки, кликай на каждый из них и смотри что на тех движках пилят. Там хоть шутек, хоть рпг, хоть VR. Например https://stride3d.net
1226 1839889
>>839800
скора. вроде бы даже в ноябре будет презентация
1227 1839892
>>839800
10 ноября.
1228 1839926
>>837504
Сап, шарпач! Это снова я! Все вышеотвеченные ответы понял, принял.

Возникла новая проблема. Читаю документацию по этой авалонии, сделанной любителями и пытаюсь воспроизводить хеллоуворлд. И первое что я пытаюсь сделать, чтобы при нажатии на кнопку вызывалось событие. Мне предлагают три варианта:
1. Прибиндить простую команду.
2. Прибиндить команду Reactive UI (кстати, добавочный вопрос, кем сделан этот и может лучше мне его рассмотреть? Почему вообще авалония эта к нему цепляется, как к зависимости? Не, я конечно и сам погуглю, но и анона бы почитал)
3. Пробросить нормальное классическое событие. И вот тут возникает проблема. Когда я пишу <Button Content="Click Me" Click="OnClick"> клик подчёркивается и пишет, что unable to find suitable setter or adder bla-bla-bla... Я что, должен что-то подключить? Но я делаю в точности по референсу в туториале. Ожидается, что такая фундаментальная вещь, как обработчик нажатия кнопки, должна быть подключена из коробки. Или нет? Хуета какая-то, простихоспаде.
1229 1840046
>>839926
1 угу бинди команды
2 авалония умеет понимать Reactive UI - его команды свойства и так далее правильно.
3 когда пробовал (давно) то было вот https://github.com/AvaloniaUI/Avalonia/issues/1153
щас не знаю. да и вообще нужно не click а tapped вроде бы http://reference.avaloniaui.net/api/Avalonia.Input/InputElement/1F79D61A

выбор между 1 и 2 фломастеры. 2 получишь так, а 1 самому придется фреймворк писать. Для меня это изи и я выбрал 1. но потом ничего не выбрал, потому что мыльность шрифтов в авалонии под винду нет лечения.
1230 1840089
А может кто-то из анонов протестить мой проект на предмет ошибок?
в замен могу оставить тестовый акк и 50 гигов квоты на нем
1231 1840099
Есть класс, в котором хранится переменная, которую я хочу изменять из другого класса. Если я создаю экземпляр класса
MyClass Class = new MyClass();
через него обращаюсь к переменной и изменяю её, то в следующий раз у неё оказывается то же, неизменённое значение. Как это сделать нормально?
1232 1840122
>>840099
MyClass Class = new MyClass(); создает локальный инстанс. потому никто другой ее не видит - она каждый раз создается. нужно присвоить ее внешнему чему нибудь
1233 1840131
>>840122
Я уже понял, что я постоянно копии создаю. Но как это решить нормально?
1234 1840132
>>840131
нет никакой особой магии. те же правила, что в и однопотоке
представь что ты вызываешь метод с этим MyClass Class = new MyClass(); из одного потока подряд. И подумай как бы ты сохранял переменную между вызовами. Вот это и делай
1235 1840133
>>840099
Если ты под "переменная" имеешь ввиду поле/свойство класса, то просто сделай это поле/свойство статичным.
1236 1840144
>>840133
Во, это сработало.
1237 1840279
>>840144
Это был первый шаг на пути к говнокоду и неуправляемой архитектуре, которую надо будет с нуля каждые 2 года переписывать.
1238 1840484
>>840279
да ну бред же.
откуда у анона проект который проживет 2 года
image.png40 Кб, 1191x329
1239 1840583
Доброй ночи. Подскажите неопытному масленку почему возвращается результат тат работы кода (который ниже)
True, False, True, True
Почему во втором случае False хотя строка не менялась.
image.png16 Кб, 441x339
1240 1840585
Доброй ночи. На связи unityдрочер. Есть задача дать возможность персонажу динамически изменять слой на котором он находится, но никаких рабочих методов я так и не нашел, это вообще возможно и если возможно то как?
Ниже пример моих попыток:
1241 1840622
>>840484
вообще да, судя по его комментам этот какой-то студ проект, который сразу после сдачи в /dev/null
1242 1840625
>>840583
Потому что s2 и s3 это ссылки на интернированную строку, а string.Format (s1) это ссылка на ново созданную строку, если обернуть его в string.Intern то результатом второго сравнения будет True.
1243 1840633
>>840583
Ты зачем одно и то же в каждом перекате спрашиваешь?
1244 1840752
>>840585
Уже не надо, сам нашел
1245 1840796
Есть приложение на C#, которое написано на winforms. Сейчас потребовалось сделать кроссплатформенный интерфейс. Какие могут быть дальнейшие шаги и варианты? Слышал про GTK#, но он как будто какой-то старый и чето документация не особо хорошая. Есть вроде Avalonia, насколько тяжко будет переходить на неё, если все завязано на winforms да еще и куча компонентов от devexpress. В общем, поделитесь опытом или дайте советы, какие могут быть варианты.
1246 1840805
>>840046

> но потом ничего не выбрал


На какой UI перешёл в таком случае?
1247 1840812
>>840805
ни на какой. остался на WPF. В нем есть TextOptions.TextRenderingMode

>>840796
варианты это uno но это, как я понимаю, вебвью какой то а не натив
или авалония
или QT

и даже если на авалонию (или uno) перегонишь код как есть в основном (не внедряя MVVM) то контролы придется создавать самому. в XAML это конечно проще чем формсы, но все же это знать надо.
Можешь подождать MAUI но хз че оно там будет еще....и когда.
1248 1840838
>>840812

> остался на WPF


Не катит. Оно гвоздями прибито к шындовс. А я ищу замену устаревшему морально Lazarus FreePascal IDE который write once - compile everywhere с библиотекой LCL, кросплатформенным клоном Delphi VCL, которая в винде враппится в win32, в линуксе, в окружении KDE враппится в Qt, в окружении гнома враппится в GTK, в окружении андроида в андроид, и так далее. И всё это создано и отполировано ещё в нулевых. Я не перестаю охуевать от того, что замшелым дидам-паскальщикам это всё доступно искаропки, а молодые шутливые шарпобоги не имеют возможности одним росчерком пера одной распальцовкой клавиатуры создать универсальное окно и нахуярить в него универсальных контролов/виджетов, которое система автоматически встроит в целевую платформу, юзая нативные интерфейсы этой платформы.
Воспользуюсь советами второму анону. Изучу приведённые варианты.
1249 1840842
Правильно ли я понимаю, что async-await просто упрощают работу с тасками? Или они добавляют какой-то новый функционал? Вот есть допустим такой код https://ideone.com/zCEfZ4 , как можно переписать его на async-await, чтобы ход исполнения оставался прежним?
1250 1840848
>>840842
это сахар чтобы не лепить калбэки или цепочки методов в простых случаях когда обычная асинхронщина
1251 1840851
>>840848
Я не знаю какая асинхронщина обычная, а какая нет, у меня нет такого опыта.
1252 1840854
Клиент-серверное приложение это два приложения или одно, но разграниченное по функционалу?
1253 1840858
>>840854

>


>


я не правильно вопрос задал, оно ПИШЕТСЯ как два приложения или как одно?
1254 1840859
>>840851
Вот, посмотри этот урок. Лично я только после этого видоса этого хача разобрался с асинками-эвэйтами
https://www.youtube.com/watch?v=oGxZuq2Ye2Q
мимо
1255 1840860
>>840858
>>840854
И так можно, и эдак. Вопрос вкусовщины.
1256 1840861
>>840860
у меня голова ломается когда я пытаюсь в этом разобраться, есть какие-то учебники которые этообьясняют?
1257 1840864
>>840861
Я бы начал с википедии, а дальше по ссылкам на АИ.
1258 1840877
>>840842
async-await избавляет тебя от необходимости контролировать всё что связанно с потоками и их выполнением, упрощают работу с ними и делают твой код намного читабельнее.
Проблема вот этого кода:
https://ideone.com/zCEfZ4

В том, что каждый вызов Thread.Sleep блокирует поток, в то время как он мог бы выполнять полезную работу и не занимать место в памяти без пользы. Если заменить всё на async await и Task.Delay, то весь код может выполняться в рамках одного потока. Т. е. помимо меньшего потребления памяти за счёт отсутствия необходимости создавать дополнительные потоки, улучшается и производительность за счёт меньшего переключения контекстов между потоками.
1259 1840883
>>840851
await (в любом языке) позволяет переписать цепочку калбеков/продолжений в линейный вид
например псевдокод
(посади дерево).continueWith(построй дом).continueWith(роди сына)
в линейную
await посади дерево
await построй дом
await роди сына

коих 95 методов

но если тебе нужно запустить несколько (посади дерево) одновременно, то тебе уже понадится заводить объект Task

но и там для вместо continueWith для ожидания результата каждой таски поможет await.
но это уже не полноценная замена. ведь await ожидает в данном месте и пока не дождется дальше не пойдет.

например запустил ты 3 таски (посади дерево)
и у тебя 3 таски task1, task2, task3
и ты делаешь
await task1
await task2
await task3
то он остановится и будет ждать task1 и даже если task2 уже все, то оно об этом не знает. потому что это эквивалент

task1.continueWith(
task2.continueWith(
task3.continueWith(

}
}
)

но даже тогда continueWith приходится редко.
1259 1840883
>>840851
await (в любом языке) позволяет переписать цепочку калбеков/продолжений в линейный вид
например псевдокод
(посади дерево).continueWith(построй дом).continueWith(роди сына)
в линейную
await посади дерево
await построй дом
await роди сына

коих 95 методов

но если тебе нужно запустить несколько (посади дерево) одновременно, то тебе уже понадится заводить объект Task

но и там для вместо continueWith для ожидания результата каждой таски поможет await.
но это уже не полноценная замена. ведь await ожидает в данном месте и пока не дождется дальше не пойдет.

например запустил ты 3 таски (посади дерево)
и у тебя 3 таски task1, task2, task3
и ты делаешь
await task1
await task2
await task3
то он остановится и будет ждать task1 и даже если task2 уже все, то оно об этом не знает. потому что это эквивалент

task1.continueWith(
task2.continueWith(
task3.continueWith(

}
}
)

но даже тогда continueWith приходится редко.
1260 1840884
>>840812
Вот мои поиски все тоже ведут в основном к Avalonia. Понятно, что придётся самим контролы писать и у devexpress не взять. Но, боюсь, что вариантов других нет, ибо компании нужна кроссплатформенность. В идеале, конечно, в веб это всё перенести, но приложение слишком нетривиальное и я боюсь представить сколько на переписывание уйдёт лет.
1261 1840886
>>840838

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


ну это хамарин формс такой. хотя вряд ли мауи (что идет ему на замену) будет такой же в плане работы на десктопах. Я хз как можно решить проблему шаблонов, ведь хамл создает визуальный вид контрола, а нативные контролы они не такие гибкие. Авалония вот использует свой рендер.
1262 1840887
Поцаны, а операции с разрядоебством часто используются и операции логическое умножение, сложение и тп с числами?
1263 1840889
>>840887
Используются с перечислениями которые помечены атрибутом Flags, если не понимаешь побитовые операции, то будет сложно понять как работает переключение флагов. Поэтому на базовом уровне знать нужно, иначе соснёшь.
1264 1840891
>>840889
Сук(( Понел спс.
1603797559673.png315 Кб, 1264x707
1265 1840901
>>840046

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


Получается, предпоследний пункт на пикче - ложь?
Или там просто WIP и надо просто подождать, затянув пояса?
>>840886

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


Я понемногу начинаю просекать фишку. Если бы WPF не прошёл бы мимо меня стороной, я бы уже давно фишку сёк и даже сомнений бы не было. Потому что это реальный прогресс по сравнению с классическими формо-ориентированными тулкитами. Я уже неделю плотно изучаю вопрос и понимаю, что возврата назад для меня уже не будет. Ни ГТК, ни КТ, ни ВХ не обладают и 10% той гибкостью, что дают хамл-ориентированные тулкиты.
1266 1840912
>>840901
Я не знаю что означает предпоследний пункт. но за рендеринг шрифтов отвечает бэкенд Direct2D и я хз как его заставить рендерить не мыло.
WPF точно такое же мыло рендерит, но там это можно обойти и получить четкий шрифт.
у меня даже встроено вот такое

TextOptions.SetTextFormattingMode(window,
Dpi >= 144 ? TextFormattingMode.Ideal : TextFormattingMode.Display);
TextOptions.SetTextRenderingMode(window, TextRenderingMode.ClearType);
1267 1840924
>>840901
https://files.gitter.im/AvaloniaUI/Avalonia/dmOJ/Core2D-Wiring.gif
вот сделано на авалонии и даже на этой гиф видно шрифты беда
1268 1840958
>>840924
Сорян, я отношусь к противоположному лагерю людей, ради которых и было сделано это всё, мне наоборот режут глаз шрифты без сглаживания. То есть, на этой гифке мне всё видится нормальным. Никакой беды не вижу. Но, я тебя понимаю, возможность включить или выключить сглаживание по запросу пользователя должна быть.
1269 1840976
>>840958
сглаживание есть всегда. вопрос в том какое оно.
1270 1840991
>>840877
Thread.Sleep в том коде это у меня не просто ожидание чего-то, а симуляция работы.
Снимок.PNG18 Кб, 515x409
1271 1841002
>>840958
вот на моем экране при моих настройках Clear Type
надеюсь двач не пережмет
1 WPF без ничего
2 Display + Clear Type
3 Avalonia
1272 1841008
>>840991
Так это понятно, только я сомневаюсь что у тебя там вычисления на несколько секунд. В любом случае нужно использовать async/await и класс Task, особенно если речь идёт о IO операциях, таких как обращение к диску или сетевому адаптеру.
1273 1841011
>>840991
Работу нужно не симулировать, а делать )

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

Воспринимай await как тот же ContinueWith только переписанный иначе, где тело продолжения это от await и до конца метода.

Сахар же чтобы уйти от калбэков

в котлине же вон вообще код с корутинами не отличить без них без подсказки редактора.
1274 1841024
>>841011

> освобождает поток дав поработать кому то другому кому нужнее



Сам по себе поток не занимает процессорное время, т. е. Thread.Sleep не тратит процессорное время, он тратит память в котором хранит все данные о себе.
1275 1841035
>>841024

>Сам по себе поток не занимает процессорное время


он занимает сам поток. И если у тебя 1 поток (например гуи) - у тебя лаги или все висит. Количество потоков пула тоже конечно. займешь их все и остальные задачи станут в очередь дожидаясь реального освобождения потоков.
1276 1841434
Почему сервер на SocketAsyncEventArgs работает быстрее чем если использовать TcpListener или обычные сокеты с ReceiveAsynс? Провел около 10 тестов и всегда эти эвентАрги - выигрывают.
1277 1841451
ура. наконец то сделали d:PropName
как же мне этого не хватало. В андироид студии давно есть, а тут черт знает что.
1278 1841462
>>841434
Потому что SocketAsyncEventArgs более низкоуровневая концепция чем TcpListener. Т. е. ты вырыл тоннель которым пользуешься только ты и спрашиваешь почему по этому тоннелю ты добираешься из пункта А в пункт Б быстрее, чем по общественной дороге.
Либо твои тесты хуйня.
1279 1841695
Гайз с чего посоветуете начать изучать как первый язык? И где бы взять задачи для практики?
1280 1841750
>>841695
Шапка треда тебе для чего?
1281 1842185
>>841695
Зумер с конца тред читает..
1282 1842251
Можно ли сделать HashSet из объектов ссылочного типа, для которых не переопределен GetHashCode.
Как я понял, для получения GetHashCode будет использоваться адрес памяти, где расположен объект.
Но если GC начнёт утрамбовывать память, то адрес объекта может измениться.
Как тогда это будет работать?
1283 1842264
>>842251

>Можно ли сделать HashSet из объектов ссылочного типа, для которых не переопределен GetHashCode.



Можно.

>Как я понял, для получения GetHashCode будет использоваться адрес памяти, где расположен объект.



Откуда ты это понял? Обращаться к памяти при вызове GetHashCode было бы весьма затратно, особенно учитывая, что GC перемещает объекты в памяти со временем.

>Как тогда это будет работать?



Не переопределенный GetHashCode всегда возвращает одно тоже значение для объекта n на протяжении всей жизни приложения. Сборщик мусора никак не влияет на это поведение.
1284 1842293
>>842264

>Не переопределенный GetHashCode всегда возвращает одно тоже значение для объекта n на протяжении всей жизни приложения


А как оно берется-то? Откуда?
Или при инициализации объекту добавляется автоматически поле в памяти со значением хеша?
Если например, поля объекта - такие же ссылочные типы, без данных типа значения.
1285 1842316
>>842293

>А как оно берется-то? Откуда?



Зависит от хеш-функции. При первом вызове GetHashCode CLR генерирует хеш-код и помещает его в синхронизационный блок объекта, дальнейшие вызовы GetHashCode возвращают данное значение.
1286 1842460
У меня пара вопросов.
1. Стоит ли резать основной класс на подклассы. Чтобы было понятно. Допустим это текстовый редактор. Я беру и режу его на FileReader, FileSaver, TextFormatter и т.д. внутри основного класса уже создаю инстансы этих вот подклассов.
2. Насколько стоит думать о близасти конвенциональным понятиям "читаемого" кода? Допустим, ведь можно написать вот так вот:
async Task<ReadOnlyMemory<byte>> ReadData(byte[] buffer, CancellationToken cancellation) => buffer[..(await this.StreamReader.ReadAsync(buffer, cancellation))]
Как по мне оно все еще читаемо, но при этом в 1 строчку вышло, в противовес стандартным примерам где:

async Task<ReadOnlyMemory<byte>> ReadData(byte[] buffer, CancellationToken cancellation)
{
int count = await this.StreamReader.ReadAsync(buffer, cancellation);
return buffer[..count];
}

Ну или если с циклами так вообще смотрите как удобно:

int i = 0;
while( (i = await ReadData(buffer, cancellation) > 0)
{
что-то делаем с данными из буфера
}

и как это будет в классическом примере? А как-то так:
while(true)
{
int items = await ReadData(buffer, cancellation);
if(items == 0) break;
что-то делаем дальше
}

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

А, ну и последнее. В исходниках на гитхабе постоянно вижу эти if(condition) throw new Exception("!!!Some condition happened!!!");
На кой оно надо? Почему не писать так, чтобы такой вот херни не происходило? Ты же сам блин пишешь, зачем кидать эти исключения, вызывая падения там, где можно было бы просто не допустить его возникновения? Нет, блядь, каждый метод как поехавшие проверяют на null, будто он возьмется из воздуха само по себя, если ты сам его туда не передашь, а если передал, ну, сам дурак, все равно программа упадет при и ты увидишь где, а следовательно просто сделаешь так, чтобы не передавался null.
1286 1842460
У меня пара вопросов.
1. Стоит ли резать основной класс на подклассы. Чтобы было понятно. Допустим это текстовый редактор. Я беру и режу его на FileReader, FileSaver, TextFormatter и т.д. внутри основного класса уже создаю инстансы этих вот подклассов.
2. Насколько стоит думать о близасти конвенциональным понятиям "читаемого" кода? Допустим, ведь можно написать вот так вот:
async Task<ReadOnlyMemory<byte>> ReadData(byte[] buffer, CancellationToken cancellation) => buffer[..(await this.StreamReader.ReadAsync(buffer, cancellation))]
Как по мне оно все еще читаемо, но при этом в 1 строчку вышло, в противовес стандартным примерам где:

async Task<ReadOnlyMemory<byte>> ReadData(byte[] buffer, CancellationToken cancellation)
{
int count = await this.StreamReader.ReadAsync(buffer, cancellation);
return buffer[..count];
}

Ну или если с циклами так вообще смотрите как удобно:

int i = 0;
while( (i = await ReadData(buffer, cancellation) > 0)
{
что-то делаем с данными из буфера
}

и как это будет в классическом примере? А как-то так:
while(true)
{
int items = await ReadData(buffer, cancellation);
if(items == 0) break;
что-то делаем дальше
}

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

А, ну и последнее. В исходниках на гитхабе постоянно вижу эти if(condition) throw new Exception("!!!Some condition happened!!!");
На кой оно надо? Почему не писать так, чтобы такой вот херни не происходило? Ты же сам блин пишешь, зачем кидать эти исключения, вызывая падения там, где можно было бы просто не допустить его возникновения? Нет, блядь, каждый метод как поехавшие проверяют на null, будто он возьмется из воздуха само по себя, если ты сам его туда не передашь, а если передал, ну, сам дурак, все равно программа упадет при и ты увидишь где, а следовательно просто сделаешь так, чтобы не передавался null.
1287 1842511
>>842460

>1. Стоит ли резать основной класс на подклассы.



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

>Как по мне оно все еще читаемо



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

>Ну или если с циклами так вообще смотрите как удобно:


>while( (i = await ReadData(buffer, cancellation) > 0)


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

>В исходниках на гитхабе постоянно вижу эти if(condition) throw new Exception("!!!Some condition happened!!!");


>Ты же сам блин пишешь



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

>

1288 1842514
>>842460
1 резать нужно всегда ибо SRP, но они не будут подклассами же. Хз о чем ты
2 ну можно ведь пойти дальше и принимать не byte[] buffer, а вообще Span
ну или вообще yield
3 если пишет значит ожидает что может пойти не так и что внутри не будет исключений, а значит сам обязан кинуть исключение
image.png15 Кб, 607x200
1289 1842681
Уважаемые, нужна ваша помощь! Ситуация следующая
Имеется html форма в которую через инпут заливается картинка, далее это дело отправляется POST запросом в Контроллер в виде параметра IFormFile.
Тут возникает вопрос: как мне из этого IFormFile'а сформировать что-то, что я смогу отправить методом Http.PostAsync в API в виде (опять же) POST запроса? Я пытался упаковать эту картинку в StreamContent, StringContent, но на всё один ответ - "Unsupported media type".
1290 1842719
>>842681
PostAsync(endpoint, new StreamContent(photo.OpenReadStream()));
1291 1842771
Ох, ребятушки, как же я оргазмирую!

>>840838

> А я ищу замену устаревшему морально



Я НАШЁЛ!
И это... Eto!
Нашёл его, изучая предложенную мне аноном авалонию, в которой Eto в ряде случаев юзается, как бэкэнд. Я загуглил, а там! Полноценный ЮИ-фреймворк, да ещё есть возможность описывать формы на JSON. Это второй бурный оргазм, нахуй!
1292 1842778
>>842719
А распечатать это как на API?

забыл сказать, что собираю на asp net core
1293 1842781
>>842778
Не понятно что ты подразумеваешь под "распечатать это как на api"
1294 1842783
А существует ли вообще джуно шарпо работа, где не надо шлепать winforms, wpf или html/css? Сука, каждая вакансия это или легаси на wpf или около-фуллстэк на асп с обязательным знанием джс.
Мне просто нравится язык, я не хочу шлепать формы.
1295 1842786
>>842783
А что ты на нём писать собрался, если не wpf/winforms и не вебформы? Игры еще есть на юнити и не только.
1296 1842789
>>842781
Ну ты показал, как это отправить в соответствующую функцию на API пост-запросом, но на API должен быть код, который это откуда-то достанет. Я пытаюсь несколько часов это достать, как параметр принимающей функции, но в результате либо null, либо Unsupported media type
1297 1842794
>>842786
Есть просто бек. Есть бек с микросервисами. Есть бек с лютой скалабельностью, параллелизацией и хайлоадом.
Наверное, есть еще тысяча и одна область, о которых я не знаю. Но я хочу верить, что программисты это не только формошлепы и веб макаки. Лучше уж тогда пинать хуи на мамкиной шее, чем пиздовать на такую работу.
1298 1842812
>>842794

>Есть просто бек. Есть бек с микросервисами.


Как видишь - нет. Либо ты фуллстэк, либо фронтенд-макака.

>Есть бек с лютой скалабельностью, параллелизацией и хайлоадом.


Это уже больше к С++ относится и серверным частям на нём, а не к шарпу.
1299 1842858
>>842812

>Это уже больше к С++ относится и серверным частям на нём, а не к шарпу.


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

> с лютой скалабельностью, параллелизацией


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

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



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

>TPL дает охуенные фичи для паралеллизации



В TPL нет ничего нового и сверхъестественного, это просто удобная часть стандартной библиотеки, которая в других языках, в той же жабе, существовала в виде пользовательских библиотек.
1301 1842938
>>842783
Я о такой не знаю. Мидло-щарпо-работа без фронта есть.
1302 1843073
>>842783
ну так то WPF это вам не хтмл/жс
нормульненько
1303 1843165
Будущее дотнета.
https://www.youtube.com/watch?v=kX0eX5tDGgc
1305 1843193
>>842783
У нас фронта под дотнет в принципе нет, поэтому даже джуны клепают серверную часть, не трогая фронт-енд. Но HTTP1/2 протоколы знать всё равно нужно вместе со всякими куками, Etag'ами, request/response'ами.
1306 1843237
>>842783
А что ты подразумеваешь под джуноработой? Просто интересно. Вот когда я пришел на дужна за 11к рублей, мне сказали: Смотри, Вась, тут заказ есть, нужно разработать решение на микросервисах, вот тебе требования, вот пожелания, - пиздуй делать, через месяц не будет MVP с фронтом на ангуляре - досвидос. Я за это время выпил энергетиков на большую сумму чем мне платили, благо все еще на шее мамки сижу. Потом правда до 20к подняли зп, теперь доволен как слон, на энергетики и даже сигареты хватает.
1307 1843239
>>843237

>Вот когда я пришел на дужна за 11к рублей,


пришел когда? даже джун не может зарабатывать меньше чем грузчик.
1308 1843245
>>843239

> пришел когда?


В позапрошлом году.
1309 1843267
>>843245
а я думал крепостное право давно отменили. Вижу ошибался
Привык к тому что джуну 800-1000 долларов
1310 1843300
>>843165
И где же Java interoperability?
1311 1843314
>>843300
а зачем?
1312 1843548
>>843267
11к платят трейни, джунам я считаю минимум 25к, либо 20к на три испытательных месяца, а дальше нормальная зп
1313 1843605
Проблема не решилась, спрошу заново:
Имеется ASP net core приложение.
Пользователь в инпут формочку загружает картинку, эта картинка POST запросом отправляется в функцию, обрабатывающую POST запросы по данному адресу. В этой функции картинка появляется в виде IFormFile интерфейса в качестве параметра функции. Теперь нужно как-то отправить эту картинку по известному Uri в другой контроллер и как-то эту картинку в нем прочитать
1ый пик - Функция извлекающая картинку из формочки и пытающаяся отправить картинку по другому адресу при помощи PostAsync
2ой пик - функция, которая должна принять картинку, но вместо этого если указать у нее какой-либо параметр, то возвращает код Unsupported Media type, если не указывать параметры, то не понятно, как получить отправленную картинку
1314 1843608
т.е. если параметр указать - функция даже не начинает выполняться, сразу Unsupported media type
1315 1843619
>>843605
ну так посмотри что там за хидеры и вообще как шлет данные это твой api.PostAsync

твой new StreamContent хз какие хидеры передает, ты их не ставишь, а дефолтное там хз

и на принимающей стороне хз чем должен думтаь фреймворк чтобы впихнуть полученные данные в object photo
1316 1843622
>>843619
Если ты про множество Headers, то что у StreamContent'a, что у HttpClient'a api оно пустое
1317 1843630
>>843619

>хидеры


Хедеры
1318 1843646
>>843622

>то что у StreamContent'a, что у HttpClient'a api оно пустое


потому и отбивает его фремворк как "я не знаю какой Content-Type у того что мне шлют и я хз че с ним делать". Это первая проблема

>Хедеры


Кажется у нас новый председатель
1319 1843687
>>843646
Поставил стрим контенту контент тайп application/octet-stream, вопрос как прочитать это остается открытым
1320 1843697
>>843687
да точно так же
или запрос не стримконтент, а полноценно
MultipartFormDataContent в котором уже стримконтент и которое неотличимо от "отправляю форму" и на получении тот же IFormFile

или на клиенте [FromBody] но вряд ли там можно получить стрим как IFormFile (все таки апи), тогда [ReadableBodyStream] к action и вычитывать тело запроса самому
1321 1843712
>>843687
и если так то хорошо бы и Content-Length прокинуть
1322 1843721
>>843712
В принимающей функции Request.Headers["Content-length"] итак 26838 возвращает, без моей помощи
1323 1843732
>>843697
Мне принять картинку надо в API, можешь написать как это сделать?
Что значит "[ReadableBodyStream] к action" я не понимаю

MultipartFormDataContent для API мне видится как костыль, но если вариантов не будет, то попробую его, спасибо
1324 1843747
>>843732

>[ReadableBodyStream]


да хз. увидел тут
https://stackoverflow.com/questions/40494913/how-to-read-request-body-in-an-asp-net-core-webapi-controller

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

так что просто читай тело запроса - оно и есть содержимое картинки

public IActionResult SomeAction()
{
using (var reader = new StreamReader(Request.Body))
{
....
}

...
}
1325 1844183
>>843548
Ну как, меня сразу взяли в штат и дали работу, которую потом отдали заказчику и заказчик доволен был. Вот.
Сейчас, спустя 2 года - 20к получаю. Вот.
1326 1844204
>>844183
бел. рублей? как это 20к спустя два года? шутка какая-то? или гос. контора?
1327 1844215
>>844204

> бел. рублей?


Российских

> как это 20к спустя два года?


Ну, если сравнивать с 11к и учитывая что я на мамкиных котлетках с макарошками - нормально.

> или гос. контора?


Внезапно - лидер в своей области, причем мировой, мать его(там даже пару лет назад скандал был, дальше не буду распространяться, т.к. еще узнаете где я работаю, а тут за очернение репутации фирмы и выпизднуть могут). Просто те кто управляют - предпочитают себе выписывать каждый квартал премию с 6 ноликами в долларах, а за проебы все на кодеров сваливать, и за это тут постоянно говорят про то что кодеры не справились, ну да, блядь, штат 20 человек - 50 проектов, сука, конечно не справились, у вас же всяких продажников 500 человек и у них продвижени по службе - охуенные идеи, которые скидывают на кодеров, и потом кодеры виноваты что не выстрелило, ведь охуенная идея по всяким рассчетам должна была миллиарды денег принести, а это кодеры такие вот хуевы и похуй что даже на джуна вешают полноценные проекты, похуй что на кажодом челе по несколько - расширять штат мы не будем, это вы как-то работайте быстрее. Благо хоть понимают, что таких вот дураков не много и просто так не выгнать.
1328 1844227
>>844215

> таких вот дураков


Воистину при капитализме капиталист платит ровно столько, за сколько готовы работать. Как же они рады, что у них в штате 20 дурачков, которые работают за зарплату дворника и не увольняются.
1329 1844229
>>844227
А просто некуда идти. Тут знания специфичны очень и соотвсетственно ты будешь вынужден с позиции максимум мидла начать на другом месте, единственный конкурент - платит столько же, но по договору, который нужно было подписать после скандала, идя конкретно к нему ты должен выплатить штраф в размере всех ЗП которые ты получал пока работал тут. Это многих напрягает, особенно тех кто работает лет по 15.
1330 1844241
>>844229

> А просто некуда идти.


Во фриланс, нахуй. Что угодно лучше такой галеры ебучей.
1331 1844244
>>844229

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


И кстати, осторожнее с такими подробностями. По такой юридической практике контору уже принципиально возможно вычислить. А двач славен шерлоками комнатными.
1332 1844253
>>844183
итить. меня на трейни брали 800 баков
через 3 месяца уже 1000 и дальше рост по желанию.
1333 1844265
>>844253
Ну, рад за тебя.
1334 1844268
>>844265
Не нужно радоваться за меня. Лучше себя пожалей. Джун не должен получать меньше 1000(не рублей) тем более через 2 года.
1335 1844622
>>844215
Скажи честно ты поехавший или просто траль? Почему ты не ищешь работу в норм компаниях? Есть скайп, есть зум, нет хочу за 11к хуй сосать, нахуй переезжать куда-то?
1336 1844710
>>844215
Репортите этого, он лжец и пропагандон.
1337 1844714
>>797054 (OP)
Такс, Repository Pattern используемый над EF Core официально полнейшее говно по многим причинам, но есть ли более-менее адекватные альтернативы?

https://lostechies.com/jimmybogard/2012/10/08/favor-query-objects-over-repositories/

Вот один из примеров на что его можно заменить, как минимум плюшки IQueryable не теряются, но блять, под каждый пук определять отдельный класс, это как-то сомнительно. Кто-то пробовал придумать универсальное решение, или может нактыкался на него?
1338 1844719
>>843548
Лол, я без опыта вообще первую работу нашел на ЗП 60к+, просто не надо в себе сомневаться и надо пробовать влетать всюду куда предлагают. Если ты завалишь собес тебя никто не покусает, а если пройдешь то на реальном проекте можно быстро дотянуть то чего не знаешь, и это понимают и те кто собеседуют, на собесах чаще смотрят просто на то как ты мыслишь и рассуждаешь, чтобы понять что ты из себя представляешь.
1339 1844864
>>844714
зря ты лезешь в эту тему. спокойствия теперь никогда не найдешь
а так вот читани https://habr.com/ru/post/259829/

А так одних только QueryObject куча вариантов
и тут уже фломастеры ибо нет идеала
1340 1845038
>>844710
Тебе показать выписку по ЗП? 20к после вычета налогов, стаж 2 года.
>>844719
Вангую что ты ДСоблядок. Конечно, у вас и в макдаке каждый хуй по 300к получает, что удивляться-то, сосете кровь из регионов. А тут вот кодеры с 15 летним стажем получают 50к и довольны как не знаю кто, я с 20к тоже вроде доволен, только вот хочется видеокарту обновить(770 уже не тянет), но видимо подожду следующего поколения.
1341 1845077
>>845038
просто тебе нужно уйти в другую контору. Для программирования иметь зарплаты 1000-3000 енотов это нормально ожидаемо

да в этой же теме обсуждали вакансию, где мелькала сумма от 100к для мидла (+ переиндексация)
1343 1845135
>>844714

> Repository Pattern используемый над EF Core официально полнейшее говно по многим причинам


Да как раз нет. Если тебе действительно нужны фишки IQueryable снаружи - делаешь интерфейс для репозитория который этот твой IQueryable возвращает и этот интерфейс просто расширяет другой интерфейс обычного репозитория, банально вот у тебя IAsyncRepo<T> вот у тебя IQueryableRepo<T>. Другое дело, что нахуй оно надо-то? Вот серьезно. На высоком уровне ты просто инжектишь сервис который уже все под капотом сам сделал, даже с репозиторием не работаешь напрямую. А внутри этих сервисов - просто делаешь что тебе надо.
Ну и да, сами майки почему-то в своих примерах с архитектурой используют репозиторий над EF. И норм у них, красивенько все удобно.
Опять же, если нужно будет затестить саму бизнес-логику, тебе не нужно париться с наполнением БД и прочей залупой, ты просто замокал репозиторий и можешь нормально проверить работу сервиса на соответствие бизнес-задачам.
А чтобы такой вот аналог запросов получить - берешь https://github.com/ardalis/Specification и используешь
1344 1845218
Есть таблица в postrgeSQL, есть класс данных который надо вставлять в табличку. Поля бд соответствуют полям класса 1 в 1. Ключевых полей нет. Есть Npgsql, Dapper и Dommel.
Проблема в том,что не работает команда:

using (var connect = new NpgsqlConnection(someConnectionString))
{
connect.Insert(dataSet);
}

Класс примерно такой
public class DataSet
{
public int data_count_1 { get; set; }
public int data_count_2 { get; set; }
}
1345 1845249
>>845135

>Другое дело, что нахуй оно надо-то?


Это все выглядит как лишний уровень абстракции, который не служит никакой цели, кроме как чтобы Unit тесты было писать якобы проще при том, что в EF Core уже есть абстракция IDbSet, которая по сути и есть репозиторий, в инете в целом, легко найти статьи о том, почему утверждение что тестить EF Core напрямую сложно или невозможно - это не совсем правда, так еще такой подход закрывает плюшки ORM. То что майки сами его используют в каком-то туторе, и то что его используют во многих примерах "Best Practicies" - еще не значит что его надо пихать абсолютно везде. Я ищу альтернативы, потому-что, к примеру, если мне не нужны Unit тесты в каком-то маленьком-простеньком проекте, то репозиторий по сути только мешает, но при этом я бы не хотел иметь прямые зависимости от EF Core в сервисах или контроллерах, шобы все было по DIP.

Вообще, на базовом уровне, еще давно когда я читал по нему туторы меня смутила необходимость определять методы навроди "GetHuinyaWithZalupa" в репозиториях, при том что существует IQueryable, тогда я забил, но сейчас мне это не дает покоя. Очень сомнительная хуйня, ты по сути сам себя сознательно ограничиваешь при этом можно сказать что ты в некотором смысле даже нарушаешь OCP, и не понятно какие реальные профиты от этого получаешь. Я придумал реализацию Generic Repository на основе IQueryable, которая не требует определять отдельные интерфейсы под каждую отдельную сущность, на западных ресурсах буржуи сказали что вариант интересный, но использование репозитория вместе с EF Core раскритиковали, в целом, указав на то что этот функционал уже есть искаропки. Вот решил еще у соотечественников спросить.
1346 1845286
>>845249
Clean code, все дела. С репозиториями и GetHuinyaWithZalupa() методами у тебя получается больше кода, но каждый кусок отвечает только за свой функционал. Репо хорошо ложатся в CQRS. С репо ты напрочь закрываешь какие-либо зависимости: сегодня Dapper, завтра EF, там у тебя постгрес, тут у тебя монго. А то ведь данные и с какого-нибудь сервиса прилетать могут. Через репо ты абстрагируешься от источника данных и отдаёшь бизнес логике только удобовариваемые контракты, по которым она работает с данными.

Кода больше, но поддерживать и расширять такой проект, когда он перевалит за 1кк строк, просто. Каждый девелопер может свой кусок менять не боясь за то что поломает чужую логику или наделает кучу merge conflicts.
1347 1845289
>>845218
А какая ошибка ?
1348 1845345
Это нормально постоянно дергать context.AuthenticateAsync? А то у меня есть несколько схем аутентификации, где-то нужна одна, где-то другая. Или можно как-то запихать все принциплы в свойство юзер?
1349 1845366
>>845345

> Или можно как-то запихать все принциплы в свойство юзер?


Я уверен, что с помощью ООП-полиморфизма можно.
1350 1845439
>>845289
Пишет что не ключа для name_spase.table
Если сделать поля без _ везде, то он нормально работает.
Я так понял нужно сделать
public class DataSetMap: DommelEntityMap<DataSet>
и как то ее инициализировать, но возможно просто использовать атрибуты для полей класса, правда я не понял каких.
1351 1845584
>>845366
А чуть подробнее?
1352 1845642
>>845584
abstract class SobachiyZvuk : AudioComponent;

class SobachiyLai : AudioComponent;

class SobachiySkuliozh : AudioComponent;

class SobakaGeneric<T> {

public T Zvuk { set; get; }

public SobakaGeneric<T>()
{
if (T is AudioComponent) Zvuk = new T();
}

}

И НАКОНЕЦ

var SkuliashyaiaSobaka = new SobakaGeneric<SobachiySkuliozh>();
var LajushyaiaSobaka = new SobakaGeneric<SobachiyLai>();

Как-то так, я полагаю
1353 1845738
>>845642
Ты вообще про что?
1354 1845874
>>840625
Хорошо а в первом случае почему true ?
Ведь там по идее будет сравнение по ссылкам на объект в они будут отличаться потому что будет выполняться метод Join. Или я не прав ?
1355 1845895
>>845874
Строки это иммутабельный тип и сравнение у них происходит как у значимых типов т. е. по значению.
1356 1845904
>>845895
и????
1357 1845910
>>845904
Значения строк одинаковы, поэтому в первом случае true, что тебе не понятно?
1358 1845980
Я со сложным (или нет)

Вот есть такой язык VBA (бейсик для MS офиса).Есть программы сделанные в MS Access - окошки через формы, логика на VBA.
Мне дали задачу - сделать морду-интерфейс (фронтэнд) на шарпе

Так вопрос - можно ли из C# вызывать функции написанные на VBA?

Потому что переносить весь старый бейсиковский код на шарп - легче застрелиться.
1359 1845991
>>845980
Сделай динамическую библиотеку на базике да вызывай ее откуда хочешь
1360 1846019
>>845980
Можно, но только при условии, что код на VBA является CLS-compliant кодом, т. е. в нём не используются фишки конкретно VBA, в шарре например если использовать uint тип в коде шарпа, то этот код не будетс cls compliant.
1361 1846041
>>845980
Админил в начале нулевых софт, написанный в этой чудовищной среде (MS Access + VBA). Админил несколько лет. Что я могу тебе посоветовать? Беги оттуда, глупец, пока не поздно!
Несмотря на то, что ты пишешь:

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


Я рекомендую именно с этого и начать, чем раньше, тем лучше.
Можешь, как советует этот >>846019 анон, завести в солюшене два комплиантных проекта, один на ВБ.Нет с перенесённой в него логикой из акцес-формочек (и пожалуй в нём же организовать доступ к БД), собирающийся как библиотека, второй на шарпе, с первым в качестве зависимости, и он содержит фронтэнд.
Как-то так.
Замечу ещё, что просто так ты код из VBA на VB.Net не перенесёшь. Там работы будет дохуищща! И проще сразу на шарпе всё переписывать.
И ещё, у МС есть функционал для запила дотнетных расширений к офису, в том числе к акцессу. Я его никогда не пробовал в работе, но в принципе вся эта идея выглядит сомнительно. Нирикаминдую, хоть и Пастернака не читал.
1362 1846102
>>845910
почему во втором false
интернированная строка не строка что ли?
1363 1846127
>>846102
Во втором случае строки приводятся к объекту, после чего идёт сравнение объектов, а не строк, чего ты тупой то такой?
1364 1846131
>>846127
в четвертом тоже строки приводятся к объекту, после чего идет сравнение объектов.
1365 1846133
Мне нужно проверить несколько переменных на null и выполнить действия, если какие-то из них null. Для каждой переменной своё действие. Как это сделать без гигантского ifа на миллиард строк? if((string1 ?? int2?? string3 ?? double4?? string5 ?? string6) == null) не подойдёт в моём случае именно из-за того, что мне надо надо знать кто именно null и делать действия.
1366 1846139
>>846131
И какой логический вывод ты можешь сделать, глядя на переменные из второго сравнения и четвертого? Будут ли одинаковыми объекты полученные из строк? Если да, то почему? Если нет, то почему?
1367 1846143
>>846139
ну вывод там прост
в 4 случае сравниваются 2 интернированные строки и это вообще 1 объект (компилятор постарался)
в первом сравниваются строки, потому что интернированная строка это тоже строка
а во втором объекты и значит string не перегружает object.Equals, вот только он перегружает
29.jpg108 Кб, 642x941
1368 1846164
29.jpg113 Кб, 817x931
1369 1846172
>>846164
>>846133
Версия без боксинга.
1370 1846175
>>846164
Спасибо, конечно, но лучше уж if в 20 строчек, наверное.
1371 1846180
>>846175
Хотя, если их когда-нибудь будет ещё сотня, то можно будет и прикрутить.
29.jpg46 Кб, 607x245
1372 1846187
>>846175
Тогда вот так...
1373 1846192
>>846187
жуть какая то.
тут же выше обсуждалось Let котлиновское и аналог в шарпе.
он и то лучше выглядит
но имхо автор другое просил
1374 1846201
>>846133
Делай, почти как анон выше предложил, только без горожения безумных интерфейсов и фабрик. Заведи одну функцию, которая принимает аргумент и коллбэк, если аргумент = нулль, дёргает коллбэк. Просто, быстро, говняно, неподдерживаемо.
Если переменные нескольких типов, это же очевидно, что надо сделать: скопипастить функцию с другим типом аргумента.
1375 1846210
>>846192

>Let котлиновское



Можно и как в котлине. И даже лучше! Потому что котлин обосрался как всегда (пик2).
1376 1846219
>>846210
потому что правильно исползовать в котлине

str?.let {и тут не нужно сравнение на нулл}

но это еще дальше уходим от проблемы автора
1377 1846226
>>846219

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


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

>но это еще дальше уходим от проблемы автора


Никто никуда не уходил, всё то что ему нужно - если переменная null, то ничего не делаем, если у неё значение, то выполняем метод.
1378 1846231
>>846226

>Ага, потом нам понадобиться


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

>всё то что ему нужно - если переменная null, то ничего не делаем, если у неё значение, то выполняем метод.


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

на что я запихал бы все переменные и методы в List<KeyValuePair<object, Action>> и проходил бы по ним.
1379 1846250
Наконец завязал с доистористорическим web forms и решил перекатиться на ASP.NET Core MVC. Сразу же получил по ебалу. Большинство материалов расчитано на тех, кто работал хотя с ASP.NET MVC. Нихуя непонятно, прям другая вселенная.
Посоветуйте учебник для новичков в этой технологии или же материалы, которые помогут мне хоть немного наверстать упущенное время и пробелы в знаниях.
1380 1846262
>>846231

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



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

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



Так перечитай. Я тоже не правильно понял, ему нужно выполнить действие, если переменная null, т. е. заменить:

if (var1 == null) method1();
if (var2 == null) method2();
if (var3 == null) method1();

На что-то более лаконичное.
1381 1846263
>>846250
для любителей web forms сделали razor pages
А вообще ASP.NET Core MVC он как и тысячи ROR-подобных фреймворков - разобрался в общем устройстве одного и вкатится в другие (даже на других языках) просто, ведь понятно что где лежит и зачем
1382 1846264
>>846262

>В инструменте ценится универсальности


у меня молотком плохо шурупы закручиваются. только заколачиваются и потом не выковырять. Выходит молоток говно? )

>если переменная null, т. е. заменить:


признаю. он запутал меня этим
if((string1 ?? int2?? string3 ?? double4?? string5 ?? string6) == null)
1383 1846271
>>846264

>у меня молотком


Вторую часть манямирок отказался воспринимать?

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

1384 1846273
>>846263

>для любителей web forms


Я не любитель, а застрявший в этой технологии из-за места работы. Несколько лет поддерживавал древний проект, теперь приходится срочно переучиваться на самое новое, что есть в .Net по части вэба. А это, насколько мне известно, Core MVC.
1385 1846288
>>846271
ну так ?.let отлично выполняет ту задачу, которую он выполняет. Просто сверхотлично, без дополнительных if если что.
1386 1846304
>>846288
В том и дело, что не выполняет var?.let не выполнится если var == null, а ему как раз нужно чтобы выполнился если var == null и не выполнился, если иначе.
1387 1846311
>>846304

>var?.let не выполнится если var == null,


угу. потому что его задача делать другое

а вообще есть же универсальный if. зачем еще что то городить )
1388 1846315
>>846311

>нинужно вот let нужон а ета нинужно



Так и запишем!
1389 1846343
>>846226

> всё то что ему нужно - если переменная null, то ничего не делаем, если у неё значение, то выполняем метод


Выполняем метод всегда, а у метода в начале if (argument == null) return;
Всё гениальное - просто.
1390 1846354
>>846343
Во-первых.

>Я тоже не правильно понял, ему нужно выполнить действие, если переменная null


Во-вторых

>у метода в начале if (argument == null) return;


Хуевое решение, потому что условия могут поменяться для каких-то определенных переменных, либо в каких-то случая понадобится проверка на что-то еще, тогда тебе придётся пилить костыль, либо переписывать уже существующий код.
1391 1846366
>>846343
все еще проще

void ExecuteForNonNulls(params Tuple<object?, Action> foo){
foreach(var (obj, action) in foo){
if (obj!=null)...
]
}
и вызов
ExecuteForNonNulls(
(var1, Action1), //а можно и лямбду если параметры есть
(var2, Action2),
(var3, Action3)
)
1392 1846377
>>846366
О да! Точно! Двачую кортежи!
1393 1846411
>>846366

>object


В итоге получаем боксинг если значение имеет значимый тип.
1394 1846415
>>846273
Не, самое новое - это Blazor и gRPC. Вот где придётся полностью переучиваться :)
Razor Pages тоже новее Core MVC.
Ещё нынче принято "котлеты отдельно, мухи отдельно". Пишешь API, а морду делаешь на всяких Vue/React/Angular. Но я бы Blazor выбрал.
1395 1846417
>>846411

> проаерка на нулл (исходная проблема)


>Значимый тип


как бы противоречий нет ага
1396 1846438
>>846415

>Razor Pages тоже новее Core MVC.


для любителей web forms создан или для простых случаев. Так то он хуже чем MVC.

>Но я бы Blazor выбрал.


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

Алсо, можете плес пояснить что я делаю не так? В резюме кратко описал все свои пет проекты, основные проблемы с которыми в них столкнулся и что из них изучил/ что в них юзал. Но ссылок на исходники кидал только для одного проекталан, для двух, но второй не на шарпе, да и в нем я не овнер, просто сделал всю архитектуру и большинство коммитов. другие проекты уж слишком говнокодисты, чтобы я ими на гитхабе хвастался
В этом ли проблема? Кинул резюме уже на две вакансии, а меня по-просту проигнорили, даже на собес не позвали.
1398 1846455
>>846417
Есть типы вроде int?, которые будут упаковываться при передаче в метод который принимает тип object.
1399 1846458
>>846448

>описал все свои пет проекты



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

>В этом ли проблема?


Откуда нам знать? Мы твоего резюме не видели.
1400 1846465
>>846458
Так а что тогда в резюме писать? Коммерческого опыта у меня хуй да нихуя, остаются только пет проекты и гитхаб.
1401 1846466
>>846455
который принимает object?
впрочем, нет разницы, работать будет
1402 1846470

>>>1846448


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


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

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


Вангую много текста, мало тегов. Надо наоборот как раз. Тебя на собес позовет хрюша, а не тимлид или кто-то из тех кто шарит. Хрюша, это как тупой гугл, она просто видит ключевые слова и зовет на собес тех кто подходит. Гитхабы и прочее уже будут на собесе смотреть, если конторе интересно, обычно ограничатся разговором что тебе интересно, что делал, что умеешь, если не совсем мудаком покажешься и будет своя система управления авиаперелетами - возьмут.
1403 1846472
Господь всемогущий, за что мне такое наказание?
Это>>846470
Сюда>>846448
1404 1846473
>>846466

>object?


object по определению нулабелен, поэтому "?" излишен, разницы нет.

>впрочем, нет разницы, работать будет


Работать будет, но медленнее и с большим потреблением памяти, т. е. не без разницы.
1405 1846478
>>846473

>object по определению нулабелен, поэтому "?" излишен, разницы нет.


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

>т. е. не без разницы.


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

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

всё. хватит. всем срочно писать как в GO - простыни ручного говнокода. Нахер сахар. Только соль
1406 1846483
>>846478

> пиши 100 этажные if и за каждым боксингом следи


Только что загуглил боксинг. Возможно я понимаю неправильно, но боксинг это упаковка переменной в object и она у нас появилась только после того, как мы всем тредом начали от 100-этажных if-ов уходить. Не?
1407 1846488
>>846478

>а ? пишем, чтобы подчеркнуть факт нулабельности для анализатора.


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

> Хочешь меньше писать - жертвуй.


Так жертвовать и не надо, для того чтобы не жертвовать придумали обобщения.
Image 2.png15 Кб, 756x305
1408 1846501
>>846483
боксинг появился из-за каста к object значимого типа. Если у тебя не высоконагруженный код не парь мозг. Больше проблем от того, что тип теряется и если тебе нужно его передавать в делегат, то придется обратно кастовать
и хоть это работоспособно но выглядит ущербно.

>>846488

>Нормальная IDE тебе предупреждение выдаст и попросит удалить лишний символ.


значит Visual Studio плохая IDE (скрин зри). зопесал.

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


есть такое, но баланс "короче if/оверхед" не такой хороший. И я бы выбрал if, чем множественный вызов обобщенного метода.
1409 1846504
как сделать перекат? ну висит же все от такого треда?
1410 1846520
>>846470

>Напиши систему управления авиаперелетами.


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

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


Ок. Вырежу почти все из "опыта", и удвою колличество скиллов., говоря даже о том, в чем не шарю. Надеюсь, проактит.
Спасибо за ответ, анон.
111.jpg28 Кб, 886x86
1411 1846523
>>846501

>значит Visual Studio плохая IDE (скрин зри). зопесал.


Вычеркивай.

> И я бы выбрал if, чем множественный вызов обобщенного метода.


А потом переписывал бы код, когда проверки перестали ограничиваться одним if-ом. Либо когда в if нужно добавить еще какое-либо условие.
1412 1846527
>>846523

>Вычеркивай.


ты не используешь <Nullable>enable</Nullable> ?
ты мазохист? али старообрядец? Надеюсь на неткоре хоть пересядешь)

>когда проверки перестали ограничиваться одним if-ом.


тогда и обобщенный метод не поможет.
да и в обоих случаях можно запилить Predicate<bool> но читабельность от этого не вырастет
а переписывать СТОЛЬКО ЖЕ
1413 1846532
>>846520

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


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

Лучше опиши технологии с которыми сталкивался и как их использовал. Будет много и честно.
А один хер все на собеседовании будет выясняться
1414 1846548
>>846527

>ты не используешь <Nullable>enable</Nullable> ?


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

>старообрядец


Когда по умолчанию будет enable, тогда и приходи.

>тогда и обобщенный метод не поможет.


Создаешь метод-расширение ExecuteIfNull<T>(this T value, Action action), в нём у тебя будут все нужные проверки, код который использует его не будет меняться если нужно будет сделать дополнительную проверку.
1415 1846554
>>846548

> независимо от пользы.


NRE, та которую назвали ошибкой на сколько там долларов, бесполезна
так и думал )

>Когда по умолчанию будет enable


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

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


как это не будет если будет
если мне нужно будет вместо if(val!=null) сделать if(val!=null && val !="foo") то что обжект метод, что этот обобщенный сразу пойдут лесом.
В предикатный метод
ExecuteIfNull<T>(this T value, Predicate<T, bool> pred, Action action)
еще можно добавить проверку, но сам такой метод не сильно лучше голого if (даже хуже)
1416 1846556
Кто-то перекат запилил и молчит
https://2ch.hk/pr/res/1846539.html (М)
1417 1846558
>>846448

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


Напиши имеджборду.
1418 1846753
>>845991
>>846019
>>846041
Спасибо. Но оказывается есть решение, через библиотеку Interop офиса.

using Access = Microsoft.Office.Interop.Access;

access = new Access.Application();
access.OpenCurrentDatabase(@"bd.accdb", true, null);
string ret = access.Run("func", myarg);
access.Quit();

(но блин, оно только для .net framework. Для .core нихрена, нет рабочей Interop... Хотя решение тоже нашел, руками вписать ссылку на com либу в .csproj (скопировав из проекта на нетфреймворке)
1419 1846869
Меня не устраивает юнити. Потому я хочу сделать свой движок без фатальных недостатков этого самого юнити, правда, наверное, ограничившись исключительно 2д.
Так вот, есть ли что-то про архитектуры кроссплтформенных решений? Ну, скажем, я представляю чего мне нужно в конечном итоге получить с точки зрения пользователя движка и под винду я точно знаю как это сделать, а вот как сделать так чтобы оно на линуксе, и андроиде, как минимум, работало одинаково - уже нет. Я ради примера смотрел исходники всяких SDL/SFML(да-да, С/С++, но оно действительно кроссплатформенно), и там все выглядело примерно так: Вот мы зафигачили дефайнов затем прошлись #ifdef, там подключили под одним и тем же именем разные файлики с конкретной платформой и дальше фигачим. Так вот, как я понимаю в шарпе такой подход не будет работать, банально потому что тут препроцессорные директивы не делают таких вот крутых штук. А как тогда? Делаем разные реализации для каждой платформы(допустим обработку работы клаивиатуры), они имплементируют один интерфейс(допустим IUserInputProvider), а при настройке контейнера таки проверяем #IF где мы там запущены и запихиваем это в контейнер, ну а дальше просто фигачим на интерфейсах? Или как? Или что? Довольно сумбурно получилось, просто не имел опыта с написанием кроссплатформенного кода, обычно выбирал всегда то на чем мне нужно и фигачил.

Почему это тут спрашиваю? Очевидно же - буду делать на шарпике.
1421 1847552
>>845113
Этот видос кусок говна.
1422 1847558
>>845286

>GetHuinyaWithZalupa()


А если у меня не две сущности, а 15, или мне нужно чтобы сущности из нав. свойств вернулись с каким-то нав. свойством определенном в них? Прикольный выйдет метод GetHuinyaWithZalupaWithPizdaWithAnusWithGovno().

Чем больше погружаюсь в эту тему, тем более сомнительно этот паттерн выглядит.
1423 1856169
>>836747
А если в результате этой вашей рефлексии, проявляется детерминированность алгоритмики психики, которую можно автоматизировать и захардкодить кодингом кодерским?
1424 1903584
Аноны, почему у меня в ajax запросе в параметре налл?
Тред утонул или удален.
Это копия, сохраненная 2 апреля 2021 года.

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

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