Вы видите копию треда, сохраненную 6 апреля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ITT элита продолжает обсуждает будущее этого прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.
Литература вторым постом
1. Ресурсы:
- http://stackoverflow.com/questions/tagged/c#
- http://www.tutorialspoint.com/csharp/
- http://professorweb.ru
- https://metanit.com/
- http://net-informations.com
- http://habrahabr.ru/hub/csharp/
2. Онлайн-компиляторы:
- https://dotnetfiddle.net/ - возможно лучший вариант. Встроено немного убогое, но все-таки автодополнение и проверка синтаксиса.
- http://ideone.com/
- http://csharppad.com/
- http://www.tutorialspoint.com/compile_csharp_online.php
- http://rextester.com/l/csharp_online_compiler
3. WinForms или WPF?
Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае WinForms, делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить?
Неправда. C# довольно активно развивается, недавно вышла третья версия .NET Core фреймворка и восьмая версия языка. Весь дотнет понемногу становится опенсорсным, а ASP.NET становится независимым от платформы. В некотором смысле понемногу вымирают десктопные приложения с развитием веб-технологий, но в том же энтерпрайзе он еще очень даже востребован.
5. Какую ИДЕ выбрать?
Для Windows самым очевидным вариантом будет Visual Studio (https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx). Студия распространяется в двух редакциях: бесплатная коммьюнити-версия и платный энтерпрейс эдишн. В большинстве случае будет достаточно Community-версии: она поддерживает и C#, C++, VB.NET и F#, а так же имеет возможность установки дополнений
Для мака и никсов самый юзабельный вариант - MonoDevelop ( http://www.monodevelop.com/download/ ).
Для vim можно использовать OmniSharp ( https://github.com/OmniSharp/omnisharp-vim ).
Кросплатформенный полуредактор/полуIDE VS Code ( https://www.visualstudio.com/en-us/products/code-vs.aspx )
Также существуют плагины для Atom'а и Sublime Text, но функциональность там достаточно сильно урезана.
Кроме того, в данный момент JetBrains активно пилит свою IDE для шарпа (Project Rider), вероятно в ближайшее время станут доступны первые EAP. IDE заявлена как кросплатформенная, со всем решарпер-функционалом, поддержкой отладки, моно и .net core.
SharpDevelop - еще одна IDE для C#, отличается малым размером (около 20мб) и опциональной портабельностью, при этом имея дизайнер WinForms и WPF, а также интеграцию с FxCop, StyleCop и прочими ништяками. Если хочется что-то по быстрому набросать, а выкачивать гигабйты нет желания, то возможно SharpDevelop будет лучшим вариантом.
6. С# для мобильной разработки
Если нужны инструменты для разработке под мобилы, смотри сюда - https://docs.microsoft.com/ru-ru/visualstudio/cross-platform/cross-platform-mobile-development-in-visual-studio?view=vs-2019.
Из актуальной литературы
- Xamarin Mobile Application Development
- Xamarin Essentials
7. Дополнительные инструменты для разработки на C#
LINQPad - сорт оф REPL, с возможностью быстрого подключения к БД и удобной визуализацией данных
dnSpy - декомпилятор, малоизвестный форк ILSpy, где реализована возможность модификации IL-кода прямо в EXE и DLL файлах, отладка IL-кода и много других фич для reverse engineering'а. Плюс няшные темы как в студии
dotPeek - бесплатный декомпилятор от JetBrains
scriptcs - для запуска C# кода как скриптов, возможность использовать как REPL
8. Расширения для студии
ReSharper - одно из известнейших. Рефакторинги, умный автокомплит, настраиваемый стиль кода. Платный, но можно стянуть с торрентов
Supercharger - показывает "карту" с классами, методами и всем остальным сбоку от кода с возможностью прыгать по ним
Indent Guides - показывает вертикальные линии на каждом уровне отступов.
Format document on Save - форматирует код каждый раз при сохранении документа
Code alignment - Выравнивает код по указанным символам. Удобно, например, при инициализации словарей или в перечислениях
Обзор Roslyn: https://github.com/dotnet/roslyn/wiki/Roslyn Overview
Новые возможности C# 8.0: https://docs.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-8
ПРИНИМАЮТСЯ ПРЕДЛОЖЕНИЯ ПО ШАПКЕ
Код этой шапки: https://pastebin.com/YJFQKsNm
Прошлый тред тонет здесь: https://2ch.hk/pr/res/1555702.html (М) ( >>1555702 (OP) )
Архивач: https://arhivach.ng/thread/527520/
Архивач в TOR'e (доступен через TorBrowser): http://arhivachovtj2jrp.onion/thread/527520/
9. Что почитать?
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет.
- C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- Pro C# 7: With .NET and .NET Core (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
11. Хочу еще хардкорней
- C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата.
- Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода.
- .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам
12. Литература по WPF
Из более-менее актуального можно выделить пару книг:
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
13. Литература по ASP.NET
- Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
- Pro ASP.NET MVC 5 Platform (Adam Freeman)
- Beginning ASP.NET for Visual Studio 2015 (William Penberthy)
14. Литература по асинхронности, параллелизму и всему такому
- Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции
- Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная
- Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg
15. Литература не по шарпу, но так или иначе связанная с языком
C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity
Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
16. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"
17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
- Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick
- Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун
- Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках
- Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы
- Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST
- Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID
18. Я не умею читать, что посмотреть?
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://goo.gl/meyyxO
- Коллекция видеоуроков, по всему дотнетовскому и смежным темам (250 часов, на русском) - https://nnm-club.me/forum/viewtopic.php?t=891636
- Набор курсов по C# от O'Reilly Media (28 часов, на английском) - http://rutracker.org/forum/viewtopic.php?t=5082978
9. Что почитать?
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода.
- C# 7.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином. Уже появилось издание для 8.0, однако в интернетах пока его нет.
- C# 7.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой
- Pro C# 7: With .NET and .NET Core (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха.
- C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал
- CLR via C# (Jeffrey Richter) - это классика, это знать надо.
- C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются.
- Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили.
11. Хочу еще хардкорней
- C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата.
- Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода.
- .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам
12. Литература по WPF
Из более-менее актуального можно выделить пару книг:
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
13. Литература по ASP.NET
- Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson)
- Pro ASP.NET MVC 5 Platform (Adam Freeman)
- Beginning ASP.NET for Visual Studio 2015 (William Penberthy)
14. Литература по асинхронности, параллелизму и всему такому
- Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции
- Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная
- Pro Asynchronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg
15. Литература не по шарпу, но так или иначе связанная с языком
C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity
Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов.
Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
16. Но я не знаю английский, как я буду это все читать?
На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"
17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
- Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick
- Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун
- Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках
- Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы
- Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST
- Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID
18. Я не умею читать, что посмотреть?
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://goo.gl/meyyxO
- Коллекция видеоуроков, по всему дотнетовскому и смежным темам (250 часов, на русском) - https://nnm-club.me/forum/viewtopic.php?t=891636
- Набор курсов по C# от O'Reilly Media (28 часов, на английском) - http://rutracker.org/forum/viewtopic.php?t=5082978
Что делать если прошел собес, взяли на работу а как пришла пора работать понимаешь что нихуя не знаешь?
шапка без аниму? Я сплю?
>>586054
устанавливал IDE, скролил двощь, создал 3 POCO, пофиксил 1 баг (супер легкий), читал книгу (имитировал чтение), пиздел с другими гребцами по моей прошлой работе, pet projecty. А ну да, еще я пил кофе и хавал.
Всо
Ну метанит рил гавно, подсмотреть там что то можно но как сайт для обучения полная хуйня
Скажите, можно ли вкатиться в шарп на линукс? То есть юзать монодевелоп. Тррелсен нормально для этого или надо все же на винде тренироваться?
у тебя в голове утонул? Я вообще удивлен, что ты смог дистрибутив установить. Небойсь убунту еще?
>1585903
Гофер, ты?
На SO.ru пишут юзайте TPL вместо Thread, на хабре пишут Предпочитайте async/await вместо Task
Там же пример
public async Task<Data> GetDataAsync()
{
var result = await MyWebService.FetchDataAsync();
return new Data (result);
}
Ебаны рот тут и ТПЛ есть и авейт
ПИЗДА, нихуя не понятно
Был сначала Thread, потом добавили TPL, потом добавили async/await
async/await - это что? Это прибулада для TPL? Или это отдельная функция языка?
Эвейты-хуейты. Создал по старинке Thread'ов столько, сколько нужно, и работаешь. Вся эта новомодная хуита всё равно в них превращается компилятором.
Нет нет нет. Учит мать часть уродец.
Вообще есть 2 типа Task`ок(одни с тредом, другие без), крч гугли узнавай.
https://blog.stephencleary.com/2013/11/there-is-no-thread.html
>>586386
Я хочу сделать многопоточный парсер, но для этого сначала нужно разобраться с потоками. Как я понял Авейт/эсинк это ожидания выполнения метода, пока не выполнит хуй куда пойдет.
Как мне просто к примеру запустить 100 раз один метод, в каких то случаях он выполнится в каких то нет, в каких то будет исключение.
Но мне не надо ждать выполнения этого метода, мне надо выполнять другие методы пока выполняютсе 100 раз тот метод.
await это не ожидание выполнение метода, а передача процессорного времени основному потоку. Если тебе надо 100 раз один метод, то твой выбор это TPL.
720x1280, 0:03
что бы ты, уебище тупорылое, не задавал тупорылых вопросов, а занял себя чем ни будь
Например в плане асинхронного программирования? Там асинк авейт может как-то улучшили?
Ну, обычный геттер в данном случае. Чтобы не писать кучу раз a{get{return b;}}; b{get{return c*60;}}...
Ну и да, лямбда, по сути, любая анонимная функция, ты можешь прямо в коде например что-то такое сделать:
x = 10;
for(int i = 0; i< 100000; i++)
Task.Run(()=> Console.Writeline(Interlocked.Increment(ref x));
и ничему ее не присваивать, просто тебе нужно какую-то логику реализовать, а выносить ее в отдельную функцию не хочется из-за того что будет использоваться один раз в одном месте. Хороший пример это как раз конфигурирование хоста, ты же не будешь делать кучу методов по настройке, а просто запихнешь это дело в лямбды.
А что не так с асинавэйтом? А так в 7ой и 8ой версиях один сплошной сахар много разных плюшек завезли
>А что не так с асинавэйтом?
Ну, раньше нельзя было сказать прямо и чётко в каком из потоков асинхронщине жить, нужно было сет контекст вызывать, и вообще, насколько я помню свой обработчик очереди задач нужно было писать, или что-то в таком духе.
А без пердоленья оно работало только в однопотоке.
И обмен данными был проблемой.
Может удобства какие завезли для многопоточных асинхронных приложений?
потому, что /pr это не для идиотов не осиливших софт. Вы, вкатыши, при первой проблеме должны гуглить, а не бежать на 2ch/SOF и создавать тред. Или вы думаете вы прийдете на галеру и будете дергать за юбку ментора при каждой проблеме? Вас нахуй выгонят в первую неделю
720x1280, 0:03
>ORLY? Тут кроме студентоты и ванаби нет никого.
И как же ты это определил, мне интересно? Судя по твоему логическому заключению ты не осиливший первый раздел дискретки. Это или за решетки только конченные дауны берутся, не умеющие гугл или правила базовой логики, или IT-боги пробивают дно?
аргументируй? Я могу аргументировать свое высказывание - ты привел всех к общему знаменателю вкатышей, хотя если бы читал треды и знал, какие задачи решают вкатыши/студенты, какие джуны и какие мидлы - ты бы понял, что твое суждение не верное. Соответственно ты или дебил, не умеющий анализировать прочитанную информацию или сам вкатыш.
Какую структуру данных лучше выбрать, для хранения комментариев к картинкам?
Количество комментариев может изменяться,
поэтому самое простое что пришло на ум - это хранить список комментов в одельных файлах, по строкам.
Есть что-то лучшее, без базы данных?
>И как же ты это определил
Так что львиная доля постов, если отбросить срачи и тролинг, это либо рассуждения о том как лучше учить язык, либо совсем нубские вопросы.
>не осиливший первый раздел дискретки
таки даже не пробывал
> конченные дауны
имиджборды всегда были пристанищем особо одаренных ¯\_(ツ)_/¯
720x1280, 0:03
заовнен, несите следующего
elasticsearch
Гуглить я и без тебя умею. Хотелось бы услышать мнение профессионала, насколько шарп применим в линукс, а не твои фантазии о вкатышах и дискретке.
Если сказать нечего по теме, зачем гадить?
Ты же не родился со знаниями комплюктор саенс, и тоже когда-то учился.
Каждая жаба-макака так и хочет везде выебнутся. Печет жопу, что жаба - говно. 5 стадий принятия неизбежного.
Что я делаю не так? Или я как-то не так понимаю как действуют массивы?
using System;
public class Program
{
public static void Main()
{
string [] namess = new string [5] {
"Sergei", "Vasya", "Anders", "Oleg", "Kirill"};
string [] zap = new string [5]{
", ", ", ", ", ",", "};
int a = 0;
int c = 0;
while ((a < namess.Length) || (c <= zap.Length)){
a++;
c++;
Console.Write(namess[a]);
Console.Write(zap[a]);
}
}
}
Пишет:
Vasya, Anders, Oleg, Kirill
Run-time exception (line 19): Index was outside the bounds of the array.
Stack Trace:
[System.IndexOutOfRangeException: Index was outside the bounds of the array.]
at Program.Main() :line 19
Что я делаю не так? Или я как-то не так понимаю как действуют массивы?
using System;
public class Program
{
public static void Main()
{
string [] namess = new string [5] {
"Sergei", "Vasya", "Anders", "Oleg", "Kirill"};
string [] zap = new string [5]{
", ", ", ", ", ",", "};
int a = 0;
int c = 0;
while ((a < namess.Length) || (c <= zap.Length)){
a++;
c++;
Console.Write(namess[a]);
Console.Write(zap[a]);
}
}
}
Пишет:
Vasya, Anders, Oleg, Kirill
Run-time exception (line 19): Index was outside the bounds of the array.
Stack Trace:
[System.IndexOutOfRangeException: Index was outside the bounds of the array.]
at Program.Main() :line 19
>>587443
Вот нормально:
using System;
public class Program
{
public static void Main()
{
string [] namess = new string [5] {
"Sergei", "Vasya", "Anders", "Oleg", "Kirill"};
string [] zap = new string [5]{
", ", ", ", ", ",", ", " "};
int a = 0;
int c = 0;
while ((a < namess.Length) || (c <= zap.Length)){
a++;
c++;
Console.Write(namess[a]);
Console.Write(zap[a]);
}
}
}
>>587443
Вот нормально:
using System;
public class Program
{
public static void Main()
{
string [] namess = new string [5] {
"Sergei", "Vasya", "Anders", "Oleg", "Kirill"};
string [] zap = new string [5]{
", ", ", ", ", ",", ", " "};
int a = 0;
int c = 0;
while ((a < namess.Length) || (c <= zap.Length)){
a++;
c++;
Console.Write(namess[a]);
Console.Write(zap[a]);
}
}
}
Ебёт, но не сильно. В Юнити недавно запилили incremental собиратель мусора, плюс делают фреймворк для data oriented design
Как у вас глаза к концу дня от черной темы не вытекают??
Особенно напрягает, когда прыгаешь на сайт с белой темой (не обязательно в гугл, может и свой сайт) глаза просто вытекают.
там с владением натрахаешься, кто получил ссылку, кто владение, а кто ваще вывалился
Пишешь как на каком-нибудь F# и про специфику владения можно не думать, если в ансейф не лезешь.
У меня черный браузер с плагином, который делает все сайты черными. На самсунге галакси даже не нужен плагин, оно это по дефолту делает.
Они взяли с плеч программиста прямое управление памяти и положили его снова на плечи в извращенной форме.
https://pastebin.com/HZ11FY3J
Вызвал метод в единственном месте - 104 строка.
В шарпе тоже пердолинг с памятью появился, всякие:
Span<int> numbers = stackalloc int[length];
struct of arrays + ref structs
Или фиксированные массивы в структуре.
Будь аджайл как говорится.
Ну у тебя были с++ со структурным программированием, но с прямым контролем памяти (на самом деле тоже йобу завезли).
Теперь у тебя йобо-структурное программирование и в коде ты контролишь больше херни, нежели пишешь бизнес-логику.
Это как с асинхронным программированием, или вообще с многопоточностью. Кажется все просто и легко, но накладывает на тебя определенный слой проблем и требований. И код уже не такой легкий.
В общем, шило на мыло поменяли. И все равно мы видим что пишут unsafe.
>с прямым контролем памяти
Только если в ансейф залазишь, а так, чисто субъективно, владение ресурсами проще и лучше умных указателей, или самописных костылей. Зато нет ГЦ.
>И все равно мы видим что пишут unsafe.
Он если и есть, то локализированный, а не размазанный по всему коду.
>Это как с асинхронным программированием, или вообще с многопоточностью.
Всего-то разобраться с атомиками, мемори барьерами и иммутабельностью.
>мемори барьерами
Вот это вообще как два пальца обоссать, потому что есть только полная версия из вроде 4 на плюсах.
>сложность возникает в решении реальных задач
Надуманная сложность про реальные задачи.
>асинхронный хайлоад меня интересует
В облаках ничего веселого: вкратце, агрегаторы между сервисами, обмазанные эластик сёрчом. И всю эту хуйню крайне сложно тестировать, а документацию писал какой-то мамкин маркетолог про борозды просторов космоса. Еще и бабки списывает за юз, благо не мои.
Можно, конечно, продавить свое квадратное колесо: по типу микросервисы/акка/орлины. Присобачить кеш, носиквел, очереди, эвенчул персистентность, кибану какую-нибудь. Но тут нужен прокачанный архитектор или мастерство вешать лапшу на уши. И все равно получится агрегатор между сервисами, только еще и самописным горизонтальным масштабированием, реплецированием. И не дай боГ ты пишешь аля биллинг.
Я бы этому сайту не доверял:
>tools
>PedidosYa
>https://github.com/netflix жаба, потом жабаскрипт
боюсь экзаменационной комиссии это явно не понравится)
>Надуманная сложность про реальные задачи
Это ты свое самолюбие потешить хотел? Теорему фреди крюгера знаешь?
Скоро, походу, бамплимит. Это говно даже в архивач лить не хочется.
Сам же высрал неинформативную и короткую фразу, которая даже к треду не относится.
Идея в избегании аллокации памяти, так как это дорогая операция, нагружающая сильно сборщик мусора, у определенного ряда задач, например, парсера.
Я так посмотрю тебя в гугле забанили и ты не знаешь жабу. Их тысячи, вот на жабе https://swagger.io/
Допустим, у меня есть некий код с игрой, которую я хочу запускать через exe в консоли.
Как это сделать в Visual Studio? Я создал проект типа "Консольное приложение" и поместил код как показано на 2 пике
Не, мне нужно создать именно что exe с игрой, чтобы был один файл, который запускался бы через консоль и там была игра
Спасибо
У меня проблема была, оказывается, только в том, что я сделал (a++; c++;) до вывода этого в консоли. Я думал, у меня там вообще всё не так
Эх, я думал, умею говорить на жаба языке, чтобы понимали такие как ты. Похоже, такие как ты, не лечатся.
Так вот, я сделал интерфейс, в нем объявил свойство которое должны имплементировать классы, которые будут предоставлять строку "Hello world!".
Потом я добавилс класс HelloWorldServce, который собственно должен будет имплементировать этот интрефейс.
Ну и собственно добавил бекграунд сервис, который выводит вызывает метод сервиса.
Собираю это все хостбилдером, чтобы внедрить зависимости. И вот тут затуп. Смотрите, когда сервис вывел строку, мой хелловорлд не закрывается и продолжает работать, ожидая пока я нажму Ctrl+c. Как это исправить? Я думал насчет того, чтобы добавить событие HelloWorldPrinted и мой синглтон при возникновение этого события, будет завершать программу, но мне кажется, что тут я нарушаю какую-то концепцию связанную с DI, ведь нелогично получается. Может быть есть какой-то более правильный способ завершить приложение, после вывода строки, а то не хочу чтобы мой Хелловорлд был говнокодерским.
Зачетная тема. Похожа на свекольник.
Ран асинк на последней пикче блочит завершение приложения. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-3.1#waitforshutdownasync
Я не умею гадать на кофейной гуще. По ссылке пример реализации, дергаешь StopAsync, когда тебе надо.
Во, залил на гитхаб. Аж со второго раза разобрался как это делать. Сложная штука этот ваш гитхаб...
https://github.com/BakaVaka/Hello-world
Ооо. Спасибо! Ты спас мой хелловорлд!
А вот и не малолетний!
По мнению некоторых это тестовый полигон фич C#.
Правой кнопкой на проекте -> publish
Не. Там транспорт идет через mtproto, с этим все норм. Просто когда пытаюсь вызвать библиотеку через viewmodel страницы razor в blazor, то blazor вылетает
Вот. Мне и нужна помощь как завести tdlib под blazor. Единственное что пришло это через .net core web API. Но tdsharp вообще не хочет заводится. В репозитории в примере написано одно, а в nuget пакете вообще другие классы, как быть хз
И сам пример в репозитории вылетает с переполнением вызовов класса
Зависит, что ты пытаешься получить. Если тупо отобразить в браузере, то делаешь мидлварь (например webapi) по середение, которая работает с либой, а на вьюху отправляешь результат.
да, я так и хочу. Будет 3 стороны типа (MVC). View - blazor, control - .net core web api, model - tdsharp. С первыми двумя нет никаких проблем, осталось завести tdsharp, а как я не знаю
Так начни с чего простого на коленке: аутентификация, вывод названий чатов. А потом просто наращивай функционал.
Если не понимаешь как работает либа, то лучше сперва выкинь блейзор - сделай обычное консольное приложение.
понимаешь, библиотека просто вылетает и не хочет работать. Я же говорю даже пример вылетает с переполнением вызова метода из tdlib.dll
Он написал тупой враппер над апи, ты и сам такое сможешь написать. Даже https://github.com/egramtel/tdsharp/pull/32 не работает?
так теперь новый прикол. В примере просит вызвать SetTdlibParameters, при отправки этого метода просит вызвать CheckDatabaseEncryptionKey. А при вызове этого метода просит вызвать SetTdlibParameters, лол это как?
Он это и так делает на 37 и 51 строках. Надо только константы задать на 10-12 строках.
так константы есть. А при обычном вызове, пример зависает на ResetEvent.Wait(); и все
>зависает на ResetEvent.Wait()
Ожидает UpdateAuthorizationState или UpdateUser при обработке события. Ставишь дебаг на дефолт ветку и смотришь что приходит, скорее всего какая-то ересь пришла.
Этот пример лучше: https://github.com/tdlib/td/blob/master/example/csharp/TdExample.cs#L73
ага, перепишу. Я даже не знаю чем ClientResultHandler заменит из примера в tdlib, пиздец. пойду дальше ебаться
есть еще идея разобрать https://github.com/egramtel/egram.tel и посмотреть как там сделано, но там вообще пиздец, мне до такого уровня еще топать и топать
Но сервис аутентификации выстреливает на каждый экшн каждый раз. В коде проверка сертификата в сервисе валидации вроде простая - просто проверяю thumbnail на имеющийся в базе. Но меня пугает, что возможно kestrel/iis в бэкграунде с сертификатом делают кучу других действий для валидации, и всё это может вылиться в нехуёвый оверхед а я как раз делаю api из соображений, что реквестов будет много, допустим по 30 в секунду от клиента, и каждый будет весить ~2мб+.
Так вот, стоит ли мне заморачиваться и выносить аутентификацию в отдельное приложение, которое требует клиента предоставлять серт и заставлять его перед запросами сначала сходить на апи аутентификации, там ему на успешную валидацию сертификата возвращать какой нибудь токен, с которым клиент уже будет ходить на обычный апи в другом приложении без запроса клиентского сертификата и записать токен в базу?
mtproto был заранее проверен в телеге
На рутрекере
а если серьезно, в чем соль? В простом ограничении, что WebApi возвращает только данные? Почитал статейки на SOF и других порталах - это все, что я понял :(
Чтобы ты сущности отделял друг от друга. Когда у тебя фронт на JS, тебе в проекте в 95% случаев не нужно все то говно что есть в дефолтном проекте, а возиться с пустым ты не хочешь, вот ты и ебанул web api проект в свой солюшн, сделал там пару api контроллов, которые json'чики возвращают, токены и прочее и не трогаешь больше его.
Так-то ты и в консольном приложении можешь как контроллы начать использовать, так и запилить свой велосипед с HttpListener'ом или вообще ебануть на сокетах и сам будешь Http парсить, и все то же самое, в конечном итоге делать, но тебе добрые индусские господа сделали готовы шаблон именно когда тебе только api нужно, в который просто напихай своих api контроллов и оно будет со своей задачей справляться.
Инверсия контроля очевидная - интерфейс в виде апи можно прихуярить к чему угодно - к фронтенд фреймворку, к мобильному приложению, к десктопу, к чему угодно, что к интернету подключается.
MVC пережиток прошлого и уг
>>Когда у тебя фронт на JS
а он что, бывает на чем то еще?
>>95% случаев не нужно все то говно что есть в дефолтном проекте
выпиливается 3-4 кликами
>>589235
>>Инверсия контроля очевидная
она не дефолтная в webAPI, ее в любом проекте нужно самому реализовывать
>>можно прихуярить к чему угодно
как и обычный web core
Нипанимаю
соль в том, что майки развивают .net core, а в стандартный asp.net фичи уже не завозят. пока что это не критично и всё фичи .net core, идущие из под коробки, за разумное время можно реализовать и в старом asp mvc 5 приложений. но не факт, что так будет всегда и в .net core в дальнейшем не завезут каких либо киллер фич
кого то прельщает кросплатформенность. хочешь - хости на iise, хочешь на линуксе через kestrel
и это только внешняя сторона вопроса. возможно они еще и внутри переделывают .net, чтобы был производительнее и тыры пыры
> а он что, бывает на чем то еще?
Блядь, разором, сука можно делать, чего ты как ебанат? Можно хуячить на веб-формах, на Жаве, сука, блядь, ньюфажина ебучая.
> выпиливается 3-4 кликами
А можно взять готовый проект и нихуя не выпиливать, ебанат ты этакий.
Пиздец, ему по полочкам разложили, а он как ебучий ребенок, сука. Не нужен - не пользуйся, вообще, можешь все проекты с пустого текстового файла начинать и ебашить, а собирать с помощью .net CLI, пидрила ты тупая.
А то, что тебе объяснили зачем оно надо, а ты продолжаешь дурочка строить из себя. Как тебе еще сказать, чтобы ты понял, блядь?
Я другой анон. Но тот анон просто задавал вопросы, а ты сразу говнишь, мразь. Иди нахуй в андроид треды с таким отношением к коммьюнити, там все такие токсичные, как ты.
Я ему ответил нормально сразу, он из себя строит дауна. Почему я должен к тому кто строит из себя дауна относиться не как к дауну?
>Блядь, разором, сука можно делать, чего ты как ебанат? Можно хуячить на веб-формах, на Жаве, сука, блядь, ньюфажина ебучая.
хуясе порвался даун. Я тебе приотрою тайну, что фронт на 99% состоит из JS, твой рейзор (интерпритатор html+C# в HTML) без JS != фронт 2к20.
На джаве веб, ну нихуя себе даунил в треде сидит
>>589307
>>ответил нормально
лучше бы вообще ничего не писал, профита больше было бы
> Я тебе приотрою тайну, что фронт на 99% состоит из JS
А бек на 80% из ПХП, хули ты в шарпотреде сидишь, дебич? Фронт на JS онли, бек на PHP, и горя не знай. Нахуя тебе дотнет вообще нужен?
Маня, ты ебанулся? Ты не различаешь фронт от бека. После этого
>>Блядь, разором, сука можно делать, чего ты как ебанат? Можно хуячить на веб-формах, на Жаве, сука, блядь, ньюфажина ебучая.
я вообще не знаю, зачем тебе что то пишу. Ты же просто отбитый. Создай .NET Core проект, скомпилируй и посмотри во View, что такое бандлы, рендеринг и как работает View с Razor.
Я вопросы людям задаю, а не животным
>Я вопросы людям задаю
И тебе уже по человечески ответили что блядь вебапи нужен ДЛЯ УДОБСТВА, когда тебе нужен только апи. А мвс нужен когда у тебя фронт на разоре каком нибудь. И что это просто шаблон. Сразу же тебе так ответили, черным по белому и без мата.
Но ты продолжил спрашивать А НАХУЯ, А Я МОГУ УДАЛИТЬ ТО, А МОГУ СЕ. Ты ж или тупой или тупостью троллишь. Все правильно тебя хуями покрыли.
мимо тоже пригорел
>>мимо тоже пригорел
тоже фронт на джаве пишешь наверное?
Я свято верю, что на борде сидят не только окатыши. Но все чаще разочаровываюсь :(
>Фронт на жаве
Да хоть на кложурскрипте, тебя ебет? И похуй во что оно там компилится, ты же не говоришь что разрабатываешь на машинных кодах только потому что твой код компилится в итоге в них
Поинт анона был в том что мвс для старого подхода с разором, вебапи для жс фреймворков и прочих современных вещей. Так доебаться до слов надо уметь
>Окатыши
И нахуя ты мем из пораши притащил, ещё и используя его неправильно? Ты точно дегенерат.
парень ты конечно извини, но ты далек от разработки приложений на .NET Core (судя по тому, что ты пишешь)
Я уже получил ответ и решил развернуть дискуссию на тему "Зачем возу 5ое колесо"
>>И нахуя ты мем из пораши притащил
вообще не понял о чем ты, ты видимо какой то дегрот 7ой параллели
Окатыш - маленькие камешки (см. малолетки)
я на двоще получил много годных советов, не как строчки местами поменять, а касающихся архитектуры и компоновки проектов, но из за таких, как ты мне стыдно говорить, что сижу на борде
алг матрица_мин_макс
нач
мин = макс = М[1, 1]
для и от 1 до Н
нц
для ж от 1 до М
нц
если М[и, ж] > макс то
макс = М[и, ж]
конец если
если М[и, ж] < мин то
мин = М[и, ж]
конец если
кц
кц
вывод мин
вывод макс
кон
Непонятно, что подразумевается под минимумом по j. Найти "минимальный столбец"? А как столбцы сравнивать, если над векторами не определена операция сравнения?
Вот поэтому я и не осилил эту хуйню в свою время, что даются какие-то неформальные формулы, будто не математика, а гуманитарщина какая-то.
Значит, должно быть максимальное значение в столбце и при этом минимальное в строке? Хуита какая-то. И наверняка есть готовое решение.
Находятся минимальные элементы во всех столбцах и из них выбирается максимальный элемент в строке, это и будет оптимальной стратегией
На бумажке то оно на раз решается, но следующие критерии ещё хуже, а я уже на первых встал с переводом в программу
алг
нач
кон
в тетрадке.
И компилировал у себя в голове.
Сука, а я так надеялся, что он нас научит всяким сортировкам, обходам графов, балансировке деревьев...
а потом ебал скалкой в жопу за пропущенную точку с запятой, угадал?
А нам вот вполне адекватно преподавали плюсы. На контрольных можно было выбрать, на бумажке будешь делать или на ЭВМ. Но если на ЭВМ, спроса с тебя было больше, в конце обязательно должна получиться работающая прога. А на бумажке могли закрыть глаза на косяки.
Суть такая - есть клиент-серверное приложение, клиент - WIndows Forms на фреймворке, сервер - консолечка на Core
На клиенте и сервере прописана структура из 2 полей - строка и массив байт
Я хочу эту структуру передать по TCP и для этого преобраую ее в byte[] с помощью Marshall. При сериализации на клиенте получается массив из 12 байт, его я отправляю на сервер. Сервер получает эти 12 байт и пытается их десериализовать в такую же структуру. Однако, когда я получаю размер структуры на сервере чрез Marshal.SizeOf(), то вместо 12 байт он получает 24 и в итоге при дальнейшем копировании указатель уходит в никуда.
В чём проблема? Почему абсолютно такая же структура имеет другой размер на сервере?
Можно без денег, я готов потратить на тебя и твой говнокод 10 минут бесплатно.
Я б свою сериализацию сделал. Там две строчки, но зато понятно что и откуда было б.
Аноны, поясните, ASP.NET и ASP.NET Core - по написанию кода примерно одно и то же? Или разный подход? Хочется учить свежее, Core, но по нему не могу годных гайдов найти.. По ASP.Net полно, но на первый взгляд кажется что это вообще разные вещи.
Ок, спасибо. Осталось найти всё-таки гайд по core, что б какую-нибудь простейшая програмка была разобрана, а не сразу портал по взлому пентагона.
Нет на примере ничего?
Видимо я тоже ненавистник.
Как то люблю гайды, что б для чайников было. Сначала запускаем пустое приложение, потом выводим текст, кнопку, реакцию на кнопку и т.д. С усложнением, но что б можно было реализовывать сразу. А там - просто теория сплошная. Уже пробовал по ихнему гайду - разочаровался.
>А там - просто теория сплошная
Ну уж нет. Его тут как раз хейтят за поверхностность, там как раз показывается как сделать хуюшку, но без углубления зачем и почему. И оглавление намекает
>Запуск приложения. Класс Program
>Класс Startup
>Конвейер обработки запроса и middleware
>Методы Use, Run и делегат RequestDelegate
>Методы Map и MapWhen
>Создание компонентов middleware
>Конвейер обработки запроса
>IWebHostEnvironment и окружение
>Статические файлы
>Работа со статическими файлами
>Обработка ошибок
вот тебе шаг за шагом, и маленькое приложение готово.
>>590417
>выводим текст, кнопку, реакцию на кнопку
Так это тебе к фронтендерам и жс макакам.
>>590417
> Уже пробовал по ихнему гайду - разочаровался.
Ну не зашло, так не зашло. Можешь попробовать максимальный уровень деградации - видеотуториалы.
Сейчас вот, кстати, почитал гайд этот ещё раз. Как раз первые 7 пунктов - сплошная теория. А в восьмом уже идёт построение приложения. Попробую завтра реализовать. А уже потом может быть стоит разбираться в нюансах, если пойдёт.
Так без первых семи, ты в восьмом сможешь только скопипастить код и охуевать от того, что там понаписано. Но дело твое.
У Троелсена есть.
Из новых:
Mark J. Price - C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development Fourth Edition-Packt (2019)
Мутанита не трогай, это дерьмо можно использовать только как краткий справочник и только когда ты не знаешь какой именно класс из стандартной библиотеки тебе нужен, но знаешь, что какой-то есть.
>>Mark J. Price - C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development Fourth Edition-Packt (2019)
Есть у кого схоронить eng/rus doesn't matter? Pdf/Word/html?
> этого преобраую ее в byte[] с помощью Marshall
Зочем? Просто сделай метод в структуре: ToByte() В нем что-то вроде:
byte[] msg = new byte[str.Length+byteArray.Length] // со строками правда нужно учитывать, что если это UTF какой-нибудь, так низя будет, нужно будет сначала строку с помощью Encoding перевести в байтики.
Потом в этот массив msg в цикле запихни все это. Это СТОПРОЦЕНТНЫЙ способ, потом побайтова распарсь. Базарю. Серелизации-десерелизации, когда это не какой-то общепринятый стандарт, это хуйня и в рот ее ебал.
> В чём проблема? Почему абсолютно такая же структура имеет другой размер на сервере?
Потому что в Маршал размер в рантайме смотрит и он может меняться в зависимости от положения звезд и того, как компилятор решил оптимизировать твое дело за тебя: Может взять и дырки заполонить, может не туда байтик лечь и твою структуру из 3 байтиков распидорасит на 32 бита. Потому либо ебешься со своей серилизацией, либо берешь готовую, либо как настоящий хакер в массивчик руками кладешь.
занести данные в список, который будет представлять из себя матрицу List<List<double>> Matrix = new List<List<double>>();
>Потому либо ебешься со своей серилизацией, либо берешь готовую, либо как настоящий хакер в массивчик руками кладешь.
Либо RPC используешь.
Не надо пытаться есть через жопу. Контрол, нужен для отображения данных и взаимодействия с пользователем. У тебя уже должны быть данные, к которым ты привязываешь DGV.
Спасибо
Банально потому что там не вдаются в детали, а дают простой пример для простой задачи, который ты и без них легко бы сделал за полчаса. Лучше уж тогда какую-нибудь книжку нормальную почитать.
Дак вот вопрос как дальше прокачивать скилуху? Стоит ли еще прочитать Албахари Джозеф, Албахари Бен. C# 6.0. Справочник. Полное описание языка ? Или ограничится прочтением самых непонятных глав и сделать упор на написании своих каких то мелких программ?
Рихтера сейчас тоже читаю но по главам, интерфейсы многопоточность и классы
>Но если смотреть сложный код200строк% то чета нихуя не понятно, чета создается обьект класса, затем этот обьект передается в другой. Что код делает примерно понятно но в основном нет.
Язык -- это инструмент. Зная, как использовать гаечный ключ, ты не получаешь автоматически знание, как устроен автомобиль, с помощью которого он сделан.
Олсо, реверс-инжиниринг чужого кода (в запущенных случаях бывает даже своего годичной давности) -- это вообще отдельный навык, от языка в эпоху доминирования ООП слабо зависящий.
>>1591099 (OP)
Один уже тут такой был. Не видели его с тех самых пор, как он писал про то, что идёт на собес.
Он не знал про интерфейсы?
Вначале тест, потом собес, если сдам. Потом практику ещё у них как работу по времени, но не платят, потом, может, работа. Пизда мне, короче.
Ты главное сразу настройся на то, что помимо того, что дальше теста не пройдёшь, над тобой еще похихикают и будут унижать морально. Прошлый анон слишком позитивно настроен был, даже грозился скайп-интервью записать, в итоге даже в треде не отписался.
бротишка, если тебе за это не платят и не ставят оценки, то бросай нахуй это дело. winforms мертвее мёртвого wpf. если так нравится шарп - учи asp.net core, и учись там на js/ts делать все эти таблицы шмаблицы. не трать золотое время на изучение мёртвых технологий
И физически. Уже избиваю себя палками.
Ты даже код не смог переписать - обосрался с индексами. Индексатор dgv первым параметром принимает индекс столбца, а вторым строки.
>лучше грузить маленькие картинки в OP-пост, чтобы быстрее загружался тред.
Этож твои проблемы. Вакаба сжимает картинки и в любом случае даёт тебе мелкие. Большие ты грузишь только если сам куклоскрипту сказал чтобы он тянул большие.
>>Вакаба сжимает картинки и в любом случае даёт тебе мелкие
Ты в этом уверен? Такие посты в /pr/ видеть - это как себе на ебало ссать
То, что в UI идет пережатый формат - это да. И где тут сжатие, если сорсы картинок все равно хрянятся на ресурсе?
Выйди из /pr еблан, ты слишком тупой, чтобы понять, что хранилище с https://2ch.hk/pr/src/1586030/15808148098740.png (М) - тоже часть движка вакабы
Ты траллируешь тупостью сучёнок? Включи network в браузере и посмотри что хайрез какртинка ТЯНЕТСЯ с хостинга по клику. Нахуй ты настолько тупорылый что даже ОДНУ СРАНУЮ КНОПКУ не смог нажать ип посмотреть сам? НАХУЙ ты в 2020 на трафике экономишь? Нахуй тебя сразу не послали нахуй всем тредом за такие тупые запросы?
>Ты траллируешь тупостью
Уровень /pr/ двача. Пиздец просто. Начнем с того, что твои small-size пики тоже на хосте храняться. А что делает из оригинальной пики small-size? Господь б-г?
Пиздец какой ты тупой. Как ты до сих пор не умер выходя в окно перепутав его с дверью? Я не понимаю.
Квартироблядь детектед.
>Ты хотя бы понимаешь, что такое Wakaba и как работает борда?
Тебе блядь тупорылая скрин с исходником кинули, хуйле тебе непонятно?
>>591546
Боже блять, вкатыши вы обрыганные. На серверной стороне есть хранилища как для full size, так и для small size картинок. Full size - это исходник, который загружает User. Small size - генерится серверной стороной (Вакабой дауны вы тупые) и так же ложит в хранилище и дает линк на UI борды (чтобы страница были легче).
Пиздец уровень /pr/ я в ахуе. Походу тут с шараг и с курсов только даунята сидят.
Тут куда не плюнь в программиста попадёшь.
А вот тпеперь даун, ответь сам на вопрос, какой файл ты грузишь когда открываешь тред.
А потом иди нахуй, потому-что ты сказал ровно то, что тебе ответили в первом же посте. Тупорылый уёбок.
На сервере хранятся как сжатые, так и исходные картинки, сжатые тебе выдаются при загрузке треда, исходные по клику. О чём и говорил анон изначально.
Ещё раз, тебе блядь, показали исходный код где видно что сайт грузит мелкую ресайзнутую картинку.
ХУЛЕ ТЕБЕ НЕПОНЯТНО ЕБОБО? НАХУЙ ТЫ ПРОСИШЬ МАЛЕНЬКИЕ ПИКЧИ В ОП ПОСТ?
>Если загружаю - full size, мне борда выдает пережатый - small size, full хранит в hiden link
Ты хоть сам себя понимаешь, хуйло тупорылое? Что ты вот сейчас высрал? Если загружаю - фул сайз. Мне борда выдает пережатый - смалл сайз.
Пиздец просто, скажи, что это такой тончаший троллинг.
>full хранит в hiden link
Пиздееееееееееееееееееееееееееееееец ты еблан, хоть в анусе у тебя хранит. Складку сеть открываешь и видишь что в итоге по клику происходит загрузка с сервера.
пиздец ты уебище тупое, hiden link from server. Из чего еще может быть линк?
>>591627
походу тот же, что и запостил >>591421
Я пытался, правду пытался, но уровень шараг и вкатышей-манарегров просто ставит меня в тупик. Один линки в разметке хранит, другой сервером картинки пережимает (сервер != wakaba)
>но уровень шараг и вкатышей-манарегров просто ставит меня в тупик.
Ну раз ты даун, то тебя и шараги в тупик постявят.
>линки в разметке хранит
А, ну тоесть a href - это не разметка теперь да? Теперь ты уже даже html не осилил. Ясно, понятно. Видимо ты какой-то особый случай мозгового ампутанта. С чем я тебя и поздравляю.
>(сервер != wakaba)
Даун, ты тут один единственный про вакабу что-то пиздишь. Заканчивай. Никто тебе слова про вакабу не сказал.
Я правильно понимаю, что веб приложения никак не оперируют данными в оперативной памяти? Ну то есть если пришёл запрос, то код должен его обработать, отослать ответ и какие то промежуточные данные где то сохранить (физически на диске. Просто в тхтшник или в бд). Придёт новый запрос - надо брать данные с диска (ассоциировать их с пользователем). Хранить их в оперативке никак не выйдет (ну то есть можно, конечно, написать десктопную прогу, которая будет запускаться параллельно и отправлять данные в неё, но так, в общем то, не делают)
>Я правильно понимаю, что веб приложения никак не оперируют данными в оперативной памяти?
Как понимать этот вопрос? Когда запускается программа, любая, хоть десктопная, хоть консольная, хоть веб-приложение, то в ОС создается процесс, который имеет свою изолированную часть оперативной памяти, в которой рантайм инициирует стек и кучу. Хотя насчет стека я не уверен, но в общем не важно. Пока процесс работает, отрезок оперативки будет закреплен за этим процессом, и он будет оперировать данными, которые там имеются, или будут поступать извне.
>Ну то есть если пришёл запрос, то код должен его обработать, отослать ответ и какие то промежуточные данные где то сохранить (физически на диске. Просто в тхтшник или в бд).
Если важные данные не сохранять, то при поломке процесса они исчезнут. Приложение не может быть вечно запущено, оно может упасть с ошибкой, или сервер упадет от нагрузки, или произойдет что-то еще. В таких случаях данные будут утеряны. Поэтому естественно их нужно сохранять.
>Хранить их в оперативке никак не выйдет (ну то есть можно, конечно, написать десктопную прогу, которая будет запускаться параллельно и отправлять данные в неё, но так, в общем то, не делают)
Можно хранить и в ОП, но только нужно иметь всегда актуальную копию в базе или на диске, или на другой машине. Можно использовать in-memory базы данных, например Aerospike, которые хранят данные как раз в оперативке, и поэтому у них высокая производительность.
>Хотя насчет стека я не уверен
тоже в оперативке
>Можно хранить и в ОП
всегда будет сервер, хотя бы для самого софта или хранения логов/аутентификации
Сделать упор на написание того что тебе интересно, блядь.
Я просто хуею с таких вот: прочитают от корки до корки, пройдут миллион курсов, но дома даже строчку кода не напишут. Открываю тебе секрет: Все что нужно чтобы начать кодить что-то реальное или устроится на работу джуном - понимание булевой алгебры, базовые знания компьютерной математики, элементарная логика и умение строить алгоритмы, 95% остального ты будешь гуглить, от фишек языка и его библиотеки, которые не знал, до алгоритмов которые лучше подходят для решения задачи. Никто, не заучивает наизусть все, ты на проекте уже разбираешься, как устроены те или иные штуки, как работает твой фреймворк и все остальное, а понимание того как строить правильную архитектуру приходит именно после написания своих проектов.
Нет, будем страдать фигней бесполезной, будем читать миллион книг и через неделю забывать что там прочитали и записываться на курс, который будет заставлять программировать. Вот и нафига-то тогда изучать? Ты же будешь на работе страдать, потому что минимум 95% времени первые лет 5 - чисто работа с кодом.
> Хранить их в оперативке никак не выйдет (ну то есть можно, конечно, написать десктопную прогу, которая будет запускаться параллельно и отправлять данные в неё, но так, в общем то, не делают)
Не выйдет, только при чем тут веб-приложения в целом? Ты получил запрос, он будет в куче, ты его как-то обработал, в процессе обработки пару раз обратился к диску, чтобы, скажем, статичный файл считать и отправить или данные из БД достать, запихнуть их в json и опять же отправить, если этот ответ повторяется много раз, ты можешь вообще не обращаться к диску, а создать какую-нибудь свою хитрую очередь, в которой "горячие данные"(к которым чаще всего обращаются) в начале расположены, "холодные" - в конце, те что "очень холодные" выгружаются из оперативки, таким образом поиск будет быстрее, сэкономишь пару миллионов таким макаром.
Ну и вообще, веб-приложения не ограничиваются HTTP, ты можешь запилить хуевину, которая принимает поток данных, обрабатывает и сразу посылает ответ, тут никаких обращений к диску может не быть, все будет либо в куче, либо на стеке происходить.
> Придёт новый запрос - надо брать данные с диска (ассоциировать их с пользователем).
Не обязательно. Если у тебя не очень много запросов отовсюду, то ты вполне можешь поддерживать открытое соединение пока не получишь запрос, либо пока сокет не отвалится; можешь по кукисам проверять залогинен ли пользователь, вообще много чего можешь делать.
https://gist.github.com/Datakda/e769fb154a20cc081f63aa7c8041a7fd
А именно этот кусок
for (int i = 0; i < arrayTask.Length; i++)
{
//запускаем таски по одному до числа кратного 50
arrayTask.Start();
if (i % 50 == 0 && i != 0)
{
for (int a = c; a != i; a++)
{
c++;
//Проверяем на завершение тасков, если запущеные таски из 50 штук не завершены то новые не запускаем
while (!("RanToCompletion" == arrayTask[a].Status.ToString()))
{
Console.WriteLine("Ждем выполнения потока " + c);
}
}
}
}
Смысл таков: Есть массив Тасков, в тасках метод который делает Task.Delay(5000) и запускает метод который пишет в консоль, они должны запускатся по 50 штук и ждать выполнения а потом снова 50 штук запустить, но чета не работает, помогите плиз, вроде же все должно работать хуй его знает
https://gist.github.com/Datakda/e769fb154a20cc081f63aa7c8041a7fd
А именно этот кусок
for (int i = 0; i < arrayTask.Length; i++)
{
//запускаем таски по одному до числа кратного 50
arrayTask.Start();
if (i % 50 == 0 && i != 0)
{
for (int a = c; a != i; a++)
{
c++;
//Проверяем на завершение тасков, если запущеные таски из 50 штук не завершены то новые не запускаем
while (!("RanToCompletion" == arrayTask[a].Status.ToString()))
{
Console.WriteLine("Ждем выполнения потока " + c);
}
}
}
}
Смысл таков: Есть массив Тасков, в тасках метод который делает Task.Delay(5000) и запускает метод который пишет в консоль, они должны запускатся по 50 штук и ждать выполнения а потом снова 50 штук запустить, но чета не работает, помогите плиз, вроде же все должно работать хуй его знает
фикс
в самом верху
int c = 0;
И вообще мб есть что из коробки для контроля потоков? Что то типо ThreadPool только для отдельных задач?
Мне давали ссылки на решение это проблемы но для меня пздц как сложно разобратся в этом, неуж то нету решение из стандартной коробки? Типо Передаешь массив тасков и число потоков, например так Magic(arrayTask,50), в массиве 5к тасков, и эти таски будут выполнять 50 потоков,
Если ты не писал такой код, который читаешь, то ты никогда его не поймешь. Ты можешь прочитать тысячу книг о фичах языка, но если ты сам их не писал и не запускал, то ты никогда их не поймешь и не запомнишь. Прокачивается одним только способом, - написанием кода. C# ты выбрал зря. Слишком много фич и синтаксиса. Начни с языка по-проще, а как будешь уверенно писать код без справочника, тогда и за C# берись.
>Я просто хуею с таких вот: прочитают от корки до корки, пройдут миллион курсов, но дома даже строчку кода не напишут.
К сожалению, большинство думает, что можно научиться программировать читая книги или смотря видео. Когда-то и я был в их числе. Потом понял, что скилл прокачивается только когда пишешь.
>Не выйдет
С чего это вдруг? Предположим пользователь ввел данные, или они пришли как-то по-другому, - теперь они находятся в процессе, в котором запущена программа, их можно использовать в программе спокойно, до тех пор пока процесс не будет прекращен. Все зависит от аптайма, если он непрерывный, то данные можно не сохранять нигде, а хранить внутри процесса. В Эрланге например данные хранят в процессах, только не в процессах ОС, а в эрланговских процессах.
Няша, я просто из-за того как построен вопрос, ответил криво. А именно
> Я правильно понимаю, что веб приложения никак не оперируют данными в оперативной памяти
Конечно, если только запросы обрабатываются и логика обработки не подразумевает обращение к диску, ты можешь полностью в оперативке все приложение делать.
Примерно так.
> Ну ахуеть, как писать код если не понимаешь?
Вот так вот брать и писать. Городя велосипеды и развивая таким образом инженерное мышление. Неужели ты хочешь сказать, Шилдта ты не усвоил циклы, переменные, массивы, функции и классы, а сверху не понял как работает if и логические операции? Это база, которой достаточно, чтобы что угодно сделать, в процессе поймешь, зачем тебе нужны списки, как работать с файловой системой, потоками, зачем нужны события, где надо использовать вместо них делегаты и т.д.
Используй SemaphoreSlim или Semaphore
Уже пол года работаю, так и не понял, зачем нужны события и делегаты наверное потому, что сам ими не пользовался и у сеньора в коде не видел вроде
То есть, то значение, которое получилось в рамке перешло вниз?
При написании гуев, например.
Ты пишешь какую-то свою фунуцию и подписываешь ее на событие -- нажатие какой-то кнопки, при котором эта функция вызывается. Это очень похоже на функции высшего порядка в ФП (в шарпе кстати и они тоже есть), когда ты делаешь как бы "инъекцию" кастомной логики в более обобщенную логику. Например, в стандартной библиотеке Си есть функция qsort, которая может сортировать массив элементов произвольного типа, если определено отношение < на множестве значений типа. Т.е. сама функция qsort не знает, как сравнивать элементы, ты должен это туда передать. Только там это сделано некрасиво и не типобезопасно через указатели на функцию.
У тебя условие while не выполняется никогда.
Нах два раза переприсваивать переменные? Я плохо знаю синтаксис сишарпа, но как мне кажется, тебе цикл не нужен вообще, ведь значения не будут меняться, нет никакой прогрессии.
Двачую. Не учёл, что сперва прогружаются превьюшки. Пикрил.
Но блядь, что за срач я вижу ниже? ОЛОЛОЛОЛОЛ!
Таки да, у тебя условие выхода никогда не выполняется. Ты либо в условии выхода что-то перепутал, либо в формуле расчета.
Можешь просто добавить выход по счетчику, скажем через 10 итераций выходи.
Зарепортила
>>592506
Пасип за ответы, ну буду ковырять дальше.
Просто имею опыт написания для себя десктопных приложух, даже онлайн игру пилил правда не допилил, точнее то что допилил - оказалось неиграбельным, но там как то меньше всяких нюансов знать нужно, как мне кажется.
Вот вообще суть такая - хочу сделать типа базу данных определённую с веб интерфейсом. Десктопная есть. Там суть что программа считывает данные с бд, и потом уже хранит её в оперативной памяти. А пользователь может её как угодно крутить, фильтровать, графики строить по этим данным. Как вносит изменения - так они в бд сохраняются.
В веб версии, насколько я понимаю, фактически при каждом новом запросе (например применить фильтр) надо снова обращаться к бд на диске. И всякие промежуточные настройки тоже или где то сохранять на диске или каждый раз выгружать на форму в скрытых параметрах, а потом получать назад.
Как бы объяснить..
Вот, допустим, у меня в бд хранится список из 100 строк. Пользователь применил фильтр, осталось 20 строк. Пользователь применяет ещё один фильтр. На десктопной версии я просто применяю его к промежуточному списку из 20 строк, получаю 10 и показываю. В веб версии, фактически, мне надо показывая список из 20 строк ещё и выгрузить параметры первого фильтра, что бы потом получить оба фильтра назад, снова загрузить из бд полный список, к нему применить оба фильтра и показать итоговый результат.
Или есть ещё способы?
Юзай in-memory database. Или по хардкору бери Эрланг или Эликсир, там есть Mnesia, база данных реального времени, которая встроена в язык. Кроме того там есть ETS таблицы, которые хранят данные в процессах, то есть в оперативке, и дают доступ к данным за фиксированное время. Используй что-то готовое, проверенное, иначе ты будешь строить велосипеды с квадратными колесами.
>Или по хардкору бери Эрланг или Эликсир
Не, у меня приоритетная цель - выучить шарп в принципе и асп.нет в частности. Это скорее как портфолио пилю, чем как обязательную задачу.
>Юзай in-memory database
Я как бы могу, конечно, напилить ещё одну програмку, которая будет запускаться параллельно, и с которой мой веб сервер сможет общаться и передавать данные. А та уж пусть решает что хранить в оперативке, а что хранить на диске.
Проблема в другом.
Десктопное приложение априори работает с одним пользователем и в оперативке хранит данные этого пользователя. Веб версия должно быть спроектированно так, что бы с ним могли параллельно работать несколько пользователей. И в данном случае - всё равно как то надо ассоциировать хранимые данные с пользователем. В принципе я делал подобное в онлайн игре, но там клиент тоже был приложением, которому я мог задать логику как передавать данные аутентификации и что б это было не так уж легко взламываемым. А тут.. Короче гуглить надо вот эту аутентификацию через браузер... Сам задал вопрос, сам ответил.
> прочитают от корки до корки, пройдут миллион курсов, но дома даже строчку кода не напишут
Вот, а у меня зеркальная ситуация. У меня дофига своих проектов, я на текущей работе (мало связанной с IT) написал херову тучу разных обвязок и программ для облегчения работы, автообработки данных и прочего. Мне (пока что) доставляет программировать, IDE открыта всегда, достаточно часто мне просто в голову приходит какая-нибудь занятная вещь/алгоритм, и я это реализую сразу же (правда достаточно часто это оказываются велосипеды, врать не буду). Но я не учился на это, никогда не читал никаких книг, не проходил никаких курсов (пробовал разок - это скучно пиздец как).
Думал перекатиться в программисты, раз уж мне всё равно это нравится. В итоге завалил несколько собеседований из-за незнания элементарных вещей. Всякие умные термины это для меня тёмный лес, я не знаю ничего. Ни паттернов, ни шаблонов, ни сложностей алгоритмов. Получилась идиотская ситуация, что тестовое задание я могу написать, а теорию не знаю. На одном собеседовании меня даже заподозрили в том, что за меня кто-то тестовое написал.
В итоге продолжаю сычевать на своей неайтишной работе, и не понимаю, что делать дальше. То ли читать книжки и ебаться с теорией, хотя мне этого совсем не хочется. Или чистить свой код и вываливать проекты на гитхаб, хотя там всё узкоспециализированное под мою текущую работу. ХЗ короче.
Почти аналогично, только учебник для чайников я читал. Тоже хочу перекатиться в айти, боюсь слива из за незнания каких то специфических терминов или базовых алгоритмов.
Наверно потому что ты долбоёбушка. Пили пример что сделать хочешь, так нихуя не ясно.
так и пиши - обосрался.
А еще лучше - пиши вопросы, от твоего строчки профита нет, только убытки
Так не получится, в каждом случае нужно будет разное количество итераций
Лол, нет.
>>593250
Бля, что не ясного-то?
Вот я сделал енам:
public enum Transport{
car,
bike,
boat,
airplane
}
Я хочу сделать так:
if(user.Transport.IsNeedOil)
{
//какая-то хуйня
}
В джаве я могу прямо в enum сделать все это, тут же я должен отдельно пилить статичный класс с методами расширения.
Что-то типа:
public static TransportExtension{
publc bool IsNeedOil(this Transport transport) => transport!=Transport.bike;
}
И при этом я так и не нашел, можно ли добавить свойство, чтобы ебучие () каждый раз не писать, потому что некрасиво.
Да, этот пример не показателен, но вот представь, что у тебя есть клиент-устройство, у устройств разные версии протокола по которой должен обрабатывать их сервер, какие-то шаги есть у всех версий, какие-то уникальны, в какой-то версии протокола по этому адресу лежит одна информация, в какой-то другая, какие-то пакеты для данной версии протокола требуют подтверждения, какие-то требуют шифрование, довольно удобно вынести версии в перечисление и потом просто что-то типа:
if(cleint.Protocol.IsNeedConformOnRequest()) client.Send(Response.Conform(Request));
//какая-то общая логика обработки запроса
if(cleint.Protocol.IsNeedCipher()) cleint.Response.Cipher(client.SecretKey(), Protocol.CipherAlgorithm());
Да, это все можно расширениями делать, да можно в классы вынести, но блядь, в жаве-то можно было нормально, хули в модном-молодежном шарпе это так заебисто сделано?
Лол, нет.
>>593250
Бля, что не ясного-то?
Вот я сделал енам:
public enum Transport{
car,
bike,
boat,
airplane
}
Я хочу сделать так:
if(user.Transport.IsNeedOil)
{
//какая-то хуйня
}
В джаве я могу прямо в enum сделать все это, тут же я должен отдельно пилить статичный класс с методами расширения.
Что-то типа:
public static TransportExtension{
publc bool IsNeedOil(this Transport transport) => transport!=Transport.bike;
}
И при этом я так и не нашел, можно ли добавить свойство, чтобы ебучие () каждый раз не писать, потому что некрасиво.
Да, этот пример не показателен, но вот представь, что у тебя есть клиент-устройство, у устройств разные версии протокола по которой должен обрабатывать их сервер, какие-то шаги есть у всех версий, какие-то уникальны, в какой-то версии протокола по этому адресу лежит одна информация, в какой-то другая, какие-то пакеты для данной версии протокола требуют подтверждения, какие-то требуют шифрование, довольно удобно вынести версии в перечисление и потом просто что-то типа:
if(cleint.Protocol.IsNeedConformOnRequest()) client.Send(Response.Conform(Request));
//какая-то общая логика обработки запроса
if(cleint.Protocol.IsNeedCipher()) cleint.Response.Cipher(client.SecretKey(), Protocol.CipherAlgorithm());
Да, это все можно расширениями делать, да можно в классы вынести, но блядь, в жаве-то можно было нормально, хули в модном-молодежном шарпе это так заебисто сделано?
Блин, статик забыл в publc bool IsNeedOil но думаю и так ясно.
Я не шарпист, так что конкретного примера не привиду.
Потому что это, блять, перечисление, с какого хуя в нём должны быть методы и свойства? Это не логично и будет путать при чтении такого кода. Вот увидел ты эту хуйню в коде и будешь гадать, что там васян нахуевертил - класс или перечисление.
> выкати пример, интересно посмотреть
Я не он, но вот тебе абстрактный пример:
У тебя есть кнопка, кнопку ты планируешь много где использовать и кнопка, собственно всегда одна и описывается банально:
public class Button : UIComponent
{
public int X{ get; set; }
public int Y{ get; set; }
public bool IsActive{ get; set; }
public bool IsVisible { get;set; }
public Color BackgroundColor{ get; set; }
public Color BorderColor{ get; set; }
public Margin Margin{ get; set; }
...
public void Click(){
//Собственно общая для всех кнопок логика: Кнопочка потемнела, проигралась какая-то анимация, может быть какой-то звуковой сигнал подала, и т.д.
...
Clicked?.Invoke(this, new ClickEventArgs());}
}
И вот ты в своем GUI разместил кнопку, хочешь чтобы при нажатии у тебя миллиард запросов на сервер отправлялось, а данные брались из других компонентов, ты просто подписываешься на событие Clicked и у тебя происходит магия, при этом в сам класс кнопки ты не лезешь, не делаешь отдельную кнопку: SaveButton, не делаешь еще что-то, просто подписался и каждый раз когда жмакаешь кнопку - что-то происходит, потом ты решил, например ты еще при этом хочешь в файлик начать писать, ты просто к этому событию добавил еще одного подписчика, тот метод вообще не трогаешь, а при этом у тебя добавилась новая логика. Удобно.
Другое дело, как я уже говорил, что это очень много нудной работы по созданию всех этих хендлеров, статичные события в нестатичных классах считаются моветоном, и вообще, когда делаешь в небольшой компании и вы не какую-то библиотеку пишете а активно решаете конкретную бизнес-задачу, события отходят на третий план.
Ну смотри, няша, во-первых, окольными путями это таки делается.
Во-вторых, это же удобно. Предложи мне способ более удобный для каких-то более-менее статичных вещей, получать разную логику, не перегружая рабочий код кучей свитчей и ифов? Сделать класс Transport, добавить глобальных констант и из них брать инфу? Не сказал бы что это удобнее, плюс какой-нибудь еблан возьмет и где-то в 1,5кк строк кода создаст новый экземпляр, там все переопределит и потом ищи из-за чего сломалось, тут, даже если добавят в перечисление какой-то новый метод, ничего старого не должно сломаться.
Я же не предлагаю классы заменять. Но опять же, вот ты сделал enum Color, хочешь чтобы Red+Green давало какой-то производный цвет, при этом он брался не из суммы целых, которыми они обозначены, а из (r1+r2, g1+g2, b1+b2), иногда это очень удобно на самом деле. Опять же, в жаве это прямо в enum делается, можешь сразу так вот сделать:
public enum Color{
red(255,0,0),
green(0,255,0),
blue(0,0,255)
;
private final short red;
private final short green;
private final short blue;
Color(short r, short g, short b){
this.red = r;
this.green = g;
this blue = b;}
}
> Вот увидел ты эту хуйню в коде и будешь гадать, что там васян нахуевертил - класс или перечисление.
Да, еще кое-что, в ООП - все, по сути, классы. И на мой взгляд, как раз постоянно разделять: Это класс, это перечисление, это структура, это еще какая-то фигня; запутывает больше.
>во-первых, окольными путями это таки делается.
Окольными путями много чего можно сделать. Ты еще блок unsafe добавь и там хуевертить начни.
>Во-вторых, это же удобно. Предложи мне способ более удобный
Делаешь абстрактный класс Transport, а от него производные. Если что-то переопределять нельзя, то используешь модификатор sealed.
>Я же не предлагаю классы заменять.
Ты предлагаешь мешать перечисления с классами. Это не добавляет коду читаемости, это запутает тебя после того, как ты вернёшься к этому коду через несколько недель.
Структура и класс отличаются по методу хранения в памяти. Перечисление это просто список идентификаторов. Всё распределено и понятно, а у джавистов мало того, что нет структур, так еще и перечисления смешаны с классами.
Да, тоже проверил сейчас. Забавно, что метод расширения можно назвать ToString, и он даже будет отображаться в подсказках, но компилятор его наличие будет молча игнорировать, даже ошибки не выдаст.
> это запутает тебя после того, как ты вернёшься к этому коду через несколько недель.
Когда работал на джаве не запутывало же. А там проектики были побольше чем сейчас на шарпе. А вот сейчас вынужден чтобы рабочий код не превращался в миллиард if'ов, заниматься тем, что писать кучу расширений.
>>593675
> Структура и класс отличаются по методу хранения в памяти
Я знаю это. Что при этом должно мешать мне наследоваться от структуры? Скажем вот у меня есть struct Point2d, хочу сделать Point3d, отличия будут в одном поле и паре методов, в остальном почти все аналогично, но нет, я должен буду либо сразу пилить point3d и выставлять там z - ноликами, либо копипастить из Point2d
> список идентификаторов
И что мешает списку идентификаторов добавить какие-то свойственные какому-то идентификатору свойства? Опять же, вот для игры:
enum Enemy
{
orc, slime, wolf, warlok, elfArcher
}
Скажи, по твоему удобнее в классе писать:
if(!(enemy == Enemy.warlok|| enemy == Enemy.elfArcher)) rangeAttack(Enemy.warloc l? castSpeel() : shootArrow())
else meleeAttack();
или свичем:
switch(enemy)
{
case Enemy.warlok:
case Enemy.elfArcher:
...
default: meleeAttack(); break
}
чем
Enemy.Attack(), а уже в перечислении ты указал, будет это ближняя или дальняя атака
Делать кучу экземпляров и эти твои фабрики, которые будут мне производить орков, эльфов и т.д. на мой взгляд скорее перегружает код, и запутывает человека, который не страдает паттернами головного мозга.
> это запутает тебя после того, как ты вернёшься к этому коду через несколько недель.
Когда работал на джаве не запутывало же. А там проектики были побольше чем сейчас на шарпе. А вот сейчас вынужден чтобы рабочий код не превращался в миллиард if'ов, заниматься тем, что писать кучу расширений.
>>593675
> Структура и класс отличаются по методу хранения в памяти
Я знаю это. Что при этом должно мешать мне наследоваться от структуры? Скажем вот у меня есть struct Point2d, хочу сделать Point3d, отличия будут в одном поле и паре методов, в остальном почти все аналогично, но нет, я должен буду либо сразу пилить point3d и выставлять там z - ноликами, либо копипастить из Point2d
> список идентификаторов
И что мешает списку идентификаторов добавить какие-то свойственные какому-то идентификатору свойства? Опять же, вот для игры:
enum Enemy
{
orc, slime, wolf, warlok, elfArcher
}
Скажи, по твоему удобнее в классе писать:
if(!(enemy == Enemy.warlok|| enemy == Enemy.elfArcher)) rangeAttack(Enemy.warloc l? castSpeel() : shootArrow())
else meleeAttack();
или свичем:
switch(enemy)
{
case Enemy.warlok:
case Enemy.elfArcher:
...
default: meleeAttack(); break
}
чем
Enemy.Attack(), а уже в перечислении ты указал, будет это ближняя или дальняя атака
Делать кучу экземпляров и эти твои фабрики, которые будут мне производить орков, эльфов и т.д. на мой взгляд скорее перегружает код, и запутывает человека, который не страдает паттернами головного мозга.
>Когда работал на джаве не запутывало же. А там проектики были побольше чем сейчас на шарпе.
На фортране с goto тоже проекты на несколько сотен тысяч строк писали и не запутывались. Это не оправдание.
>Что при этом должно мешать мне наследоваться от структуры?
То, что структура хранится в стэке, а не в куче. Структуры должны быть легковесны.
>Скажи, по твоему удобнее в классе писать:
Создаешь перечисление AttackType и делаешь соответствующее поле у классов Orc Slime Wolf и т. д.
>Делать кучу экземпляров и эти твои фабрики, которые будут мне производить орков, эльфов и т.д. на мой взгляд скорее перегружает код, и запутывает человека, который не страдает паттернами головного мозга.
Так пиши сразу на С, зачем тебе вообще ООП, мозг засорять только. Твоя проблема в том, что у тебя хуевая архитектура приложения и ты жалуешься на то, что язык мешает тебе эту хуевую структуру реализовать.
> То, что структура хранится в стэке, а не в куче. Структуры должны быть легковесны.
По твоему если я добавлю одно поле структуре она сразу перестанет быть легковесной? Довольно странный поинт. Ничего не мешает под капотом делать всю магию и на самом деле никакой иерархии и наследования не делать, но мне, как программисту, не хочется писать одну и ту же логику 10 раз из-за отличия в одном поле, а потом отлаживать это дело. Чем меньше кода нужно писать и чем более он унифицирован со стороны разработчика - тем лучше
> Создаешь перечисление AttackType и делаешь соответствующее поле у классов Orc Slime Wolf и т. д.
Чем, блин, это приницпиально отличается-то? Да ничем, только строк кода больше написать придется, а потом искать по всему коду где ты что-то зафакапил, в то время как в данном случае ты, если и зафакапил, то точно знаешь где и за 10 секунд исправишь.
> Так пиши сразу на С, зачем тебе вообще ООП, мозг засорять только
Так я и писал. С 2006 по 2010, примерно. Проблема Сишечки в том, что платят, за такую работу, мало. После вуза еще нормально казалось, но сейчас я бы не стал заниматься поиском того почему во флеш-память нули записались, хотя я писал структуру и хуй пойми, это я где-то обосрался или китайцы с железкой.
> Твоя проблема в том, что у тебя хуевая архитектура приложения и ты жалуешься на то, что язык мешает тебе эту хуевую структуру реализовать.
Нормальная у меня архитектура: гибкая, расширяемая и при этом если что-то кто-то сломает, сразу легко локализировать проблему. Если же у тебя есть какая-то иерархия, плюс в базовом классе какая-то логика, то на поиск конкретного места, где что-то пошло не так, может полчаса уйти, даже если ты все-все-все логируешь.
>структура хранится в стэке, а не в куче
Доказать можешь? Ты ведь откуда-то это взял, значит где-то прочитал. Где?
>ты просто подписываешься на событие Clicked
это и есть паттерн publisher-subscriber ака события в C#
Это основы различия value type от reference type. Структура это value type
>Скажем вот у меня есть struct Point2d, хочу сделать Point3d, отличия будут в одном поле и паре методов, в остальном почти все аналогично,
Лол нет, это принципиально разные сущности, лучше одно от другого не наследовать.
>либо копипастить
В чем проблема?
Тебе ниже верно пишут, ты "очарован" ООП и какую-то несусветную хуйню пытаешься из него слепить.
Не плоди сущности, не переусложняй абстракции.
Наследование нужно вообще в очень редких случаях и для всякого энтерпрайза в основном с бизнеслогикой.
Используй интерфейсы, и только если вот совсем прижмёт - наследование.
Если у тебя нет интерфейсов, но есть наследование - ты что-то серьёзно делаешь не так.
>как программисту, не хочется писать одну и ту же логику 10 раз из-за отличия в одном поле
Расскажи о логике хранимой у тебя в структуре Point2d ?
Не всегда, о обычно. И это не главное отличие, а деталь реализации.
Про различия этих типов я знаю. Но я не могу въехать в то как хранятся структуры в стеке. Как функции живут в стеке я понимаю. Есть стековые кадры и прочее. А как структуры не могу понять. Где можно об этом почитать?
Не пости такие пикчи. Будь человеком.
> Но я не могу въехать в то как хранятся структуры в стеке. Как функции живут в стеке я понимаю. Есть стековые кадры и прочее. А как структуры не могу понять. Где можно об этом почитать?
Ты контуженный или что?
Ну структура допустим int32 double byte
4+8+1 = 13 байт.
Вот блядь берем, и пушим эти 13 байт в стек, в чем проблема? Что тебе непонятно в этом?
>Как при раскрутке стека это все хранится и используется?
Так же как и обычные переменные, отличия никакого нет.
Джавист, ты?
Хочу мониторить элементы в CheckListBox, 1 состояние не позволяет пометить элемент для разных условий (например первый чекбокс просто добавляет в список отслеживания, второй указывает надо ли совершать какие либо действия)
Добавлю, я мог бы с 1 полем добавить в разные списки элементы в несколько проходов в ручную, но но я хочу сделать наглядно и просто, с возможностью в любой момент поменять значения у элементов без надрачивания кнопок
Нужно ли совать try-catch во все методы, или достаточно пихнуть его только в основной, из которого они вызываются?
try-catch очень трудоемкий процес. Так что желательно пихать его в верхние слои приложения, чтобы не вызывать каждую секунду. Или делать стейт отлавливатель ошибок.
А еще лучше возьми хороший проек/библиотеку и посмотри как там сделано, чтобы не слушать анонов с двача
Суть такова:
Вызывается метод GetState, запускается таск с подпиской на приходящие уведомления о новых состояниях, как только в StateReceived поступит нужное состояние, в StateReceived вызывается ResetEvent.Set();
private State GetState()
{
CurentState = null;
new Task(() =>
{
agent.Received += StateReceived;
}).Start();
ResetEvent.Wait();
agent.Received -= StateReceived;
return CurentState;
}
Пару вопросов:
При повторном использовании программа вылетает без ошибки.
Иногда при работе с другим классом вызывается данный таск.
Как быть? Как можно улучшить данный говнокод?.
Кто ищет потёртую мочёй наноборду - добро пожаловать, через TorBrowser, вот сюда: http://nboardn46ay6ycdi.onion/
Зачем ты вынес подписку в отдельный таск?
> программа вылетает без ошибки
Очень маловероятно. Попробуй писать лог для AppDomain.CurrentDomain.UnhandledException, и можешь подписаться еще на AppDomain.CurrentDomain.FirstChanceException, если ты где-то наебался с catch'ами.
>Иногда при работе с другим классом вызывается данный таск.
Чего бля? Если не надо, не вызывай.
>>595045
>Как можно улучшить данный говнокод?.
Лучше б описал, что а задачу ты решаешь этим кодом
мне нужно реагировать на разные состояния которые приходят из agent.Receive, а точнее EventHandler<State> Receive.
Вынес в отдельный таск так как в нем крутится ожидание нужного состояния:
private void StateReceived(object sender, State e)
{
if(e == State.Ready)
{
IsReady = true;
ResetEvent.Set();
return;
}
}
>Чего бля? Если не надо, не вызывай.
Вызывается из другого класса, так как другой класс так же работает с состоянием
В каком списке? ListViev? https://www.codeproject.com/Articles/9188/Embedding-Controls-in-a-ListView . А вообще кастомизация контролов форме это боль. Если нужно что-то не стандартное пили на wpf. Еще можешь попробовать через datagridview, у него есть поддержка колонок с чекбоксами.
Короче. Напишу полностью, а код псевдоязыком, так быстрее и понятнее будет.
У меня есть собственная Web Api, которую я сейчас пишу. Она через мною написанного посредника вызывает библиотеку api одного сервиса.
В этом посреднике, есть методы которые стучат в библиотеку api одного сервиса.
Когда посредник стучит "api одного сервиса" он возвращает состояние, по типу: готов, не готов, уже готов.
Мне и нужно чтобы посредник возвращал, выполнен ли метод, по вызову библиотеки api одного сервиса, успешно.
К примеру:
В мою Web Api стучат по данному адресу: https://localhost:/Initialize
Web Api обращается к моему посреднику через: public async Task<bool> CheckReady
Сам посредник стучит в стайт у себя GetState()
Потом в методе посредника public async Task<State.Ready> CheckReady смотрит какое состояние пришло: var state = GetState() и смотрит что пришло: if (state is State.Ready) return true
> реагировать на разные состояния
Ну напиши через свитч, вызов нужного обработчика на конкретный стейт. Я в похожей ситуации делал менеджера с методом RegisterListener<StateType>(action<stateType>) и менеджер разруливал когда кого вызывать.
>Вынес в отдельный таск так как в нем крутится ожидание нужного состояния
Ничего там не крутится.Таска только делает подписку, и на этом всё. StateReceived вызывается событием, соотвестсвенно, выполняется синхронно в потке, в котором вызывается событие.
>Вызывается из другого класса, так как другой класс так же работает с состоянием
Не понятно. Если ты теребонькаешь один и тот же ресетевент, то чего ты ожидаешь?
а есть кусочек примера менеджера?
>Не понятно. Если ты теребонькаешь один и тот же ресетевент, то чего ты ожидаешь?
Используется в каждом классе свой ресетевент. В классе посредника свой, в классе получение инфы свой.
То есть надо создать что-то типа такого:
public async Task<State> RegisterListener<StateType>(action<stateType> callBack, State waitState)
{
var state = Как из agent.Received взять нужный стейт?
if (state is waitState.type()) callBack();
}
Это понятно, но как мне ожидать и получать от agent.Received нужный мне стейт?
https://pastebin.com/8bGJcH6X
так?
>>595134
>а есть кусочек примера менеджера?
https://pastebin.com/PwnzmdRd - хуйня для хранения обработчиков (не помню, почему я лочил вручную, а не использовал конкурентдикшинари, возможно просто проебался)
https://pastebin.com/9xsVNfNt - хуйня которая получает сообщения
>>595134
>Это понятно, но как мне ожидать и получать от agent.Received нужный мне стейт?
Тебе надо повторять запрос, пока одноапи не вернет рэди?
ОГО! Спасибо огромное, с меня как обычно
>Тебе надо повторять запрос, пока одноапи не вернет рэди?
Нет. В начале при старте и инициализации agent и подписки на agent.Received присылаются пара стейтов примерного типа: StateReadyInialize, StateStartInitialize
И как только пришли данные стейты нужно сразу реагировать и инициализировать библиотеку стороннего апи
так я нашел лучшее решение. rxjs для net. Прям то что нужно, осталось пару вещей прикрутить и будет самое то. Но все равно спасибо анон за примеры, очень выручил
Недавно понял что хочу вкатиться в геймдев. Сейчас раздумываю над карьерой. Понятно что я нуб.
Но как цель я вижу себя работающим с играми на юнити, благо он популярен.
И я знаю что для работы с юнити нужно знание си Шарп.
А для знания си Шарп лучше всего перед этим выучить си/си++, чтобы знать основы.
Хочу пойти в мой областной госунивер для переподготовки. Год занятий, знания, знакомства в айти сфере, официальная бумажка о переподготовке.
Естественно, я понимаю что мне нужно и самому учиться. И свои какие то проекты делать.
Просто хочу узнать насколько жизнеспособен мой план?
Бля, хотел добавить выразительности, написав по слогам, а получилось как будто даун написал.
2. Что будет, если использовать в Hashtable ключи типа Long, и попытаться добавить две пары ключ-значения, в которых ключ будет разным значением Long, но иметь одинаковый HashCode()?
3. Что будет в случае из п.2 для Dictionary?
int x = 5;
ref int y = ref x;
ref int z = ref x;
Console.WriteLine( object.ReferenceEquals( y, z ) );
обсосанная 101 раз тема. Гугли паттерн Publisher-subscriber и смотри какие задачи он решает.
Вопрос к анону про использование асинхронных методов. Есть клиент-серверное приложение. На каком этапе нужны асинхронные методы:
1. На серверной (business model)
2. На клиентской (controller)
3. И там и там.
Спасибо
Это что ли?
https://github.com/microsoft/referencesource
Там нихера нет. System.Collections нет в том числе.
пиздец, referencesource.microsoft.com
посмотри там свои коллекции, узнай как они решают коллизии
Начать с Net.4 или сразу с Net.Core? В этом году, с выходом Net.5 разделения уже не будет же.
Делегат это ссылка на метод, точнее на список методов с определенной сигнатурой.
Нужен для передачи метода как аргумента.
Например у LINQ методов типа Where или Select аргумент как раз делегат. Подсовывая анонимный метод с нужной сигнатурой ты подсовываешь в эти методы свою логику для обработки элементов
Другое применение - сигнализация о событиях.
event - это сахарок над делегатом, который обеспечивает потокобезопасное добавление\удаление методов, а также ограничивает доступ до собственно добавления и удаления.
try бесплатен если нет исключения.
Конечно, чем выше по стеку ловишь, тем лучше.
Но надо учитывать, что у MS в их стандартном API исключение потенциально может кинуть любая операция, небо, земля и Аллах.
Поэтому надо смотреть - где ошибка допустима и можно продолжать, там тоже ловить, вместо того чтобы тупо падать.
Это проверка типа с последующим кастом в этот тип
interface IA { }
class B : IA { }
void test()
{
B b = new B();
if(b is IA a)
{
a. // a приведено к типу IA
}
}
Альтернатива:
IA a = B as IA
Если B не имеет нужный тип, то результатом будет null
Небольшая разница в поведении - методы Convert не кидают исключение от null на входе (но по прежнему могут кинуть если значение не парсится)
TryParse вообще не кидает исключений ни в каком случае. Лучший (единстенный разумный) вариант, когда надо много парсить, т.е. не упарывается производительность
>с выходом Net.5 разделения уже не будет
Пока что Net.Core, в отличие от Net.Framework, не позволяет работать с офисом (excel, word и т.п.). Подключить например Microsoft.Office.Interop.Excel для работы с объектами Excel в net.core нельзя.
Когда это исправят? В Net.5? Раньше? Или никогда?
Вот у них семпл есть под последний неткор: https://github.com/dotnet/samples/tree/master/core/extensions/ExcelDemo
В районе 2ой версии были проблемы с COM Interop
Ну и с добавлением в проект пока надо пердолиться
Net 5 будет на базе NET Core
NET 4.x это легаси, они его будут поддерживать, но не будут развивать. Он уже не поддерживает новый Net Standard.
Т.е. с точки зрения будущего, лучше учить неткор. Но только не факт, что условная контора, в которой ты работаешь/будешь работать будет на него переходить. Получается что старый дотнет тоже знать неплохо, а там разница в API (тот же асп нет перепилили)
А вообще заебали они, мусорная свалка вместо экосистемы.
Сделали бы что-нибудь вместо xamarin
Нужно записывать в json новый пришедший объект и добавлять в json как массив:
[
{
Name: 1
Id: 0
}
]
Пришел новый объект и добавлять его к старому в json
[
{
Name: "AA"
Id: 0
},
{
Name: "BB"
Id: 1
}
]
Как быть?
>А для знания си Шарп лучше всего перед этим выучить си/си++, чтобы знать основы.
Ебу дал? Сразу шарп учи, качай книжки из шапки и пиздуй на ulearn.
Читаешь старый жейсон, записываешь новый. В чем конкретно проблема? В шарпе 100% должен быть парсер жейсона встроен.
как перый элемент записать как элемент массива,
как добавлять новый элемент в массив json. Ведь читать, парсить в list и обратно записывать, очень дорого стоит. Есть более оптимальные пути?
бамп
>list
В шарпе не в коллекции объекты парсится?
>очень дорого стоит
Памяти? Какой размер жейсона у тебя?
Поясни свой юзеркейс.
Экономия на спичках, по-моему.
Можно хранить десериализованный список в памяти, и только сбрасывать его в json при изменении.
Можно упороться и не десериализовывать существующий json, а сериализовывать новый объект и руками дописывать текст.
Все упираяется в то, что юзкейс неясен
System.Text.Json есть только в последнем неткоре и он дико негибкий.
Все юзают newtonsoft.json
https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to
У некоторых юзкейсов даже workaround'ов нет
Это сторонняя поделка, которую вполне могут прекратить развивать.
У которой к тому свой собственный синтаксис, отличный от объектной модели excel'я. Если надо какую-то хитрую хуйню в екселе сделать - делаешь вручную, записывая макрос, и получаешь все ответы. Со сторонней хуетой вместо этого будешь сутками курить мануалы.
Ну и в целом учитывая объём функционала Excel'я и тонких особенностей поведения, что-то слабо верится, что всё это будет работать нормально, если задача будет чуть шире, чем вставить неформатированные данные в ячейки.
Как находить объекты в листе, если он изменился по наполнению (что-то удалилось, что-то прибавилось)?
Например: у меня есть "объект1".
Я добавил его в "Лист1", в котором было уже 4 других объекта. Т.е. индекс "объект1" в листе будет 5.
Теперь я удаляю какой-то объект из тех четырех из листа, порядок объектов по индексу в листе ведь меняется. Как мне теперь отыскать "объект1"?
>Как мне теперь отыскать "объект1"?
Этот объект чем-то уникальным среди остальных объектов выделяется?
ДА :- ищи по этом уникальному свойству.
НЕТ :- в твоей архитектуре этот объект ненужен.
Это работает и на нет.кор 3.1. Спасибо.
По обычному списку можно искать только перебором и сравнением.
Если ты можешь выделить какое-то свойство, по которому ты определяешь объект и тебе важно быстро искать, используй Dictionary вместо списка. Естественно ключ должен быть уникальный.
Если ключ - сложный объект, придется пердолиться либо с IEqualityComparer, либо оверрайдить Equals и GetHashCode. Лучше так не делать
>В шарпе не в коллекции объекты парсится?
Приходится делать костыль в виде новой коллекции и туда добавлять элемент. Это если в файле ничего нету, а объект надо сохранить как элемент массива.
>Памяти? Какой размер жейсона у тебя?
Где-то 10-15 объектов с 6 свойствами. 1 свойство лонг, 3 стринговых и 2 int. Это чудо парсится на сервере и передается в виде строки пользователю, там строка парсится в объект опять.
Нужно знать основы C/C++. Не в смысле уметь применять детали последних стандартов. Но какую-нибудь книгу из серии "Освоить за 21 день" надо почитать и поделать примеры/упражнения.
Байтоёбство, управление памятью, указатели на указатели на указатели. Без этого в ряде аспектов ты в шарпе сможешь работать только как макака на интуиции, без понимания.
Всё нужное объясняется в книгах по шарпу. То что ты там "выучил" из книги Освоить за 21 день, забудится через 21 день и никакой пользы не принесёт, только запутать может.
В книгах по шарпу даётся объяснение на словах. И потрогать ты можешь всё это только в трёх презервативах через много слоёв абстракции.
По учебникам по С/С++ можно позапускать примеры или упражнения оттуда и потрогать указатели и память, как она есть.
этот все верно говорит. Без С и C++ в решетках делать нечего. А еще лучше - Assembler (низы низов, так сказать). Если хотите копнуть глубже и вы харкорщик - бинарный код. Вот, чем можно удивить на собесе и вывалить на стол на качалку докторской колбасы. Он тебе про преобразование виртуальных полей в CLR, а ты ему ряд из нулей и единиц. Сразу поймут, что ты человек серьезный и больше спорить с тобой не будут.
Вообще не понимаю всех этих пидарских новомодных решеток, когда есть старые, добрые, проверенные временем так сказать, Cobol и SmallTalk (без последнего ООП не осилишь никогда).
Поэтому да, бросайте эти ваши решетки, где 99% кода делает IDE и разбирайтесь в низкоуровневых вещах.
>преобразование виртуальных полей в CLR
И опять пук в лужу. В С++ тебе на первых 100 страницах любого учебника расскажут, что такое vtable, как оно устроено и как работает.
В решеточке макаке расскажут, что не надо париться, там внутренняя магия, написанная серьезными дядьками на С, сама за тебя всё сделает.
>Где-то 10-15 объектов с 6 свойствами. 1 свойство лонг, 3 стринговых и 2 int. Это чудо парсится на сервере и передается в виде строки пользователю, там строка парсится в объект опять.
Так тебе стримить нужно клиентам новый жесон челе?
Ну ебана, парси просто символы прямо из стрима, если хочешь оптимизировать всё до упора.
>И опять пук в лужу
>В С++
Ты понимаешь хоть как vtable отдает нативные команды процессору? Как кеширование и преобразования в двоичный код происходит? Ты на ассемблере сможешь пояснить за твои витруальные таблицы?
Без этих знаний ты такой же пустоголовый погромист, который работает с абстракциями, как и решеточники. Грош цена твоим знаниям.
Да. Клиенту приходит json стринг и нужно его превратить в объект
Насколько я понимаю, разница не особенно критична, и в резюме работа с Core будет смотреться интереснее, а разобраться со старыми версиями, если на новом месте будет легаси-код, будет не сложно. В свете ожидания .Net 5, думаю, лучше будет сразу написать приложение на Core, верно?
Конечно Core. Но будь готов к жопе, ибо множество библиотек еще не перешло на core и внутренние вещи еще не допилены, а компании не готовы пока переносить свой старый рабочий код. Так что дилемма и надо знать все
Присоединюсь к вопросу. Тоже думаю, стоит ли в своих самообучающих проектах переходить на кор?
Вот это вот имеет какое-то значение для учебных целей?
Может быть такое, что макака умеющая в кор, не сможет в фреймворк? Или наоборот?
давай ты нахуй сходишь, быдло. Ок?
Вообще-то нет, не бесплатен.
По факту он чуть дороже if блока, при условии что не вылетает исключения иначе дороже в 10000 раз (цифра примерная, возможно в реальности все куда хуже).
>>596473
Искать библиотеки которые за тебя будут это парсить, либо делать все ручками.
>>596289
Эти знания не несут практической пользы для 99.8% программистов, они больше академические.
В смысле принимал? Если ты хочешь чтобы в такой форме можно было представлять данные, а потом вычислять, то гугли про конечные автоматы и как их использовать при синтаксическом анализе. Если коротко: делаешь словарь лексем, затем разбиваешь "текст" на "слова", кладешь числа в стек с числами, операторы в зависимости от приоритета в стек с операторами, потом достаешь из стека число, оператор и еще одно число, результат операции кладешь на вершину стека. В конце, если запись была валидной, у тебя в стеке с числами должно остаться одно число, оно и будет результатом вычисления.
Спасибо, попробую почитать
С одним потоком я знаю как, а вот как в нескольких потоках это сделать, пока есть идея только разделить заранее файлы по количеству доступных потоков и в каждом все делать отдельно.
Что мешает просто для каждого файла в папке сделать таск в таск передавать файл, там уже делать то что тебе надо?
>бамп
>>595831
> На каком этапе нужны асинхронные методы
Для чего нужны?
Ты лабу делаешь, или тебе за это деньги платят? Если платят, то я могу 10ток таких как ты заменить.
Это я к чему, архитектура у тебя какая? Задачи какие решаешь? Всё зависит исключительно от конкретного юзкейса.
Сервер ты скорее всего хочешь асинхронный делать, но это не всегда так.
>Ты лабу делаешь, или тебе за это деньги платят?
я смотрю ты далек в развитии проектов
>Если платят, то я могу
Высрать 3 строчки флуда и еще 3 беспонтовых советов. Такого рода совет я мог у любого бездарного мимо_ойтишника ака манагера получить
Асинхронные методы нужны там, где выполнение метода может задержаться из-за необходимости долгих вычислений, либо из-за ожидания стороннего ресурса. Т. е. ответом будет - и там и там.
Думаю по примеру ты разберешься.
спасибо, уже разобрался с этим. Как на серверной стороне, так и на клиенской (в виде аутентифицированных пользователей) создается стек запросов, который пополняется и выполняется поочередно не затрагивая основной поток
Оу, не ждал такого быстрого ответа.
Но я реализовал по другому, так как помнил, лол.
Сделал через дочерние таски с флагом longrunning.
И все сработало в итоге, не ожидал, что мой аутизм окажется плодотворным
Ты чего там, хочешь, чтобы у меня 183к тасков на компе было?
Я взял один list из fileinfo, поделил его на 6 частейколичество ядер процессора и передал их дочерним таскам.
Просто помню, что longrunning может обрабатываться в другом потоке
>не несут практической пользы
диды на паскале писали, на каболе писали, на фортране, мать его, писали. Какой ты погромист, если дидов не уважаешь? Так, конструктор типа в бинарный код, на бумажке. Потом будем побитовые сдвиги делать и переводить обратно в ассемблер.
Звучит как "Это классика, знать надо" и "Не мы придумали традиции, не нам их и отменять".
Собралась тут значит, перхоть. МОЛЧАТЬ. Чем Cobol отличается от APL? Какой код в Assembler делал возврат к циклу? Это знать нужно. Это классика блять.
Скидывать не буду - там такая каша, что я сам уже не разбираюсь. Я не знаю, что хочу, постоянно порываюсь переделать, думая что ща станет лучше, поэтому пиздец. Тем более я учу по чуть-чуть, наскоками, так что сам понимаешь.
Я думаю, как поступить - сейчас у меня "концепция" из кучи похожих между собой классов - например все реализуют INotifyPropertyChanged и у всех есть свойство Name, но не у всех есть сеттер. Мне казалось очевидным запилить базовые классы, но это развесистое дерево, и использовать базовые классы я не собирался, поэтому висеть они будут мертвым грузом. Алсо мне не нравится постоянно лезть в иерархию. Это, конечно, мои ньюфагодебилопроблемы, но как-то так.
#abc - йеп
abc - йеп
vabc - ноуп
отбой, я обосрался
^#?abc
У нас были 2 некомпилирующихся проекта, 75 классов, 5 DI контейнеров, UML диаграмма и целое множество сущностей всех сортов и расцветок, сиглтон, а также фасад, адаптер, бридж, чистый SOLID, как он есть и 2 абстрактные фабрики. Не то чтобы это был необходимый запас для хорошего проекта, но если начал собирать проект, становится трудно остановиться. Единственное, что вызывало у меня опасение — это сиглтон. Ничто в мире не бывает более беспомощным, безответственным и порочным, чем абуз сиглтона. Я знал, что рано или поздно мы перейдем и на эту дрянь.
Как засунуть изменённые значения массива, внутри словаря находящегося - в другой массив,
да так, чтобы не изменять значения в изначальном массиве, который по ключу в словаре?
Помоги построить роадмапу изучения С# на эти 2 месяца, чтобы сразу вкатиться в серьезный дев. Но именно на серьезном уровне, чтобы в легкую проходить собеседования на 140к и выше
Я не совсем нуб, делал homebrew подделки (на других языках, которые никому сейчас не нужны.. ну там типа лиспа или сишечки).
Но самоучка поэтому у меня нет теоретической базы (я даже в алгоритмах не шарю, а из паттернов знаю ровно три - синглтон, фабрику и наблюдателя, при этом про последние два только знаю, сам не юзал)
Кароч - что есть по самому языку? книгой. на видеокурсы нет времени и денег. референсы не осиливаю, надо книжку с примерами.
ООП, паттерны, алгоритмы - книги? (я конечно догадываюсь что банда четырех и что-нибудь такое - но лучше бы поактуальей и пообъемней)
Актуальные технологии? чтобы вот щас изучить и сразу же вкатится во фриланс.
И чтобы это все было описано наиподробнейше. Потому что я тупой, мне надо раззжевывать
Для Microsoft.Office.Interop.Excel нужен установленный офис там, где исполняется код. Ставить на сервер майкрософт офис - дело достаточно сомнительное и у нас пропадает кроссплатформенность (что, внезапно, фишка core).
Для EPPlus офис не нужен. Со всеми преимуществами этого решения. Макросы на нем тоже можно делать. Все там достаточно нормально работает, мне всего один раз пришлось костыль лепить.
>Но именно на серьезном уровне, чтобы в легкую проходить собеседования на 140к и выше
>Я даже в алгоритмах не шарю, а из паттернов знаю ровно три - синглтон, фабрику и наблюдателя, при этом про последние два только знаю, сам не юзал
>Потому что я тупой, мне надо раззжевывать
За два месяца с хлебушка до зп хорошего такого дотнет миддла, я правильно понял? Ты бы хоть выбрал язык, где платят больше, чтобы цифры реалистичнее выглядели. Js какой-нибудь
>чтобы вот щас изучить и сразу же вкатится во фриланс
Во фриланс вкатиться сложнее, чем на галеру
Выглядит как no way
>я конечно догадываюсь что банда четырех и что-нибудь такое - но лучше бы поактуальей и пообъемней
Охуеть, ты сначала книгу открой, посмотри как там всё написано, осознай, что этого никогда не осилишь, а потом уже объемней проси, если поманяфантазировать захочешь. Про актуальность отдельно проиграл, это алгоритмы, блять, они всегда актуальны, это основа всех алгоритмов, что-то новое придумать практически невозможно.
Читай Троелсена, потом Рихтера. По паттернам любая книга подойдёт. Но вообще за 2 месяца реально только в веб-макаку вкатиться, при условии, что каждый день будешь заниматься плотно.
>За два месяца с хлебушка до зп хорошего такого дотнет миддла,
я работаю (профессионально) на другом яп, но туда я устраивался по знакомству, то есть никакой теории никто не спрашивал, по рабочим обязанностям, справлялся. Чтобы заюзать какой-нибудь мап мне не надо знать что такое красночерные деревья на алгоритме которых этот мап сделан.
>>597880
>а потом уже объемней проси,
объемней в том плане чтобы там было больше разжевано для дурачков. В банде четырех все слишком абстрактно, моя не понимать.
>>597880
>то основа всех алгоритмов, что-то новое придумать практически невозможно.
все алгоритмы придуманы много лет назад. Но одни актуальны, другие нет.
Например там щас говорят набирает моду какой-то новый алгоритм дерева.. ну как новый еще до моего рождения был придуман, а юзать стали только в 2010 году вроде.
>string[] copystrings = dict["key1"]; //копируем массив по ключу, из словаря...
Ты не массив скопировал, а ссылку на массив, соответственно поменял оригинал. Array это reference type.
Array.Copy в помощь, ну или ручками:
string[] copy = new string[original.Length];
for(int i = 0; i < original.Length; i++) copy = original
Да, бзв, string это тоже reference type, только с поведением как у value type. Когда ты модифицируешь строку, ты ее не модифицируешь, а создаешь новую.
>кроссплатформенность (что, внезапно, фишка core).
Такая себе фишка на самом деле. Они попытались выкинуть виндоспецифичные апи (и запилили их обратно в platform extensions), но все равно выкинули не все.
Named mutexes, любой потомок EventWaitHandle, некоторые методы для пайпов, любая хуйня связанная с COM и возможно что-то еще - все это осталось в коре и нихуя нигде кроме винды не работает. Естественно это не документировано и ты либо знаешь досконально, какие апи специфичны, либо подрываешь на деплое (либо юзаешь их api checker)
А что докер? Он же нигде кроме жму/пинуса не работает. Docker for windows работает через виртуалку.
С вероятностью 99% хоститься ты будешь не на винде. Но хотя бы возможность работать в нормальной IDE, не погружаясь в мочу aka desktop linux 2k20 дорогого стоит
>я работаю (профессионально) на другом яп
>Я не совсем нуб, делал homebrew подделки (на других языках, которые никому сейчас не нужны.. ну там типа лиспа или сишечки)
Ты уже определись, homebrew или профессионально
Лучше книги конечно, но если будет и видео ряд, то и он сканает. Спасибо.
Или как всегда происходит какая то магия под капотом?
Просто тупо взял и сделал в пустом проекте, как в проекте с шаблоном mvc, но в итоге статические файлы так и не видит.
ок, по примеру сделал. Работает.
теперь другой вопрос.
Помечу стили не применяет? сделал папку css/site.css
в _Layout.cshtml прописал путь ~/css/site.css
делаю в visual studio code
>>597920
>>597924
Бля... Я тебя понял. Зашёл туда на rextexter, вписал твой код, и ещё свой в довесок,
затем нажал кнопочку "Fork it", ввёл другое название, и вот результат: https://rextester.com/VZEG40272
Со строками мы разобрались.
А что если вместо строк, в массиве строк - массив массивов, или массив объектов со свойствами?
Вообще-то, у меня здесь, словарь с массивом объектов, и надо изменить одно свойство для каждого объекта в массиве.
Но, у тебя, в цикле, стоит знак равно, и как видишь, в моём предыдущем случае, он не срабатывал как надо,
знак равно - создавал ссылку на массив, а не копию массива.
А что с объектами?
Что если я напишу
>for(int i = 0; i < original.Length; i++){ copy[ i ] = original [ i ]; }//где copy и original - объекты со свойствами?
>//copy.property1, copy.property2, и так далее.
Всё, я понял. Надо не присваивать объект, используя "=", а клонировать его: https://metanit.com/sharp/tutorial/3.22.php
Со строкой это работает, потому что как я написал ранее - для строки реализовано специальное поведение, несмотря на то что она тоже reference type. Вообще говоря строка иммутабельна (неизменяема). Любая попытка изменения приводит к созданию нового экземпляра.
Если элементами массива являются обычные reference type объекты, то при поэлементном копировании опять же будет копироваться ссылка на них. При изменении свойства, ты увидишь изменение свойства в обоих массивах.
Если элементами массива являются value type объекты (объявленные через struct), то будет производиться именно копирование, т.к. такие объекты передаются по значению.
Если нужно именно копировать экземпляры классов, то здесь начинаются проблемы. Гугли shallow copy и deep copy.
Я видел при гуглёжке shallow copy, но только сейчас понял, IClonable реализует deep copy.
Я-то думаю, хуле блядь не копируется в кэш - массив постов, вот здесь:
https://github.com/username1565/nanoboard/blob/e9984842cd69b5636f0d699cab5a70084950fc25/nanodb.exe-source/Database/PostDb.cs#L657
Хотел GetReplies закешировать, чтобы оно не грузило проц.
А то кулеры свистят и пердят от каждого посетителя
НАНОБОРДЫ.
Через TorBrowser она вот здесь: http://nboardn46ay6ycdi.onion/,
а прямо из веба - через Tor2Web gateway "onion.ly": http://nboardn46ay6ycdi.onion.ly/ (только постинг не пашет)
Добавил, короче IClonable куда-то сюда: https://github.com/username1565/nanoboard/blob/master/nanodb.exe-source/Database/Post.cs
И совсем другое дело. Кэш теперь и работает и обновляется, и нихуя железака не пердит.
Да, всегда. Иначе у тебя весь код будет состоять из "ну там всего немножеко дублирования, ну можно же", потому что ты привык писать херню
В этом случае GetHashCode у t1 и t2 будет одинаковым, у меня это 346948956
Если у структуры имеющей 2 поля будут одинаковые значения, GetHashCode генерируется одинаковый
Почему так? Неужели для такой просто структуры реализация GetHashCode использует xor?
https://github.com/dotnet/runtime/issues/4414
Судя по обсуждению, положняк такой: влез в кастомные value type'ы, пердоль до конца, реализуй свой корректный хеш
>фишка core
Это для кого-то важно, но я вот не могу оценить невозможность писать на C# 8.0 нормальные поделки для екселя. И перспектива остаться на NF 4.8 как-то не радует. Это не фишка, а сужение возможностей языка и платформы, пока что.
>Для EPPlus офис не нужен. Со всеми преимуществами этого решения.
Для генерации выгрузок в ексель на сервере - это плюс. На этом пожалуй плюсы заканчиваются. Офис есть на компьютере у 100% целевой аудитории любых поделок для офиса.
Потому что если у объектов одинаковые хэшкоды, то это не обязательно значит, что они идентичны. Но вот если у тебя Equals при сравнении двух объектов возвращает true, то это означает, что у них должен быть одинаковый хэшкод.
Это важно запомнить, иначе будешь смешить всех постоянно и хуйню в коде делать.
>100% целевой аудитории любых поделок для офиса.
Нет, ты не учитываешь фирмы, пользующиеся лицензионным ПО, в которых ради экономии 70% сотрудников сидят на всяких либре офисах и т.д.
Если не хочешь чтобы компареры работали при каждой прогрузке страницы,
то там проще сделать
>Dictionary<string, List< string > >
и не себе ебать мозг с этими массивами и объектами.
хэш ответа - > массив хэшей постов.
А сами посты, по хэшам - они и так в кэше есть.
Ну так совсем другое дело.
А то я ориентировался на тип метода, и если он возвращает массив постов,
значит и кешировать надо массив постов.
Ну и наебался же я с этими массивами и объектами.
С таким словарём, реально - намного проще. Эдакий маленький кэш.
Сунул ещё один метод обновления списка по хэшу, и в PutPost, где true возвращается вызвал его,
и ещё в DeletePost очистку присобачил - вообще красава, шустрит борода теперь, даже камень не плавится.
бамп тварыны
Куда мне передавать первичные настройки пользователя при регистрации, в сервис настроек или в сервис регистрации? И тот и тот сервис использует полученные данные от пользователя.
Я, мягко говоря, вообще в веб не ебу. Что бы мне такого почитать лёгкого для понимания /вообще/ по этой теме? Даже не по самому C#, а просто чтоб понять, чего от меня хотят.
Может, курс какой есть на микрософтлёрне или что-то типа того? Только чтоб совсем для людей, а не для веб-программеров, которые просто учат новую веб-технологию
Необходимо реализовать на формах или можно на впф задачу потребительского выбора, её лучше делать через парсер математических выражений, но лучше обойтись костылём 3 пик, могу скинуть 1к за неё,вот сам сайт где можно посмотреть как это работаетhttps://axd.semestr.ru/econ/consumer-choice.php
Спасибо, тогда буду переписывать.
300 бачей/год. Пиздец однако скатились...
Это называется когда обосрался со сроками и костыль, который проще и быстрее реализовать и впрямь будет лучше
Хочу 50 мегабайт JSON'a в одном POST-запросе отправить... Чё-то не фурычит. Поговаривают, что лимит 4096KB. Как его убрать??
>лимит 4096KB
Тогда бы ни одна страница не грузилась, не говоря об изображениях. У тебя скорее всего соединение закрывает до того как вся информация передастся, из-за таймаута, например.
> Хочу 50 мегабайт JSON'a в одном POST-запросе отправить
Брат, братишка, зачем тебе столько? Если тебе надо 50 метров json вываливать, то, скорее всего, ты что-то делаешь неправильно.
Сам посуди, в реалиях современного интернета это займёт 30 секунд в идеальном случае, а может и больше минуты быть. Что сделает юзер, будет смиренно ждать, или свалит со словами "не грузится, хуйня какая-то"? Конечно, в некоторых случаях это может быть оправдано, но таких не слишком много.
>grpc
Ну и? Он ведь не про специализированные фреймворки говорит, а про стандартные библиотеки.
>Тогда бы ни одна страница не грузилась, не говоря об изображениях.
Изображения - это GET-запрос.
Клиент отправляет не 50 метрабайт, а просто ссылку на пикчу, а она грузится потом просто потому что сервер отдаёт клиенту данные.
Но если клиент, POST-запросом, пытается вгрузить 50 мегабайт, не каждый сервер примет такой запрос.
GET-запросом 50 мегабайт не передать:
>If you are using the GET method, you are limited to a maximum of 2,048 characters, minus the number of characters in the actual path.
Поэтому POST. А лимит 4096 КБ, я взял отсюда:
https://docs.microsoft.com/en-us/dotnet/api/system.web.configuration.httpruntimesection.maxrequestlength?view=netframework-4.8
>The maximum request size in kilobytes. The default size is 4096 KB (4 MB).
>У тебя скорее всего соединение закрывает до того как вся информация передастся, из-за таймаута, например.
У меня не закрывается соединение, браузер ждёт ответа до последнего.
Но на сервере вылазит вот это (выловил при помощи конструкции try-catch-filanlly):
>Необработанное исключение: OutOfMemoryException.
>>599711
>Брат, братишка, зачем тебе столько? Если тебе надо 50 метров json вываливать, то, скорее всего, ты что-то делаешь неправильно.
Ща расскажу...
>>599730
>Какое-то странное мнение
Двачую. Поток FullHD забирает 25 мегабит/сек, а тут какие-то 50 мегабайт миллипиздрических, в 2к20м-то году...
>>599736
Всё просто. Вот здесь:
https://github.com/username1565/nanoboard/blob/e9984842cd69b5636f0d699cab5a70084950fc25/nanodb.exe-source/Server/DbApiHandler.cs#L39
Метод Upload_Posts, принимает на сервер, от рандомного, анонимного клиента - массив нанопостов в JSON.
Размер этого массива может даже превышать даже 50 мегабайт, в отдалённой перспективе.
Задача, тихо-тихо записать инфу с запроса в некий стек, кэш, или файл,
ограниченного размера, и вернуть клиенту как можно скорее (чтобы он не ждал), ответ на POST-запрос,
содержащий текст вида:
>"Ваш запрос слишком большой, он помещён в кэш/стек, (записан в файл), и будет обработан чуть позже."
Либо:
>Ошибка DDoS-защиты: Стек/кэш/файл - переполнен. Отмена.
Теперь, вернусь к этому:
>У меня не закрывается соединение, браузер ждёт ответа до последнего.
Но на сервере вылазит вот это (выловил при помощи конструкции try-catch-filanlly):
>Необработанное исключение: OutOfMemoryException.
Со временем, я понял в чём бида. И вижу, что где-то вот здесь: https://github.com/username1565/nanoboard/blob/e9984842cd69b5636f0d699cab5a70084950fc25/nanodb.exe-source/Server/TcpServer.cs#L101
оно долго читает данные с запроса, а потом вываливает exception.
Как бы так и записать данные, и не обрабатывать их методом (если их слишком дохуя), и ответ клиенту - поскорее отправить?
>Тогда бы ни одна страница не грузилась, не говоря об изображениях.
Изображения - это GET-запрос.
Клиент отправляет не 50 метрабайт, а просто ссылку на пикчу, а она грузится потом просто потому что сервер отдаёт клиенту данные.
Но если клиент, POST-запросом, пытается вгрузить 50 мегабайт, не каждый сервер примет такой запрос.
GET-запросом 50 мегабайт не передать:
>If you are using the GET method, you are limited to a maximum of 2,048 characters, minus the number of characters in the actual path.
Поэтому POST. А лимит 4096 КБ, я взял отсюда:
https://docs.microsoft.com/en-us/dotnet/api/system.web.configuration.httpruntimesection.maxrequestlength?view=netframework-4.8
>The maximum request size in kilobytes. The default size is 4096 KB (4 MB).
>У тебя скорее всего соединение закрывает до того как вся информация передастся, из-за таймаута, например.
У меня не закрывается соединение, браузер ждёт ответа до последнего.
Но на сервере вылазит вот это (выловил при помощи конструкции try-catch-filanlly):
>Необработанное исключение: OutOfMemoryException.
>>599711
>Брат, братишка, зачем тебе столько? Если тебе надо 50 метров json вываливать, то, скорее всего, ты что-то делаешь неправильно.
Ща расскажу...
>>599730
>Какое-то странное мнение
Двачую. Поток FullHD забирает 25 мегабит/сек, а тут какие-то 50 мегабайт миллипиздрических, в 2к20м-то году...
>>599736
Всё просто. Вот здесь:
https://github.com/username1565/nanoboard/blob/e9984842cd69b5636f0d699cab5a70084950fc25/nanodb.exe-source/Server/DbApiHandler.cs#L39
Метод Upload_Posts, принимает на сервер, от рандомного, анонимного клиента - массив нанопостов в JSON.
Размер этого массива может даже превышать даже 50 мегабайт, в отдалённой перспективе.
Задача, тихо-тихо записать инфу с запроса в некий стек, кэш, или файл,
ограниченного размера, и вернуть клиенту как можно скорее (чтобы он не ждал), ответ на POST-запрос,
содержащий текст вида:
>"Ваш запрос слишком большой, он помещён в кэш/стек, (записан в файл), и будет обработан чуть позже."
Либо:
>Ошибка DDoS-защиты: Стек/кэш/файл - переполнен. Отмена.
Теперь, вернусь к этому:
>У меня не закрывается соединение, браузер ждёт ответа до последнего.
Но на сервере вылазит вот это (выловил при помощи конструкции try-catch-filanlly):
>Необработанное исключение: OutOfMemoryException.
Со временем, я понял в чём бида. И вижу, что где-то вот здесь: https://github.com/username1565/nanoboard/blob/e9984842cd69b5636f0d699cab5a70084950fc25/nanodb.exe-source/Server/TcpServer.cs#L101
оно долго читает данные с запроса, а потом вываливает exception.
Как бы так и записать данные, и не обрабатывать их методом (если их слишком дохуя), и ответ клиенту - поскорее отправить?
На первый взглаяд, какая-то ебола с переменной len. Дебагер тебе в руки.
>The MaxRequestLength property specifies the limit for the buffering threshold of the input stream.
Это buffering threshold, а не лимит на размер реквеста в целом. Поэтому тебе его возможно уменьшить надо, раз у тебя outofmemoryexception вылетает.
Вопросы норм на мидла, вот только с 90 строки справа в углу какая то хуйня прилипла у этого додика. Пусть уберет ее и не позорится, а то мать сам знаешь, что с ней будет
Особенно проиграл с Web security
Обзор методов и техник взлома
DDOS
XSS
Fishing
SQL Injection
Broot force
Exploits
Сканеры уязвимостей
Приходишь такой значит .NET-тчиком на собес, подходит к тебе прыщавый анон с /pr/, которого заигнорили в треде с алгоритмическими задачками и говорит - "Кароч нужен забрутать или зафишить логин/пасс шкуры с ВК, смогёшь?"
Я, короче, прямо при чтении потока, в TcpClient.cs, решил парсить JSON из строки readData,
и добавлять посты по одному, блоками по 4 мегабайта (4096 KB),
и сразу же обрезать, блоками, всё это говно, и никуда его не передавать ни в какой HttpServer ни в какой hanler-хуендлер.
А то оно по нескольку раз копируется, гоняется туда-сюда,
и вот так, этими запросами ебучими и заДДоСсить могут, нахой, блеать!
интересно, спасибо. Этого я почему-то не нашёл. Наверное потому что из азуры смотрел, а там курсы вроде "деплоим приложения асп на азуру" и прочее. А есть что-то ещё более базовое про сервер-клиент отношения среди приложений, запросы и прочее? Или тут есть эти основы тоже?
Core взлетит. А Моно уже летает, хоть и не супер высоко, но более чем часто встречается в коммерческой разработке (не говоря уже о Unity)
>Этого я почему-то не нашёл
Я до сих пор не понимаю, как там что-то искать. Есть doc, есть mdsn, может ещё что есть. С заглавной страницы оттуда вообще хер что найдёшь. 100 кликов накликаешь и не факт, что хоть до чего-то нужного доберешься. Если в выдаче поисковика нет ссылки на нужную страницу, считай, ты её не найдёшь.
Читать должен даже крепкий джун, не говоря о мидлах и сеньорах. Сеньор помимо чтения должен и писать, потому что есть ситуации из которых иногда можно выйти при помощи редактирования CIL кода.
>редактирования CIL кода
Двачую. CIL код редактировать, убирая сопли за компилятором, приходится часто. Раньше, когда не понимал его, не обращал внимание. Но когда понимаешь как это работает, видя кучу вопиющих неоптимальностей, то уже не можешь просто пройти мимо. Уж как минимум бесконечные копирование структур при доступе к свойствам нужно убирать в критичных местах. Хотя в коре вроде эту хуйню почти везде поправили. Если производительность играет роль, то CIL код будет редактироваться так или иначе. Отдельные критичные функции на нём и пишутся.
Ну и знать Си тоже желательно, во всяком случае в нашем проекте, т.к. зачастую многие тяжелые вычисления проще написать на Си и в шарп уже сишную либо подключать.
Лол. Вот серьезно просто лол. Просто объясни, зачем писать на шарпе в таком случае-то? Шарп изначально позиционировался как язык для замены жавы только под винду, а достоинство жавы всегда было что можно за месяц нахреначить что-то рабочее, если ты лезешь в IL, то ты изначально не тот инструмент для своих задач выбрал.
Ведь асинхронные операции, если не отключать использование контекста просто дедлочатся. А для обновления UI из другого потока можно банально использовать Invoke.
бородатая шутка из мира холивара Java vs .NET хоть бы перевел, вкатыши /pr/ не умеют в ангельский
>>600893
>>600814
двачую адекватов, но они забыли добавить, что помимо MSIL нужно знать assembler. Без него за решетки можно даже не браться. IL - это лишь жалкий промежуточный слой, который все равно передается в нативные команды процессора. Еще желательно, но это уже джун+, знать двоичное преобразование команд MSIL, вдруг лишний байт преобразовывается процессором, а ты чики-брики и оптимизировал команду. Это не вершина совершенствования, еще будет к чему расти. Советую начать выдрачивать базовые команды MSIL в 16 ричном опкоде - это чистая дискретка, к тому же их не много - около 120 (к каждому типу конечно же, пуш 0x67 отличать от 0x68, потом переходить к командам среды - их чуть побольше, но без них .NET не работает)
Вот сорсы если что https://www.codeguru.com/csharp/.net/net_general/il/article.php/c4635/MSIL-Tutorial.htm
На собесе джуна или интерна обязательно это спрашивают. Это я вам инсайды палю, те вопросы типо "Как триггерится статический конструктор в сборке" или "Апкасты вариативность" - это уровень даунов как бы, нужно знать основы, чтобы браться за что ни будь более высокоуровневое.
Дерзайте.
>бородатая шутка из мира холивара Java vs .NET
Очень тупая шутка. .NET Core лучше JVM по всем показателям. Это самый универсальный из всех современных стеков. В нем собрано лучшее из разных языковых платформ. Да и язык C# лучше Джавы примерно как конфета вкуснее говна.
>как язык для замены жавы только под винду
ясно, не пиши пожалуйста больше
>>601990
>.NET Core лучше JVM
ты сравниваешь виртуальную машину с библиотекой? Земля тебе пухом, долбоеб
>Да и язык C# лучше Джавы примерно как конфета вкуснее говна.
Ты вообще вкурсе, что решетки и джава имеют практически идентичный синтаксис? Только у решеток свой ряд высокоуровневых реализаций, а у джавы другой.
Пиздец тут долбоебы сидят, даже хуже, чем в треде джавистов
>нет структур
>нет кортежей
>нет in/out модификаторов параметров
>даже ебанного goto нет
>Ты вообще вкурсе, что решетки и джава имеют практически идентичный синтаксис
Мань, возвращайся в свой тред джавистов и не высовывайся из этого загона.
маня, пишет за кортежи 2ым пунктом, которые реализовываются врапером в 2 строчки и видимо не знает за Kotlin. Типикал /pr/ вкатыш. Как бы это смешно не звучало, но зная Java можно сесть и педалить на # и наоборот, так что можешь не копротивляться за свои любимые решеточки даже за linq не написало, ничтожество ебаное И кто тебе сказат, что # > java? Препод из твоей шараги? Если да - плюнь ему в ебало. Знаешь, почему мелкософт прогнулись под кроссплатформенность? Потому, что ебучий MsSql со своим IIS будет стоить в десятки раз дороже, чем Oracle/another relation DB. Хотя куда тебе такое знать, тебе вначале вопросы собеса нужно выучить
>вторым пунктом
Шизик, где ты там пункты увидел? Перечислил всё что вспомнил, если интересует больше - гугл тебе в помощь. Только заранее подготовь свой манямирок, прочитав пару мантр и прихвати статистику популярности в качестве иконки.
>почему мелкософт прогнулись под кроссплатформенность?
Потому что это тренд современности. Хотя зачем объяснять что-то шизику с двузначным IQ, который судит о языке по популярности запросов в гугле/стэковерфлоу, блять. Тебе самому не смешно? Да, легаси говна больше на жабе, да у неё настолько хуевая документация и стандартные библиотеки, что вместо того чтобы прочитать её и использовать их, макаки бегут в гугл и на стэковерфлоу. И почему-то именно это, в манямирке шизика, является плюсом языка.
>всё что вспомнил
>не написал LINQ
>не написал за ORM из коробки
>не написал за лямбды
>не написал за management code
>не написал за GC
>не написал за методы расширений
ты думаешь с тобой есть смысл о чем то дальше спорить? Ты кроме статей C# vs Java что ни будь видел?
>тренд современности
попадешь на свою первую РАБотку (хотя есть сомнения по этому поводу) узнаешь, как работает тырпрайз
>по популярности запросов в гугле
https://www.codingdojo.com/blog/the-7-most-in-demand-programming-languages-of-2019
Почитай, чтобы твой маня мирок не трескался лишний раз.
>хуевая документация
вроде и оскорбить не хочу, но блять на чем ты основывался, когда высирал это?
Периодически захожу в этот тред подкинуть батхерда. Решеточники так копротивляются за свой язык забывая, что писать можно на чем угодно и где угодно, главное чтобы это решало задачи, зарабатывало копейку и было эластично на рынке
мимо анон, в стеке которого # 6-ой по счету язык
https://stackoverflow.com/questions/40361407/extract-json-from-string-in-net
Вопрос, как модифицировать эту регулярку, чтобы она доставала массивы JSON-объектов, с квадратными скобками этими, массивными.
Например:
>string s = "[{\"List\":[{\"ID\":\"175114\",\"Number\":\"28992\"}]}, {\"List\":[{\"ID\":\"175114\",\"Number\":\"28992\"}]}, [{\"List\":[{\"ID\":\"175114\",\"Number\":\"28992\"}]}]]";
>и текст ещё какой-то там, внутри строки, до или после объекта. Допустим, это заголовки запроса.
>ты сравниваешь виртуальную машину с библиотекой?
Ты далбаеб? .NET Core это модульный рантайм. JVM как я понимаю голимый легаси монолит. А вот .NET Core модульный, потому что современный.
Что такое библиотека? Код в файлах. Отличие библиотеки от виртуальной машины? И там и там код в файлах.
>Ты вообще вкурсе, что решетки и джава имеют практически идентичный синтаксис?
Ты вкурсе, что C# имеет совершенно другую семантику? У JS и Си тоже одинаковый синтаксис, дебил.
>Только у решеток свой ряд высокоуровневых реализаций, а у джавы другой.
Первая версия C# или вторая, не помню, была написана на Хаскеле, разработчиками компилятора GHC, профессорами, у которых есть премии Тьюринга, и другие премии, писалось в Microsoft Research. И по сей день там трудятся лучшие спецы в CS. Кто писал и пишет Джаву? Индусы-говнокодеры.
>IIS
То-то блять IIS долгие годы был самым популярным в мире веб-сервером, с долей рынка 70%. Сосать. Теперь есть Kestrel. .NET Core кстати ебет Netty только так. В два раза быстрее его. Это тот Netty, который долгие годы был одним из лидеров по производительности.
>.NET Core это модульный рантайм
>модульный рантайм
>JVM как я понимаю
> как я понимаю
>понимаю
>JS и Си тоже одинаковый синтаксис
>Кто писал и пишет Джаву? Индусы-говнокодеры.
Такую тупость или толстоту не вижу смысла обсуждать. Если ты это писал серьезно, то лучше рот лишний раз не раскрывай о том, чего не знаешь, чтобы ничего не залетело
>>602338
> IIS долгие годы был самым популярным в мире веб-сервером, с долей рынка 70%
https://www.datanyze.com/market-share/web-and-application-servers--425/microsoft-iis-market-share
в твоем маня мирке 70%? Ты хоть знаешь, сколько стоит перенести автопарк на ШINDOWS для IIS? Ты знаешь ценники на IIS от мелкософта? Зачем ты, как и другие дебичи кидаетесь какими то цифрами, если не плавали в этом?
>>602339
>SO
SOF может быть? Судя по тому, что высирают в этом треде, # могут быть только популярные в шарагах
Двачую.
Вин.формы - очень просты и понятны, даже не программисту.
Зная их я как-то пробовал перескочить на впф. Думал, должно быть интуитивно всё понятно, хотя бы в какой-то степени. Создал в студии голый проект впф, добавил мышкой кнопку на форму. А потом пару часов пытался привязать к нажатию этой кнопки вызов метода. Но так и не смог продвинуться ни на шаг. Не гуглил.
Привязка-то осваивается в конечном итоге, но вот всё остальное - пиздец, впф так и остался навечно сырым, многие фичи просто нереализованы или они есть, но чтобы ими воспользоваться, нужно рвать жопу и писать много кода, не говоря уже о том, что ты буквально через раз натыкаешься на какую-то недокументированную залупу, ради которой приходится неистово гуглить и дай Бог, чтобы что-нибудь нашлось.
Фронтенд, а вернее гуй на WPF — это реально пиздец. Я тоже его не понял, как и аноны выше. Dependency property, сотни вложений в одном компоненте, какая-то поебистика. После этого стал интересоваться фронтом vue, и теперь кайфую. Просто пилишь одностраничный сайт, и пользователи через него работают
Песпруфные кукареки. .NET Core это рантайм. Докажи обратное. IIS много лет был лидером в веб-серверах, пока Nginx не появился, а появился он не так давно. SO сам написан на C# и C# долгое время был там самым популярным тегом. Сейчас на 3 месте, хорошо, согласен. В русскоязычном кстати до сих пор самый популярный тег.
В 428 есть упоминание о высшем образовании.
В 710 есть упоминание о английском языке.
В 128 упоминаниях о junior.
В 256 упоминается о WPF и только 24 упоминания о Windows form.
Хуй знает что с этим делать но вот так.
> не пиши пожалуйста больше
Ну ты и мудак. Вот серьезно. Почти всю историю своего существования сам M$ позиционировал шарп как жаву, но под свою экосистему. Так было ровно до того момента, пока они не осознали, что проебали все рынки, кроме десктопа и на пост гендира не забрался индус, который теперь заигрывает с опенсурс сообществом. Блядь, ты просто посмотри, какие задачи на дотнете вплодь до середины десятых решались, пока не стало понятно, что жизни на десктопе нет, а под мобилки на шарпе не покодишь. Пиздец, пришли жаваскриптеры, которые только кору застали, еще и выебываются. Пидорас ты, вот что я хочу сказать. Причем мерзкий такой, выебываешься на пустом месте. Тьфу на тебя, мудила.
Выделяешь контекст (фасад) для общей хуйни по типу логгеров или https://blog.ploeh.dk/2017/02/02/dependency-rejection/
>>603013
Пользы в этом нуль, так как много вакансий пишутся хрюшами на отьебись, а на деле будет другой стек технологий.
>.NET Core это рантайм
>SO
так это ты один и тот же дауненок, пишуший мне по 3 поста. А я думал у вас "Сила трёх".
>В русскоязычном
проиграл в голос. Сейчас ru SOF почитать, эх.
>.NET Core это рантайм
.NET (как и Core) - это фреймворк. Ты хоть понимаешь значение слова "runtime"?
>Докажи обратное
Судя по постам, что ты высрал - ты не знаешь банальных основ работы .NET. Рихтер тебе в руки, пусть он тебе доказывается
>IIS много лет был лидером в веб-серверах
>Песпруфные кукареки
писал выше
Иди готовься короче, слабый еще
Таки не сила трёх, походу "Сила двух". Ок, давай и тебе поясню за решетки.
>Почти всю историю своего существования сам M$
позиционировал себя, как монополист всего и вся. ОС? Да, это мы. Браузер? Тоже мы (хуевое мы). Разработка? Подержите наш умирающий VB, у нас решетки (спижженные чуть более, чем полностью с джавы).
>пока они не осознали, что проебали все рынки
ты рофлишь? Ты хоть знаешь штат аналитиков evilcorp? Больше, чем твоя зассаная шарага
>забрался индус, который теперь заигрывает с опенсурс сообществом
{facepalm} Какой нахуй индус? Рыночек сам порешал, что должно быть. Причем тут индус?
>задачи на дотнете вплодь до середины десятых решались, пока не стало понятно, что жизни на десктопе нет
жизнь на десктопе есть, но не такая развитая, как в вебе. Веб пришел и задал мировую тендецию. Вакансии? 95% веб.
>а под мобилки на шарпе не покодишь
есть J2ME, зачем нужен шарп? Тем более evilcorp не заходили в мобайл (не знаю почему) и везде был andoid, iOS
>Пиздец, пришли жаваскриптеры
пришел джавист/.net-тчик и нассал всем на ебало, т.к. мало того, что не знают как их среда работает, так еще и хватаются за решетки, как за одеяло. Вы блять тупые, язык - это инструмент. Вообще похуй на чем писать, похуй на чем хостить. Главное чтобы:
1. Было легко и удобно;
2. Было дешево;
3. Было кем писать и в определенные сроки.
Берем ту же Java:
1. Легко? Да - джава хоть и отстает по фичам и высокоуровневым реализациям от #, но имеет хорошую базу знаний. Удобно? Да, легко ложится на любой сервер (Linux-овый, а не вонючий WS)
2. Дешево? Да уж дешевле мелкософта в 10ки раз. А когда сорсы весят по 4-5 гбт и обслуживает проект не один десяток машин, так тем более
3. Есть кем писать? Плюнь в бэков 3 раза и точно 1 раз попадешь.
Писал вчера, пишу сегодня - слушайте дядек, которые в тырпрайзе работают, а не которые в шарагах вам # дают и говорят - "Вот это заебись". Я не спорил, что # говно - язык сам по себе очень годный и во многом превосходит Java. Но вся экосистема разработки - это фирменный стиль мелкософта - монополизация, коммерция. Поэтому они и страдают. И вы тоже. Как бы все.
Таки не сила трёх, походу "Сила двух". Ок, давай и тебе поясню за решетки.
>Почти всю историю своего существования сам M$
позиционировал себя, как монополист всего и вся. ОС? Да, это мы. Браузер? Тоже мы (хуевое мы). Разработка? Подержите наш умирающий VB, у нас решетки (спижженные чуть более, чем полностью с джавы).
>пока они не осознали, что проебали все рынки
ты рофлишь? Ты хоть знаешь штат аналитиков evilcorp? Больше, чем твоя зассаная шарага
>забрался индус, который теперь заигрывает с опенсурс сообществом
{facepalm} Какой нахуй индус? Рыночек сам порешал, что должно быть. Причем тут индус?
>задачи на дотнете вплодь до середины десятых решались, пока не стало понятно, что жизни на десктопе нет
жизнь на десктопе есть, но не такая развитая, как в вебе. Веб пришел и задал мировую тендецию. Вакансии? 95% веб.
>а под мобилки на шарпе не покодишь
есть J2ME, зачем нужен шарп? Тем более evilcorp не заходили в мобайл (не знаю почему) и везде был andoid, iOS
>Пиздец, пришли жаваскриптеры
пришел джавист/.net-тчик и нассал всем на ебало, т.к. мало того, что не знают как их среда работает, так еще и хватаются за решетки, как за одеяло. Вы блять тупые, язык - это инструмент. Вообще похуй на чем писать, похуй на чем хостить. Главное чтобы:
1. Было легко и удобно;
2. Было дешево;
3. Было кем писать и в определенные сроки.
Берем ту же Java:
1. Легко? Да - джава хоть и отстает по фичам и высокоуровневым реализациям от #, но имеет хорошую базу знаний. Удобно? Да, легко ложится на любой сервер (Linux-овый, а не вонючий WS)
2. Дешево? Да уж дешевле мелкософта в 10ки раз. А когда сорсы весят по 4-5 гбт и обслуживает проект не один десяток машин, так тем более
3. Есть кем писать? Плюнь в бэков 3 раза и точно 1 раз попадешь.
Писал вчера, пишу сегодня - слушайте дядек, которые в тырпрайзе работают, а не которые в шарагах вам # дают и говорят - "Вот это заебись". Я не спорил, что # говно - язык сам по себе очень годный и во многом превосходит Java. Но вся экосистема разработки - это фирменный стиль мелкософта - монополизация, коммерция. Поэтому они и страдают. И вы тоже. Как бы все.
Заметил, что у жабистов есть специальная олимпиада обсирать шарп, чем-то похожи на гофистов. В обратном направлении - редкое явление, ибо всем похуй.
Не знаю о чем ты, болезненный, толдычишь, но .NET Core - это собирательное понятие.
сижу в двух тредах, отвечаю с такой же периодичность туда и туда. Никогда такого СВЧ и рвания жопы за язык не видел, как тут. Такое ощущение, что мелкософт создает уникальный продукт, как панацению. У меня для вас плохие новости на этот счет
>>603247
ты уже заселфовнился, назвав .NET Core рантаймом. Можешь теперь не копротивляться
>назвав .NET Core рантаймом
Все однострочные посты начиная с 1603197 мои. Выше нет моих постов.
>Никогда такого СВЧ и рвания жопы за язык не видел
Тут много студентов сидит, которую всякую хуйню несут.
> ощущение, что мелкософт создает уникальный продукт
Но ведь так и есть. Лучше шарпа в мире нет. Еще бы не был так привязан к .net'у, цены бы не было.
Знаю только два способа:
1. Нормальный - рисовать псевдографикой, она же ascii art
2. Ненормальный - получить хендл окна через винапи и рисовать поверх самого окна консоли, используя винапи и любую графическую либу
Второй вариант мне кажется подходящим под то что я хочу делать. Как это сделать? Хотя бы скажи где смотреть, а то я студент, который окромя калькулятора в консольке ничего не делал, и не умею правильно гуглить.
Не знаю, почему он тебе кажется подходящим, если намного лучше и проще использовать любую либу, которая умеет рисовать окна, коих дофига. Мне лень расписывать, например https://stackoverflow.com/a/43788951
Хз, не посещаю жаба тред. Зато в более публичных местах больше всего жопа горит у жабистов и гофистов, непробиваемая стена своих убеждений.
Нет.
это понятно судя по задачам, которые они пытаются решить в этом треде. Но их препод долбоеб, потому, что он пытается научить их программированию не заложив фундамент, что разработчик - это профессия не привязанна к языку, а к решению задач. Это тоже самое, что учить строителя только ебашить молотком и говорить - вот этот инструмент заебись, все остальное - говно.
>>603293
>Лучше шарпа в мире нет
Если когда ни будь устроишься на работу и тебя посадят на легаси, после 1-2 месяцев работы ты будешь проклинать решетки (особенно если это будет старый ASP.NET) и молить, чтобы кинули на другой проект, пусть даже не .NET
Со многими такое случается, кто приходит на аутсорс, особенно если он не привязан к проектам, а педалит на фриланс биржах. Если есть бенч, не удивляйся, если ты, обученный шарпику, будешь пидалить еще на WP/PHP/Java/etc.
>>603245
это потому, что джависты борды не пишут хуйни за то, чего не знают наверняка. Хотя там тоже студентота сидит, дрочащая алгоритмы. Зато тут - мало того, что нихуя не знают, так еще и пытаются тебе это навязать. Комьнити двача Java > C#. Однозначно.
проиграл. На самом деле жиза - на курсах может прийти выещик за килобаксы, а в институте, а тем более в шараге - только ебаные неудчники сидят
Хз, у меня один из преподов, владелец своей ит компании, говорил, что ему нравится просто преподавать. Зарплата - заправить два раза свою машину. Еще жену свою зачем-то посадил на преподавание.
Другой препод, параллельно работал в компании, шутил "не умеешь программировать - учи программировать".
Остальные преподы преподавали какую-то устаревшую хуйню. Им было лет за 50.
>проклинать решетки (особенно если это будет старый ASP.NET)
Мне синтаксис c# не нравится, слишком много бойлерплейт хуйни приходится писать. На некоторых проектах были ебанутые архитекторы. На текущем проекте есть silverlight и vbs. Вебформы - это еще повезло.
У меня даже иногда получалось продавливать свои решения: бизнес любит цифры, а не какие-то хотелки.
>3333
зачем далеко ходить, ведротон - вкатывальщик. Хотя заливает говно в уши, что он гуру
>>603342
>бизнес любит цифры, а не какие-то хотелки.
все хотелки - это желание сэкономить. Весь тырпрайз, все задачи (за исключением стартапов) - это бизнес. В бизнесе нужна автоматизация, чтобы не раздувать штат, которым нужно платить в разы больше, чем за софт.
>>603334
это энтузиасты. Сам знаю пару таких. Но это скорее исключение из правил
Хотя, вот эти кандидаты выглядят неплохо, но в фшарпе лучше https://www.calvinallen.net/csharp-8-is-old-news-onward-to-csharp-9/
Все равно подумываю нахуй свалить с дотнета.
решетки двигаются в том же направлении, что Java. Сейчас на джаве порой код на столько не читабелен, что не то, что в логике разобраться, нужно разобраться в коде.
Я столько дерьма повидал, что мне уже как-то похуй:
- Смотрю код как-то так https://youtu.be/dlrjDvS7wxo
- Отвлекаю товарищей от работы и снова повторяем процесс из видео
- Игнорирую хуево написанный код, который могу исправить
- Если используется какая-то инородная хуйня, скажем es+kibana на жабе или тензерфлоу на питоне, то мне проще найти место бага, завести тикет и больше нехуя не делать
- На инвестигейт отчитываю дохуя времени, хотя хватает пары минут, максимум час, чтобы понять проблемы
- На решение трачу несколько дней, даже если там написать надо строк 10
- На митингах с умным лицом рассказываю как охуенно исправил проблему
Шарп будет обновляться вроде каждый ноябрь по принципу: нечетная версия - не lts, четная версия - lts. Рекорды в шарп давно добавить хотели, но пересрались из-за синтаксиса.
А почему именно ноябрь? Из-за no nut november, чтоб ничего не отвлекало от изучения новых фич?
пофиксишь за 10 минут - заплатят $100/d. Подкинут еще тасков
пофиксишь за 480 минут - заплатят $100/d. Не подкинут тасков
На программистов вайнят, что ленивые и хитрожопые. Зато осилившие логику.
Откуда мне знать? Найди роадмап, там точнее написано, когда и что.
Не, всё просто. От клиента, на сервер поступает POST-запрос, с headers и JSON'ом. Программа - парсит JSON, но при попытке прочитать 50 мегабайт JSON'a вылазит OutOfMemoryException.
Было решено записать JSON в файл, но он пишется с headers. Надо сматчить теперь всю эту хуйню, но не полностью, оно не полезет и опять всё зависнет нахуй.
Надо, короче, по блокам читать JSON, и из фрагментов вытаскивать записи регулярным выражением каким-то, а фрагменты эти, ебучие - клеить снова и дальше парсить и скармливать - блоками. Как-то так.
Бьюсь на этой залупой неделю, не могу обычный CRUD реализовать. Это что за хуйня вообще? На пыхе или пайтоне это делается щелчком пальцев, на .NET ритуал какой то нужно провести или на хинди заговорить? Блевать хочется...
Какую нахуй дискреточку и логику?! Еще про теорию алгоритмов вспомни. Обосрался, а теперь с темы соскакиваешь.
Еблан, .NET Core это в первую очередь рантайм. А уж что там вокруг не важно. Естественно там есть некая SDK обвязка, вроде консольного интерфейса, API, и других необходимых штук. Но в первую очередь это рантайм, как и в доке написано, куда тебя ткнули носом как котенка.
Делаешь фронтенд, вешаешь его на nginx на какой-нибудь адрес. По этому адресу заходит клиент, ебать его в рот.
Делаешь бек и тоже на как-нибудь адрес вешаешь. Общаешься через запросы, данные в json пакуешь
В итоге у тебя независимый фронт и бек. А то, что предлагает шаблон — я тоже не понял. Я, правда, скачал для vue из галереи Microsoft. Там vue приложение было в папке wwwroot, которое начинало компилиться при старте отладки
Только нахуя? Не понял я этого прикола. Во-первых, IDE удобнее разные использовать. Во-вторых, как эту кучу дерьма деплоить — непонятно
Посмотри в шапке пхп и жс тредов, кажется там было что-то такое.
хочу фронд на react, бэк на .NET Core. Бэк даже уже частично написан, а вот слепить в кучу - хуй. Не могу разобраться, как базовый функционал CRUD-ов реализовать, как routing настроить. В ASP.NET MVC5 как то блять и то проще было
В MVC было WebAPI. Так и здесь. Пишешь апишку и тестируешь, например, посманом или фидлером. Потом, отдельно от асп, пишешь фронт на реакте.
спасибо, буду пробовать
Подскажите пожалуйста, почему такой вариант проходит
https://dotnetfiddle.net/yjJ6uy
а такой не проходит и даёт runtime error
https://dotnetfiddle.net/aOVclh
По сути вся разница в том, что я хотел сократить код просуммировав элементы массива через foreach, чтобы не вводить дополнительную переменную, хранящую количество элементов в массиве.
Бамп вопросу.
Работают оба кода. Вот только число m всё же надо хранить, иначе программа будет делать не нужную работу. Потому что если m = 3, как в примере, то возвращать можно сразу первое имя сумма кругов которого равна m, в твоём же случае программа продолжит своё выполнение и сделает лишнюю работу.
>Работают оба кода.
Вот почему-то второй вариант не пролазит в компилятор сайта
>>>1603768
>Вот только число m всё же надо хранить, иначе программа будет делать не нужную работу. Потому что если m = 3, как в примере, то возвращать можно сразу первое имя сумма кругов которого равна m, в твоём же случае программа продолжит своё выполнение и сделает лишнюю работу.
Но ведь m не показывает ничего, кроме количества кругов, а оно у всех будет одинаковое. Как мне кажется это избыточная информация, если используешь foreach.
По количеству кругов ты знаешь минимальное количество которое у тебя может получиться при суммировании. Возьми из примера данны, твоя программа будет парсить все данные , а если учесть if (sum == m) return name то она остановит своё выполнение на 4 участнике и выдаст правильный результат.
.NET разрабы живы?
Научи.
>Какую нахуй дискреточку
Вот такую, как на пике. Если ты называешь .NET Core рантаймом и в тоже время делаешь перечисление ее компонентов, то ты не понимаешь сути библиотеки. Пример для даунов (для тебя) говорить, что шестеренка часов - это часы, т.к. она в нее входит.
>>603519
>.NET Core это в первую очередь рантайм
так это рантайм или в первую очередь? Ебать у вас маня-мирок трескается, когда мокаешь мордой в говно. И зачем ты мне пишешь по 2 коммента?
>>603519
>.NET Core это в первую очередь рантайм
>А уж что там вокруг не важно
если бы ты знал компоненты библиотеки, ты бы сейчас так не копротивлялся.
>там есть некая SDK обвязка, вроде консольного интерфейса, API, и других необходимых штук
CLR via C# - пока первую главу не пройдешь, не возвращайся. И зачем ты пишешь, такую дичь, как
>ткнули носом как котенка.
когда ты сам прекрасно понимаешь, что ты нихуя не знаешь и пытаешься доказать тому, кто тебе делает замечания? Это такие маневры?
Может отправлять серверу файл, чтобы тот его скачивал у себя и получал нужный путь?
Как быть?
Если эти файлы включены проект и ты юзаешь .NET core - то это статические файлы. Добавляешь
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = "/StaticFiles"
});
И по пути получаешь содержимое фолдера
нет не включены. Бэк и фронт в разных местах будут находиться. Нужно с фронта получить, как-то полный путь файла и отправить его в бэк. Так как это не возможно, надо как-то с фронта на бэк отправлять файл и сохранять на сервере, вот только как
https://docs.microsoft.com/ru-ru/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1
Пробовал как тут, но OnPostUploadAsync не работает. В postman в body->binary не вызывается апи
Нумерацию проебали, шапку лет 5 не обновляли, тред скрывали из ленты, а его перекаты интересуют.
Призываю знающих анонов.
Нужно ли окончить ВУЗ, чтобы стать хотя бы джуном-решёточником?
Правда, что джуны всегда ебуцца с вебом?
Кроме веба для джуна на решёточках ничего нет?
хочешь сказать в .NET core нет CLR/SDK?
Вот это у .NETчиков тусовочка собралась. Один фреймворк рантаймом называет, второй пищит "# лушше джавы". Ну охуеть тут клуб интересов.
Может парни ну его нахуй этот ваш .NET, может лучше в версточку? Теги, селекторы там, может на препроцессоры перейдете. Возможно (но не точно) когда ни будь и до JS-а дойдете.
Бросайте вы это, зачем вы мучаетесь...
В этой книге почти все главы неактуальны, за 7 лет много чего изменилось, но думать ты можешь, что хочешь.
точно
Зависит от ожидаемого результата. Кнут описывал одну из реализаций. Вся идея не криптостойкого алгоритма в нахождении формулы от сида и взятии остатка от деления. Например: https://pastebin.com/WwTHjf0R
Такие формулы удобно проверять рисованием точек на 2д плоскости. Если на изображении нет очевидных узоров, а у стандартного Random вроде ромбы, то ты нашел правильную формулу.
Мне лень чего-то тебе доказывать по пунктам, если конечно у тебя нет, чем меня можно мотивировать.
конечно есть чем - ты пиздабол. Такой же, как и остальные высерки .NET треда, которые пишут не понимая того, о чем они пишут
Замотивировал?
чего еще ожидать от .NET-чика?
Зашел Java-Бог раз в кое веки почитать, что там о ваших новомодных Core пишут. А оказалось, что еще самому даунят учить пришлось. I'm not surprised
Имеется
>byte[] bu
и нужно записать его в TCP-поток:
>stream.Write(bu, 0, bu.Length);
а затем закрыть его нафиг:
>stream.Flush();
Вся эта конструкция взята в try-catch.
При достаточно малых bu.Length запись в поток происходит без проблем,
но если увеличить размер массива bu до 20-30 мегабайт - вываливается вот такой Exception:
>System.IO.IOException:
>Не удается записать данные в транспортное соединение: >Невозможно выполнить операцию на сокете,
>т.к. буфер слишком мал или очередь переполнена.
>---> System.Net.Sockets.SocketException:
>Невозможно выполнить операцию на сокете,
>т.к. буфер слишком мал или очередь переполнена.
Вопрос... что делать? Можно ли записать блоками?
Если да, то как грамотно нарезать большой byte[] bu
на маленькие блоки new byte[buffer_size]
чтобы записать их по отдельности, в цикле?
>как грамотно нарезать большой byte[] bu
>на маленькие блоки new byte[buffer_size]
>чтобы записать их по отдельности, в цикле?
Под выражением "грамотно нарезать", подразумевается создание подмассива байт, таким бразом, чтобы не копировать 500 зеттабайтный byte[] bu этот ебучий.
>>604789
>Можно ли записать блоками?
Да.
>Если да, то как грамотно нарезать большой byte[] bu
на маленькие блоки new byte[buffer_size]
чтобы записать их по отдельности, в цикле?
Без задней мысли, берёшь и нарезаешь: https://rextester.com/FHNR75546
>Под выражением "грамотно нарезать", подразумевается создание подмассива байт,
>таким бразом, чтобы не копировать 500 зеттабайтный byte[] bu этот ебучий.
Копируется только блок, не весь массив.
Хотя хз, может быть он всё-же обрабатывается весь, пока копируется.
И это... try-catch ещё добавь где stream.write, а то оно не всегда может записываться и ошибки бить.
В цикле пытайся писать, если кетч - Thread.Sleep.
А если ошибок 500 наберётся, просто выходи из цикла.
Всё-равно, иногда, при попытке записать данные в поток - вылазит вот это:
>System.IO.IOException: Не удается записать данные в транспортное соединение:
>Операция на незаблокированном сокете не может быть завершена немедленно.
>---> System.Net.Sockets.SocketException:
>Операция на незаблокированном сокете не может быть завершена немедленно
> в System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
> в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
> --- Конец трассировки внутреннего стека исключений ---
> в System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
Пробовал также, показать вот эти свойства:https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.networkstream?view=netframework-4.8
В частности - эти:
>stream.CanWrite: True
>stream.CanTimeout: True
и задать таймаут:
>stream.WriteTimeout = 50
А потом показать...
>stream.WriteTimeout: 50
Может как-то можно блокирующие сокеты для NetworkStream использовать?
Там вон, по твоей ссылке, чуть ниже, есть метод асинхронной записи: stream.BeginRead, принимающий на вход, в качестве параметра - callback-функцию.
В свою очередь, метод EndWrite(IAsyncResult) - хэндлерирует конец процесса записи в сетевой поток NetworkStream, и пока оно не прохендлерировалось - сокет занят, и заблокирован,
это значит, что для всех других попыток записи,
пока идёт запись - можно выдерживать таймаут в цикле по условиям:
>while(!stream.CanWrite || data_still_writting == true){//if cann't write to the stream, or if data still writting
> Thread.Sleep(1); //just sleep 1 millisecond
>}
data_still_writting = true;
перед записью данных в поток,
а в коллбек-функции, по окончанию процесса записи - data_still_writting = false.
УМВР.
https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=plaintext&l=zijzb1-f&f=zijunr-zik0zj-zik0zj-zik0zj-zik0zj-zik0zj-hra0hr-zik0zj-zik0zj-e7
ГОРЖУСЬ ДОТНЕТОМ
JVM это что? Ты щас скажешь, что виртуальная машина. Чем .NET Core отличается? Да ничем ёпты. Только внутренним устройством. Компоненты можно вынимать, менять, так задумано. В JVM все прибито гвоздями, ну разве что компилятор как компонент.
>>там есть некая SDK обвязка, вроде консольного интерфейса, API, и других необходимых штук
>CLR via C# - пока первую главу не пройдешь, не возвращайся. И зачем ты пишешь, такую дичь, как
Чиво блять? Когда книгу писали .NET Core еще в проекте не было. Еблан, доку почитай. .NET Core состоит из рантайма CoreCLR, SDK, в который не помню что входит, а гуглить неохота, компиляторов для C#, F#, VB, и т.д. Я не все компоненты перечислил.
>когда ты сам прекрасно понимаешь, что ты нихуя не знаешь и пытаешься доказать тому, кто тебе делает замечания? Это такие маневры?
Слыш ты, джявя-даун, ты мне про .NET будешь лекции читать? Я его знаю лучше тебя. Ты хоть хелловорлд на .NET Core на Линуксе написал?
>>604866
Ты блять хоть порвись, но .NET Core это в первую очередь рантайм. Это рантайм для управляемого кода. Без него нельзя запустить C# код в Линуксе например. Ну можно через Mono по старинке, но это костыльная история получится. .NET Core у любого нормального человека ассоциируется с рантаймом, как и JVM. Помню на винде когда сидел, бывало что нужно было Java-приложения запускать, требовалось установить JVM или JRE. И туда и туда входит рантайм. Похуй что JVM еще имеет некое SDK для разработки, основная ее функция это рантайм, выполнять код.
Норм идея?
>Есть идея написать приложение для приютов домашних животных, с учётом живности, расписанием привививок и ветеринарных мероприятий, учётками для волонтёров и гостей, фронтом для потенциальных хозяев. Всё это распространять бесплатно для приютов.
Нихуя непонятно что это будет.
>Норм идея?
Идеи обычно всегда выглядят красочно, а вот с реализациями часто проблемы. Тут главное понимать, что тебе придется разрываться между бэком и фронтом. Необходимо декомпозировать задачу. Закон Парето никто не отменял. Необходимо найти и понять те задачи, которые отнимут больше времени и сил. Чтобы их эффективно решить, а незначительные задачи оставить на пропотом.
CRM для приютов. Для гостей подбор животных и подача заявок на усыновление. Плюс, сбор денег. Для сотрудников - распределение животных по волонтерам, планирование прививок и лечения, все такое.
>>604813
Нахрена разбивать массив, что бы GC повесился? Ты когда писал
>stream.Write(bu, 0, bu.Length); тебя не интересовало, зачем ты написал 0 и bu.Length? Спойлер: это как раз указывается часть массива, которую надо записать в поток.
>а затем закрыть его нафиг:
>>stream.Flush();
Во-первых Flush не закрывет поток, а во-вторых для нетворкстрима он ничего не делает
>because NetworkStream is not buffered, it has no effect on network streams.
>System.Net.Sockets.SocketException
Там еще должен быть ErrorCode, какой он?
>Нахрена разбивать массив, что бы GC повесился?
>Ты когда писал
>>stream.Write(bu, 0, bu.Length);
>тебя не интересовало, зачем ты написал 0 и bu.Length?
>Спойлер: это как раз указывается часть массива, которую надо записать в поток.
Я просто бегло глядя на всё это, проинтерпретировал 0, как смещение в потоке, куда писать надо.
Спасибо. Теперь вижу, что это:
>The location in buffer from which to start writing data.
>Во-первых Flush не закрывет поток, а во-вторых для нетворкстрима он ничего не делает
Тогда, .Dispose(true)
>Там еще должен быть ErrorCode, какой он?
>WouldBlock
>10035
>Операция на незаблокированном сокете не может быть закончена немедленно.
Поэтому я бегло прочитал здесь https://ru.stackoverflow.com/questions/371655/В-чем-разница-между-сокетами-блокируемыми-неблокируемыми-и-синхронными-асинхронн
про блокирующие и неблокирующие сокеты,
и захотел присобачить - блокирующие.
>Да ничем ёпты
>ЁПТЫ
>Компрессор холодильника это что? Ты щас скажешь, что это устройство для сжатия и перемещения паров хладагента в холодильных установках. Чем .NET Core отличается? Да ничем ЁПТЫ.
>>604861
>гуглить неохота
>>604863
>ты мне про .NET будешь лекции читать? Я его знаю лучше тебя
сомневаюсь
Ну так начни писать. Что еще услышать хочешь?
>Нужно ли окончить ВУЗ, чтобы стать хотя бы джуном-решёточником?
Без опыта работы ты не будешь джуном. И ВУЗ тебе в этом точно не помощник.
Ради корочки поступить можно. Но учить всё нужно будет самому.
Немного лишней хуйни написал, можно проще - рассчитать частное и остаток в начале, а не на каждой итерации.
Вот, тут пример с двухсторонней конвертацией и сравнением: https://rextester.com/HGST29246
только вместо NetworkStream - MemoryStream.
>>604966
>.Dispose(true)
Не пашет чёт. Про какие-то защищённые члены попёздывает.
.Finalize() - тоже чё-то ругается.
А вот просто .Dispose() пашет.
Вместо того чтобы грузить массив на 20-30 мб полностью в память, подумай о том чтобы читать данные через стрим.
Прокидывать один стрим в другой через буфер, причем предпочтительно меньше 85000 байт, чтобы не попадать в Large Object Heap (но если у тебя что-то одноразовое, то наверное похуй)
Понял.
Ещё я посмотрел – чтобы писать на си-шарпе не говнокод нужно овердохуя всего знать, чего стоит один .нет
Или это того стоит?
И с чего лучше начать?
>И ВУЗ тебе в этом точно не помощник.
Вроде нормальные вузы предоставляю практику, хотя бы пару месяцев и уже хорошо
конечно, без ВУЗ-а вообще никуда. Лучше конечно начать с шараги 90% запостивших тут свои высеры именно они, а там уже в ВУЗ и сразу по специальности. Курсы бери C,F,Q#, VB, etc Желательно, чтобы преподы индусами были, а то мелкософт без них не обходиться.
Сидим, педалим - все .NET-тчики выпускники тех. вузов по специальности - программист-педальщик. Брат жив, пульс нормальный, не штормит.
сидит рядом учитель истории, менеджер по продажам и психолог. И я, бывший экономист утверждаю, что без высшего ТЕХНИЧЕСКОГО КАРЛ никуда вообще. Коллеги со мной солидарты, ехидно улыбаясь кивают в знак согласия.
>Всё это распространять бесплатно для приютов.
Бесплатность ломается на
>MSSQL
Если деплоить онпрем, то бедным приютам откуда-то нужно взять своровать лицухи на sql и возможно на винсервер.
Если на азуру, то опять же банкет оплачивать надо кому-то.
> Dispose(true)Не пашет чёт.
>Finalize() - тоже чё-то ругается.
>просто Dispose() пашет.
Может тебе прочитать статейку какую нибудь про освобождение ресурсов, а не тыкать наугад?
В дотнет кор нет разделения на рантайм + sdk или просто рантайм?
То есть ты хочешь на линукс серваке развернуть уже скомпилированный файл какого расширения, кстати? и ты скачиваешь рантайм дотнета и компилятор, даже если он не нужен?
Начать лучше с ассемблера, чтобы понять с чего все началось.
Перфокарты с машинными кодами все же не советую, мы не настолько историки.
Потом вздохнуть с облегчением на сишечке, затем прочитать про концепцию ООП и немного изучить с++ и как оно там реализовано. Немного утомившись, перестать работать с памятью вручную, изучить джаву версии 1.4 (именно после этой версии появился шарп), немного выдохнув на нормальном ООП и затем посмотреть, какие фичи были в шарпе 1.0, изучить их, потом 2, 3 и так плавно до 8-ой версии дойти, эволюционно.
Если сразу броситься на изучать все-все фичи 8-го шарфа, какие есть, будет слишком много информации для нуба, и полное непонимание, почему именно так сделали, зачем и для чего. Нужно идти постепенно, от версии к версии.
C# is sort of Java with reliability, productivity and security deleted.
Сука, хороший ответ, но к ассемблеру больше не полезу.
Посоветуй, лучше, книжек каких-нибудь; Player's Guide приглянулся, но смотря на via я вижу две абсолютно разные конструкции, которые кажутся несовместимыми.
И это всё хорошо, но как-то далеко от истины. Мне кажется, никто так не запаривается с этим, и все сидят формочки делают – но их-то я и делал, а важно мне понимание языка. Не в плане, какой там электрический говно-ток попадает в комп я всё-таки не жидофин, это уже то, чем я займусь на пенсии.
Я хочу писать программы на си-шарпе всеми возможными инструментами базовыми – как художник делает мазки краской.
Вот бы кто мне помог определиться, ёбанарот.
SQLite :D
двачую адеквата, без этого на # никак
я не знаю, как хомяки педаляк свой высокоуровневый кодик, не зная, как работает среда. Вот блять не понимаю без приколов. Я когда написал Hello world меня не покидали мысли о загадочном методе Main, контексте, почему консоль сразу закрывается и как происходит преобразование под капотом. Я гуманитарий, но без этих знаний была асфиксия. Как в ДМБ - "Секс в резинке - движение есть, результата нет". Я даже первую репу на SOF заработал по вопросам работы стэка и хипа (писал полную ересь конечно), но тем не менее разобрался
Пишут.
Есть охуенно огромное количество миддлов на том же Java, которые и в хуй без того не дуют.
да ты выше почитай, что пишут. Не отличают фреймворк от среды исполнения. Я не знаю, как нужно нелюбить то, чем занимаешься, чтобы банально не удилить 1-2 часа времени и разобраться с цепочкой процессов, которые выполняются при каждой компиляции сборки. Это не вышка, не дискретка, не алгоритмизация даже (хотя любят некоторые вздрочнуть своим merge/bubble sort), это банальная работа механизма. Часто вижу в вакансиях Required - Granted tech education и проигрываю с этого. Ну получил корочку, и хули? А сидит и педалит на тонне библиотечек, даже не зная что такое JDBC/ODBC, а тем более -как происходит процесс компиляции. Вкатыши одним словом. Тысячи их.
Ну мне лично похуй, тоесть я доверяю что реализация интерфейса ISosuHui, сосет хуи, и мне не нужно разбираться глубоко ли заглативает, мне похуй.
Я читал, что там выше — это позор ёбаный.
Было бы здорово, если б такие хоть как-то отсеивались по мере становления серьёзными прогерами, авотхуй!
Опять же, возвращаясь к жабе, в которой в раза 2 всё полегче относительно механизма (и читается это действительно как какой-то роман, запоминающийся в голове), люди не желают в этом разобраться.
Тенденция какая-то, слогом не объяснить русским.
И я не этот гражданин — >>605460
>bool parameter1 = false;
>Thread name = new Thread(new ParameterizedThreadStart(method))
>t_lite.Start(parameter1);
>...
>а в самом методе
>bool parameter1 = (bool)Obj;
Надо как-то второй парам засунуть, вообщем.
bool param1 = false;
bool param2 = true;
Thread name = new Thread(()=>method(param1,param2));
name.Start();
1. Выделяется ли каждому юзеру свой поток;
2. При запросе юзера (хуй с ним одного) блокируется основной поток (интерфейс). Будет ли заблокирован интерфейс у другого пользователя?
3. Для чего вообще нужна эта еботня с асинхронностью? Когда пердолил в WPF - там все было понятно, в вебе - нихуя не понятно.
Спасибо
Благодарю, заработало.
А просто System.Threading.Thread чем-то хуже ParameterizedThreadStart или не? Разные объекты всё-таки...
Ты хуйню несешь, читай документацию.
Есть еще ValueTask. В определении метода всегда надо указывать тип, что иногда дико выглядит, если там есть IEnumerable, Expression, Func. Может введут автовывод когда-нибудь как в плюсах или как в фшарпе.
Пюрешки с котелткой вам в хату, анончики.
Приветствует вас вкатывальщик-хуятывальщик 30 лвл.
Прохожу кое-какие курсы по вашему божественному языку, красотой строгой типизации меня поразившему до глубены чресел.
Ради практики языка и в целях лучшего осознания базовых идей, задумал написать ОЧЕНЬ простой mvc фреймворк на С#, ибо плохо понимаю эту концепцию, этот паттерн и вообще как должен такой фремворк работать.
Прошу от вас советов мудрых: что стоит прочитать, о каких библиотеках знать, может быть, какие туториалы изучить?
На выходе хочу получить небольшой проект в гит и хорошее понимание паттерна мвц, равно как и того, как в сишрапе можно работать с сетью и БД.
Тысячу нефти и персональный чай всякому, решившему помочь мне.
бамп
Асихронность здесь нужна
1) Для паралельних задач
2) Пока твой поток ждет что-то из Бд допустим он может делать другую полезную работу. Нужно для скалабили, и не сильно ощущаеться пока нет сотней запросов в секунду.
вот у меня есть казалось бы банальная задача - добавление данных в БД. Нужно ли делать ее асинхронной? Казалось бы - интерфейс пользователя если не будет блокироваться, то так или иначе должны всплыть служебное сообщение - типо "Success" или "Data already exist".
>>606299
потоки эти синхронно обрабатываются? Один закончился - начался другой? Чего возникают такого рода вопросы - запросы могут быть тяжелые, чтобы не создавался стэк запросов для обработки, если такого рода задачи могут решаться многопоточно задействуя все ядра. Вопрос скорее в реализации многопоточности и асинхронности на нижнем уровне. Нужна ли эта реалиация на уровне интерфейса? Если нет, то зачем тогда эти методы у контекста EF - SaveContextAsync или AddAsync etc?
SaveChangesAsync - быстрофикс
Новий запрос на сервак, начинется новий поток, а че делал на старом ваще пох.
Что такое UI на вебе? У тебя MVC или есть JS клиент?
А действительно, что там настраивать? Указал папку с проектом. Включил или нет возможность показа директорий, указал файл по умолчанию нахуй не нужно, и, вроде, все, с чем я сталкивался
Но у нас все iis'ы крутятся на виртуалках, может, там сисадмин озаботился чем, а я и не знаю
Анон, ты задал очень хорошие вопросы. Мне самому интересно, но все руки не доходили спросить/почитать
Aspnet-codegenerator, который, собственно, и делает шаблоны контроллеров в студии, по дефолту делает CRUD асинхронные. Значит, есть смысл в этом. Но да, какой смысл, если следующая операция — вывод плашки "бд обновлена"
>Новий запрос на сервак, начинется новий поток, а че делал на старом ваще пох.
не подскажешь, где об этом можно почитать?
>Что такое UI на вебе? У тебя MVC или есть JS клиент?
React JS на фронте с web api asp.net core
>>606473
Вот я тоже самое сказал - типо веб сервер, пусть сис. админы и ебутся. А мне фыркнули типо, нихуя губу раскатал. Теперь собираю инфу, что это за настройки такие
Смотреть сюда >>606015
Вообщем есть пул потоков, допустим 100.
Одновременно пришло 100 реквестов, все одновременно отработало.
Дан.
Но если пришло 101, то последний должен ждать пока будут свободние потоки.
При чем тут асинхронность, так вот во время жизни потока 90% времени он ждет что-то из БД или же шустро видает результат.
Когда твой реквест делает что-то в бд поток ждет окончания операци, ему не нужен поток он может делать другую полезную работу. Тогда он может обработать 101 реквест и отработать.
Тоесть Add метод говорит что он будет закончен на том же потоке на котором начал.
А метод AddAsync говрит что будет закончен на любом потоке которий будет свободним.
Я анон, который задавал >>606015
По вопросам Add и AddAsync у меня выстрелило в работе через UI->WebApi->EF->MsSql->IIS local. Методом Add - просто жду выполнения метода, он закончен - данные проходят по цепочке и попадают в БД. На каком этапе распределение и выделение потоков происходит - в душе не ебу, поэтому и задал этот вопрос.
Потом начал копать инфу - наткнулся на асинхронную реализацию методов - все запилил под AddAsync или SaveChangesAsync - начал обсираться на том, что данные банально не сохранялись в БД. На каком этапе идет обсирание понятно, что на том, кто создавал - не понятно.
>100 реквестов
А где эти ограничения указываются? Я у знакомого DevOps спросил - он говорит на уровне IIS указывается максимально обрабатываемый пул потоков.
Короче я запутался - нужны ли вообще эти ебучие асинхронные операции в CRUD-е? Опять же повторюсь с опытом из WPF - там это мастхев - Load bar, функционал UI и т.д. Как при цепочке, которую я описал - хуй его знает.
Он умрёт? Я его выебу?
>В дотнет кор нет разделения на рантайм + sdk или просто рантайм?
Есть. Есть версии с одним только рантаймом, их сейчас 3, .net core runtime, asp.net core runtime, desktop runtime. И есть runtime + sdk.
>То есть ты хочешь на линукс серваке развернуть уже скомпилированный файл какого расширения, кстати?
Exe или dll будет. Можно заюзать CoreRT/.NET Native, чтобы скомпилить в линуксовый бинарник.
>и ты скачиваешь рантайм дотнета и компилятор, даже если он не нужен?
Нет. Можно рантайм упаковывать в приложение, тогда не нужно на сервер ничего ставить даже.
>Начать лучше с ассемблера, чтобы понять с чего все началось.
А что не с машинного кода? Прямо нули и единицы пердолить.
>Сишарп вендорлок на mssql
Нет. В доках есть примеры с postgresql.
>вендорлок на азуре
What? Докер?
>вендорлок на винде
Давно уже нет. Сам на линуксе, винду не перевариваю, но .NET Core как экосистема превосходен. Пересмотрел все что сейчас есть из платформ, .NET Core это лучшее. Нигде нет такой продуманной экосистемы. F# прекрасен. Еще бы лиспоподобный язык прикрутили.
и еще вопрос - каким образом передавать ответ пользователю? Я говорю про механизм обратной связи. К примеру - Все ок, 200 или User already exist или Access denied - 403. Пилить масседж хендлеры и передавать их через return в методах? Через Web Api это можно будет хукнуть и отследить?
Я ожидал таких тупых вопросов от неосиляторов. Хочешь полных развернутых ответов - плати.
Ты у меня через 5 лет будешь еще собеседоваться, понял:
лопаты
AbstaractFrameVisabilityFactory.buildNewFrameVisabilityInstance.setVisible(false);
давай суда кидай, я что, зря деньги за интернеты плачу?
Но если тупой и сложно найти что читать, то вот линк - https://docs.microsoft.com/en-us/archive/msdn-magazine/2014/october/async-programming-introduction-to-async-await-on-asp-net
Виндоус форм. Есть десяток условных кнопок. Нужно при нажатии получать номер нажатой кнопки. Единственное что приходит в голову это получать их имена, заранее поименованые их с номером, а потом, получив, как то извращаясь вырезать слово button из имени.
Но я таки верю что есть способ умнее. Может у вас можно как нибудь свои номера/переменные у кнопок устанавливать?
Может есть варианты и получше. Я не программист вообще, просто развлечения ради на шарпах всякую мелочь пишу.
Или это область исключительно джавы? Хадупы, спарки, акка, штормы...
Хоть бы погуглил змея...
Я не знаю, что ответить дауну, который услышал где-то, что 2+2 = 5 и повторяет как попугай услышанное. Приплел он систему взаимодействия к бигдате.
Теперь перечитай, что выше написано, может придет осознание.
>>608375
Еблан.
Есть устоявшийся термин - бигдата.
И так же джентльменский набор тулов, часть которых я перечислил.
Будь я их знатоком, я бы был бы уже джавистом, а тебя поливал говном. Но я просто думаю, стоит ли оставаться в шаорпе, или валить в интересную область.
Судя по вакансиям Шарп - либо игры, либо формошлепство в тырпрайзе.
Еще десктоп забыл.
Кого ты там ждешь 20 лет, опущенец?
Насчет формошлепить не уверен, там нет жабы, но на жабе можно писать только простые вебсервисы.
Я лучше тем, что не обсираю другой язык и не пытаюсь навязать свое мнение, подумай, хлебушек.
Ай, шутник.
Это не игра, а трекер по типу Хертстоунского. Считает что вышло и что осталось, а учитывая что тут есть режим готовых сборок можно и колоду противника со 100% уверенностью видеть
Я не один! Нас много!
Мне нужен пруф твоих слов про бигдату. Ты когда открываешь рот, подкрепляй его фактами. А пока будешь попугаем.
Может быть существуют какие-то фреймворки для создания динамических и красивых браузерных веб приложений на C#? Или C# вообще не для этого? А если для этого, то как это гуглить вообще? Или у меня нет варианта, если это не webGL то придется ебаться с CSS и всякой такой еботой?
Вот ты и прокололся!
Но почему?
Есть приватный статичный массив обеъектов.
Объекты, в этом массиве - меняются, как и их количество.
Есть метод, возвращающий первый объект из массива объектов.
Задача - каким-то образом прицепить таймер в этот метод так,
чтобы метод гарантированно возвращал объект только тогда, когда он есть или появится в бущущем.
Thread.Sleep() не катит, он тормозит всю прогу, блядь.
Используй задачу марианетку.
TaskCompletionSource<object> tcs;
public Task<object> GetOrWait() => objects.Length > 0 ? Task.FromResult(objects[0]) : tcs?.Task ?? (tcs = new TaskCompletionSource<object>()).Task;
//Где-то, где добавляются элементы
objects.Add(newItem);
tcs.SetResult(newItem);
tcs= null;
//клиент
var obj = await GetOrWait();
Это концепт, синхронизацию и прочее пердоль сам.
Спасибо, будет с чего начать поиск.
На связи первый курс.
Как написать этот код? Взял цифры от -5 до 5. Дошел до Array, а что с ним делать - без понятий. Выручай.
ну так в чем проблема то?
перебирай элементы массива. Через If задавай условия и складывай, умножай.
Задача изи. Если учишься на программиста, то такое стыдно не решить.
Реализовал асинхронность при помощи System.Threading.Thread: https://rextester.com/MMKXT99662
Всё правильно сделал?
Так не пишут ни на js, ни тем более на шарпе.
Какой смысл писать на высокоуровневом языке, как на с?
Благодарю
Создатель Hello World Enterprise Edition, не ты ли это?
Я же написал, значит пишут. Могу на шарпе также написать. И что ты мне сделаешь?
Не возьму на работу, если увижу.
Быстро переписал в функциональном стиле.
А потом, для закрепления, с помощью linq на шарфе.
открою страшную тайну, но именно так учат шарпу во всяких шарагах. И смею предположить, что анон именно пишет оттуда. И написав с ОПП или Linq, его код преподаватели могут просто не понять.
BlockingCollection из TPL посмотри, оно правда скорее для Producer-Consumer, но может у тебя как раз такая задача?
Зачем такой архаизм нужен? Даже на ХР можно 4йы накатить
>либы какие-то
Есть Microsoft.Bcl.Async, но нужен net4. А еще это все работает в свзке с компилятором и нужна студия 2012+.
Но раз уж хочется писать на доисторическом дотнете, то пиши как деды, через IAsyncResult.
Бле, внатуре.
Меня просто заебали эти notif'ы ебучие:
https://github.com/username1565/nanoboard/blob/e9984842cd69b5636f0d699cab5a70084950fc25/nanodb.exe-source/Server/NotificationHandler.cs#L42
Как видишь, метод возвращает HttpResponse
только когда Queue<string> Messages содержит нотификацию,
но он, этот метод, всё-равно должен возвращать HttpResponse, даже если там нихуя нет.
Возвращая new HttpResponse(StatusCode.Ok, "");
клиент повторно отправляет запрос...
Из-за этого открвается хуева туча соединений, и это так бесит - пиздец!
>Thread.Sleep(10); // Wait.
Вообще, нахуй - тормозит всю программу.
А если сделать так >>608876 , то вроде как запрос от клиента повисает в Pending, и нотификация приходит тогда, когда она есть,
но при этом, на каждый запрос нотификации от других клиентов - стартует новый поток.
Это же пиздец какой-то ещё больший, ведь клиенты могут отключаться, а потоки эти, многопоточные,
в памяти рекурсивно всё-равно будут крутиться, и возвращать нотификации - в никуда, блядь.
Накатить можно только если делается новое приложение, не завязанное ни на что.
Если он занимается поддержкой старого говна, типа портала на sharepoint 2010 или что-то подобное (сайт на старом аспнете, или либы на net 2.0) то такого варианта нет.
Хуевый линк, учитывая, что с линком можно сразу результат получить, без всяких foreach
>шизика так и не забанили, мечтатель борды с блекджеком и цп шлюхами
Ну вас... Заебенил, пока-что с одним потоком: https://rextester.com/ZNWID54391
Как думаете, норм, или чё-нить добавить/удалить?
>>608841
>>608954
>IAsyncResult, BeginInvoke
Есть где-то примеры кода рабочего? Может кто наварганить в rextester'e по-быстрячку?
>пока-что с одним потоком
А смысл, ты же сразу после старта джоин делаешь.
>где-то примеры кода рабочего?
Тебе же сказали - гугли EAP.
что-то ты какой-то тупенький
Мне больше третий вариант нравится.
xyi |> printfn "%s вам"
>А смысл, ты же сразу после старта джоин делаешь.
Зато thread.Abort() не срабатывает, пока тред не завершится.
И только после его завершения, значение возвращается.
Но сейчас заметил, что Thread.Sleep(2000); тормозит всю программу, блядь.
Поэтому, попытался сделать, внутри метода, который вызывается в потоке:
thread.Sleep(2000); //затормозить только поток, в котором выполняется метод
И... Нихуя... Можно ли так сделать каким-то образом?
>>608841
Попытался подключить IAsyncResult, так оно в других методах типы подменяет. Откатился нафиг.
>>609198
>Тебе же сказали - гугли EAP.
Пиздец, глаза обломал.
Нахрена мне Extensible Authentication Protocol
ещё и на канальном уровне,
если мне просто вернуть значение, методом, когда оно появится.
То есть надо подождать, пока появится значение и вернуть его только тогда,
и проверять значение это - в одном потоке,
и ждать - тормозя только этот поток, а не всю программу, из-за Timer.Sleep().
Пытался через .Task ещё что-то делать, но - нифига не пашет в .NET 4.0.
>Extensible Authentication Protocol
хуя ты даун, земля тебе пухом EAP - Event-based Asynchronous Pattern
и зачем ты свою телегу на .NET 2.0 пилишь вообще? Чем тебе 4.8 не угодил?
> 4.8
Новомодная хрень для зумеров с тоннами синтаксического сахара. А во второй версии есть душа
>хуя ты даун, земля тебе пухом EAP - Event-based Asynchronous Pattern
Хэххэх. Пикрил.
Судя по примерам кода, при использовании EAP на IAsyncResult BeginInvoke, всё равно тормозят ответ при помощи Thread.Sleep(milliseconds),
и пока оно спит, второй экземпляр метода не запускается, сукаблять.
>и зачем ты свою телегу на .NET 2.0 пилишь вообще?
>Чем тебе 4.8 не угодил?
Это не телега, и она не моя. Она наша. Каждый её дрочит как он хочет. Её даже шатать можно похлеще вакабы.
Чем ниже фреймворк - тем он ближе к ассемблеру, а чем ближе к ассемблеру, тем более крутым кулхацкером себя чувствуешь, когда высераешь в блокнотище - свой кривой говнокод. Заебись же, охуенность ежжи.
Плюс ещё обратная совместимость. Фреймворк 4.8 на тамагочи не запустишь, а на тетрисе - и подавно.
>Зато thread.Abort() не срабатывает, пока тред не завершится.
А, так ты добавил отдельный тред, только чтобы вызвать на нем Abort.
>тормозит всю программу, блядь.
Ты так и написал, хз чего ты ждал.
>Можно ли так сделать каким-то образом?
Не болкировать ожидающий поток, т.е. не вызывать джоин.
>>609828
> тормозят ответ при помощи Thread.Sleep(milliseconds)
симулируют долгое выполнение метода
> второй экземпляр метода не запускается, сукаблять.
ой дурак
> тем он ближе к ассемблеру,
ой дурак х2
>высераешь в блокнотище
ой дурак х3
>>609830
>4.8 на тамагочи не запустишь
Так где ты 2,0 собрался запускать?
>>609774
Какие то вы странные - вроде же для себя пишите, зачем тогда устаревшую технологию брать?
>Плюс ещё обратная совместимость. Фреймворк 4.8 на тамагочи не запустишь
старое говно ASp.NET 2.0 где ты собрался запускать?
В ASP.NET 4+ те же грабли с асинхронностью реализовали в виде Async-await, где не нужно ломать мозг, а все за тебя делает исполняемая среда. Идея с этой ссаной бордой может и не плохая, я не знаю как все эти чейн хешкоды работают, видимо у вас есть опыт из шифрования крипты, мне похуй, но если вы делаете проект - проанализируйте общую картину от начала и до конца (от проектирования до деплоя и размещения на железе)
>Так где ты 2,0 собрался запускать?
Intel 4004 его разве не потянет?
Как вам такой, вот пердолинг, без https://rextester.com/WSQWY2275
без IAsyncResult с BeginInvoke ?
Вместо подтормаживания программы при помощи Thread.Sleep,
решил юзать старейшие thread_N.Suspend() и thread_N.Resume() - по таймеру.
Потоки записал в список, чтобы держать только один поток открытым.
Остальные же - абортируются с возвратом "empty_response", туда, когда новый поток открывается.
На rextester'e второй вызов не работает чё-то, а у меня, в NotificationHandler.cs - пашет.
Только там не строка возвращается, а HttpResponse.
Пашет, наверное из-за того, что NotificationHandler - это новый объект, создающийся при запросе на /notif
Вот ещё EAP (async-await на IAsyncResult с BeginInvoke): https://rextester.com/NLL39693
Вроде работает, но при большом числе запросов из public static void Main
открывается куча потоков. Как их закрывать/подтормаживать, абортить - хуй знает.
Там же Thread.Sleep используется, а он то ли для текущего треда, то ли для всей программы срабатывает.
Потому что long_time_method запускается в отдельном потоке,
id которого видно в System.Threading.Thread.CurrentThread.ManagedThreadId:
https://rextester.com/CITZO33999
>при большом числе запросов из public static void Main
>открывается куча потоков
Так что, надо как-то - обобщить всё это.
Пришлось создать ещё один список потоков, чтобы пришпандорить IAsyncResult: https://rextester.com/EDEDA45116
С множеством запросов rextester не хочет работать, ругается, поэтому вот: https://repl.it/repls/UnlawfulMundaneDebugmonitor
Не всегда запускается, иногда тоже ошибки выдаёт...
Хуета-то какая. Можно как-то попроще это сделать?
Не смешно.
>Идея с этой ссаной бордой может и не плохая
Ссаные у тебя панталоны, а борда эта - просто заебата.
>я не знаю как все эти чейн хешкоды работают, видимо у вас есть опыт из шифрования крипты, мне похуй
Хэш - это просто уникальная строчка, наподобие контрольной суммы, но длинее,
и рассчитываются хэши - самыми разными криптостойкими алгоритмами хэширования:
https://ru.infobyip.com/hashcalculator.php
>Thread.Sleep(2000); тормозит всю программу, блядь
>thread.Sleep(2000); //затормозить только поток, в котором выполняется метод
System.Threading.Thread.CurrentThread.Sleep(milliseconds);
пробовал?
P.S.: Чё-то не робит: https://rextester.com/VHZZ17914
А вот c Suspend и Resume по таймеру - робит: https://rextester.com/DHYPO32923
Ставить точку останова и наводить мышкой, чтобы смотреть содержание переменной? Или есть более совершенные техники, которые применяют сеньоры?
Не забывай про F10, F11 и Shift + F11
Ты зачем котэ обижаешь, сука.
>любитель цп сгорел
Какие же вы чмоньки, пиздец, со своей манечкой этой.
Как будто, кроме цп на наноборде, и вообще на скрытобордах в дарквебе - нихуя годного нет.
Как только в сети появляется ресурс, направленный на то, чтобы гарантировать свободное общение, без мочерации ссаной,
так сразу начинаются вайпы, хаки, или вброс похабного контента, вроде ЦП - чтобы абузами домен закидать.
А вот хуй вам. Это onion. Это TOR. Там ещё BitMessage транспорт есть, между прочим.
А наноборда - это плацдарм для проведения научных дискуссий, в среде, где каждый может настроить её под себя - децентрализированно.
>только куском говна на гите лежит
Ты думаешь кто-то будет вам палить годноту?
Настоящая наноборда имеет четыре миллиарда активных пользователей и три миллиарда реактивных.
И 15 миллиардов пассивных
void foo(ref Message message, ref byte[] data);
И вот что теперь с ним делать? Вроде как с задачей что я ему дал он справился, но ведь блин, базовая вещь про то что классы и массивы в шарпе - ссылочные типы. Просто объяснить ему это и пусть считается что испытательный срок он прошел или лучше сказать начальнику чтобы послал его доучиваться?
Может сперва ты напишешь, почему он использовал ref и какая была задача?
Пусть тебя, долбоеба, доучиваться посылает. ref можно использовать и для ссылочных типов, зависит от тела метода в который ты их передаешь.
Если ты передаешь ссылочный тип без ref, то передается копия ссылки, а не оригинал. Ты можешь использовать эту копию для модификации объекта, но при переназначении непосредственно ссылки, переменная в вызывающем коде не изменит своего значения, т. е. в ней также останется ссылка на старый объект. Другое дело при передаче ссылочного типа с ref. Ты можешь использовать её как для модификации объекта, так и для назначения нового указателя.
Типичный эксперт, который ничего сам не знает, но кого-то учить собрался, блять. Ладно ты этого не знаешь, но мозги вообще не работают что ли? Если бы значения не имело, то тебе бы компилятор об этом говорил.
Я другой анон.
Ты серьезно думаешь что я этого не знаю и спрашивал бы в случае если там переопределения ссылки происходили? Он просто дергает из массива данные? приводит их к нужному типу и присваивает свойствам сообщения. Там ref не нужен от слова совсем. Но он есть. И это, лично меня, смущает.
Да-да, быстро ты переобулся. Но ведь это ты писал:
>Вроде как с задачей что я ему дал он справился, но ведь блин, базовая вещь про то что классы и массивы в шарпе - ссылочные типы.
>что классы и массивы в шарпе - ссылочные типы.
Какое это отношение имеет к модификатору ref? Читается именно как "это же ссылочные типы, их не надо с ref передавать ))) 0))) "
Господи, ты действительно думаешь, что с 2010 года я ни разу ref не использовал и не знаю когда он нужен, а когда нет? Блядь, я волнуюсь о том, что это первый студент решение о взятии которого полностью доверили мне, если я скажу что все ОК, то ответственность за то что он напишет и на мне лежать будет, хуй знает чего он еще не знает, потом мне его код переписывать придется; с другой стороны, он, вроде как, смышленый и вообще работать хочет, сделал задание за вечер, хотя ему дали неделю. А ты тут самоутверждаться пытаешься. Из-за тебя я сейчас бомбану и в понедельник пошлю его нахуй, просто потому что анон с двача испортил мне настроение в выходные.
Человек приводит пример с передачей ссылочного типа по ссылке, при этом не приводит тело метода и даже не уточняет, что в этом нет необходимости. Человек зачем-то упоминает, что массивы и классы это ссылочные типы.
Очевидно, что если бы он знал как работает ref со ссылочными типами, то он так бы не обосрался. Поэтому хватит пытаться оправдаться перед самим собой, лучше заполни пробелы в своих знаниях.
Блядь, потому что я думаю, что это, очевидно. Неужели тебе не понятно?
Вот, смотри тело методов:
public async void HandleAcceptedData(ref Message message, ref byte[] data)
{
message.Type = (Message.MessageType)data[0];
switch (message.Type)
{
case Message.MessageType.auth: await OnAuth(ref message, ref data);break;
case Message.MessageType.register: await OnReg(ref message, ref data); break;
case Message.MessageType.message: OnMessage(ref message, ref data); break;
default: throw new ArgumentException("Неизвестный тип сообщения");
}
}
private async Task OnReg(ref Message message, ref byte[] data)
{
message.Type =Message.MessageType.register;
var regString = Encoding.ASCII.GetString(data, 1,data.Length-2).Split("\0");
var UserName = regString[0];
var Password = regString[1];
Console.WriteLine($"Is reg message: {UserName}, {Password}");
var isRegistred = await SaveUser(UserName, Password);
Console.WriteLine($"User registred: {isRegistred}");
}
private async Task OnAuth(ref Message message, ref byte[] data)
{
var regString = Encoding.ASCII.GetString(data, 1, data.Length - 2).Split("\0");
var UserName = regString[0];
var Password = regString[1];
Console.WriteLine($"Is reg message: {UserName}, {Password}");
var isValidUser = await ChekUser(UserName, Password);
Console.WriteLine($"User registred: {isValidUser}");
}
private void OnMessage(ref Message message, ref byte[] data)
{
string messageString = Encoding.ASCII.GetString(data, 1, data.Length - 2);
Console.WriteLine($"Is message: {messageString}");
}
Где, блядь, ты такая, тут нужно ref использовать? Блядь, у меня теперь действительно горит, сука.
Блядь, потому что я думаю, что это, очевидно. Неужели тебе не понятно?
Вот, смотри тело методов:
public async void HandleAcceptedData(ref Message message, ref byte[] data)
{
message.Type = (Message.MessageType)data[0];
switch (message.Type)
{
case Message.MessageType.auth: await OnAuth(ref message, ref data);break;
case Message.MessageType.register: await OnReg(ref message, ref data); break;
case Message.MessageType.message: OnMessage(ref message, ref data); break;
default: throw new ArgumentException("Неизвестный тип сообщения");
}
}
private async Task OnReg(ref Message message, ref byte[] data)
{
message.Type =Message.MessageType.register;
var regString = Encoding.ASCII.GetString(data, 1,data.Length-2).Split("\0");
var UserName = regString[0];
var Password = regString[1];
Console.WriteLine($"Is reg message: {UserName}, {Password}");
var isRegistred = await SaveUser(UserName, Password);
Console.WriteLine($"User registred: {isRegistred}");
}
private async Task OnAuth(ref Message message, ref byte[] data)
{
var regString = Encoding.ASCII.GetString(data, 1, data.Length - 2).Split("\0");
var UserName = regString[0];
var Password = regString[1];
Console.WriteLine($"Is reg message: {UserName}, {Password}");
var isValidUser = await ChekUser(UserName, Password);
Console.WriteLine($"User registred: {isValidUser}");
}
private void OnMessage(ref Message message, ref byte[] data)
{
string messageString = Encoding.ASCII.GetString(data, 1, data.Length - 2);
Console.WriteLine($"Is message: {messageString}");
}
Где, блядь, ты такая, тут нужно ref использовать? Блядь, у меня теперь действительно горит, сука.
> Из-за тебя я сейчас бомбану и в понедельник пошлю его нахуй, просто потому что анон с двача испортил мне настроение в выходные.
> Мам, я не хотел собеседовать, мне навязали
> Мам, я боюсь ответственности, боюсь спросить что-нибудь ещё у кандидата, это говорить надо, а я пук среньк только умею
> РРРЯЯЯЯ ВЫ УБЛЮДКИ Я ИВО УВОЛЮ ВСЕХ УВОЛЮ
Ой-вей
Есть же пастебин или .net fiddle. Как читать это - непонятно.
А отказаться нельзя?
Мне предлагали подобрать человека самому, но ебал я это дело, хоть и набирать его надо было на мои же задачи
Подождал начальника, собеседовали вдвоём
По поводу твоего случая — спроси кандидата, а не тред. Может, у него свои мысли на этот счёт, а, может, по запаре оставил и вы оба посмеетесь над этим пустяком. Все же он за один вечер сделал я бы только половину тестов накидал к этому времени
В итоге не все таски выполняются, как так?
Смотри в код, там что-то не так написано.
нахуя он в каждом кейсе ref добавляет? Ты его спроси лучше адекватно, что он этим кодом хочет сделать
Кажись нашёл исчерпывающее объяснение: https://stackoverflow.com/questions/30566848/when-should-i-use-async-controllers-in-asp-net-mvc
Ежи Сармат.
CODE BLOG канал на ютабчике
у него разбор рихтера по главам есть (правда пока не всего)
+ понятные уроки по основам языка и алгоритмам
+ практические уроки по ASP и WPF
Как избавиться от этих варнингов, ебучих?
> warning CS0618: 'System.Threading.Thread.Suspend()' является устаревшим:
> warning CS0618: 'System.Threading.Thread.Resume()' является устаревшим:
>'Thread.Resume has been deprecated. Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources. http://go.microsoft.com/fwlink/?linkid=14202'
Есть поток, он приостанавливается при помощи Thread.Suspend()
Есть таймер, который после окончания маймаута запускает метод, внутри которого thread.Resume(),
где (Thread) thead = new Thread(бла-бла, тот самый поток, в котором сработал Thread.Suspend())
Как всю эту хрень сделать на мютексах, семафорах, и синхронизации сихронизациоаналичной, чтобы эти варнинги не пёрли, и чтобы заебись было?
>Как всю эту хрень сделать на мютексах, семафорах, и синхронизации сихронизациоаналичной, чтобы эти варнинги не пёрли, и чтобы заебись было?
И чего ты ожидаешь? То что тебе в одном посте объяснят весь раздел под названием "Асинхронное программирование и многопоточность"? Открываешь книжечку, открываешь статьи, открываешь гайды и учишь, а потом используешь.
А пока, чтобы эти варнинги - глаза не мозолили,
просто отключил их нахуй, при помощи дедовского метода:
>#pragma warning disable 0618
>#pragma warning restore 0618
Хоть бы ссылку дал, а то щас в шлаке нагугленном на StackOverflow буду колупаться, гляну по-бырому и закрою нафиг.
Какую тебе ссылку дать, скотина тупорылая? Ты настолько тупой и даже не осознаешь, что для того чтобы тебе дать ссылку, нужно хотя бы малейшее представление иметь о уровне твоих текущих знаний.
у элементов есть value, вот например мы выбрали какой-то из массива, и взяли его value, как можно сравнить сколько процентов элементов имеют value ниже чем выбранный?
у элементов есть value, вот например мы выбрали какой-то из массива, и взяли его value, как можно сравнить сколько процентов элементов имеют value ниже чем выбранный?
Нет, можно только вычитать и складывать. Нахуй тебе временные отрезки делить? Ты долбоеб?
Не знаешь решения простейшего вопроса - сидел бы да помалкивал, и не позорил бы мои тапочки, мразь дегенеративная.
Но нет, оно, ещё пытается тщетно пытаться попонтоваться тут, без пруфов конечно, и нихуя при этом не зная.
Причём тут многопоточность, блядь? Причём тут асинхронность?
У меня простейшая задача - остановить бесконечный цикл, и возобновить его так, чтобы в одном потоке это было,
и чтобы не блочилась вся программа, и не свистел кулер на греющемся процессоре, пока оно спит.
>синхронизация, мьютекс, семафор
>Причём тут многопоточность, блядь? Причём тут асинхронность?
Шизик, лучше скажи, когда у тебя следующий период диспансеризации? Когда ждать исчезновения твоих шизовысеров и шизобреда про борду?
И еще. Почему твой шизоглаз пал именно на шарп? Пиздуй в С-тред, стиль написания программ на котором как раз похож на твой топорный, при этом будешь мамке хвастать, что пишешь на самом производительном языке.
Лол, хоть я и не шизик, но некоторые на этом мочане меня так называли уже, поэтому отвечу...
На учёте не состою нигде, потому что аноним,
шизовысеры и так мочерация потрёт, потому что мочан,
а на шарпе уже год шкрябаю свой говнокод просто потому что борода на шарпе, блеать.
Переписывать всё это на сишечке - даже не предлагай, иначе увидишь здесь ультрашизовысеры, когда я уже - окончательно головой поеду.
>У меня простейшая задача - остановить бесконечный цикл, и возобновить его так,
>чтобы в одном потоке это было,
>и чтобы не блочилась вся программа,
>и не свистел кулер на греющемся процессоре, пока оно спит.
>>609828
>Судя по примерам кода,
>при использовании EAP на IAsyncResult BeginInvoke,
>всё равно тормозят ответ при помощи Thread.Sleep(milliseconds)
>>609913
>Thread.Sleep(milliseconds)
>симулируют долгое выполнение метода
Вот именно, что СИМУЛИРУЮТ.
В Thread.Sleep(milliseconds), походу, используется что-то вроде:
>while(!stop){}//do nothing
Поэтому оно и тормозит всю программу.
Поэтому,
>public static System.Threading.Thread thread = null;
>public static Object method(){
> thread = System.Threading.Thread.CurrentThread;
> while(true){
> #pragma warning disable 0618
> System.Threading.Thread.CurrentThread.Suspend(); //suspend the current thread.
> #pragma warning restore 0618
> //do stuff
> }
и thread.Resume() - по таймеру, где thread - это (System.Threading.Thread) System.Threading.Thread.CurrentThread;
>У меня простейшая задача - остановить бесконечный цикл, и возобновить его так,
>чтобы в одном потоке это было,
>и чтобы не блочилась вся программа,
>и не свистел кулер на греющемся процессоре, пока оно спит.
>>609828
>Судя по примерам кода,
>при использовании EAP на IAsyncResult BeginInvoke,
>всё равно тормозят ответ при помощи Thread.Sleep(milliseconds)
>>609913
>Thread.Sleep(milliseconds)
>симулируют долгое выполнение метода
Вот именно, что СИМУЛИРУЮТ.
В Thread.Sleep(milliseconds), походу, используется что-то вроде:
>while(!stop){}//do nothing
Поэтому оно и тормозит всю программу.
Поэтому,
>public static System.Threading.Thread thread = null;
>public static Object method(){
> thread = System.Threading.Thread.CurrentThread;
> while(true){
> #pragma warning disable 0618
> System.Threading.Thread.CurrentThread.Suspend(); //suspend the current thread.
> #pragma warning restore 0618
> //do stuff
> }
и thread.Resume() - по таймеру, где thread - это (System.Threading.Thread) System.Threading.Thread.CurrentThread;
Сортируешь его по value, выбираешь элемент по индексу. Всё что ниже этого индекса - количество элементов у которых value ниже чем у выбранного. Считаешь процент. Например, если из 100 элементов выбран элемент с индексом 2, значит 97% элементов имеют value ниже, чем выбранный элемент, 2% имеют value выше.
Вот так заебись, а то от рекурсивного вызова - разочек выхватил Throw StackOverFlowException, после чего, начал неистово рвать себе волосы на жопе.
Конечно, это же разные вещи.
Анон, ты сейчас глаза мне открыл. Я думал, зачем такой куцый логгер, а оно вона зачем — в линуксе же можно направить вывод логов в файл. Что-то там с stdout, но я не шарю
Сам использую serilog. Два подводных:
1) внезапно начал жрать два ядра ксенона по 20% от каждого. После того, как вычистил из проекта и вернулся к нему же — жор прекратится
2) все завязано на определённую структуру логов, но на неё забить можно
все верно, мне нужны только уже законченные игры, игры в процессе я не показываю
А не, это же метод в коре, у меня мсдн не хочет переключаться между версиями в хроме, пора переходить на Edge
да мне не особо важно было, я пока сделал конверт 32 и пошел дальше, жаль на такие мелкие вещи время тратить, а тут аноны добрые и знающие всегда подскажут, и когда подсказывают я тот костыль меняю на нормальный рабочий способ, разве плохо?
а как мне индекс моего клиента узнать? я могу выбрать его игру из массива, но какой метод использовать что бы получить индекс этой игры в массиве?
с помощью метода FindIndex
Попробуй так:
100 - ((индекс элемента + 1) / (количество элементов массива / 100))
100 - ( (70 + 1) / (150 / 100) ) = 52.66%
Element[] elements = new Element[111];
var e = elements[13];
var count = elements.Count(x => x.Value < e.Value);
var rating = (count * 100d) / elements.Length;
Ну, например, вот я хочу чтобы при имплементации моего интерфейса стрим бы были с CanRead == true, можно ли это как-то на этапе описания интерфейса сделать?
Через абстрактный класс/просто класс который наследует твой интерфейс.
спасибо тебе добрый анон, все таки Сишарп Тред лучший тред по языкам программирования на дваче, мне никогда в других тредах так быстро не отвечают
Даже вот так: https://rextester.com/ONHT63249
Чтобы был виден процесс генерации, и преобразование между символом и его кодом.
не умеющий пользоваться Random? Пошел нахуй отседова, добрый ты наш. Тебе быстро отвечают, потому что ебаные решетки учат только индусы и говностуденты шараг, нечему удивляться
Насколько востребован вообще старый MVC?
и то и другое. В перспективе на будущее конечно же кор, но можешь и на легаси попасться.
Програмач как сделать подобное? Когда в функуциях подписаны названия переменных например time?
У тебя на скриншоте Rider
Именованные параметры тут не причём кроме того, что они имеют имя, на скриншоте подсказки от JetBrains'овских штук
>JetBrains
таких петухов не знаем, у нас православная VS от мелкософта в code navigation такая функция должна быть, влень искать
Да-да, анон, конечно я от голой студии охуеваю. Хотя бы автоимпорт бы завезли бы к 20 версии
Извинись
Решарпер уже плавает по вижле уже добрых 5 лет, все никак не могут закопипастить его в плагины
вот сичас не понял, тру пацаны используют csc.exe + блокнот
>Что значит плавает?
R# самая популярная надстройка для вижлы, дауны мелкософта не могут реализовать функционал ссаной надстройки в саму вижлу. Это какой-то... позор
Я иногда диву даю, какие мелкософты дебилы. Хотят быть здесь и сейчас везде, где только можно перднуть, тем не менее забивают болт на текущих клиентов. Жаль они со своим шиндовс на коне были, так бы их уже давно похоронили
Они понемногу добавляют фичи в студию, если пользовался старыми — заметишь разницу
Но они вряд ли запилят свой "решарпер" в студию — мелкомягкие всегда давали развиваться вокруг своих продуктов другим компаниям
>всегда давали развиваться вокруг своих продуктов другим компаниям
>анальная огороженность кода
>анальные наказания за нарушение копирайта
В голос.
мелкомягкие такие уебки, что если бы не опенсоурс, они бы сорсы Core в жизне не открыли (которые сейчас чуть более, чем на половину состоят из опенсоурс кода).
Боже, сделай так, чтобы Rust захватил рыночек. Молю.
Но ссылка-то копируется. У тебя myName и name - две переменные ссылающиеся на один объект, ты меняешь name - т.е. теперь name ссылается на ивана, а myName на андрея. Ты поменял только ссылки, но не объекты. И еще, если книга не с помойки, то там еще написано, что у стринг неизменяемый тип, хотя на твой код это не влияет.
Хотел укатиться со своего фулстека на чистый бек, а нихуя, пиши сука на жаваскрипте фронт блядь
Хоть на жаву перекатывайся бобы крутить блядь
>Потому что по дефолту, если не указан модификатор, то для методов используется private, а интерфейс требует protected(pic2)/public(pic 3)
я знаю, но на 2 и 3 пик я указываю модификаторы, но все равно область видимости не позволяет мне юзать метод. В чем проблема?
>я знаю
Видимо нет.
> я указываю модификаторы
неправильные
>область видимости
при чем тут область видимости?
>В чем проблема?
В том, что ты не умеешь читать
>нужно знать помимо шарпа, если я не хочу работать с вебом
Шарп это только веб, всё остальное у С++, С или Python
ты сам написал, что интерфейс требует либо паблик либо протектед, а когда я сказал что указываю их, ты начинаешь говорить что это НИ ТЕ модификаторы
Как при помощи C# на .NET Framework 3.5
скачать файл через TOR SOCKS5 Proxy,
сделав из него HTTP-proxy,
и отправив запрос c WebClient'a?
На джаве ты фронт не попишешь гвт мертв, а вот .нет мвс из коробки даёт тебе шаблонизатор на шарпе, поэтому работодатели подразумевают что ты будешь уметь ВСЕ
+ горы легаси на разоре, ага
В шарпе нет поддержки SOCKS прокси, придется либо самому писать, либо качать стороннюю библиотеку
>работодатели
эти РАБотодатели из воздуха берут требования и не знают своего штата? Просто .NET-чики такие куколды, что проглотили Razor, а вместе с ним и Jquery, JS, React/Angular сразу став Full stack (сами того не осознавая).
Рыночек .NET-а гнилой, спроса мало, потребности много. Сейчас долбоебы готовы за бесплатно работать (в прямом смысле), только чтобы влезть, что говорить тогда о фронте на .NET? Но это еще не самое дно - ты еще должен уметь IIS настроить, Докер вертеть (деплой в том числе). И не забывай, что код должен быть покрыт юнит тестами (без хуйни, настоящими). Завтра моча в голову ударит - могут на Mongo перекинуть, т.к. MsSql дохуя как стоит, могут вообще нахуй выкинуть.
Сейчас в любую вакансию смотришь - WebAPI+JS+Framework. Это в вакансиях .NET КАРЛ.
Я уже посматриваю, куда выкатиться можно из этой помойки ебучей, а дурачки тут орут, как охуенны решеточки. Язык то может и не плох, но то, что творится в СНГ рынке на аутстафе - это пиздец и ад
Двачую
Влез на свою беду полгода назад, мучаюсь с ебучим жкури теперь
Хочу свалить, но нужно переучиваться и терять в ЗП, пиздец просто
В общем, кто поможет сделать 2 лабы?
>Это в вакансиях .NET КАРЛ.
В вакансиях про розовых пони пишут.
>WebAPI+JS+Framework
Приходишь такой на проект и говна наворачиваешь:
- нет никаких вебапи
- жс код пишет другая команда
- злобный архитектор запрещает использовать энтити фреймворк
- юнит тесты пишутся по праздникам и вообще, это интеграционные тесты
Если хоть один пункт не совпадает, то, голубчик, твой проект никому ненужная хуйня в вакууме.
>творится в СНГ рынке на аутстафе
Как же хорошо, что я не в снг и не на аутстафе.
Бампану вопрос.
пошел нахуй, мразь
>>618363
>В вакансиях про розовых пони пишут.
А языком ты спрашиваешь реальный стэк у задрота на тех. собесе. Не нравиться - идешь нахуй домой
>Приходишь такой на проект и говна наворачиваешь:
"Короче это, тут немецкая GPS апликуха, нужно админку им сначала подпилить. Да там хуйня, Jquery и Vanialla JS. Да это изи все, знаешь .NET, то что у них - раз плюнуть. Допилил? Красава. У них вообщем в стафе есть бэкер, но им еще нужно UI подправить, там чуть чуть. Да это заказчик сопли жевал 3 часа в конфе, там на React-е в JSX пару компонентов выкатить и все. Ты кстати с докером работал? Вот как раз экспу набьешь - они хотят реализовать компоузы. А чего ты сидишь, уже справился? Там дверь скрипит, не можешь петли смазать?" - Жизнь .NET долбоеба разработчика
>как же хорошо, что я не в снг и не на аутстафе.
СНГшный раб, хуже собаки за бугром. Пиздел с одним датчанином - .NETчик фул стек. Мужику 40 лет, за всю жизнь работал на 3 проектах (называет себя фрилансером). Рассказал мне прохладную историю, что у бургов локальные чаты (в Дании так точно), где хантят только своих и даже не в офис, а на удаленку. Спрашивал насчет нашего брата - говорит никто связываться не хочет, что то на уровне Раджешей Кутропали или даже выше.
Короче учите дальше свои решеточки, будете мне кофе носить
Ошибка постинга: Bad Gateway
Примерная операция:
//List<KeyValuePair<key, value>>
var values = path.Value.Operations.Select(pair => pair).ToList();
Теперь мне надо в этом списке каждый key в KeyValuePair изменить и вернуть на место как быть?
KeyValuePair не предоставляет возможности менять свои поля плюс это структура. Поэтому создавай новую с нужными значениями и заменяй ей старую.
а если Dictionary? Мне нужно взять все его KeyValuePair превратить в лист, это лист по своему отсортировать и засунуть опять в Dictionary. Это возможно только через новый Dictionary?
Используй tcp binding в вцф или вообще забудь про вцф. Проблема у тебя в чем-то другом.
Ты лучше скажи, какую задачу решаешь, а то твои способы отдают наркоманией. Ты же знаешь, что словарь не гарантирует сохранения порядка элементов? Если тебе нужен отсортированный словарь, то и бери SortedDictionary.
Ох, как бы описать задачу, там короче пиздец. Я должен отсортировать и дать выбор сортировки методов в swagger.
То есть я через IDocumentFilter беру все вызываемые web api сортирую каждую группу по следующему принципу: Get - Post - Put - Delete это базовый пример, так же можно давать выбор в каком порядке сортировать. И сортирую Словарь где ключ- http method, а значение сама строка вызова web api. Потом это все запихивается в лист со словарями и отдаю в swagger.
Щя набросаю код и скину
Ого, спасибо большое. Прям то что нужно
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат https://2ch.hk/pr/res/1618705.html (М)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Перекат >>1618705 (OP)
Пока не въехал. У тебя метод принимает, грубо говоря, список словарей. В словаре по четыре запроса (по одному каждого типа) и в списке отдельный словарь на каждый апи метод, правильно?
Верно. Только в словаре может быть и 1 и 2 и 3, может на запрос быть только GET, а может и get и update. А так да все верно
еще не проверял, но вроде оно, если есть варианты можешь скинуть
Если кому-то нужна реализация выборки, то вот:
private int GetOrder(OperationType operationType)
{
if (!example.Contains(operationType)) return 0;
return example.IndexOf(operationType) + 1;
}
example это лист с operationType
лол, это все вообще можно сократить до T и назвать ByModelComparer
Куда перекатываться собираешься? В джаву?
Я другой анон. Частично соглашусь, про СНГ, необъятный объем требований в вакансия, но так у всех вроде.
Ибо это требования пишут хантеры, они чуть услышали что докер нужен, это ведь круто, один раз сделал образ и разворачиваешь где хочешь а что на самом деле творится при больших проектах, ни слова ни духа. Вот и пишут.
А на деле тебе же берет к себе один из отделов: бэк, десктоп и т.п. и под конкретную задачу пишешь.
Только проблема в том что, c# силен только в бэке, вот и пишут js Angular, WebAPI mssql и т.д но это не значит что ты должен знать все.
Знаешь Dapper WebAPI и mssql, хорошо скорее всего тебя возьмут с работой с бд
но до бд никто тебя не допустит, я так начинал, с NLog "помогал".
Знаешь немного js - замыкание, пробегался глазами по ecmascript, знаешь что там с angular и webapi есть шанс попасть в бэк и дадут помогать сопровождать api. Ведь намного лучше если ты знаешь что, как и почему отдавать на фронт такие данные.
Так что подведя итоги можно сказать что c# переживает не лучшие времена, но я надеюсь на тенденцию майков развивать шарп в web и мы займем свое место, хотя бы такое.
А такой большой объем требований это лишь рекомендации, ни разу у меня не спрашивали вообще все.
Мне нужно сделать вывод матрицы размерами n на n, в которой были бы случайные числа.
Я создал цикл внутри цикла (красный). Тот, что красный выводит случайные числа, а чёрный просто повторяет его n количество раз.
В итоге получается нечто вроде
13 23 45 14
13 23 45 14
13 23 45 14
13 23 45 14
Я пытался найти как можно сделать, чтобы он каждый раз давал случайные числа, но не нашёл. Пытался как-то сброс делать через if/else, но тоже не получилось
Как можно реализовать задачу? Я ещё чайник в C#
https://dotnetfiddle.net/qMZfuW - вот сам код (в онлайн компиляторе почему-то не работает, но в Visual Studio запускается)
https://dotnetfiddle.net/qMZfuW смог сделать вот так, правда, там вторая строчка ноль всегда почему-то
Как можно найти минимальный элемент среди элементов, расположенных ниже главной диагонали, найти максимальный элемент, среди элементов расположенных выше побочной диагонали? Потом ещё найденные минимальный и максимальный элементы поменять местами и вывести их индексы.
https://dotnetfiddle.net/qMZfuW - попытался начать, но там уже почему-то ошибку писало
Вы видите копию треда, сохраненную 6 апреля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.