Это копия, сохраненная 9 февраля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ITT элита продолжает обсуждает будущее этого прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.
Литература вторым постом
1. Ресурсы:
- http://stackoverflow.com/questions/tagged/c#
- http://www.tutorialspoint.com/csharp/
- http://professorweb.ru
- 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. С# для мобильной разработки
Если нужны инструменты для разработке под мобилы, ставь сразу VS2015 и при установке выбирай все нужные компоненты.
Больше информации тут - https://msdn.microsoft.com/ru-ru/library/dn771552.aspx
Из актуальной литературы
- 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# 6.0: https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C#-6
ПРИНИМАЮТСЯ ПРЕДЛОЖЕНИЯ ПО ШАПКЕ
Код этой шапки: https://pastebin.com/YJFQKsNm
Прошлый тред тонет здесь: >>1515204 (OP) (OP)
9. Что почитать?
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 6.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином
- C# 6.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- C# 6.0 and the .NET 4.6 Framework (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
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
9. Что почитать?
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 6.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином
- C# 6.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- C# 6.0 and the .NET 4.6 Framework (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
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
https://metanit.com/
Ты заебал, выкинь этого аниме-трапа нахуй уже
Переходить на Rust
Идет тяжеловато и со скрипом, но дальше хуже. Что мне стоит изучать после киньте пожалуйста литературы и советы если есть какие полезные кроме ВЫЕБЫВАТЬ И УЧИТЬ
гугли hh по своему региону, смотри стэк, который требуют
Подскажите на что из этого лучше нацелится я так понимаю мыслить надо адекватно и смотреть на пик 1 джун, но что-то там ключевых наваков дохуя, а платят нихуя во-о-о-т.
Еще и опыт JavaScript это что подъеб такой? Я в C# хочу вкатиться чтоб JavaScript поучить?
Вообще посоветуйте на какой из пиков лучше нацелиться и еще раз хорошей литературы по теме. Да я тупой
Что за вакансии на рузком языке, лул? Это аборигены, которые ищут дурачков без знания ангельского на легаси? Улыбнуло "есть рядом столовая". Что за чуханские вакансии? 4 пика это mid+, туда даже не смотри. 1 - это за хлеб работа, ищут пиздюков.
По сабжу - что прет делать, то и учи. Сейчас веб - это 90% вакансий. А там решай сам.
У меня в городе всего 16 ваканский C# из них лишь одна на ангельском и там надо столько, что я охуел
За то 50+ на 1С не то я учу ой не то.
У меня уже ручки трясуться и я готов все бросить не поеду же я в ДС за работой ладно пока буду продолжать учить может нормальные вакансии появятся
я всегда удивляюсь логике вкатывальщикам на двоще. Если ты кодишь, чтобы работать, так бери стек, который больше всего востребован. Если ты кодишь по кайфу, то берешь самый привлекательный (лично для тебя) язык по синтаксису и возможностям.
Тоже самое и за релокейт. Готов - смотришь вакансии в городах, куда можешь поехать. Не готов - свой регион.
Но я слышал, что 1C это пиздец помойка для умственно отсталых, что-то вроде ассенизаторов в мире программистов и даже программистом называться права не имеешь ты червь пидор который ковыряется палкой в говне без возможности роста всю жизнь вынужденный тыкать в одно и тоже говно палкой
Вот тебе реальность из взрослого мира.
Знакомый челик кодит в 1с для нефтянки. В провинции. Выплатил ипотеку за двушку в хорошем районе, семья, дети, на отдых ездит регулярно. Не перерабатывает, не парится, после работы фреймворки не учит. Как ты думаешь, похоже на помойку?
1С это пиздец, а сисярп это язык больших корпораций и легаси десктопного говна, в твоей мухосрани нужны небось натягиватели верстки на вордпресс и фронтэндеры, бэкенд-языки вряд ли в принципе твой выбор, так как вакансий в самом деле будет 3 штуки на каждый из 10 бэкенд языков, зато во фронте один жс и фронт в принципе востребован. И бэкендеры тоже должны жс знать, правда хуже.
>1C это пиздец помойка
так и есть. Все на рузком языке (тем, кто не осилил ангельский самое оно)
ООП? с 8.3 какую то пародию делали, но это не точно (только со слов 1Сника слышал)
>даже программистом называться права не имеешь ты червь пидор который ковыряется палкой в говне без возможности роста всю жизнь вынужденный тыкать в одно и тоже говно палкой
Уже вижу тебя на лесаси шарпов с .NET 2.0 где то, где просто ад. На собесе будут спрашивать то, что на твоем древнем, как говно мамонта проекте, в момент разработки еще не придумали. А переписывать - можно просто повеситься.
Да кстати, разрушу миф вкатывальщиков, что с 0 проекты мало кто пишет, восновном сапортят/фиксят. И если в вакансии пишут - продуктовая, необходимо знание жизненного цикла продукта с 0 - посадят на проект, который галера сапортит уже N лет и будешь ковырять, как ты говоришь, не то что говно, а такой пиздец, что в страшном сне не придумать.
>1C это пиздец помойка для умственно отсталых
зато работу на нем можешь найти в любом мухосранске. Практически все российские компании завязаны на 1С.
{var foo = Task(bar);
foo.Start();}
оно выполняется вроде как асинхронно
А если пишу:
{var foo = bar;
foo.Start();
}
async Tasl bar(){}
Оно работает синхронно?
я хочу сгенерировать див а внутри дива сгенерировать а с линком
async не делает метод асинхронным, это знают взрослые и дети
и это написало в любой книге/статье, ебаный рот, когда вы начнете читать
Я это знаю, но почем, блин, первый вариант с той же функцией просто засунутой внутрь таска делает?
Ну так а почему тогда второй пример не выполняется асинхронно? Да, там я опечатался, но можно догадаться что
async Task bar() должно быть.
твой пост не оставляет покоя в голове. Реализовую DbContext с 15+ сущностей DbSet, в каждом из которых пишу методы CRUD-a. Причины:
1. Не могу брать базовый функционал от DbSet - т.к. нет проверки на null, если введут хуйню;
2. Все CRUD методы DbSet идут без SaveChanges. Так что хоть так, хоть так нужно будет переписывать методы.
>Я это знаю
Очевидно нет. Тебя там даже компилятор должен варнинг кидать,что без авейта не будет асинхронности. А еще скидывай валидный код, потому что не понятно в чем у тебя там загвоздка ибо та хуйня даже не заработает ибо нельзя стартануть (.Start()) задачу, возвращаемую из асинхронного метода.
https://ideone.com/EmOlmj
https://ideone.com/XETOkj
https://ideone.com/OOtswd
Суть, я вроде как проверил и оно даже вроде как работает, пока клиентов мало. Но вот я сделал 500 клиентов которые ломятся в мой сервер и в определенный момент ошибка что компуктер отклонил подключение, сессии, вроде как, отключаются, но новые подключатся не хотят и приходится перезапускать.
А как на него отдельные файлики а не весь проект заливать? Не хочу чтобы все видели мои попытки реализовать HTTP-парсер
Ну ладно, я вроде как разобрался как сделать чтобы не целеком проект кидать.
https://github.com/BakaVaka/MySuperTcpServer/tree/master/src
C# 3.5 Изгой один.
может нахуй сходишь, с такими вопросами? То блять со строками играют, то инпут даты нужен, что за кретины тут сидят? Где аноны, обсуждающие тонкости работы CLR и архитектурных принципов?
давай, помогай таким. А потом сиди и скроль ленту с даунскими вопросами
ofc, лучше даунам писать, как инпут датой получать. Спору нет.
PropertyInfo [ ] Props = items.First().GetType().GetProperties()
И я получаю ВСЕ свойства этого листа, но как мне получить не все, а только определенные?
А это можно как-то в цикл засунуть? А то я изначально не знаю имена нужных свойств.
Можно
>Не можешь в базовый протокол
>Даже с помощью супер высокоуровневых перделок для домохозяек
Первокурсники совсем дегроднули
В какой еще базовый протокол? У меня свой с свистелками-перделками и несколькими уровнями, включая криптографический(я или в вашей ветке, или в нуботреде описывал его).
Да и я таки смог, действую по примеру https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-server-socket-example просто я не понимаю, что изначально делал не так. Вроде же все нормально и оно даже работает, но потом решаешь "стресс-тест" устроить запустив 10к клиентов, и оно сначала вообще ломалось, потом я таки догадался и запихнул один кусок в try-catch и оно не ломалось, но после подключения кучи клиентов очень долго думало и один некоторые клиенты отваливались не дождавшись ответа, а потом я решил из браузера покидать пакеты и почему-то мой сервер после 3 подключений именно из браузера 90% мощностей процессора съедал и 20 гигов оперативки куда-то улетало, я хуй знает с чем это связано и просто переписал на по примеру(ну не совсем по нему, сессии-хуессии и все остальное таки перенес, а то как-то не представляю как их методом можно организовать нормальную работу и разные протоколы) и внезапно оперативу даже с кучей клиентов даже 100мб не жрет, процессор загружен всего на 1%, опять же, хуй знает чому так. Вот мне и интересно же, чому так, может анон умный и знает где я в первой реализации обосрался.
>Не может в хеллоу ворлд на сокетах
>Высерает пласт текста на 2 абзаца
Очень интересно, сейчас всё прочитаю
А зачем что-то читать, когда можно писать? Деды-то ничего не читали, а сразу писали, а потом для бак записывали что написали в книжки. Чем я хуже дедов-то?
>>31840
> Ошибки не так исправляют, так ты просто проглотил исключение.
Так падало-то из-за отключения клиентов, как по другому-то делать? Ну, т.е. я же не знаю при обращении подключен ли этот хуй все еще или нет. А если каждый раз пинговать, чтобы проверить, по моему протоколу клиент посылает ответ что не знает что это такое ему пришло, вот я его получу и буду считать что он еще подключен, а он именно в этот момент отключится и я попробую считать и все опять упадет. Мне кажется что try-catch в данном случае очень даже неплохое решение.
> А чего ты ждал, один метод Purge может все ресурсы выкачать.
Ну, это я вроде понимал и потому каждый Purge после очистки тред усыплял же. Да и как я понимаю, если все потоки заняты, то таск с Purge хрен когда выполнится. Судя по отладке все съедал метод чтения у сессии, но я как не ебался так и не понял как его правильно сделать и, как уже сказал, все переписал на пример майкрософта и вроде как пока нормально работает.
>Чем я хуже
Деды-то с ассемблера начинали и могли в голове регистрами процессора жонглировать. А ты не можешь из готовых блоков на высокоуровневом языке своять простейшую прогу, пытаешься запихнуть круглую фигурку в треугольное отверстие. Так что иди и впитывай мудрость дедов, любезно оставленную ими в книгах.
>>31853
>падало-то из-за отключения клиентов
Ну ок, вообще исключения надо обрабатывать, если это сделано грамотно , то без вопросов.
>Ну, это я вроде понимал
Навряд ли. С использование тасков у тебя беда и 0 в понимании асинхронности. И выкинь финализатор ты им показываешь отсутствие знаний и напрягаешь лишний раз GC.
>не покажешь как надо?
Дай нормальное описание того, что тебе надо и я накидаю тебе на выходных пример.
> 0 в понимании асинхронности
Я знаю...
> Дай нормальное описание того, что тебе надо и я накидаю тебе на выходных пример.
Мне надо чатик с комнатками(т.е. не всем клиентам рассылается то что отправил кто-то а только тем кто в комнатке с этим клиентом, при этом может быть и общий чатик) и возможностью клиентов друг с другом общаться без лишних ушей, по кастомному бинарному протоколу с разными типами клиентов(кто-то админ и может забанить матершиника, кто-то просто может цветной текст делать, кто-то картинки отправлять, кто-то в муте и может только читать что в комнате), при этом чтобы сессия не завершалась если пользователь отвалился, а жила какое-то время на случай если человек переподключится и его клиент пришлет пакетик с нужной инфой.
Да и я бы таки все же не примеров кода хотел(потому что то что я накатал сейчас, как мне кажется, за 10-20 минут не напишешь), а действительно книжек, но сколько я не просил что тут что в нуботреде, никто ничего годного не посоветовал, а то что советовали это очередное Один клиент-один сервер, почитай до <EOF> , отправь аперкейсом и закрой сессию.
ты изобрел IRC
вообще странное требование, стоит подумать как сделать без этого гемороя.
конкретно по твоей ситуации мне видится вариант использования 2 интерфейсов, которые твой класс реализует 1 - публичный без метода, 2 - для некоторых наследников с методом
По критерию: Мне кажется что удобно было бы этим объектом иметь доступ к данным полям, но при этом другим объектам даже этого класса низя и а уж объектам другого класса - тем более.
И как он поможет мне? Вот я сделал поле private, как мне теперь без рефлексии сделать так, чтобы объект класса B мог изменить поле класса A?
>>32641
Нормальный же. Скажем, вот у меня есть класс Enemy, и я не хочу создавать новый класс, который просто будет отличаться тем что имеет интерфейс какой-то, но хочу чтобы некоторые Enemy, например красного цвета, понижали скорость передвижения объекта класса Hero, при этом я не хочу вводить новый класс Effect, которые будут такой вот затычкой для этого всего. Хочу просто чтобы крассные Enemy имели возможность понижать скорость Hero и всё.
Может шапку пора уже обновить? Какой VS 2015, какой C# 6.0? А уж про совет почитать Professional ASP.NET MVC 5 я вообще молчу, есть намного свежее издания, вы совсем говно мамонта советуете. Не все новички могут додуматься найти более свежие версии книг, пожалейте этих людей, обновите шапку!
>Какой VS 2015, какой C# 6.0
Ты че несешь? До сих пор миллионы проектов собираются в восьмой студи и/или под старые версии языка. Пятнадцатая до сих пор не может в стабильную работу, не говоря о новейших релизах. Хуяк-хуяк продакшн зумеры не нужны.
Ну ты можешь, например, накладывать баффы/дебаффы на юнита (этим должен заниматься какой-нибудь менеждер, а не сами юниты) в зависимости от условий. А уже юнит считает свою скорость учитывая их. Можно еще посмотреть на паттерн visitor. А лучше поискать популярные решения в гейдеве, ты не первый, кто пишет игру, наверняка есть бест практисес.
https://dotnetfiddle.net/Widget/DmX0X3
Я поставил статик лист, ошибка вроде пропала, но жопой чую что это неправильно. Как решить правильно?
Блин, я видимо с JS попутал, тут typeof чё-то другое. Ну а как тогда с этой же логикой можно сравнить типы данных?
>не надо проверить, есть ли хороший корень у числа, если число после нахождения корня - целое, значит у числа хороший корень
Сколько тебе лет? Ты в курсе, что есть как минимум два нормальных способа проверить целое ли число? Нахуя ты микроскопом забиваешь гвозди?
Я уже понял как сделать грамотнее, сейчас в принципе интересует, есть ли как в js такое сравнение типов? Есть is as, но это только с ссылочными типами работает
Просто кресты отвратительны, ваша параша поприятнее во многих моментах, но блядское ООП всюду, еще и это говно со сборкой мусора, IL, необходимостью тащить всякое говно чтобы просто консольное приложение запустилось и т.д.
Поясню что я хочу:
using System;
bool IsOpHui => true;
void main(){
Console.WriteLine("Hello world");
}
И при сборке чтобы у меня был один исполняемый файл вменяемого размера, если я сам не захочу кучу dll и прочих ресурсов отдельно иметь.
Вот как добиться подобного эффекта?
Так мне и нужно для крупных приложений, только без такой жесткой привязки к ООП. Шарп во всем остальном меня устраивает, кроме того что для того чтобы 1 блядскую функцию захуячить нужно создавать отдельный класс, а если будешь в том же классе хуячить на тебя будут смотреть как на дебила, ведь ООП же, нужно для всего свой класс сделать, иначе не тру, и вообще логику отдельно представление отдельно, модель отдельно, и похуй что ты просто дублируешь данные и из-за этого у тебя просто какое-то говно вместо решения задачи, MVVM и MVC же, как ты можешь не запилить отдельный класс экшенов, а данные не забиндить, вместо того чтобы просто менять их по своему желанию в кнопочке, умные же дяди говорят что так надо делать, и плевать что это неудобно, делай как сказали и не выебывайся.
Ну блин((( Шарпик таки очень удобный во всем что не касается ООП. А го я посмотрел и это какой-то джаваскрипт. Видимо придется с крестами ебаться.
Я распиздяй, который уже получил вышку, постажировался, поработал кодером и понял что именно работать кодером - не мое(я не могу без творческой свободы что-то делать, не могу когда есть дедлайны, не могу в команде работать), но писать что-то свое все равно хочется.
Не кодинг совсем, а именно работа кодером. Скажем, олимпиадки в вузе мне нравились, нравится свои штуки делать, нравится на кодворсах всякое решать. А вот работать, ну такое.
> Так они тоже ООП
Я знаю. Но на нем можно и так и этак, а ООП применять там где оно нужно, а не везде под дулом компилятора, который просто на соберет твой проект, если ты все в классы не запихнул. Вот опять же, посмотри как в питоне: есть ооп, но ты сам решаешь, юзать его или нет, то же и в JS, лично мне такой подход больше нравится, на мой взгляд класс состоящий из одной-двух функций не нужен, а запихнуть их в другой класс не получается чисто из соображений семантики класса.
> А что в шарпе не ООП
Структуры, например. Да много вообще всяких фишек которые именно к ООП не привязаны. Опять же, мне просто не нравится что нужно для всего делать класс(а класс, в моем понимании должен быть чем-то семантически оформленным, и именно что объединяющим класс задач которые решает объект класса, например чтение строк, запись в файл, взаимодействие с сетью и т.д.), при этом еще и в неймспейс запихнуть. На кой? Вот почему просто нельзя ебануть функцию внутри неймспейса и жить себе счастливым, нет тебе для этого нужно сделать класс и получается что у тебя в коде появляются статические классы, со статическими функциями которые по сути выполняют роль неймспейсов и являются дурным тоном для всех ООПшников.
Ты или шизик какой-то или вообще не понимаешь как шарп работает.
Ну хуле, не нравится так ебашь все в Main()
Всех кукаретиков с ответами вида "не делай глобальные переменные", "у тебя неправильная архитектура", "глобальные переменные эта плоха, эта низзя" прошу заранее пройти нахуй.
Если именно переменные, то
public static MyVars{
public static int a;
public static int b;
...
}
Это кстати еще одна хуйня из-за которой я бомблю с шарпа. Но меня уже назвали шизиком, потому не буду высираться, но просто, блядь, действительно был бы годный язык, если бы ООП было одной из, а не основной парадигмой. Столько удобных фитч из коробки, синтаксис не так перегружен как у крестов, огромная библиотека на все случаи жизни, если бы ООП сделали необязательным, цены бы не было.
Не хочу. Хочу на шарпе. Ну или чтобы в Си завезли все что может шарп, только без ООП.
У тебя на группировку по смыслу аллергия?
Тебе нужно обязательно чтобы стопицот хуиток общей кучей на нулевом уровне без разбора лежали?
У меня аллергия на необходимость плодить сущности без необходимости. Зачем мне делать отдельный класс, если он не будет переиспользоваться и вообще не особо несет в себе смысла, кроме как выполнить 2,5 функции. Так бы я просто ебанул эти 2,5 функции и все, когда нужно вызвал, когда не нужно не думаешь о них.
>>36851
> фшарп
Не советовали. Мне только про Го говорили. Посмотрю этот твой эфшарп.
csharpindepth.com/articles/singleton
https://support.microsoft.com/ru-ru/help/907291/question-marks-unexpectedly-appear-instead-of-localized-characters-whe
Спасибо
Зачем ты меня обзываешь? Ну не заметил или забыл уже из-за того что большую часть времени не советовали что-то а доказывали что ООП нужно.
>Зачем мне делать отдельный класс, если он не будет переиспользоваться и вообще не особо несет в себе смысла, кроме как выполнить 2,5 функции
Ну так, блядь, не делай
У тебя походу вообще 0 понимания проектирования и ООП, зато своим охуительным мнением который день в тред срешь.
Есть что-то в мире типа книг "C# для умеющих программировать"?
> Ну так, блядь, не делай
И что прикажешь, прямо в классе какого-нибудь юнита каждому объекту явно указывать где лежат ресурсы с ним? Это же как раз не по ООПшному. При этом делать отдельный класс, который будет вызывать только 1 функцию: загрузи ресурсы из этого файла, это пиздец как тупо.
> 0 понимания проектирования и ООП
Ну, моего понимания ООП достаточно, чтобы считать его в большинстве ситуаций перегруженым говном, а его адептов - каргокультистами, которым ООП нужно ради самого ООП. Ну а проектирование это вообще отдельная тема, я, в отличии от тебя, смотрел исходники того же net core и могу с уверенностью сказать, что все это же на каком-нибудь питоне можно было бы написать элегантнее.
Так шёл бы в какой-нибудь тред без ООП: раст, хаскель, тред любого фп языка. Что ты здесь забыл?
>Есть что-то в мире типа книг "C# для умеющих программировать"?
зачем? если ты умеешь программировать, то просто берёшь и начинаешь писать решение своей задачи на шарпе. гуглишь лучшие инструменты для этого на шарпе. всё. если ты до этого хорошо на крестах писал, то на решетке будешь так же хорошо писать, просто беспокоиться нужно о меньшем количестве вещей.
Забыл сказать, это визуалка 19
я сейчас так и делаю, но это достаточно ублюдочно получается без базы о всяких там IDIsposable, GC и прочей object model
если ты в своих задачах зачем то обращаешься к GC, то не лучше бы тебе эту задачу на крестах это делать и в шарпе дёргать через pinvoke?
>Люблю хуярить собак палкой, но мне нравится, что они визжат, а ещё не нравится палкой махать — рука устаёт.
>Я вот думаю, может есть что-то похожее, но без визжания и махания?
Перекатывайся уже в хаскель, если хочешь ФП с GC, или в ржавчину, если хочешь отсутствие и ООП и GC.
зачем тебе в базовых вещах к GC обращаться? с IDisposable тоже всё просто. оператор using автоматически за тебя его вызовет по выходу из скоупа. зачем тебе целые книги об этом читать? но ладно, так беседа может в срач скатиться. я просто никогда не видел практической пользы от книг. всего ты всё равно не запомнишь, а нужную информацию непосредственно при необходимости всегда можно поднять на stackoverflow, благо коммьюнити у шарпа на объяснения не скупится.
ООП — порождение макакинга и ебанутости людей: "Одноклеточное -> простейшее многоклеточное -> земноводное -> макака -> человек". В итоге у человека есть аппендикс, копчик, иногда другие генетические проблемы. Код ДНК вырожденный — триплеты онли; никаких utf-4 кодировок, где часть можно закодить одной парой или двумя парами, онли триплеты, как я уже сказал. Программы с ООП страдают теми же проблемами.
что? даже если проводить такую параллель, то тут проблема не самого ООП, а его неграмотного использования. если бы аппениксы и копчики были вынесены в интерфейсы, то проблем бы не было, если бы человек их не наследовал. Хотя тут конечно можно доебаться непосредственно к ООП шарпа, неподдерживающего множественное наследование, но всё равно играя интерфейсами и абстрактными классами не пришлось бы реализовывать тыщу раз интерфейсы аппендиксов и прочих рудиментов.
Проблема в том, что ООП поощряет аппендиксы и копчики, а не в том, что от них можно избавиться при грамотном написании кода. Макакич не будет тебе делать абстрактный класс — он просто ебанёт наследование от макаки к человеку.
всё равно не вижу в этом проблемы ООП. пока что всё, что ты говоришь, что ООП может привести к ебанутой архитектуре из за неграмотности программиста. это всё равно, что обвинять кухонные ножи в том, что ими алконафты иногда убивают людей. чё теперь, ложкой мясо резать? может быть, ты можешь предложить парадигму программирования получше для задач, предполагающих постоянное состояние приложения и работу с данными?
То что оно не везде нужно и там где оно не нужно оно создает кучу лишнего кода из-за того что все нынешние реализации ООП лютое говно, которое построено на костылях и костылями погоняет. Ко всему выглядит неэстетично, порождает завышенные требования к аутистичности программиста, работает в большинстве случаев медленнее, если делать так как говорят гайдлайны и умные дядьки, ко всему оно просто неочевидно работает в большинстве случаев и из-за этого обосраться с ООП намного легче чем без него.
>То что оно не везде нужно и там где оно не нужно оно создает кучу лишнего кода
? так не используй там, где не нужно. в чём проблемы? тебя никто не заставляет хуярить фабрики на каждый интерфейс
>все нынешние реализации ООП лютое говно, которое построено на костылях и костылями погоняет
почему?
> Ко всему выглядит неэстетично, порождает завышенные требования к аутистичности программиста
вкусовщина
> ко всему оно просто неочевидно работает в большинстве случаев
чего? наверно от реализации конечно зависит, но по крайней мере в шарпе неочевидного ничего не помню. документация по языку в помощь.
Нет наследования (или оно реализовано через раздраконивание ануса, а не одним знаком) — нет проблем. И для постоянной работы с состоянием и данными используют DOD, а не ООП, потому что ООП ускоряет только работу с кодом, а работу кода может разве что замедлить. Чтобы реализовать DOD в ООП языке, ты должен забыть всё, чему тебя научило наследование.
Ну ладно, я сам таким в 17 был, когда для себя пистон открыл. А потом с первым проектом серьезнее мувисерчера пришло понимание необходимости ООП, ФП и прочих подходов к структурированию программ на уровне синтаксиса.
> КТО-ТО ХОЧЕТ ИСПОЛЬЗОВАТЬ ОГРОМНЫЙ ФУНКЦИОНАЛ КОТОРЫЙ ПРЕДОСТАВЛЯЕТ .NET НЕ ДЛЯ ТОГО ЧТОБЫ ДЕЛАТЬ ОЧЕРЕДНУЮ КРУДОШЛЕПСКУЮ ХУЙНЮ НА ГАЛЕРЕ! ДА КАК ОНИ СМЕЮТ ПРОСТО ПОДУМАТЬ ОБ ЭТОМ! Я ВОТ ДЕЛАЮ ПО 10 КРУДОШЛЕПСКИХ ХУЕВИН В НЕДЕЛЮ И ВЫ ТАК ДЕЛАЙТЕ, ИНАЧЕ ВЫ НЕ ПРОГРАММИСТЫ
Блядь, а меня потом шизиком называют. Мне, блядь, нравится что шарп может из коробки, но при этом мои задачи как раз не предусматривают ЧЕГО-ТО БОЛЬШОГО. Вот вы же выпросили себе ML, хотя нахуй он сдался в вашем говнопрайзе?, а я хочу вся библиотека шарпа и его приятный синтаксис не были привязаны к ООП, что в этом такого странного-то? Т.к. ты макака, я для тебя большими буквами напишу: ЕСТЬ ЛЮДИ, КОТОРЫЕ НЕ РАБОТАЮТ НА ГАЛЕРАХ, ПРИ ЭТОМ ОНИ ХОТЯТ ИСПОЛЬЗОВАТЬ ШАРП ИЗ ЗА ОБИЛИЯ ПЛЮШЕК, ОДНАКО ВСЯ ЭТА ПОДЗАЛУПНАЯ СРАНЬ С ООП ИМ НЕ НУЖНА И В ИХ ПРОЕКТАХ ПРОСТО УВЕЛИЧИТ КОЛИЧЕСТВО СТРОК КОДА, А СЛЕДОВАТЕЛЬНО ВРЕМЯ НА РАЗРАБОТКУ. Может быть так дойдет.
Как это сделать?
Назови не-ооп плюшки шарпа, которых нет ни в одном другом языке, раз так дрочишь на них. Линк и тот всего лишь кастрированные списочные функции из любого ФП-языка, лол.
Основная сила шарпа в ООП и платформе с кучей готовых либ, а не в синтаксическом сахаре, которого и в других языках навалом. Не нравится ООП - уебывай в тред ФП, там иногда фшарперы проскакивают.
>В их проектах
Любой проект сложнее тудулиста требует той или иной формы организации кода. Нет, разбить код на 5 файлов это не организация кода
>Выпросили себе ML
Что ты несёшь блядь господи.
Заебал, тред по скале 2 блока ниже
Анон, есть один корпоративный git-репозиторий с парой сотен grpc'шек, каждая с несколькими протобафными dto'шками.
Я хочу всё это запихнуть в отдельные nuget'ы, чтоб при каждом обновлении git-репозитория тимсити мне все это собирала и пушила во внутренний nuget-репозиторий.
Как это грамотнее сделать?
Пока придумал только такое:
- для каждого grpc создавать папочку с проектом
- копировать шаблоны .csproj, AssemblyInfo.cs и .nuspec в эту папочку, проставляя названия пакета, версию и зависимости
- компилировать grpc и protobuf'ы в .cs'ы
- вписывать вновь созданные проекты в .sln
- билдить все проекты в сборки netstandard2.0, собирать .nuget'ы и пушить в репу
Какие подводные?
Можно ли сделать кучу сборок из единого .csproj проекта?
Можно ли это упростить как-то?
сходить на лекцию по истории крипты или попросить у одногруппников фото презентации
Во втором солюшена все то же самое.
Но - почему-то в первом случае тесты видят неймспейс программы (т.е можно через using достучаться), а во втором нихуя, не видит. В чем может проблема быть?
нужно создать третий солюшен и запустить
Загляни в csproj с тестами, есть ли там ProjectReference на проект с программой?
Еще могут TargetFramework не совпадать
Даже чатик между клиентами реализовал по своему супер протоколу. Принес преподу, а он говорит, что это как-то не серьезно: второй курс и просто байтики прочитал-отправил, потому нужно, чтобы клиенты после регистрации и всех обязательных операций могли по своим кастомным протоколам общаться, типа они сами могут описать его у себя в файлике, отправить друг-другжке, а потом общаться этим протоколом, если захотят, а не моим.
И я чет не понимаю как это-то сделать. Типа у меня завязано принятие клиентов на сервер по моему супер протоколу, все остальные пакеты я считаю мусором еще на моменте если первые два байтика не единички нолик и сессию что присылает мусор даже не создаю, а тут нужно как-то понять что вот это не мусор вовсе и я не совсем понимаю как. Конечно у меня появилась идея, типа добавить класс ClientInfo, в который вынести из обработчика сессии всю инфу о клиенте, и реализовать такую вот логику: Клиент сначала входит, отправляет все пакеты регистрации-авторизации и если все проходит нормально, то я в классе ClirntInfo ставлю флажок что: Это свой пацан, можно все подряд принимать, только вот я не понимаю, а как мне, если протокол может быть любой, понять кому сервер должен переправить пакет, потому что у меня то кому отправляются данные указывалось в пакете, а значит я не смогу узнать кому переправить данные, если во-первых не знаю структуру протокола, во-вторых, если таки знаю, в протоколе не указан получатель.
К чему я это все написал? На самом деле просто изложив в письменной форме проблему мне самому легче ее проанализировать, потому можете не обращать внимания, конечно от книжек и советов мудрых я не откажусь.
Даже чатик между клиентами реализовал по своему супер протоколу. Принес преподу, а он говорит, что это как-то не серьезно: второй курс и просто байтики прочитал-отправил, потому нужно, чтобы клиенты после регистрации и всех обязательных операций могли по своим кастомным протоколам общаться, типа они сами могут описать его у себя в файлике, отправить друг-другжке, а потом общаться этим протоколом, если захотят, а не моим.
И я чет не понимаю как это-то сделать. Типа у меня завязано принятие клиентов на сервер по моему супер протоколу, все остальные пакеты я считаю мусором еще на моменте если первые два байтика не единички нолик и сессию что присылает мусор даже не создаю, а тут нужно как-то понять что вот это не мусор вовсе и я не совсем понимаю как. Конечно у меня появилась идея, типа добавить класс ClientInfo, в который вынести из обработчика сессии всю инфу о клиенте, и реализовать такую вот логику: Клиент сначала входит, отправляет все пакеты регистрации-авторизации и если все проходит нормально, то я в классе ClirntInfo ставлю флажок что: Это свой пацан, можно все подряд принимать, только вот я не понимаю, а как мне, если протокол может быть любой, понять кому сервер должен переправить пакет, потому что у меня то кому отправляются данные указывалось в пакете, а значит я не смогу узнать кому переправить данные, если во-первых не знаю структуру протокола, во-вторых, если таки знаю, в протоколе не указан получатель.
К чему я это все написал? На самом деле просто изложив в письменной форме проблему мне самому легче ее проанализировать, потому можете не обращать внимания, конечно от книжек и советов мудрых я не откажусь.
>можете не обращать внимание
>от мудрых я не откажусь
пиши в блокнот, что ты там надумал себе. Твои говно проекты из шараги никому не интересны
TPC клиент на шарпах, что за долбоеб
А на чем я должен делать, если в ВУЗе только шарп преподают?
Да, но как в ООП стиле одновременно применять и классы, и рекорды? Одних классов достаточно.
Да каждый тред какой-то неосилятор кукарекает.
> одновременно применять и классы, и рекорды?
А как можно применять не одновременно, если класс это и есть рекорд с плюшками.
Но это как бы понятно, что в классах мы тупо ссылку присваиваем и обеими указываем на сейм обжект.
Ну плюсовики иногда шутят, что в с++ структур нет. Вот я и шутканул.
У меня возник вопрос
На чём создавать WPF приложения?
Помимо визуал студио
Я вот работаю в редакторе кода -- vs code и там, конечно, такое сделать не получится
Серьёзно?
Разве vs code на такое способен?
Это же редактор кода, а не полноценная среда разработки
Поправь, если не прав
Ну, ты хоть в блокноте можешь писать, если у тебя все либы фреймврока есть. Какая разница? Да, никакого драг-н-дропа, но кто тебе мешает справляться без него?
В общем, я пока слишком нубасик
Наверное, мне лучше пока забыть о примитивных приложениях и изучить базовый синтаксис
Лучше всегда сначала изучить синтаксис. А приложения в студии действительно проще делать, хоть впф, хоть формы, хоть ксамарин. Я её тоже не люблю, но куда деваться
А разве там компиляция не через жопу консоль будет с ручным пердолингом через baml? Или code умеет собирать сама впф поректы?
Иди в тред компутер саенс, там тебе пояснят за литературу. А у нас обходятся википедией и мсдн.
>На метаните вообще не понимаю что написано
забей тогда на CS. Если на метаните не понятно, то в других источниках точно ничего не поймешь
Окей, но это мне ведь не помешает в изучении коллекций? Или лучше разобраться со структурами?
Грокаем алгоритмы? Думал там только про алгоритмы, спасибо
Да, крутая книга, супер понятно объясняет, спасибо ещё раз
Купить ссд
Взять VSCode и кодить в нем. Вижак нужен только когда ты отлаживаешь программу, чтобы ловить утечки и смотреть как ресурсы распределяются.
А вообще, я не понимаю, что такого в том, чтобы грузился он долго, ведь его один раз запустил и не закрываешь, пока работу не доделал.
Си и так может всё, что может шарп, и ещё в десять раз больше. Что тебе ещё нужно-то, я не понял?
>десять раз больше
всмысле только в десять? C - язык богов, он может АБСОЛЮТНО все. Нам не нужны управляемые модули с MSILом, только расходование ресурсов. Там не нужны типобезопастные типы, С боги и так пишут все правильно. Да даже IDE нахуй не нужна - Notepad наш инструмент.
>>40559
>>40563
>>39893
полностью поддерживаю. Потраченные годы на этот говноязык мелкософта
>>40218
удалить
>>40758
>говноязык
Что он тебе сделал, лол. Я рад что начал именно этот язык учить, работаю в энтерпрайзе, уютный офис, халявная еда, нормальная зп. Не понимаю претензии
Это местный шиз, забей
Когда уже починят anti-alising? Шарам итак пизда от монитора тут ещё и мыльное говнецо, вместо шрифтов.
Вынеси в отдельную функцию, лол.
Ты понимаешь же, что все наебывается из-за того что у тебя рекурсия, потому что ты в конструкторе всю эту хуйню делаешь? Просто поставь точку останова в конструкторе и посмотри как оно проиходит по шагам.
Cпасибо, схоронил
Ты троллишь тупостью?
Короче, лень объснять, читай https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerable?view=netframework-4.8
>Предоставляет перечислитель, который поддерживает простой перебор элементов неуниверсальной коллекции.
И как мне это поможет?
Ну IEnumerable помогает использовать foreach для экземпляров класса, и шо
Попробуй почитать любой учебник, модификатор паблик
static
А что там делать? Добавил просто объект синхронизации и местах где кто-то может ресурс затребовать и ебанул lock.
Я хотел чтобы ты посмотрел как реализуют коллекции умные люди, потом посмотрел на свою и больше так не делал.
Огромное спасибо! Я еще не до конца понял как это работает в твоем примере, но главное работает!
Тебя ебет, козла ебаного? Хотим и задаем тут вопросы, пошел нахуй если чего - то не устраиват.
>как реализуют коллекции умные люди
Вот так:
List<int> numbers = new List<int>();
Или так:
int[] numbers = new int[] {0, 1, 2, 3, 4, 5};
> DefLessons урок с коллекциями
Что это вообще такое, лол? Я за всю жизнь ни одной книжки и ни одного курса не прошел, только то что в универе рассказывали помню.
Мы вам перезвоним.
А, я слепой
Как слить два Linq Expression в один? То есть есть model => model.Field и field => field.Nested, нужно сложить их в model => model.Field.Nested.
Просто вызвать второй экспрешн от первого не канает, т.к. используемая библиотека для своей работы раскладывает переданный экспрешн, и единственный способ решить поставленную задачу - передать ей именно "model => model.Field.Nested". А у меня есть только model => model.Field и field => field.Nested.
Подумай сам, это несложно, вся информация есть
Ты запятую ставишь, не зная что делает параметр в врайт лайне, это тебе не паскаль
https://docs.microsoft.com/en-us/dotnet/api/system.console.writeline?f1url=https://msdn.microsoft.com/query/dev16.query?appId=Dev16IDEF1&l=EN-US&k=k(System.Console.WriteLine);k(TargetFrameworkMoniker-.NETFramework,Version=v4.7.2);k(DevLang-csharp)&rd=true&f=255&MSPPError=-2147217396&view=netframework-4.8
List<int> listInt = new List<int>() { 1, 3 ,5 } - лист, который должен содержать другая коллекция
List<int> listIntTest1 = new List<int>() {1,3,4,6} - false
List<int> listIntTest2 = new List<int>() {1,3,5,7} - true
List<int> listIntTest3 = new List<int>() {1,2,4,8} - false
Как это можно реализовать без LINQ All?
Погуглил события, видимо здесь и нужны делегаты
Publisher-subscriber загугли, что это такое и поймешь зачем они нужны
Ты сам то понял чего хочешь? Какаую-то хуйню написал. В общем, показывай код или иди нахуй.
static public bool IsIntersects(IList<int> target, IList<int> second)
{
return target.Intersect(second).Count() == target.Count;
}
Писать %объект_name%.Number естественно невозможно будет, если клиентов 100. Вот написал код, но это форич только для 1 экземпляра.
Спасибо
foreach (var customer in customers )
{
Console.WriteLine(customer.number);
}
В общем, читай как работает foreach и не пиши хуйни.
Метод имеет следующую сигнатуру:
Expression<Func<TIn, TOut>> Merge(Expression<Func<TIn, TMiddle>> first, Expression<Func<TMiddle, TOut>> second)
Принимая на вход m=>m.Field и f=>f.Nested, должен вернуть в точности m=>m.Field.Nested - любое эквивалентное ему по смыслу возвращаемое значение не подходит, нужна именно такая форма.
Не могу допереть как реализовать.
У тебя коллекция List в которой хранятся объекты типа Customer, при перечислении этой коллекции тебе будут возвращаться объекты этого типа, у каждого такого объекта есть свойство Number. Но судя по твоим постам у тебя полная каша в голове, к тому же ты долбоеб непробиваемый, поэтому могу посоветовать тебе нахуй пойти.
А, спасибо
Сначала подумал, что за метод Intersect, потом понял, что это метод расширения, о котором за более полу года использования LINQ только узнал. Спасибо.
Насчёт напрямую - разве что рефлексией, но есть вариант - делегаты. Передаешь в класс делегат через метод/конструктор и делаешь с ним что захочешь.
Тебе же русским языком пишут, что событие может находиться только в левой части операции += или -=
Советую отталкиваться от слова событие и гуглить в эту сторону.
я хочу сделать красивую кнопочку для контрольки fileupload но вот беда fileupload не поддерживает стили, то есть он конечно формально поддерживает но поверх все равно пыхает вот эту ебанутюу херню на первом пикриле
ну думаю бля костыльную херню надо исправлять костыльным кодом, написал что что типа
fileUpload : display none
и решил просто ссылаться на него через джаваскрипт который буду вызывать уже нормальной кнопкой, но вот херня, мне надо название файла, и если вы думаете что его мнжно взять просто через fileupload.filename то нет, потому что fileupload не задает page.postback и страница тупо файла не видит, думаю ну блять пиздец надо тогда вызвать page.postback через скрипт дописал и блять ЭТА ХУЙНЯ ВСЕЕ НЕ РАБОТАЕТ потому что скрипт и загрузка файла работают асинхронно и страница может все еще не видеть файла, пробовал уже тогда сделать просто input type = file эта хуреня тоже не подошла я уже пол часа пытаюсь как-то накостылять код на эту парашу, господи как же у меня горит от этой аспшной хуйни
костыль на костыле блеять, и костылем погоняет.
> Аноны, подскажите глупому человеку в чем проблема, как мне сделать так что бы при изменении выбранного элемента из списка что-то происходило,
Тебе в событие надо лямбду хуйнуть.
Потому что нахуй тебе это серверсайдное говно мамонта, пили уже норм отдельно бэк на рестапи и фронт.
https://primefaces.org/primevue/#/
Значит его диспозит GC. Попробуй использовать GC.SuppressFinalize на объекте который у тебя эксепшн вызывает, но это сомнительный костыль и проблема может быть в том, что у тебя этот объект объявляется не на глобальном уровне, а в каком-нибудь классе/методе который выходит из области видимости и поэтому диспозится GC.
А можно как-то посмотреть что GC решил задиспозить? Вообще, наверное тупой вопрос, но может быть в студии есть какая-нибудь приблуда, которая бы отображала созданые мной объекты и их состояние в данный момент и в какой момент они задиспозились и все это вот?
Да и горит у меня из-за того что ну вот, работало же, 100 раз проверил, а сейчас я просто хочу считаную инфу в базу записать, а оно теперь не работает в том месте где работало.
Везде в вакансиях на дотнетчика указано базовое знание JS - на каком уровне его нужно для вката?
иди нахуй пидр сишарповский
Ещё не понятно, то EventHandler когда ивент объявляешь, то ли название другого делегата ыаыаыаыаыаыаыаыаыа
События созданы для того, чтобы не надо было создавать методы для добавления/удаления методов из списка вызова делегата. С событиями ты создаешь один делегат и несколько событий связанных с этим делегатом, а компилятор дописывает за тебя методы для добавления обработчиков этих событий.
Вообще обычно учат шарп, к нему джс, а в итоге становимся фронтендерами, ведь шарп страдает
вообще учат плюсы, а остальным хуй подтирают
То есть при создании экземпляра класса они добавлялись в List<Class>, а не в ручную каждый экземпляр добавлять в лист.
Ну так передай в конструктор лист и добавь в конструкторе this в лист
Вот только нахуя тебе такой дерьмокод?
А, вообще забыл что такое this.
А почему дерьмокод? Ну надо же хранить где-то пользователей, допустим, вот в листе удобно и сортировать, и форичить. Сказка же
Потому что во первых не надо создавать зависимостей на ровном месте, во-вторых не надо раздувать функционал класса там где не надо. Это усложняет переиспользование кода
А в третьих это нечитабельно нахуй.
Как ты к этому листу в мейне обращаешься? Если через тип, то и не будет видеть, т.к. лист - член типа. Если через экземпляр - то должно видеть
да пусть помесит глинку, со временем поймет, что это говно. Все через это проходят
customers - член типа, а не экземпляр. Создай экземпляр и обращайся к его членам
Я даже картинку нарисовал чтобы было понятно как это выглядит со стороны. Вот и как такое предотвращать? Вообще, с какого хуя эксепшн в одном объекте, не связаным ничем, кроме передаваемых в него данных, вызывает диспоз у сокета, который просто передает хендлеру данные и дальше не при делах?
Да, различие лишь в том, что тебе не надо знать всех мелочей, т. е. спрос меньше, так как ты шарп знаешь. Твоя основная задача это бэкенд.
Тебе нужно свойство customers (которое List) сделать статичным.
C/С++ тред двумя боками ниже, дружок-пирожок. На С# движки для игр не пишут.
Показывай место эксепшена и сокета который диспозится.
Дело может быть и не в этом, может быть у тебя там используется многопоточность и из-за твоей криворукости убивается работающий поток который отвечает за сокет. Такое может происходить если ты используешь Thread.Abort() (поток завершил свою изначальную задачу и принялся выполнять другую, и в это время ты его завершил абортом).
У меня все на тасках завязано. Разве должен эксепшн в таске убивать поток целиком?
Таск это такой же поток, различие в том, что он может выполнятся в отдельном потоке или в уже существующем. Тогда как Thread это всегда отдельный поток.
Хм, я почему-то думал, что таск это такая хреновина, которую засовывают в пул потоков и она там по потокам прыгает до завершения, если есть свободные ресурсы, а если умирает, то с потоком ничего не происходит. Именно потому таски и решил использовать, лол. Наверное глупой затеей было садиться писать асинхронный сервер, ни читая ни одной книги.
Это такая хуйня, которая позволяет тебе не ебаться с реализацией одного популярного паттерна. Оч удобно, что есть из коробки.
Нужна, чтобы понизить связность сущностей, при этом добавив какую-то хитрую логику. На, банально, вот у тебя в формочке юзер изменяет постоянно что-то, а то что он там изменяет хорошо бы на лету обсчитывать, например сразу сказать: Слыш, пидрила, хули ты в поле год рождения буквы пишешь или год больше текущего, охуел чтоли, а ну давай нормально, или вообще не дать пидорасу это сделать. Вот ты и делаешь эвент: TextChanged, на него вешаешь подписчика, который смотрит что там пидрила ввел и решает принимать текст или подсветить красным и не дать кнопочке сохранения стать активной. Это самый популярный сценарий, но вообще ты можешь и без них жить, просто у тебя в коде где было бы TextChanged?.Invoke(this, new EventArgs()) будет куча методов вида: db.OnTextFieldChanged("Хуй залупа"), GUI.OnTextFieldChanged("Хуй залупа"), webServed.OnTextFieldChanged("Хуй залупа") и т.д. Короче, это сахарок такой вот, позволяет тебе делать штуки с меньшими движениями жопы. Всю пользу поймешь, когда решишь свой проект на 10к+ строк написать.
Для того чтобы не писать кучу бойлерплейт кода при работе с делегатами. По сути это обертка над делегатами чтобы было удобней с ними работать, можно всё на делегатах делать, отличие будет лишь в количестве кода которое тебе нужно написать.
Будто делегаты это тоже не сахарок. Деды все это на сях указателями на функции делали и ничего, жили себе, писали высокопроизводительный софт, который жрал почти нихуя памяти, а сейчас хелловорлд шарповский пару мегобайт весит и сразу отжирает 6мб оперативки, чтобы ебучую строку текста в консоль вывести. Эх, было же время. Ух. И хуй-то стоял...
есть функция (не моя, оптимизировать не получится) которая вызывается в foreach
проблема в том что каждый цикл выполняется тыщу лет (около секунды),
меня посетила идея запихнуть каждый цикл foreach в отдельный поток и паралельно выполнить все (или N циклов)
можно ли как то по простому это реализовать?
Спасибо!
там довольно большой объем операций
полный цикл foreach занимал на тестах около 5-6 секунд ( а на боевом сервере я хотел увеличить входящие данные в два раза минимум)
потому не факт что это заняло бы больше времени
async предложенный выше полностью решил проблему с временем выполнения
Что еще спизданешь? Пикрил - программа для переключение частоты обновления монитора в один клик, при этом в ней использована сторонняя библиотека, что явно больше чем хеллоу ворлд.
Что ты спросить-то, блядь, хочешь? Какой еще уровень класса, метода? Совсем ебанулся?
у тебя каша в голове
>создать объект класса на уровне класса, а не метода?
вообще ничего не понял. Ты сначала создаешь тип, потом создаешь его экземпляр. Обращаешься ты или к типу или к экземпляру в зависимости от того, какой тип ты создал.
>как получить доступ к объекту класса из другого метода?
создать ссылку на этот объект (тип) из пространства имен, в котором ты работаешь. Если поля (метод в твоем случае) этого типа не закрытые, то ты можешь к ним обращаться.
Я, кстати, также не понимал, но мне пояснили вот как
Если оставить делегаты как анонимные методы в стороне, то события и делегаты соотносятся как свойства и поля.
1. Событие — это свойство с методами "add" и "remove".
2. Вызов свойства доступен только изнутри класса.
3. Событие может быть как обёрткой над полем-делегатом (аналог автосвойства), так и хранить ссылки на делегаты в какой-то другой форме и вообще содержать любую дополнительную логику.
4. Событие может быть виртуальным и т.п.
Спасибо.
но этой залупе жить от силы пол года. С выходом Core 3.0 все забудут за это убожество Xml-а под подливой WPF
ИМХО, такое объяснение даже сложнее для понимания. Я бы, будь совсем нубом не понял нах оно надо. Да и делегаты тоже имеют методы add-remove.
Тут нужно, ИМХО, именно область применения понимать и попробовать что-то с ними намутить. Например чтобы при приходе данных на сервер ты не мутил отдельный метод записи в БД, а просто подписался из контекста БД на событие и сразу добавлял что пришло.
долбоеб, зачем ты это высрал?
https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework
Или ты думаешь я буду клиентов мигрировать через апдейт на .net core? Тем более как писал выше
>зарекался связываться с вонючим xaml
так что нахуй идет WPF
Какие еще предложения, господа?
Уебище тупорылое, у тебя нет приложения, зачем ты ссылаешься на статью для тех, кто писал своё приложение используя net framework? WPF приложения уже можно писать используя .Net Core, представь себе.
То же касается и новой фишки с дефолтной реализацией в интерфейсе. Вот нахуй оно надо-то? Мне несложно было для этого сделать абстрактный класс и проделывать все те же свистопляски в нем, а так получается что не понятно теперь, когда что использовать.
Кортежи для возврата удобны
У нас в легаси проекте дохуища классов типа ValidationResult, ParsingResult, ConvertResult итд которые нужны исключительно чтобы вернуть 2-3 переменные из функции.
А ещё дохуя функций, которые возвращают данные и успешность операции. Там вообще на out bool построено, что ебано.
Были бы кортежи - стало бы в разы проще.
Про реализацию в интерфейсе - напомни, сколько классов ты можешь наследовать за раз в одном сабклассе, а сколько интерфейсов реализовывать?
Как защитить свой код от реверс-инжиниринга? Я тут написал годную десктоп-программку на C#, уже был готов раздать коллегам на тестирование, в расчёте через какое-то время монетизировать и не присесть на бутылку как Сысоев. Но решил проверить, не спиздит ли кто-то годноту. И таки да - спиздить ничего не стоит. Dot peek позволяет просматривать все кишки моих dll и exe.
Как сделать так, чтобы нихуя нельзя было понять по бинарникам?
Пока есть только идея переписать ключевые моменты на C++, оставив в C# только IO.
все, что ты перечислил можно сделать с передачей класса, в который входят эти поля. Я как то упустил из внимания эти кортежи и сам иногда задаюсь вопросом - нахуй они нужны.
Прочитал. Ахуеть. То есть я правильно понимаю, что ивенты - это синтаксический сахар, чтобы вместо Fax1.DoSomething(); Pager1.DoSomething(); писать одну строку аля NewMail(), да?
Такая проблема: Вот у меня есть несколько переменных, которым я хочу присвоить значения в цикле do while, в который будет встроена обработка исключений таким образом, чтобы к концу этого цикла всем переменным были присвоены некоторые корректные значения. То есть по замыслу нет возможности покинуть цикл и далее использовать эти переменные в программе, если они не присвоены корректными для них значениями в некотором диапазоне.
Но вот в чем дело: несмотря на все это я не могу просто объявить их в начале программы а уже потом присвоить им значения в цикле, в любом случае мне нужно присвоить хотя бы фиктивное значение. Как избавиться от него?
P.S. Чувствую, что спросил максимально многословно и нелаконично, может даже и не понятно, прошу прощения за это.
код - https://ideone.com/5JfbWs
Не понял в чем проблема просто объявить переменные как-то так:
bool? f;
int? n;
int? m;
do{...}while(...)
У них значение по-умолчанию будет null.
Еще не понял, на кой черт ты while(f) используешь. Я вижу что ты так останавливаешь цикл, но нахуя, если можно break сделать? И нахуя тебе do-while? И вообще зачем там делать try-catch опять же?
Бля, только условие не то сделал, у тебя же там (0;50], думаю сам понимаешь как исправить.
Хотя да, try-catch как защита от дурака можно использовать. Тогда код будет как-то так выглядеть.
Добрый день, уважаемые.
Давненько не юзал уже asp.net, уже аж core 3.1 вышел.
И вот понадобилось мне написать приложение для интеграции со всякими сервисами, с которыми моя компания работает.
Я как привык - есть access_token, который как-то генерируется и который выдается тому, кто у меня его запросил.
Вот я хочу при обращении к контроллеру/экшну проверять этот access_token, который передается, например, в хедере или юрлпараметром, дальше лезть в базу и смотреть, есть такой токен/нет. Если есть и не истек, то все ок, ппускаю его в контроллер/экшн.
Я думал, это можно сделать, унаследовав атрибут Authorize. но в нем есть какие-то
Клеймы
Политики
Роли
, назначение конторых мне непонятно от слова совсем.
Никаких методов в этом классе нет совсем.
Роли - еще могу понять - reader/writer какой-нибудь.
https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1
Был тут, после чего совсем уже совсем тупым себя ощутил.
Можете, пожалуйста, на пальцах объяснить, что значат все эти клеймы, политики и роли, как с ними работать на уровне МиддлВаре и на уровне моих контроллеров/экшнов применительно к моей задачке с access_token?
>Не понял в чем проблема просто объявить переменные как-то так:
>bool? f;
>int? n;
>int? m;
Блять и правда. Спасибо, анон.
>Еще не понял, на кой черт ты while(f) используешь.
>Я вижу что ты так останавливаешь цикл,
>но нахуя, если можно break сделать?
Да, наверное ты прав. Так и правда логичнее.
>И нахуя тебе do-while?
Всмысле нахуя мне do-while? Мне цикл для чтения ввода нужен и он должен продолжаться до тех пор, пока не будет введено корректное значение.
>И вообще зачем там делать try-catch опять же?
Ну а вдруг я вместо числа введу строку? Или что-нибудь еще некорректное сделаю. Может быть я конечно и здесь проебался, но не вижу пока в чем.
не правильно. У тебя есть 3 устройства, у каждого из которых может возникнуть событие (а может и нет) на получение сообщения. Когда создаешь экзепляр такого объкта, где из полей есть событие, которое принимает делегат, ты можешь сделать подписку на него, а можешь не делать (в зависимости от политики проектировки типа).
Приведу другой пример - у тебя есть материнка, на ней куча сокетов. Один из сокетов для спикера. Ты можешь его подключить, чтобы он выдавал тебе сигналы, а можешь не подключать, но шаблон проектирования материнской платы всегда подразумевает возможность подключения спикера.
Если и сейчас не понятно - почитай про паттерн publisher-subscriber
> Всмысле нахуя мне do-while? Мне цикл для чтения ввода нужен и он должен продолжаться до тех пор, пока не будет введено корректное значение.
Ну так вот>>47436 Обычный while, будет продолжаться пока не введешь корректное значение, а do-while, на мой взгляд, это довольно мутная темка, которая снижает понятность кода, ведь ты, обычно, стараешься читать код сверху-вниз, а тут получается что ты сначала видишь do, спускаешься к концу блока, смотришь условие выхода из цикла, а потом что в самом цикле происходит, конечно это не то чтобы прямо страшная фигня, но зачем писать лишние строки, если их можно не писать?
А насчет try-catch я таки сам понял зачем ты его используешь. Просто как-то уже отвык от ситуации когда корректность ввода так надо проверять.
Долбоеб тупорылый, он и говорит, что у него это реализовано классами, а если бы были кортежи, то не нужно было плодить кучу классов для возврата нескольких значений.
Класс удобнее, потому что его можно переиспользовать и ты всегда знаешь что это за сущность. В крайнем случае можно структуру ебануть. А кортеж он выглядит просто как данные в вакууме и хуй пойми зачем оно надо, потому что не все удосуживаются имена членам кортежа дать и у тебя получается что-то вида: (int, int, double, string), а при работе с этим кортежем ты вынужден чере a,b,c,d обращаться к значениям.
>>47512
мамкин кодер из шараги решил свои 5 копеек вставить. В интерпрайзе выкатишь код со своими кортежами и попробуй не закоментить, что ты там возвращаешь - индус нашлет порчу. Или же сам увидешь свой код и будешь вспомнитать, что ты там высрал год назад.
Для возвращения объекта создаются отдельные сервисы, которые читабельны (не нужно вспоминать, что делает код) и более понятны (есть ребята, которые фич с 7.0 в работе не видели)
Весь ебучий синтаксический сахар на производительность не влияет, убирая лишние 3-4 строчки кода делает код не читабельным.
Скорее мамкин нонконформист решил доказать всему миру, что кортежи не нужны. У членов есть имена, поэтому тебе не нужно запоминать, что они возвращают. Классы возвращать нужно там, где это полноценный класс, а не набор полей, которые ты потом в переменные преобразуешь, именно для этого и нужны кортежи.
>любая фича должна
как один из пунктов. Но точно не вредить. С каждым апдейтом запиливают сахара все больше и больше. Возьми чувака с легаси .NET core >4.0 он вообще охуеет от синтаксиса
>>47595
ты просто видимо кроме решеток не на чем не писал и не знаешь, что хороший язык тот, который:
1. Выполняет задачу;
2. Имеет friendly сигнатуру
3. Вытекает из 2 - Легко читается, сапортится
Есть некоторые фичи, которые нахуй нужно выпилить из языка
>>47665
все так же, мертвый язык. Почитай что выше пишут, одни вкатывальщики из шараги
Есть годные бесплатные?
>1. Выполняет задачу;
>2. Имеет friendly сигнатуру
Это и достигается при помощи лаконичных кортежей, а не тысячей классов вида ValidationResult, ParsingResult, ConvertResult ...
При этом, если говорить о производительности, то твои классы будут сосать у ValueTuple, поэтому тебе придётся делать структуры, которых в твоей "нормальной" джаве нет, как и кортежей.
То есть что это такое, анончики? Я пишу переменную для case 1, но компилятор воспринимает ее как переменную всего блока switch? Это же пиздец какой-то, нет? Как в плане синтаксиса (потому что я в case 2 могу использовать переменную hui, которая объявлена в case 1. А если у меня между объявлением и применением переменной 300 строк кода?), так и в плане оптимизации (если мне массив нужно объявлять для case 2, то независимо от того, какой case в итоге выбран, у меня этот массив в памяти висеть будет, даже если он нахуй не нужен).
Это я долбоеб или switch - это сомнительный синтаксический сахар, который при это убивает на корню всю эффективность решения? Я где-то читал, что компилятор воспринимает switch как if-elseif-else, но это же тогда полная хуита получается, потому что в if-elseif-else переменные остаются локальными. Рассудите, анончики.
Бывший петухонщик, ты? Всё объявлять можно, достаточно в фигурные скобки заключить блок case.
Читать книги, очевидно. Если времени много, то можешь на их основе пет-проекты делать.
>Вредить
Она вредит только в твоём шизомирке.
>Сахара все больше
И это хорошо, не любишь сахар - можешь пиздовать на сях писать сразу
Не-не, я понял, что бабло в hibernate + spring
>в твоей "нормальной" джаве
шизик, сам додумываешь?
остальное коментировать не вижу смысла, только время терять.
>>47724
>очень много блоков switch
говном завоняло с соседьнего треда. В решетках ООП, ты еще про Goto вспомнил бы
>>47744
>>29860
хоть через что. Модульное тестирование - отрезать кусок от инфраструктуры и тестить. Подвязывать один тест на другой - зашквар, т.к. если упадет один, упадет и зависимые
>>31808
так и есть, в Core уже запилили WPF, так что возможно не сгниет и xaml будет процветать (но это не точно)
>>47766
>Она вредит только в твоём шизомирке.
понаписывают такие дебичи, как ты () => () конструкцию на 10 этажей и сиди разбирай. Еще про Си вспомнил, что за долбоеб, земля тебе пухом
Анон, поясни за перспективы Шарпа в датасаенс. Кто-то его юзает или проще забить хуй, удалять Rider и качать мануалы по питону и R?
Блядь, ссылку на случайный пост сделал
Расскажи, какие ты задачи в "Дата саенс" хочешь решать?
еня вот позавчера один "дата саентист" очень слёзно просил ему в sql-server Включить поддержу питона, потому что тока на нем можно быстро работащий код написать для его дата-аналайзиса.
Открываю, значит, его код на питоне, а там просто все данные из таблички в память засаываются, а потом циклами всякие медианы считаются. Было для меня небольшим откровением о том, что такое дата-сайнс.
Ну вот к примеру обсчет данных секвенатора, чтобы из обрывков последовательность ДНК собирать
Хотя я ж еще не практик, я просто мимовкатыш.
>"дата саентист"
>поддержу питона
99% этих бездарных уебищь только для этого питон и используют
Тогда не уверен, что шарп тебе подходит.
Мелкомягкие сделали ML.Net, однако он выглядт, как набор готовых решений: «бери и используй», а все, что выбивается за рамки регрессионного анализа, всяких там популярных подходов, вряд ли будет сделано хорошо.
МАЙКРОСОФТ ГИГАНТ С СЕРЬЕЗНЫМ ЭНТЕРПРАЙЗЕМ
В БИНАРНИКАХ АНАЛЬНЫХ ЗОНДОВ НЕТ
>Понаписывают
Маня, если ты даже с лямбдами обсираешься и сам не понимаешь что понавысрал через 5 минут, то не надо это проецировать на других
Синтаксический сахар упрощает читаемость и поддержку, для этого он и создан. А то что кто-то его не к месту юзает, обсирается и бежит ныть на двач - это не проблемы белых людей
Бтв в одном я неправ, признаю. Тебе не в тред плюсовиков, слишком умно для тебя будет. Тебе к гошникам, которые даже дженерики осилить не могут и кричат НИНУЖНА. Вот там ты точно приживешься.
Хочу выучить байткод C# с целью реверсинга софтины, скомпиленной под .NET. Какую книгу подскажете?
Не байткод, а MSIL он же CIL (Common Intermediate Language). У Троелсена есть глава в которой он рассматривает некоторые примеры.
Пытаюсь записать их в файл, но пишет что я долбоеб и System.String[].
да, я в курсе что делегаты - это ссылки на метод, а не контейнер хранящий методы.
Однако, пик 1 - работает, а пик 2 - нет.
На пик 3 - метод, который принимает string[] и ДОписывает в файл.
Помогите, чому в файл записывается System.String[] вместо нормального текста. Я пытался создавать отдельный массив в который записывал примерно так:
string[] newarr = new string[] {Convert.ToString(searchImageFiles(path)), Convert.ToString(searchVideoFiles(path))};
Всё равно в файл дописывалось System.String[]
В гугле не забанили, пытался гуглить - в итоге нихуя не понял. Ебусь второй день. Да, я долбоеб, говнокодер итд итп. Прошу помогите
1. Смотрите, я подключил EF Core и заметил что если обращаться к контексту БД постоянно, производительность существенно падает. Как я понял, связано это с тем, что я сохраняю постоянно прямо в базу при каждом изменении полей классов, которые мне нужно держать в актуальном состоянии. Я ебанул костыль с тем что при запуске программы создается статичный класс с хэштаблицей, который все что мне нужно из базы один раз читает, я в таблицу пишу-апдейчу, при закрытие "синхронизирую" это говно с базой. И как-бы да, производительность сразу возросла в разы, только я чет думаю что я хуйню делаю. Как правильно-то? Я думал что может просто убрать сохранение изменений и вызывать его по таймеру, но не уверен что это правильный выход.
2. Как правильно свой вебсервер реализовывать на базе HttpListner? Просто я как-бы сделал простенький, но получается, что в классе этого сервера куча методов которые просто идут в папочку и достают страничку. Скажем, я догадался парсить URL запроса и рефлексией методы вызывать, чтобы не делать огромный switch-case, но вот что как настроить маршрутизацию нормально? Типа тупо же делать кучу одинаковых методов которые нужны просто чтобы /Home /Index и просто / выдавали одну и ту же страничку, но по другому я пока не представляю как делать, типа думал может сделать файл с "маршрутами", в виде словарика, в котором кусок URL - ключ, а значением выступает метод, тогда получится, что я из URL могу получать название методов и даже может от рефлексии можно будет отказаться, но тоже хз.
Какой тип имеет searchFiles?
Почему на первом пике в case 2 ты сначала отнимаешь, а потом присваиваешь совершенно другое значение, затирая предыдущее? Тебе не кажется, что что-то тут лишнее?
не факт что помогу, но интересно
Invoke я по привычки ебнул. Вообще правильно было бы написать: search?.Invoke(path), так делегат выполнится только если ему что-то присвоено -> внезапно твоя фиговина не упадет из-за NullReferenceException, при этом это короче чем if(search!=null) писать.
> а Where
Это хуйня из linq. Linq крайне приятная штука на самом деле при работе с любыми коллекциями, списками, массивами и т.д.
Просто выполняет(вызывает?) делегат. Экзекуцию производит.
Если это тип string, то почему ты передаешь ей аргумент (path)? Короче я хз что у тебя происходит. Я правильно понял, что вместо пути ф файл записывалась строка "System.String[]"?
На втором пике в case 3 аргументы справа от знака присваивания твои собственные? Возможно, где-то в них что-то не так?
В файл должен записываться путь, который возвращает метод. Проблема в том, что я не знаю как возвратить нормально массив со значениями, из-за этого в файл записываются не пути а system.string[]
Массив в шарпе - это указатель, соответственно ты можешь передавать имя массива как аргумент или возвращаемое значение, и все должно быть ок.
что у тебя идет после Where?
Твой проеб в этом месте из-за того что ты пытаешься массив конвертить в строку. Соответсвтенно вызывается метод ToString(), который и возвращает тебе System.String[]. Тебе нужно было просто объединить массивы. Мог, например, создать третий размером как эти два и в него закинуть все, либо просто ебануть список и в него впихнуть эти два.
Еще 5 копеек.
Зачем тебе считать в цикле, если ты можешь просто свойство Length у массива посмотреть? Т.е если тебе нужна была сумма, ты мог просто Console.WriteLine($"Amount: {TxtFiles.Length+DocxFiles.Length}");
Ну и да, с Linq это короче было бы.
>Зачем тебе считать в цикле, если ты можешь просто свойство Length у массива посмотреть?
Точно, совсем об этом почему-то не подумал. Ты прав
>Твой проеб в этом месте из-за того что ты пытаешься массив конвертить в строку.
Понял, спасибо. Я пытался объединить массивы, но нихуя не получалось. Спасибо тебе большое
Зачем ты из войда ретёрн делаешь после того как форич завершился? Я еще понимаю, типа чтобы "аварийно" выйти из метода, но тут-то зачем?
Для порядка, по привычке.
Можешь объяснить хотяб чуть-чуть на счет того, как работает Where в твоем коде? Я погуглил, +- что-то понял, но всё как-то запутанно
Проходит по всей коллекции и сравнивает значение коллекции с условием, которое я передал в лямбдой, возвращает элементы которые соответствуют этому условию. Можно было бы не лямбду использовать, а передать метод, как на скриншоте, просто лямбдами в данном случае проще.
Понял, спасибо.
Можешь скинуть код, у меня почему-то файл не создается. Отдельный класс не делал, так как пока что похуй на него
А то люблю шарп, но джава на большем кол-ве платформ есть…
Это будет хуйня костыльная, которая будет работать в два раза медленнее. Лучше уж сразу компилятор в java байткод делать.
Хз, у меня всё равно как бы я не дрочил твой код - не создаётся файл. Я пытался делать через File.AppendAllText, но там 2 аргумент это то, что записывать с типом string, в то время как методы возвращают string[]
Пытался сделать файл в ручную - всё равно нихуя не записывается
всё, проблема решилась сама
Все тренировочные уже за тебя придумали.
Fundamentals-of-Computer-Programming-with-CSharp-Nakov-eBook-v2013
Вот в этой книге годные примеры.
Шутишь, наверное !
Вполне можно рассматривать в качестве "проекта" даже написание одной единственной, но крайне полезной функции. А таких функций, которые ещё нужно написать, но они пока не написаны - буквально вагон !
Потом из этих готовых функций уже проще собирать программы.
К примеру, написать функцию, но это, пожалуй, даже и на библиотеку тянет. Хорошо, библиотеку, имеющую такую экспортируемую функцию, что в неё хендл растра изображения передаёшь в первом параметре, а во втором хендл окна в котором искать. А эта функция возвращает координаты найденного изображения в указанном окне, либо -1, если изображения этого в указанном окне нет. Вот мне как раз такая нужна.
Или, скажем, такая функция : в неё передаёшь в первом параметре строку в которой искать, а во втором массив структур. Сама структура описывается двумя полями : первое поле - искомая подстройка, а второе поле - число. Число или 1 или 0 в зависимости от направления поиска в искомой строке(вперёд или реверс).
Функция возвращает позицию последней в массиве экземпляров стркутур подстройки в искомой строке или -1, если подстройка эта не найдена.
То есть, некий аналог функции поиска подстройки, только, во первых, реверсивный, а во вторых, ищет не одну подстройку, а сперва одну, затем от неё следующую в указанном направлении, от неё следующую в новом направлении и так далее.
Иметь такую я бы тоже не отказался - полезная штука для разбора текстов.
Или вот, недавно написал уже правда, в функцию передаёшь строку, она возвращает массив, представляющий собой бинарник файла изображения формата PNG, в растр которого "вшита" строка, переданная в параметре.
И обратная функция - ей передаёшь в строке путь к файлу PNG, а она возвращает строку, "вшитую" в растр этого файла, если найдёт в файле маркер IMG-архива.
Но мне надо усовершенствовать, чтобы в обратную функцию передавать не путь к файлу, а массив с бинарником файла.
Шарпы это сложный бэкенд язык со статической типизацией, для легких 300к надо ноду, но на нее нет джунов
Фреймворки же наоборот упрощают жизнь, разве нет?
И еще, думаю косвенно заденет первый вопрос. Как JS макаки пилят код под backend? Через WebApi? Я не думаю, что проекты на ASP.NET высирают через View-Razor (разве что full-stack), думаю что как раз таки через webApi.
Поправьте, если что не так, т.к. всегда писал серверную часть и с UI мало имел дела (за исключением пары высранных проектов в MVC5)
>у меня архитектура
>Вопрос про основы веба из учебника 8 класса информатики
>Как это вообще работает?
Главная проблема сярпомакак: дрочите платформу и какие-то паттерны, абсолютно без понимания происходящего
>у меня ONION архитектура
Сука, как же я заорал на всю хату. Что ж у тебя не хексагональная-то, архитектура твоя?
Ю а олреди дед инсайд
Реализуешь логин на свой говносайт, создаешь базу пользователей, каждому присваиваешь идентификатор, используя его в своих методах для определения отдельного пользователя. Что, блять, сложного в этом?
Всё нужное есть у Троелсена, далее ты закрепляешь всё Альбаири, после чего можешь пройтись по классике вида Рихтера. Никакие видеоговнокурсы не нужны, только время потратишь, хуже будет только чтение метанита.
Двачую про Троелсена, купил его, отлично все расписано, читать все подярд не обязательно, некоторые вещи можно пропустить вначале, например манипуляции с родительскими классами типа System.Object,да и самые первые главы про работу компилятора тоже, если ты совсем ньюфаг. Есть кучу примеров, единственное я еще хотел бы упражнения для самостоятельной работы, но их нет, благо я придумал себе пет проджект, на нем и испытываю все новое, что изучаю
мне пишут тут через куки это делать. К тому же получается в каждый метод, где нужна регистрация пользователя, нужно передавать POCO пользователя, я правильно понял?
Читать лучше в оригинале.
>например манипуляции с родительскими классами типа System.Object
Этого как раз пропускать нельзя, это основы которые должен знать каждый, как только ты их поймешь, так сразу легче будет понимать всё остальное.
Нет, для вката она не совсем подойдёт, так как 2013 года и код в ней может быть местами устаревший. Начинать лучше с Троелсена, а её использовать для закрепления материала, потому что примеров там много и они все годные и интересные.
Понятное дело лучше, но когда у тебя уровень А1 как у меня, смысла нет вообще, я буду через слово искать в словаре. Инглиш стараюсь в местах попроще подтянуть.
Так Web-макака - как раз ты, раз не понимаешь, зачем web api нужен.
Очень просто:
1. для команд, где фронт и бэк разделены, например, где фронт пилят на Angular.
2. Для интеграции с дургими системами, например, ваша CRM-система находится в облаке (bitrix-24), к тебе с сайта падает заявка в базу, как ты ее отправишь в CRM? через Web Api, который разработчики CRM-системы предусмотрительно для тебя сделали.
>Web-макака - как раз ты, раз не понимаешь, зачем web api нужен.
Я же не веб макака, чтобы мне такое знать
Энивей, спасибо за ответ
Обфускаторы никто не отменял
в этом могут помочь события
твои методы могут публиковать события когда пользователь меняет сущности
модуль записи изменений слушает события и сохраняет их
разумеется, вместе с изменениями событие должно будет содержать объект или айдишку пользователя
https://martinfowler.com/eaaDev/EventSourcing.html
не совсем твоё но прочесть стоит
покажи код?
Спасибо, кэп, но нет:
>Любое эквивалентное ему не подходит
>Лол, лаба3?
Хуже используемая в проде либа генерит разметку, разбирая экспрешн три
я суть понимаю, как это реализовать, но как правильно - нет. Поэтому и обратился к анону. По сути можно и входящим параметром передать POCO usera, где по полям записывать данные, но мне нужна была та практика, которая считается эталонной (правильной).
Энивей, спасибо за совет
В общем, решил сам. Надо было в классе делать не List<T> а BindingList<T>, но так как класс уже сохранён и если сделать данное изменение, то он не загрузится, то пришлось делать костыль вида:
foreach (var win in App.Current.Windows)
{
if (win is WindowWithComboBox cbw)
{
cbw.CmboBox.Items.Refresh();
}
}
профайлер
while(client.Online)
{
await ReadAsync(buffer);
var response = await handler.ParseAndMakeResponse(buffer);
await WriteAsinc(response.ToBytes());
}
Предупрежу что это псевдокод, а не настоящий код из моей хуйни.
И, в общем, то, оно работает нормально, только вот срань в чем: Если клиентов много и все они онлайн, мой сервер, судя по отладчику, большую часть времени занимается тем, что переключается между тредами, на втором месте стоит как раз этот метод общения. Мне это чет не нравится. Как делают умные люди, если сервер не просто должен запрос-ответ делать, а сохранять открытым подключение с клиентами, которых может быть довольно много?
в ненси например вроде рекомендуется что-то подобное, но хуй знает, чот говняво
я бы не велосипедил как сверху уже сказали
А я бы и рад, только вот как я могу нормально готовым решением пользоваться, не понимая всего этого? Вот возьму я готовый TCP сервер, сделаю просто обработчик своего супер-протокола, а потом окажется что там какая-то фигня случается, а я не знаю почему и как починить.
>>50433
Тут коммуникация заканчивается после приема сообщения. А у меня клиенты - тупой конечный автомат, эмулирующий работу одной железяки, которым нужно чтобы канал все время сессии был открыт.
>не понимая всего этого?
Для этого книги есть, с примерами. Уверен, что в примерах рассматривается такой вариант. Но нахуй нам книги читать, если можно долбится в стену как баран, используя то, о чём ты не имеешь представления, при этом надеяться, что это представление у тебя появится чудесным образом.
Я читал книги, лол. Там в плане голого TCP/IP со своим протоколом как раз все время примеры примерно как у меня, а дальше идет про HTTP и фреймворки для работы с ним, а мне не нужен HTTP, с HTTP любой дурак может, я хочу свой супер-протокол, с блекджеком и шлюхами, без кучи ненужной инфы, при этом чтобы нужная инфа была в форме которую я хочу получить, а не здоровенного пакета с гипертекстом, жейсоном и прочим говном. А все книги по голому TCP/IP для ебучего Си написаны и я нихуя в них не понимаю.
Ну вот ты и пришел к правильному логическому выводу - ты выбрал не тот инструмент. Учи Си и изобретай свои велосипеды, у шарпа совсем другое предназначение.
Я таки базово знаю си. И с ним проблема в том, что если что-то наебнется, я через месяц об этом через 500 лет узнаю. А писать сразу так чтобы не наебнулось я не умею. Весь мой кодинг состоит из собирания всех возможных граблей и ломания того что работало в процессе починки того что не работало.
Суть в том, что весь твой кодинг имеет смысл только в плане обучения, для решения задач уже есть готовые библиотеки и фреймворки.
>а потом окажется что там какая-то фигня случается, а я не знаю почему и как починить.
System.Net.Sockets - в ней фигня случится? Ты ебу дал? Тем более все баги фиксятся или на их проблему есть решение ты знаешь, где искать
>я хочу свой супер-протокол
тредом ошибся, додик
>>50540
еще один шизоид. "Если сломается..." А если тебя завтра машина собьет, то что?
Если мы снимаем деньги, зачем прибавлять к балансу количество денег?
А, изначально неправильно написали, я не дочитал, сори
Чего блять? Если у тебя есть реализация своего протокола, то бери TcpClient и гоняй байты через него.
Потому что надо на языке источника читать.
Я хочу чтобы было оопшно, чтобы не просто байтики гонять для одного протокола, а можно было, в теории, любой с минимумом телодвижений, чтобы расширяемо и масштабируемо и это вот всё.
А что лол-то?
Это снова я. Типа решил переписать свой супер сервер. Посидел часика 2 и выдал это. Хуй знает лучше ли так чем было, потому реквестирую кодревью, если кому не лень.
поменяй чтоб поддерживал несколько конкуррентных сессий
поменяй чтоб я мог инжектить собственные хендлеры без привязки к твоему Handler
и в продакшен (нет)
https://github.com/BakaVaka/SuperTcpServer/blob/master/SuperTcpServer/src/SuperTcpServer/Request.cs
запрос сам себя читает и возвращает запрос?
у стрима есть метод CopyToAsync(), которым можно скопировать весь стрим сразу в MemoryStream. все эти манипуляции с буферами непонятно.
Bytes не будет работать, если не вызван ReadAsync(). это называется temporal coupling и от этого нужно избавляться.
вообще не понятен смысл этого класса. это бесполезная обертка, которая не делает ничего.
https://github.com/BakaVaka/SuperTcpServer/blob/master/SuperTcpServer/src/SuperTcpServer/Host.cs
зачем то добавляешь сессии в словарь и они там остаются навсегда
вообще много классов, которые не делают ничего. просто пустые обертки, которые просто отправляют все клиенту обратно. это можно заменить одной строчкой.
var client = await _listener.AcceptTcpClientAsync();
var stream = client.GetStream();
await stream.CopyToAsync(stream);
>реквестирую кодревью
>переписать свой супер сервер
>Посидел часика 2
Ну и получился у тебя тцпшный хеллоуворлд, чего хотел-то?
while((DateTime.Now-startTime).Minutes<10)
{;}
Здравствуйте! Я представитель гугла, как можно с вами связаться? Я бы хотел вам предложить работу старшего ведущего главного программиста за 300МММ/нсек.
КопиТу у нетворка не закончится до тех пор, пока стрим не будет закрыт каким либо способом (клоуз/диспоз/ексепшн из-за отвала клиента).
У шарпа тоже как и у джавы дженерики во время рантайма трутся?
Да тот код будет валится от любого чиха. Автора уже не раз тыкали носом и объясняли, что и почему. Но он продолжает писать херню и бредить про свой проктакол.
Ну блин, няша, я понимаю про что ты говоришь, но только вот дело в том, что если писать как вы говорите не получится универсально. В этом проблема, одни протоколы передают заголовком длину, у других конец отмечается разделителем, третьи вообще не предполагают что есть какой-то конец пакета, и коммуникация завершается при разрыве соединения. Я хочу чтобы все это было можно впихнуть в мой супер сервер просто описав протокол(его уровни, какие там данные, каким алгоритмом шифровать и это вот всё) и просто дописывать новые протоколы, не меняя ничего в логики приема реквестов и формировании респонсов, если они нужны. Т.е., условно, чтобы если мне нужно было новый протокол реализовать, я бы мог просто его описать, создать хэндлер и впихнуть его в сессию, и больше ничего не трогать.
Неужели ты думаешь, что я не понимаю о чем вы говорите? Блин, все я понимаю, только вот ваши советы подходят для конкретных реализаций, а моя цель - сделать мою хреновину универсальной.
Я, конечно, пока не придумал, как это все сделать чтобы мне понравилось. Например, в текущей реализации конкретного протокола(моего супер протокола), я вообще циклов для чтения не делал, у меня там стейтмашина, в которую записываю что при очередной итерации комменикации пришло, у стейтмашины - евент детекции пакета, который слушает хендлер, хендлер при срабатывании - формирует ответ и добавляет в очередь отправки. Таким образом само общение выглядит примерно так:
int readed = 0;
byte[] buffer = 0;
while(!session.Stoped){
readed = await stream.ReadAsync(buffer, 0, buffer.Lengnh);
sessionStateMachine.addAndParse(buffer,0,readed);
while(sendingQueue.Length >0)
await stream.WriteAsync(sendingQueue.Dequeue().ToBytes());}
}
В этой, более новой реализации, я от конкретики пытаюсь отойти. Плюс, меня смущает что сейчас у меня получается стейтмашина еще и сессией управляет(может закрыть ее, если пакет невалидный(слишком длинный, например), когда детектит пакет - отдает его хендлеру, который вообще на хую вертит сессию как свою шлюху, еще и в базу пишет, вообще стейтмашина и хендлер теми еще Ерохиными вышли и в них слишком много логики было и когда я попытался от них наследоваться чтобы другой протокол реализовать, слишком много нового кода пришлось присать, при том что отличие протоколов в наличии шифрования и отсутствии пары уровней).
Ну блин, няша, я понимаю про что ты говоришь, но только вот дело в том, что если писать как вы говорите не получится универсально. В этом проблема, одни протоколы передают заголовком длину, у других конец отмечается разделителем, третьи вообще не предполагают что есть какой-то конец пакета, и коммуникация завершается при разрыве соединения. Я хочу чтобы все это было можно впихнуть в мой супер сервер просто описав протокол(его уровни, какие там данные, каким алгоритмом шифровать и это вот всё) и просто дописывать новые протоколы, не меняя ничего в логики приема реквестов и формировании респонсов, если они нужны. Т.е., условно, чтобы если мне нужно было новый протокол реализовать, я бы мог просто его описать, создать хэндлер и впихнуть его в сессию, и больше ничего не трогать.
Неужели ты думаешь, что я не понимаю о чем вы говорите? Блин, все я понимаю, только вот ваши советы подходят для конкретных реализаций, а моя цель - сделать мою хреновину универсальной.
Я, конечно, пока не придумал, как это все сделать чтобы мне понравилось. Например, в текущей реализации конкретного протокола(моего супер протокола), я вообще циклов для чтения не делал, у меня там стейтмашина, в которую записываю что при очередной итерации комменикации пришло, у стейтмашины - евент детекции пакета, который слушает хендлер, хендлер при срабатывании - формирует ответ и добавляет в очередь отправки. Таким образом само общение выглядит примерно так:
int readed = 0;
byte[] buffer = 0;
while(!session.Stoped){
readed = await stream.ReadAsync(buffer, 0, buffer.Lengnh);
sessionStateMachine.addAndParse(buffer,0,readed);
while(sendingQueue.Length >0)
await stream.WriteAsync(sendingQueue.Dequeue().ToBytes());}
}
В этой, более новой реализации, я от конкретики пытаюсь отойти. Плюс, меня смущает что сейчас у меня получается стейтмашина еще и сессией управляет(может закрыть ее, если пакет невалидный(слишком длинный, например), когда детектит пакет - отдает его хендлеру, который вообще на хую вертит сессию как свою шлюху, еще и в базу пишет, вообще стейтмашина и хендлер теми еще Ерохиными вышли и в них слишком много логики было и когда я попытался от них наследоваться чтобы другой протокол реализовать, слишком много нового кода пришлось присать, при том что отличие протоколов в наличии шифрования и отсутствии пары уровней).
2-3 года назад замарин требовал от тебя слишком много знаний специфики обоих платформ, при этом чтобы что-то красивенькое сделать, нужно было слишком много самому писать или ебашить с помощью браузера, лол, в то время как у нативной разработки куча всего было из коробки либо на расстоянии вытянутой руки, и выходило что написать два приложения по времени и затратам было проще чем ебаться с кросплатформенностью замарина. Ко всему, 2 года назад была куча багов внутри самого замарина, которые никто не спешил фиксить. Потом я съебался из той конторы и не знаю как сейчас с замарином дела, но т.к. от тех кто остался я слышал, что в фирме решили таки нанять таки IOS и андроид разрабов, вместо того чтобы ебать замарин, думаю не особо лучше.
Благодарю анон, за инфу.
Такие универсальные штуки уже сделаны - TCP/UDP. А дальше поверх их реализуешь свою логику описав протокол(его уровни, какие там данные, каким алгоритмом шифровать и это вот всё) и просто дописывать новые протоколы, не меняя ничего в логики приема реквестов и формировании респонсов, если они нужны. Т.е., условно, чтобы если мне нужно было новый протокол реализовать, я бы мог просто его описать, создать хэндлер и впихнуть его в сессию, и больше ничего не трогать.
Каждый раз заебисто писать как собирать байтики в объект чтобы работать с ними уже в твоем приложении, няша. Хочется чтобы просто описал то как данные должны выглядеть, какие типы пакетов есть и все это, и у тебя при получении таких вот данных рождались объекты нужного вида, с которыми ты уже можешь роботать и логику работы самого приложения строить.
это сериализация. и никакие серверы для этого не нужны.
вот например декларативная сериализация для любых протоколов https://github.com/jefffhaynes/BinarySerializer
хотя я считаю что этого не стоит. гораздо проще наскриптовать решение под конкретную задачу, чем писать какую-то универсальную программируемую систему.
новички особенно страданием созданием абстракций систем.
Хм, и почему не стоит-то? Выглядит удобно вроде как.
ToString - потому что многие стандартные методы используют его для отображения пользователю. Например, вывод в консоль или вывод в контрол WPF/WinForms.
Equals для того чтобы стандартные методы и методы библиотек могли правильно сравнивать объекты твоих классов.
GetHashCode для того чтобы объекты твоих классов можно было безопасно помещать в хэш таблицы и использовать в качестве ключей словаря.
Проще, чем был для меня фронт потому что после ТСа большая часть вещей очевидны сходу. В делегатах и событиях за часок разобрался, хотя итт вон люди по нескольку раз спрашивают эту хуету.
Сижу вечерами в качестве развлечения за изучением шарпа пока что.
В общем, я решил активно продолжать вкатываться в сей шедевр, но хотелось бы перед всем этим услышать все возможные подводные камни ASP.NET Core на линуксе (если таковые имеются). я программист пуганый, поэтому критику нормально воспринимаю.
>подводные камни ASP.NET Core на линуксе
Сейчас самому впердолить практически нереально даже моно, приходиться ставить бинарники
Ну все вытекающие проблемы из бинарников, бля
Заблоаченые блобы со всем, что можно
Танцы с бубном, если %либанейм% отсутсвует или тем более что-нибудь динамическое типа glibc неподходящей версии
Возможные конфликты зависимостей поставленных одновременно рантайма и сдк
Ожидание, пока кто-то наконец родит пакет последней версии, победив весь депенденси хелл
Это просто пиздец, учитывая, что все давно опенсорснулось
Звучит как-то странно для официальной поддержки, тем более что для МС это официальная кормушка для azure.
Можешь реальный пример, а то выглядишь как зеленый.
Да ну нафиг мне ее собирать, когда есть пакеты уже.
Нехренатушки, во время я решил накатить шарпея.
Выглядит как очередная попытка майков поднять обосранные штаны. WPF мёртв, WinForms мёртв, все приложения переделывают в SPAшки, переписывая на ангуляр. В качестве фреймворка для разработки предлагают ебанный Electron, которым пользуются JS макаки (производительность соответствующая). Сделали код опенсорсным когда он уже нахуй никому не нужен, сейчас выкатят какую-нибудь забагованную хуету, ебатся с которой никто не захочет, все будут использовать уже проверенные решения. Даже не знаю на что майки надеятся.
Как бы тебе сказать то помягче, десктоп давно уже практически мертв. Что ты там ожидаешь нового? Это уже узкая ниша. В любом случае, залёт хотя-бы части шарп разработчиков на линух, сделает его хотя бы частично юзабельнее.
>забагованную хуету, ебатся с которой никто не захочет
Это слияние всех проектов, дотнет становится полностью опенсорс и един.
Надеюсь они захватят долю wasm, когда тот станет вменяемым и вопрос о выборе языка перестанет быть актуальным.
Не мёртв, если речь идёт о программах, которые работают на маке, линуксе и винде одинаково. А не для десктопа у шарпа есть только бэкенд, в котором он далеко не лидер.
> захватят долю wasm
wasm это сорт оф мёртворожденная технология. Она очень
узкоспециализированная. Почитай блог яндекса на хабре, они пытались переделать свои яндекс.карты на васм, в итоге оказалось, что этого того не стоит.
.
Да, да, мы все поняли, Шарп не нужен, Майкрософт обосрались, дотнет мертв. Съеби уже из треда, которую неделю срешь, клоун
А как же TypeScript? Он сейчас в трендах.
Тот же IoT и POS на Винде намного более вменяемый, чем лютый пердолинг с иксами на Линуксе.
>wasm
Это технология, которая позволит писать полноценный апплиухи без реактов и прочей тормозящей херотени. Если кучка программистов пытается сделать что-то с DOM, когда все взаимодействие происходит через js и тормозит как js. То конечно, это вызывает много вопросов.
Мне почему-то кажется, что все не до конца понимают зачем это все делают.
Кстати уже играются - Blazor.
>в котором он далеко не лидер.
Да не нужно быть в лидерах, когда ты рвешь всякие говно-спринги в плане производительности. Понимаешь, как получается, jvm - классная технология с устаревшим языком, которая местами обросла низкокачественными решениями.
Дотнет достойная технология, с качественными решениями, в которую реально инвестируют немалые ресурсы. осталось только пара балбесов линуксоидов из нулевых, которые не выросли мозгами и вечно воют с маздаем.
blazor это хуита, которая интерпретирует .net код и подгружает весь ебаный рантайм для своей работы. У этого нет будущего.
Надо ждать когда в wasm завезут сборку мусора, может тогда получится хоть как-то транслировать net код.
>Может кто не объяснить, что вообще событие делает?
вызывает по очереди все методы, ссылки на которые были добавлены к этому делегату.
Двачую. Событие УЖЕ произошло. Как оно может что-то сделать, лол? Какие же тупые двачеры пошли.
Нихуя не понял. Здесь какая-то хуита. Просто сделали какую-то хуйню чтобы просто так её вызвать
Блять. Событие ничего не делает. Это обработчик событий может что-то сделать.
Передает объект в метод, который подписан на событие. Ты же не можешь обработчик для каждого отдельного случая предугадать, поэтому у тебя есть event, который передает параметры и принимает методы, которые будут обрабатывать эти параметры в определенный момент времени - в данном случае во время начала/конца/прогресса копирования. Как они это будут делать - их дело, сколько их будет тоже неважно.
Удобно это и тем, что обработчиков вообще может не быть, что их можно добавлять, а потом убирать. Вот была бы у тебя программа с прогресс баром, ты бы вставил в метод, где сейчас event, обычный обработчик, который отображает прогресс загрузки файла. В итоге для кастомизации (например, если ты не хочешь чтобы этот прогресс отображался), тебя нужно было делать отдельную переменную, которая проверялась бы каждый раз. Если бы ты хотел отображать загрузку каких-то определенных файлов, то и для этого нужно было делать отдельные переменные-флаги. С событием всё это делать не нужно. Ты просто добавляешь обработчик, когда он нужен и удаляешь его, когда не нужен. Для отдельных файлов тоже самое, при этом для перезаписи логики обработки тебе не нужно лезть в код основного метода в котором это событие вызывается.
Вроде понял. Спасибо
>когда в wasm завезут сборку мусора
Ну вот, ты уже и сам понимаешь что wasm не в конечной стадии сейчас.
...и местами он будет даже не про html другой вопрос как на это согласился гугл и эпл, так как это будет прямой конкурент мобильным приложениям
wasm это не замена, а дополнение. Смысла заменять им мобильные приложения нет, потому что по скорости будет проигрывать. wasm выигрывает только в тех местах, где нужны глубокие и долгие вычисления.
Про замену ты сам сейчас написал.
Полноценные сайты-приложения, убьют потребность в половине существующих мобильных круд-приложений.
В общем, риа-сайты очень невыгодны мобильным вендорам, не зря же флеш и прочие плагины так убивали.
Объясните на пальцах, как работать с Git-ом командой. Везде пишут, что задача проект дробится на задачи и над проектом в одно время работают N человек, которые создают N веток. У меня вопрос: Как мерджить в master, чтобы код добавлялся, но не выпиливал куски другого кода. Объясню еще проще: Если проект разбить условно по версиям:
Path1 version = 1.0
Path2 version = 1.0
Path3 version = 1.0
Над проектом работает 3 человека, каждый работает над своим куском. Когда начинаем мерджить в master, то что получается:
Мерджит 1 человек свой Path1:
Path1 version = 1.1 (условно)
Path2 version = 1.0
Path3 version = 1.0
Мерджит 2 человек свой Path2:
Path1 version = 1.0 (тут должен быть 1.1, но когда человек начинал разрабатывать проект, то версия его ветки была 1.0 и соответственно ее и замещает в master)
Path2 version = 1.1
Path3 version = 1.0
Спасибо за ответ
уже подсказали в Version Control треде
>>1555702 (OP) >>1555702 (OP) >>1555702 (OP)
ПЕРЕКАТ
>>1555702 (OP) >>1555702 (OP) >>1555702 (OP)
ПЕРЕКАТ
никогда, configSource требует расположения файла в той же директории или директорией ниже
Это копия, сохраненная 9 февраля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.